typescript-virtual-container 1.4.7 → 1.4.8
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/README.md +0 -1
- package/benchmark-results.txt +21 -21
- package/builds/self-standalone.js +979 -167
- package/builds/self-standalone.js.map +4 -4
- package/builds/standalone-wo-sftp.js +982 -172
- package/builds/standalone-wo-sftp.js.map +4 -4
- package/builds/standalone.cjs +990 -179
- package/builds/standalone.cjs.map +4 -4
- package/dist/SSHMimic/index.d.ts.map +1 -1
- package/dist/SSHMimic/index.js +2 -0
- package/dist/SSHMimic/index.js.map +1 -1
- package/dist/VirtualFileSystem/binaryPack.d.ts.map +1 -1
- package/dist/VirtualFileSystem/binaryPack.js +21 -9
- package/dist/VirtualFileSystem/binaryPack.js.map +1 -1
- package/dist/VirtualFileSystem/index.d.ts +25 -0
- package/dist/VirtualFileSystem/index.d.ts.map +1 -1
- package/dist/VirtualFileSystem/index.js +152 -47
- package/dist/VirtualFileSystem/index.js.map +1 -1
- package/dist/VirtualFileSystem/internalTypes.d.ts +19 -4
- package/dist/VirtualFileSystem/internalTypes.d.ts.map +1 -1
- package/dist/VirtualFileSystem/path.js +1 -1
- package/dist/VirtualFileSystem/path.js.map +1 -1
- package/dist/VirtualShell/idleManager.d.ts +65 -0
- package/dist/VirtualShell/idleManager.d.ts.map +1 -0
- package/dist/VirtualShell/idleManager.js +106 -0
- package/dist/VirtualShell/idleManager.js.map +1 -0
- package/dist/VirtualShell/index.d.ts +28 -0
- package/dist/VirtualShell/index.d.ts.map +1 -1
- package/dist/VirtualShell/index.js +48 -0
- package/dist/VirtualShell/index.js.map +1 -1
- package/dist/commands/man.d.ts.map +1 -1
- package/dist/commands/man.js +5 -28
- package/dist/commands/man.js.map +1 -1
- package/dist/commands/manuals-bundle.d.ts +11 -0
- package/dist/commands/manuals-bundle.d.ts.map +1 -0
- package/dist/commands/manuals-bundle.js +898 -0
- package/dist/commands/manuals-bundle.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/linuxRootfs.d.ts +8 -1
- package/dist/modules/linuxRootfs.d.ts.map +1 -1
- package/dist/modules/linuxRootfs.js +47 -14
- package/dist/modules/linuxRootfs.js.map +1 -1
- package/dist/self-standalone.js +15 -0
- package/dist/self-standalone.js.map +1 -1
- package/dist/standalone.js +22 -0
- package/dist/standalone.js.map +1 -1
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/HoneyPot.html +8 -8
- package/docs/classes/IdleManager.html +159 -0
- package/docs/classes/SshClient.html +18 -18
- package/docs/classes/VirtualFileSystem.html +57 -32
- package/docs/classes/VirtualPackageManager.html +12 -12
- package/docs/classes/VirtualSftpServer.html +3 -3
- package/docs/classes/VirtualShell.html +40 -25
- package/docs/classes/VirtualSshServer.html +5 -5
- package/docs/classes/VirtualUserManager.html +26 -26
- package/docs/functions/assertDiff.html +1 -1
- package/docs/functions/diffSnapshots.html +1 -1
- package/docs/functions/formatDiff.html +1 -1
- package/docs/functions/getArg.html +1 -1
- package/docs/functions/getFlag.html +1 -1
- package/docs/functions/ifFlag.html +1 -1
- package/docs/hierarchy.html +1 -1
- package/docs/index.html +1 -2
- package/docs/interfaces/AuditLogEntry.html +2 -2
- package/docs/interfaces/CommandContext.html +11 -11
- package/docs/interfaces/CommandResult.html +12 -12
- package/docs/interfaces/ExecStream.html +5 -5
- package/docs/interfaces/HoneyPotStats.html +2 -2
- package/docs/interfaces/IdleManagerOptions.html +7 -0
- package/docs/interfaces/InstalledPackage.html +10 -10
- package/docs/interfaces/NanoEditorSession.html +4 -4
- package/docs/interfaces/PackageDefinition.html +13 -13
- package/docs/interfaces/PackageFile.html +4 -4
- package/docs/interfaces/RemoveOptions.html +2 -2
- package/docs/interfaces/ShellEnv.html +3 -3
- package/docs/interfaces/ShellModule.html +7 -7
- package/docs/interfaces/ShellProperties.html +4 -4
- package/docs/interfaces/ShellStream.html +6 -6
- package/docs/interfaces/SudoChallenge.html +8 -8
- package/docs/interfaces/VfsBaseNode.html +6 -6
- package/docs/interfaces/VfsDiff.html +5 -5
- package/docs/interfaces/VfsDiffEntry.html +3 -3
- package/docs/interfaces/VfsDiffModified.html +5 -5
- package/docs/interfaces/VfsDirectoryNode.html +7 -7
- package/docs/interfaces/VfsFileNode.html +8 -8
- package/docs/interfaces/VfsOptions.html +18 -4
- package/docs/interfaces/VfsSnapshot.html +2 -2
- package/docs/interfaces/VfsSnapshotBaseNode.html +3 -3
- package/docs/interfaces/VfsSnapshotDirectoryNode.html +4 -4
- package/docs/interfaces/VfsSnapshotFileNode.html +5 -5
- package/docs/interfaces/WriteFileOptions.html +3 -3
- package/docs/modules.html +1 -1
- package/docs/types/CommandMode.html +1 -1
- package/docs/types/CommandOutcome.html +1 -1
- package/docs/types/IdleState.html +1 -0
- package/docs/types/VfsNodeStats.html +1 -1
- package/docs/types/VfsNodeType.html +1 -1
- package/docs/types/VfsPersistenceMode.html +1 -1
- package/docs/types/VfsSnapshotNode.html +1 -1
- package/package.json +5 -4
- package/scripts/generate-manuals-bundle.mjs +49 -0
- package/src/SSHMimic/index.ts +2 -0
- package/src/VirtualFileSystem/binaryPack.ts +21 -9
- package/src/VirtualFileSystem/index.ts +151 -53
- package/src/VirtualFileSystem/internalTypes.ts +20 -4
- package/src/VirtualFileSystem/path.ts +1 -1
- package/src/VirtualShell/idleManager.ts +133 -0
- package/src/VirtualShell/index.ts +48 -0
- package/src/commands/man.ts +5 -37
- package/src/commands/manuals-bundle.ts +898 -0
- package/src/index.ts +2 -0
- package/src/modules/linuxRootfs.ts +58 -14
- package/src/self-standalone.ts +13 -0
- package/src/standalone.ts +23 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/SSHMimic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AA+B/C,cAAM,QAAS,SAAQ,YAAY;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,KAAK,CAAe;IAE5B,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAElE;;;;;;;;OAQG;gBACS,EACX,IAAI,EACJ,QAA0B,EAC1B,KAAkC,EAClC,eAAmB,EACnB,iBAA0B,GAC1B,EAAE;QACF,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC3B;IAYD,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;IAcrB;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IA0LrC;;OAEG;IACI,IAAI,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/SSHMimic/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AA+B/C,cAAM,QAAS,SAAQ,YAAY;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,KAAK,CAAe;IAE5B,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqC;IAElE;;;;;;;;OAQG;gBACS,EACX,IAAI,EACJ,QAA0B,EAC1B,KAAkC,EAClC,eAAmB,EACnB,iBAA0B,GAC1B,EAAE;QACF,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,YAAY,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC3B;IAYD,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,aAAa;IAcrB;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IA0LrC;;OAEG;IACI,IAAI,IAAI,IAAI;IAYnB;;;OAGG;IACI,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CAGrC;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/SSHMimic/index.js
CHANGED
|
@@ -230,6 +230,8 @@ class SshMimic extends EventEmitter {
|
|
|
230
230
|
*/
|
|
231
231
|
stop() {
|
|
232
232
|
perf.mark("stop");
|
|
233
|
+
// Flush pending WAL journal before closing
|
|
234
|
+
void this.shell.vfs.stopAutoFlush();
|
|
233
235
|
if (this.server) {
|
|
234
236
|
this.server.close(() => {
|
|
235
237
|
devLog("SSH Mimic stopped");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/SSHMimic/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/SSHMimic/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binaryPack.d.ts","sourceRoot":"","sources":["../../src/VirtualFileSystem/binaryPack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EACX,qBAAqB,
|
|
1
|
+
{"version":3,"file":"binaryPack.d.ts","sourceRoot":"","sources":["../../src/VirtualFileSystem/binaryPack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EACX,qBAAqB,EAIrB,MAAM,iBAAiB,CAAC;AAyFzB;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,CAM7D;AA2FD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAiB5D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAErD"}
|
|
@@ -79,19 +79,30 @@ function encodeNode(enc, node) {
|
|
|
79
79
|
enc.writeUint8(TYPE_FILE);
|
|
80
80
|
enc.writeString(f.name);
|
|
81
81
|
enc.writeUint32(f.mode);
|
|
82
|
-
enc.writeFloat64(f.createdAt
|
|
83
|
-
enc.writeFloat64(f.updatedAt
|
|
82
|
+
enc.writeFloat64(f.createdAt);
|
|
83
|
+
enc.writeFloat64(f.updatedAt);
|
|
84
84
|
enc.writeUint8(f.compressed ? 0x01 : 0x00);
|
|
85
85
|
enc.writeBytes(f.content);
|
|
86
86
|
}
|
|
87
|
+
else if (node.type === "stub") {
|
|
88
|
+
// Encode stub as a regular uncompressed file node
|
|
89
|
+
const s = node;
|
|
90
|
+
enc.writeUint8(TYPE_FILE);
|
|
91
|
+
enc.writeString(s.name);
|
|
92
|
+
enc.writeUint32(s.mode);
|
|
93
|
+
enc.writeFloat64(s.createdAt);
|
|
94
|
+
enc.writeFloat64(s.updatedAt);
|
|
95
|
+
enc.writeUint8(0x00); // not compressed
|
|
96
|
+
enc.writeBytes(Buffer.from(s.stubContent, "utf8"));
|
|
97
|
+
}
|
|
87
98
|
else {
|
|
88
99
|
const d = node;
|
|
89
100
|
enc.writeUint8(TYPE_DIR);
|
|
90
101
|
enc.writeString(d.name);
|
|
91
102
|
enc.writeUint32(d.mode);
|
|
92
|
-
enc.writeFloat64(d.createdAt
|
|
93
|
-
enc.writeFloat64(d.updatedAt
|
|
94
|
-
const children =
|
|
103
|
+
enc.writeFloat64(d.createdAt);
|
|
104
|
+
enc.writeFloat64(d.updatedAt);
|
|
105
|
+
const children = Object.values(d.children);
|
|
95
106
|
enc.writeUint32(children.length);
|
|
96
107
|
for (const child of children)
|
|
97
108
|
encodeNode(enc, child);
|
|
@@ -153,8 +164,8 @@ function decodeNode(dec) {
|
|
|
153
164
|
const type = dec.readUint8();
|
|
154
165
|
const name = dec.readString();
|
|
155
166
|
const mode = dec.readUint32();
|
|
156
|
-
const createdAt =
|
|
157
|
-
const updatedAt =
|
|
167
|
+
const createdAt = dec.readFloat64();
|
|
168
|
+
const updatedAt = dec.readFloat64();
|
|
158
169
|
if (type === TYPE_FILE) {
|
|
159
170
|
const compressed = dec.readUint8() === 0x01;
|
|
160
171
|
const content = dec.readBytes();
|
|
@@ -170,10 +181,10 @@ function decodeNode(dec) {
|
|
|
170
181
|
}
|
|
171
182
|
if (type === TYPE_DIR) {
|
|
172
183
|
const count = dec.readUint32();
|
|
173
|
-
const children =
|
|
184
|
+
const children = Object.create(null);
|
|
174
185
|
for (let i = 0; i < count; i++) {
|
|
175
186
|
const child = decodeNode(dec);
|
|
176
|
-
children
|
|
187
|
+
children[child.name] = child;
|
|
177
188
|
}
|
|
178
189
|
return {
|
|
179
190
|
type: "directory",
|
|
@@ -182,6 +193,7 @@ function decodeNode(dec) {
|
|
|
182
193
|
createdAt,
|
|
183
194
|
updatedAt,
|
|
184
195
|
children,
|
|
196
|
+
_childCount: count,
|
|
185
197
|
};
|
|
186
198
|
}
|
|
187
199
|
throw new Error(`[VFS binary] Unknown node type: 0x${type.toString(16)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binaryPack.js","sourceRoot":"","sources":["../../src/VirtualFileSystem/binaryPack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;
|
|
1
|
+
{"version":3,"file":"binaryPack.js","sourceRoot":"","sources":["../../src/VirtualFileSystem/binaryPack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** biome-ignore-all lint/style/useNamingConvention: NW ? */
|
|
2
2
|
import { EventEmitter } from "node:events";
|
|
3
3
|
import type { RemoveOptions, VfsNodeStats, VfsSnapshot, WriteFileOptions } from "../types/vfs";
|
|
4
|
+
import type { InternalDirectoryNode } from "./internalTypes";
|
|
4
5
|
/**
|
|
5
6
|
* "memory" — pure in-memory, no disk I/O (default).
|
|
6
7
|
*
|
|
@@ -90,6 +91,14 @@ declare class VirtualFileSystem extends EventEmitter {
|
|
|
90
91
|
constructor(options?: VfsOptions);
|
|
91
92
|
private makeDir;
|
|
92
93
|
private makeFile;
|
|
94
|
+
private makeStub;
|
|
95
|
+
/**
|
|
96
|
+
* Write a lazy stub — stores content as a plain string with no Buffer allocation.
|
|
97
|
+
* Use for static rootfs files that may never be read. On first `writeFile()`,
|
|
98
|
+
* the stub is promoted to a real `InternalFileNode`.
|
|
99
|
+
* Parent directories are created when missing.
|
|
100
|
+
*/
|
|
101
|
+
writeStub(targetPath: string, content: string, mode?: number): void;
|
|
93
102
|
private mkdirRecursive;
|
|
94
103
|
/**
|
|
95
104
|
* In `"fs"` mode: reads the binary snapshot (`vfs-snapshot.vfsb`) from disk.
|
|
@@ -129,6 +138,22 @@ declare class VirtualFileSystem extends EventEmitter {
|
|
|
129
138
|
* ```
|
|
130
139
|
*/
|
|
131
140
|
stopAutoFlush(): Promise<void>;
|
|
141
|
+
/**
|
|
142
|
+
* Replace the entire root tree — used internally by `bootstrapLinuxRootfs`
|
|
143
|
+
* to hot-swap the static rootfs snapshot without going through importSnapshot
|
|
144
|
+
* (which would re-journal every node in fs mode).
|
|
145
|
+
* @internal
|
|
146
|
+
*/
|
|
147
|
+
importRootTree(root: InternalDirectoryNode): void;
|
|
148
|
+
/** Serialise current tree to VFSB binary. Used for the static rootfs cache. */
|
|
149
|
+
encodeBinary(): Buffer;
|
|
150
|
+
/**
|
|
151
|
+
* Release the in-memory VFS tree, freeing all InternalNode objects for GC.
|
|
152
|
+
* The tree MUST be restored via `importRootTree()` before any VFS operation.
|
|
153
|
+
* Called by IdleManager when freezing an idle shell.
|
|
154
|
+
* @internal
|
|
155
|
+
*/
|
|
156
|
+
releaseTree(): void;
|
|
132
157
|
/** Set to true during journal replay to suppress re-journaling. */
|
|
133
158
|
private _replayMode;
|
|
134
159
|
/** Append a journal entry if in fs mode and not replaying. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualFileSystem/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EACX,aAAa,EAGb,YAAY,EACZ,WAAW,EAIX,gBAAgB,EAChB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualFileSystem/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,18 +83,19 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
83
83
|
}
|
|
84
84
|
// ── Internal helpers ──────────────────────────────────────────────────────
|
|
85
85
|
makeDir(name, mode) {
|
|
86
|
-
const now =
|
|
86
|
+
const now = Date.now();
|
|
87
87
|
return {
|
|
88
88
|
type: "directory",
|
|
89
89
|
name,
|
|
90
90
|
mode,
|
|
91
91
|
createdAt: now,
|
|
92
92
|
updatedAt: now,
|
|
93
|
-
children:
|
|
93
|
+
children: Object.create(null),
|
|
94
|
+
_childCount: 0,
|
|
94
95
|
};
|
|
95
96
|
}
|
|
96
97
|
makeFile(name, content, mode, compressed) {
|
|
97
|
-
const now =
|
|
98
|
+
const now = Date.now();
|
|
98
99
|
return {
|
|
99
100
|
type: "file",
|
|
100
101
|
name,
|
|
@@ -105,6 +106,30 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
105
106
|
updatedAt: now,
|
|
106
107
|
};
|
|
107
108
|
}
|
|
109
|
+
makeStub(name, content, mode) {
|
|
110
|
+
const now = Date.now();
|
|
111
|
+
return { type: "stub", name, stubContent: content, mode, createdAt: now, updatedAt: now };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Write a lazy stub — stores content as a plain string with no Buffer allocation.
|
|
115
|
+
* Use for static rootfs files that may never be read. On first `writeFile()`,
|
|
116
|
+
* the stub is promoted to a real `InternalFileNode`.
|
|
117
|
+
* Parent directories are created when missing.
|
|
118
|
+
*/
|
|
119
|
+
writeStub(targetPath, content, mode = 0o644) {
|
|
120
|
+
const normalized = normalizePath(targetPath);
|
|
121
|
+
const { parent, name } = getParentDirectory(this.root, normalized, true, (p) => this.mkdirRecursive(p, 0o755));
|
|
122
|
+
const existing = parent.children[name];
|
|
123
|
+
if (existing?.type === "directory") {
|
|
124
|
+
throw new Error(`Cannot write stub '${normalized}': path is a directory.`);
|
|
125
|
+
}
|
|
126
|
+
// Don't overwrite a real file or an already-promoted node
|
|
127
|
+
if (existing?.type === "file")
|
|
128
|
+
return;
|
|
129
|
+
if (!existing)
|
|
130
|
+
parent._childCount++;
|
|
131
|
+
parent.children[name] = this.makeStub(name, content, mode);
|
|
132
|
+
}
|
|
108
133
|
mkdirRecursive(targetPath, mode) {
|
|
109
134
|
const normalized = normalizePath(targetPath);
|
|
110
135
|
if (normalized === "/")
|
|
@@ -114,10 +139,11 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
114
139
|
let builtPath = "";
|
|
115
140
|
for (const part of parts) {
|
|
116
141
|
builtPath += `/${part}`;
|
|
117
|
-
let child = current.children
|
|
142
|
+
let child = current.children[part];
|
|
118
143
|
if (!child) {
|
|
119
144
|
child = this.makeDir(part, mode);
|
|
120
|
-
current.children
|
|
145
|
+
current.children[part] = child;
|
|
146
|
+
current._childCount++;
|
|
121
147
|
this.emit("dir:create", { path: builtPath, mode });
|
|
122
148
|
this._journal({ op: JournalOp.MKDIR, path: builtPath, mode });
|
|
123
149
|
}
|
|
@@ -245,7 +271,36 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
245
271
|
if (this._dirty)
|
|
246
272
|
await this.flushMirror();
|
|
247
273
|
}
|
|
248
|
-
|
|
274
|
+
/**
|
|
275
|
+
* Replace the entire root tree — used internally by `bootstrapLinuxRootfs`
|
|
276
|
+
* to hot-swap the static rootfs snapshot without going through importSnapshot
|
|
277
|
+
* (which would re-journal every node in fs mode).
|
|
278
|
+
* @internal
|
|
279
|
+
*/
|
|
280
|
+
importRootTree(root) {
|
|
281
|
+
const prev = this._replayMode;
|
|
282
|
+
this._replayMode = true;
|
|
283
|
+
try {
|
|
284
|
+
this.root = root;
|
|
285
|
+
}
|
|
286
|
+
finally {
|
|
287
|
+
this._replayMode = prev;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/** Serialise current tree to VFSB binary. Used for the static rootfs cache. */
|
|
291
|
+
encodeBinary() {
|
|
292
|
+
return encodeVfs(this.root);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Release the in-memory VFS tree, freeing all InternalNode objects for GC.
|
|
296
|
+
* The tree MUST be restored via `importRootTree()` before any VFS operation.
|
|
297
|
+
* Called by IdleManager when freezing an idle shell.
|
|
298
|
+
* @internal
|
|
299
|
+
*/
|
|
300
|
+
releaseTree() {
|
|
301
|
+
// Replace root with a minimal stub — keeps the object alive but frees all children
|
|
302
|
+
this.root = this.makeDir("", 0o755);
|
|
303
|
+
}
|
|
249
304
|
/** Set to true during journal replay to suppress re-journaling. */
|
|
250
305
|
_replayMode = false;
|
|
251
306
|
/** Append a journal entry if in fs mode and not replaying. */
|
|
@@ -305,11 +360,11 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
305
360
|
this._evictDir(this.root);
|
|
306
361
|
}
|
|
307
362
|
_evictDir(dir) {
|
|
308
|
-
for (const node of dir.children
|
|
363
|
+
for (const node of Object.values(dir.children)) {
|
|
309
364
|
if (node.type === "directory") {
|
|
310
365
|
this._evictDir(node);
|
|
311
366
|
}
|
|
312
|
-
else if (!node.evicted) {
|
|
367
|
+
else if (node.type === "file" && !node.evicted) {
|
|
313
368
|
const rawSize = node.compressed
|
|
314
369
|
? (node.size ?? node.content.length * 2) // estimate uncompressed
|
|
315
370
|
: node.content.length;
|
|
@@ -319,6 +374,7 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
319
374
|
node.evicted = true;
|
|
320
375
|
}
|
|
321
376
|
}
|
|
377
|
+
// stubs: nothing to evict — content is already a plain string, not a Buffer
|
|
322
378
|
}
|
|
323
379
|
}
|
|
324
380
|
/**
|
|
@@ -339,7 +395,7 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
339
395
|
for (const part of parts) {
|
|
340
396
|
if (cur.type !== "directory")
|
|
341
397
|
return;
|
|
342
|
-
const next = cur.children
|
|
398
|
+
const next = cur.children[part];
|
|
343
399
|
if (!next)
|
|
344
400
|
return;
|
|
345
401
|
cur = next;
|
|
@@ -461,7 +517,7 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
461
517
|
}
|
|
462
518
|
const normalized = normalizePath(targetPath);
|
|
463
519
|
const { parent, name } = getParentDirectory(this.root, normalized, true, (p) => this.mkdirRecursive(p, 0o755));
|
|
464
|
-
const existing = parent.children
|
|
520
|
+
const existing = parent.children[name];
|
|
465
521
|
if (existing?.type === "directory") {
|
|
466
522
|
throw new Error(`Cannot write file '${normalized}': path is a directory.`);
|
|
467
523
|
}
|
|
@@ -471,15 +527,19 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
471
527
|
const shouldCompress = options.compress ?? false;
|
|
472
528
|
const storedContent = shouldCompress ? gzipSync(rawContent) : rawContent;
|
|
473
529
|
const mode = options.mode ?? 0o644;
|
|
474
|
-
if (existing) {
|
|
530
|
+
if (existing && existing.type === "file") {
|
|
531
|
+
// Update real file in place
|
|
475
532
|
const f = existing;
|
|
476
533
|
f.content = storedContent;
|
|
477
534
|
f.compressed = shouldCompress;
|
|
478
535
|
f.mode = mode;
|
|
479
|
-
f.updatedAt =
|
|
536
|
+
f.updatedAt = Date.now();
|
|
480
537
|
}
|
|
481
538
|
else {
|
|
482
|
-
|
|
539
|
+
// Create new real file — also promotes stubs (no _childCount change for stubs)
|
|
540
|
+
if (!existing)
|
|
541
|
+
parent._childCount++;
|
|
542
|
+
parent.children[name] = this.makeFile(name, storedContent, mode, shouldCompress);
|
|
483
543
|
}
|
|
484
544
|
this.emit("file:write", { path: normalized, size: storedContent.length });
|
|
485
545
|
this._journal({ op: JournalOp.WRITE, path: normalized, content: rawContent, mode });
|
|
@@ -497,6 +557,10 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
497
557
|
}
|
|
498
558
|
const normalized = normalizePath(targetPath);
|
|
499
559
|
const node = getNode(this.root, normalized);
|
|
560
|
+
if (node.type === "stub") {
|
|
561
|
+
this.emit("file:read", { path: normalized, size: node.stubContent.length });
|
|
562
|
+
return node.stubContent;
|
|
563
|
+
}
|
|
500
564
|
if (node.type !== "file") {
|
|
501
565
|
throw new Error(`Cannot read '${targetPath}': not a file.`);
|
|
502
566
|
}
|
|
@@ -517,6 +581,11 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
517
581
|
}
|
|
518
582
|
const normalized = normalizePath(targetPath);
|
|
519
583
|
const node = getNode(this.root, normalized);
|
|
584
|
+
if (node.type === "stub") {
|
|
585
|
+
const buf = Buffer.from(node.stubContent, "utf8");
|
|
586
|
+
this.emit("file:read", { path: normalized, size: buf.length });
|
|
587
|
+
return buf;
|
|
588
|
+
}
|
|
520
589
|
if (node.type !== "file") {
|
|
521
590
|
throw new Error(`Cannot read '${targetPath}': not a file.`);
|
|
522
591
|
}
|
|
@@ -580,6 +649,19 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
580
649
|
const normalized = normalizePath(targetPath);
|
|
581
650
|
const node = getNode(this.root, normalized);
|
|
582
651
|
const name = normalized === "/" ? "" : path.posix.basename(normalized);
|
|
652
|
+
if (node.type === "stub") {
|
|
653
|
+
const s = node;
|
|
654
|
+
return {
|
|
655
|
+
type: "file",
|
|
656
|
+
name,
|
|
657
|
+
path: normalized,
|
|
658
|
+
mode: s.mode,
|
|
659
|
+
createdAt: new Date(s.createdAt),
|
|
660
|
+
updatedAt: new Date(s.updatedAt),
|
|
661
|
+
compressed: false,
|
|
662
|
+
size: s.stubContent.length,
|
|
663
|
+
};
|
|
664
|
+
}
|
|
583
665
|
if (node.type === "file") {
|
|
584
666
|
const f = node;
|
|
585
667
|
return {
|
|
@@ -587,8 +669,8 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
587
669
|
name,
|
|
588
670
|
path: normalized,
|
|
589
671
|
mode: f.mode,
|
|
590
|
-
createdAt: f.createdAt,
|
|
591
|
-
updatedAt: f.updatedAt,
|
|
672
|
+
createdAt: new Date(f.createdAt),
|
|
673
|
+
updatedAt: new Date(f.updatedAt),
|
|
592
674
|
compressed: f.compressed,
|
|
593
675
|
size: f.evicted ? (f.size ?? 0) : f.content.length,
|
|
594
676
|
};
|
|
@@ -599,9 +681,9 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
599
681
|
name,
|
|
600
682
|
path: normalized,
|
|
601
683
|
mode: d.mode,
|
|
602
|
-
createdAt: d.createdAt,
|
|
603
|
-
updatedAt: d.updatedAt,
|
|
604
|
-
childrenCount: d.
|
|
684
|
+
createdAt: new Date(d.createdAt),
|
|
685
|
+
updatedAt: new Date(d.updatedAt),
|
|
686
|
+
childrenCount: d._childCount,
|
|
605
687
|
};
|
|
606
688
|
}
|
|
607
689
|
/** Lists direct children names of a directory (sorted). */
|
|
@@ -622,7 +704,7 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
622
704
|
if (node.type !== "directory") {
|
|
623
705
|
throw new Error(`Cannot list '${dirPath}': not a directory.`);
|
|
624
706
|
}
|
|
625
|
-
return
|
|
707
|
+
return Object.keys(node.children).sort();
|
|
626
708
|
}
|
|
627
709
|
/** Renders ASCII tree view of a directory hierarchy. */
|
|
628
710
|
tree(dirPath = "/") {
|
|
@@ -636,10 +718,10 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
636
718
|
}
|
|
637
719
|
renderTreeLines(dir, label) {
|
|
638
720
|
const lines = [label];
|
|
639
|
-
const entries =
|
|
721
|
+
const entries = Object.keys(dir.children).sort();
|
|
640
722
|
for (let i = 0; i < entries.length; i++) {
|
|
641
723
|
const name = entries[i];
|
|
642
|
-
const child = dir.children
|
|
724
|
+
const child = dir.children[name];
|
|
643
725
|
const isLast = i === entries.length - 1;
|
|
644
726
|
const connector = isLast ? "└── " : "├── ";
|
|
645
727
|
const nextPrefix = isLast ? " " : "│ ";
|
|
@@ -661,8 +743,10 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
661
743
|
computeUsage(node) {
|
|
662
744
|
if (node.type === "file")
|
|
663
745
|
return node.content.length;
|
|
746
|
+
if (node.type === "stub")
|
|
747
|
+
return node.stubContent.length;
|
|
664
748
|
let total = 0;
|
|
665
|
-
for (const child of node.children
|
|
749
|
+
for (const child of Object.values(node.children)) {
|
|
666
750
|
total += this.computeUsage(child);
|
|
667
751
|
}
|
|
668
752
|
return total;
|
|
@@ -676,7 +760,7 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
676
760
|
if (!f.compressed) {
|
|
677
761
|
f.content = gzipSync(f.content);
|
|
678
762
|
f.compressed = true;
|
|
679
|
-
f.updatedAt =
|
|
763
|
+
f.updatedAt = Date.now();
|
|
680
764
|
}
|
|
681
765
|
}
|
|
682
766
|
/** Decompresses a gzip-compressed file in place. */
|
|
@@ -688,7 +772,7 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
688
772
|
if (f.compressed) {
|
|
689
773
|
f.content = gunzipSync(f.content);
|
|
690
774
|
f.compressed = false;
|
|
691
|
-
f.updatedAt =
|
|
775
|
+
f.updatedAt = Date.now();
|
|
692
776
|
}
|
|
693
777
|
}
|
|
694
778
|
/**
|
|
@@ -707,10 +791,11 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
707
791
|
content: Buffer.from(normalizedTarget, "utf8"),
|
|
708
792
|
mode: 0o120777,
|
|
709
793
|
compressed: false,
|
|
710
|
-
createdAt:
|
|
711
|
-
updatedAt:
|
|
794
|
+
createdAt: Date.now(),
|
|
795
|
+
updatedAt: Date.now(),
|
|
712
796
|
};
|
|
713
|
-
parent.children
|
|
797
|
+
parent.children[name] = symNode;
|
|
798
|
+
parent._childCount++;
|
|
714
799
|
// Journal before emit
|
|
715
800
|
this._journal({ op: JournalOp.SYMLINK, path: normalizedLink, dest: normalizedTarget });
|
|
716
801
|
this.emit("symlink:create", {
|
|
@@ -775,12 +860,13 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
775
860
|
const node = getNode(this.root, normalized);
|
|
776
861
|
if (node.type === "directory") {
|
|
777
862
|
const dir = node;
|
|
778
|
-
if (!options.recursive && dir.
|
|
863
|
+
if (!options.recursive && dir._childCount > 0) {
|
|
779
864
|
throw new Error(`Directory '${normalized}' is not empty. Use recursive option.`);
|
|
780
865
|
}
|
|
781
866
|
}
|
|
782
867
|
const { parent, name } = getParentDirectory(this.root, normalized, false, () => { });
|
|
783
|
-
parent.children
|
|
868
|
+
delete parent.children[name];
|
|
869
|
+
parent._childCount--;
|
|
784
870
|
this.emit("node:remove", { path: normalized });
|
|
785
871
|
this._journal({ op: JournalOp.REMOVE, path: normalized });
|
|
786
872
|
}
|
|
@@ -798,9 +884,11 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
798
884
|
this.mkdirRecursive(path.posix.dirname(toNormalized), 0o755);
|
|
799
885
|
const { parent: destParent, name: destName } = getParentDirectory(this.root, toNormalized, false, () => { });
|
|
800
886
|
const { parent: srcParent, name: srcName } = getParentDirectory(this.root, fromNormalized, false, () => { });
|
|
801
|
-
srcParent.children
|
|
887
|
+
delete srcParent.children[srcName];
|
|
888
|
+
srcParent._childCount--;
|
|
802
889
|
node.name = destName;
|
|
803
|
-
destParent.children
|
|
890
|
+
destParent.children[destName] = node;
|
|
891
|
+
destParent._childCount++;
|
|
804
892
|
this._journal({ op: JournalOp.MOVE, path: fromNormalized, dest: toNormalized });
|
|
805
893
|
}
|
|
806
894
|
// ── Snapshot serialisation ─────────────────────────────────────────────────
|
|
@@ -815,17 +903,32 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
815
903
|
}
|
|
816
904
|
serializeDir(dir) {
|
|
817
905
|
const children = [];
|
|
818
|
-
for (const child of dir.children
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
906
|
+
for (const child of Object.values(dir.children)) {
|
|
907
|
+
if (child.type === "stub") {
|
|
908
|
+
// Serialize stub as a regular file node
|
|
909
|
+
children.push({
|
|
910
|
+
type: "file",
|
|
911
|
+
name: child.name,
|
|
912
|
+
mode: child.mode,
|
|
913
|
+
createdAt: new Date(child.createdAt).toISOString(),
|
|
914
|
+
updatedAt: new Date(child.updatedAt).toISOString(),
|
|
915
|
+
compressed: false,
|
|
916
|
+
contentBase64: Buffer.from(child.stubContent, "utf8").toString("base64"),
|
|
917
|
+
});
|
|
918
|
+
}
|
|
919
|
+
else if (child.type === "file") {
|
|
920
|
+
children.push(this.serializeFile(child));
|
|
921
|
+
}
|
|
922
|
+
else {
|
|
923
|
+
children.push(this.serializeDir(child));
|
|
924
|
+
}
|
|
822
925
|
}
|
|
823
926
|
return {
|
|
824
927
|
type: "directory",
|
|
825
928
|
name: dir.name,
|
|
826
929
|
mode: dir.mode,
|
|
827
|
-
createdAt: dir.createdAt.toISOString(),
|
|
828
|
-
updatedAt: dir.updatedAt.toISOString(),
|
|
930
|
+
createdAt: new Date(dir.createdAt).toISOString(),
|
|
931
|
+
updatedAt: new Date(dir.updatedAt).toISOString(),
|
|
829
932
|
children,
|
|
830
933
|
};
|
|
831
934
|
}
|
|
@@ -834,8 +937,8 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
834
937
|
type: "file",
|
|
835
938
|
name: file.name,
|
|
836
939
|
mode: file.mode,
|
|
837
|
-
createdAt: file.createdAt.toISOString(),
|
|
838
|
-
updatedAt: file.updatedAt.toISOString(),
|
|
940
|
+
createdAt: new Date(file.createdAt).toISOString(),
|
|
941
|
+
updatedAt: new Date(file.updatedAt).toISOString(),
|
|
839
942
|
compressed: file.compressed,
|
|
840
943
|
contentBase64: file.content.toString("base64"),
|
|
841
944
|
};
|
|
@@ -871,27 +974,29 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
871
974
|
type: "directory",
|
|
872
975
|
name,
|
|
873
976
|
mode: snap.mode,
|
|
874
|
-
createdAt:
|
|
875
|
-
updatedAt:
|
|
876
|
-
children:
|
|
977
|
+
createdAt: Date.parse(snap.createdAt),
|
|
978
|
+
updatedAt: Date.parse(snap.updatedAt),
|
|
979
|
+
children: Object.create(null),
|
|
980
|
+
_childCount: 0,
|
|
877
981
|
};
|
|
878
982
|
for (const child of snap.children) {
|
|
879
983
|
if (child.type === "file") {
|
|
880
984
|
const f = child;
|
|
881
|
-
dir.children
|
|
985
|
+
dir.children[f.name] = {
|
|
882
986
|
type: "file",
|
|
883
987
|
name: f.name,
|
|
884
988
|
mode: f.mode,
|
|
885
|
-
createdAt:
|
|
886
|
-
updatedAt:
|
|
989
|
+
createdAt: Date.parse(f.createdAt),
|
|
990
|
+
updatedAt: Date.parse(f.updatedAt),
|
|
887
991
|
compressed: f.compressed,
|
|
888
992
|
content: Buffer.from(f.contentBase64, "base64"),
|
|
889
|
-
}
|
|
993
|
+
};
|
|
890
994
|
}
|
|
891
995
|
else {
|
|
892
996
|
const sub = this.deserializeDir(child, child.name);
|
|
893
|
-
dir.children
|
|
997
|
+
dir.children[child.name] = sub;
|
|
894
998
|
}
|
|
999
|
+
dir._childCount++;
|
|
895
1000
|
}
|
|
896
1001
|
return dir;
|
|
897
1002
|
}
|