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 +17 -5
- package/dist/road.d.ts.map +1 -1
- package/dist/road.js +52 -7
- package/package.json +1 -1
- package/src/road.ts +47 -7
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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;
|
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";
|
|
@@ -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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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.`) }
|