functype-os 1.4.4 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{PathError as e}from"../errors/errors.js";import{Left as t,Option as n,Right as r}from"functype";import*as i from"node:os";import*as a from"node:path";const o=e=>e===`~`?i.homedir():e.startsWith(`~/`)||e.startsWith(`~\\`)?a.join(i.homedir(),e.slice(2)):e,s=i=>{let a=[],o=i.replace(/\$(?:\{([^}$]+)\}|([A-Za-z_][A-Za-z0-9_]*))/g,(e,...t)=>{let r=n(t[0]).or(n(t[1])).orElse(``),i=process.env[r];return i===void 0?(a.push(r),e):i});return a.length>0?t(e(i,`unresolved_variable`,`Unresolved variables: ${a.join(`, `)}`)):r(o)},c=e=>{let t=
|
|
1
|
+
import{PathError as e}from"../errors/errors.js";import{Left as t,Option as n,Right as r}from"functype";import*as i from"node:os";import*as a from"node:path";const o=e=>e===`~`?i.homedir():e.startsWith(`~/`)||e.startsWith(`~\\`)?a.join(i.homedir(),e.slice(2)):e,s=i=>{let a=[],o=i.replace(/\$(?:\{([^}$]+)\}|([A-Za-z_][A-Za-z0-9_]*))/g,(e,...t)=>{let r=n(t[0]).or(n(t[1])).orElse(``),i=process.env[r];return i===void 0?(a.push(r),e):i});return a.length>0?t(e(i,`unresolved_variable`,`Unresolved variables: ${a.join(`, `)}`)):r(o)},c=e=>{let t=o(e),n=s(t);return n.isLeft()?n:r(a.resolve(n.orThrow()))},l={expand:c,expandTilde:o,expandVars:s,join:(...e)=>a.join(...e),resolve:(...e)=>a.resolve(...e),dirname:e=>a.dirname(e),basename:(e,t)=>a.basename(e,t),extname:e=>a.extname(e),isAbsolute:e=>a.isAbsolute(e)};export{l as Path,c as expandPath,o as expandTilde,s as expandVars};
|
|
2
2
|
//# sourceMappingURL=PathExpander.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PathExpander.js","names":[],"sources":["../../src/path/PathExpander.ts"],"sourcesContent":["import * as os from \"node:os\"\nimport * as nodePath from \"node:path\"\n\nimport type { Either } from \"functype\"\nimport { Left, Option, Right } from \"functype\"\n\nimport { PathError } from \"../errors/errors\"\n\nexport const expandTilde = (p: string): string => {\n if (p === \"~\") return os.homedir()\n if (p.startsWith(\"~/\") || p.startsWith(\"~\\\\\")) return nodePath.join(os.homedir(), p.slice(2))\n return p\n}\n\nexport const expandVars = (p: string): Either<PathError, string> => {\n const unresolvedVars: string[] = []\n // Factor out the leading `$` and forbid `$` inside `${...}` so the engine\n // can't backtrack catastrophically on inputs like `${{${{${{...` (CodeQL\n // js/polynomial-redos).\n const result = p.replace(/\\$(?:\\{([^}$]+)\\}|([A-Za-z_][A-Za-z0-9_]*))/g, (_match: string, ...captures: unknown[]) => {\n const varName = Option(captures[0] as string | undefined)\n .or(Option(captures[1] as string | undefined))\n .orElse(\"\")\n const value = process.env[varName]\n if (value === undefined) {\n unresolvedVars.push(varName)\n return _match\n }\n return value\n })\n\n if (unresolvedVars.length > 0) {\n return Left(PathError(p, \"unresolved_variable\", `Unresolved variables: ${unresolvedVars.join(\", \")}`))\n }\n\n return Right(result)\n}\n\nexport const expandPath = (p: string): Either<PathError, string> => {\n const tildeExpanded = expandTilde(p)\n const varsResult = expandVars(tildeExpanded)\n if (varsResult.isLeft()) return varsResult\n return Right(nodePath.resolve(varsResult.orThrow()))\n}\n\nexport const Path = {\n expand: expandPath,\n expandTilde,\n expandVars,\n join: (...segments: string[]): string => nodePath.join(...segments),\n resolve: (...segments: string[]): string => nodePath.resolve(...segments),\n dirname: (p: string): string => nodePath.dirname(p),\n basename: (p: string, suffix?: string): string => nodePath.basename(p, suffix),\n extname: (p: string): string => nodePath.extname(p),\n isAbsolute: (p: string): boolean => nodePath.isAbsolute(p),\n}\n"],"mappings":"6JAQA,MAAa,EAAe,GACtB,IAAM,IAAY,EAAG,QAAQ,EAC7B,EAAE,WAAW,IAAI,GAAK,EAAE,WAAW,KAAK,EAAU,EAAS,KAAK,EAAG,QAAQ,EAAG,EAAE,MAAM,CAAC,CAAC,EACrF,EAGI,EAAc,GAAyC,CAClE,IAAM,EAA2B,CAAC,EAI5B,EAAS,EAAE,QAAQ,gDAAiD,EAAgB,GAAG,IAAwB,CACnH,IAAM,EAAU,EAAO,EAAS,EAAwB,CAAC,CACtD,GAAG,EAAO,EAAS,EAAwB,CAAC,CAAC,CAC7C,OAAO,EAAE,EACN,EAAQ,QAAQ,IAAI,GAK1B,OAJI,IAAU,IAAA,IACZ,EAAe,KAAK,CAAO,EACpB,GAEF,CACT,CAAC,EAMD,OAJI,EAAe,OAAS,EACnB,EAAK,EAAU,EAAG,sBAAuB,yBAAyB,EAAe,KAAK,IAAI,GAAG,CAAC,EAGhG,EAAM,CAAM,CACrB,EAEa,EAAc,GAAyC,
|
|
1
|
+
{"version":3,"file":"PathExpander.js","names":[],"sources":["../../src/path/PathExpander.ts"],"sourcesContent":["import * as os from \"node:os\"\nimport * as nodePath from \"node:path\"\n\nimport type { Either } from \"functype\"\nimport { Left, Option, Right } from \"functype\"\n\nimport { PathError } from \"../errors/errors\"\n\nexport const expandTilde = (p: string): string => {\n if (p === \"~\") return os.homedir()\n if (p.startsWith(\"~/\") || p.startsWith(\"~\\\\\")) return nodePath.join(os.homedir(), p.slice(2))\n return p\n}\n\nexport const expandVars = (p: string): Either<PathError, string> => {\n const unresolvedVars: string[] = []\n // Factor out the leading `$` and forbid `$` inside `${...}` so the engine\n // can't backtrack catastrophically on inputs like `${{${{${{...` (CodeQL\n // js/polynomial-redos).\n const result = p.replace(/\\$(?:\\{([^}$]+)\\}|([A-Za-z_][A-Za-z0-9_]*))/g, (_match: string, ...captures: unknown[]) => {\n const varName = Option(captures[0] as string | undefined)\n .or(Option(captures[1] as string | undefined))\n .orElse(\"\")\n const value = process.env[varName]\n if (value === undefined) {\n unresolvedVars.push(varName)\n return _match\n }\n return value\n })\n\n if (unresolvedVars.length > 0) {\n return Left(PathError(p, \"unresolved_variable\", `Unresolved variables: ${unresolvedVars.join(\", \")}`))\n }\n\n return Right(result)\n}\n\nexport const expandPath = (p: string): Either<PathError, string> => {\n const tildeExpanded = expandTilde(p)\n const varsResult = expandVars(tildeExpanded)\n if (varsResult.isLeft()) return varsResult\n return Right(nodePath.resolve(varsResult.orThrow()))\n}\n\nexport const Path = {\n expand: expandPath,\n expandTilde,\n expandVars,\n join: (...segments: string[]): string => nodePath.join(...segments),\n resolve: (...segments: string[]): string => nodePath.resolve(...segments),\n dirname: (p: string): string => nodePath.dirname(p),\n basename: (p: string, suffix?: string): string => nodePath.basename(p, suffix),\n extname: (p: string): string => nodePath.extname(p),\n isAbsolute: (p: string): boolean => nodePath.isAbsolute(p),\n}\n"],"mappings":"6JAQA,MAAa,EAAe,GACtB,IAAM,IAAY,EAAG,QAAQ,EAC7B,EAAE,WAAW,IAAI,GAAK,EAAE,WAAW,KAAK,EAAU,EAAS,KAAK,EAAG,QAAQ,EAAG,EAAE,MAAM,CAAC,CAAC,EACrF,EAGI,EAAc,GAAyC,CAClE,IAAM,EAA2B,CAAC,EAI5B,EAAS,EAAE,QAAQ,gDAAiD,EAAgB,GAAG,IAAwB,CACnH,IAAM,EAAU,EAAO,EAAS,EAAwB,CAAC,CACtD,GAAG,EAAO,EAAS,EAAwB,CAAC,CAAC,CAC7C,OAAO,EAAE,EACN,EAAQ,QAAQ,IAAI,GAK1B,OAJI,IAAU,IAAA,IACZ,EAAe,KAAK,CAAO,EACpB,GAEF,CACT,CAAC,EAMD,OAJI,EAAe,OAAS,EACnB,EAAK,EAAU,EAAG,sBAAuB,yBAAyB,EAAe,KAAK,IAAI,GAAG,CAAC,EAGhG,EAAM,CAAM,CACrB,EAEa,EAAc,GAAyC,CAClE,IAAM,EAAgB,EAAY,CAAC,EAC7B,EAAa,EAAW,CAAa,EAE3C,OADI,EAAW,OAAO,EAAU,EACzB,EAAM,EAAS,QAAQ,EAAW,QAAQ,CAAC,CAAC,CACrD,EAEa,EAAO,CAClB,OAAQ,EACR,cACA,aACA,MAAO,GAAG,IAA+B,EAAS,KAAK,GAAG,CAAQ,EAClE,SAAU,GAAG,IAA+B,EAAS,QAAQ,GAAG,CAAQ,EACxE,QAAU,GAAsB,EAAS,QAAQ,CAAC,EAClD,UAAW,EAAW,IAA4B,EAAS,SAAS,EAAG,CAAM,EAC7E,QAAU,GAAsB,EAAS,QAAQ,CAAC,EAClD,WAAa,GAAuB,EAAS,WAAW,CAAC,CAC3D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "functype-os",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "Functional OS utilities using functype data structures — env vars, path expansion, file ops, platform detection",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"functype",
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@types/node": "^24.13.2",
|
|
30
30
|
"eslint-config-prettier": "^10.1.8",
|
|
31
|
-
"ts-builds": "^3.2.
|
|
31
|
+
"ts-builds": "^3.2.1",
|
|
32
32
|
"tsdown": "^0.22.3",
|
|
33
33
|
"vitest": "^4.1.9",
|
|
34
|
-
"functype": "^1.
|
|
34
|
+
"functype": "^1.6.0"
|
|
35
35
|
},
|
|
36
36
|
"type": "module",
|
|
37
37
|
"main": "./dist/index.js",
|