instrumentality 0.0.14 → 0.0.15

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/road.d.ts CHANGED
@@ -43,17 +43,26 @@ export declare let lockedRoads: Map<string, Promise<void>> | null;
43
43
  * 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
44
  */
45
45
  export declare abstract class Road {
46
- /** The absolute path to the file or directory that this Road instance represents.
46
+ /** The absolute path to the entry that this Road instance represents.
47
47
  * @remarks Intentionally made protected to prevent external modification, as changing this value could lead to inconsistencies and unexpected behavior. */
48
48
  protected pointsTo: string;
49
- /** Indicates whether the file or directory represented by this Road instance can be modified.
49
+ /** Indicates which operations are allowed on the entry represented by this Road instance.
50
50
  * 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;
51
+ writable: boolean;
52
+ moveable: boolean;
53
+ deletable: boolean;
54
+ copyable: boolean;
55
+ renameable: boolean;
56
+ assertWrite(): void;
57
+ assertMove(): void;
58
+ assertDelete(): void;
59
+ assertCopy(): void;
60
+ assertRename(): void;
52
61
  /** Copy of the absolute path. */
53
62
  get isAt(): string;
54
63
  /** Name of the road without the path (including extensions). */
55
64
  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). */
65
+ /** 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
66
  get depth(): number;
58
67
  /** Same as {@link isAt} but for compatibility with external APIs. */
59
68
  toString(): string;
@@ -294,7 +303,10 @@ export declare function symlink(...args: ConstructorParameters<typeof SymbolicLi
294
303
  * One could say 'this road truly is *unusable*.' hehe
295
304
  */
296
305
  export declare abstract class UnusableRoad extends Road {
297
- readonly mutable: never;
306
+ readonly writable: never;
307
+ readonly moveable: never;
308
+ readonly deletable: never;
309
+ readonly copyable: never;
298
310
  size(): Promise<0>;
299
311
  sizeSync(): 0;
300
312
  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";
@@ -75,18 +76,32 @@ export let lockedRoads = null;
75
76
  * 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
77
  */
77
78
  export class Road {
78
- /** The absolute path to the file or directory that this Road instance represents.
79
+ /** The absolute path to the entry that this Road instance represents.
79
80
  * @remarks Intentionally made protected to prevent external modification, as changing this value could lead to inconsistencies and unexpected behavior. */
80
81
  pointsTo;
81
- /** Indicates whether the file or directory represented by this Road instance can be modified.
82
+ /** Indicates which operations are allowed on the entry represented by this Road instance.
82
83
  * 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;
84
+ writable = true;
85
+ moveable = true;
86
+ deletable = true;
87
+ copyable = true;
88
+ renameable = true;
89
+ assertWrite() { if (!this.writable)
90
+ throw new Err(`Road to '${this.isAt}' isn't writable.`); }
91
+ assertMove() { if (!this.moveable)
92
+ throw new Err(`Road to '${this.isAt}' isn't moveable.`); }
93
+ assertDelete() { if (!this.deletable)
94
+ throw new Err(`Road to '${this.isAt}' isn't deletable.`); }
95
+ assertCopy() { if (!this.copyable)
96
+ throw new Err(`Road to '${this.isAt}' isn't copyable.`); }
97
+ assertRename() { if (!this.renameable)
98
+ throw new Err(`Road to '${this.isAt}' isn't renameable.`); }
84
99
  // Quick accessors
85
100
  /** Copy of the absolute path. */
86
101
  get isAt() { return this.pointsTo; }
87
102
  /** Name of the road without the path (including extensions). */
88
103
  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). */
104
+ /** 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). */
90
105
  get depth() { return this.isAt.split(ph.sep).length - 1; }
91
106
  /** Same as {@link isAt} but for compatibility with external APIs. */
92
107
  toString() { return this.isAt; }
@@ -122,8 +137,6 @@ export class Road {
122
137
  /** @returns An array of {@link Folder} instances representing the ancestors of the current road. */
123
138
  ancestors() { return [...this.ancestorsIt()]; }
124
139
  reserveLock(allowConcurrent) {
125
- if (!this.mutable)
126
- throw new Err(`Road to '${this.isAt}' is immutable.`);
127
140
  lockedRoads ??= new Map();
128
141
  const { promise, resolve } = Promise.withResolvers();
129
142
  const isAt = this.isAt;
@@ -210,43 +223,51 @@ export class Road {
210
223
  lstatSync() { return fs.lstatSync(this.isAt); }
211
224
  /** Wrapper around {@link fp.rm} with locking. */
212
225
  async delete() {
226
+ this.assertDelete();
213
227
  using _ = await this.lock();
214
228
  await fp.rm(this.isAt, { recursive: true, force: true });
215
229
  }
216
230
  /** Wrapper around {@link fs.rmSync} with locking. */
217
231
  deleteSync() {
232
+ this.assertDelete();
218
233
  using _ = this.lockSync();
219
234
  fs.rmSync(this.isAt, { recursive: true, force: true });
220
235
  }
221
236
  async copy(into_) {
237
+ this.assertCopy();
222
238
  const newPath = into_.join(this.name);
223
239
  await fp.cp(this.isAt, newPath, { recursive: true, force: true });
224
240
  return new this.constructor(newPath, false);
225
241
  }
226
242
  copySync(into_) {
243
+ this.assertCopy();
227
244
  const newPath = into_.join(this.name);
228
245
  fs.cpSync(this.isAt, newPath, { recursive: true, force: true });
229
246
  return new this.constructor(newPath, false);
230
247
  }
231
248
  async move(into_) {
249
+ this.assertMove();
232
250
  using _ = await this.lock();
233
251
  const newPath = into_.join(this.name);
234
252
  await fp.rename(this.isAt, newPath);
235
253
  this.pointsTo = newPath;
236
254
  }
237
255
  moveSync(into_) {
256
+ this.assertMove();
238
257
  using _ = this.lockSync();
239
258
  const newPath = into_.join(this.name);
240
259
  fs.renameSync(this.isAt, newPath);
241
260
  this.pointsTo = newPath;
242
261
  }
243
262
  async rename(newName_) {
263
+ this.assertRename();
244
264
  using _ = await this.lock();
245
265
  const newPath = this.parent().join(newName_);
246
266
  await fp.rename(this.isAt, newPath);
247
267
  this.pointsTo = newPath;
248
268
  }
249
269
  renameSync(newName_) {
270
+ this.assertRename();
250
271
  using _ = this.lockSync();
251
272
  const newPath = this.parent().join(newName_);
252
273
  fs.renameSync(this.isAt, newPath);
@@ -432,30 +453,37 @@ export class File extends Road {
432
453
  async size() { return (await this.lstat()).size; }
433
454
  sizeSync() { return this.lstatSync().size; }
434
455
  async writeAtomic(data_, options_) {
456
+ this.assertWrite();
435
457
  using _ = await this.lock();
436
458
  await this.parent().borrow(File, async (tmp) => {
459
+ tmp.assertWrite();
437
460
  using _ = await tmp.lock();
438
461
  await fp.writeFile(tmp.isAt, data_, options_);
439
462
  await fp.rename(tmp.isAt, this.isAt);
440
463
  });
441
464
  }
442
465
  writeAtomicSync(data_, options_) {
466
+ this.assertWrite();
443
467
  using _ = this.lockSync();
444
468
  this.parent().borrowSync(File, tmp => {
469
+ tmp.assertWrite();
445
470
  using _ = tmp.lockSync();
446
471
  fs.writeFileSync(tmp.isAt, data_, options_);
447
472
  fs.renameSync(tmp.isAt, this.isAt);
448
473
  });
449
474
  }
450
475
  async write(data_, options_) {
476
+ this.assertWrite();
451
477
  using _ = await this.lock();
452
478
  await fp.writeFile(this.isAt, data_, options_);
453
479
  }
454
480
  writeSync(data_, options_) {
481
+ this.assertWrite();
455
482
  using _ = this.lockSync();
456
483
  fs.writeFileSync(this.isAt, data_, options_);
457
484
  }
458
485
  async writePast(offset_, data_) {
486
+ this.assertWrite();
459
487
  using _ = await this.lock();
460
488
  const fd = await fp.open(this.isAt, 'r+');
461
489
  try {
@@ -467,6 +495,7 @@ export class File extends Road {
467
495
  }
468
496
  }
469
497
  writePastSync(offset_, data_) {
498
+ this.assertWrite();
470
499
  using _ = this.lockSync();
471
500
  const fd = fs.openSync(this.isAt, 'r+');
472
501
  try {
@@ -478,6 +507,7 @@ export class File extends Road {
478
507
  }
479
508
  }
480
509
  async truncWritePast(offset_, data_) {
510
+ this.assertWrite();
481
511
  using _ = await this.lock();
482
512
  const fd = await fp.open(this.isAt, 'r+');
483
513
  try {
@@ -490,6 +520,7 @@ export class File extends Road {
490
520
  }
491
521
  }
492
522
  truncWritePastSync(offset_, data_) {
523
+ this.assertWrite();
493
524
  using _ = this.lockSync();
494
525
  const fd = fs.openSync(this.isAt, 'r+');
495
526
  try {
@@ -502,10 +533,12 @@ export class File extends Road {
502
533
  }
503
534
  }
504
535
  async append(data_, options_) {
536
+ this.assertWrite();
505
537
  using _ = await this.lock();
506
538
  await fp.appendFile(this.isAt, data_, options_);
507
539
  }
508
540
  appendSync(data_, options_) {
541
+ this.assertWrite();
509
542
  using _ = this.lockSync();
510
543
  fs.appendFileSync(this.isAt, data_, options_);
511
544
  }
@@ -613,11 +646,13 @@ export class Folder extends Road {
613
646
  }
614
647
  }
615
648
  async add(name_, createable_) {
649
+ this.assertWrite();
616
650
  const newPath = this.join(name_);
617
651
  await createable_.mk(newPath);
618
652
  return (await road(newPath));
619
653
  }
620
654
  addSync(name_, createable_) {
655
+ this.assertWrite();
621
656
  const newPath = this.join(name_);
622
657
  createable_.mkSync(newPath);
623
658
  return roadSync(newPath);
@@ -708,11 +743,15 @@ export class SymbolicLink extends Road {
708
743
  return roadSync(ph.resolve(ph.dirname(this.isAt), fs.readlinkSync(this.isAt)));
709
744
  }
710
745
  async retarget(to_) {
746
+ this.assertDelete();
747
+ this.assertWrite();
711
748
  using _ = await this.lock();
712
749
  await fp.unlink(this.isAt);
713
750
  await fp.symlink(to_.isAt, this.isAt);
714
751
  }
715
752
  retargetSync(to_) {
753
+ this.assertDelete();
754
+ this.assertWrite();
716
755
  using _ = this.lockSync();
717
756
  fs.unlinkSync(this.isAt);
718
757
  fs.symlinkSync(to_.isAt, this.isAt);
@@ -720,10 +759,12 @@ export class SymbolicLink extends Road {
720
759
  async size() { return (await this.lstat()).size; }
721
760
  sizeSync() { return this.lstatSync().size; }
722
761
  async delete() {
762
+ this.assertDelete();
723
763
  using _ = await this.lock();
724
764
  await fp.unlink(this.isAt);
725
765
  }
726
766
  deleteSync() {
767
+ this.assertDelete();
727
768
  using _ = this.lockSync();
728
769
  fs.unlinkSync(this.isAt);
729
770
  }
@@ -755,7 +796,11 @@ export function symlink(...args) { return new SymbolicLink(...args); }
755
796
  * One could say 'this road truly is *unusable*.' hehe
756
797
  */
757
798
  export class UnusableRoad extends Road {
758
- mutable = false; // Modification will cause system issues (e.g. deleting a device file)
799
+ // Modification will cause system issues (e.g. deleting a device file)
800
+ writable = false;
801
+ moveable = false;
802
+ deletable = false;
803
+ copyable = false;
759
804
  size() { return Promise.resolve(0); }
760
805
  sizeSync() { return 0; }
761
806
  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.15",
9
9
  "main": "./dist/base.js",
10
10
  "types": "./dist/base.d.ts",
11
11
  "devDependencies": {
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"
@@ -78,19 +79,28 @@ export let lockedRoads: Map<string, Promise<void>> | null = null
78
79
  * 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
80
  */
80
81
  export abstract class Road {
81
- /** The absolute path to the file or directory that this Road instance represents.
82
+ /** The absolute path to the entry that this Road instance represents.
82
83
  * @remarks Intentionally made protected to prevent external modification, as changing this value could lead to inconsistencies and unexpected behavior. */
83
84
  protected pointsTo: string
84
- /** Indicates whether the file or directory represented by this Road instance can be modified.
85
+ /** Indicates which operations are allowed on the entry represented by this Road instance.
85
86
  * 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
87
+ writable = true
88
+ moveable = true
89
+ deletable = true
90
+ copyable = true
91
+ renameable = true
92
+ assertWrite() { if (!this.writable) throw new Err(`Road to '${this.isAt}' isn't writable.`) }
93
+ assertMove() { if (!this.moveable) throw new Err(`Road to '${this.isAt}' isn't moveable.`) }
94
+ assertDelete() { if (!this.deletable) throw new Err(`Road to '${this.isAt}' isn't deletable.`) }
95
+ assertCopy() { if (!this.copyable) throw new Err(`Road to '${this.isAt}' isn't copyable.`) }
96
+ assertRename() { if (!this.renameable) throw new Err(`Road to '${this.isAt}' isn't renameable.`) }
87
97
 
88
98
  // Quick accessors
89
99
  /** Copy of the absolute path. */
90
100
  get isAt() { return this.pointsTo }
91
101
  /** Name of the road without the path (including extensions). */
92
102
  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). */
103
+ /** 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). */
94
104
  get depth() { return this.isAt.split(ph.sep).length - 1 }
95
105
  /** Same as {@link isAt} but for compatibility with external APIs. */
96
106
  toString(): string { return this.isAt }
@@ -129,8 +139,6 @@ export abstract class Road {
129
139
  ancestors(): Folder[] { return [...this.ancestorsIt()] }
130
140
 
131
141
  protected reserveLock(allowConcurrent: boolean): Disposable & { previous: Promise<void> | undefined } {
132
- if (!this.mutable)
133
- throw new Err(`Road to '${this.isAt}' is immutable.`)
134
142
  lockedRoads ??= new Map()
135
143
  const { promise, resolve } = Promise.withResolvers<void>()
136
144
  const isAt = this.isAt
@@ -209,43 +217,51 @@ export abstract class Road {
209
217
 
210
218
  /** Wrapper around {@link fp.rm} with locking. */
211
219
  async delete(): Promise<void> {
220
+ this.assertDelete()
212
221
  using _ = await this.lock()
213
222
  await fp.rm(this.isAt, { recursive: true, force: true })
214
223
  }
215
224
  /** Wrapper around {@link fs.rmSync} with locking. */
216
225
  deleteSync(): void {
226
+ this.assertDelete()
217
227
  using _ = this.lockSync()
218
228
  fs.rmSync(this.isAt, { recursive: true, force: true })
219
229
  }
220
230
  async copy(into_: Folder): Promise<this> {
231
+ this.assertCopy()
221
232
  const newPath = into_.join(this.name)
222
233
  await fp.cp(this.isAt, newPath, { recursive: true, force: true })
223
234
  return new (this.constructor as new (path: string, typeCheck: boolean) => this)(newPath, false)
224
235
  }
225
236
  copySync(into_: Folder): this {
237
+ this.assertCopy()
226
238
  const newPath = into_.join(this.name)
227
239
  fs.cpSync(this.isAt, newPath, { recursive: true, force: true })
228
240
  return new (this.constructor as new (path: string, typeCheck: boolean) => this)(newPath, false)
229
241
  }
230
242
  async move(into_: Folder): Promise<void> {
243
+ this.assertMove()
231
244
  using _ = await this.lock()
232
245
  const newPath = into_.join(this.name)
233
246
  await fp.rename(this.isAt, newPath)
234
247
  this.pointsTo = newPath
235
248
  }
236
249
  moveSync(into_: Folder): void {
250
+ this.assertMove()
237
251
  using _ = this.lockSync()
238
252
  const newPath = into_.join(this.name)
239
253
  fs.renameSync(this.isAt, newPath)
240
254
  this.pointsTo = newPath
241
255
  }
242
256
  async rename(newName_: string): Promise<void> {
257
+ this.assertRename()
243
258
  using _ = await this.lock()
244
259
  const newPath = this.parent().join(newName_)
245
260
  await fp.rename(this.isAt, newPath)
246
261
  this.pointsTo = newPath
247
262
  }
248
263
  renameSync(newName_: string): void {
264
+ this.assertRename()
249
265
  using _ = this.lockSync()
250
266
  const newPath = this.parent().join(newName_)
251
267
  fs.renameSync(this.isAt, newPath)
@@ -434,16 +450,20 @@ export class File extends Road {
434
450
  sizeSync(): number { return this.lstatSync().size }
435
451
 
436
452
  async writeAtomic(data_: Buffer | string, options_?: fs.WriteFileOptions) {
453
+ this.assertWrite()
437
454
  using _ = await this.lock()
438
455
  await this.parent().borrow(File, async tmp => {
456
+ tmp.assertWrite()
439
457
  using _ = await tmp.lock()
440
458
  await fp.writeFile(tmp.isAt, data_, options_)
441
459
  await fp.rename(tmp.isAt, this.isAt)
442
460
  })
443
461
  }
444
462
  writeAtomicSync(data_: Buffer | string, options_?: fs.WriteFileOptions) {
463
+ this.assertWrite()
445
464
  using _ = this.lockSync()
446
465
  this.parent().borrowSync(File, tmp => {
466
+ tmp.assertWrite()
447
467
  using _ = tmp.lockSync()
448
468
  fs.writeFileSync(tmp.isAt, data_, options_)
449
469
  fs.renameSync(tmp.isAt, this.isAt)
@@ -451,14 +471,17 @@ export class File extends Road {
451
471
  }
452
472
 
453
473
  async write(data_: Buffer | string, options_?: fs.WriteFileOptions) {
474
+ this.assertWrite()
454
475
  using _ = await this.lock()
455
476
  await fp.writeFile(this.isAt, data_, options_)
456
477
  }
457
478
  writeSync(data_: Buffer | string, options_?: fs.WriteFileOptions) {
479
+ this.assertWrite()
458
480
  using _ = this.lockSync()
459
481
  fs.writeFileSync(this.isAt, data_, options_)
460
482
  }
461
483
  async writePast(offset_: number, data_: Buffer | string) {
484
+ this.assertWrite()
462
485
  using _ = await this.lock()
463
486
  const fd = await fp.open(this.isAt, 'r+')
464
487
  try {
@@ -467,6 +490,7 @@ export class File extends Road {
467
490
  } finally { await fd.close() }
468
491
  }
469
492
  writePastSync(offset_: number, data_: Buffer | string) {
493
+ this.assertWrite()
470
494
  using _ = this.lockSync()
471
495
  const fd = fs.openSync(this.isAt, 'r+')
472
496
  try {
@@ -475,6 +499,7 @@ export class File extends Road {
475
499
  } finally { fs.closeSync(fd) }
476
500
  }
477
501
  async truncWritePast(offset_: number, data_: Buffer | string) {
502
+ this.assertWrite()
478
503
  using _ = await this.lock()
479
504
  const fd = await fp.open(this.isAt, 'r+')
480
505
  try {
@@ -485,6 +510,7 @@ export class File extends Road {
485
510
  finally { await fd.close() }
486
511
  }
487
512
  truncWritePastSync(offset_: number, data_: Buffer | string) {
513
+ this.assertWrite()
488
514
  using _ = this.lockSync()
489
515
  const fd = fs.openSync(this.isAt, 'r+')
490
516
  try {
@@ -495,10 +521,12 @@ export class File extends Road {
495
521
  finally { fs.closeSync(fd) }
496
522
  }
497
523
  async append(data_: Buffer | string, options_?: fs.WriteFileOptions) {
524
+ this.assertWrite()
498
525
  using _ = await this.lock()
499
526
  await fp.appendFile(this.isAt, data_, options_)
500
527
  }
501
528
  appendSync(data_: Buffer | string, options_?: fs.WriteFileOptions) {
529
+ this.assertWrite()
502
530
  using _ = this.lockSync()
503
531
  fs.appendFileSync(this.isAt, data_, options_)
504
532
  }
@@ -615,11 +643,13 @@ export class Folder extends Road {
615
643
  }
616
644
 
617
645
  async add<T extends Road>(name_: string, createable_: { mk: (at: string) => Promise<T> }): Promise<T> {
646
+ this.assertWrite()
618
647
  const newPath = this.join(name_)
619
648
  await createable_.mk(newPath)
620
649
  return (await road(newPath)) as unknown as T
621
650
  }
622
651
  addSync<T extends Road>(name_: string, createable_: { mkSync: (at: string) => T }): T {
652
+ this.assertWrite()
623
653
  const newPath = this.join(name_)
624
654
  createable_.mkSync(newPath)
625
655
  return roadSync(newPath) as unknown as T
@@ -692,11 +722,15 @@ export class SymbolicLink extends Road {
692
722
  return roadSync(ph.resolve(ph.dirname(this.isAt), fs.readlinkSync(this.isAt)))
693
723
  }
694
724
  async retarget(to_: Road) {
725
+ this.assertDelete()
726
+ this.assertWrite()
695
727
  using _ = await this.lock()
696
728
  await fp.unlink(this.isAt)
697
729
  await fp.symlink(to_.isAt, this.isAt)
698
730
  }
699
731
  retargetSync(to_: Road) {
732
+ this.assertDelete()
733
+ this.assertWrite()
700
734
  using _ = this.lockSync()
701
735
  fs.unlinkSync(this.isAt)
702
736
  fs.symlinkSync(to_.isAt, this.isAt)
@@ -706,10 +740,12 @@ export class SymbolicLink extends Road {
706
740
  sizeSync(): number { return this.lstatSync().size }
707
741
 
708
742
  override async delete() {
743
+ this.assertDelete()
709
744
  using _ = await this.lock()
710
745
  await fp.unlink(this.isAt)
711
746
  }
712
747
  override deleteSync() {
748
+ this.assertDelete()
713
749
  using _ = this.lockSync()
714
750
  fs.unlinkSync(this.isAt)
715
751
  }
@@ -736,7 +772,11 @@ export function symlink(...args: ConstructorParameters<typeof SymbolicLink>): Sy
736
772
  * One could say 'this road truly is *unusable*.' hehe
737
773
  */
738
774
  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)
775
+ // Modification will cause system issues (e.g. deleting a device file)
776
+ override readonly writable = false as never
777
+ override readonly moveable = false as never
778
+ override readonly deletable = false as never
779
+ override readonly copyable = false as never
740
780
  size(): Promise<0> { return Promise.resolve(0) }
741
781
  sizeSync(): 0 { return 0 }
742
782
  error(): never { throw new Err(`${this.constructor.name} at '${this.isAt}' is a system-level resource thus not subject to modification.`) }