aboutsummaryrefslogtreecommitdiffstats
path: root/vanilla/node_modules/pathe
diff options
context:
space:
mode:
Diffstat (limited to 'vanilla/node_modules/pathe')
-rw-r--r--vanilla/node_modules/pathe/LICENSE70
-rw-r--r--vanilla/node_modules/pathe/README.md73
-rw-r--r--vanilla/node_modules/pathe/dist/index.cjs39
-rw-r--r--vanilla/node_modules/pathe/dist/index.d.cts47
-rw-r--r--vanilla/node_modules/pathe/dist/index.d.mts47
-rw-r--r--vanilla/node_modules/pathe/dist/index.d.ts47
-rw-r--r--vanilla/node_modules/pathe/dist/index.mjs19
-rw-r--r--vanilla/node_modules/pathe/dist/shared/pathe.BSlhyZSM.cjs266
-rw-r--r--vanilla/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs249
-rw-r--r--vanilla/node_modules/pathe/dist/utils.cjs82
-rw-r--r--vanilla/node_modules/pathe/dist/utils.d.cts32
-rw-r--r--vanilla/node_modules/pathe/dist/utils.d.mts32
-rw-r--r--vanilla/node_modules/pathe/dist/utils.d.ts32
-rw-r--r--vanilla/node_modules/pathe/dist/utils.mjs77
-rw-r--r--vanilla/node_modules/pathe/package.json61
-rw-r--r--vanilla/node_modules/pathe/utils.d.ts1
16 files changed, 1174 insertions, 0 deletions
diff --git a/vanilla/node_modules/pathe/LICENSE b/vanilla/node_modules/pathe/LICENSE
new file mode 100644
index 0000000..8eb90c4
--- /dev/null
+++ b/vanilla/node_modules/pathe/LICENSE
@@ -0,0 +1,70 @@
+MIT License
+
+Copyright (c) Pooya Parsa <pooya@pi0.io> - Daniel Roe <daniel@roe.dev>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+---
+
+Copyright Joyent, Inc. and other Node contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+---
+
+Bundled zeptomatch (https://github.com/fabiospampinato/zeptomatch)
+
+The MIT License (MIT)
+
+Copyright (c) 2023-present Fabio Spampinato
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/vanilla/node_modules/pathe/README.md b/vanilla/node_modules/pathe/README.md
new file mode 100644
index 0000000..8eddf93
--- /dev/null
+++ b/vanilla/node_modules/pathe/README.md
@@ -0,0 +1,73 @@
+# 🛣️ pathe
+
+> Universal filesystem path utils
+
+[![version][npm-v-src]][npm-v-href]
+[![downloads][npm-d-src]][npm-d-href]
+[![size][size-src]][size-href]
+
+## ❓ Why
+
+For [historical reasons](https://docs.microsoft.com/en-us/archive/blogs/larryosterman/why-is-the-dos-path-character), windows followed MS-DOS and used backslash for separating paths rather than slash used for macOS, Linux, and other Posix operating systems. Nowadays, [Windows](https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN) supports both Slash and Backslash for paths. [Node.js's built-in `path` module](https://nodejs.org/api/path.html) in the default operation of the path module varies based on the operating system on which a Node.js application is running. Specifically, when running on a Windows operating system, the path module will assume that Windows-style paths are being used. **This makes inconsistent code behavior between Windows and POSIX.**
+
+Compared to popular [upath](https://github.com/anodynos/upath), pathe provides **identical exports** of Node.js with normalization on **all operations** and is written in modern **ESM/TypeScript** and has **no dependency on Node.js**!
+
+This package is a drop-in replacement of the Node.js's [path module](https://nodejs.org/api/path.html) module and ensures paths are normalized with slash `/` and work in environments including Node.js.
+
+## 💿 Usage
+
+Install using npm or yarn:
+
+```bash
+# npm
+npm i pathe
+
+# yarn
+yarn add pathe
+
+# pnpm
+pnpm i pathe
+```
+
+Import:
+
+```js
+// ESM / Typescript
+import { resolve, matchesGlob } from "pathe";
+
+// CommonJS
+const { resolve, matchesGlob } = require("pathe");
+```
+
+Read more about path utils from [Node.js documentation](https://nodejs.org/api/path.html) and rest assured behavior is consistently like POSIX regardless of your input paths format and running platform (the only exception is `delimiter` constant export, it will be set to `;` on windows platform).
+
+### Extra utilities
+
+Pathe exports some extra utilities that do not exist in standard Node.js [path module](https://nodejs.org/api/path.html).
+In order to use them, you can import from `pathe/utils` subpath:
+
+```js
+import {
+ filename,
+ normalizeAliases,
+ resolveAlias,
+ reverseResolveAlias,
+} from "pathe/utils";
+```
+
+## License
+
+Made with 💛 Published under the [MIT](./LICENSE) license.
+
+Some code was used from the Node.js project. Glob supported is powered by [zeptomatch](https://github.com/fabiospampinato/zeptomatch).
+
+<!-- Refs -->
+
+[npm-v-src]: https://img.shields.io/npm/v/pathe?style=flat-square
+[npm-v-href]: https://npmjs.com/package/pathe
+[npm-d-src]: https://img.shields.io/npm/dm/pathe?style=flat-square
+[npm-d-href]: https://npmjs.com/package/pathe
+[github-actions-src]: https://img.shields.io/github/workflow/status/unjs/pathe/ci/main?style=flat-square
+[github-actions-href]: https://github.com/unjs/pathe/actions?query=workflow%3Aci
+[size-src]: https://packagephobia.now.sh/badge?p=pathe
+[size-href]: https://packagephobia.now.sh/result?p=pathe
diff --git a/vanilla/node_modules/pathe/dist/index.cjs b/vanilla/node_modules/pathe/dist/index.cjs
new file mode 100644
index 0000000..d64a6d2
--- /dev/null
+++ b/vanilla/node_modules/pathe/dist/index.cjs
@@ -0,0 +1,39 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+const _path = require('./shared/pathe.BSlhyZSM.cjs');
+
+const delimiter = /* @__PURE__ */ (() => globalThis.process?.platform === "win32" ? ";" : ":")();
+const _platforms = { posix: void 0, win32: void 0 };
+const mix = (del = delimiter) => {
+ return new Proxy(_path._path, {
+ get(_, prop) {
+ if (prop === "delimiter") return del;
+ if (prop === "posix") return posix;
+ if (prop === "win32") return win32;
+ return _platforms[prop] || _path._path[prop];
+ }
+ });
+};
+const posix = /* @__PURE__ */ mix(":");
+const win32 = /* @__PURE__ */ mix(";");
+
+exports.basename = _path.basename;
+exports.dirname = _path.dirname;
+exports.extname = _path.extname;
+exports.format = _path.format;
+exports.isAbsolute = _path.isAbsolute;
+exports.join = _path.join;
+exports.matchesGlob = _path.matchesGlob;
+exports.normalize = _path.normalize;
+exports.normalizeString = _path.normalizeString;
+exports.parse = _path.parse;
+exports.relative = _path.relative;
+exports.resolve = _path.resolve;
+exports.sep = _path.sep;
+exports.toNamespacedPath = _path.toNamespacedPath;
+exports.default = posix;
+exports.delimiter = delimiter;
+exports.posix = posix;
+exports.win32 = win32;
diff --git a/vanilla/node_modules/pathe/dist/index.d.cts b/vanilla/node_modules/pathe/dist/index.d.cts
new file mode 100644
index 0000000..61046da
--- /dev/null
+++ b/vanilla/node_modules/pathe/dist/index.d.cts
@@ -0,0 +1,47 @@
+import * as path from 'node:path';
+import path__default from 'node:path';
+
+/**
+ * Constant for path separator.
+ *
+ * Always equals to `"/"`.
+ */
+declare const sep = "/";
+declare const normalize: typeof path__default.normalize;
+declare const join: typeof path__default.join;
+declare const resolve: typeof path__default.resolve;
+/**
+ * Resolves a string path, resolving '.' and '.' segments and allowing paths above the root.
+ *
+ * @param path - The path to normalise.
+ * @param allowAboveRoot - Whether to allow the resulting path to be above the root directory.
+ * @returns the normalised path string.
+ */
+declare function normalizeString(path: string, allowAboveRoot: boolean): string;
+declare const isAbsolute: typeof path__default.isAbsolute;
+declare const toNamespacedPath: typeof path__default.toNamespacedPath;
+declare const extname: typeof path__default.extname;
+declare const relative: typeof path__default.relative;
+declare const dirname: typeof path__default.dirname;
+declare const format: typeof path__default.format;
+declare const basename: typeof path__default.basename;
+declare const parse: typeof path__default.parse;
+/**
+ * The `path.matchesGlob()` method determines if `path` matches the `pattern`.
+ * @param path The path to glob-match against.
+ * @param pattern The glob to check the path against.
+ */
+declare const matchesGlob: (path: string, pattern: string | string[]) => boolean;
+
+type NodePath = typeof path;
+/**
+ * The platform-specific file delimiter.
+ *
+ * Equals to `";"` in windows and `":"` in all other platforms.
+ */
+declare const delimiter: ";" | ":";
+declare const posix: NodePath["posix"];
+declare const win32: NodePath["win32"];
+declare const _default: NodePath;
+
+export { basename, _default as default, delimiter, dirname, extname, format, isAbsolute, join, matchesGlob, normalize, normalizeString, parse, posix, relative, resolve, sep, toNamespacedPath, win32 };
diff --git a/vanilla/node_modules/pathe/dist/index.d.mts b/vanilla/node_modules/pathe/dist/index.d.mts
new file mode 100644
index 0000000..61046da
--- /dev/null
+++ b/vanilla/node_modules/pathe/dist/index.d.mts
@@ -0,0 +1,47 @@
+import * as path from 'node:path';
+import path__default from 'node:path';
+
+/**
+ * Constant for path separator.
+ *
+ * Always equals to `"/"`.
+ */
+declare const sep = "/";
+declare const normalize: typeof path__default.normalize;
+declare const join: typeof path__default.join;
+declare const resolve: typeof path__default.resolve;
+/**
+ * Resolves a string path, resolving '.' and '.' segments and allowing paths above the root.
+ *
+ * @param path - The path to normalise.
+ * @param allowAboveRoot - Whether to allow the resulting path to be above the root directory.
+ * @returns the normalised path string.
+ */
+declare function normalizeString(path: string, allowAboveRoot: boolean): string;
+declare const isAbsolute: typeof path__default.isAbsolute;
+declare const toNamespacedPath: typeof path__default.toNamespacedPath;
+declare const extname: typeof path__default.extname;
+declare const relative: typeof path__default.relative;
+declare const dirname: typeof path__default.dirname;
+declare const format: typeof path__default.format;
+declare const basename: typeof path__default.basename;
+declare const parse: typeof path__default.parse;
+/**
+ * The `path.matchesGlob()` method determines if `path` matches the `pattern`.
+ * @param path The path to glob-match against.
+ * @param pattern The glob to check the path against.
+ */
+declare const matchesGlob: (path: string, pattern: string | string[]) => boolean;
+
+type NodePath = typeof path;
+/**
+ * The platform-specific file delimiter.
+ *
+ * Equals to `";"` in windows and `":"` in all other platforms.
+ */
+declare const delimiter: ";" | ":";
+declare const posix: NodePath["posix"];
+declare const win32: NodePath["win32"];
+declare const _default: NodePath;
+
+export { basename, _default as default, delimiter, dirname, extname, format, isAbsolute, join, matchesGlob, normalize, normalizeString, parse, posix, relative, resolve, sep, toNamespacedPath, win32 };
diff --git a/vanilla/node_modules/pathe/dist/index.d.ts b/vanilla/node_modules/pathe/dist/index.d.ts
new file mode 100644
index 0000000..61046da
--- /dev/null
+++ b/vanilla/node_modules/pathe/dist/index.d.ts
@@ -0,0 +1,47 @@
+import * as path from 'node:path';
+import path__default from 'node:path';
+
+/**
+ * Constant for path separator.
+ *
+ * Always equals to `"/"`.
+ */
+declare const sep = "/";
+declare const normalize: typeof path__default.normalize;
+declare const join: typeof path__default.join;
+declare const resolve: typeof path__default.resolve;
+/**
+ * Resolves a string path, resolving '.' and '.' segments and allowing paths above the root.
+ *
+ * @param path - The path to normalise.
+ * @param allowAboveRoot - Whether to allow the resulting path to be above the root directory.
+ * @returns the normalised path string.
+ */
+declare function normalizeString(path: string, allowAboveRoot: boolean): string;
+declare const isAbsolute: typeof path__default.isAbsolute;
+declare const toNamespacedPath: typeof path__default.toNamespacedPath;
+declare const extname: typeof path__default.extname;
+declare const relative: typeof path__default.relative;
+declare const dirname: typeof path__default.dirname;
+declare const format: typeof path__default.format;
+declare const basename: typeof path__default.basename;
+declare const parse: typeof path__default.parse;
+/**
+ * The `path.matchesGlob()` method determines if `path` matches the `pattern`.
+ * @param path The path to glob-match against.
+ * @param pattern The glob to check the path against.
+ */
+declare const matchesGlob: (path: string, pattern: string | string[]) => boolean;
+
+type NodePath = typeof path;
+/**
+ * The platform-specific file delimiter.
+ *
+ * Equals to `";"` in windows and `":"` in all other platforms.
+ */
+declare const delimiter: ";" | ":";
+declare const posix: NodePath["posix"];
+declare const win32: NodePath["win32"];
+declare const _default: NodePath;
+
+export { basename, _default as default, delimiter, dirname, extname, format, isAbsolute, join, matchesGlob, normalize, normalizeString, parse, posix, relative, resolve, sep, toNamespacedPath, win32 };
diff --git a/vanilla/node_modules/pathe/dist/index.mjs b/vanilla/node_modules/pathe/dist/index.mjs
new file mode 100644
index 0000000..0582c1f
--- /dev/null
+++ b/vanilla/node_modules/pathe/dist/index.mjs
@@ -0,0 +1,19 @@
+import { _ as _path } from './shared/pathe.M-eThtNZ.mjs';
+export { c as basename, d as dirname, e as extname, f as format, i as isAbsolute, j as join, m as matchesGlob, n as normalize, a as normalizeString, p as parse, b as relative, r as resolve, s as sep, t as toNamespacedPath } from './shared/pathe.M-eThtNZ.mjs';
+
+const delimiter = /* @__PURE__ */ (() => globalThis.process?.platform === "win32" ? ";" : ":")();
+const _platforms = { posix: void 0, win32: void 0 };
+const mix = (del = delimiter) => {
+ return new Proxy(_path, {
+ get(_, prop) {
+ if (prop === "delimiter") return del;
+ if (prop === "posix") return posix;
+ if (prop === "win32") return win32;
+ return _platforms[prop] || _path[prop];
+ }
+ });
+};
+const posix = /* @__PURE__ */ mix(":");
+const win32 = /* @__PURE__ */ mix(";");
+
+export { posix as default, delimiter, posix, win32 };
diff --git a/vanilla/node_modules/pathe/dist/shared/pathe.BSlhyZSM.cjs b/vanilla/node_modules/pathe/dist/shared/pathe.BSlhyZSM.cjs
new file mode 100644
index 0000000..f4a62e3
--- /dev/null
+++ b/vanilla/node_modules/pathe/dist/shared/pathe.BSlhyZSM.cjs
@@ -0,0 +1,266 @@
+'use strict';
+
+let _lazyMatch = () => { var __lib__=(()=>{var m=Object.defineProperty,V=Object.getOwnPropertyDescriptor,G=Object.getOwnPropertyNames,T=Object.prototype.hasOwnProperty,q=(r,e)=>{for(var n in e)m(r,n,{get:e[n],enumerable:true});},H=(r,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of G(e))!T.call(r,t)&&t!==n&&m(r,t,{get:()=>e[t],enumerable:!(a=V(e,t))||a.enumerable});return r},J=r=>H(m({},"__esModule",{value:true}),r),w={};q(w,{default:()=>re});var A=r=>Array.isArray(r),d=r=>typeof r=="function",Q=r=>r.length===0,W=r=>typeof r=="number",K=r=>typeof r=="object"&&r!==null,X=r=>r instanceof RegExp,b=r=>typeof r=="string",h=r=>r===void 0,Y=r=>{const e=new Map;return n=>{const a=e.get(n);if(a)return a;const t=r(n);return e.set(n,t),t}},rr=(r,e,n={})=>{const a={cache:{},input:r,index:0,indexMax:0,options:n,output:[]};if(v(e)(a)&&a.index===r.length)return a.output;throw new Error(`Failed to parse at index ${a.indexMax}`)},i=(r,e)=>A(r)?er(r,e):b(r)?ar(r,e):nr(r,e),er=(r,e)=>{const n={};for(const a of r){if(a.length!==1)throw new Error(`Invalid character: "${a}"`);const t=a.charCodeAt(0);n[t]=true;}return a=>{const t=a.index,o=a.input;for(;a.index<o.length&&o.charCodeAt(a.index)in n;)a.index+=1;const u=a.index;if(u>t){if(!h(e)&&!a.options.silent){const s=a.input.slice(t,u),c=d(e)?e(s,o,String(t)):e;h(c)||a.output.push(c);}a.indexMax=Math.max(a.indexMax,a.index);}return true}},nr=(r,e)=>{const n=r.source,a=r.flags.replace(/y|$/,"y"),t=new RegExp(n,a);return g(o=>{t.lastIndex=o.index;const u=t.exec(o.input);if(u){if(!h(e)&&!o.options.silent){const s=d(e)?e(...u,o.input,String(o.index)):e;h(s)||o.output.push(s);}return o.index+=u[0].length,o.indexMax=Math.max(o.indexMax,o.index),true}else return false})},ar=(r,e)=>n=>{if(n.input.startsWith(r,n.index)){if(!h(e)&&!n.options.silent){const t=d(e)?e(r,n.input,String(n.index)):e;h(t)||n.output.push(t);}return n.index+=r.length,n.indexMax=Math.max(n.indexMax,n.index),true}else return false},C=(r,e,n,a)=>{const t=v(r);return g(_(M(o=>{let u=0;for(;u<n;){const s=o.index;if(!t(o)||(u+=1,o.index===s))break}return u>=e})))},tr=(r,e)=>C(r,0,1),f=(r,e)=>C(r,0,1/0),x=(r,e)=>{const n=r.map(v);return g(_(M(a=>{for(let t=0,o=n.length;t<o;t++)if(!n[t](a))return false;return true})))},l=(r,e)=>{const n=r.map(v);return g(_(a=>{for(let t=0,o=n.length;t<o;t++)if(n[t](a))return true;return false}))},M=(r,e=false)=>{const n=v(r);return a=>{const t=a.index,o=a.output.length,u=n(a);return (!u||e)&&(a.index=t,a.output.length!==o&&(a.output.length=o)),u}},_=(r,e)=>{const n=v(r);return n},g=(()=>{let r=0;return e=>{const n=v(e),a=r+=1;return t=>{var o;if(t.options.memoization===false)return n(t);const u=t.index,s=(o=t.cache)[a]||(o[a]=new Map),c=s.get(u);if(c===false)return false;if(W(c))return t.index=c,true;if(c)return t.index=c.index,c.output?.length&&t.output.push(...c.output),true;{const Z=t.output.length;if(n(t)){const D=t.index,U=t.output.length;if(U>Z){const ee=t.output.slice(Z,U);s.set(u,{index:D,output:ee});}else s.set(u,D);return true}else return s.set(u,false),false}}}})(),E=r=>{let e;return n=>(e||(e=v(r())),e(n))},v=Y(r=>{if(d(r))return Q(r)?E(r):r;if(b(r)||X(r))return i(r);if(A(r))return x(r);if(K(r))return l(Object.values(r));throw new Error("Invalid rule")}),P="abcdefghijklmnopqrstuvwxyz",ir=r=>{let e="";for(;r>0;){const n=(r-1)%26;e=P[n]+e,r=Math.floor((r-1)/26);}return e},O=r=>{let e=0;for(let n=0,a=r.length;n<a;n++)e=e*26+P.indexOf(r[n])+1;return e},S=(r,e)=>{if(e<r)return S(e,r);const n=[];for(;r<=e;)n.push(r++);return n},or=(r,e,n)=>S(r,e).map(a=>String(a).padStart(n,"0")),R=(r,e)=>S(O(r),O(e)).map(ir),p=r=>r,z=r=>ur(e=>rr(e,r,{memoization:false}).join("")),ur=r=>{const e={};return n=>e[n]??(e[n]=r(n))},sr=i(/^\*\*\/\*$/,".*"),cr=i(/^\*\*\/(\*)?([ a-zA-Z0-9._-]+)$/,(r,e,n)=>`.*${e?"":"(?:^|/)"}${n.replaceAll(".","\\.")}`),lr=i(/^\*\*\/(\*)?([ a-zA-Z0-9._-]*)\{([ a-zA-Z0-9._-]+(?:,[ a-zA-Z0-9._-]+)*)\}$/,(r,e,n,a)=>`.*${e?"":"(?:^|/)"}${n.replaceAll(".","\\.")}(?:${a.replaceAll(",","|").replaceAll(".","\\.")})`),y=i(/\\./,p),pr=i(/[$.*+?^(){}[\]\|]/,r=>`\\${r}`),vr=i(/./,p),hr=i(/^(?:!!)*!(.*)$/,(r,e)=>`(?!^${L(e)}$).*?`),dr=i(/^(!!)+/,""),fr=l([hr,dr]),xr=i(/\/(\*\*\/)+/,"(?:/.+/|/)"),gr=i(/^(\*\*\/)+/,"(?:^|.*/)"),mr=i(/\/(\*\*)$/,"(?:/.*|$)"),_r=i(/\*\*/,".*"),j=l([xr,gr,mr,_r]),Sr=i(/\*\/(?!\*\*\/)/,"[^/]*/"),yr=i(/\*/,"[^/]*"),N=l([Sr,yr]),k=i("?","[^/]"),$r=i("[",p),wr=i("]",p),Ar=i(/[!^]/,"^/"),br=i(/[a-z]-[a-z]|[0-9]-[0-9]/i,p),Cr=i(/[$.*+?^(){}[\|]/,r=>`\\${r}`),Mr=i(/[^\]]/,p),Er=l([y,Cr,br,Mr]),B=x([$r,tr(Ar),f(Er),wr]),Pr=i("{","(?:"),Or=i("}",")"),Rr=i(/(\d+)\.\.(\d+)/,(r,e,n)=>or(+e,+n,Math.min(e.length,n.length)).join("|")),zr=i(/([a-z]+)\.\.([a-z]+)/,(r,e,n)=>R(e,n).join("|")),jr=i(/([A-Z]+)\.\.([A-Z]+)/,(r,e,n)=>R(e.toLowerCase(),n.toLowerCase()).join("|").toUpperCase()),Nr=l([Rr,zr,jr]),I=x([Pr,Nr,Or]),kr=i("{","(?:"),Br=i("}",")"),Ir=i(",","|"),Fr=i(/[$.*+?^(){[\]\|]/,r=>`\\${r}`),Lr=i(/[^}]/,p),Zr=E(()=>F),Dr=l([j,N,k,B,I,Zr,y,Fr,Ir,Lr]),F=x([kr,f(Dr),Br]),Ur=f(l([sr,cr,lr,fr,j,N,k,B,I,F,y,pr,vr])),Vr=Ur,Gr=z(Vr),L=Gr,Tr=i(/\\./,p),qr=i(/./,p),Hr=i(/\*\*\*+/,"*"),Jr=i(/([^/{[(!])\*\*/,(r,e)=>`${e}*`),Qr=i(/(^|.)\*\*(?=[^*/)\]}])/,(r,e)=>`${e}*`),Wr=f(l([Tr,Hr,Jr,Qr,qr])),Kr=Wr,Xr=z(Kr),Yr=Xr,$=(r,e)=>{const n=Array.isArray(r)?r:[r];if(!n.length)return false;const a=n.map($.compile),t=n.every(s=>/(\/(?:\*\*)?|\[\/\])$/.test(s)),o=e.replace(/[\\\/]+/g,"/").replace(/\/$/,t?"/":"");return a.some(s=>s.test(o))};$.compile=r=>new RegExp(`^${L(Yr(r))}$`,"s");var re=$;return J(w)})();
+ return __lib__.default || __lib__; };
+let _match;
+const zeptomatch = (path, pattern) => {
+ if (!_match) {
+ _match = _lazyMatch();
+ _lazyMatch = null;
+ }
+ return _match(path, pattern);
+};
+
+const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
+function normalizeWindowsPath(input = "") {
+ if (!input) {
+ return input;
+ }
+ return input.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());
+}
+
+const _UNC_REGEX = /^[/\\]{2}/;
+const _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/;
+const _DRIVE_LETTER_RE = /^[A-Za-z]:$/;
+const _ROOT_FOLDER_RE = /^\/([A-Za-z]:)?$/;
+const _EXTNAME_RE = /.(\.[^./]+|\.)$/;
+const _PATH_ROOT_RE = /^[/\\]|^[a-zA-Z]:[/\\]/;
+const sep = "/";
+const normalize = function(path) {
+ if (path.length === 0) {
+ return ".";
+ }
+ path = normalizeWindowsPath(path);
+ const isUNCPath = path.match(_UNC_REGEX);
+ const isPathAbsolute = isAbsolute(path);
+ const trailingSeparator = path[path.length - 1] === "/";
+ path = normalizeString(path, !isPathAbsolute);
+ if (path.length === 0) {
+ if (isPathAbsolute) {
+ return "/";
+ }
+ return trailingSeparator ? "./" : ".";
+ }
+ if (trailingSeparator) {
+ path += "/";
+ }
+ if (_DRIVE_LETTER_RE.test(path)) {
+ path += "/";
+ }
+ if (isUNCPath) {
+ if (!isPathAbsolute) {
+ return `//./${path}`;
+ }
+ return `//${path}`;
+ }
+ return isPathAbsolute && !isAbsolute(path) ? `/${path}` : path;
+};
+const join = function(...segments) {
+ let path = "";
+ for (const seg of segments) {
+ if (!seg) {
+ continue;
+ }
+ if (path.length > 0) {
+ const pathTrailing = path[path.length - 1] === "/";
+ const segLeading = seg[0] === "/";
+ const both = pathTrailing && segLeading;
+ if (both) {
+ path += seg.slice(1);
+ } else {
+ path += pathTrailing || segLeading ? seg : `/${seg}`;
+ }
+ } else {
+ path += seg;
+ }
+ }
+ return normalize(path);
+};
+function cwd() {
+ if (typeof process !== "undefined" && typeof process.cwd === "function") {
+ return process.cwd().replace(/\\/g, "/");
+ }
+ return "/";
+}
+const resolve = function(...arguments_) {
+ arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));
+ let resolvedPath = "";
+ let resolvedAbsolute = false;
+ for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {
+ const path = index >= 0 ? arguments_[index] : cwd();
+ if (!path || path.length === 0) {
+ continue;
+ }
+ resolvedPath = `${path}/${resolvedPath}`;
+ resolvedAbsolute = isAbsolute(path);
+ }
+ resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);
+ if (resolvedAbsolute && !isAbsolute(resolvedPath)) {
+ return `/${resolvedPath}`;
+ }
+ return resolvedPath.length > 0 ? resolvedPath : ".";
+};
+function normalizeString(path, allowAboveRoot) {
+ let res = "";
+ let lastSegmentLength = 0;
+ let lastSlash = -1;
+ let dots = 0;
+ let char = null;
+ for (let index = 0; index <= path.length; ++index) {
+ if (index < path.length) {
+ char = path[index];
+ } else if (char === "/") {
+ break;
+ } else {
+ char = "/";
+ }
+ if (char === "/") {
+ if (lastSlash === index - 1 || dots === 1) ; else if (dots === 2) {
+ if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
+ if (res.length > 2) {
+ const lastSlashIndex = res.lastIndexOf("/");
+ if (lastSlashIndex === -1) {
+ res = "";
+ lastSegmentLength = 0;
+ } else {
+ res = res.slice(0, lastSlashIndex);
+ lastSegmentLength = res.length - 1 - res.lastIndexOf("/");
+ }
+ lastSlash = index;
+ dots = 0;
+ continue;
+ } else if (res.length > 0) {
+ res = "";
+ lastSegmentLength = 0;
+ lastSlash = index;
+ dots = 0;
+ continue;
+ }
+ }
+ if (allowAboveRoot) {
+ res += res.length > 0 ? "/.." : "..";
+ lastSegmentLength = 2;
+ }
+ } else {
+ if (res.length > 0) {
+ res += `/${path.slice(lastSlash + 1, index)}`;
+ } else {
+ res = path.slice(lastSlash + 1, index);
+ }
+ lastSegmentLength = index - lastSlash - 1;
+ }
+ lastSlash = index;
+ dots = 0;
+ } else if (char === "." && dots !== -1) {
+ ++dots;
+ } else {
+ dots = -1;
+ }
+ }
+ return res;
+}
+const isAbsolute = function(p) {
+ return _IS_ABSOLUTE_RE.test(p);
+};
+const toNamespacedPath = function(p) {
+ return normalizeWindowsPath(p);
+};
+const extname = function(p) {
+ if (p === "..") return "";
+ const match = _EXTNAME_RE.exec(normalizeWindowsPath(p));
+ return match && match[1] || "";
+};
+const relative = function(from, to) {
+ const _from = resolve(from).replace(_ROOT_FOLDER_RE, "$1").split("/");
+ const _to = resolve(to).replace(_ROOT_FOLDER_RE, "$1").split("/");
+ if (_to[0][1] === ":" && _from[0][1] === ":" && _from[0] !== _to[0]) {
+ return _to.join("/");
+ }
+ const _fromCopy = [..._from];
+ for (const segment of _fromCopy) {
+ if (_to[0] !== segment) {
+ break;
+ }
+ _from.shift();
+ _to.shift();
+ }
+ return [..._from.map(() => ".."), ..._to].join("/");
+};
+const dirname = function(p) {
+ const segments = normalizeWindowsPath(p).replace(/\/$/, "").split("/").slice(0, -1);
+ if (segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0])) {
+ segments[0] += "/";
+ }
+ return segments.join("/") || (isAbsolute(p) ? "/" : ".");
+};
+const format = function(p) {
+ const ext = p.ext ? p.ext.startsWith(".") ? p.ext : `.${p.ext}` : "";
+ const segments = [p.root, p.dir, p.base ?? (p.name ?? "") + ext].filter(
+ Boolean
+ );
+ return normalizeWindowsPath(
+ p.root ? resolve(...segments) : segments.join("/")
+ );
+};
+const basename = function(p, extension) {
+ const segments = normalizeWindowsPath(p).split("/");
+ let lastSegment = "";
+ for (let i = segments.length - 1; i >= 0; i--) {
+ const val = segments[i];
+ if (val) {
+ lastSegment = val;
+ break;
+ }
+ }
+ return extension && lastSegment.endsWith(extension) ? lastSegment.slice(0, -extension.length) : lastSegment;
+};
+const parse = function(p) {
+ const root = _PATH_ROOT_RE.exec(p)?.[0]?.replace(/\\/g, "/") || "";
+ const base = basename(p);
+ const extension = extname(base);
+ return {
+ root,
+ dir: dirname(p),
+ base,
+ ext: extension,
+ name: base.slice(0, base.length - extension.length)
+ };
+};
+const matchesGlob = (path, pattern) => {
+ return zeptomatch(pattern, normalize(path));
+};
+
+const _path = {
+ __proto__: null,
+ basename: basename,
+ dirname: dirname,
+ extname: extname,
+ format: format,
+ isAbsolute: isAbsolute,
+ join: join,
+ matchesGlob: matchesGlob,
+ normalize: normalize,
+ normalizeString: normalizeString,
+ parse: parse,
+ relative: relative,
+ resolve: resolve,
+ sep: sep,
+ toNamespacedPath: toNamespacedPath
+};
+
+exports._path = _path;
+exports.basename = basename;
+exports.dirname = dirname;
+exports.extname = extname;
+exports.format = format;
+exports.isAbsolute = isAbsolute;
+exports.join = join;
+exports.matchesGlob = matchesGlob;
+exports.normalize = normalize;
+exports.normalizeString = normalizeString;
+exports.normalizeWindowsPath = normalizeWindowsPath;
+exports.parse = parse;
+exports.relative = relative;
+exports.resolve = resolve;
+exports.sep = sep;
+exports.toNamespacedPath = toNamespacedPath;
diff --git a/vanilla/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs b/vanilla/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs
new file mode 100644
index 0000000..81d714d
--- /dev/null
+++ b/vanilla/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs
@@ -0,0 +1,249 @@
+let _lazyMatch = () => { var __lib__=(()=>{var m=Object.defineProperty,V=Object.getOwnPropertyDescriptor,G=Object.getOwnPropertyNames,T=Object.prototype.hasOwnProperty,q=(r,e)=>{for(var n in e)m(r,n,{get:e[n],enumerable:true});},H=(r,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of G(e))!T.call(r,t)&&t!==n&&m(r,t,{get:()=>e[t],enumerable:!(a=V(e,t))||a.enumerable});return r},J=r=>H(m({},"__esModule",{value:true}),r),w={};q(w,{default:()=>re});var A=r=>Array.isArray(r),d=r=>typeof r=="function",Q=r=>r.length===0,W=r=>typeof r=="number",K=r=>typeof r=="object"&&r!==null,X=r=>r instanceof RegExp,b=r=>typeof r=="string",h=r=>r===void 0,Y=r=>{const e=new Map;return n=>{const a=e.get(n);if(a)return a;const t=r(n);return e.set(n,t),t}},rr=(r,e,n={})=>{const a={cache:{},input:r,index:0,indexMax:0,options:n,output:[]};if(v(e)(a)&&a.index===r.length)return a.output;throw new Error(`Failed to parse at index ${a.indexMax}`)},i=(r,e)=>A(r)?er(r,e):b(r)?ar(r,e):nr(r,e),er=(r,e)=>{const n={};for(const a of r){if(a.length!==1)throw new Error(`Invalid character: "${a}"`);const t=a.charCodeAt(0);n[t]=true;}return a=>{const t=a.index,o=a.input;for(;a.index<o.length&&o.charCodeAt(a.index)in n;)a.index+=1;const u=a.index;if(u>t){if(!h(e)&&!a.options.silent){const s=a.input.slice(t,u),c=d(e)?e(s,o,String(t)):e;h(c)||a.output.push(c);}a.indexMax=Math.max(a.indexMax,a.index);}return true}},nr=(r,e)=>{const n=r.source,a=r.flags.replace(/y|$/,"y"),t=new RegExp(n,a);return g(o=>{t.lastIndex=o.index;const u=t.exec(o.input);if(u){if(!h(e)&&!o.options.silent){const s=d(e)?e(...u,o.input,String(o.index)):e;h(s)||o.output.push(s);}return o.index+=u[0].length,o.indexMax=Math.max(o.indexMax,o.index),true}else return false})},ar=(r,e)=>n=>{if(n.input.startsWith(r,n.index)){if(!h(e)&&!n.options.silent){const t=d(e)?e(r,n.input,String(n.index)):e;h(t)||n.output.push(t);}return n.index+=r.length,n.indexMax=Math.max(n.indexMax,n.index),true}else return false},C=(r,e,n,a)=>{const t=v(r);return g(_(M(o=>{let u=0;for(;u<n;){const s=o.index;if(!t(o)||(u+=1,o.index===s))break}return u>=e})))},tr=(r,e)=>C(r,0,1),f=(r,e)=>C(r,0,1/0),x=(r,e)=>{const n=r.map(v);return g(_(M(a=>{for(let t=0,o=n.length;t<o;t++)if(!n[t](a))return false;return true})))},l=(r,e)=>{const n=r.map(v);return g(_(a=>{for(let t=0,o=n.length;t<o;t++)if(n[t](a))return true;return false}))},M=(r,e=false)=>{const n=v(r);return a=>{const t=a.index,o=a.output.length,u=n(a);return (!u||e)&&(a.index=t,a.output.length!==o&&(a.output.length=o)),u}},_=(r,e)=>{const n=v(r);return n},g=(()=>{let r=0;return e=>{const n=v(e),a=r+=1;return t=>{var o;if(t.options.memoization===false)return n(t);const u=t.index,s=(o=t.cache)[a]||(o[a]=new Map),c=s.get(u);if(c===false)return false;if(W(c))return t.index=c,true;if(c)return t.index=c.index,c.output?.length&&t.output.push(...c.output),true;{const Z=t.output.length;if(n(t)){const D=t.index,U=t.output.length;if(U>Z){const ee=t.output.slice(Z,U);s.set(u,{index:D,output:ee});}else s.set(u,D);return true}else return s.set(u,false),false}}}})(),E=r=>{let e;return n=>(e||(e=v(r())),e(n))},v=Y(r=>{if(d(r))return Q(r)?E(r):r;if(b(r)||X(r))return i(r);if(A(r))return x(r);if(K(r))return l(Object.values(r));throw new Error("Invalid rule")}),P="abcdefghijklmnopqrstuvwxyz",ir=r=>{let e="";for(;r>0;){const n=(r-1)%26;e=P[n]+e,r=Math.floor((r-1)/26);}return e},O=r=>{let e=0;for(let n=0,a=r.length;n<a;n++)e=e*26+P.indexOf(r[n])+1;return e},S=(r,e)=>{if(e<r)return S(e,r);const n=[];for(;r<=e;)n.push(r++);return n},or=(r,e,n)=>S(r,e).map(a=>String(a).padStart(n,"0")),R=(r,e)=>S(O(r),O(e)).map(ir),p=r=>r,z=r=>ur(e=>rr(e,r,{memoization:false}).join("")),ur=r=>{const e={};return n=>e[n]??(e[n]=r(n))},sr=i(/^\*\*\/\*$/,".*"),cr=i(/^\*\*\/(\*)?([ a-zA-Z0-9._-]+)$/,(r,e,n)=>`.*${e?"":"(?:^|/)"}${n.replaceAll(".","\\.")}`),lr=i(/^\*\*\/(\*)?([ a-zA-Z0-9._-]*)\{([ a-zA-Z0-9._-]+(?:,[ a-zA-Z0-9._-]+)*)\}$/,(r,e,n,a)=>`.*${e?"":"(?:^|/)"}${n.replaceAll(".","\\.")}(?:${a.replaceAll(",","|").replaceAll(".","\\.")})`),y=i(/\\./,p),pr=i(/[$.*+?^(){}[\]\|]/,r=>`\\${r}`),vr=i(/./,p),hr=i(/^(?:!!)*!(.*)$/,(r,e)=>`(?!^${L(e)}$).*?`),dr=i(/^(!!)+/,""),fr=l([hr,dr]),xr=i(/\/(\*\*\/)+/,"(?:/.+/|/)"),gr=i(/^(\*\*\/)+/,"(?:^|.*/)"),mr=i(/\/(\*\*)$/,"(?:/.*|$)"),_r=i(/\*\*/,".*"),j=l([xr,gr,mr,_r]),Sr=i(/\*\/(?!\*\*\/)/,"[^/]*/"),yr=i(/\*/,"[^/]*"),N=l([Sr,yr]),k=i("?","[^/]"),$r=i("[",p),wr=i("]",p),Ar=i(/[!^]/,"^/"),br=i(/[a-z]-[a-z]|[0-9]-[0-9]/i,p),Cr=i(/[$.*+?^(){}[\|]/,r=>`\\${r}`),Mr=i(/[^\]]/,p),Er=l([y,Cr,br,Mr]),B=x([$r,tr(Ar),f(Er),wr]),Pr=i("{","(?:"),Or=i("}",")"),Rr=i(/(\d+)\.\.(\d+)/,(r,e,n)=>or(+e,+n,Math.min(e.length,n.length)).join("|")),zr=i(/([a-z]+)\.\.([a-z]+)/,(r,e,n)=>R(e,n).join("|")),jr=i(/([A-Z]+)\.\.([A-Z]+)/,(r,e,n)=>R(e.toLowerCase(),n.toLowerCase()).join("|").toUpperCase()),Nr=l([Rr,zr,jr]),I=x([Pr,Nr,Or]),kr=i("{","(?:"),Br=i("}",")"),Ir=i(",","|"),Fr=i(/[$.*+?^(){[\]\|]/,r=>`\\${r}`),Lr=i(/[^}]/,p),Zr=E(()=>F),Dr=l([j,N,k,B,I,Zr,y,Fr,Ir,Lr]),F=x([kr,f(Dr),Br]),Ur=f(l([sr,cr,lr,fr,j,N,k,B,I,F,y,pr,vr])),Vr=Ur,Gr=z(Vr),L=Gr,Tr=i(/\\./,p),qr=i(/./,p),Hr=i(/\*\*\*+/,"*"),Jr=i(/([^/{[(!])\*\*/,(r,e)=>`${e}*`),Qr=i(/(^|.)\*\*(?=[^*/)\]}])/,(r,e)=>`${e}*`),Wr=f(l([Tr,Hr,Jr,Qr,qr])),Kr=Wr,Xr=z(Kr),Yr=Xr,$=(r,e)=>{const n=Array.isArray(r)?r:[r];if(!n.length)return false;const a=n.map($.compile),t=n.every(s=>/(\/(?:\*\*)?|\[\/\])$/.test(s)),o=e.replace(/[\\\/]+/g,"/").replace(/\/$/,t?"/":"");return a.some(s=>s.test(o))};$.compile=r=>new RegExp(`^${L(Yr(r))}$`,"s");var re=$;return J(w)})();
+ return __lib__.default || __lib__; };
+let _match;
+const zeptomatch = (path, pattern) => {
+ if (!_match) {
+ _match = _lazyMatch();
+ _lazyMatch = null;
+ }
+ return _match(path, pattern);
+};
+
+const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
+function normalizeWindowsPath(input = "") {
+ if (!input) {
+ return input;
+ }
+ return input.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());
+}
+
+const _UNC_REGEX = /^[/\\]{2}/;
+const _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/;
+const _DRIVE_LETTER_RE = /^[A-Za-z]:$/;
+const _ROOT_FOLDER_RE = /^\/([A-Za-z]:)?$/;
+const _EXTNAME_RE = /.(\.[^./]+|\.)$/;
+const _PATH_ROOT_RE = /^[/\\]|^[a-zA-Z]:[/\\]/;
+const sep = "/";
+const normalize = function(path) {
+ if (path.length === 0) {
+ return ".";
+ }
+ path = normalizeWindowsPath(path);
+ const isUNCPath = path.match(_UNC_REGEX);
+ const isPathAbsolute = isAbsolute(path);
+ const trailingSeparator = path[path.length - 1] === "/";
+ path = normalizeString(path, !isPathAbsolute);
+ if (path.length === 0) {
+ if (isPathAbsolute) {
+ return "/";
+ }
+ return trailingSeparator ? "./" : ".";
+ }
+ if (trailingSeparator) {
+ path += "/";
+ }
+ if (_DRIVE_LETTER_RE.test(path)) {
+ path += "/";
+ }
+ if (isUNCPath) {
+ if (!isPathAbsolute) {
+ return `//./${path}`;
+ }
+ return `//${path}`;
+ }
+ return isPathAbsolute && !isAbsolute(path) ? `/${path}` : path;
+};
+const join = function(...segments) {
+ let path = "";
+ for (const seg of segments) {
+ if (!seg) {
+ continue;
+ }
+ if (path.length > 0) {
+ const pathTrailing = path[path.length - 1] === "/";
+ const segLeading = seg[0] === "/";
+ const both = pathTrailing && segLeading;
+ if (both) {
+ path += seg.slice(1);
+ } else {
+ path += pathTrailing || segLeading ? seg : `/${seg}`;
+ }
+ } else {
+ path += seg;
+ }
+ }
+ return normalize(path);
+};
+function cwd() {
+ if (typeof process !== "undefined" && typeof process.cwd === "function") {
+ return process.cwd().replace(/\\/g, "/");
+ }
+ return "/";
+}
+const resolve = function(...arguments_) {
+ arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));
+ let resolvedPath = "";
+ let resolvedAbsolute = false;
+ for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {
+ const path = index >= 0 ? arguments_[index] : cwd();
+ if (!path || path.length === 0) {
+ continue;
+ }
+ resolvedPath = `${path}/${resolvedPath}`;
+ resolvedAbsolute = isAbsolute(path);
+ }
+ resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);
+ if (resolvedAbsolute && !isAbsolute(resolvedPath)) {
+ return `/${resolvedPath}`;
+ }
+ return resolvedPath.length > 0 ? resolvedPath : ".";
+};
+function normalizeString(path, allowAboveRoot) {
+ let res = "";
+ let lastSegmentLength = 0;
+ let lastSlash = -1;
+ let dots = 0;
+ let char = null;
+ for (let index = 0; index <= path.length; ++index) {
+ if (index < path.length) {
+ char = path[index];
+ } else if (char === "/") {
+ break;
+ } else {
+ char = "/";
+ }
+ if (char === "/") {
+ if (lastSlash === index - 1 || dots === 1) ; else if (dots === 2) {
+ if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
+ if (res.length > 2) {
+ const lastSlashIndex = res.lastIndexOf("/");
+ if (lastSlashIndex === -1) {
+ res = "";
+ lastSegmentLength = 0;
+ } else {
+ res = res.slice(0, lastSlashIndex);
+ lastSegmentLength = res.length - 1 - res.lastIndexOf("/");
+ }
+ lastSlash = index;
+ dots = 0;
+ continue;
+ } else if (res.length > 0) {
+ res = "";
+ lastSegmentLength = 0;
+ lastSlash = index;
+ dots = 0;
+ continue;
+ }
+ }
+ if (allowAboveRoot) {
+ res += res.length > 0 ? "/.." : "..";
+ lastSegmentLength = 2;
+ }
+ } else {
+ if (res.length > 0) {
+ res += `/${path.slice(lastSlash + 1, index)}`;
+ } else {
+ res = path.slice(lastSlash + 1, index);
+ }
+ lastSegmentLength = index - lastSlash - 1;
+ }
+ lastSlash = index;
+ dots = 0;
+ } else if (char === "." && dots !== -1) {
+ ++dots;
+ } else {
+ dots = -1;
+ }
+ }
+ return res;
+}
+const isAbsolute = function(p) {
+ return _IS_ABSOLUTE_RE.test(p);
+};
+const toNamespacedPath = function(p) {
+ return normalizeWindowsPath(p);
+};
+const extname = function(p) {
+ if (p === "..") return "";
+ const match = _EXTNAME_RE.exec(normalizeWindowsPath(p));
+ return match && match[1] || "";
+};
+const relative = function(from, to) {
+ const _from = resolve(from).replace(_ROOT_FOLDER_RE, "$1").split("/");
+ const _to = resolve(to).replace(_ROOT_FOLDER_RE, "$1").split("/");
+ if (_to[0][1] === ":" && _from[0][1] === ":" && _from[0] !== _to[0]) {
+ return _to.join("/");
+ }
+ const _fromCopy = [..._from];
+ for (const segment of _fromCopy) {
+ if (_to[0] !== segment) {
+ break;
+ }
+ _from.shift();
+ _to.shift();
+ }
+ return [..._from.map(() => ".."), ..._to].join("/");
+};
+const dirname = function(p) {
+ const segments = normalizeWindowsPath(p).replace(/\/$/, "").split("/").slice(0, -1);
+ if (segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0])) {
+ segments[0] += "/";
+ }
+ return segments.join("/") || (isAbsolute(p) ? "/" : ".");
+};
+const format = function(p) {
+ const ext = p.ext ? p.ext.startsWith(".") ? p.ext : `.${p.ext}` : "";
+ const segments = [p.root, p.dir, p.base ?? (p.name ?? "") + ext].filter(
+ Boolean
+ );
+ return normalizeWindowsPath(
+ p.root ? resolve(...segments) : segments.join("/")
+ );
+};
+const basename = function(p, extension) {
+ const segments = normalizeWindowsPath(p).split("/");
+ let lastSegment = "";
+ for (let i = segments.length - 1; i >= 0; i--) {
+ const val = segments[i];
+ if (val) {
+ lastSegment = val;
+ break;
+ }
+ }
+ return extension && lastSegment.endsWith(extension) ? lastSegment.slice(0, -extension.length) : lastSegment;
+};
+const parse = function(p) {
+ const root = _PATH_ROOT_RE.exec(p)?.[0]?.replace(/\\/g, "/") || "";
+ const base = basename(p);
+ const extension = extname(base);
+ return {
+ root,
+ dir: dirname(p),
+ base,
+ ext: extension,
+ name: base.slice(0, base.length - extension.length)
+ };
+};
+const matchesGlob = (path, pattern) => {
+ return zeptomatch(pattern, normalize(path));
+};
+
+const _path = {
+ __proto__: null,
+ basename: basename,
+ dirname: dirname,
+ extname: extname,
+ format: format,
+ isAbsolute: isAbsolute,
+ join: join,
+ matchesGlob: matchesGlob,
+ normalize: normalize,
+ normalizeString: normalizeString,
+ parse: parse,
+ relative: relative,
+ resolve: resolve,
+ sep: sep,
+ toNamespacedPath: toNamespacedPath
+};
+
+export { _path as _, normalizeString as a, relative as b, basename as c, dirname as d, extname as e, format as f, normalizeWindowsPath as g, isAbsolute as i, join as j, matchesGlob as m, normalize as n, parse as p, resolve as r, sep as s, toNamespacedPath as t };
diff --git a/vanilla/node_modules/pathe/dist/utils.cjs b/vanilla/node_modules/pathe/dist/utils.cjs
new file mode 100644
index 0000000..03c7ff3
--- /dev/null
+++ b/vanilla/node_modules/pathe/dist/utils.cjs
@@ -0,0 +1,82 @@
+'use strict';
+
+const _path = require('./shared/pathe.BSlhyZSM.cjs');
+
+const pathSeparators = /* @__PURE__ */ new Set(["/", "\\", void 0]);
+const normalizedAliasSymbol = Symbol.for("pathe:normalizedAlias");
+const SLASH_RE = /[/\\]/;
+function normalizeAliases(_aliases) {
+ if (_aliases[normalizedAliasSymbol]) {
+ return _aliases;
+ }
+ const aliases = Object.fromEntries(
+ Object.entries(_aliases).sort(([a], [b]) => _compareAliases(a, b))
+ );
+ for (const key in aliases) {
+ for (const alias in aliases) {
+ if (alias === key || key.startsWith(alias)) {
+ continue;
+ }
+ if (aliases[key]?.startsWith(alias) && pathSeparators.has(aliases[key][alias.length])) {
+ aliases[key] = aliases[alias] + aliases[key].slice(alias.length);
+ }
+ }
+ }
+ Object.defineProperty(aliases, normalizedAliasSymbol, {
+ value: true,
+ enumerable: false
+ });
+ return aliases;
+}
+function resolveAlias(path, aliases) {
+ const _path$1 = _path.normalizeWindowsPath(path);
+ aliases = normalizeAliases(aliases);
+ for (const [alias, to] of Object.entries(aliases)) {
+ if (!_path$1.startsWith(alias)) {
+ continue;
+ }
+ const _alias = hasTrailingSlash(alias) ? alias.slice(0, -1) : alias;
+ if (hasTrailingSlash(_path$1[_alias.length])) {
+ return _path.join(to, _path$1.slice(alias.length));
+ }
+ }
+ return _path$1;
+}
+function reverseResolveAlias(path, aliases) {
+ const _path$1 = _path.normalizeWindowsPath(path);
+ aliases = normalizeAliases(aliases);
+ const matches = [];
+ for (const [to, alias] of Object.entries(aliases)) {
+ if (!_path$1.startsWith(alias)) {
+ continue;
+ }
+ const _alias = hasTrailingSlash(alias) ? alias.slice(0, -1) : alias;
+ if (hasTrailingSlash(_path$1[_alias.length])) {
+ matches.push(_path.join(to, _path$1.slice(alias.length)));
+ }
+ }
+ return matches.sort((a, b) => b.length - a.length);
+}
+function filename(path) {
+ const base = path.split(SLASH_RE).pop();
+ if (!base) {
+ return void 0;
+ }
+ const separatorIndex = base.lastIndexOf(".");
+ if (separatorIndex <= 0) {
+ return base;
+ }
+ return base.slice(0, separatorIndex);
+}
+function _compareAliases(a, b) {
+ return b.split("/").length - a.split("/").length;
+}
+function hasTrailingSlash(path = "/") {
+ const lastChar = path[path.length - 1];
+ return lastChar === "/" || lastChar === "\\";
+}
+
+exports.filename = filename;
+exports.normalizeAliases = normalizeAliases;
+exports.resolveAlias = resolveAlias;
+exports.reverseResolveAlias = reverseResolveAlias;
diff --git a/vanilla/node_modules/pathe/dist/utils.d.cts b/vanilla/node_modules/pathe/dist/utils.d.cts
new file mode 100644
index 0000000..af369d0
--- /dev/null
+++ b/vanilla/node_modules/pathe/dist/utils.d.cts
@@ -0,0 +1,32 @@
+/**
+ * Normalises alias mappings, ensuring that more specific aliases are resolved before less specific ones.
+ * This function also ensures that aliases do not resolve to themselves cyclically.
+ *
+ * @param _aliases - A set of alias mappings where each key is an alias and its value is the actual path it points to.
+ * @returns a set of normalised alias mappings.
+ */
+declare function normalizeAliases(_aliases: Record<string, string>): Record<string, string>;
+/**
+ * Resolves a path string to its alias if applicable, otherwise returns the original path.
+ * This function normalises the path, resolves the alias and then joins it to the alias target if necessary.
+ *
+ * @param path - The path string to resolve.
+ * @param aliases - A set of alias mappings to use for resolution.
+ * @returns the resolved path as a string.
+ */
+declare function resolveAlias(path: string, aliases: Record<string, string>): string;
+/**
+ * Resolves a path string to its possible alias.
+ *
+ * Returns an array of possible alias resolutions (could be empty), sorted by specificity (longest first).
+ */
+declare function reverseResolveAlias(path: string, aliases: Record<string, string>): string[];
+/**
+ * Extracts the filename from a given path, excluding any directory paths and the file extension.
+ *
+ * @param path - The full path of the file from which to extract the filename.
+ * @returns the filename without the extension, or `undefined` if the filename cannot be extracted.
+ */
+declare function filename(path: string): string | undefined;
+
+export { filename, normalizeAliases, resolveAlias, reverseResolveAlias };
diff --git a/vanilla/node_modules/pathe/dist/utils.d.mts b/vanilla/node_modules/pathe/dist/utils.d.mts
new file mode 100644
index 0000000..af369d0
--- /dev/null
+++ b/vanilla/node_modules/pathe/dist/utils.d.mts
@@ -0,0 +1,32 @@
+/**
+ * Normalises alias mappings, ensuring that more specific aliases are resolved before less specific ones.
+ * This function also ensures that aliases do not resolve to themselves cyclically.
+ *
+ * @param _aliases - A set of alias mappings where each key is an alias and its value is the actual path it points to.
+ * @returns a set of normalised alias mappings.
+ */
+declare function normalizeAliases(_aliases: Record<string, string>): Record<string, string>;
+/**
+ * Resolves a path string to its alias if applicable, otherwise returns the original path.
+ * This function normalises the path, resolves the alias and then joins it to the alias target if necessary.
+ *
+ * @param path - The path string to resolve.
+ * @param aliases - A set of alias mappings to use for resolution.
+ * @returns the resolved path as a string.
+ */
+declare function resolveAlias(path: string, aliases: Record<string, string>): string;
+/**
+ * Resolves a path string to its possible alias.
+ *
+ * Returns an array of possible alias resolutions (could be empty), sorted by specificity (longest first).
+ */
+declare function reverseResolveAlias(path: string, aliases: Record<string, string>): string[];
+/**
+ * Extracts the filename from a given path, excluding any directory paths and the file extension.
+ *
+ * @param path - The full path of the file from which to extract the filename.
+ * @returns the filename without the extension, or `undefined` if the filename cannot be extracted.
+ */
+declare function filename(path: string): string | undefined;
+
+export { filename, normalizeAliases, resolveAlias, reverseResolveAlias };
diff --git a/vanilla/node_modules/pathe/dist/utils.d.ts b/vanilla/node_modules/pathe/dist/utils.d.ts
new file mode 100644
index 0000000..af369d0
--- /dev/null
+++ b/vanilla/node_modules/pathe/dist/utils.d.ts
@@ -0,0 +1,32 @@
+/**
+ * Normalises alias mappings, ensuring that more specific aliases are resolved before less specific ones.
+ * This function also ensures that aliases do not resolve to themselves cyclically.
+ *
+ * @param _aliases - A set of alias mappings where each key is an alias and its value is the actual path it points to.
+ * @returns a set of normalised alias mappings.
+ */
+declare function normalizeAliases(_aliases: Record<string, string>): Record<string, string>;
+/**
+ * Resolves a path string to its alias if applicable, otherwise returns the original path.
+ * This function normalises the path, resolves the alias and then joins it to the alias target if necessary.
+ *
+ * @param path - The path string to resolve.
+ * @param aliases - A set of alias mappings to use for resolution.
+ * @returns the resolved path as a string.
+ */
+declare function resolveAlias(path: string, aliases: Record<string, string>): string;
+/**
+ * Resolves a path string to its possible alias.
+ *
+ * Returns an array of possible alias resolutions (could be empty), sorted by specificity (longest first).
+ */
+declare function reverseResolveAlias(path: string, aliases: Record<string, string>): string[];
+/**
+ * Extracts the filename from a given path, excluding any directory paths and the file extension.
+ *
+ * @param path - The full path of the file from which to extract the filename.
+ * @returns the filename without the extension, or `undefined` if the filename cannot be extracted.
+ */
+declare function filename(path: string): string | undefined;
+
+export { filename, normalizeAliases, resolveAlias, reverseResolveAlias };
diff --git a/vanilla/node_modules/pathe/dist/utils.mjs b/vanilla/node_modules/pathe/dist/utils.mjs
new file mode 100644
index 0000000..748072e
--- /dev/null
+++ b/vanilla/node_modules/pathe/dist/utils.mjs
@@ -0,0 +1,77 @@
+import { g as normalizeWindowsPath, j as join } from './shared/pathe.M-eThtNZ.mjs';
+
+const pathSeparators = /* @__PURE__ */ new Set(["/", "\\", void 0]);
+const normalizedAliasSymbol = Symbol.for("pathe:normalizedAlias");
+const SLASH_RE = /[/\\]/;
+function normalizeAliases(_aliases) {
+ if (_aliases[normalizedAliasSymbol]) {
+ return _aliases;
+ }
+ const aliases = Object.fromEntries(
+ Object.entries(_aliases).sort(([a], [b]) => _compareAliases(a, b))
+ );
+ for (const key in aliases) {
+ for (const alias in aliases) {
+ if (alias === key || key.startsWith(alias)) {
+ continue;
+ }
+ if (aliases[key]?.startsWith(alias) && pathSeparators.has(aliases[key][alias.length])) {
+ aliases[key] = aliases[alias] + aliases[key].slice(alias.length);
+ }
+ }
+ }
+ Object.defineProperty(aliases, normalizedAliasSymbol, {
+ value: true,
+ enumerable: false
+ });
+ return aliases;
+}
+function resolveAlias(path, aliases) {
+ const _path = normalizeWindowsPath(path);
+ aliases = normalizeAliases(aliases);
+ for (const [alias, to] of Object.entries(aliases)) {
+ if (!_path.startsWith(alias)) {
+ continue;
+ }
+ const _alias = hasTrailingSlash(alias) ? alias.slice(0, -1) : alias;
+ if (hasTrailingSlash(_path[_alias.length])) {
+ return join(to, _path.slice(alias.length));
+ }
+ }
+ return _path;
+}
+function reverseResolveAlias(path, aliases) {
+ const _path = normalizeWindowsPath(path);
+ aliases = normalizeAliases(aliases);
+ const matches = [];
+ for (const [to, alias] of Object.entries(aliases)) {
+ if (!_path.startsWith(alias)) {
+ continue;
+ }
+ const _alias = hasTrailingSlash(alias) ? alias.slice(0, -1) : alias;
+ if (hasTrailingSlash(_path[_alias.length])) {
+ matches.push(join(to, _path.slice(alias.length)));
+ }
+ }
+ return matches.sort((a, b) => b.length - a.length);
+}
+function filename(path) {
+ const base = path.split(SLASH_RE).pop();
+ if (!base) {
+ return void 0;
+ }
+ const separatorIndex = base.lastIndexOf(".");
+ if (separatorIndex <= 0) {
+ return base;
+ }
+ return base.slice(0, separatorIndex);
+}
+function _compareAliases(a, b) {
+ return b.split("/").length - a.split("/").length;
+}
+function hasTrailingSlash(path = "/") {
+ const lastChar = path[path.length - 1];
+ return lastChar === "/" || lastChar === "\\";
+}
+
+export { filename, normalizeAliases, resolveAlias, reverseResolveAlias };
diff --git a/vanilla/node_modules/pathe/package.json b/vanilla/node_modules/pathe/package.json
new file mode 100644
index 0000000..5522b28
--- /dev/null
+++ b/vanilla/node_modules/pathe/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "pathe",
+ "version": "2.0.3",
+ "description": "Universal filesystem path utils",
+ "repository": "unjs/pathe",
+ "license": "MIT",
+ "sideEffects": false,
+ "type": "module",
+ "exports": {
+ ".": {
+ "import": {
+ "types": "./dist/index.d.mts",
+ "default": "./dist/index.mjs"
+ },
+ "require": {
+ "types": "./dist/index.d.cts",
+ "default": "./dist/index.cjs"
+ }
+ },
+ "./utils": {
+ "import": {
+ "types": "./dist/utils.d.mts",
+ "default": "./dist/utils.mjs"
+ },
+ "require": {
+ "types": "./dist/utils.d.cts",
+ "default": "./dist/utils.cjs"
+ }
+ }
+ },
+ "main": "./dist/index.cjs",
+ "module": "./dist/index.mjs",
+ "types": "./dist/index.d.ts",
+ "files": [
+ "dist",
+ "utils.d.ts"
+ ],
+ "devDependencies": {
+ "@types/node": "^22.13.1",
+ "@vitest/coverage-v8": "^3.0.5",
+ "changelogen": "^0.5.7",
+ "esbuild": "^0.25.0",
+ "eslint": "^9.20.1",
+ "eslint-config-unjs": "^0.4.2",
+ "jiti": "^2.4.2",
+ "prettier": "^3.5.0",
+ "typescript": "^5.7.3",
+ "unbuild": "^3.3.1",
+ "vitest": "^3.0.5",
+ "zeptomatch": "^2.0.0"
+ },
+ "scripts": {
+ "build": "unbuild",
+ "dev": "vitest",
+ "lint": "eslint . && prettier -c src test",
+ "lint:fix": "eslint . --fix && prettier -w src test",
+ "release": "pnpm test && pnpm build && changelogen --release && pnpm publish && git push --follow-tags",
+ "test": "pnpm lint && vitest run --coverage",
+ "test:types": "tsc --noEmit"
+ }
+} \ No newline at end of file
diff --git a/vanilla/node_modules/pathe/utils.d.ts b/vanilla/node_modules/pathe/utils.d.ts
new file mode 100644
index 0000000..59cabd3
--- /dev/null
+++ b/vanilla/node_modules/pathe/utils.d.ts
@@ -0,0 +1 @@
+export * from "./dist/utils";