<?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: Indian Modassir</title>
    <description>The latest articles on DEV Community by Indian Modassir (@indianmodassir).</description>
    <link>https://dev.to/indianmodassir</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%2F3422766%2F7c5845cd-65ac-4547-a461-ea366fe4f422.jpg</url>
      <title>DEV Community: Indian Modassir</title>
      <link>https://dev.to/indianmodassir</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/indianmodassir"/>
    <language>en</language>
    <item>
      <title>PGI - Payment Getaway Integration</title>
      <dc:creator>Indian Modassir</dc:creator>
      <pubDate>Sun, 19 Oct 2025 07:00:47 +0000</pubDate>
      <link>https://dev.to/indianmodassir/pgi-payment-getaway-integration-b65</link>
      <guid>https://dev.to/indianmodassir/pgi-payment-getaway-integration-b65</guid>
      <description>&lt;p&gt;PGI is a PHP library that provides ready-to-use integrations for multiple payment gateways.&lt;/p&gt;

&lt;h3&gt;
  
  
  Composer Installation
&lt;/h3&gt;

&lt;p&gt;Installation is super-easy via &lt;a href="https://getcomposer.org/" rel="noopener noreferrer"&gt;Composer&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require lazervel/pgi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OR:&lt;/p&gt;

&lt;p&gt;Click to &lt;a href="https://packagist.org/packages/lazervel/pgi" rel="noopener noreferrer"&gt;Browse package&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Payment Integrations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Razorpay Integration&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Razorpay Integration
&lt;/h2&gt;

&lt;p&gt;Start accepting domestic and international payments from customers on your website using the Razorpay Payment Gateway. Razorpay has developed the Standard Checkout method and manages it. You can configure payment methods, orders, company logo and also select custom colour based on your convenience. Razorpay supports these payment methods and international currencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Lazervel\PGI\Razorpay&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'vendor/autoload.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;$rzp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Razorpay&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create an Order in Server
&lt;/h3&gt;

&lt;p&gt;In the sample app, the index.php file contains the code for order creation using Orders API.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$rzp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;order&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'INR'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Error Handling&lt;/span&gt;
&lt;span class="nv"&gt;$rzp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;print_r&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;die&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Verify Payment Signature
&lt;/h3&gt;

&lt;p&gt;This is a mandatory step that allows you to confirm the authenticity of the details returned to the checkout for successful payments.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;
&lt;span class="nv"&gt;$orderId&lt;/span&gt;   &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_SESSION&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'razorpay_order_id'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;   &lt;span class="c1"&gt;// Where you stored&lt;/span&gt;
&lt;span class="nv"&gt;$paymentId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_SESSION&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'razorpay_payment_id'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// Where you stored&lt;/span&gt;
&lt;span class="nv"&gt;$signature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_SESSION&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'razorpay_signature'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;  &lt;span class="c1"&gt;// Where you stored&lt;/span&gt;

&lt;span class="c1"&gt;// All parameter is required&lt;/span&gt;
&lt;span class="nv"&gt;$rzp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;verifySignature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$orderId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$paymentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$signature&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Error Handling&lt;/span&gt;
&lt;span class="nv"&gt;$rzp&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$payment&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Success payment&lt;/span&gt;
  &lt;span class="nb"&gt;print_r&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$payment&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Failed payment&lt;/span&gt;
  &lt;span class="k"&gt;die&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;Licensed Under &lt;a href="https://dev.toLICENSE"&gt;MIT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copyright (c) 2025 &lt;a href="https://github.com/indianmodassir" rel="noopener noreferrer"&gt;Indian Modassir&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;Pull requests are welcome! For major changes, please open an issue first to discuss what you would like to change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/lazervel/path/issues" rel="noopener noreferrer"&gt;Report issue&lt;/a&gt; and &lt;a href="https://github.com/lazervel/path/pulls" rel="noopener noreferrer"&gt;send Pull Request&lt;/a&gt; in the &lt;a href="https://github.com/lazervel/path" rel="noopener noreferrer"&gt;main Lazervel repository&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>programming</category>
      <category>webdev</category>
      <category>pgi</category>
    </item>
    <item>
      <title>Event-driven cookie manager for the modern web.</title>
      <dc:creator>Indian Modassir</dc:creator>
      <pubDate>Sun, 31 Aug 2025 18:05:43 +0000</pubDate>
      <link>https://dev.to/indianmodassir/event-driven-cookie-manager-for-the-modern-web-2pab</link>
      <guid>https://dev.to/indianmodassir/event-driven-cookie-manager-for-the-modern-web-2pab</guid>
      <description>&lt;p&gt;
  &lt;a href="https://github.com/jsvibe" rel="noopener noreferrer"&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlygveqdaj5k1ow0p20d.png" alt="Cookie Logo" width="800" height="800"&gt;
  &lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Lightweight, event-driven cookie manager for parsing, setting, and tracking cookies with ease.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;To include cookie-events in &lt;a href="https://nodejs.org/" rel="noopener noreferrer"&gt;Node&lt;/a&gt;, first install with npm.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;cookie-events
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to build cookie-events
&lt;/h2&gt;

&lt;p&gt;Clone a copy of the main cookie-events git repo by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git://github.com/jsvibe/cookie-events.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Including cookie-events
&lt;/h2&gt;

&lt;p&gt;Below are some of the most common ways to include cookie-events.&lt;/p&gt;

&lt;h3&gt;
  
  
  Browser
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CDN Link&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/cookie-events@1.0.0/lib/cookie.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can add the script manually to your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"cookie.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ESM
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;cookieEvents&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cookie-events&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;cookieEvents&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Webpack / Browserify / Babel
&lt;/h3&gt;

&lt;p&gt;There are several ways to use &lt;a href="https://webpack.js.org/" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt;, &lt;a href="http://browserify.org/" rel="noopener noreferrer"&gt;Browserify&lt;/a&gt; or &lt;a href="https://babeljs.io/" rel="noopener noreferrer"&gt;Babel&lt;/a&gt;. For more information on using these tools, please refer to the corresponding project's documentation. In the script, including cookie-events will usually look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;cookieEvents&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cookie-events&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;cookieEvents&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Methods or Features
&lt;/h3&gt;

&lt;p&gt;This library provides a robust and modern API for managing browser cookies, with support for creation, retrieval, updates, deletion, and real-time event handling.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Methods&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;set&lt;/td&gt;
&lt;td&gt;Creates a new cookie with optional attributes (expires, path, domain, etc).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;getAll&lt;/td&gt;
&lt;td&gt;Returns all cookies as a key-value object.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;store&lt;/td&gt;
&lt;td&gt;Exposes the internal cookie store object.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;param&lt;/td&gt;
&lt;td&gt;Converts cookies into a query-style string (e.g., &lt;code&gt;name=John&amp;amp;age=30&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get&lt;/td&gt;
&lt;td&gt;Retrieves the value of a specific cookie by key.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;update&lt;/td&gt;
&lt;td&gt;Updates an existing cookie’s value and attributes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;json&lt;/td&gt;
&lt;td&gt;Converts all cookies into a JSON string.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UTC&lt;/td&gt;
&lt;td&gt;Converts a custom date string into a UTC-formatted string.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;parse&lt;/td&gt;
&lt;td&gt;Returns cookies as an array of &lt;code&gt;[key, value]&lt;/code&gt; pairs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;has&lt;/td&gt;
&lt;td&gt;Checks if a cookie with the given key exists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;remove&lt;/td&gt;
&lt;td&gt;Deletes a specific cookie by setting expiry in the past.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;clear&lt;/td&gt;
&lt;td&gt;Asynchronously clears all cookies using the Cookie Store API.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;on&lt;/td&gt;
&lt;td&gt;Registers event listeners for cookie changes (insert, update, delete, etc).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  set
&lt;/h3&gt;

&lt;p&gt;Creates or overwrites a cookie with optional attributes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;key&lt;/code&gt; &lt;em&gt;(String)&lt;/em&gt; Name of the cookie.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;value&lt;/code&gt; &lt;em&gt;(Any)&lt;/em&gt; Value to store (objects/arrays auto-serialized as JSON).
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;expires&lt;/code&gt; &lt;em&gt;(String | Number)&lt;/em&gt; Expiry date (UTC string) or max-age in seconds.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;path&lt;/code&gt; &lt;em&gt;(String, optional)&lt;/em&gt; Path scope (default: &lt;code&gt;/&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;domain&lt;/code&gt; &lt;em&gt;(String, optional)&lt;/em&gt; Domain scope.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;secure&lt;/code&gt; &lt;em&gt;(Boolean, optional)&lt;/em&gt; If true, cookie only sent over HTTPS.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SameSite&lt;/code&gt; &lt;em&gt;(String, optional)&lt;/em&gt; &lt;code&gt;"Strict"&lt;/code&gt;, &lt;code&gt;"Lax"&lt;/code&gt;, or &lt;code&gt;"None"&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;UTC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2025-12-31 23:59:59&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  getAll
&lt;/h3&gt;

&lt;p&gt;Returns all cookies as a key-value object.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAll&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Output: e.g, { theme: "dark", user: { id: 1 } }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  store
&lt;/h3&gt;

&lt;p&gt;Exposes the internal cookie store object (for debugging/inspection).&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  param
&lt;/h3&gt;

&lt;p&gt;Converts cookies into a query-style string.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;param&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Output: e.g, "theme=dark&amp;amp;user=%7B%22id%22%3A1%7D"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  get
&lt;/h3&gt;

&lt;p&gt;Retrieves the value of a cookie by its name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;key&lt;/code&gt; &lt;em&gt;(String)&lt;/em&gt; Cookie name.&lt;/li&gt;
&lt;li&gt;Returns: Value &lt;em&gt;(Any)&lt;/em&gt; or &lt;code&gt;null&lt;/code&gt; if not found.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// "dark"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  update
&lt;/h3&gt;

&lt;p&gt;Updates the value of an existing cookie. Throws error if cookie does not exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;key&lt;/code&gt; &lt;em&gt;(String)&lt;/em&gt; Name of the cookie.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;value&lt;/code&gt; &lt;em&gt;(Any)&lt;/em&gt; Value to store (objects/arrays auto-serialized as JSON).
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;expires&lt;/code&gt; &lt;em&gt;(String | Number)&lt;/em&gt; Expiry date (UTC string) or max-age in seconds.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;path&lt;/code&gt; &lt;em&gt;(String, optional)&lt;/em&gt; Path scope (default: &lt;code&gt;/&lt;/code&gt;).
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;domain&lt;/code&gt; &lt;em&gt;(String, optional)&lt;/em&gt; Domain scope.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;secure&lt;/code&gt; &lt;em&gt;(Boolean, optional)&lt;/em&gt; If true, cookie only sent over HTTPS.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SameSite&lt;/code&gt; &lt;em&gt;(String, optional)&lt;/em&gt; &lt;code&gt;"Strict"&lt;/code&gt;, &lt;code&gt;"Lax"&lt;/code&gt;, or &lt;code&gt;"None"&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;light&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;UTC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-01-01 00:00:00&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  json
&lt;/h3&gt;

&lt;p&gt;Converts all cookies into a JSON string.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt; &lt;span class="c1"&gt;// Output: e.g, {"theme":"dark","user":{"id":1}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  UTC
&lt;/h3&gt;

&lt;p&gt;Converts a date string into UTC format (for &lt;code&gt;expires&lt;/code&gt; attribute).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;date&lt;/code&gt; &lt;em&gt;(String)&lt;/em&gt; Example: &lt;code&gt;"2025-12-31 23:59:59"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Returns: &lt;code&gt;String&lt;/code&gt; UTC date string.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;exp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;UTC&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2025-12-31 23:59:59&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;session&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;active&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  parse
&lt;/h3&gt;

&lt;p&gt;Parses cookies into an array of &lt;code&gt;[key, value]&lt;/code&gt; pairs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Returns: &lt;code&gt;Array&lt;/code&gt; Example: &lt;code&gt;[["theme","dark"], ["user",{id:1}]]&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  has
&lt;/h3&gt;

&lt;p&gt;Checks if a cookie exists.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Returns: &lt;code&gt;boolean&lt;/code&gt; Return true if exists. Otherwise false&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Theme cookie exists!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  remove
&lt;/h3&gt;

&lt;p&gt;Deletes a specific cookie by setting its expiry to the past.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;key&lt;/code&gt; &lt;em&gt;(String)&lt;/em&gt; The name of the cookie to remove.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;path&lt;/code&gt; &lt;em&gt;(String)&lt;/em&gt; The path the cookie was set on. Default is "/".&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;domain&lt;/code&gt; &lt;em&gt;(String)&lt;/em&gt; The domain the cookie was set on.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;theme&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  clear
&lt;/h3&gt;

&lt;p&gt;Asynchronously removes all cookies using the Cookie Store API.&lt;/p&gt;

&lt;p&gt;⚠️ Works only in secure contexts (HTTPS) and supported browsers.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  on
&lt;/h3&gt;

&lt;p&gt;Registers event listeners for cookie changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;types&lt;/code&gt; &lt;em&gt;(String)&lt;/em&gt; Space-separated events (&lt;code&gt;insert&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;clear&lt;/code&gt;, &lt;code&gt;change&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;callback&lt;/code&gt; &lt;em&gt;(Function)&lt;/em&gt; Called when event occurs.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;Cookie&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;insert update delete&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Cookie event:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;changed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;deleted&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Supported Events
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;insert&lt;/code&gt; → A new cookie was added.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;update&lt;/code&gt; → An existing cookie was updated.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;delete&lt;/code&gt; → A cookie was removed.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;clear&lt;/code&gt; → All cookies were cleared.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;change&lt;/code&gt; → Fired on any cookie change.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;MIT License © 2025 &lt;a href="https://github.com/indianmodassir" rel="noopener noreferrer"&gt;Indian Modassir&lt;/a&gt;&lt;br&gt;&lt;br&gt;
See &lt;a href="https://dev.toLICENSE"&gt;LICENSE&lt;/a&gt; for details.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contributions
&lt;/h2&gt;

&lt;p&gt;Pull requests, bug reports, and feedback are welcome!&lt;br&gt;&lt;br&gt;
Visit the &lt;a href="https://github.com/jsvibe/cookie-events" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt; to contribute.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>cookie</category>
    </item>
    <item>
      <title>A lightweight Hindi/English virtual keyboard UI for web applications.</title>
      <dc:creator>Indian Modassir</dc:creator>
      <pubDate>Thu, 28 Aug 2025 04:31:10 +0000</pubDate>
      <link>https://dev.to/indianmodassir/a-lightweight-hindienglish-virtual-keyboard-ui-for-web-applications-1jfc</link>
      <guid>https://dev.to/indianmodassir/a-lightweight-hindienglish-virtual-keyboard-ui-for-web-applications-1jfc</guid>
      <description>&lt;h2&gt;
  
  
  ✨ Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🖊️ Hindi + English typing support
&lt;/li&gt;
&lt;li&gt;🎨 Light / Dark / System theme support with variants
&lt;/li&gt;
&lt;li&gt;🖥️ On-screen draggable keyboard (movable dialog)
&lt;/li&gt;
&lt;li&gt;🔀 Language switch (EN ⇄ HI)
&lt;/li&gt;
&lt;li&gt;⌨️ Special keys (Shift, Caps, Alt, Backspace, Enter, etc.)
&lt;/li&gt;
&lt;li&gt;📦 Zero dependency, pure JavaScript&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;vkbd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or via yarn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn add vkbd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Including vkbd
&lt;/h2&gt;

&lt;p&gt;Below are some of the most common ways to include vkbd.&lt;/p&gt;

&lt;h3&gt;
  
  
  Browser
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CDN Link&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/vkbd@1.0.1/lib/vkbd.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can add the script manually to your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"vkbd.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Webpack / Browserify / Babel
&lt;/h2&gt;

&lt;p&gt;There are several ways to use &lt;a href="https://webpack.js.org/" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt;, &lt;a href="http://browserify.org/" rel="noopener noreferrer"&gt;Browserify&lt;/a&gt; or &lt;a href="https://babeljs.io/" rel="noopener noreferrer"&gt;Babel&lt;/a&gt;. For more information on using these tools, please refer to the corresponding project's documentation. In the script, including vkbd will usually look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;vkbd&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vkbd&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  API Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Usage in React
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vkbd.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;vkbd&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vkbd&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;kbdUI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;vkbd&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;// 'hi' or 'en'&lt;/span&gt;
    &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// e.g, 'light', 'dark', 'system'&lt;/span&gt;
    &lt;span class="na"&gt;themeVariant&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 1-3&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// OR&lt;/span&gt;
  &lt;span class="c1"&gt;// const kbdUI = new vkbd();&lt;/span&gt;
  &lt;span class="c1"&gt;// kbdUI.open(inputElement|selector);&lt;/span&gt;
  &lt;span class="c1"&gt;// kbdUI.close();&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Firstname&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;firstname&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;kbdUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#firstname&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;⌨️&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/span&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Surname&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;surname&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;span&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;kbdUI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#surname&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;⌨️&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/span&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Output
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhr2aw0d4n9ex14nh85k2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhr2aw0d4n9ex14nh85k2.gif" alt="Output1" width="760" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Usage in Browser
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Virtual Keyboard UI&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/vkbd@1.0.1/lib/vkbd.min.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/vkbd@1.0.1/lib/vkbd.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Keboard UI Configuration --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;kbdUI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;vkbd&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hi&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;// 'hi' or 'en'&lt;/span&gt;
      &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;light&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// e.g, 'light', 'dark', 'system'&lt;/span&gt;
      &lt;span class="na"&gt;themeVariant&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 1-3&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="c1"&gt;// OR&lt;/span&gt;
    &lt;span class="c1"&gt;// const kbdUI = new vkbd();&lt;/span&gt;
    &lt;span class="c1"&gt;// kbdUI.open(inputElement|selector);&lt;/span&gt;
    &lt;span class="c1"&gt;// kbdUI.close();&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Firstname"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"firatname"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"kbdUI.open('#firatname')"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;⌨️&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Surname"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"surname"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"kbdUI.open('#surname')"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;⌨️&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Output
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fug19xle84vdeuw0jke8g.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fug19xle84vdeuw0jke8g.gif" alt="Output2" width="760" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuration Options
&lt;/h2&gt;

&lt;p&gt;That means the user can set these options (such as &lt;code&gt;lang&lt;/code&gt;, &lt;code&gt;theme&lt;/code&gt;, &lt;code&gt;themeVariant&lt;/code&gt;) to control the keyboard’s language, theme, and style.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Default&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;lang&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;'hi'&lt;/td&gt;
&lt;td&gt;Initial language (&lt;code&gt;hi&lt;/code&gt; or &lt;code&gt;en&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;theme&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;'light'&lt;/td&gt;
&lt;td&gt;Theme: &lt;code&gt;light&lt;/code&gt;, &lt;code&gt;dark&lt;/code&gt;, &lt;code&gt;system&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;themeVariant&lt;/td&gt;
&lt;td&gt;number&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Theme style variant (1–3)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  📚 API
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;vkbd(options)&lt;/code&gt; returns a keyboard instance&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;keyboard.open(elem)&lt;/code&gt; open keyboard for given input/textarea&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;keyboard.close()&lt;/code&gt; close keyboard&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;Pull requests are welcome! For major changes, please open an issue first to discuss what you would like to change.&lt;/p&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;Licensed Under &lt;a href="https://dev.toLICENSE"&gt;MIT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copyright (c) 2025 &lt;a href="https://github.com/indianmodassir" rel="noopener noreferrer"&gt;Indian Modassir&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>ui</category>
      <category>webcomponents</category>
      <category>javascript</category>
    </item>
    <item>
      <title>fsMate A modular collection of file system utilities for Node.js</title>
      <dc:creator>Indian Modassir</dc:creator>
      <pubDate>Fri, 15 Aug 2025 20:34:56 +0000</pubDate>
      <link>https://dev.to/indianmodassir/fsmate-a-modular-collection-of-file-system-utilities-for-nodejs-172g</link>
      <guid>https://dev.to/indianmodassir/fsmate-a-modular-collection-of-file-system-utilities-for-nodejs-172g</guid>
      <description>&lt;p&gt;fsMate A modular collection of file system utilities for Node.js&lt;/p&gt;

&lt;p&gt;It simplifies working with files and directories by providing a higher-level, promise-based API for common file operations such as checking access permissions, creating files/directories, copying files, and mirroring directories.&lt;/p&gt;

&lt;h2&gt;
  
  
  See Latest Update
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;@see&lt;/code&gt; references in JSDoc comments for better documentation and navigation.&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;dirOnly&lt;/code&gt; option in &lt;code&gt;scandir()&lt;/code&gt; and &lt;code&gt;scandirSync()&lt;/code&gt; to list only directories.&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;fileOnly&lt;/code&gt; option in &lt;code&gt;scandir()&lt;/code&gt; and &lt;code&gt;scandirSync()&lt;/code&gt; to list only files.&lt;/li&gt;
&lt;li&gt;Added Third &lt;code&gt;filter&lt;/code&gt; argument in &lt;code&gt;scandir()&lt;/code&gt; and &lt;code&gt;scandirSync()&lt;/code&gt; to allow custom filtering (supports array or function).&lt;/li&gt;
&lt;li&gt;Improved &lt;code&gt;scandir()&lt;/code&gt; documentation with &lt;code&gt;@see&lt;/code&gt; reference to official docs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;See Release Notes:&lt;/strong&gt; 👉 &lt;a href="https://github.com/jsvibe/fsmate/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;CHANGELOG&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;fsmate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;Use this syntax when working in Node.js environments that follow the CommonJS module system.&lt;/p&gt;

&lt;h3&gt;
  
  
  CommonJS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fsMate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fsmate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The deprecated constants &lt;code&gt;fs.F_OK&lt;/code&gt;, &lt;code&gt;fs.R_OK&lt;/code&gt;, &lt;code&gt;fs.W_OK&lt;/code&gt;, &amp;amp; &lt;code&gt;fs.X_OK&lt;/code&gt; are not exported on Node.js v24.0.0+; please use their fs.constants equivalents.&lt;/p&gt;

&lt;h3&gt;
  
  
  ESM
&lt;/h3&gt;

&lt;p&gt;There is also an &lt;code&gt;fsmate/esm&lt;/code&gt; import, that supports both default and named exports. However, note that fs methods are not included in &lt;code&gt;fsmate/esm;&lt;/code&gt; you still need to import &lt;code&gt;fs&lt;/code&gt; and/or &lt;code&gt;fs/promises&lt;/code&gt; seperately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;fsMate&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fsmate/esm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rename&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fsmate/esm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but you probably want to just use regular &lt;code&gt;fsmate&lt;/code&gt; instead of &lt;code&gt;fsmate/esm&lt;/code&gt; for default exports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;fsMate&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fsmate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Async vs Async/Await vs Sync
&lt;/h2&gt;

&lt;p&gt;All async methods will return a promise&lt;/p&gt;

&lt;p&gt;JavaScript handles file operations in three ways: Promises run tasks in the background with &lt;code&gt;.then()&lt;/code&gt; / &lt;code&gt;.catch()&lt;/code&gt;, &lt;code&gt;async/await&lt;/code&gt; makes them look sequential, and &lt;code&gt;synchronous&lt;/code&gt; methods pause execution until the task finishes—simple and straightforward.&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fsMate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fsmate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Async with Promises:&lt;/span&gt;
&lt;span class="nx"&gt;fsMate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mirror&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/home/user/myDir&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/home/user/mirrorDir&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="c1"&gt;// With async/await:&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;mirror&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;originDir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetDir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fsMate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mirror&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;originDir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetDir&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;mirror&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/home/user/myDir&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/home/user/mirrorDir&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Sync:&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;fsMate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mirrorSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/home/user/myDir&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/home/user/mirrorDir&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Learn for more Documentation see: &lt;a href="https://github.com/jsvibe/fsmate/tree/main/doc" rel="noopener noreferrer"&gt;more&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Methods And Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Async
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/isExecutable.md" rel="noopener noreferrer"&gt;isExecutable&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Check if a file/directory has execute permissions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/isFile.md" rel="noopener noreferrer"&gt;isFile&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Check if the given path is a regular file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/isDir.md" rel="noopener noreferrer"&gt;isDir&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Check if the given path is a directory.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/isLink.md" rel="noopener noreferrer"&gt;isLink&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Check if the given path is a symbolic link.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/isReadable.md" rel="noopener noreferrer"&gt;isReadable&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Check if a file/directory has read permissions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/isWritable.md" rel="noopener noreferrer"&gt;isWritable&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Check if a file/directory has write permissions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/mkdir.md" rel="noopener noreferrer"&gt;mkdir&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Creates a directories recursively.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/mkfile.md" rel="noopener noreferrer"&gt;mkfile&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Create an empty files (or overwrite if specified).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/exists.md" rel="noopener noreferrer"&gt;exists&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Check if a file or directory exists.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/touch.md" rel="noopener noreferrer"&gt;touch&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Create a file if it doesn’t exist or update its timestamp.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/rename.md" rel="noopener noreferrer"&gt;rename&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Rename or move a file/directory.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/scandir.md" rel="noopener noreferrer"&gt;scandir&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;List files and directories in a given folder.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/remove.md" rel="noopener noreferrer"&gt;remove&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Safely remove files or directories (with rename trick).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/rm.md" rel="noopener noreferrer"&gt;rm&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Remove files or directories using native &lt;code&gt;fs.rm&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/mirror.md" rel="noopener noreferrer"&gt;mirror&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Recursively copy an entire directory tree.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/copy.md" rel="noopener noreferrer"&gt;copy&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Copy a single file with overwrite control.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/empty.md" rel="noopener noreferrer"&gt;empty&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Remove all contents inside a file or directory without deleting it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/prependFile.md" rel="noopener noreferrer"&gt;prependFile&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Add content at the beginning of a file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/readFile.md" rel="noopener noreferrer"&gt;readFile&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Read a file's content (optionally parse JSON).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/readLine.md" rel="noopener noreferrer"&gt;readLine&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Read a file line-by-line with range support.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/writeFile.md" rel="noopener noreferrer"&gt;writeFile&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Write content to a file (overwrites existing).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/appendFile.md" rel="noopener noreferrer"&gt;appendFile&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Append content to the end of a file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/dumpFile.md" rel="noopener noreferrer"&gt;dumpFile&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Atomically write a file by first writing to a temp file.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Sync
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/isExecutableSync.md" rel="noopener noreferrer"&gt;isExecutableSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync check for execute permissions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/isLinkSync.md" rel="noopener noreferrer"&gt;isLinkSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync check if path is a symbolic link.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/isFileSync.md" rel="noopener noreferrer"&gt;isFileSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync check if path is a regular file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/isDirSync.md" rel="noopener noreferrer"&gt;isDirSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync check if path is a directory.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/isReadableSync.md" rel="noopener noreferrer"&gt;isReadableSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync check for read permissions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/isWritableSync.md" rel="noopener noreferrer"&gt;isWritableSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync check for write permissions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/mkdirSync.md" rel="noopener noreferrer"&gt;mkdirSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync creates a directories recursively.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/mkfileSync.md" rel="noopener noreferrer"&gt;mkfileSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Create an empty files (or overwrite if specified).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/touchSync.md" rel="noopener noreferrer"&gt;touchSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync create/update file timestamp.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/renameSync.md" rel="noopener noreferrer"&gt;renameSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync rename or move a file/directory.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/scandirSync.md" rel="noopener noreferrer"&gt;scandirSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync list directory contents.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/removeSync.md" rel="noopener noreferrer"&gt;removeSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync safe remove (with rename trick).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/appendFileSync.md" rel="noopener noreferrer"&gt;appendFileSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync append content to a file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/emptySync.md" rel="noopener noreferrer"&gt;emptySync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync remove all contents inside a file/directory.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/mirrorSync.md" rel="noopener noreferrer"&gt;mirrorSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync recursively copy a directory tree.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/copySync.md" rel="noopener noreferrer"&gt;copySync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync copy a single file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/readFileSync.md" rel="noopener noreferrer"&gt;readFileSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Read a file's content (optionally parse JSON).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/rmSync.md" rel="noopener noreferrer"&gt;rmSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync remove file/directory using native &lt;code&gt;fs.rm&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/readLineSync.md" rel="noopener noreferrer"&gt;readLineSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync read file line-by-line.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/writeFileSync.md" rel="noopener noreferrer"&gt;writeFileSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync write content to a file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/prependFileSync.md" rel="noopener noreferrer"&gt;prependFileSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync add content at file start.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/dumpFileSync.md" rel="noopener noreferrer"&gt;dumpFileSync&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Sync atomic file write.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Other Methods
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/multiStream.md" rel="noopener noreferrer"&gt;multiStream&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Merge multiple readable streams into one.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/stringify.md" rel="noopener noreferrer"&gt;stringify&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Convert different data types to a string safely.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/tmpName.md" rel="noopener noreferrer"&gt;tmpName&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Generate a random temporary file/directory name.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/tempNam.md" rel="noopener noreferrer"&gt;tempNam&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Generate a SHA1-hash-based temp file name.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jsvibe/fsmate/blob/HEAD/doc/createInputStream.md" rel="noopener noreferrer"&gt;createInputStream&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Convert string, Buffer, or object into a readable stream.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;Pull requests are welcome! For major changes, please open an issue first to discuss what you would like to change.&lt;/p&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;Licensed Under MIT&lt;/p&gt;

&lt;p&gt;Copyright (c) 2025 &lt;a href="https://github.com/indianmodassir" rel="noopener noreferrer"&gt;Indian Modassir&lt;/a&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>filesystem</category>
      <category>webdev</category>
    </item>
    <item>
      <title>A web-based tool for developers to test APIs</title>
      <dc:creator>Indian Modassir</dc:creator>
      <pubDate>Thu, 14 Aug 2025 08:09:47 +0000</pubDate>
      <link>https://dev.to/indianmodassir/a-web-based-tool-for-developers-to-test-apis-1g6b</link>
      <guid>https://dev.to/indianmodassir/a-web-based-tool-for-developers-to-test-apis-1g6b</guid>
      <description>&lt;p&gt;A fully functional &lt;strong&gt;Postman&lt;/strong&gt; web application for API testing and development, built with PHP and modern web technologies. This project mimics the core functionalities of Postman, enabling easy creation and management of API requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create and send HTTP requests (GET, POST, PUT, DELETE, PATCH, etc.)&lt;/li&gt;
&lt;li&gt;Customize request headers and body (JSON, form-data, etc.)&lt;/li&gt;
&lt;li&gt;View response status, headers, and body&lt;/li&gt;
&lt;li&gt;Save and organize requests into collections&lt;/li&gt;
&lt;li&gt;Request history&lt;/li&gt;
&lt;li&gt;Syntax highlighting for JSON and other formats&lt;/li&gt;
&lt;li&gt;Intuitive user interface&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Technologies Used
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Composer for dependency management&lt;/li&gt;
&lt;li&gt;JavaScript, HTML5, CSS3 for frontend&lt;/li&gt;
&lt;li&gt;cURL or GuzzleHTTP for sending HTTP requests&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;PHP &amp;gt;= 7.4 (or your required PHP version)&lt;/li&gt;
&lt;li&gt;Composer installed globally (&lt;a href="https://getcomposer.org/" rel="noopener noreferrer"&gt;Get Composer&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;

&lt;p&gt;Add the package via Composer&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer create-project indianmodassir/postman
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See live Demo: &lt;a href="https://postman.42web.io" rel="noopener noreferrer"&gt;Click now&lt;/a&gt;&lt;/p&gt;

</description>
      <category>postman</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>php</category>
    </item>
    <item>
      <title>PHP Dotenv Loads environment variables</title>
      <dc:creator>Indian Modassir</dc:creator>
      <pubDate>Wed, 13 Aug 2025 19:42:18 +0000</pubDate>
      <link>https://dev.to/indianmodassir/php-dotenv-loads-environment-variables-23d0</link>
      <guid>https://dev.to/indianmodassir/php-dotenv-loads-environment-variables-23d0</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjqkw670mzxe44md1d13d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjqkw670mzxe44md1d13d.png" alt="Banner" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Loads environment variables from &lt;code&gt;.env&lt;/code&gt; to &lt;code&gt;getenv()&lt;/code&gt;, &lt;code&gt;$_ENV&lt;/code&gt; and &lt;code&gt;$_SERVER&lt;/code&gt; automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;Installation is super-easy via &lt;a href="https://getcomposer.org/" rel="noopener noreferrer"&gt;Composer&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require lazervel/dotenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or add it by hand to your &lt;code&gt;composer.json&lt;/code&gt; file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Lazervel\Dotenv\Dotenv&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'vendor/autoload.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If already .env file existing on current directory&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$dotenv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Dotenv&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;__DIR__&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$dotenv&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If already .env file existing on current directory without throwing error&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$dotenv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Dotenv&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;__DIR__&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$dotenv&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;safeLoad&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If already .env file existing on current directory&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$dotenv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Dotenv&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;__DIR__&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'myconfig.env'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$dotenv&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Loads multiple &lt;code&gt;.env&lt;/code&gt; files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$dotenv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Dotenv&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;__DIR__&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'.env.local'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.env.example'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.env'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$dotenv&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All of the defined variables are now available in the &lt;code&gt;$_ENV&lt;/code&gt; and &lt;code&gt;$_SERVER&lt;/code&gt; super-globals.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$s3_bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_ENV&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'S3_BUCKET'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nv"&gt;$s3_bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_SERVER&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'S3_BUCKET'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Nesting Variables
&lt;/h2&gt;

&lt;p&gt;It's possible to nest an environment variable within another, useful to cut down on repetition.&lt;/p&gt;

&lt;p&gt;This is done by wrapping an existing environment variable in &lt;code&gt;${…}&lt;/code&gt; e.g.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="no"&gt;BASE_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/var/webroot/project-root"&lt;/span&gt;
&lt;span class="no"&gt;CACHE_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"${BASE_DIR}/cache"&lt;/span&gt;
&lt;span class="no"&gt;TMP_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"${BASE_DIR}/tmp"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Requiring Variables to be Set
&lt;/h2&gt;

&lt;p&gt;PHP dotenv has built in validation functionality, including for enforcing the presence of an environment variable. This is particularly useful to let people know any explicit required variables that your app will not work without.&lt;/p&gt;

&lt;p&gt;You can use a single string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$dotenv&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;required&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'DATABASE_DSN'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or an array of strings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nv"&gt;$dotenv&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;required&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'DB_HOST'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'DB_NAME'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'DB_USER'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'DB_PASS'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Security
&lt;/h2&gt;

&lt;p&gt;If you discover a security vulnerability within this package, All security vulnerabilities will be promptly addressed. You may view our full security policy &lt;a href="https://github.com/lazervel/dotenv/security/policy" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;PHP dotenv is licensed under &lt;a href="https://github.com/lazervel/dotenv/blob/main/LICENSE" rel="noopener noreferrer"&gt;MIT License&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>php</category>
      <category>webdev</category>
      <category>dotenv</category>
      <category>lazervel</category>
    </item>
    <item>
      <title>Quanter A pure-JavaScript CSS Selector Engine</title>
      <dc:creator>Indian Modassir</dc:creator>
      <pubDate>Tue, 12 Aug 2025 20:26:56 +0000</pubDate>
      <link>https://dev.to/indianmodassir/quanter-a-pure-javascript-css-selector-engine-361b</link>
      <guid>https://dev.to/indianmodassir/quanter-a-pure-javascript-css-selector-engine-361b</guid>
      <description>&lt;p&gt;A Pure-JavaScript, CSS selector engine designed to be easily select DOM-Elements.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/jsvibe/quanter/wiki/#browsers" rel="noopener noreferrer"&gt;Browser support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to install Quanter
&lt;/h2&gt;

&lt;p&gt;To include Quanter in &lt;a href="https://nodejs.org/" rel="noopener noreferrer"&gt;Node&lt;/a&gt;, first install with npm.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;quanter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to build Quanter
&lt;/h2&gt;

&lt;p&gt;Clone a copy of the main Sizzle git repo by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git://github.com/jsvibe/quanter.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the &lt;code&gt;quanter/dist&lt;/code&gt; folder you will find build version of sizzle along with the minified copy and associated map file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Including Quanter
&lt;/h2&gt;

&lt;p&gt;Below are some of the most common ways to include Quanter.&lt;/p&gt;

&lt;h3&gt;
  
  
  Browser
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/quanter@4.4.0/dist/quanter.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Webpack / Browserify / Babel
&lt;/h3&gt;

&lt;p&gt;There are several ways to use &lt;a href="https://webpack.js.org/" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt;, &lt;a href="http://browserify.org/" rel="noopener noreferrer"&gt;Browserify&lt;/a&gt; or &lt;a href="https://babeljs.io/" rel="noopener noreferrer"&gt;Babel&lt;/a&gt;. For more information on using these tools, please refer to the corresponding project's documentation. In the script, including Quanter will usually look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;quanter&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;quanter&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quanter library includes all types of selectors. This will prove to be a good useful library for your web applications and projects.&lt;/p&gt;

&lt;p&gt;Quanter library does a lot with less code. It shortens the code used in your projects or web applications. Due to which the performance of your webapp or projects will remain good. It selects advanced and complicated selectors of DOM elements very easily and in less code. This will save you coding time and writing more code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Form &amp;amp; CSS3 Pseudo Selectors
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;:get&lt;/code&gt;/&lt;code&gt;:post&lt;/code&gt; Form elements with the specified method &lt;code&gt;get&lt;/code&gt; or &lt;code&gt;post&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:required&lt;/code&gt; Input required elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:read-only&lt;/code&gt; Input readOnly elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:valid&lt;/code&gt;/&lt;code&gt;:invalid&lt;/code&gt; Input valid field elements. / Input invalid field elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:optional&lt;/code&gt; Element that does not have the &lt;code&gt;required&lt;/code&gt; attribute set on it.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:writable&lt;/code&gt; Writable none-readonly/none-disabled Input elements&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:input&lt;/code&gt; Input elements&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:indeterminate&lt;/code&gt; Matches form controls (e.g., checkboxes) in an indeterminate state.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:open&lt;/code&gt; Matches elements like &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt;/&lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; that are currently open.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:out-of-range&lt;/code&gt; Matches input elements whose value is outside the allowed range.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:in-range&lt;/code&gt; Matches input elements whose value is within the allowed range.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:link&lt;/code&gt; Matches &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;area&amp;gt;&lt;/code&gt; elements with an unvisited hyperlink.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:modal&lt;/code&gt; Matches elements (like dialogs) that are displayed as modal dialogs.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:paused&lt;/code&gt; Matches media elements (e.g.,&lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt;) that are currently paused.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:muted&lt;/code&gt; Matches media elements that are muted.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:autoplay&lt;/code&gt; Matches media elements that are set to autoplay.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:picture-in-picture&lt;/code&gt; Matches video elements that are in picture-in-picture mode.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:popover-open&lt;/code&gt; Matches elements with the &lt;code&gt;popover&lt;/code&gt; attribute that are currently shown.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:fullscreen&lt;/code&gt; Matches the element that is currently in fullscreen mode.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:playing&lt;/code&gt; Matches media elements that are currently playing.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:defined&lt;/code&gt; Matches custom elements that have been defined with &lt;code&gt;customElements.define()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:dir&lt;/code&gt; Matches elements based on text direction: e.g., &lt;code&gt;:dir(ltr)&lt;/code&gt; or &lt;code&gt;:dir(rtl)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:default&lt;/code&gt; Input default checked or option default selected elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:button&lt;/code&gt; Input elements that are &lt;code&gt;buttons&lt;/code&gt; or have type "button"&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:checkbox&lt;/code&gt;, &lt;code&gt;:file&lt;/code&gt;, &lt;code&gt;:image&lt;/code&gt;, &lt;code&gt;:password&lt;/code&gt;, &lt;code&gt;:radio&lt;/code&gt;, &lt;code&gt;:reset&lt;/code&gt;, &lt;code&gt;:submit&lt;/code&gt;, &lt;code&gt;:text&lt;/code&gt;, &lt;code&gt;:search&lt;/code&gt;, &lt;code&gt;:range&lt;/code&gt;, &lt;code&gt;:url&lt;/code&gt;, &lt;code&gt;:color&lt;/code&gt;, &lt;code&gt;:email&lt;/code&gt;, &lt;code&gt;:number&lt;/code&gt; Input elements with the specified type.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Positional Pseudo Selectors
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;:first&lt;/code&gt;/&lt;code&gt;:last&lt;/code&gt; The first/last matching element&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:eq&lt;/code&gt;/&lt;code&gt;:nth&lt;/code&gt; The nth element; e.g. &lt;code&gt;:eq(6)&lt;/code&gt; finds the 7th element&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:lt&lt;/code&gt;/&lt;code&gt;:gt&lt;/code&gt; Elements at positions above/below the specified position&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:odd&lt;/code&gt;/&lt;code&gt;:even&lt;/code&gt; Even/odd-numbered elements&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:fixed&lt;/code&gt; Matching position:fixed element&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Script Pseudo Selectors
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;:importmap&lt;/code&gt;/&lt;code&gt;:ecmascript&lt;/code&gt; The type="ecmascript|importmap" script element&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:json&lt;/code&gt; Script elements with type &lt;code&gt;application/json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:module&lt;/code&gt; Script elements with type &lt;code&gt;module&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Meta Pseudo Selectors
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;:theme&lt;/code&gt; All theme-color or address-bar color-theme meta elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:viewport&lt;/code&gt; Meta viewport element. &lt;code&gt;&amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Containing Pseudo Selectors
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;:contains(TEXT)&lt;/code&gt;  Elements with textContent containing the word 'TEXT'. Case-sensitive.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:rcontains(REGEX)&lt;/code&gt; Elements with textContent containing the word '/(?:foo|bar)/' Regular-expression.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:icontains(TEXT)&lt;/code&gt;  Elements with textContent containing the word 'TEXT'. Case-insensitive.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:ircontains(REGEX)&lt;/code&gt; Elements with textContent containing the word '/(?:foo|bar)/' Regular-expression Case-insensitive.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  CSS3 CHILD Pseudo Selectors
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;:nth-last-of-type(n)&lt;/code&gt; The pattern for matching elements, counting from the end.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:first-child&lt;/code&gt; The first matching element among a group of sibling elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:first-of-type&lt;/code&gt; The first element of its typee among a group of sibling elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:last-child&lt;/code&gt; The last matching element among a group of sibling elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:last-of-type&lt;/code&gt; The last element of its typee among a group of sibling elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:nth-child(n)&lt;/code&gt; Takes a single argument that describes a pattern for matching element indices in a list of siblings.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:only-of-type&lt;/code&gt; The represents an element that has no siblings of the same type.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:nth-of-type(n)&lt;/code&gt; The matches elements based on their position among siblings of the same type (tag name).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:nth-last-child(n)&lt;/code&gt; The matches elements based on their position among a group of siblings, counting from the end.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:only-child&lt;/code&gt; The represents an element without any siblings. &lt;code&gt;:first-child:last-child&lt;/code&gt; or &lt;code&gt;:nth-child(1):nth-last-child(1)&lt;/code&gt;, but with a lower specificity.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Others Pseduo Selectors
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;:parent&lt;/code&gt; Elements with at least one child node (either text or an element).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:empty&lt;/code&gt; The &lt;code&gt;:empty&lt;/code&gt; represents any element that has no children.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:not(h1)&lt;/code&gt;   Selects elements that do not match the given selector inside the &lt;code&gt;:not(...)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:lang(en)&lt;/code&gt; Selects all elements that match the specified language code.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:target&lt;/code&gt; Element &lt;code&gt;id&lt;/code&gt; matching from origin #hash&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:focus&lt;/code&gt; Focusable focused elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:checked&lt;/code&gt; Input checked elements or select in option selected elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:enabled&lt;/code&gt;/&lt;code&gt;:disabled&lt;/code&gt; The &lt;code&gt;enabled&lt;/code&gt; Select none-disabled Elements. and &lt;code&gt;disabled&lt;/code&gt; Select disabled Elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:root&lt;/code&gt; Root elements &lt;code&gt;html&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:selected&lt;/code&gt; (option) elements that are currently selected&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:link&lt;/code&gt; A proper valid anchor Elements with none-empty &lt;code&gt;href&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:filter(h2)&lt;/code&gt; Filter matched element of given elements list.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:where(h2, h3)&lt;/code&gt; Similar to &lt;code&gt;:is(...)&lt;/code&gt;, but has no specificity weight.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:has(input)&lt;/code&gt; Selects elements that contain an &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; element inside them.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:visible&lt;/code&gt;/&lt;code&gt;:hidden&lt;/code&gt; hidden or visible elements. Support (visibility, hidden, display)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:header&lt;/code&gt; Header elements (h1, h2, h3, h4, h5, h6).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:animated&lt;/code&gt; Elements that have &lt;code&gt;CSS&lt;/code&gt; animation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:offset&lt;/code&gt; none-static position elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:editable&lt;/code&gt; Containing the &lt;code&gt;contenteditable=true&lt;/code&gt; attribute.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:active&lt;/code&gt; Focused or active Elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:inline&lt;/code&gt; Inline elements (img, input, meta, area...) etc.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:xpath(expr)&lt;/code&gt; Select elements using from XPath expression.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:role(button)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:charset(utf-8)&lt;/code&gt; Selects all elements that match the specified charset code. (Unavailable 🚫)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Combinators
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;&lt;/code&gt; The child selector selects all elements that are the parent of a specified element.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;gt;&lt;/code&gt; The child selector selects all elements that are the children of a specified element.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;+&lt;/code&gt; The adjacent sibling selector is used to select an element that is directly after another specific element.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;~&lt;/code&gt; The general sibling selector selects all elements that are next siblings of a specified element.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&lt;/code&gt; The descendant selector matches all elements that are descendants of a specified element.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  API
&lt;/h2&gt;

&lt;p&gt;How to use and configure Quanter public API&lt;/p&gt;

&lt;h2&gt;
  
  
  Public API
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;Quanter&lt;/code&gt; method allows for flexible element selection using a wide range of selector types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;✅ &lt;strong&gt;CSS Selectors&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Supports tag names, class selectors (&lt;code&gt;.class&lt;/code&gt;), ID selectors (&lt;code&gt;#id&lt;/code&gt;), attribute selectors (&lt;code&gt;[attr=value]&lt;/code&gt;), and pseudo-classes (like &lt;code&gt;:nth-child&lt;/code&gt;, &lt;code&gt;:first-of-type&lt;/code&gt;, etc.).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;⚠️ &lt;strong&gt;Limited XPath Support&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Basic XPath expressions are supported, but with limited syntax recognition. Use only for simple XPath needs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best Use:&lt;/strong&gt; When your use case involves a mix of CSS-style selectors and simple XPath, and you want to avoid switching methods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signature and Parameters:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt; &lt;span class="nx"&gt;expr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;DOMNode&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt; &lt;span class="nx"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;selector&lt;/code&gt; [required] A CSS Selector or XPath Expression (comma separated or non-comma separated)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;context&lt;/code&gt; [optional] An element, document, or document fragment to use as the context for finding elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;results&lt;/code&gt; [optional] An optional array to which the matched elements will be added.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;seed&lt;/code&gt; [optional] A set of elements to match against&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Sample HTML&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"main"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Welcome&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"items"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;data-id=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"fruit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Apple&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;data-id=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"fruit special"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Banana&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;data-id=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"fruit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Cherry&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"info"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Contact us at &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;support@example.com&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"products"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;data-stock=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;data-type=&lt;/span&gt;&lt;span class="s"&gt;"phone"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;iPhone 15&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"price"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;$999&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;data-stock=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt; &lt;span class="na"&gt;data-type=&lt;/span&gt;&lt;span class="s"&gt;"phone"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Galaxy S25&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"price"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;$899&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;data-stock=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt; &lt;span class="na"&gt;data-type=&lt;/span&gt;&lt;span class="s"&gt;"laptop"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;MacBook Pro&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"price"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;$1999&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/login"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Login&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/register"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Register&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quanter Selector Examples (With Multiple Comma-Separated Selectors)&lt;/p&gt;




&lt;h2&gt;
  
  
  Basic (Comma-separated selectors)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;ID + Class Selector&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#main, .title&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;div id="main"&amp;gt;...&amp;lt;/div&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;h1 class="title"&amp;gt;Welcome&amp;lt;/h1&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Class + Tag Selector&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.fruit, h1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;li data-id="1"&amp;gt;Apple&amp;lt;/li&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;li data-id="2" class="fruit special"&amp;gt;Banana&amp;lt;/li&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;li data-id="3"&amp;gt;Cherry&amp;lt;/li&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;h1 class="title"&amp;gt;Welcome&amp;lt;/h1&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Attribute + Positional
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Attribute Equals + First Child&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;li[data-id='2'], ul.items li:first-child&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;li data-id="2" class="fruit special"&amp;gt;Banana&amp;lt;/li&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;li data-id="1"&amp;gt;Apple&amp;lt;/li&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Attribute Contains + Last Child&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a[href*='reg'], ul.items li:last-child&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;a href="/register"&amp;gt;Register&amp;lt;/a&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;li data-id="3"&amp;gt;Cherry&amp;lt;/li&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Combinators + Multiple Filters
&lt;/h2&gt;

&lt;p&gt;*&lt;em&gt;Descendant + Direct Child&lt;/em&gt;"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.products .price, .products &amp;gt; article&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All &lt;code&gt;&amp;lt;span class="price"&amp;gt;&lt;/code&gt; elements inside &lt;code&gt;.products&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;All direct &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt; elements inside &lt;code&gt;.products&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Multiple Attributes&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;article[data-stock='true'][data-type='phone'], article[data-type='laptop']&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;article data-stock="true" data-type="phone"&amp;gt;iPhone 15&amp;lt;/article&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;article data-stock="true" data-type="laptop"&amp;gt;MacBook Pro&amp;lt;/article&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Pseudo &amp;amp; Complex Chains
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;First-child + Not Selector&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ul.items li:first-child, li:not(.special)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;li data-id="1"&amp;gt;Apple&amp;lt;/li&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;li data-id="1"&amp;gt;Apple&amp;lt;/li&amp;gt;&lt;/code&gt; (duplicate match from both selectors)
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;li data-id="3"&amp;gt;Cherry&amp;lt;/li&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Contains Text + Class&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:contains('Apple'), .special&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;li data-id="1"&amp;gt;Apple&amp;lt;/li&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;li data-id="2" class="fruit special"&amp;gt;Banana&amp;lt;/li&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Advanced Combined Queries
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Grouping Complex Paths&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;div#main .products &amp;gt; article[data-stock='true'] .price, li.fruit:last-child&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;span class="price"&amp;gt;$999&amp;lt;/span&amp;gt;&lt;/code&gt; (iPhone 15)
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;span class="price"&amp;gt;$1999&amp;lt;/span&amp;gt;&lt;/code&gt; (MacBook Pro)
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;li data-id="3"&amp;gt;Cherry&amp;lt;/li&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Universal Selector with Attribute Filter + Multiple Tags&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nc"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;*[data-id], h1, a[href='/login']&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Expected Output:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; elements with &lt;code&gt;data-id&lt;/code&gt; (Apple, Banana, Cherry)
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;h1 class="title"&amp;gt;Welcome&amp;lt;/h1&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;a href="/login"&amp;gt;Login&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📌 Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;All selectors here are &lt;strong&gt;comma-separated&lt;/strong&gt; to demonstrate grouping in Quanter.&lt;/li&gt;
&lt;li&gt;You can mix any number of selectors in one Quanter call.&lt;/li&gt;
&lt;li&gt;Duplicate matches will not be automatically removed; use &lt;code&gt;Array.from(new Set(...))&lt;/code&gt; if needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learn for more &lt;a href="http://github.com/jsvibe/quanter/wiki" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  XPath Selector
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;XPathSelect&lt;/code&gt; method is a specialized function built to handle &lt;strong&gt;full XPath syntax&lt;/strong&gt;, offering complete support for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complex queries&lt;/li&gt;
&lt;li&gt;Nested expressions&lt;/li&gt;
&lt;li&gt;Axes like &lt;code&gt;following-sibling&lt;/code&gt;, &lt;code&gt;ancestor&lt;/code&gt;, &lt;code&gt;descendant&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Functions like &lt;code&gt;contains()&lt;/code&gt;, &lt;code&gt;starts-with()&lt;/code&gt;, &lt;code&gt;text()&lt;/code&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best Use:&lt;/strong&gt; When your use case requires powerful and deeply nested element queries using the full capabilities of XPath.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Signature and Parameters:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;XPathSelect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt; &lt;span class="nx"&gt;expr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;DOMNode&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt; &lt;span class="nx"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;expr&lt;/code&gt;[required] A XPath Expression (comma separated or non-comma separated)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;context&lt;/code&gt; [optional] An element, document, or document fragment to use as the context for finding elements.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;results&lt;/code&gt; [optional] An optional array to which the matched elements will be added.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;seed&lt;/code&gt; [optional] A set of elements to match against&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Sample HTML&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"main"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h1&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Welcome&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"items"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;data-id=&lt;/span&gt;&lt;span class="s"&gt;"1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Apple&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;data-id=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Banana&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;data-id=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Cherry&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/login"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Login&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;  Contact us at &lt;span class="nt"&gt;&amp;lt;span&amp;gt;&lt;/span&gt;support@example.com&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;  &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"footer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;© 2025 Company&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"products"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;data-stock=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;iPhone 15&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"price"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;$999&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;data-stock=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Galaxy S25&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
          &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"price"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;$899&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Select all &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; elements&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;XPathSelect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;//h1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Element with attribute &lt;code&gt;id="main"&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;XPathSelect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;//*[@id="main"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Attribute starts-with (&lt;code&gt;href&lt;/code&gt; starting with &lt;code&gt;/log&lt;/code&gt;)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;XPathSelect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;//a[starts-with(@href, "/log")]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Exact text match (li with text "Banana")&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;XPathSelect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;//li[text()="Banana"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;First &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; inside &lt;code&gt;ul.items&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;XPathSelect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;//ul[@class="items"]/li[1]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Last &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt; inside &lt;code&gt;ul.items&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;XPathSelect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;//ul[@class="items"]/li[last()]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Following sibling of &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; (first &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; after it)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;XPathSelect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;//a/following-sibling::p[1]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Select products that are in stock (&lt;code&gt;data-stock="true"&lt;/code&gt;)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;XPathSelect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;//section[@class="products"]/article[@data-stock="true"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Select price of the out-of-stock product&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;XPathSelect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;//article[@data-stock="false"]/span[@class="price"]/text()&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Usage Multiple Expr With Comma Separated
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;Quanter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;XPathSelect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;//article[@data-stock="false"]/span[@class="price"]/text(), //section[@class="products"]/article[@data-stock="true"], //a/following-sibling::p[1]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Learn for more &lt;a href="http://github.com/jsvibe/quanter/wiki" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>css</category>
      <category>webdev</category>
      <category>jquick</category>
    </item>
    <item>
      <title>JavaScript sprintf implementation</title>
      <dc:creator>Indian Modassir</dc:creator>
      <pubDate>Sat, 09 Aug 2025 00:07:37 +0000</pubDate>
      <link>https://dev.to/indianmodassir/printfy-printf-vprintf-sprintf-vsprintf-2fmo</link>
      <guid>https://dev.to/indianmodassir/printfy-printf-vprintf-sprintf-vsprintf-2fmo</guid>
      <description>&lt;h2&gt;
  
  
  🌟 Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Fully functional &lt;code&gt;printf&lt;/code&gt;, &lt;code&gt;sprintf&lt;/code&gt;, and &lt;code&gt;vsprintf&lt;/code&gt; methods.&lt;/li&gt;
&lt;li&gt;C-style format specifiers support:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;%d&lt;/code&gt;, &lt;code&gt;%f&lt;/code&gt;, &lt;code&gt;%s&lt;/code&gt;, &lt;code&gt;%x&lt;/code&gt;, &lt;code&gt;%b&lt;/code&gt;, &lt;code&gt;%o&lt;/code&gt;, &lt;code&gt;%u&lt;/code&gt;, &lt;code&gt;%c&lt;/code&gt;, &lt;code&gt;%e&lt;/code&gt;, &lt;code&gt;%g&lt;/code&gt;, &lt;code&gt;%G&lt;/code&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt; Padding, alignment, width, and precision controls&lt;/li&gt;

&lt;li&gt;Argument indexing like &lt;code&gt;%2$08.2f&lt;/code&gt;
&lt;/li&gt;

&lt;li&gt;Supports most common C-style format specifiers.&lt;/li&gt;

&lt;li&gt;Distinct handling for &lt;code&gt;%f&lt;/code&gt; (locale) and &lt;code&gt;%F&lt;/code&gt; (non-locale)&lt;/li&gt;

&lt;li&gt;Float, Integer, Hex, Octal, Binary, Char, and String formatting&lt;/li&gt;

&lt;li&gt;Custom width, padding, alignment flags.&lt;/li&gt;

&lt;li&gt;Float precision control up to JavaScript's max (53 bits).&lt;/li&gt;

&lt;li&gt;Handles NaN, Infinity and signed values.&lt;/li&gt;

&lt;li&gt;Works in &lt;strong&gt;Node.js&lt;/strong&gt;, modern browsers, and CommonJS/AMD environments.&lt;/li&gt;

&lt;li&gt;No external dependencies&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  How to install printfy
&lt;/h2&gt;

&lt;p&gt;To include printfy in &lt;a href="https://nodejs.org/" rel="noopener noreferrer"&gt;Node&lt;/a&gt;, first install with npm.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;printfy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to build printfy
&lt;/h2&gt;

&lt;p&gt;Clone a copy of the main Sizzle git repo by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git://github.com/jsvibe/printfy.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the &lt;code&gt;printfy/dist&lt;/code&gt; folder you will find build version of printfy along with the minified file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Including printfy
&lt;/h2&gt;

&lt;p&gt;Below are some of the most common ways to include printfy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Browser
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CDN Link&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://cdn.jsdelivr.net/npm/printfy@2.0.2/dist/printfy.min.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can add the script manually to your project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"printfy.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Webpack / Browserify / Babel
&lt;/h3&gt;

&lt;p&gt;There are several ways to use &lt;a href="https://webpack.js.org/" rel="noopener noreferrer"&gt;Webpack&lt;/a&gt;, &lt;a href="http://browserify.org/" rel="noopener noreferrer"&gt;Browserify&lt;/a&gt; or &lt;a href="https://babeljs.io/" rel="noopener noreferrer"&gt;Babel&lt;/a&gt;. For more information on using these tools, please refer to the corresponding project's documentation. In the script, including printfy will usually look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vprintf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vsprintf&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;printfy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Node.js
&lt;/h3&gt;

&lt;p&gt;Fully compatible with &lt;a href="https://nodejs.org/" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt;, this library lets you use familiar C-style printf formatting in server-side code—ideal for CLI tools, logging, and backend output formatting.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vprintf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;vsprintf&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;printfy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  API Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;printf(format, ...args)&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Logs the formatted output to the console.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello %s, you have %d new messages&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: Hello Alice, you have 5 new messages&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;vprintf(format, args[])&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Logs the formatted output to the console.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello %s, you have %d new messages&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: Hello Alice, you have 5 new messages&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;sprintf(format, ...args)&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Returns a formatted string (like &lt;code&gt;sprintf&lt;/code&gt; in C).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Value: %08.2f&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3.14&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Output: Value: 00003.14&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;vsprintf(format, args[])&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Same as &lt;code&gt;sprintf&lt;/code&gt;, but accepts arguments as an array.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;vsprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User: %s, Score: %d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bob&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: User: Bob, Score: 100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔢 Supported Specifiers
&lt;/h2&gt;

&lt;p&gt;A argument based sprint specifieee&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Specifier&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%s&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;sprintf("%s", "abc")&lt;/code&gt; → &lt;code&gt;"abc"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%S&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Uppercase string&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;"abc"&lt;/code&gt; → &lt;code&gt;"ABC"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Integer (decimal)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;42&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%u&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unsigned integer (64-bit)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;-1&lt;/code&gt; → &lt;code&gt;"18446744073709551615"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%b&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Binary&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;5&lt;/code&gt; → &lt;code&gt;"101"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%o&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Octal&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;8&lt;/code&gt; → &lt;code&gt;"10"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;%x&lt;/code&gt;, &lt;code&gt;%X&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Hexadecimal (lower/upper)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;255&lt;/code&gt; → &lt;code&gt;"ff"&lt;/code&gt; or &lt;code&gt;"FF"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;%f&lt;/code&gt;, &lt;code&gt;%F&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Float (fixed-point)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;3.14&lt;/code&gt; → &lt;code&gt;"3.140000"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;%e&lt;/code&gt;, &lt;code&gt;%E&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Float (scientific notation)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;3.14&lt;/code&gt; → &lt;code&gt;"3.14e+0"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;%g&lt;/code&gt;, &lt;code&gt;%G&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Auto float/scientific (shortest form)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;123000&lt;/code&gt; → &lt;code&gt;"1.23e+5"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;%c&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Character from ASCII code&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;65&lt;/code&gt; → &lt;code&gt;"A"&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;Literal percent sign&lt;/td&gt;
&lt;td&gt;&lt;code&gt;%&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Supported Specifiers
&lt;/h2&gt;

&lt;p&gt;A non-argument base date-time format specifiers&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Specifier&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;$d&lt;/td&gt;
&lt;td&gt;Day of the month, 2 digits with leading zeros (e.g., &lt;code&gt;01&lt;/code&gt; to &lt;code&gt;31&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$D&lt;/td&gt;
&lt;td&gt;A textual representation of a day, three letters (e.g., &lt;code&gt;Mon&lt;/code&gt; to &lt;code&gt;Sun&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$j&lt;/td&gt;
&lt;td&gt;Day of the month without leading zeros (e.g., &lt;code&gt;1&lt;/code&gt; to &lt;code&gt;31&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$l&lt;/td&gt;
&lt;td&gt;(lowercase 'L'): A full textual representation of the day of the week (e.g., &lt;code&gt;Sunday&lt;/code&gt; to &lt;code&gt;Saturday&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$N&lt;/td&gt;
&lt;td&gt;ISO-8601 numeric representation of the day of the week (e.g., &lt;code&gt;1&lt;/code&gt; for &lt;code&gt;Monday&lt;/code&gt; to &lt;code&gt;7&lt;/code&gt; for &lt;code&gt;Sunday&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$S&lt;/td&gt;
&lt;td&gt;English ordinal suffix for the day of the month, 2 characters (e.g., &lt;code&gt;st&lt;/code&gt;, &lt;code&gt;nd&lt;/code&gt;, &lt;code&gt;rd&lt;/code&gt;, &lt;code&gt;th&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$w&lt;/td&gt;
&lt;td&gt;Numeric representation of the day of the week (e.g., &lt;code&gt;0&lt;/code&gt; for &lt;code&gt;Sunday&lt;/code&gt; to &lt;code&gt;6&lt;/code&gt; for &lt;code&gt;Saturday&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$z&lt;/td&gt;
&lt;td&gt;The day of the year (starting from 0) (e.g., 0 to 365)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$W&lt;/td&gt;
&lt;td&gt;ISO-8601 week number of year, weeks starting on Monday (e.g., &lt;code&gt;01&lt;/code&gt; to &lt;code&gt;53&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$F&lt;/td&gt;
&lt;td&gt;A full textual representation of a month (e.g., &lt;code&gt;January&lt;/code&gt; to &lt;code&gt;December&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$m&lt;/td&gt;
&lt;td&gt;Numeric representation of a month, with leading zeros (e.g., &lt;code&gt;01&lt;/code&gt; to &lt;code&gt;12&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$M&lt;/td&gt;
&lt;td&gt;A short textual representation of a month, three letters (e.g., &lt;code&gt;Jan&lt;/code&gt; to &lt;code&gt;Dec&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$n&lt;/td&gt;
&lt;td&gt;Numeric representation of a month, without leading zeros (e.g., &lt;code&gt;1&lt;/code&gt; to &lt;code&gt;12&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$t&lt;/td&gt;
&lt;td&gt;Number of days in the given month (e.g., &lt;code&gt;28&lt;/code&gt; to &lt;code&gt;31&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$L&lt;/td&gt;
&lt;td&gt;Whether it's a leap year (e.g., &lt;code&gt;1&lt;/code&gt; for leap year, &lt;code&gt;0&lt;/code&gt; otherwise)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$o&lt;/td&gt;
&lt;td&gt;ISO-8601 week-numbering year. This has the same value as Y, except that if the ISO week number (W) belongs to the previous or next year, that year is used instead (e.g., &lt;code&gt;1999&lt;/code&gt; or &lt;code&gt;2003&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$y&lt;/td&gt;
&lt;td&gt;A two-digit representation of a year (e.g., 99 or 03)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$Y&lt;/td&gt;
&lt;td&gt;A full numeric representation of a year, 4 digits (e.g., &lt;code&gt;1999&lt;/code&gt; or &lt;code&gt;2003&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$a&lt;/td&gt;
&lt;td&gt;Lowercase am or pm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$A&lt;/td&gt;
&lt;td&gt;Uppercase AM or PM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$g&lt;/td&gt;
&lt;td&gt;12-hour format of an hour without leading zeros (e.g., &lt;code&gt;1&lt;/code&gt; to &lt;code&gt;12&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$G&lt;/td&gt;
&lt;td&gt;24-hour format of an hour without leading zeros (e.g., &lt;code&gt;0&lt;/code&gt; to &lt;code&gt;23&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$h&lt;/td&gt;
&lt;td&gt;12-hour format of an hour with leading zeros (e.g., &lt;code&gt;01&lt;/code&gt; to &lt;code&gt;12&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$H&lt;/td&gt;
&lt;td&gt;24-hour format of an hour with leading zeros (e.g., &lt;code&gt;00&lt;/code&gt; to &lt;code&gt;23&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$i&lt;/td&gt;
&lt;td&gt;Minutes with leading zeros (e.g., &lt;code&gt;00&lt;/code&gt; to &lt;code&gt;59&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$s&lt;/td&gt;
&lt;td&gt;Seconds with leading zeros (e.g., &lt;code&gt;00&lt;/code&gt; to &lt;code&gt;59&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$I&lt;/td&gt;
&lt;td&gt;(capital 'i'): Whether or not the date is in daylight saving time (e.g., &lt;code&gt;1&lt;/code&gt; for DST, &lt;code&gt;0&lt;/code&gt; otherwise)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$O&lt;/td&gt;
&lt;td&gt;Difference to Greenwich time (GMT) in hours (e.g., &lt;code&gt;+0200&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$p&lt;/td&gt;
&lt;td&gt;Difference to Greenwich time (GMT) with colon between hours and minutes (e.g., &lt;code&gt;+05:30&lt;/code&gt;, &lt;code&gt;-04:00&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$t&lt;/td&gt;
&lt;td&gt;Number of days in the given month (e.g., &lt;code&gt;28&lt;/code&gt;, &lt;code&gt;29&lt;/code&gt;, &lt;code&gt;30&lt;/code&gt;, &lt;code&gt;31&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;$r&lt;/td&gt;
&lt;td&gt;RFC 2822 formatted date (e.g., &lt;code&gt;Thu, 21 Dec 2000 16:01:07 +0200&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  ⚙️ Format Options
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Format syntax:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;%[index$][padding][flag][width][.precision]specifier
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Examples
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Binary: %08b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;          &lt;span class="c1"&gt;// Binary: 00000101&lt;/span&gt;
&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hex: %#x&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;            &lt;span class="c1"&gt;// Hex: ff&lt;/span&gt;
&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Char: %c&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;             &lt;span class="c1"&gt;// Char: A&lt;/span&gt;
&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Padded: %10s&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// Padded:      text&lt;/span&gt;
&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Left: %-10s!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// Left: text     !&lt;/span&gt;
&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Float: %.2f&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3.14159&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// Float: 3.14&lt;/span&gt;
&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Scientific: %.2e&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// Scientific: 1.20e+3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;[index$] – Argument Indexing&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;%2$s is %1$d years old.&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Modassir&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: Modassir is 22 years old.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;[padding] – Custom Padding Character&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;%'~5d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: ~~~42&lt;/span&gt;

&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;%'~-5d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: 42~~~&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;[flag] – Format Flags&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Support flags &lt;code&gt;+&lt;/code&gt; and &lt;code&gt;-&lt;/code&gt; only.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;%+d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: +45&lt;/span&gt;

&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;%-d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: -45&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;[width] – Custom Width&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;%6s&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;JS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: "    JS"&lt;/span&gt;

&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lang%6s&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;JS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: "lang    JS"&lt;/span&gt;

&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;%-6s&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;JS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: "JS    "&lt;/span&gt;

&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;%-6slib&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;JS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: "JS    lib"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;[.precision] – Precision (floating-point or string truncation)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;%.2f&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3.14159&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: 3.14&lt;/span&gt;

&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;%.4s&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OpenAI&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: Open&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Full Format&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;%2$&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;#-+10.2f and %1$&lt;/span&gt;&lt;span class="se"&gt;\'&lt;/span&gt;&lt;span class="s1"&gt;*_10s&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;JS&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3.14159&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Output: +3.14#####JS*******&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔹 Explanation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;%2$&lt;/code&gt;: Second argument (&lt;code&gt;3.14159&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;'#&lt;/code&gt;: padding character &lt;code&gt;#&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-&lt;/code&gt;: left align&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;+&lt;/code&gt;: show sign&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;10&lt;/code&gt;: total width 10&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.2f&lt;/code&gt;: 2 decimal places&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;%1$'*_10s&lt;/code&gt;: First argument (&lt;code&gt;JS&lt;/code&gt;), padded with &lt;code&gt;*&lt;/code&gt; to width 10&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚠️ Errors &amp;amp; Warnings
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ArgumentCountError&lt;/strong&gt;: Thrown if insufficient arguments are passed for format specifiers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ValueError&lt;/strong&gt;: Invalid specifier detected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RangeError&lt;/strong&gt;: Padding exceeds safe integer limit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Precision Truncation&lt;/strong&gt;: Float precision is capped at JavaScript's safe limit (53 digits).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔄 Comparison with Other Libraries
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature / Library&lt;/th&gt;
&lt;th&gt;printfy ✓&lt;/th&gt;
&lt;th&gt;sprintf-js 🟡&lt;/th&gt;
&lt;th&gt;fast-printf 🟢&lt;/th&gt;
&lt;th&gt;printf (npm) 🔵&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;C-style specifiers&lt;/td&gt;
&lt;td&gt;✓ Full&lt;/td&gt;
&lt;td&gt;✓ Full&lt;/td&gt;
&lt;td&gt;✓ Partial&lt;/td&gt;
&lt;td&gt;✓ Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%2\$ style arg index&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BigInt support&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%f vs %F (locale)&lt;/td&gt;
&lt;td&gt;✓ Separate&lt;/td&gt;
&lt;td&gt;✗ Combined&lt;/td&gt;
&lt;td&gt;✗ Combined&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom padding ('x)&lt;/td&gt;
&lt;td&gt;✓ &lt;code&gt;'x&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;, etc.&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;String return (sprintf)&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lightweight / No deps&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;td&gt;✓ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unicode emoji safe&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;td&gt;✗ No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;Best&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  📦 Module Support
&lt;/h2&gt;

&lt;p&gt;This library supports the following environments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser&lt;/strong&gt; (&lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CommonJS / Node.js&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AMD (Asynchronous Module Definition)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔐 License
&lt;/h2&gt;

&lt;p&gt;MIT License © 2025 &lt;a href="https://github.com/indianmodassir" rel="noopener noreferrer"&gt;Indian Modassir&lt;/a&gt;&lt;br&gt;&lt;br&gt;
See &lt;a href="https://dev.toLICENSE"&gt;LICENSE&lt;/a&gt; for details.&lt;/p&gt;




&lt;h2&gt;
  
  
  🙌 Contributions
&lt;/h2&gt;

&lt;p&gt;Pull requests, bug reports, and feedback are welcome!&lt;br&gt;&lt;br&gt;
Visit the &lt;a href="https://github.com/jsvibe/printfy" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt; to contribute.&lt;/p&gt;

</description>
      <category>node</category>
      <category>printfy</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>PHP Path</title>
      <dc:creator>Indian Modassir</dc:creator>
      <pubDate>Fri, 08 Aug 2025 23:38:18 +0000</pubDate>
      <link>https://dev.to/indianmodassir/php-path-gm2</link>
      <guid>https://dev.to/indianmodassir/php-path-gm2</guid>
      <description>&lt;p&gt;PHP Path Help with handling or manipulating file and directory path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Composer Installation
&lt;/h2&gt;

&lt;p&gt;Installation is super-easy via &lt;a href="https://getcomposer.org" rel="noopener noreferrer"&gt;Composer&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require lazervel/path
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or add it by hand to your &lt;code&gt;composer.json&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="nc"&gt;Lazervel\Path\Path&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'vendor/autoload.php'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Features of PHP Path
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Path::basename($path[, $suffix])&lt;/li&gt;
&lt;li&gt;Path::canonicalize($path)&lt;/li&gt;
&lt;li&gt;Path::changeExt($path, $newExt)&lt;/li&gt;
&lt;li&gt;Path::combine($paths, $names)&lt;/li&gt;
&lt;li&gt;Path::checkLength($path)&lt;/li&gt;
&lt;li&gt;Path::delimiter&lt;/li&gt;
&lt;li&gt;Path::dirname($path[, $suffix, $levels])&lt;/li&gt;
&lt;li&gt;Path::extname($path)&lt;/li&gt;
&lt;li&gt;Path::filename($path)&lt;/li&gt;
&lt;li&gt;Path::format($pathObject)&lt;/li&gt;
&lt;li&gt;Path::getcwd()&lt;/li&gt;
&lt;li&gt;Path::hasExt($path)&lt;/li&gt;
&lt;li&gt;Path::info()&lt;/li&gt;
&lt;li&gt;Path::isAbsolute($path)&lt;/li&gt;
&lt;li&gt;Path::isLocal($path)&lt;/li&gt;
&lt;li&gt;Path::isURIPath($path)&lt;/li&gt;
&lt;li&gt;Path::join([...$paths])&lt;/li&gt;
&lt;li&gt;&lt;a href=""&gt;Path::localBase($paths)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Path::normalize($path)&lt;/li&gt;
&lt;li&gt;Path::optimize($path)&lt;/li&gt;
&lt;li&gt;Path::parse($path)&lt;/li&gt;
&lt;li&gt;Path::pathname($path)&lt;/li&gt;
&lt;li&gt;Path::pathToURL($path, $origin[, ?$query, ?$hash])&lt;/li&gt;
&lt;li&gt;Path::posix&lt;/li&gt;
&lt;li&gt;Path::relative($from, $to)&lt;/li&gt;
&lt;li&gt;Path::removeExt($path)&lt;/li&gt;
&lt;li&gt;Path::resolve(...$paths)&lt;/li&gt;
&lt;li&gt;Path::rootname($path)&lt;/li&gt;
&lt;li&gt;Path::sep&lt;/li&gt;
&lt;li&gt;Path::tmp($path)&lt;/li&gt;
&lt;li&gt;Path::toNamespacedPath($path)&lt;/li&gt;
&lt;li&gt;Path::UrlToPath($url)&lt;/li&gt;
&lt;li&gt;Path::win32&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Path::basename($path[, $suffix])
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$suffix&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;  An optional suffix to remove&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;Path::basename()&lt;/code&gt; method returns the last portion of a path, similar to the Unix basename command. Trailing &lt;code&gt;directory separators&lt;/code&gt; are ignored.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\xampp\\htdocs\\example.html'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'example.html'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\xampp\\htdocs\\example.html'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.html'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'example'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/home/local/user/example.html'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'example.html'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/home/local/user/example.html'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.html'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'example'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::canonicalize($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;canonicalize function converts a given path into its canonical (absolute and standardized) form. It resolves relative paths, symbolic links, and eliminates redundant or unnecessary components&lt;br&gt;
like '.' and '..' to return a clean and absolute version of the path.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;canonicalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\XamPP\\HtDocS\\DatA\\comPoseR.jSon'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'C:\\xampp\\htdocs\\data\\composer.json'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;canonicalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/path/composer.json'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'G:\\path\\composer.json'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::changeExt($path, $newExt)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$newExt&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Returns a path string with changed initial extension to replaced new extension.&lt;br&gt;&lt;br&gt;
If path extension and givent new extension are same then changeExt will be not modify and return path with initial extension.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;changeExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/quux.html'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.php'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/foo/bar/baz/asdf/quux.php'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;changeExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/vector.gif'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'svg'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/foo/bar/baz/asdf/vector.svg'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::combine($paths, $names)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$paths&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.array" rel="noopener noreferrer"&gt;array&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$names&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.array" rel="noopener noreferrer"&gt;array&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.array" rel="noopener noreferrer"&gt;array&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Creates an array by using one array for paths and another for its names. And creates multiple files combined with paths from to file names.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;combine&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'/xampp/htdocs'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'example.html'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'foo.txt'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ['/xampp/htdocs/example.html', '/xampp/htdocs/foo.txt']&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;combine&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'/xampp/htdocs'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'example.html'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ['/xampp/htdocs/example.html']&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;combine&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'/xampp/htdocs'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'/path'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'example.html'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ['/xampp/htdocs/example.html', '/path/example.html']&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;combine&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'/xampp/htdocs'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'/path'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'example.html'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'foot.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.env'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ['/xampp/htdocs/example.html', '/xampp/htdocs/foot.txt', '/xampp/htdocs/.env', '\path\example.html', '\path\foot.txt', '\path\.env']&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;combine&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'C:\\xampp\\htdocs'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'example.html'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'foo.txt'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ['C:\\xampp\\htdocs\\example.html', 'C:\\xampp\\htdocs\\foo.txt']&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;combine&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'C:\\xampp\\htdocs'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'example.html'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ['C:\\xampp\\htdocs\\example.html']&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;combine&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'C:\\xampp\\htdocs'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'\\path'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'example.html'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ['C:\\xampp\\htdocs\\example.html', '\\path\\example.html']&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;combine&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'C:\\xampp\\htdocs'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'\\path'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'example.html'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'foot.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.env'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ['C:\\xampp\\htdocs\\example.html', 'C:\\xampp\\htdocs\\foot.txt', 'C:\\xampp\\htdocs\\.env', '\\path\\example.html', '\\path\\foot.txt', '\\path\\.env']&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::checkLength($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.void" rel="noopener noreferrer"&gt;void&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check a valid path length and report exception.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Check maximum path length on your system use \PHP_MAXPATHLEN constant.&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;checkLength&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'your-path'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Returns: if given path of length are valid so return (void) otherwise throwing RTException Error.&lt;/span&gt;
&lt;span class="c1"&gt;// PHP Fatal error:  Uncaught Path\Exception\RTException: Invalid path because path length exceeds [2048] characters.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Throwing Error
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Path\Exception\RTException: Invalid path because path length exceeds [2048] characters.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Path::delimiter
&lt;/h2&gt;

&lt;p&gt;Provides the platform-specific path delimiter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;;&lt;/code&gt; for Windows&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:&lt;/code&gt; for POSIX&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nb"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'PATH'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Prints: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'&lt;/span&gt;

&lt;span class="nb"&gt;explode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;delimiter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'PATH'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nb"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'PATH'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Prints: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\'&lt;/span&gt;

&lt;span class="nb"&gt;explode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;delimiter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'PATH'&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="c1"&gt;// Returns ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::dirname($path[, $suffix, $levels])
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$suffix&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$levels&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.integer" rel="noopener noreferrer"&gt;int&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Get the directory name of a given path with optional suffix removal and level adjustment. This function returns the parent directory's path of the provided file or directory path. It also allows for an optional suffix to be removed from the base name and specifies how many levels up the directory to go.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;dirname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/quux\\abcd\\xyz'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/foo/bar/baz/asdf'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;dirname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/quux'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/foo/bar/baz/asdf'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;dirname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/quux\\abcd\\xyz'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/foo/bar/baz/asdf/quux\abcd'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::extname($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Returns extname method a path extension name from given path, Its used to get file extention.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;extname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\xampp\\htdocs\\example.html'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '.html'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;extname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'index.coffee.md'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '.md'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;extname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'index.'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '.'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;extname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'index'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ''&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;extname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'.index'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '.index'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;extname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\xampp\\htdocs\\example.md'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '.md' &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::filename($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Returns a filename without extention of given path.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/quux.html'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'quux.html'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'example.txt'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ''&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'example.txt'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'example'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'example'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\path\\dir\\file.txt'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'file.txt'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::format($pathObject)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$pathObject&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.array" rel="noopener noreferrer"&gt;array&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Returns a path string from an array-object - the opposite of parse(). format method are same work as &lt;code&gt;phpinfo&lt;/code&gt; method But there install the extra property &lt;code&gt;root&lt;/code&gt; property to getting current root [dir] of path&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// If `dir`, `root` and `base` are provided,&lt;/span&gt;
&lt;span class="c1"&gt;// `${dir}${Path::sep}${base}`&lt;/span&gt;
&lt;span class="c1"&gt;// will be returned. `root` is ignored.&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="s1"&gt;'root'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'/ignored'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'dir'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'/home/user/dir'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'base'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'file.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/home/user/dir/file.txt'&lt;/span&gt;

&lt;span class="c1"&gt;// `root` will be used if `dir` is not specified.&lt;/span&gt;
&lt;span class="c1"&gt;// If only `root` is provided or `dir` is equal to `root` then the&lt;/span&gt;
&lt;span class="c1"&gt;// platform separator will not be included. `ext` will be ignored.&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="s1"&gt;'root'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'base'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'file.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'ext'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'ignored'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/file.txt'&lt;/span&gt;

&lt;span class="c1"&gt;// `name` + `ext` will be used if `base` is not specified.&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="s1"&gt;'root'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'name'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'file'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'ext'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/file.txt'&lt;/span&gt;

&lt;span class="c1"&gt;// The dot will be added if it is not specified in `ext`.&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="s1"&gt;'root'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'name'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'file'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'ext'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/file.txt'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="s1"&gt;'dir'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'C:\\path\\dir'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s1"&gt;'base'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'file.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'C:\\path\\dir\\file.txt'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::getcwd()
&lt;/h2&gt;

&lt;p&gt;Retrieves the current working directory based on the operating system. This method returns the current working directory in a format appropriate for the platform. For &lt;code&gt;POSIX&lt;/code&gt; systems, it returns a path like &lt;code&gt;/xampp/htdocs/&lt;/code&gt;, while for Windows systems, it returns a path like &lt;code&gt;C:/xampp/htdocs/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// If the current working directory is /xampp/htdocs,&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;getcwd&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Returns: /xampp/htdocs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// If the current working directory is C:\\xampp\\htdocs,&lt;/span&gt;
&lt;span class="c1"&gt;// returns with drive LIKE (eg: C:,D:,F: etc.)&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;getcwd&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Returns: C:\\xampp\\htdocs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::hasExt($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.boolean" rel="noopener noreferrer"&gt;bool&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;hasExt method will check extension exists or not exists of given path and matcher Extensions, if Given extensions in matched path extension then return true, Otherwise return false.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;hasExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/vector.png'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'.gif'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.jpg'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.png'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;hasExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/vector.gif'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.gif'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                   &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;hasExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/vector.gif'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'gif'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                    &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;hasExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/vector.gif'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'gif'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'jpeg'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'png'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;   &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;hasExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/vector.pdf'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'.gif'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.jpg'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.png'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;hasExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/vector.gif'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'.svg'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                   &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;hasExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/vector.gif'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'png'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                    &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;hasExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar/baz/asdf/vector.gif'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'svg'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'jpeg'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'png'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;   &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::info()
&lt;/h2&gt;

&lt;p&gt;Returns information about a file path.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/home/local/user/example.html'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: stdClass Object (&lt;/span&gt;
&lt;span class="c1"&gt;//   [dirname] =&amp;gt; /home/local/user&lt;/span&gt;
&lt;span class="c1"&gt;//   [basename] =&amp;gt; example.html&lt;/span&gt;
&lt;span class="c1"&gt;//   [extension] =&amp;gt; html&lt;/span&gt;
&lt;span class="c1"&gt;//   [filename] =&amp;gt; example&lt;/span&gt;
&lt;span class="c1"&gt;//   [root] =&amp;gt; /&lt;/span&gt;
&lt;span class="c1"&gt;// )&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\xampp\\htdocs\\path\\Path.php'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: stdClass Object (&lt;/span&gt;
&lt;span class="c1"&gt;//   [dirname] =&amp;gt; C:\xampp\htdocs\path&lt;/span&gt;
&lt;span class="c1"&gt;//   [basename] =&amp;gt; Path.php&lt;/span&gt;
&lt;span class="c1"&gt;//   [extension] =&amp;gt; php&lt;/span&gt;
&lt;span class="c1"&gt;//   [filename] =&amp;gt; Path&lt;/span&gt;
&lt;span class="c1"&gt;//   [root] =&amp;gt; C:\&lt;/span&gt;
&lt;span class="c1"&gt;// )&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::isAbsolute($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.boolean" rel="noopener noreferrer"&gt;bool&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Determines whether {path} is an absolute path. An absolute path will always resolve to the same location,regardless of the working directory.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isAbsolute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isAbsolute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/baz/..'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isAbsolute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'qux/'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isAbsolute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'.'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;        &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isAbsolute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'//server'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isAbsolute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'\\\\server'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isAbsolute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:/foo/..'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isAbsolute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\foo\\..'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isAbsolute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'bar\\baz'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;    &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isAbsolute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'bar/baz'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isAbsolute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'.'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;           &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::isLocal($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.boolean" rel="noopener noreferrer"&gt;bool&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;isLocal function checks whether the provided path is local or not. It determines if the given path refers to a local file or directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isLocal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:Users\JohnDoe\Documents\file.txt'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;// Returns: 'false'&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isLocal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'//home/user/file.txt'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                &lt;span class="c1"&gt;// Returns: 'false'&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isLocal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\Program Files\file//file.txt'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// Returns: 'false'&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isLocal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:/Windows\\System32'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                &lt;span class="c1"&gt;// Returns: 'false'&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isLocal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'D:\\Data\report.pdf'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                 &lt;span class="c1"&gt;// Returns: 'false'&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isLocal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\Users\JohnDoe\Documents\file.txt'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Returns: 'true'&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isLocal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'D:\Projects\Code\index.html'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;         &lt;span class="c1"&gt;// Returns: 'true'&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isLocal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/home/user/documents/report.pdf'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;     &lt;span class="c1"&gt;// Returns: 'true'&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isLocal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'\\ServerName\SharedFolder\image.png'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Returns: 'true'&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isLocal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'E:\Music\Rock\song.mp3'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;              &lt;span class="c1"&gt;// Returns: 'true'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::isURIPath($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.boolean" rel="noopener noreferrer"&gt;bool&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check if the given path is a valid network path. A valid network path starts with two backslashes &lt;code&gt;\\&lt;/code&gt; or &lt;code&gt;//&lt;/code&gt; followed by the server name, and can include subdirectories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; working only Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isURIPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'//home/local/user/'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isURIPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'//home/local'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isURIPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'//home/local/'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;      &lt;span class="c1"&gt;// Returns: true&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isURIPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/server/foo/'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isURIPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'D:/'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;                &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isURIPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'//home/'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;            &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;isURIPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:/xampp/htdocs/'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   &lt;span class="c1"&gt;// Returns: false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::join([...$paths])
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;...$paths&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Join all arguments together and normalize the resulting path.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'bar'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'baz/asdf'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'quux'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'..'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/foo/bar/baz/asdf'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'foo'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="s1"&gt;'bar'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Throws TypeError: Path\Path::join(): Argument #2 must be of type string, array given.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::localBase($paths)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Temporary Unavailable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::normalize($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Normalize a string path, reducing &lt;code&gt;..&lt;/code&gt; and &lt;code&gt;.&lt;/code&gt; parts. When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar//baz/asdf/quux/..'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/foo/bar/baz/asdf'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\temp\\\\foo\\bar\\..\\'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'C:\\temp\\foo\\'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since Windows recognizes multiple path separators, both separators will be replaced by instances of the Windows preferred separator (&lt;code&gt;\&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;win32&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:////temp\\\\/\\/\\/foo/bar'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'C:\\temp\\foo\\bar'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::optimize($path)
&lt;/h2&gt;

&lt;p&gt;Optimize method working As Path::format() but this method in common different, This method will be convert backward slashes to forward slash and convert forward slash to backward slash depend on &lt;code&gt;window&lt;/code&gt; and &lt;code&gt;posix&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Optimize reducing '..' and '.' parts. When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;optimize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:////temp\\\\/\\/\\/foo/bar'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: C:/temp/foo/bar&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;optimize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:////temp\\\\/\\/\\/foo/bar'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: C:\\temp\\foo\\bar&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::parse($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.array" rel="noopener noreferrer"&gt;array&lt;/a&gt;&amp;lt;&lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;,&lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;&amp;gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Returns an object from a path string - the opposite of &lt;code&gt;format()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/home/user/dir/file.txt'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns:&lt;/span&gt;
&lt;span class="c1"&gt;// [&lt;/span&gt;
&lt;span class="c1"&gt;//   'root' =&amp;gt; '/',&lt;/span&gt;
&lt;span class="c1"&gt;//   'dir' =&amp;gt; '/home/user/dir',&lt;/span&gt;
&lt;span class="c1"&gt;//   'base' =&amp;gt; 'file.txt',&lt;/span&gt;
&lt;span class="c1"&gt;//   'ext' =&amp;gt; '.txt',&lt;/span&gt;
&lt;span class="c1"&gt;//   'name' =&amp;gt; 'file'&lt;/span&gt;
&lt;span class="c1"&gt;// ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────┬────────────┐
│          dir        │    base    │
├──────┬              ├──────┬─────┤
│ root │              │ name │ ext │
"  /    home/user/dir / file  .txt "
└──────┴──────────────┴──────┴─────┘
(All spaces in the "" line should be ignored. They are purely for formatting.)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\path\\dir\\file.txt'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns:&lt;/span&gt;
&lt;span class="c1"&gt;// [&lt;/span&gt;
&lt;span class="c1"&gt;//   'root' =&amp;gt; 'C:\\',&lt;/span&gt;
&lt;span class="c1"&gt;//   'dir' =&amp;gt; 'C:\\path\\dir',&lt;/span&gt;
&lt;span class="c1"&gt;//   'base' =&amp;gt; 'file.txt',&lt;/span&gt;
&lt;span class="c1"&gt;//   'ext' =&amp;gt; '.txt',&lt;/span&gt;
&lt;span class="c1"&gt;//   'name' =&amp;gt; 'file'&lt;/span&gt;
&lt;span class="c1"&gt;// ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────┬────────────┐
│          dir        │    base    │
├──────┬              ├──────┬─────┤
│ root │              │ name │ ext │
" C:\      path\dir   \ file  .txt "
└──────┴──────────────┴──────┴─────┘
(All spaces in the "" line should be ignored. They are purely for formatting.)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::pathname($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Get the path name of a given file or directory. This function returns the path name without any suffix or modification and without drive.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'//var/www/httpdocs/config/config.yml'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/var/www/httpdocs/config/config.yml'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:////temp\\\\/\\/\\/foo/bar'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'C:/temp\foo/bar'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/var/www/httpdocs/config/config.yml'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/var/www/httpdocs/config/config.yml'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Handle Network Path, Here network path are '\\\\var\\www'&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'\\\\var\\www\\httpdocs\\config\\config.yml'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '\\httpdocs\\config\\config.yml'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:////temp\\\\/\\/\\/foo/bar'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '\\temp\\foo\\bar'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'\\var\\www\\httpdocs\\config\\config.yml'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '\\var\\www\\httpdocs\\config\\config.yml'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'\\\\var\\www\\'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '\\'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ''&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '\\'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'\\\\var\\www'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ''&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'G:var\\www\\httpdocs\\config\\config.yml'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'var\\www\\httpdocs\\config\\config.yml'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since Windows recognizes multiple path separators, both separators will be replaced by instances of the Windows preferred separator (&lt;code&gt;\&lt;/code&gt;):&lt;/p&gt;

&lt;h2&gt;
  
  
  Path::pathToURL($path, $origin[, ?$query, ?$hash])
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$origin&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$query&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$hash&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;pathToURL - Convert path to url, Returns path to url combination with &lt;code&gt;(e.g., path, origin, ?query, ?hash)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notice:&lt;/strong&gt; Don't use syntax &lt;code&gt;Path::win32::pathToURL()&lt;/code&gt; or &lt;code&gt;Path::posix::pathToURL()&lt;/code&gt;, This a common bugs. but don't worry we fix this bugs to next expected version &lt;code&gt;[v10.2.0]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathToURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'server/auth/client'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'https://www.example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'id=1'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'https://www.example.com/server/auth/client?id=1'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathToURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'server/auth/client'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'https://www.example.com'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'https://www.example.com/server/auth/client'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathToURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'server/auth/client'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'https://www.example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'?id=1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'#root'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'https://www.example.com/server/auth/client?id=1#root'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathToURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'server/auth/client'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'https://www.example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'?id=1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'root'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'https://www.example.com/server/auth/client?id=1#root'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathToURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'G:\\server\\auth\\client'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'https://www.example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'id=1'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'https://www.example.com/server/auth/client?id=1'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathToURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'G:\\server\\auth\\client'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'https://www.example.com'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'https://www.example.com/server/auth/client'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathToURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'G:\\server\\auth\\client'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'https://www.example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'?id=1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'#root'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'https://www.example.com/server/auth/client?id=1#root'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;pathToURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'G:\\server\\auth\\client'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'https://www.example.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'?id=1'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'root'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'https://www.example.com/server/auth/client?id=1#root'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::posix
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;Path::posix&lt;/code&gt; property provides access to POSIX specific implementations of the &lt;code&gt;Path&lt;/code&gt; methods.&lt;/p&gt;

&lt;p&gt;The API is accessible via &lt;code&gt;Path\Path::posix&lt;/code&gt; or &lt;code&gt;Path\Linux\Linux::class&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Path::relative($from, $to)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$from&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$to&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solve the relative path from &lt;code&gt;from&lt;/code&gt; to &lt;code&gt;to&lt;/code&gt; based on the current working directory. At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/data/orandea/test/aaa'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'/data/orandea/impl/bbb'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '../../impl/bbb'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\orandea\\test\\aaa'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'C:\\orandea\\impl\\bbb'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '..\\..\\impl\\bbb'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::removeExt($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Returns a path string with removed path extension.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;removeExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/var/www/web.php'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/var/www/web'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;removeExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'.env.local'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '.env'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;removeExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'.html'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '' bugs detected&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;removeExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'file.txt'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns 'file'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;removeExt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'G:/path/.github'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'G:/path/' bugs detected&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::resolve(...$path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;...$paths&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt; A sequence of path segments.&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The right-most parameter is considered &lt;code&gt;to&lt;/code&gt;. Other parameters are considered an array of &lt;code&gt;from&lt;/code&gt;. Starting from leftmost &lt;code&gt;from&lt;/code&gt; parameter, resolves &lt;code&gt;to&lt;/code&gt; to an absolute path. If &lt;code&gt;to&lt;/code&gt; isn't already absolute, &lt;code&gt;from&lt;/code&gt; arguments are prepended in right to left order, until an absolute path is found. If after using all &lt;code&gt;from&lt;/code&gt; paths still no absolute path is found, the current working directory is used as well. The resulting path is normalized, and trailing slashes are removed unless the path gets resolved to the root directory.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'./baz'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/foo/bar/baz'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'/tmp/file/'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/tmp/file'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wwwroot'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'static_files/png/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'../gif/image.gif'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// If the current working directory is /home/myself/node,&lt;/span&gt;
&lt;span class="c1"&gt;// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'./baz'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'G:\\foo\\bar\\baz'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/foo/bar'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'/tmp/file/'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'G:\\tmp\\file'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'wwwroot'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'static_files/png/'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'../gif/image.gif'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// If the current working directory is C:\\xampp\\htdocs/,&lt;/span&gt;
&lt;span class="c1"&gt;// this returns 'C:\\xampp\\htdocs\\wwwroot\\static_files\\gif\\image.gif'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::rootname($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Retrieves the root name of the path. This method extracts the root component of a given path, which can be useful for determining the base directory or starting point for further path manipulations.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;rootname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\xampp\\htdocs\\'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ''&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;rootname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/var/ww/httpdocs'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;rootname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ''&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;rootname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'G:'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ''&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;rootname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'//var/www/httpdocs'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;rootname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\xampp\\htdocs\\'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'C:\\'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;rootname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/var/ww/httpdocs'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '\\'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;rootname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'C:\\'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'C:\\'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;rootname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'G:'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'G:'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;rootname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'//var/www/httpdocs'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '\\\\var\\www\\'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::sep
&lt;/h2&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nb"&gt;explode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;sep&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'foo/bar/baz'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ['foo', 'bar', 'baz']&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nb"&gt;explode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;sep&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'foo\\bar\\baz'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: ['foo', 'bar', 'baz']&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows, both the forward slash (&lt;code&gt;/&lt;/code&gt;) and backward slash (&lt;code&gt;\&lt;/code&gt;) are accepted as path segment separators; however, the &lt;code&gt;Path&lt;/code&gt; methods only add backward slashes (&lt;code&gt;\&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Path::tmp($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Returns tmp name, To make a tmp name with dirname of given path.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Path::tmp suffix random tmp name in given path value.&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'foot/bar/baz'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'foot/bar/.!!/.!HyZq'&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'foot/bar/.!!/.!XTfs'&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'foot/bar/.!!/.!C80D'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Path::tmp suffix random tmp name in given path value.&lt;/span&gt;
&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;tmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'foot\\bar\\baz'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'foot\\bar\\.!!\\.!RBDZ'&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'foot\\bar\\.!!\\.!NPia'&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'foot\\bar\\.!!\\.!0Kbx'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::toNamespacedPath($path)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$path&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On &lt;code&gt;Windows&lt;/code&gt; systems only, returns an equivalent namespace-prefixed path for the given path. If path is not a string, path will be returned without modifications. This method is meaningful only on Windows system. On &lt;code&gt;POSIX&lt;/code&gt; systems, the method is non-operational and always returns path without modifications.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;toNamespacedPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'\\foo\\bar/baz\\asdfquux\\abcd\\xyz'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '\\\\?\\G:\\foo\\bar\\baz\\asdfquux\\abcd\\xyz'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;toNamespacedPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'//foo\\bar/baz\\asdfquux\\abcd\\xyz'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '\\\\?\\UNC\\foo\\bar\\baz\\asdfquux\\abcd\\xyz'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::UrlToPath($url)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$url&lt;/code&gt; &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Return: &lt;a href="https://www.php.net/manual/en/language.types.string" rel="noopener noreferrer"&gt;string&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To convert url &lt;code&gt;https://example.com/home/parent/current/path&lt;/code&gt; to &lt;code&gt;/home/parent/current/path&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For example, on POSIX:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;UrlToPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://www.example.com/server/auth/client?id=1'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/server/auth/client'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;UrlToPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://www.example.com/server/auth/client'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/server/auth/client'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;UrlToPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://www.example.com/server/auth/client?id=1#root'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: '/server/auth/client'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;UrlToPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://www.example.com/server/auth/client?id=1'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'G:\\server\\auth\\client'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;UrlToPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://www.example.com/server/auth/client'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'G:\\server\\auth\\client'&lt;/span&gt;

&lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;UrlToPath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'https://www.example.com/server/auth/client?id=1#root'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: 'G:\\server\\auth\\client'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Path::win32
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;Path::win32&lt;/code&gt; property provides access to Windows specific implementations of the &lt;code&gt;Path&lt;/code&gt; methods.&lt;/p&gt;

&lt;p&gt;The API is accessible via &lt;code&gt;Path\Path::win32&lt;/code&gt; or &lt;code&gt;Path\Win32\Win32::class&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/lazervel/path/issues" rel="noopener noreferrer"&gt;Report issue&lt;/a&gt; and &lt;a href="https://github.com/lazervel/path/pulls" rel="noopener noreferrer"&gt;send Pull Request&lt;/a&gt; in the &lt;a href="https://github.com/lazervel/path" rel="noopener noreferrer"&gt;main Lazervel repository&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>path</category>
      <category>filesystem</category>
      <category>php</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
