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 +8 -0
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +13 -0
- package/dist/road.d.ts +23 -5
- package/dist/road.d.ts.map +1 -1
- package/dist/road.js +65 -9
- package/package.json +1 -1
- package/src/base.ts +17 -1
- package/src/road.ts +63 -9
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
|
package/dist/base.d.ts.map
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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;
|
package/dist/road.d.ts.map
CHANGED
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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(
|
|
89
|
-
/** The amount of path segments in the absolute path to the
|
|
90
|
-
get depth() { return this.isAt.split(
|
|
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
|
-
|
|
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
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
|
|
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
|
|
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
|
-
|
|
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(
|
|
93
|
-
/** The amount of path segments in the absolute path to the
|
|
94
|
-
get depth() { return this.isAt.split(
|
|
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
|
-
|
|
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.`) }
|