instrumentality 0.0.14 → 0.0.16

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/dist/base.d.ts CHANGED
@@ -127,4 +127,12 @@ export declare function encode122(data_: ArrayLike<number>): string;
127
127
  * @throws If an invalid base-122 illegal index is encountered during decoding (shouldn't happen if the input was generated by {@link encode122}).
128
128
  */
129
129
  export declare function decode122(base122_: string): Uint8Array<ArrayBuffer>;
130
+ /**
131
+ * Wraps a function to ensure it is called with the correct context.
132
+ *
133
+ * @param fn_ - The function to wrap.
134
+ * @returns A new function that applies the original function with the appropriate context.
135
+ */
136
+ export declare function wFn<Args extends unknown[]>(fn_: (...args: Args) => unknown): (this: unknown, ...args: Args) => unknown;
137
+ export { wFn as wrapFunction };
130
138
  //# sourceMappingURL=base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
package/dist/base.js CHANGED
@@ -179,3 +179,16 @@ export function decode122(base122_) {
179
179
  }
180
180
  return Uint8Array.from(out);
181
181
  }
182
+ /**
183
+ * Wraps a function to ensure it is called with the correct context.
184
+ *
185
+ * @param fn_ - The function to wrap.
186
+ * @returns A new function that applies the original function with the appropriate context.
187
+ */
188
+ export function wFn(fn_) {
189
+ return function (...args) {
190
+ const context = this ?? (typeof document !== 'undefined' && fn_.toString().includes('Native') ? globalThis : globalThis);
191
+ return Reflect.apply(fn_, context, args);
192
+ };
193
+ }
194
+ export { wFn as wrapFunction };
package/dist/road.d.ts CHANGED
@@ -35,6 +35,12 @@ export { resolveDirent as resDirent };
35
35
  * It's generally meant for read-only purposes. It's not advised to modify this map directly if there are built-in mechanisms that do the job for you as well.
36
36
  */
37
37
  export declare let lockedRoads: Map<string, Promise<void>> | null;
38
+ /**
39
+ * The default path separator that is recognized/supported by this module.
40
+ *
41
+ * \\ is intentionally not used as the default separator to maintain consistency across different operating systems. (Windows supports both \\ and /, but / is preferred here.)
42
+ */
43
+ export declare const PH_SEP: '/';
38
44
  /**
39
45
  * Road is an OOP, pointer-like representation of an entry in the local file system. It wraps around the Node.js fs module and provides a more convenient access to it.
40
46
  * It's meant to help the user mentally model an entry and help them reason about it, as well as provide a more convenient API and guardrails for common operations.
@@ -43,17 +49,26 @@ export declare let lockedRoads: Map<string, Promise<void>> | null;
43
49
  * It is more like a memory representation, similar to a pointer in low-level programming languages; other processes might mess with the underlying entry. There are methods to check for consistency, but they are not guaranteed to be foolproof.
44
50
  */
45
51
  export declare abstract class Road {
46
- /** The absolute path to the file or directory that this Road instance represents.
52
+ /** The absolute path to the entry that this Road instance represents.
47
53
  * @remarks Intentionally made protected to prevent external modification, as changing this value could lead to inconsistencies and unexpected behavior. */
48
54
  protected pointsTo: string;
49
- /** Indicates whether the file or directory represented by this Road instance can be modified.
55
+ /** Indicates which operations are allowed on the entry represented by this Road instance.
50
56
  * Changing this value does not affect the actual file system permissions, but rather serves as a safeguard within the application to prevent accidental modifications. */
51
- mutable: boolean;
57
+ writable: boolean;
58
+ moveable: boolean;
59
+ deletable: boolean;
60
+ copyable: boolean;
61
+ renameable: boolean;
62
+ assertWrite(): void;
63
+ assertMove(): void;
64
+ assertDelete(): void;
65
+ assertCopy(): void;
66
+ assertRename(): void;
52
67
  /** Copy of the absolute path. */
53
68
  get isAt(): string;
54
69
  /** Name of the road without the path (including extensions). */
55
70
  get name(): string;
56
- /** The amount of path segments in the absolute path to the file or directory represented by this Road instance, minus one (i.e., the depth of the path in the file system hierarchy). */
71
+ /** The amount of path segments in the absolute path to the entry represented by this Road instance, minus one (i.e., the depth of the path in the file system hierarchy). */
57
72
  get depth(): number;
58
73
  /** Same as {@link isAt} but for compatibility with external APIs. */
59
74
  toString(): string;
@@ -294,7 +309,10 @@ export declare function symlink(...args: ConstructorParameters<typeof SymbolicLi
294
309
  * One could say 'this road truly is *unusable*.' hehe
295
310
  */
296
311
  export declare abstract class UnusableRoad extends Road {
297
- readonly mutable: never;
312
+ readonly writable: never;
313
+ readonly moveable: never;
314
+ readonly deletable: never;
315
+ readonly copyable: never;
298
316
  size(): Promise<0>;
299
317
  sizeSync(): 0;
300
318
  error(): never;
@@ -1 +1 @@
1
- {"version":3,"file":"road.d.ts","sourceRoot":"","sources":["../src/road.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"road.d.ts","sourceRoot":"","sources":["../src/road.ts"],"names":[],"mappings":"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"}
package/dist/road.js CHANGED
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import * as cr from "node:crypto";
2
3
  import * as fs from "node:fs";
3
4
  import { constants as fsc } from "node:fs";
@@ -67,6 +68,12 @@ export { resolveDirent as resDirent };
67
68
  * It's generally meant for read-only purposes. It's not advised to modify this map directly if there are built-in mechanisms that do the job for you as well.
68
69
  */
69
70
  export let lockedRoads = null;
71
+ /**
72
+ * The default path separator that is recognized/supported by this module.
73
+ *
74
+ * \\ is intentionally not used as the default separator to maintain consistency across different operating systems. (Windows supports both \\ and /, but / is preferred here.)
75
+ */
76
+ export const PH_SEP = '/';
70
77
  /**
71
78
  * Road is an OOP, pointer-like representation of an entry in the local file system. It wraps around the Node.js fs module and provides a more convenient access to it.
72
79
  * It's meant to help the user mentally model an entry and help them reason about it, as well as provide a more convenient API and guardrails for common operations.
@@ -75,19 +82,33 @@ export let lockedRoads = null;
75
82
  * It is more like a memory representation, similar to a pointer in low-level programming languages; other processes might mess with the underlying entry. There are methods to check for consistency, but they are not guaranteed to be foolproof.
76
83
  */
77
84
  export class Road {
78
- /** The absolute path to the file or directory that this Road instance represents.
85
+ /** The absolute path to the entry that this Road instance represents.
79
86
  * @remarks Intentionally made protected to prevent external modification, as changing this value could lead to inconsistencies and unexpected behavior. */
80
87
  pointsTo;
81
- /** Indicates whether the file or directory represented by this Road instance can be modified.
88
+ /** Indicates which operations are allowed on the entry represented by this Road instance.
82
89
  * Changing this value does not affect the actual file system permissions, but rather serves as a safeguard within the application to prevent accidental modifications. */
83
- mutable = true;
90
+ writable = true;
91
+ moveable = true;
92
+ deletable = true;
93
+ copyable = true;
94
+ renameable = true;
95
+ assertWrite() { if (!this.writable)
96
+ throw new Err(`Road to '${this.isAt}' isn't writable.`); }
97
+ assertMove() { if (!this.moveable)
98
+ throw new Err(`Road to '${this.isAt}' isn't moveable.`); }
99
+ assertDelete() { if (!this.deletable)
100
+ throw new Err(`Road to '${this.isAt}' isn't deletable.`); }
101
+ assertCopy() { if (!this.copyable)
102
+ throw new Err(`Road to '${this.isAt}' isn't copyable.`); }
103
+ assertRename() { if (!this.renameable)
104
+ throw new Err(`Road to '${this.isAt}' isn't renameable.`); }
84
105
  // Quick accessors
85
106
  /** Copy of the absolute path. */
86
107
  get isAt() { return this.pointsTo; }
87
108
  /** Name of the road without the path (including extensions). */
88
- get name() { return this.isAt.slice(this.isAt.lastIndexOf(ph.sep) + 1); }
89
- /** The amount of path segments in the absolute path to the file or directory represented by this Road instance, minus one (i.e., the depth of the path in the file system hierarchy). */
90
- get depth() { return this.isAt.split(ph.sep).length - 1; }
109
+ get name() { return this.isAt.slice(this.isAt.lastIndexOf(PH_SEP) + 1); }
110
+ /** The amount of path segments in the absolute path to the entry represented by this Road instance, minus one (i.e., the depth of the path in the file system hierarchy). */
111
+ get depth() { return this.isAt.split(PH_SEP).length - 1; }
91
112
  /** Same as {@link isAt} but for compatibility with external APIs. */
92
113
  toString() { return this.isAt; }
93
114
  /**
@@ -100,6 +121,7 @@ export class Road {
100
121
  */
101
122
  constructor(path_, typeCheck_) {
102
123
  this.pointsTo = ph.resolve(path_);
124
+ this.pointsTo = this.pointsTo.replace(/\\/g, PH_SEP);
103
125
  if (typeCheck_ && !this.checkSync(true))
104
126
  throw new Err(`Type mismatch: '${this.isAt}'`);
105
127
  }
@@ -122,8 +144,6 @@ export class Road {
122
144
  /** @returns An array of {@link Folder} instances representing the ancestors of the current road. */
123
145
  ancestors() { return [...this.ancestorsIt()]; }
124
146
  reserveLock(allowConcurrent) {
125
- if (!this.mutable)
126
- throw new Err(`Road to '${this.isAt}' is immutable.`);
127
147
  lockedRoads ??= new Map();
128
148
  const { promise, resolve } = Promise.withResolvers();
129
149
  const isAt = this.isAt;
@@ -210,43 +230,55 @@ export class Road {
210
230
  lstatSync() { return fs.lstatSync(this.isAt); }
211
231
  /** Wrapper around {@link fp.rm} with locking. */
212
232
  async delete() {
233
+ this.assertDelete();
213
234
  using _ = await this.lock();
214
235
  await fp.rm(this.isAt, { recursive: true, force: true });
215
236
  }
216
237
  /** Wrapper around {@link fs.rmSync} with locking. */
217
238
  deleteSync() {
239
+ this.assertDelete();
218
240
  using _ = this.lockSync();
219
241
  fs.rmSync(this.isAt, { recursive: true, force: true });
220
242
  }
221
243
  async copy(into_) {
244
+ this.assertCopy();
222
245
  const newPath = into_.join(this.name);
223
246
  await fp.cp(this.isAt, newPath, { recursive: true, force: true });
224
247
  return new this.constructor(newPath, false);
225
248
  }
226
249
  copySync(into_) {
250
+ this.assertCopy();
227
251
  const newPath = into_.join(this.name);
228
252
  fs.cpSync(this.isAt, newPath, { recursive: true, force: true });
229
253
  return new this.constructor(newPath, false);
230
254
  }
231
255
  async move(into_) {
256
+ this.assertMove();
232
257
  using _ = await this.lock();
233
258
  const newPath = into_.join(this.name);
234
259
  await fp.rename(this.isAt, newPath);
235
260
  this.pointsTo = newPath;
236
261
  }
237
262
  moveSync(into_) {
263
+ this.assertMove();
238
264
  using _ = this.lockSync();
239
265
  const newPath = into_.join(this.name);
240
266
  fs.renameSync(this.isAt, newPath);
241
267
  this.pointsTo = newPath;
242
268
  }
243
269
  async rename(newName_) {
270
+ this.assertRename();
271
+ if (newName_.includes('/') || newName_.includes('\\'))
272
+ throw new Error('New name cannot contain path separators.');
244
273
  using _ = await this.lock();
245
274
  const newPath = this.parent().join(newName_);
246
275
  await fp.rename(this.isAt, newPath);
247
276
  this.pointsTo = newPath;
248
277
  }
249
278
  renameSync(newName_) {
279
+ this.assertRename();
280
+ if (newName_.includes('/') || newName_.includes('\\'))
281
+ throw new Error('New name cannot contain path separators.');
250
282
  using _ = this.lockSync();
251
283
  const newPath = this.parent().join(newName_);
252
284
  fs.renameSync(this.isAt, newPath);
@@ -432,30 +464,37 @@ export class File extends Road {
432
464
  async size() { return (await this.lstat()).size; }
433
465
  sizeSync() { return this.lstatSync().size; }
434
466
  async writeAtomic(data_, options_) {
467
+ this.assertWrite();
435
468
  using _ = await this.lock();
436
469
  await this.parent().borrow(File, async (tmp) => {
470
+ tmp.assertWrite();
437
471
  using _ = await tmp.lock();
438
472
  await fp.writeFile(tmp.isAt, data_, options_);
439
473
  await fp.rename(tmp.isAt, this.isAt);
440
474
  });
441
475
  }
442
476
  writeAtomicSync(data_, options_) {
477
+ this.assertWrite();
443
478
  using _ = this.lockSync();
444
479
  this.parent().borrowSync(File, tmp => {
480
+ tmp.assertWrite();
445
481
  using _ = tmp.lockSync();
446
482
  fs.writeFileSync(tmp.isAt, data_, options_);
447
483
  fs.renameSync(tmp.isAt, this.isAt);
448
484
  });
449
485
  }
450
486
  async write(data_, options_) {
487
+ this.assertWrite();
451
488
  using _ = await this.lock();
452
489
  await fp.writeFile(this.isAt, data_, options_);
453
490
  }
454
491
  writeSync(data_, options_) {
492
+ this.assertWrite();
455
493
  using _ = this.lockSync();
456
494
  fs.writeFileSync(this.isAt, data_, options_);
457
495
  }
458
496
  async writePast(offset_, data_) {
497
+ this.assertWrite();
459
498
  using _ = await this.lock();
460
499
  const fd = await fp.open(this.isAt, 'r+');
461
500
  try {
@@ -467,6 +506,7 @@ export class File extends Road {
467
506
  }
468
507
  }
469
508
  writePastSync(offset_, data_) {
509
+ this.assertWrite();
470
510
  using _ = this.lockSync();
471
511
  const fd = fs.openSync(this.isAt, 'r+');
472
512
  try {
@@ -478,6 +518,7 @@ export class File extends Road {
478
518
  }
479
519
  }
480
520
  async truncWritePast(offset_, data_) {
521
+ this.assertWrite();
481
522
  using _ = await this.lock();
482
523
  const fd = await fp.open(this.isAt, 'r+');
483
524
  try {
@@ -490,6 +531,7 @@ export class File extends Road {
490
531
  }
491
532
  }
492
533
  truncWritePastSync(offset_, data_) {
534
+ this.assertWrite();
493
535
  using _ = this.lockSync();
494
536
  const fd = fs.openSync(this.isAt, 'r+');
495
537
  try {
@@ -502,10 +544,12 @@ export class File extends Road {
502
544
  }
503
545
  }
504
546
  async append(data_, options_) {
547
+ this.assertWrite();
505
548
  using _ = await this.lock();
506
549
  await fp.appendFile(this.isAt, data_, options_);
507
550
  }
508
551
  appendSync(data_, options_) {
552
+ this.assertWrite();
509
553
  using _ = this.lockSync();
510
554
  fs.appendFileSync(this.isAt, data_, options_);
511
555
  }
@@ -613,11 +657,13 @@ export class Folder extends Road {
613
657
  }
614
658
  }
615
659
  async add(name_, createable_) {
660
+ this.assertWrite();
616
661
  const newPath = this.join(name_);
617
662
  await createable_.mk(newPath);
618
663
  return (await road(newPath));
619
664
  }
620
665
  addSync(name_, createable_) {
666
+ this.assertWrite();
621
667
  const newPath = this.join(name_);
622
668
  createable_.mkSync(newPath);
623
669
  return roadSync(newPath);
@@ -708,11 +754,15 @@ export class SymbolicLink extends Road {
708
754
  return roadSync(ph.resolve(ph.dirname(this.isAt), fs.readlinkSync(this.isAt)));
709
755
  }
710
756
  async retarget(to_) {
757
+ this.assertDelete();
758
+ this.assertWrite();
711
759
  using _ = await this.lock();
712
760
  await fp.unlink(this.isAt);
713
761
  await fp.symlink(to_.isAt, this.isAt);
714
762
  }
715
763
  retargetSync(to_) {
764
+ this.assertDelete();
765
+ this.assertWrite();
716
766
  using _ = this.lockSync();
717
767
  fs.unlinkSync(this.isAt);
718
768
  fs.symlinkSync(to_.isAt, this.isAt);
@@ -720,10 +770,12 @@ export class SymbolicLink extends Road {
720
770
  async size() { return (await this.lstat()).size; }
721
771
  sizeSync() { return this.lstatSync().size; }
722
772
  async delete() {
773
+ this.assertDelete();
723
774
  using _ = await this.lock();
724
775
  await fp.unlink(this.isAt);
725
776
  }
726
777
  deleteSync() {
778
+ this.assertDelete();
727
779
  using _ = this.lockSync();
728
780
  fs.unlinkSync(this.isAt);
729
781
  }
@@ -755,7 +807,11 @@ export function symlink(...args) { return new SymbolicLink(...args); }
755
807
  * One could say 'this road truly is *unusable*.' hehe
756
808
  */
757
809
  export class UnusableRoad extends Road {
758
- mutable = false; // Modification will cause system issues (e.g. deleting a device file)
810
+ // Modification will cause system issues (e.g. deleting a device file)
811
+ writable = false;
812
+ moveable = false;
813
+ deletable = false;
814
+ copyable = false;
759
815
  size() { return Promise.resolve(0); }
760
816
  sizeSync() { return 0; }
761
817
  error() { throw new Err(`${this.constructor.name} at '${this.isAt}' is a system-level resource thus not subject to modification.`); }
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "url": "https://github.com/clerkburk/instrumentality.git"
6
6
  },
7
7
  "type": "module",
8
- "version": "0.0.14",
8
+ "version": "0.0.16",
9
9
  "main": "./dist/base.js",
10
10
  "types": "./dist/base.d.ts",
11
11
  "devDependencies": {
package/src/base.ts CHANGED
@@ -262,4 +262,20 @@ export function decode122(base122_: string) {
262
262
  }
263
263
 
264
264
  return Uint8Array.from(out)
265
- }
265
+ }
266
+
267
+
268
+
269
+ /**
270
+ * Wraps a function to ensure it is called with the correct context.
271
+ *
272
+ * @param fn_ - The function to wrap.
273
+ * @returns A new function that applies the original function with the appropriate context.
274
+ */
275
+ export function wFn<Args extends unknown[]>(fn_: (...args: Args) => unknown) {
276
+ return function(this: unknown, ...args: Args) {
277
+ const context = this ?? (typeof document !== 'undefined' && fn_.toString().includes('Native') ? globalThis : globalThis)
278
+ return Reflect.apply(fn_, context, args)
279
+ }
280
+ }
281
+ export { wFn as wrapFunction }
package/src/road.ts CHANGED
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import * as cr from "node:crypto"
2
3
  import * as fs from "node:fs"; import { constants as fsc } from "node:fs"
3
4
  import * as fp from "node:fs/promises"
@@ -70,6 +71,15 @@ export let lockedRoads: Map<string, Promise<void>> | null = null
70
71
 
71
72
 
72
73
 
74
+ /**
75
+ * The default path separator that is recognized/supported by this module.
76
+ *
77
+ * \\ is intentionally not used as the default separator to maintain consistency across different operating systems. (Windows supports both \\ and /, but / is preferred here.)
78
+ */
79
+ export const PH_SEP = '/' as const
80
+
81
+
82
+
73
83
  /**
74
84
  * Road is an OOP, pointer-like representation of an entry in the local file system. It wraps around the Node.js fs module and provides a more convenient access to it.
75
85
  * It's meant to help the user mentally model an entry and help them reason about it, as well as provide a more convenient API and guardrails for common operations.
@@ -78,20 +88,29 @@ export let lockedRoads: Map<string, Promise<void>> | null = null
78
88
  * It is more like a memory representation, similar to a pointer in low-level programming languages; other processes might mess with the underlying entry. There are methods to check for consistency, but they are not guaranteed to be foolproof.
79
89
  */
80
90
  export abstract class Road {
81
- /** The absolute path to the file or directory that this Road instance represents.
91
+ /** The absolute path to the entry that this Road instance represents.
82
92
  * @remarks Intentionally made protected to prevent external modification, as changing this value could lead to inconsistencies and unexpected behavior. */
83
93
  protected pointsTo: string
84
- /** Indicates whether the file or directory represented by this Road instance can be modified.
94
+ /** Indicates which operations are allowed on the entry represented by this Road instance.
85
95
  * Changing this value does not affect the actual file system permissions, but rather serves as a safeguard within the application to prevent accidental modifications. */
86
- mutable: boolean = true
96
+ writable = true
97
+ moveable = true
98
+ deletable = true
99
+ copyable = true
100
+ renameable = true
101
+ assertWrite() { if (!this.writable) throw new Err(`Road to '${this.isAt}' isn't writable.`) }
102
+ assertMove() { if (!this.moveable) throw new Err(`Road to '${this.isAt}' isn't moveable.`) }
103
+ assertDelete() { if (!this.deletable) throw new Err(`Road to '${this.isAt}' isn't deletable.`) }
104
+ assertCopy() { if (!this.copyable) throw new Err(`Road to '${this.isAt}' isn't copyable.`) }
105
+ assertRename() { if (!this.renameable) throw new Err(`Road to '${this.isAt}' isn't renameable.`) }
87
106
 
88
107
  // Quick accessors
89
108
  /** Copy of the absolute path. */
90
109
  get isAt() { return this.pointsTo }
91
110
  /** Name of the road without the path (including extensions). */
92
- get name() { return this.isAt.slice(this.isAt.lastIndexOf(ph.sep) + 1) }
93
- /** The amount of path segments in the absolute path to the file or directory represented by this Road instance, minus one (i.e., the depth of the path in the file system hierarchy). */
94
- get depth() { return this.isAt.split(ph.sep).length - 1 }
111
+ get name() { return this.isAt.slice(this.isAt.lastIndexOf(PH_SEP) + 1) }
112
+ /** The amount of path segments in the absolute path to the entry represented by this Road instance, minus one (i.e., the depth of the path in the file system hierarchy). */
113
+ get depth() { return this.isAt.split(PH_SEP).length - 1 }
95
114
  /** Same as {@link isAt} but for compatibility with external APIs. */
96
115
  toString(): string { return this.isAt }
97
116
 
@@ -105,6 +124,7 @@ export abstract class Road {
105
124
  */
106
125
  constructor(path_: string, typeCheck_: boolean) {
107
126
  this.pointsTo = ph.resolve(path_)
127
+ this.pointsTo = this.pointsTo.replace(/\\/g, PH_SEP)
108
128
  if (typeCheck_ && !this.checkSync(true))
109
129
  throw new Err(`Type mismatch: '${this.isAt}'`)
110
130
  }
@@ -129,8 +149,6 @@ export abstract class Road {
129
149
  ancestors(): Folder[] { return [...this.ancestorsIt()] }
130
150
 
131
151
  protected reserveLock(allowConcurrent: boolean): Disposable & { previous: Promise<void> | undefined } {
132
- if (!this.mutable)
133
- throw new Err(`Road to '${this.isAt}' is immutable.`)
134
152
  lockedRoads ??= new Map()
135
153
  const { promise, resolve } = Promise.withResolvers<void>()
136
154
  const isAt = this.isAt
@@ -209,43 +227,55 @@ export abstract class Road {
209
227
 
210
228
  /** Wrapper around {@link fp.rm} with locking. */
211
229
  async delete(): Promise<void> {
230
+ this.assertDelete()
212
231
  using _ = await this.lock()
213
232
  await fp.rm(this.isAt, { recursive: true, force: true })
214
233
  }
215
234
  /** Wrapper around {@link fs.rmSync} with locking. */
216
235
  deleteSync(): void {
236
+ this.assertDelete()
217
237
  using _ = this.lockSync()
218
238
  fs.rmSync(this.isAt, { recursive: true, force: true })
219
239
  }
220
240
  async copy(into_: Folder): Promise<this> {
241
+ this.assertCopy()
221
242
  const newPath = into_.join(this.name)
222
243
  await fp.cp(this.isAt, newPath, { recursive: true, force: true })
223
244
  return new (this.constructor as new (path: string, typeCheck: boolean) => this)(newPath, false)
224
245
  }
225
246
  copySync(into_: Folder): this {
247
+ this.assertCopy()
226
248
  const newPath = into_.join(this.name)
227
249
  fs.cpSync(this.isAt, newPath, { recursive: true, force: true })
228
250
  return new (this.constructor as new (path: string, typeCheck: boolean) => this)(newPath, false)
229
251
  }
230
252
  async move(into_: Folder): Promise<void> {
253
+ this.assertMove()
231
254
  using _ = await this.lock()
232
255
  const newPath = into_.join(this.name)
233
256
  await fp.rename(this.isAt, newPath)
234
257
  this.pointsTo = newPath
235
258
  }
236
259
  moveSync(into_: Folder): void {
260
+ this.assertMove()
237
261
  using _ = this.lockSync()
238
262
  const newPath = into_.join(this.name)
239
263
  fs.renameSync(this.isAt, newPath)
240
264
  this.pointsTo = newPath
241
265
  }
242
266
  async rename(newName_: string): Promise<void> {
267
+ this.assertRename()
268
+ if (newName_.includes('/') || newName_.includes('\\'))
269
+ throw new Error('New name cannot contain path separators.')
243
270
  using _ = await this.lock()
244
271
  const newPath = this.parent().join(newName_)
245
272
  await fp.rename(this.isAt, newPath)
246
273
  this.pointsTo = newPath
247
274
  }
248
275
  renameSync(newName_: string): void {
276
+ this.assertRename()
277
+ if (newName_.includes('/') || newName_.includes('\\'))
278
+ throw new Error('New name cannot contain path separators.')
249
279
  using _ = this.lockSync()
250
280
  const newPath = this.parent().join(newName_)
251
281
  fs.renameSync(this.isAt, newPath)
@@ -434,16 +464,20 @@ export class File extends Road {
434
464
  sizeSync(): number { return this.lstatSync().size }
435
465
 
436
466
  async writeAtomic(data_: Buffer | string, options_?: fs.WriteFileOptions) {
467
+ this.assertWrite()
437
468
  using _ = await this.lock()
438
469
  await this.parent().borrow(File, async tmp => {
470
+ tmp.assertWrite()
439
471
  using _ = await tmp.lock()
440
472
  await fp.writeFile(tmp.isAt, data_, options_)
441
473
  await fp.rename(tmp.isAt, this.isAt)
442
474
  })
443
475
  }
444
476
  writeAtomicSync(data_: Buffer | string, options_?: fs.WriteFileOptions) {
477
+ this.assertWrite()
445
478
  using _ = this.lockSync()
446
479
  this.parent().borrowSync(File, tmp => {
480
+ tmp.assertWrite()
447
481
  using _ = tmp.lockSync()
448
482
  fs.writeFileSync(tmp.isAt, data_, options_)
449
483
  fs.renameSync(tmp.isAt, this.isAt)
@@ -451,14 +485,17 @@ export class File extends Road {
451
485
  }
452
486
 
453
487
  async write(data_: Buffer | string, options_?: fs.WriteFileOptions) {
488
+ this.assertWrite()
454
489
  using _ = await this.lock()
455
490
  await fp.writeFile(this.isAt, data_, options_)
456
491
  }
457
492
  writeSync(data_: Buffer | string, options_?: fs.WriteFileOptions) {
493
+ this.assertWrite()
458
494
  using _ = this.lockSync()
459
495
  fs.writeFileSync(this.isAt, data_, options_)
460
496
  }
461
497
  async writePast(offset_: number, data_: Buffer | string) {
498
+ this.assertWrite()
462
499
  using _ = await this.lock()
463
500
  const fd = await fp.open(this.isAt, 'r+')
464
501
  try {
@@ -467,6 +504,7 @@ export class File extends Road {
467
504
  } finally { await fd.close() }
468
505
  }
469
506
  writePastSync(offset_: number, data_: Buffer | string) {
507
+ this.assertWrite()
470
508
  using _ = this.lockSync()
471
509
  const fd = fs.openSync(this.isAt, 'r+')
472
510
  try {
@@ -475,6 +513,7 @@ export class File extends Road {
475
513
  } finally { fs.closeSync(fd) }
476
514
  }
477
515
  async truncWritePast(offset_: number, data_: Buffer | string) {
516
+ this.assertWrite()
478
517
  using _ = await this.lock()
479
518
  const fd = await fp.open(this.isAt, 'r+')
480
519
  try {
@@ -485,6 +524,7 @@ export class File extends Road {
485
524
  finally { await fd.close() }
486
525
  }
487
526
  truncWritePastSync(offset_: number, data_: Buffer | string) {
527
+ this.assertWrite()
488
528
  using _ = this.lockSync()
489
529
  const fd = fs.openSync(this.isAt, 'r+')
490
530
  try {
@@ -495,10 +535,12 @@ export class File extends Road {
495
535
  finally { fs.closeSync(fd) }
496
536
  }
497
537
  async append(data_: Buffer | string, options_?: fs.WriteFileOptions) {
538
+ this.assertWrite()
498
539
  using _ = await this.lock()
499
540
  await fp.appendFile(this.isAt, data_, options_)
500
541
  }
501
542
  appendSync(data_: Buffer | string, options_?: fs.WriteFileOptions) {
543
+ this.assertWrite()
502
544
  using _ = this.lockSync()
503
545
  fs.appendFileSync(this.isAt, data_, options_)
504
546
  }
@@ -615,11 +657,13 @@ export class Folder extends Road {
615
657
  }
616
658
 
617
659
  async add<T extends Road>(name_: string, createable_: { mk: (at: string) => Promise<T> }): Promise<T> {
660
+ this.assertWrite()
618
661
  const newPath = this.join(name_)
619
662
  await createable_.mk(newPath)
620
663
  return (await road(newPath)) as unknown as T
621
664
  }
622
665
  addSync<T extends Road>(name_: string, createable_: { mkSync: (at: string) => T }): T {
666
+ this.assertWrite()
623
667
  const newPath = this.join(name_)
624
668
  createable_.mkSync(newPath)
625
669
  return roadSync(newPath) as unknown as T
@@ -692,11 +736,15 @@ export class SymbolicLink extends Road {
692
736
  return roadSync(ph.resolve(ph.dirname(this.isAt), fs.readlinkSync(this.isAt)))
693
737
  }
694
738
  async retarget(to_: Road) {
739
+ this.assertDelete()
740
+ this.assertWrite()
695
741
  using _ = await this.lock()
696
742
  await fp.unlink(this.isAt)
697
743
  await fp.symlink(to_.isAt, this.isAt)
698
744
  }
699
745
  retargetSync(to_: Road) {
746
+ this.assertDelete()
747
+ this.assertWrite()
700
748
  using _ = this.lockSync()
701
749
  fs.unlinkSync(this.isAt)
702
750
  fs.symlinkSync(to_.isAt, this.isAt)
@@ -706,10 +754,12 @@ export class SymbolicLink extends Road {
706
754
  sizeSync(): number { return this.lstatSync().size }
707
755
 
708
756
  override async delete() {
757
+ this.assertDelete()
709
758
  using _ = await this.lock()
710
759
  await fp.unlink(this.isAt)
711
760
  }
712
761
  override deleteSync() {
762
+ this.assertDelete()
713
763
  using _ = this.lockSync()
714
764
  fs.unlinkSync(this.isAt)
715
765
  }
@@ -736,7 +786,11 @@ export function symlink(...args: ConstructorParameters<typeof SymbolicLink>): Sy
736
786
  * One could say 'this road truly is *unusable*.' hehe
737
787
  */
738
788
  export abstract class UnusableRoad extends Road {
739
- override readonly mutable: never = false as never // Modification will cause system issues (e.g. deleting a device file)
789
+ // Modification will cause system issues (e.g. deleting a device file)
790
+ override readonly writable = false as never
791
+ override readonly moveable = false as never
792
+ override readonly deletable = false as never
793
+ override readonly copyable = false as never
740
794
  size(): Promise<0> { return Promise.resolve(0) }
741
795
  sizeSync(): 0 { return 0 }
742
796
  error(): never { throw new Err(`${this.constructor.name} at '${this.isAt}' is a system-level resource thus not subject to modification.`) }