<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Veljko</title>
    <description>The latest articles on DEV Community by Veljko (@the-vs).</description>
    <link>https://dev.to/the-vs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1085319%2F2c614a84-4483-4c63-b05e-4e27bd22edcb.jpg</url>
      <title>DEV Community: Veljko</title>
      <link>https://dev.to/the-vs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/the-vs"/>
    <language>en</language>
    <item>
      <title>PUT vs PATCH</title>
      <dc:creator>Veljko</dc:creator>
      <pubDate>Thu, 24 Apr 2025 14:43:57 +0000</pubDate>
      <link>https://dev.to/the-vs/patch-vs-put-5bb5</link>
      <guid>https://dev.to/the-vs/patch-vs-put-5bb5</guid>
      <description>&lt;p&gt;&lt;code&gt;PUT&lt;/code&gt; and &lt;code&gt;PATCH&lt;/code&gt; are &lt;code&gt;HTTP&lt;/code&gt; methods used to update a resource. They are both for updating a resource, yet they differ in how they apply updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  PUT
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;PUT&lt;/code&gt; &lt;em&gt;replaces&lt;/em&gt; the entire resource with new values, it overwrites all fields.&lt;/p&gt;

&lt;p&gt;Behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the resource exists, it is completely replaced with the new version, it getts overwritten.&lt;/li&gt;
&lt;li&gt;If a field is missing in the request, it gets removed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;p&gt;Imagine you have a user resource with this initial data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"firstName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"John"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"lastName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Doe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"age"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"john@doe.com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And I want to change the age and email. So, we send the following PUT request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;{
  "age": 20,
  "email": "john.new@doe.com"
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The updated resource will now be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"age"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"john.new@doe.com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;firstName&lt;/code&gt; and &lt;code&gt;lastName&lt;/code&gt; fields got deleted. Since in our &lt;strong&gt;PUT request&lt;/strong&gt; we included only &lt;code&gt;age&lt;/code&gt; and &lt;code&gt;email&lt;/code&gt; fields (since those are the only ones we need to update), those got overwritten with new values, while the missing ones got removed.&lt;/p&gt;

&lt;h2&gt;
  
  
  PATCH
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;PATCH&lt;/code&gt; method updates only the &lt;em&gt;specified fields&lt;/em&gt; of a resource without touching the others.&lt;/p&gt;

&lt;p&gt;Behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only the provided fields are updated.&lt;/li&gt;
&lt;li&gt;Missing fields remain unchanged.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As opposed to &lt;code&gt;PUT&lt;/code&gt; method, this one doesn't remove the missing fields, just updates the specified ones, whereas &lt;code&gt;PUT&lt;/code&gt; overwrites the specified and removes missing ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;p&gt;Let's take the same example as before, intial data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"firstName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"John"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"lastName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Doe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"age"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"john@doe.com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same request, only this time we're using &lt;code&gt;PATCH&lt;/code&gt; method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;{
  "age": 20,
  "email": "john.new@doe.com"
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"firstName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"John"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"lastName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Doe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"age"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"john.new@doe.com"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;PATCH&lt;/code&gt; method updated the specified fields with new values without touching other fields that weren't specified in the request, whereas &lt;code&gt;PUT&lt;/code&gt; would've deleted those.&lt;/p&gt;

&lt;h2&gt;
  
  
  PATCH vs PUT
&lt;/h2&gt;

&lt;p&gt;When updating data via an API, should you use &lt;code&gt;PUT&lt;/code&gt; or &lt;code&gt;PATCH&lt;/code&gt;? While both modify resources, they work differently. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;PUT&lt;/code&gt; &lt;strong&gt;replaces the entire resource&lt;/strong&gt;, &lt;strong&gt;removing unspecified fields&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PATCH&lt;/code&gt; &lt;strong&gt;updates only specific fields&lt;/strong&gt;, &lt;strong&gt;leaving the rest untouched&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If using &lt;code&gt;PUT&lt;/code&gt;, you're forced to send a request with full resource, otherwise unused ones will be removed.&lt;br&gt;
&lt;code&gt;PATCH&lt;/code&gt; is usually safer since it won’t accidentally remove existing fields.&lt;/p&gt;

&lt;h3&gt;
  
  
  When to use which?
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;PUT&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Updating an entire object&lt;/strong&gt;: If you're sending a complete update (e.g., replacing an entire profile).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replacing an existing resource&lt;/strong&gt;: If you expect the resource to be fully refreshed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ensuring consistency&lt;/strong&gt;: If you want a predictable, clean state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;PATCH&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Making minor changes&lt;/strong&gt;: If you only need to update one or a few fields.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preserving existing data&lt;/strong&gt;: When you don’t want to overwrite fields unnecessarily.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reducing bandwidth usage&lt;/strong&gt;: If you want a more efficient request.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;PUT&lt;/th&gt;
&lt;th&gt;PATCH&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Update Type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full replacement&lt;/td&gt;
&lt;td&gt;Partial update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fields required?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yes, all fields must be sent&lt;/td&gt;
&lt;td&gt;No, only changed fields are sent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;If a field is missing?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;It gets removed&lt;/td&gt;
&lt;td&gt;It stays unchanged&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Larger (sends full resource)&lt;/td&gt;
&lt;td&gt;Smaller (sends only changes)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best Use Case&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;When you want to replace the entire resource&lt;/td&gt;
&lt;td&gt;When you only need to update specific fields&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>update</category>
      <category>http</category>
      <category>put</category>
      <category>patch</category>
    </item>
    <item>
      <title>^ (Caret) and ~ (Tilde) in package.json</title>
      <dc:creator>Veljko</dc:creator>
      <pubDate>Thu, 06 Mar 2025 12:09:59 +0000</pubDate>
      <link>https://dev.to/the-vs/-and-in-packagejson-p64</link>
      <guid>https://dev.to/the-vs/-and-in-packagejson-p64</guid>
      <description>&lt;p&gt;You must have seen at least once &lt;code&gt;package.json&lt;/code&gt; file throughout your developer journey.&lt;br&gt;
&lt;code&gt;package.json&lt;/code&gt; is a file that contains information about a project, among which are &lt;em&gt;project dependencies&lt;/em&gt; and their corresponding versions.&lt;br&gt;
But then, you must have noticed that some versions have &lt;code&gt;^&lt;/code&gt; (caret) or &lt;code&gt;~&lt;/code&gt; (tilde) in front of them. What are they for and what do they mean?&lt;/p&gt;
&lt;h3&gt;
  
  
  REMINDER: x.x.x format
&lt;/h3&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"pg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"8.7.3"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;x.x.x&lt;/code&gt; format you see in version numbers follows this structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MAJOR.MINOR.PATCH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So, in the example above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;8&lt;/code&gt; - MAJOR&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;7&lt;/code&gt; - MINOR&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;3&lt;/code&gt; - PATCH&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;~&lt;/code&gt; (Tilde) - Patch Updates
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Allows only &lt;strong&gt;patch updates within the same minor version&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"mongoose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"~6.2.2"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Allows updates up to &lt;code&gt;6.2.x&lt;/code&gt;, but not &lt;code&gt;6.3.0&lt;/code&gt;.&lt;br&gt;
Here, it will install new versions like &lt;code&gt;6.2.3&lt;/code&gt;, &lt;code&gt;6.2.7&lt;/code&gt;, &lt;code&gt;6.2.9&lt;/code&gt;, but it &lt;strong&gt;will not&lt;/strong&gt; install &lt;code&gt;6.3.0&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why use &lt;code&gt;~&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;For backend libraries, especially security-related ones, developers often want to allow only patch updates to avoid breaking API changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;^&lt;/code&gt; (Caret) - Minor and Patch Updates
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Allows updates only &lt;strong&gt;within the same major version&lt;/strong&gt;, meaning it allows only minor and patch updates.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^18.2.0"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Allows &lt;code&gt;18.2.0&lt;/code&gt; up to &lt;code&gt;18.x.x&lt;/code&gt;, but not &lt;code&gt;19.0.0&lt;/code&gt;.&lt;br&gt;
Here it will install new versions like &lt;code&gt;18.2.3&lt;/code&gt;, &lt;code&gt;18.3.4&lt;/code&gt;, &lt;code&gt;18.5.2&lt;/code&gt;, &lt;code&gt;18.8.6&lt;/code&gt;, but it &lt;strong&gt;will not&lt;/strong&gt; install &lt;code&gt;19.0.0&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why use &lt;code&gt;^&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;Frontend libraries frequently release minor updates, so &lt;code&gt;^&lt;/code&gt; helps get the latest bug fixes and performance improvements without breaking the major version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symbol&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Allowed Updates&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;^&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;^4.17.21&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;4.17.21&lt;/code&gt; → &lt;code&gt;4.x.x&lt;/code&gt; (not &lt;code&gt;5.0.0&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;~&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;~4.17.1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;4.17.1&lt;/code&gt; → &lt;code&gt;4.17.x&lt;/code&gt; (not &lt;code&gt;4.18.0&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>json</category>
      <category>packagejson</category>
      <category>programming</category>
      <category>basic</category>
    </item>
  </channel>
</rss>
