@gesslar/toolkit 2.4.0 → 2.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gesslar/toolkit",
3
- "version": "2.4.0",
3
+ "version": "2.6.0",
4
4
  "description": "A collection of utilities for Node.js and browser environments.",
5
5
  "main": "./src/index.js",
6
6
  "type": "module",
@@ -157,6 +157,75 @@ export default class CappedDirectoryObject extends DirectoryObject {
157
157
  return true
158
158
  }
159
159
 
160
+ /**
161
+ * Returns the parent directory of this capped directory.
162
+ * Returns null only if this directory is at the cap (the "root" of the capped tree).
163
+ *
164
+ * Note: The returned parent is a plain DirectoryObject (not capped).
165
+ * Use getDirectory() for creating capped subdirectories.
166
+ *
167
+ * @returns {DirectoryObject|null} Parent directory or null if at cap root
168
+ * @example
169
+ * const capped = new TempDirectoryObject("myapp")
170
+ * const subdir = capped.getDirectory("data")
171
+ * console.log(subdir.parent.path) // Returns parent DirectoryObject
172
+ * console.log(capped.parent) // null (at cap root)
173
+ */
174
+ get parent() {
175
+ const capResolved = path.resolve(this.#cap)
176
+
177
+ // If we're at the cap, return null (cap is the "root")
178
+ if(this.path === capResolved) {
179
+ return null
180
+ }
181
+
182
+ // Otherwise return the parent (plain DirectoryObject, not capped)
183
+ return super.parent
184
+ }
185
+
186
+ /**
187
+ * Generator that walks up the directory tree, stopping at the cap.
188
+ * Yields parent directories from current up to (and including) the cap root.
189
+ *
190
+ * @returns {Generator<DirectoryObject>} Generator yielding parent DirectoryObject instances
191
+ * @example
192
+ * const capped = new TempDirectoryObject("myapp")
193
+ * const deep = capped.getDirectory("data").getDirectory("files")
194
+ * for(const parent of deep.walkUp) {
195
+ * console.log(parent.path)
196
+ * // .../myapp-ABC123/data/files
197
+ * // .../myapp-ABC123/data
198
+ * // .../myapp-ABC123 (stops at cap)
199
+ * }
200
+ */
201
+ *#walkUpCapped() {
202
+ const capResolved = path.resolve(this.#cap)
203
+
204
+ // Use super.walkUp but stop when we would go beyond the cap
205
+ for(const dir of super.walkUp) {
206
+ // Don't yield anything beyond the cap
207
+ if(!dir.path.startsWith(capResolved)) {
208
+ break
209
+ }
210
+
211
+ yield dir
212
+
213
+ // Stop after yielding the cap
214
+ if(dir.path === capResolved) {
215
+ break
216
+ }
217
+ }
218
+ }
219
+
220
+ /**
221
+ * Returns a generator that walks up to the cap.
222
+ *
223
+ * @returns {Generator<DirectoryObject>} Generator yielding parent directories
224
+ */
225
+ get walkUp() {
226
+ return this.#walkUpCapped()
227
+ }
228
+
160
229
  /**
161
230
  * Creates a new CappedDirectoryObject by extending this directory's path.
162
231
  *
@@ -37,6 +37,7 @@ import Sass from "./Sass.js"
37
37
  * @property {boolean} temporary - Whether this is marked as a temporary directory
38
38
  * @property {boolean} isFile - Always false (this is a directory)
39
39
  * @property {boolean} isDirectory - Always true
40
+ * @property {DirectoryObject|null} parent - The parent directory (null if root)
40
41
  * @property {Promise<boolean>} exists - Whether the directory exists (async getter)
41
42
  * @property {Generator<DirectoryObject>} walkUp - Generator yielding parent directories up to root
42
43
  *
@@ -89,6 +90,14 @@ export default class DirectoryObject extends FS {
89
90
  temporary: null,
90
91
  })
91
92
 
93
+ /**
94
+ * Cached parent directory object
95
+ *
96
+ * @type {DirectoryObject|null|undefined}
97
+ * @private
98
+ */
99
+ #parent = undefined
100
+
92
101
  /**
93
102
  * Constructs a DirectoryObject instance.
94
103
  *
@@ -147,7 +156,8 @@ export default class DirectoryObject extends FS {
147
156
  module: this.module,
148
157
  extension: this.extension,
149
158
  isFile: this.isFile,
150
- isDirectory: this.isDirectory
159
+ isDirectory: this.isDirectory,
160
+ parent: this.parent ? this.parent.path : null
151
161
  }
152
162
  }
153
163
 
@@ -253,6 +263,37 @@ export default class DirectoryObject extends FS {
253
263
  return this.#meta.temporary
254
264
  }
255
265
 
266
+ /**
267
+ * Returns the parent directory of this directory.
268
+ * Returns null if this directory is the root directory.
269
+ * Computed lazily on first access and cached.
270
+ *
271
+ * @returns {DirectoryObject|null} The parent directory or null if root
272
+ * @example
273
+ * const dir = new DirectoryObject('/path/to/directory')
274
+ * console.log(dir.parent.path) // '/path/to'
275
+ *
276
+ * const root = new DirectoryObject('/')
277
+ * console.log(root.parent) // null
278
+ */
279
+ get parent() {
280
+ // Return cached value if available
281
+ if(this.#parent !== undefined) {
282
+ return this.#parent
283
+ }
284
+
285
+ // Compute parent directory (null if we're at root)
286
+ const parentPath = path.dirname(this.path)
287
+ const isRoot = parentPath === this.path
288
+
289
+ // Cache and return
290
+ this.#parent = isRoot
291
+ ? null
292
+ : new DirectoryObject(parentPath, this.temporary)
293
+
294
+ return this.#parent
295
+ }
296
+
256
297
  /**
257
298
  * Recursively removes a temporary directory and all its contents.
258
299
  *
package/src/lib/FS.js CHANGED
@@ -129,7 +129,7 @@ export default class FS {
129
129
  static relativeOrAbsolutePath(from, to) {
130
130
  const fromBasePath = from.isDirectory
131
131
  ? from.path
132
- : from.directory?.path ?? path.dirname(from.path)
132
+ : from.parent?.path ?? path.dirname(from.path)
133
133
 
134
134
  const relative = path.relative(fromBasePath, to.path)
135
135
 
@@ -29,7 +29,7 @@ import Valid from "./Valid.js"
29
29
  * @property {string} extension - The file extension
30
30
  * @property {boolean} isFile - Always true for files
31
31
  * @property {boolean} isDirectory - Always false for files
32
- * @property {DirectoryObject} directory - The parent directory object
32
+ * @property {DirectoryObject} parent - The parent directory object
33
33
  * @property {Promise<boolean>} exists - Whether the file exists (async)
34
34
  */
35
35
 
@@ -58,7 +58,7 @@ export default class FileObject extends FS {
58
58
  * @property {string|null} extension - The file extension
59
59
  * @property {boolean} isFile - Always true
60
60
  * @property {boolean} isDirectory - Always false
61
- * @property {DirectoryObject|null} directory - The parent directory object
61
+ * @property {DirectoryObject|null} parent - The parent directory object
62
62
  */
63
63
  #meta = Object.seal({
64
64
  supplied: null,
@@ -69,16 +69,16 @@ export default class FileObject extends FS {
69
69
  extension: null,
70
70
  isFile: true,
71
71
  isDirectory: false,
72
- directory: null,
72
+ parent: null,
73
73
  })
74
74
 
75
75
  /**
76
76
  * Constructs a FileObject instance.
77
77
  *
78
78
  * @param {string | FileObject} fileName - The file path or FileObject
79
- * @param {DirectoryObject|string|null} [directory] - The parent directory (object or string)
79
+ * @param {DirectoryObject|string|null} [parent] - The parent directory (object or string)
80
80
  */
81
- constructor(fileName, directory=null) {
81
+ constructor(fileName, parent=null) {
82
82
  super()
83
83
 
84
84
  // If passed a FileObject, extract its path
@@ -93,19 +93,19 @@ export default class FileObject extends FS {
93
93
 
94
94
  const {dir,base,ext} = this.#deconstructFilenameToParts(fixedFile)
95
95
 
96
- const directoryObject = (() => {
97
- switch(Data.typeOf(directory)) {
96
+ const parentObject = (() => {
97
+ switch(Data.typeOf(parent)) {
98
98
  case "String":
99
- return new DirectoryObject(directory)
99
+ return new DirectoryObject(parent)
100
100
  case "DirectoryObject":
101
101
  case "TempDirectoryObject":
102
- return directory
102
+ return parent
103
103
  default:
104
104
  return new DirectoryObject(dir)
105
105
  }
106
106
  })()
107
107
 
108
- const final = FS.resolvePath(directoryObject.path ?? ".", fixedFile)
108
+ const final = FS.resolvePath(parentObject.path ?? ".", fixedFile)
109
109
 
110
110
  const resolved = final
111
111
  const url = new URL(FS.pathToUri(resolved))
@@ -116,7 +116,7 @@ export default class FileObject extends FS {
116
116
  this.#meta.name = base
117
117
  this.#meta.extension = ext
118
118
  this.#meta.module = path.basename(this.supplied, this.extension)
119
- this.#meta.directory = directoryObject
119
+ this.#meta.parent = parentObject
120
120
 
121
121
  Object.freeze(this.#meta)
122
122
  }
@@ -145,7 +145,7 @@ export default class FileObject extends FS {
145
145
  extension: this.extension,
146
146
  isFile: this.isFile,
147
147
  isDirectory: this.isDirectory,
148
- directory: this.directory ? this.directory.path : null
148
+ parent: this.parent ? this.parent.path : null
149
149
  }
150
150
  }
151
151
 
@@ -253,8 +253,8 @@ export default class FileObject extends FS {
253
253
  *
254
254
  * @returns {DirectoryObject} The parent directory object
255
255
  */
256
- get directory() {
257
- return this.#meta.directory
256
+ get parent() {
257
+ return this.#meta.parent
258
258
  }
259
259
 
260
260
  /**
@@ -411,11 +411,11 @@ export default class FileObject extends FS {
411
411
  if(!this.url)
412
412
  throw Sass.new("No URL in file")
413
413
 
414
- if(await this.directory.exists)
414
+ if(await this.parent.exists)
415
415
  await fs.writeFile(this.url, content, encoding)
416
416
 
417
417
  else
418
- throw Sass.new(`Invalid directory, ${this.directory.url.href}`)
418
+ throw Sass.new(`Invalid directory, ${this.parent.url.href}`)
419
419
  }
420
420
 
421
421
  /**
@@ -438,8 +438,8 @@ export default class FileObject extends FS {
438
438
  if(!this.url)
439
439
  throw Sass.new("No URL in file")
440
440
 
441
- const exists = await this.directory.exists
442
- Valid.assert(exists, `Invalid directory, ${this.directory.url.href}`)
441
+ const exists = await this.parent.exists
442
+ Valid.assert(exists, `Invalid directory, ${this.parent.url.href}`)
443
443
 
444
444
  Valid.assert(Data.isBinary(data), "Data must be binary (ArrayBuffer, TypedArray, Blob, or Buffer)")
445
445
 
package/src/lib/Glog.js CHANGED
@@ -33,6 +33,15 @@ export const loggerColours = {
33
33
  reset: "{/}", // Reset
34
34
  }
35
35
 
36
+ // Symbol alternatives for tags
37
+ export const logSymbols = {
38
+ debug: "?",
39
+ info: "i",
40
+ warn: "!",
41
+ error: "✗",
42
+ success: "✓"
43
+ }
44
+
36
45
  // Set up convenient aliases for common log colors
37
46
  c.alias.set("debug", "{F033}")
38
47
  c.alias.set("info", "{F036}")
@@ -50,6 +59,7 @@ class Glog {
50
59
  static colors = null
51
60
  static stackTrace = false
52
61
  static name = ""
62
+ static tagsAsStrings = false
53
63
 
54
64
  // Instance properties (for configured loggers)
55
65
  #logLevel = 0
@@ -57,6 +67,8 @@ class Glog {
57
67
  #colors = null
58
68
  #stackTrace = false
59
69
  #name = ""
70
+ #tagsAsStrings = false
71
+ #displayName = true
60
72
  #vscodeError = null
61
73
  #vscodeWarn = null
62
74
  #vscodeInfo = null
@@ -87,6 +99,8 @@ class Glog {
87
99
  this.#logPrefix = options.prefix ?? this.#logPrefix
88
100
  this.#colors = options.colors ?? this.#colors
89
101
  this.#stackTrace = options.stackTrace ?? this.#stackTrace
102
+ this.#tagsAsStrings = options.tagsAsStrings ?? this.#tagsAsStrings
103
+ this.#displayName = options.displayName ?? this.#displayName
90
104
 
91
105
  return this
92
106
  }
@@ -123,6 +137,12 @@ class Glog {
123
137
  return this
124
138
  }
125
139
 
140
+ static withTagsAsStrings(enabled = false) {
141
+ this.tagsAsStrings = enabled
142
+
143
+ return this
144
+ }
145
+
126
146
  // === FLUENT INSTANCE CREATION ===
127
147
 
128
148
  static create(options = {}) {
@@ -159,6 +179,18 @@ class Glog {
159
179
  return this
160
180
  }
161
181
 
182
+ withTagsAsStrings(enabled = false) {
183
+ this.#tagsAsStrings = enabled
184
+
185
+ return this
186
+ }
187
+
188
+ noDisplayName() {
189
+ this.#displayName = false
190
+
191
+ return this
192
+ }
193
+
162
194
  // === UTILITY METHODS ===
163
195
 
164
196
  get name() {
@@ -182,19 +214,28 @@ class Glog {
182
214
  #compose(level, message, debugLevel = 0) {
183
215
  const colors = this.#colors || Glog.colors || loggerColours
184
216
  const name = this.#name || Glog.name || "Log"
185
- const tag = Util.capitalize(level)
217
+ const useStrings = this.#tagsAsStrings || Glog.tagsAsStrings
218
+ const showName = this.#displayName
219
+ const tag = useStrings ? Util.capitalize(level) : logSymbols[level]
220
+ const namePrefix = showName ? `[${name}] ` : ""
186
221
 
187
222
  if(!colors) {
188
- return `[${name}] ${tag}: ${message}`
223
+ return useStrings
224
+ ? `${namePrefix}${tag}: ${message}`
225
+ : `${namePrefix}${tag} ${message}`
189
226
  }
190
227
 
191
228
  if(level === "debug") {
192
229
  const colorCode = colors[level][debugLevel] || colors[level][0]
193
230
 
194
- return c`[${name}] ${colorCode}${tag}{/}: ${message}`
231
+ return useStrings
232
+ ? c`${namePrefix}${colorCode}${tag}{/}: ${message}`
233
+ : c`${namePrefix}${colorCode}${tag}{/} ${message}`
195
234
  }
196
235
 
197
- return c`[${name}] ${colors[level]}${tag}{/}: ${message}`
236
+ return useStrings
237
+ ? c`${namePrefix}${colors[level]}${tag}{/}: ${message}`
238
+ : c`${namePrefix}${colors[level]}${tag}{/} ${message}`
198
239
  }
199
240
 
200
241
  // Stack trace functionality - simplified for now
@@ -342,7 +383,16 @@ class Glog {
342
383
  * @param {...unknown} args - Additional arguments
343
384
  */
344
385
  success(message, ...args) {
345
- Term.log(c`[${this.#name || Glog.name || "Log"}] {success}Success{/}: ${message}`, ...args)
386
+ const name = this.#name || Glog.name || "Log"
387
+ const useStrings = this.#tagsAsStrings || Glog.tagsAsStrings
388
+ const showName = this.#displayName
389
+ const tag = useStrings ? "Success" : logSymbols.success
390
+ const namePrefix = showName ? `[${name}] ` : ""
391
+ const formatted = useStrings
392
+ ? c`${namePrefix}{success}${tag}{/}: ${message}`
393
+ : c`${namePrefix}{success}${tag}{/} ${message}`
394
+
395
+ Term.log(formatted, ...args)
346
396
  }
347
397
 
348
398
  /**
@@ -352,7 +402,143 @@ class Glog {
352
402
  * @param {...unknown} args - Additional arguments to log
353
403
  */
354
404
  static success(message, ...args) {
355
- Term.log(c`[${this.name || "Log"}] {success}Success{/}: ${message}`, ...args)
405
+ const name = this.name || "Log"
406
+ const useStrings = this.tagsAsStrings
407
+ const tag = useStrings ? "Success" : logSymbols.success
408
+ const formatted = useStrings
409
+ ? c`[${name}] {success}${tag}{/}: ${message}`
410
+ : c`[${name}] {success}${tag}{/} ${message}`
411
+
412
+ Term.log(formatted, ...args)
413
+ }
414
+
415
+ /**
416
+ * Static group method - start a console group for indented output
417
+ *
418
+ * @param {...unknown} args - Optional group label
419
+ */
420
+ static group(...args) {
421
+ const name = this.name || "Log"
422
+ const label = args.length > 0 ? ` ${args.join(" ")}` : ""
423
+
424
+ Term.group(`[${name}]${label}`)
425
+ }
426
+
427
+ /**
428
+ * Static groupEnd method - end the current console group
429
+ */
430
+ static groupEnd() {
431
+ Term.groupEnd()
432
+ }
433
+
434
+ /**
435
+ * Static groupDebug - start a debug-tagged group
436
+ *
437
+ * @param {string} message - Group label
438
+ * @param {number} [level=1] - Debug level
439
+ */
440
+ static groupDebug(message, level = 1) {
441
+ const colors = this.colors || loggerColours
442
+ const name = this.name || "Log"
443
+ const useStrings = this.tagsAsStrings
444
+ const tag = useStrings ? "Debug" : logSymbols.debug
445
+ const colorCode = colors.debug[level] || colors.debug[0]
446
+ const label = useStrings
447
+ ? c`[${name}] ${colorCode}${tag}{/}: ${message}`
448
+ : c`[${name}] ${colorCode}${tag}{/} ${message}`
449
+
450
+ Term.group(label)
451
+ }
452
+
453
+ /**
454
+ * Static groupInfo - start an info-tagged group
455
+ *
456
+ * @param {string} message - Group label
457
+ */
458
+ static groupInfo(message) {
459
+ const colors = this.colors || loggerColours
460
+ const name = this.name || "Log"
461
+ const useStrings = this.tagsAsStrings
462
+ const tag = useStrings ? "Info" : logSymbols.info
463
+ const label = useStrings
464
+ ? c`[${name}] ${colors.info}${tag}{/}: ${message}`
465
+ : c`[${name}] ${colors.info}${tag}{/} ${message}`
466
+
467
+ Term.group(label)
468
+ }
469
+
470
+ /**
471
+ * Static groupSuccess - start a success-tagged group
472
+ *
473
+ * @param {string} message - Group label
474
+ */
475
+ static groupSuccess(message) {
476
+ const name = this.name || "Log"
477
+ const useStrings = this.tagsAsStrings
478
+ const tag = useStrings ? "Success" : logSymbols.success
479
+ const label = useStrings
480
+ ? c`[${name}] {success}${tag}{/}: ${message}`
481
+ : c`[${name}] {success}${tag}{/} ${message}`
482
+
483
+ Term.group(label)
484
+ }
485
+
486
+ /**
487
+ * Start a console group for indented output
488
+ *
489
+ * @param {...unknown} args - Optional group label
490
+ */
491
+ group(...args) {
492
+ const name = this.#name || Glog.name || "Log"
493
+ const showName = this.#displayName
494
+ const label = args.length > 0 ? ` ${args.join(" ")}` : ""
495
+ const output = showName ? `[${name}]${label}` : label.trim()
496
+
497
+ Term.group(output)
498
+ }
499
+
500
+ /**
501
+ * End the current console group
502
+ */
503
+ groupEnd() {
504
+ Term.groupEnd()
505
+ }
506
+
507
+ /**
508
+ * Start a debug-tagged group
509
+ *
510
+ * @param {string} message - Group label
511
+ * @param {number} [level=1] - Debug level
512
+ */
513
+ groupDebug(message, level = 1) {
514
+ Term.group(this.#compose("debug", message, level))
515
+ }
516
+
517
+ /**
518
+ * Start an info-tagged group
519
+ *
520
+ * @param {string} message - Group label
521
+ */
522
+ groupInfo(message) {
523
+ Term.group(this.#compose("info", message))
524
+ }
525
+
526
+ /**
527
+ * Start a success-tagged group
528
+ *
529
+ * @param {string} message - Group label
530
+ */
531
+ groupSuccess(message) {
532
+ const name = this.#name || Glog.name || "Log"
533
+ const useStrings = this.#tagsAsStrings || Glog.tagsAsStrings
534
+ const showName = this.#displayName
535
+ const tag = useStrings ? "Success" : logSymbols.success
536
+ const namePrefix = showName ? `[${name}] ` : ""
537
+ const label = useStrings
538
+ ? c`${namePrefix}{success}${tag}{/}: ${message}`
539
+ : c`${namePrefix}{success}${tag}{/} ${message}`
540
+
541
+ Term.group(label)
356
542
  }
357
543
 
358
544
  /**
@@ -434,6 +620,44 @@ class Glog {
434
620
  get colours() {
435
621
  return c
436
622
  }
623
+
624
+ /**
625
+ * Get a raw logger that outputs without name/tag formatting
626
+ *
627
+ * @returns {object} Raw logger interface
628
+ */
629
+ get raw() {
630
+ return {
631
+ debug: (message, ...args) => Term.debug(message, ...args),
632
+ info: (message, ...args) => Term.info(message, ...args),
633
+ warn: (message, ...args) => Term.warn(message, ...args),
634
+ error: (message, ...args) => Term.error(message, ...args),
635
+ log: (...args) => Term.log(...args),
636
+ success: (message, ...args) => Term.log(message, ...args),
637
+ table: (data, options) => Term.table(data, options || {}),
638
+ group: (...args) => Term.group(...args),
639
+ groupEnd: () => Term.groupEnd()
640
+ }
641
+ }
642
+
643
+ /**
644
+ * Static raw logger that outputs without name/tag formatting
645
+ *
646
+ * @returns {object} Raw logger interface
647
+ */
648
+ static get raw() {
649
+ return {
650
+ debug: (message, ...args) => Term.debug(message, ...args),
651
+ info: (message, ...args) => Term.info(message, ...args),
652
+ warn: (message, ...args) => Term.warn(message, ...args),
653
+ error: (message, ...args) => Term.error(message, ...args),
654
+ log: (...args) => Term.log(...args),
655
+ success: (message, ...args) => Term.log(message, ...args),
656
+ table: (data, options) => Term.table(data, options || {}),
657
+ group: (...args) => Term.group(...args),
658
+ groupEnd: () => Term.groupEnd()
659
+ }
660
+ }
437
661
  }
438
662
 
439
663
  // Wrap in proxy for dual usage
@@ -38,6 +38,12 @@ export default class CappedDirectoryObject extends DirectoryObject {
38
38
  * @returns {boolean} Always true for CappedDirectoryObject instances
39
39
  */
40
40
  get capped(): boolean;
41
+ /**
42
+ * Returns a generator that walks up to the cap.
43
+ *
44
+ * @returns {Generator<DirectoryObject>} Generator yielding parent directories
45
+ */
46
+ get walkUp(): Generator<DirectoryObject>;
41
47
  /**
42
48
  * Creates a new CappedDirectoryObject by extending this directory's path.
43
49
  *
@@ -1 +1 @@
1
- {"version":3,"file":"CappedDirectoryObject.d.ts","sourceRoot":"","sources":["../../lib/CappedDirectoryObject.js"],"names":[],"mappings":"AAiBA;;;;;;;;GAQG;AACH;IAGE;;;;;;;;;;;;;;;;OAgBG;IACH,kBAXW,MAAM,OAAC,OACP,MAAM,WACN,qBAAqB,OAAC,cACtB,OAAO,EAkFjB;IAqBD;;;;OAIG;IACH,WAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,cAFa,OAAO,CAInB;IAED;;;;;;;;;;;;;;OAcG;IACH,sBAVW,MAAM,GACJ,qBAAqB,CA0BjC;;CA6CF;4BA/N2B,sBAAsB"}
1
+ {"version":3,"file":"CappedDirectoryObject.d.ts","sourceRoot":"","sources":["../../lib/CappedDirectoryObject.js"],"names":[],"mappings":"AAiBA;;;;;;;;GAQG;AACH;IAGE;;;;;;;;;;;;;;;;OAgBG;IACH,kBAXW,MAAM,OAAC,OACP,MAAM,WACN,qBAAqB,OAAC,cACtB,OAAO,EAkFjB;IAqBD;;;;OAIG;IACH,WAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,cAFa,OAAO,CAInB;IA8DD;;;;OAIG;IACH,cAFa,SAAS,CAAC,eAAe,CAAC,CAItC;IAED;;;;;;;;;;;;;;OAcG;IACH,sBAVW,MAAM,GACJ,qBAAqB,CA0BjC;;CA6CF;4BApS2B,sBAAsB"}
@@ -21,6 +21,7 @@
21
21
  * @property {boolean} temporary - Whether this is marked as a temporary directory
22
22
  * @property {boolean} isFile - Always false (this is a directory)
23
23
  * @property {boolean} isDirectory - Always true
24
+ * @property {DirectoryObject|null} parent - The parent directory (null if root)
24
25
  * @property {Promise<boolean>} exists - Whether the directory exists (async getter)
25
26
  * @property {Generator<DirectoryObject>} walkUp - Generator yielding parent directories up to root
26
27
  *
@@ -124,6 +125,20 @@ export default class DirectoryObject extends FS {
124
125
  * @returns {boolean} True if this is a temporary directory, false otherwise
125
126
  */
126
127
  get temporary(): boolean;
128
+ /**
129
+ * Returns the parent directory of this directory.
130
+ * Returns null if this directory is the root directory.
131
+ * Computed lazily on first access and cached.
132
+ *
133
+ * @returns {DirectoryObject|null} The parent directory or null if root
134
+ * @example
135
+ * const dir = new DirectoryObject('/path/to/directory')
136
+ * console.log(dir.parent.path) // '/path/to'
137
+ *
138
+ * const root = new DirectoryObject('/')
139
+ * console.log(root.parent) // null
140
+ */
141
+ get parent(): DirectoryObject | null;
127
142
  /**
128
143
  * Recursively removes a temporary directory and all its contents.
129
144
  *
@@ -1 +1 @@
1
- {"version":3,"file":"DirectoryObject.d.ts","sourceRoot":"","sources":["../../lib/DirectoryObject.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH;uBA4Fe,MAAM;IAjEnB;;;;;OAKG;IACH,yCAFW,OAAO,EA6BjB;IAWD;;;;OAIG;IACH,UAFa,MAAM,CAalB;IAWD;;;;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;;;;OAIG;IACH,iBAFa,OAAO,CAInB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,UATa,OAAO,CAAC,IAAI,CAAC,CA0BzB;IAED;;;;OAIG;IACH,cAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,mBAFa,OAAO,CAInB;IAiBD;;;;;;;;;;;;;;;OAeG;IACH,WAZW,MAAM,GACJ,OAAO,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAAC,WAAW,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;KAAC,CAAC,CAoCpF;IAED;;;;;;;;;;;;OAYG;IACH,uBARW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAqBzB;IA8BD;;;;;;;;;;;;;;;OAeG;IACH,cAZa,MAAM,CAclB;IAED;;;;;;;;;;;;;;OAcG;IACH,UARa,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAM5B;IAED;;;;;OAKG;IACH,sBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAO5B;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,sBAdW,MAAM,GACJ,eAAe,CAoB3B;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,kBAbW,MAAM,GACJ,UAAU,CAmBtB;;CACF;eA9hBc,SAAS;uBACD,iBAAiB"}
1
+ {"version":3,"file":"DirectoryObject.d.ts","sourceRoot":"","sources":["../../lib/DirectoryObject.js"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH;uBAqGe,MAAM;IAlEnB;;;;;OAKG;IACH,yCAFW,OAAO,EA6BjB;IAWD;;;;OAIG;IACH,UAFa,MAAM,CAclB;IAWD;;;;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;;;;OAIG;IACH,iBAFa,OAAO,CAInB;IAED;;;;;;;;;;;;OAYG;IACH,cARa,eAAe,GAAC,IAAI,CAwBhC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,UATa,OAAO,CAAC,IAAI,CAAC,CA0BzB;IAED;;;;OAIG;IACH,cAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,mBAFa,OAAO,CAInB;IAiBD;;;;;;;;;;;;;;;OAeG;IACH,WAZW,MAAM,GACJ,OAAO,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAAC,WAAW,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;KAAC,CAAC,CAoCpF;IAED;;;;;;;;;;;;OAYG;IACH,uBARW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAqBzB;IA8BD;;;;;;;;;;;;;;;OAeG;IACH,cAZa,MAAM,CAclB;IAED;;;;;;;;;;;;;;OAcG;IACH,UARa,OAAO,CAAC,IAAI,CAAC,CAkBzB;IAED;;;;;OAKG;IACH,kBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAM5B;IAED;;;;;OAKG;IACH,sBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAO5B;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,sBAdW,MAAM,GACJ,eAAe,CAoB3B;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,kBAbW,MAAM,GACJ,UAAU,CAmBtB;;CACF;eAvkBc,SAAS;uBACD,iBAAiB"}
@@ -10,7 +10,7 @@
10
10
  * @property {string} extension - The file extension
11
11
  * @property {boolean} isFile - Always true for files
12
12
  * @property {boolean} isDirectory - Always false for files
13
- * @property {DirectoryObject} directory - The parent directory object
13
+ * @property {DirectoryObject} parent - The parent directory object
14
14
  * @property {Promise<boolean>} exists - Whether the file exists (async)
15
15
  */
16
16
  export default class FileObject extends FS {
@@ -28,9 +28,9 @@ export default class FileObject extends FS {
28
28
  * Constructs a FileObject instance.
29
29
  *
30
30
  * @param {string | FileObject} fileName - The file path or FileObject
31
- * @param {DirectoryObject|string|null} [directory] - The parent directory (object or string)
31
+ * @param {DirectoryObject|string|null} [parent] - The parent directory (object or string)
32
32
  */
33
- constructor(fileName: string | FileObject, directory?: DirectoryObject | string | null);
33
+ constructor(fileName: string | FileObject, parent?: DirectoryObject | string | null);
34
34
  /**
35
35
  * Returns a JSON representation of the FileObject.
36
36
  *
@@ -106,7 +106,7 @@ export default class FileObject extends FS {
106
106
  *
107
107
  * @returns {DirectoryObject} The parent directory object
108
108
  */
109
- get directory(): DirectoryObject;
109
+ get parent(): DirectoryObject;
110
110
  /**
111
111
  * Check if a file can be read. Returns true if the file can be read, false
112
112
  *
@@ -1 +1 @@
1
- {"version":3,"file":"FileObject.d.ts","sourceRoot":"","sources":["../../lib/FileObject.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;GAcG;AAEH;uBAuHe,MAAM;IAtHnB;;;;;OAKG;IACH,yBAFU;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,OAAO,KAAK,GAAG,OAAO,IAAI,CAAC,CAAA;KAAC,CAO1D;IA2BF;;;;;OAKG;IACH,sBAHW,MAAM,GAAG,UAAU,cACnB,eAAe,GAAC,MAAM,GAAC,IAAI,EA2CrC;IAWD;;;;OAIG;IACH,UAFa,MAAM,CAclB;IAWD;;;;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;IACD;;;;OAIG;IACH,cAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,mBAFa,OAAO,CAInB;IAED;;;;;;;;;;;;;;OAcG;IACH,iBAFa,eAAe,CAI3B;IAED;;;;OAIG;IACH,WAFa,OAAO,CAAC,OAAO,CAAC,CAU5B;IAED;;;;OAIG;IACH,YAFa,OAAO,CAAC,OAAO,CAAC,CAU5B;IAiBD;;;;OAIG;IACH,QAFa,OAAO,CAAC,MAAM,OAAC,CAAC,CAU5B;IAED;;;;;OAKG;IACH,YAFa,OAAO,CAAC,IAAI,OAAC,CAAC,CAU1B;IAsBD;;;;;OAKG;IACH,gBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAY3B;IAED;;;;;;;;;;;OAWG;IACH,cARa,OAAO,CAAC,MAAM,CAAC,CAkB3B;IAED;;;;;;;;;;;OAWG;IACH,eARW,MAAM,aACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAezB;IAED;;;;;;;;;;;;;;;OAeG;IACH,kBAXW,WAAW,GAAC,IAAI,GAAC,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAyBzB;IAED;;;;;;;;;;;;;;OAcG;IACH,gBAXW,MAAM,aACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAkC5B;IAED;;;;OAIG;IACH,UAFa,OAAO,CAAC,MAAM,CAAC,CAY3B;IAED;;;;;;;;;OASG;IACH,UAPa,OAAO,CAAC,IAAI,CAAC,CAiBzB;;CACF;eAtgBc,SAAS;4BADI,sBAAsB;kBARhC,OAAO;iBAIR,MAAM"}
1
+ {"version":3,"file":"FileObject.d.ts","sourceRoot":"","sources":["../../lib/FileObject.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;GAcG;AAEH;uBAuHe,MAAM;IAtHnB;;;;;OAKG;IACH,yBAFU;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC,OAAO,KAAK,GAAG,OAAO,IAAI,CAAC,CAAA;KAAC,CAO1D;IA2BF;;;;;OAKG;IACH,sBAHW,MAAM,GAAG,UAAU,WACnB,eAAe,GAAC,MAAM,GAAC,IAAI,EA2CrC;IAWD;;;;OAIG;IACH,UAFa,MAAM,CAclB;IAWD;;;;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;IACD;;;;OAIG;IACH,cAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,mBAFa,OAAO,CAInB;IAED;;;;;;;;;;;;;;OAcG;IACH,cAFa,eAAe,CAI3B;IAED;;;;OAIG;IACH,WAFa,OAAO,CAAC,OAAO,CAAC,CAU5B;IAED;;;;OAIG;IACH,YAFa,OAAO,CAAC,OAAO,CAAC,CAU5B;IAiBD;;;;OAIG;IACH,QAFa,OAAO,CAAC,MAAM,OAAC,CAAC,CAU5B;IAED;;;;;OAKG;IACH,YAFa,OAAO,CAAC,IAAI,OAAC,CAAC,CAU1B;IAsBD;;;;;OAKG;IACH,gBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAY3B;IAED;;;;;;;;;;;OAWG;IACH,cARa,OAAO,CAAC,MAAM,CAAC,CAkB3B;IAED;;;;;;;;;;;OAWG;IACH,eARW,MAAM,aACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAezB;IAED;;;;;;;;;;;;;;;OAeG;IACH,kBAXW,WAAW,GAAC,IAAI,GAAC,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAyBzB;IAED;;;;;;;;;;;;;;OAcG;IACH,gBAXW,MAAM,aACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAkC5B;IAED;;;;OAIG;IACH,UAFa,OAAO,CAAC,MAAM,CAAC,CAY3B;IAED;;;;;;;;;OASG;IACH,UAPa,OAAO,CAAC,IAAI,CAAC,CAiBzB;;CACF;eAtgBc,SAAS;4BADI,sBAAsB;kBARhC,OAAO;iBAIR,MAAM"}
@@ -5,6 +5,17 @@ export namespace loggerColours {
5
5
  let error: string;
6
6
  let reset: string;
7
7
  }
8
+ export namespace logSymbols {
9
+ let debug_1: string;
10
+ export { debug_1 as debug };
11
+ let info_1: string;
12
+ export { info_1 as info };
13
+ let warn_1: string;
14
+ export { warn_1 as warn };
15
+ let error_1: string;
16
+ export { error_1 as error };
17
+ export let success: string;
18
+ }
8
19
  declare const _default: typeof Glog;
9
20
  export default _default;
10
21
  declare class Glog {
@@ -13,6 +24,7 @@ declare class Glog {
13
24
  static colors: any;
14
25
  static stackTrace: boolean;
15
26
  static name: string;
27
+ static tagsAsStrings: boolean;
16
28
  static setLogPrefix(prefix: any): typeof Glog;
17
29
  static setLogLevel(level: any): typeof Glog;
18
30
  static withName(name: any): typeof Glog;
@@ -24,6 +36,7 @@ declare class Glog {
24
36
  reset: string;
25
37
  }): typeof Glog;
26
38
  static withStackTrace(enabled?: boolean): typeof Glog;
39
+ static withTagsAsStrings(enabled?: boolean): typeof Glog;
27
40
  static create(options?: {}): Glog;
28
41
  static execute(...args: any[]): void;
29
42
  /**
@@ -40,6 +53,35 @@ declare class Glog {
40
53
  * @param {...unknown} args - Additional arguments to log
41
54
  */
42
55
  static success(message: string, ...args: unknown[]): void;
56
+ /**
57
+ * Static group method - start a console group for indented output
58
+ *
59
+ * @param {...unknown} args - Optional group label
60
+ */
61
+ static group(...args: unknown[]): void;
62
+ /**
63
+ * Static groupEnd method - end the current console group
64
+ */
65
+ static groupEnd(): void;
66
+ /**
67
+ * Static groupDebug - start a debug-tagged group
68
+ *
69
+ * @param {string} message - Group label
70
+ * @param {number} [level=1] - Debug level
71
+ */
72
+ static groupDebug(message: string, level?: number): void;
73
+ /**
74
+ * Static groupInfo - start an info-tagged group
75
+ *
76
+ * @param {string} message - Group label
77
+ */
78
+ static groupInfo(message: string): void;
79
+ /**
80
+ * Static groupSuccess - start a success-tagged group
81
+ *
82
+ * @param {string} message - Group label
83
+ */
84
+ static groupSuccess(message: string): void;
43
85
  /**
44
86
  * Static table method
45
87
  *
@@ -63,6 +105,12 @@ declare class Glog {
63
105
  * @returns {Glog} The Glog class for chaining.
64
106
  */
65
107
  static setAlias(alias: string, colorCode: string): Glog;
108
+ /**
109
+ * Static raw logger that outputs without name/tag formatting
110
+ *
111
+ * @returns {object} Raw logger interface
112
+ */
113
+ static get raw(): object;
66
114
  constructor(options?: {});
67
115
  setOptions(options: any): this;
68
116
  withName(name: any): this;
@@ -76,6 +124,8 @@ declare class Glog {
76
124
  reset: string;
77
125
  }): this;
78
126
  withStackTrace(enabled?: boolean): this;
127
+ withTagsAsStrings(enabled?: boolean): this;
128
+ noDisplayName(): this;
79
129
  get name(): string;
80
130
  get debugLevel(): number;
81
131
  get options(): {
@@ -117,6 +167,35 @@ declare class Glog {
117
167
  * @param {...unknown} args - Additional arguments
118
168
  */
119
169
  success(message: string, ...args: unknown[]): void;
170
+ /**
171
+ * Start a console group for indented output
172
+ *
173
+ * @param {...unknown} args - Optional group label
174
+ */
175
+ group(...args: unknown[]): void;
176
+ /**
177
+ * End the current console group
178
+ */
179
+ groupEnd(): void;
180
+ /**
181
+ * Start a debug-tagged group
182
+ *
183
+ * @param {string} message - Group label
184
+ * @param {number} [level=1] - Debug level
185
+ */
186
+ groupDebug(message: string, level?: number): void;
187
+ /**
188
+ * Start an info-tagged group
189
+ *
190
+ * @param {string} message - Group label
191
+ */
192
+ groupInfo(message: string): void;
193
+ /**
194
+ * Start a success-tagged group
195
+ *
196
+ * @param {string} message - Group label
197
+ */
198
+ groupSuccess(message: string): void;
120
199
  /**
121
200
  * Display tabular data as a table
122
201
  *
@@ -138,6 +217,12 @@ declare class Glog {
138
217
  * @returns {import('@gesslar/colours')} The colours template function from \@gesslar/colours
139
218
  */
140
219
  get colours(): typeof import("@gesslar/colours");
220
+ /**
221
+ * Get a raw logger that outputs without name/tag formatting
222
+ *
223
+ * @returns {object} Raw logger interface
224
+ */
225
+ get raw(): object;
141
226
  #private;
142
227
  }
143
228
  //# sourceMappingURL=Glog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Glog.d.ts","sourceRoot":"","sources":["../../lib/Glog.js"],"names":[],"mappings":";;;;;;;;;AA6CA;IAEE,wBAAmB;IACnB,yBAAqB;IACrB,mBAAoB;IACpB,2BAAyB;IACzB,oBAAgB;IA4ChB,8CAIC;IAED,4CAIC;IAED,wCAIC;IAED;;;;;;oBAIC;IAED,sDAIC;IAID,kCAEC;IAwJD,qCAoBC;IAuBD;;;;;OAKG;IACH,yBAHW,KAAK,CAAC,MAAM,CAAC,aACV,OAAO,EAAA,QAOpB;IAYD;;;;;OAKG;IACH,wBAHW,MAAM,WACH,OAAO,EAAA,QAIpB;IA+BD;;;;;;;;;OASG;IACH,mBAPW,MAAM,QAAQ,mBACd,MAAM,GAAG,MAAM,YAEvB;QAAgC,UAAU,GAAlC,KAAK,CAAC,MAAM,CAAC;QACK,UAAU,GAA5B,OAAO;QACW,aAAa,GAA/B,OAAO;KACjB,QAkBA;IAED;;;;;;OAMG;IACH,uBAJW,MAAM,aACN,MAAM,GACJ,IAAI,CAMhB;IA3WD,0BAgBC;IAID,+BAQC;IAwCD,0BAIC;IAED,+BAIC;IAED,8BAIC;IAED;;;;;;aAIC;IAED,wCAIC;IAID,mBAEC;IAED,yBAEC;IAED;;;;;;MAQC;IAqBD,8BAGC;IAED,wBAQC;IA8BD;;;;;;;;;OASG;IACH,eALW,MAAM,UACN,MAAM,UACH,OAAO,EAAA,QAapB;IAED,wCAGC;IAED,wCAGC;IAED,yCAGC;IA0BD,8BAEC;IAID;;;;;;OAMG;IACH,kBAJW,KAAK,CAAC,MAAM,CAAC,aACV,OAAO,EAAA,QAQpB;IAeD;;;;;OAKG;IACH,iBAHW,MAAM,WACH,OAAO,EAAA,QAIpB;IAYD;;;;;;;;;OASG;IACH,YAPW,MAAM,QAAQ,mBACd,MAAM,GAAG,MAAM,YAEvB;QAAgC,UAAU,GAAlC,KAAK,CAAC,MAAM,CAAC;QACK,UAAU,GAA5B,OAAO;QACW,aAAa,GAA/B,OAAO;KACjB,QAkBA;IA4CD;;;;OAIG;IACH,iDAEC;;CACF"}
1
+ {"version":3,"file":"Glog.d.ts","sourceRoot":"","sources":["../../lib/Glog.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAsDA;IAEE,wBAAmB;IACnB,yBAAqB;IACrB,mBAAoB;IACpB,2BAAyB;IACzB,oBAAgB;IAChB,8BAA4B;IAgD5B,8CAIC;IAED,4CAIC;IAED,wCAIC;IAED;;;;;;oBAIC;IAED,sDAIC;IAED,yDAIC;IAID,kCAEC;IA6KD,qCAoBC;IAuBD;;;;;OAKG;IACH,yBAHW,KAAK,CAAC,MAAM,CAAC,aACV,OAAO,EAAA,QAOpB;IAqBD;;;;;OAKG;IACH,wBAHW,MAAM,WACH,OAAO,EAAA,QAWpB;IAED;;;;OAIG;IACH,sBAFc,OAAO,EAAA,QAOpB;IAED;;OAEG;IACH,wBAEC;IAED;;;;;OAKG;IACH,2BAHW,MAAM,UACN,MAAM,QAahB;IAED;;;;OAIG;IACH,0BAFW,MAAM,QAYhB;IAED;;;;OAIG;IACH,6BAFW,MAAM,QAWhB;IAyFD;;;;;;;;;OASG;IACH,mBAPW,MAAM,QAAQ,mBACd,MAAM,GAAG,MAAM,YAEvB;QAAgC,UAAU,GAAlC,KAAK,CAAC,MAAM,CAAC;QACK,UAAU,GAA5B,OAAO;QACW,aAAa,GAA/B,OAAO;KACjB,QAkBA;IAED;;;;;;OAMG;IACH,uBAJW,MAAM,aACN,MAAM,GACJ,IAAI,CAMhB;IA8BD;;;;OAIG;IACH,kBAFa,MAAM,CAclB;IAxkBD,0BAgBC;IAID,+BAUC;IA8CD,0BAIC;IAED,+BAIC;IAED,8BAIC;IAED;;;;;;aAIC;IAED,wCAIC;IAED,2CAIC;IAED,sBAIC;IAID,mBAEC;IAED,yBAEC;IAED;;;;;;MAQC;IA8BD,8BAGC;IAED,wBAQC;IA8BD;;;;;;;;;OASG;IACH,eALW,MAAM,UACN,MAAM,UACH,OAAO,EAAA,QAapB;IAED,wCAGC;IAED,wCAGC;IAED,yCAGC;IA0BD,8BAEC;IAID;;;;;;OAMG;IACH,kBAJW,KAAK,CAAC,MAAM,CAAC,aACV,OAAO,EAAA,QAQpB;IAeD;;;;;OAKG;IACH,iBAHW,MAAM,WACH,OAAO,EAAA,QAapB;IA0FD;;;;OAIG;IACH,eAFc,OAAO,EAAA,QASpB;IAED;;OAEG;IACH,iBAEC;IAED;;;;;OAKG;IACH,oBAHW,MAAM,UACN,MAAM,QAIhB;IAED;;;;OAIG;IACH,mBAFW,MAAM,QAIhB;IAED;;;;OAIG;IACH,sBAFW,MAAM,QAahB;IAED;;;;;;;;;OASG;IACH,YAPW,MAAM,QAAQ,mBACd,MAAM,GAAG,MAAM,YAEvB;QAAgC,UAAU,GAAlC,KAAK,CAAC,MAAM,CAAC;QACK,UAAU,GAA5B,OAAO;QACW,aAAa,GAA/B,OAAO;KACjB,QAkBA;IA4CD;;;;OAIG;IACH,iDAEC;IAED;;;;OAIG;IACH,WAFa,MAAM,CAclB;;CAoBF"}