@gesslar/toolkit 3.21.0 → 3.22.1

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.
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "name": "gesslar",
6
6
  "url": "https://gesslar.dev"
7
7
  },
8
- "version": "3.21.0",
8
+ "version": "3.22.1",
9
9
  "license": "Unlicense",
10
10
  "homepage": "https://github.com/gesslar/toolkit#readme",
11
11
  "repository": {
@@ -9,8 +9,8 @@ import path from "node:path"
9
9
  import {URL} from "node:url"
10
10
 
11
11
  import Data from "../../browser/lib/Data.js"
12
- import FS from "./FileSystem.js"
13
12
  import FileObject from "./FileObject.js"
13
+ import FS from "./FileSystem.js"
14
14
  import Sass from "./Sass.js"
15
15
  import Valid from "./Valid.js"
16
16
  import VFileObject from "./VFileObject.js"
@@ -531,6 +531,60 @@ export default class DirectoryObject extends FS {
531
531
  return candidateDir === this.path
532
532
  }
533
533
 
534
+ /**
535
+ * Resolves an absolute virtual path from cap root and validates it stays within cap boundary.
536
+ *
537
+ * @private
538
+ * @param {string} absolutePath - Absolute virtual path starting with separator
539
+ * @returns {string} Normalized resolved virtual path
540
+ * @throws {Sass} If path would be out of bounds
541
+ */
542
+ #resolveAndValidateFromCap(absolutePath) {
543
+ const relativeFromCap = Data.chopLeft(absolutePath, this.sep)
544
+ const resolvedVirtualPath = FS.resolvePath(this.cap.path, relativeFromCap)
545
+ const normalized = FS.fixSlashes(resolvedVirtualPath)
546
+
547
+ // Validate cap boundary using real paths
548
+ const relativeFromCapForReal = normalized.startsWith(this.sep)
549
+ ? Data.chopLeft(normalized, this.sep)
550
+ : normalized
551
+ const resolvedRealPath = FS.resolvePath(
552
+ this.cap.real.path,
553
+ relativeFromCapForReal
554
+ )
555
+
556
+ if(!FS.pathContains(this.cap.real.path, resolvedRealPath)) {
557
+ throw Sass.new(`${normalized} would be out of bounds (cap: ${this.cap.path}).`)
558
+ }
559
+
560
+ return normalized
561
+ }
562
+
563
+ /**
564
+ * Validates that a resolved virtual path stays within the cap boundary.
565
+ *
566
+ * @private
567
+ * @param {string} virtualPath - Resolved virtual path
568
+ * @returns {string} Normalized virtual path
569
+ * @throws {Sass} If path would be out of bounds
570
+ */
571
+ #validateCapBoundary(virtualPath) {
572
+ const normalized = FS.fixSlashes(virtualPath)
573
+ const relativeFromCap = normalized.startsWith(this.sep)
574
+ ? Data.chopLeft(normalized, this.sep)
575
+ : normalized
576
+ const resolvedRealPath = FS.resolvePath(
577
+ this.cap.real.path,
578
+ relativeFromCap
579
+ )
580
+
581
+ if(!FS.pathContains(this.cap.real.path, resolvedRealPath)) {
582
+ throw Sass.new(`${normalized} would be out of bounds (cap: ${this.cap.path}).`)
583
+ }
584
+
585
+ return normalized
586
+ }
587
+
534
588
  /**
535
589
  * Creates a new DirectoryObject by extending this directory's path.
536
590
  *
@@ -555,11 +609,35 @@ export default class DirectoryObject extends FS {
555
609
  getDirectory(dir) {
556
610
  Valid.type(dir, "String", {allowEmpty: false})
557
611
 
612
+ // Handle VDirectoryObject with absolute virtual paths (starting with "/")
613
+ if(this.isVirtual && dir.startsWith(this.sep)) {
614
+ const normalized = this.#resolveAndValidateFromCap(dir)
615
+
616
+ // Pass cap as parent so it resolves from cap root, not current directory
617
+ return new this.constructor(normalized, this.cap)
618
+ }
619
+
620
+ // Regular resolution
558
621
  const newPath = FS.resolvePath(this.path, dir)
559
622
 
560
- Valid.assert(this.#isLocal(newPath), `${newPath} would be out of bounds.`)
623
+ // Validate bounds
624
+ if(!this.isVirtual) {
625
+ // Regular DO: enforce local-only constraint
626
+ Valid.assert(this.#isLocal(newPath), `${newPath} would be out of bounds.`)
627
+
628
+ return new this.constructor(newPath, this)
629
+ }
630
+
631
+ // VDO relative paths: only allow nested if explicitly prefixed with ./
632
+ // This maintains security while allowing explicit relative navigation
633
+ if(dir.includes(this.sep) && !dir.startsWith(`.${this.sep}`)) {
634
+ throw Sass.new(`${dir} would be out of bounds. Use "./${dir}" for nested paths or chain getDirectory() calls.`)
635
+ }
636
+
637
+ // VDO relative paths: validate cap boundary and pass resolved path
638
+ const normalized = this.#validateCapBoundary(newPath)
561
639
 
562
- return new this.constructor(newPath, this)
640
+ return new this.constructor(normalized, this)
563
641
  }
564
642
 
565
643
  /**
@@ -569,31 +647,58 @@ export default class DirectoryObject extends FS {
569
647
  * duplication. The resulting FileObject can be used for reading, writing,
570
648
  * and other file operations.
571
649
  *
650
+ * For regular DirectoryObject: only allows direct children (local only).
651
+ * For VDirectoryObject: supports absolute virtual paths (starting with "/")
652
+ * which resolve from cap root, and relative paths from current directory.
653
+ *
572
654
  * When called on a VDirectoryObject, returns a VFileObject to maintain
573
655
  * virtual path semantics.
574
656
  *
575
- * @param {string} file - The filename to append (can include subdirectories like "src/index.js")
657
+ * @param {string} file - The filename to append
576
658
  * @returns {FileObject|VFileObject} A new FileObject (or VFileObject if virtual)
577
659
  * @throws {Sass} If filename is not a string
660
+ * @throws {Sass} If path would be out of bounds
578
661
  * @example
579
662
  * const dir = new DirectoryObject("/projects/git/toolkit")
580
663
  * const file = dir.getFile("package.json")
581
664
  * console.log(file.path) // "/projects/git/toolkit/package.json"
582
665
  *
583
666
  * @example
584
- * // Can include nested paths
585
- * const file = dir.getFile("src/index.js")
586
- * const data = await file.read()
667
+ * // VDirectoryObject with absolute virtual path
668
+ * const vdo = new TempDirectoryObject("myapp")
669
+ * const file = vdo.getFile("/config/settings.json")
670
+ * // Virtual path: /config/settings.json, Real path: {vdo.real.path}/config/settings.json
587
671
  */
588
672
  getFile(file) {
589
673
  Valid.type(file, "String", {allowEmpty: false})
590
674
 
591
- const newPath = FS.resolvePath(this.path, file)
675
+ // Handle VDirectoryObject with absolute virtual paths (starting with "/")
676
+ if(this.isVirtual && file.startsWith(this.sep)) {
677
+ const normalized = this.#resolveAndValidateFromCap(file)
592
678
 
593
- Valid.assert(this.#isLocal(newPath), `${newPath} would be out of bounds.`)
679
+ return new VFileObject(normalized, this)
680
+ }
594
681
 
595
- return this.isVirtual
596
- ? new VFileObject(file, this)
597
- : new FileObject(file, this)
682
+ // Regular resolution
683
+ const resolvedPath = FS.resolvePath(this.path, file)
684
+
685
+ // Validate bounds
686
+ if(!this.isVirtual) {
687
+ // Regular DO: enforce local-only constraint
688
+ Valid.assert(this.#isLocal(resolvedPath), `${resolvedPath} would be out of bounds.`)
689
+
690
+ return new FileObject(file, this)
691
+ }
692
+
693
+ // VDO relative paths: only allow nested if explicitly prefixed with ./
694
+ // This maintains security while allowing explicit relative navigation
695
+ if(file.includes(this.sep) && !file.startsWith(`.${this.sep}`)) {
696
+ throw Sass.new(`${file} would be out of bounds. Use "./${file}" for nested paths or chain getFile() calls.`)
697
+ }
698
+
699
+ // VDO relative paths: validate cap boundary and pass resolved path
700
+ const normalized = this.#validateCapBoundary(resolvedPath)
701
+
702
+ return new VFileObject(normalized, this)
598
703
  }
599
704
  }
@@ -149,7 +149,13 @@ class Glog {
149
149
  this.#logLevel = options.debugLevel ?? options.logLevel ?? this.#logLevel
150
150
  this.#logPrefix = options.prefix ?? this.#logPrefix
151
151
  this.#colours = options.colours ?? this.#colours
152
- this.#symbols = options.symbols ?? this.#symbols
152
+
153
+ if(options.symbols) {
154
+ const base = this.#symbols ?? logSymbols
155
+
156
+ this.#symbols = Object.assign({}, base, options.symbols)
157
+ }
158
+
153
159
  this.#stackTrace = options.stackTrace ?? this.#stackTrace
154
160
  this.#tagsAsStrings = options.tagsAsStrings ?? this.#tagsAsStrings
155
161
  this.#displayName = options.displayName ?? this.#displayName
@@ -4,6 +4,7 @@
4
4
  * Extends FileObject with virtual path support and real filesystem mapping.
5
5
  */
6
6
 
7
+ import DirectoryObject from "./DirectoryObject.js"
7
8
  import FileObject from "./FileObject.js"
8
9
  import FS from "./FileSystem.js"
9
10
  import Valid from "./Valid.js"
@@ -34,20 +35,69 @@ export default class VFileObject extends FileObject {
34
35
  /**
35
36
  * Constructs a VFileObject instance.
36
37
  *
37
- * @param {string} fileName - The file path
38
- * @param {VDirectoryObject} parent - The parent virtual directory (required)
38
+ * @param {string} virtualPath - The virtual file path (can be absolute like "/path/to/file.ext" or relative like "file.txt")
39
+ * @param {VDirectoryObject} parent - The parent virtual directory (required, used for cap reference)
39
40
  */
40
- constructor(fileName, parent) {
41
- Valid.type(fileName, "String", {allowEmpty: false})
41
+ constructor(virtualPath, parent) {
42
+ Valid.type(virtualPath, "String", {allowEmpty: false})
42
43
  Valid.type(parent, "VDirectoryObject")
43
44
 
44
- super(fileName, parent)
45
+ // Normalize the virtual path
46
+ const normalizedVirtual = FS.fixSlashes(virtualPath)
47
+ const isAbsolute = normalizedVirtual.startsWith("/")
45
48
 
46
- const parentRealPath = this.parent.real.path
47
- const resolved = FS.resolvePath(this.parent.path, fileName)
48
- const {base} = FS.pathParts(resolved)
49
+ // If absolute path, it's already resolved from cap root (from getFile())
50
+ // If relative path, resolve from parent directory (from hasFile(), read(), etc.)
51
+ let resolvedVirtualPath
52
+ if(isAbsolute) {
53
+ // Absolute path is already resolved - use as-is
54
+ resolvedVirtualPath = normalizedVirtual
55
+ } else {
56
+ // Relative path: resolve from parent directory (not cap root!)
57
+ resolvedVirtualPath = FS.resolvePath(parent.path, normalizedVirtual)
58
+ }
49
59
 
50
- this.#real = new FileObject(base, parentRealPath)
60
+ const normalized = FS.fixSlashes(resolvedVirtualPath)
61
+
62
+ // Extract the directory and filename from the resolved virtual path
63
+ const {dir: virtualDir, base} = FS.pathParts(normalized)
64
+
65
+ // Determine the virtual parent directory
66
+ // If virtualDir is "/" or empty or equals cap path, use the cap root
67
+ // Otherwise, construct the parent directory path relative to cap
68
+ let virtualParent
69
+ if(!virtualDir || virtualDir === "/" || virtualDir === parent.cap.path) {
70
+ virtualParent = parent.cap
71
+ } else {
72
+ // virtualDir is something like "/path/to" - we need to create a VDirectoryObject for it
73
+ // Strip leading "/" if present to make it relative to cap
74
+ const dirRelativeToCap = virtualDir.startsWith("/") ? virtualDir.slice(1) : virtualDir
75
+ // Use the VDirectoryObject constructor to create the parent directory
76
+ virtualParent = new parent.constructor(dirRelativeToCap, parent.cap)
77
+ }
78
+
79
+ // Call super with just the filename and the virtual parent
80
+ // This ensures FileObject sets up the virtual path correctly
81
+ super(base, virtualParent)
82
+
83
+ // Convert virtual path to real path
84
+ // The resolved virtual path is relative to the cap root, so we resolve it relative to cap's real path
85
+ const capRealPath = parent.cap.real.path
86
+
87
+ // Strip leading "/" from resolved virtual path if present to make it relative
88
+ const relativeFromCap = normalized.startsWith("/")
89
+ ? normalized.slice(1)
90
+ : normalized
91
+
92
+ // Resolve the real filesystem path
93
+ const realPath = FS.resolvePath(capRealPath, relativeFromCap)
94
+
95
+ // Create FileObject with the full real path
96
+ // Extract directory and filename parts
97
+ const {dir: realDir, base: realBase} = FS.pathParts(realPath)
98
+ const realParentDir = new DirectoryObject(realDir)
99
+
100
+ this.#real = new FileObject(realBase, realParentDir)
51
101
  }
52
102
 
53
103
  get isVirtual() {
@@ -276,21 +276,27 @@ export default class DirectoryObject extends FS {
276
276
  * duplication. The resulting FileObject can be used for reading, writing,
277
277
  * and other file operations.
278
278
  *
279
+ * For regular DirectoryObject: only allows direct children (local only).
280
+ * For VDirectoryObject: supports absolute virtual paths (starting with "/")
281
+ * which resolve from cap root, and relative paths from current directory.
282
+ *
279
283
  * When called on a VDirectoryObject, returns a VFileObject to maintain
280
284
  * virtual path semantics.
281
285
  *
282
- * @param {string} file - The filename to append (can include subdirectories like "src/index.js")
286
+ * @param {string} file - The filename to append
283
287
  * @returns {FileObject|VFileObject} A new FileObject (or VFileObject if virtual)
284
288
  * @throws {Sass} If filename is not a string
289
+ * @throws {Sass} If path would be out of bounds
285
290
  * @example
286
291
  * const dir = new DirectoryObject("/projects/git/toolkit")
287
292
  * const file = dir.getFile("package.json")
288
293
  * console.log(file.path) // "/projects/git/toolkit/package.json"
289
294
  *
290
295
  * @example
291
- * // Can include nested paths
292
- * const file = dir.getFile("src/index.js")
293
- * const data = await file.read()
296
+ * // VDirectoryObject with absolute virtual path
297
+ * const vdo = new TempDirectoryObject("myapp")
298
+ * const file = vdo.getFile("/config/settings.json")
299
+ * // Virtual path: /config/settings.json, Real path: {vdo.real.path}/config/settings.json
294
300
  */
295
301
  getFile(file: string): FileObject | VFileObject;
296
302
  #private;
@@ -1 +1 @@
1
- {"version":3,"file":"DirectoryObject.d.ts","sourceRoot":"","sources":["../../../src/node/lib/DirectoryObject.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH;IA2DE;;;;;;;;;OASG;IACH,kBALa,eAAe,CAO3B;IA3CD;;;;OAIG;IACH,uBAFW,MAAM,OAAC,EA0BjB;IA2BD;;;;OAIG;IACH,cAFa,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;;OAIG;IACH,gBAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,YAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,WAFa,GAAG,CAIf;IAED;;;;OAIG;IACH,YAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,cAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,iBAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,WAFa,MAAM,CAIlB;IAED;;;;;;;OAOG;IACH,aALa,KAAK,CAAC,MAAM,CAAC,CAOzB;IAED;;;;;;;;;;;;OAYG;IACH,cARa,eAAe,GAAC,IAAI,CAsBhC;IAED;;;;OAIG;IACH,mBAFa,OAAO,CAInB;IAmBD;;;;;;;;;;;;;;;;;;OAkBG;IACH,WAZW,MAAM,GACJ,OAAO,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAC,WAAW,CAAC,CAAC;QAAC,WAAW,EAAE,KAAK,CAAC,eAAe,GAAC,gBAAgB,CAAC,CAAA;KAAC,CAAC,CA0CjH;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,WAZW,MAAM,GACJ,OAAO,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAC,WAAW,CAAC,CAAC;QAAC,WAAW,EAAE,KAAK,CAAC,eAAe,GAAC,gBAAgB,CAAC,CAAA;KAAC,CAAC,CAgDjH;IAED;;;;;;;;;;;;OAYG;IACH,uBARW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAuBzB;IAyBD;;;;;;;;;;;;;;;OAeG;IACH,cAZa,eAAe,CAc3B;IAED;;;;;;;;;;;;;;OAcG;IACH,UARa,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAQ5B;IAED;;;;;OAKG;IACH,sBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAO5B;IAUD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,kBAdW,MAAM,GACJ,eAAe,CAqB3B;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAbW,MAAM,GACJ,UAAU,GAAC,WAAW,CAsBlC;;CACF;eA3kBc,iBAAiB;uBACT,iBAAiB;wBAGhB,kBAAkB"}
1
+ {"version":3,"file":"DirectoryObject.d.ts","sourceRoot":"","sources":["../../../src/node/lib/DirectoryObject.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH;IA2DE;;;;;;;;;OASG;IACH,kBALa,eAAe,CAO3B;IA3CD;;;;OAIG;IACH,uBAFW,MAAM,OAAC,EA0BjB;IA2BD;;;;OAIG;IACH,cAFa,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;;OAIG;IACH,gBAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,YAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,WAFa,GAAG,CAIf;IAED;;;;OAIG;IACH,YAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,cAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,iBAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,WAFa,MAAM,CAIlB;IAED;;;;;;;OAOG;IACH,aALa,KAAK,CAAC,MAAM,CAAC,CAOzB;IAED;;;;;;;;;;;;OAYG;IACH,cARa,eAAe,GAAC,IAAI,CAsBhC;IAED;;;;OAIG;IACH,mBAFa,OAAO,CAInB;IAmBD;;;;;;;;;;;;;;;;;;OAkBG;IACH,WAZW,MAAM,GACJ,OAAO,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAC,WAAW,CAAC,CAAC;QAAC,WAAW,EAAE,KAAK,CAAC,eAAe,GAAC,gBAAgB,CAAC,CAAA;KAAC,CAAC,CA0CjH;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,WAZW,MAAM,GACJ,OAAO,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,UAAU,GAAC,WAAW,CAAC,CAAC;QAAC,WAAW,EAAE,KAAK,CAAC,eAAe,GAAC,gBAAgB,CAAC,CAAA;KAAC,CAAC,CAgDjH;IAED;;;;;;;;;;;;OAYG;IACH,uBARW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAuBzB;IAyBD;;;;;;;;;;;;;;;OAeG;IACH,cAZa,eAAe,CAc3B;IAED;;;;;;;;;;;;;;OAcG;IACH,UARa,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAQ5B;IAED;;;;;OAKG;IACH,sBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAO5B;IAgED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,kBAdW,MAAM,GACJ,eAAe,CA6C3B;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,cAfW,MAAM,GACJ,UAAU,GAAC,WAAW,CA6ClC;;CACF;eAnrBc,iBAAiB;uBADT,iBAAiB;wBAIhB,kBAAkB"}
@@ -1 +1 @@
1
- {"version":3,"file":"Glog.d.ts","sourceRoot":"","sources":["../../../src/node/lib/Glog.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Glog.d.ts","sourceRoot":"","sources":["../../../src/node/lib/Glog.js"],"names":[],"mappings":"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"}
@@ -21,10 +21,10 @@ export default class VFileObject extends FileObject {
21
21
  /**
22
22
  * Constructs a VFileObject instance.
23
23
  *
24
- * @param {string} fileName - The file path
25
- * @param {VDirectoryObject} parent - The parent virtual directory (required)
24
+ * @param {string} virtualPath - The virtual file path (can be absolute like "/path/to/file.ext" or relative like "file.txt")
25
+ * @param {VDirectoryObject} parent - The parent virtual directory (required, used for cap reference)
26
26
  */
27
- constructor(fileName: string, parent: VDirectoryObject);
27
+ constructor(virtualPath: string, parent: VDirectoryObject);
28
28
  get isVirtual(): boolean;
29
29
  get real(): FileObject;
30
30
  #private;
@@ -1 +1 @@
1
- {"version":3,"file":"VFileObject.d.ts","sourceRoot":"","sources":["../../../src/node/lib/VFileObject.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;IAGE;;;;;OAKG;IACH,sBAHW,MAAM,UACN,gBAAgB,EAa1B;IAED,yBAEC;IAED,uBAEC;;CACF;uBArDsB,iBAAiB"}
1
+ {"version":3,"file":"VFileObject.d.ts","sourceRoot":"","sources":["../../../src/node/lib/VFileObject.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;IAGE;;;;;OAKG;IACH,yBAHW,MAAM,UACN,gBAAgB,EA8D1B;IAED,yBAEC;IAED,uBAEC;;CACF;uBAtGsB,iBAAiB"}