@avalanche-io/c4-node 1.0.10
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/packages/core/src/base58.d.ts +5 -0
- package/dist/packages/core/src/base58.d.ts.map +1 -0
- package/dist/packages/core/src/base58.js +42 -0
- package/dist/packages/core/src/base58.js.map +1 -0
- package/dist/packages/core/src/browser/filesystem.d.ts +34 -0
- package/dist/packages/core/src/browser/filesystem.d.ts.map +1 -0
- package/dist/packages/core/src/browser/filesystem.js +169 -0
- package/dist/packages/core/src/browser/filesystem.js.map +1 -0
- package/dist/packages/core/src/browser/index.d.ts +4 -0
- package/dist/packages/core/src/browser/index.d.ts.map +1 -0
- package/dist/packages/core/src/browser/index.js +6 -0
- package/dist/packages/core/src/browser/index.js.map +1 -0
- package/dist/packages/core/src/browser/store.d.ts +28 -0
- package/dist/packages/core/src/browser/store.d.ts.map +1 -0
- package/dist/packages/core/src/browser/store.js +142 -0
- package/dist/packages/core/src/browser/store.js.map +1 -0
- package/dist/packages/core/src/browser/worker.d.ts +34 -0
- package/dist/packages/core/src/browser/worker.d.ts.map +1 -0
- package/dist/packages/core/src/browser/worker.js +96 -0
- package/dist/packages/core/src/browser/worker.js.map +1 -0
- package/dist/packages/core/src/decoder.d.ts +23 -0
- package/dist/packages/core/src/decoder.d.ts.map +1 -0
- package/dist/packages/core/src/decoder.js +431 -0
- package/dist/packages/core/src/decoder.js.map +1 -0
- package/dist/packages/core/src/diff.d.ts +48 -0
- package/dist/packages/core/src/diff.d.ts.map +1 -0
- package/dist/packages/core/src/diff.js +169 -0
- package/dist/packages/core/src/diff.js.map +1 -0
- package/dist/packages/core/src/encoder.d.ts +13 -0
- package/dist/packages/core/src/encoder.d.ts.map +1 -0
- package/dist/packages/core/src/encoder.js +125 -0
- package/dist/packages/core/src/encoder.js.map +1 -0
- package/dist/packages/core/src/entry.d.ts +59 -0
- package/dist/packages/core/src/entry.d.ts.map +1 -0
- package/dist/packages/core/src/entry.js +266 -0
- package/dist/packages/core/src/entry.js.map +1 -0
- package/dist/packages/core/src/errors.d.ts +29 -0
- package/dist/packages/core/src/errors.d.ts.map +1 -0
- package/dist/packages/core/src/errors.js +56 -0
- package/dist/packages/core/src/errors.js.map +1 -0
- package/dist/packages/core/src/filesystem.d.ts +68 -0
- package/dist/packages/core/src/filesystem.d.ts.map +1 -0
- package/dist/packages/core/src/filesystem.js +62 -0
- package/dist/packages/core/src/filesystem.js.map +1 -0
- package/dist/packages/core/src/id.d.ts +33 -0
- package/dist/packages/core/src/id.d.ts.map +1 -0
- package/dist/packages/core/src/id.js +126 -0
- package/dist/packages/core/src/id.js.map +1 -0
- package/dist/packages/core/src/identify-content.d.ts +17 -0
- package/dist/packages/core/src/identify-content.d.ts.map +1 -0
- package/dist/packages/core/src/identify-content.js +70 -0
- package/dist/packages/core/src/identify-content.js.map +1 -0
- package/dist/packages/core/src/index.d.ts +23 -0
- package/dist/packages/core/src/index.d.ts.map +1 -0
- package/dist/packages/core/src/index.js +41 -0
- package/dist/packages/core/src/index.js.map +1 -0
- package/dist/packages/core/src/manifest.d.ts +68 -0
- package/dist/packages/core/src/manifest.d.ts.map +1 -0
- package/dist/packages/core/src/manifest.js +463 -0
- package/dist/packages/core/src/manifest.js.map +1 -0
- package/dist/packages/core/src/memory-fs.d.ts +33 -0
- package/dist/packages/core/src/memory-fs.d.ts.map +1 -0
- package/dist/packages/core/src/memory-fs.js +187 -0
- package/dist/packages/core/src/memory-fs.js.map +1 -0
- package/dist/packages/core/src/memory-store.d.ts +21 -0
- package/dist/packages/core/src/memory-store.d.ts.map +1 -0
- package/dist/packages/core/src/memory-store.js +57 -0
- package/dist/packages/core/src/memory-store.js.map +1 -0
- package/dist/packages/core/src/naturalsort.d.ts +2 -0
- package/dist/packages/core/src/naturalsort.d.ts.map +1 -0
- package/dist/packages/core/src/naturalsort.js +88 -0
- package/dist/packages/core/src/naturalsort.js.map +1 -0
- package/dist/packages/core/src/observable.d.ts +54 -0
- package/dist/packages/core/src/observable.d.ts.map +1 -0
- package/dist/packages/core/src/observable.js +150 -0
- package/dist/packages/core/src/observable.js.map +1 -0
- package/dist/packages/core/src/pool.d.ts +38 -0
- package/dist/packages/core/src/pool.d.ts.map +1 -0
- package/dist/packages/core/src/pool.js +113 -0
- package/dist/packages/core/src/pool.js.map +1 -0
- package/dist/packages/core/src/reconcile.d.ts +43 -0
- package/dist/packages/core/src/reconcile.d.ts.map +1 -0
- package/dist/packages/core/src/reconcile.js +172 -0
- package/dist/packages/core/src/reconcile.js.map +1 -0
- package/dist/packages/core/src/resolver.d.ts +67 -0
- package/dist/packages/core/src/resolver.d.ts.map +1 -0
- package/dist/packages/core/src/resolver.js +110 -0
- package/dist/packages/core/src/resolver.js.map +1 -0
- package/dist/packages/core/src/safename.d.ts +7 -0
- package/dist/packages/core/src/safename.d.ts.map +1 -0
- package/dist/packages/core/src/safename.js +354 -0
- package/dist/packages/core/src/safename.js.map +1 -0
- package/dist/packages/core/src/scanner.d.ts +25 -0
- package/dist/packages/core/src/scanner.d.ts.map +1 -0
- package/dist/packages/core/src/scanner.js +97 -0
- package/dist/packages/core/src/scanner.js.map +1 -0
- package/dist/packages/core/src/store.d.ts +39 -0
- package/dist/packages/core/src/store.d.ts.map +1 -0
- package/dist/packages/core/src/store.js +53 -0
- package/dist/packages/core/src/store.js.map +1 -0
- package/dist/packages/core/src/tree.d.ts +16 -0
- package/dist/packages/core/src/tree.d.ts.map +1 -0
- package/dist/packages/core/src/tree.js +45 -0
- package/dist/packages/core/src/tree.js.map +1 -0
- package/dist/packages/core/src/verify.d.ts +29 -0
- package/dist/packages/core/src/verify.d.ts.map +1 -0
- package/dist/packages/core/src/verify.js +85 -0
- package/dist/packages/core/src/verify.js.map +1 -0
- package/dist/packages/core/src/workspace.d.ts +72 -0
- package/dist/packages/core/src/workspace.d.ts.map +1 -0
- package/dist/packages/core/src/workspace.js +135 -0
- package/dist/packages/core/src/workspace.js.map +1 -0
- package/dist/packages/node/src/index.d.ts +4 -0
- package/dist/packages/node/src/index.d.ts.map +1 -0
- package/dist/packages/node/src/index.js +6 -0
- package/dist/packages/node/src/index.js.map +1 -0
- package/dist/packages/node/src/node-fs.d.ts +24 -0
- package/dist/packages/node/src/node-fs.d.ts.map +1 -0
- package/dist/packages/node/src/node-fs.js +84 -0
- package/dist/packages/node/src/node-fs.js.map +1 -0
- package/dist/packages/node/src/tree-store.d.ts +22 -0
- package/dist/packages/node/src/tree-store.d.ts.map +1 -0
- package/dist/packages/node/src/tree-store.js +77 -0
- package/dist/packages/node/src/tree-store.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { C4ID } from './id.js';
|
|
2
|
+
import { type Entry } from './entry.js';
|
|
3
|
+
/** C4M Manifest — a self-contained description of a filesystem. */
|
|
4
|
+
export declare class Manifest {
|
|
5
|
+
version: string;
|
|
6
|
+
base: C4ID | null;
|
|
7
|
+
entries: Entry[];
|
|
8
|
+
rangeData: Map<string, string>;
|
|
9
|
+
private _index;
|
|
10
|
+
/** Create a new empty manifest. */
|
|
11
|
+
static create(): Manifest;
|
|
12
|
+
/** Parse c4m text into a Manifest. */
|
|
13
|
+
static parse(text: string): Promise<Manifest>;
|
|
14
|
+
/** Invalidate the tree index, forcing it to be rebuilt on next access. */
|
|
15
|
+
invalidateIndex(): void;
|
|
16
|
+
/** Add an entry. */
|
|
17
|
+
addEntry(e: Entry): void;
|
|
18
|
+
/** Remove an entry by reference equality. */
|
|
19
|
+
removeEntry(e: Entry): void;
|
|
20
|
+
/** Sort entries: files before directories at each level, natural sort within groups. */
|
|
21
|
+
sortEntries(): void;
|
|
22
|
+
/** Returns the canonical text form (top-level entries only, sorted). */
|
|
23
|
+
canonical(): string;
|
|
24
|
+
/** Compute the C4 ID of this manifest. */
|
|
25
|
+
computeC4ID(): Promise<C4ID>;
|
|
26
|
+
/** Propagate metadata from children to parents. */
|
|
27
|
+
canonicalize(): void;
|
|
28
|
+
/** Deep copy. */
|
|
29
|
+
copy(): Manifest;
|
|
30
|
+
/** Check if any entries have null values. */
|
|
31
|
+
hasNullValues(): boolean;
|
|
32
|
+
/** Get entry by full path (e.g. "src/main.go"). */
|
|
33
|
+
get(path: string): Entry | undefined;
|
|
34
|
+
/** Check if a path exists. */
|
|
35
|
+
has(path: string): boolean;
|
|
36
|
+
/** Get entry by bare name. */
|
|
37
|
+
getByName(name: string): Entry | undefined;
|
|
38
|
+
/** Get the full path of an entry. */
|
|
39
|
+
entryPath(e: Entry): string;
|
|
40
|
+
/** Get direct children of a directory entry. */
|
|
41
|
+
children(e: Entry): Entry[];
|
|
42
|
+
/** Get parent of an entry. */
|
|
43
|
+
parent(e: Entry): Entry | undefined;
|
|
44
|
+
/** Get root-level entries. */
|
|
45
|
+
root(): Entry[];
|
|
46
|
+
/** Iterate all file entries with their full paths. */
|
|
47
|
+
files(): Iterable<[string, Entry]>;
|
|
48
|
+
/** Iterate all directory entries with their full paths. */
|
|
49
|
+
directories(): Iterable<[string, Entry]>;
|
|
50
|
+
/** Filter entries by glob pattern or predicate. */
|
|
51
|
+
filter(predicate: (path: string, entry: Entry) => boolean): Manifest;
|
|
52
|
+
/** Find entries sharing the same C4 ID. */
|
|
53
|
+
duplicates(): Map<string, string[]>;
|
|
54
|
+
/** Summary string: "N files, M dirs, X bytes" */
|
|
55
|
+
summary(): string;
|
|
56
|
+
/** Validate the manifest for structural errors. */
|
|
57
|
+
validate(): void;
|
|
58
|
+
/** Encode to c4m text. */
|
|
59
|
+
encode(options?: {
|
|
60
|
+
pretty?: boolean;
|
|
61
|
+
indentWidth?: number;
|
|
62
|
+
}): string;
|
|
63
|
+
/** Iterable protocol — yields [path, entry] pairs. */
|
|
64
|
+
[Symbol.iterator](): Iterator<[string, Entry]>;
|
|
65
|
+
private ensureIndex;
|
|
66
|
+
private sortSiblingsHierarchically;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../../../core/src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAiB,MAAM,SAAS,CAAA;AAC7C,OAAO,EACL,KAAK,KAAK,EAMX,MAAM,YAAY,CAAA;AA+BnB,mEAAmE;AACnE,qBAAa,QAAQ;IACnB,OAAO,EAAE,MAAM,CAAQ;IACvB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAO;IACxB,OAAO,EAAE,KAAK,EAAE,CAAK;IACrB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAY;IAE1C,OAAO,CAAC,MAAM,CAAyB;IAEvC,mCAAmC;IACnC,MAAM,CAAC,MAAM,IAAI,QAAQ;IAIzB,sCAAsC;WACzB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsCnD,0EAA0E;IAC1E,eAAe,IAAI,IAAI;IAIvB,oBAAoB;IACpB,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAKxB,6CAA6C;IAC7C,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI;IAQ3B,wFAAwF;IACxF,WAAW,IAAI,IAAI;IAInB,wEAAwE;IACxE,SAAS,IAAI,MAAM;IA6BnB,0CAA0C;IACpC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAQlC,mDAAmD;IACnD,YAAY,IAAI,IAAI;IAIpB,iBAAiB;IACjB,IAAI,IAAI,QAAQ;IAShB,6CAA6C;IAC7C,aAAa,IAAI,OAAO;IAIxB,mDAAmD;IACnD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIpC,8BAA8B;IAC9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,8BAA8B;IAC9B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAI1C,qCAAqC;IACrC,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM;IAI3B,gDAAgD;IAChD,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE;IAK3B,8BAA8B;IAC9B,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS;IAInC,8BAA8B;IAC9B,IAAI,IAAI,KAAK,EAAE;IAIf,sDAAsD;IACrD,KAAK,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IASnC,2DAA2D;IAC1D,WAAW,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IASzC,mDAAmD;IACnD,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,QAAQ;IAapE,2CAA2C;IAC3C,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAuBnC,iDAAiD;IACjD,OAAO,IAAI,MAAM;IAkBjB,mDAAmD;IACnD,QAAQ,IAAI,IAAI;IAqBhB,0BAA0B;IAC1B,MAAM,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAIpE,sDAAsD;IACrD,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAS/C,OAAO,CAAC,WAAW;IAqDnB,OAAO,CAAC,0BAA0B;CA+DnC"}
|
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import { identifyBytes } from './id.js';
|
|
2
|
+
import { isDir, hasNullValues, canonicalEntry, } from './entry.js';
|
|
3
|
+
import { naturalLess } from './naturalsort.js';
|
|
4
|
+
import { InvalidEntryError, DuplicatePathError, PathTraversalError, } from './errors.js';
|
|
5
|
+
import { decode } from './decoder.js';
|
|
6
|
+
import { encode } from './encoder.js';
|
|
7
|
+
import { applyPatch } from './diff.js';
|
|
8
|
+
/** Check if a name contains path semantics (invalid for c4m entries). */
|
|
9
|
+
function isPathName(name) {
|
|
10
|
+
if (name === '')
|
|
11
|
+
return true;
|
|
12
|
+
const base = name.endsWith('/') ? name.slice(0, -1) : name;
|
|
13
|
+
if (base === '')
|
|
14
|
+
return true;
|
|
15
|
+
if (base === '.' || base === '..')
|
|
16
|
+
return true;
|
|
17
|
+
if (base.includes('/') || base.includes('\\') || base.includes('\0'))
|
|
18
|
+
return true;
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
/** C4M Manifest — a self-contained description of a filesystem. */
|
|
22
|
+
export class Manifest {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.version = '1.0';
|
|
25
|
+
this.base = null;
|
|
26
|
+
this.entries = [];
|
|
27
|
+
this.rangeData = new Map(); // C4ID string -> inline ID list
|
|
28
|
+
this._index = null;
|
|
29
|
+
}
|
|
30
|
+
/** Create a new empty manifest. */
|
|
31
|
+
static create() {
|
|
32
|
+
return new Manifest();
|
|
33
|
+
}
|
|
34
|
+
/** Parse c4m text into a Manifest. */
|
|
35
|
+
static async parse(text) {
|
|
36
|
+
const result = await decode(text);
|
|
37
|
+
// If there are patch boundaries, apply patch semantics.
|
|
38
|
+
// Boundary IDs are block links (the ID of the previous block) — recorded
|
|
39
|
+
// but not verified, making this O(1) instead of O(n).
|
|
40
|
+
if (result.patchBoundaries.length > 0) {
|
|
41
|
+
// First section is the base entries
|
|
42
|
+
let accumulated = new Manifest();
|
|
43
|
+
accumulated.version = result.version;
|
|
44
|
+
accumulated.base = result.base;
|
|
45
|
+
accumulated.entries = result.sections[0] ?? [];
|
|
46
|
+
accumulated.rangeData = result.rangeData;
|
|
47
|
+
// Apply each patch section in sequence
|
|
48
|
+
for (let i = 0; i < result.patchBoundaries.length; i++) {
|
|
49
|
+
// The next section (i+1) contains patch entries
|
|
50
|
+
const patchSection = result.sections[i + 1];
|
|
51
|
+
if (patchSection && patchSection.length > 0) {
|
|
52
|
+
const patchManifest = new Manifest();
|
|
53
|
+
patchManifest.entries = patchSection;
|
|
54
|
+
accumulated = applyPatch(accumulated, patchManifest);
|
|
55
|
+
accumulated.rangeData = result.rangeData;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return accumulated;
|
|
59
|
+
}
|
|
60
|
+
// Non-patch mode: simple assembly
|
|
61
|
+
const m = new Manifest();
|
|
62
|
+
m.version = result.version;
|
|
63
|
+
m.base = result.base;
|
|
64
|
+
m.entries = result.entries;
|
|
65
|
+
m.rangeData = result.rangeData;
|
|
66
|
+
return m;
|
|
67
|
+
}
|
|
68
|
+
/** Invalidate the tree index, forcing it to be rebuilt on next access. */
|
|
69
|
+
invalidateIndex() {
|
|
70
|
+
this._index = null;
|
|
71
|
+
}
|
|
72
|
+
/** Add an entry. */
|
|
73
|
+
addEntry(e) {
|
|
74
|
+
this.entries.push(e);
|
|
75
|
+
this._index = null;
|
|
76
|
+
}
|
|
77
|
+
/** Remove an entry by reference equality. */
|
|
78
|
+
removeEntry(e) {
|
|
79
|
+
const idx = this.entries.indexOf(e);
|
|
80
|
+
if (idx !== -1) {
|
|
81
|
+
this.entries.splice(idx, 1);
|
|
82
|
+
this._index = null;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/** Sort entries: files before directories at each level, natural sort within groups. */
|
|
86
|
+
sortEntries() {
|
|
87
|
+
this.sortSiblingsHierarchically();
|
|
88
|
+
}
|
|
89
|
+
/** Returns the canonical text form (top-level entries only, sorted). */
|
|
90
|
+
canonical() {
|
|
91
|
+
// Find minimum depth
|
|
92
|
+
let minDepth = -1;
|
|
93
|
+
for (const entry of this.entries) {
|
|
94
|
+
if (minDepth === -1 || entry.depth < minDepth) {
|
|
95
|
+
minDepth = entry.depth;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (minDepth === -1)
|
|
99
|
+
return '';
|
|
100
|
+
// Collect top-level entries
|
|
101
|
+
const topLevel = [];
|
|
102
|
+
for (const entry of this.entries) {
|
|
103
|
+
if (entry.depth === minDepth) {
|
|
104
|
+
topLevel.push(entry);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Sort
|
|
108
|
+
topLevel.sort((a, b) => {
|
|
109
|
+
const aIsDir = isDir(a);
|
|
110
|
+
const bIsDir = isDir(b);
|
|
111
|
+
if (aIsDir !== bIsDir)
|
|
112
|
+
return aIsDir ? 1 : -1;
|
|
113
|
+
return naturalLess(a.name, b.name) ? -1 : naturalLess(b.name, a.name) ? 1 : 0;
|
|
114
|
+
});
|
|
115
|
+
return topLevel.map(e => canonicalEntry(e) + '\n').join('');
|
|
116
|
+
}
|
|
117
|
+
/** Compute the C4 ID of this manifest. */
|
|
118
|
+
async computeC4ID() {
|
|
119
|
+
const copy = this.copy();
|
|
120
|
+
copy.canonicalize();
|
|
121
|
+
const text = copy.canonical();
|
|
122
|
+
const encoder = new TextEncoder();
|
|
123
|
+
return identifyBytes(encoder.encode(text));
|
|
124
|
+
}
|
|
125
|
+
/** Propagate metadata from children to parents. */
|
|
126
|
+
canonicalize() {
|
|
127
|
+
propagateMetadata(this.entries);
|
|
128
|
+
}
|
|
129
|
+
/** Deep copy. */
|
|
130
|
+
copy() {
|
|
131
|
+
const cp = new Manifest();
|
|
132
|
+
cp.version = this.version;
|
|
133
|
+
cp.base = this.base;
|
|
134
|
+
cp.entries = this.entries.map(e => ({ ...e }));
|
|
135
|
+
cp.rangeData = new Map(this.rangeData);
|
|
136
|
+
return cp;
|
|
137
|
+
}
|
|
138
|
+
/** Check if any entries have null values. */
|
|
139
|
+
hasNullValues() {
|
|
140
|
+
return this.entries.some(hasNullValues);
|
|
141
|
+
}
|
|
142
|
+
/** Get entry by full path (e.g. "src/main.go"). */
|
|
143
|
+
get(path) {
|
|
144
|
+
return this.ensureIndex().byPath.get(path);
|
|
145
|
+
}
|
|
146
|
+
/** Check if a path exists. */
|
|
147
|
+
has(path) {
|
|
148
|
+
return this.ensureIndex().byPath.has(path);
|
|
149
|
+
}
|
|
150
|
+
/** Get entry by bare name. */
|
|
151
|
+
getByName(name) {
|
|
152
|
+
return this.ensureIndex().byName.get(name);
|
|
153
|
+
}
|
|
154
|
+
/** Get the full path of an entry. */
|
|
155
|
+
entryPath(e) {
|
|
156
|
+
return this.ensureIndex().pathOf.get(e) ?? '';
|
|
157
|
+
}
|
|
158
|
+
/** Get direct children of a directory entry. */
|
|
159
|
+
children(e) {
|
|
160
|
+
if (!isDir(e))
|
|
161
|
+
return [];
|
|
162
|
+
return this.ensureIndex().children.get(e) ?? [];
|
|
163
|
+
}
|
|
164
|
+
/** Get parent of an entry. */
|
|
165
|
+
parent(e) {
|
|
166
|
+
return this.ensureIndex().parent.get(e);
|
|
167
|
+
}
|
|
168
|
+
/** Get root-level entries. */
|
|
169
|
+
root() {
|
|
170
|
+
return this.ensureIndex().root;
|
|
171
|
+
}
|
|
172
|
+
/** Iterate all file entries with their full paths. */
|
|
173
|
+
*files() {
|
|
174
|
+
const idx = this.ensureIndex();
|
|
175
|
+
for (const entry of this.entries) {
|
|
176
|
+
if (!isDir(entry)) {
|
|
177
|
+
yield [idx.pathOf.get(entry) ?? entry.name, entry];
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/** Iterate all directory entries with their full paths. */
|
|
182
|
+
*directories() {
|
|
183
|
+
const idx = this.ensureIndex();
|
|
184
|
+
for (const entry of this.entries) {
|
|
185
|
+
if (isDir(entry)) {
|
|
186
|
+
yield [idx.pathOf.get(entry) ?? entry.name, entry];
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/** Filter entries by glob pattern or predicate. */
|
|
191
|
+
filter(predicate) {
|
|
192
|
+
const idx = this.ensureIndex();
|
|
193
|
+
const filtered = new Manifest();
|
|
194
|
+
filtered.version = this.version;
|
|
195
|
+
for (const entry of this.entries) {
|
|
196
|
+
const path = idx.pathOf.get(entry) ?? entry.name;
|
|
197
|
+
if (predicate(path, entry)) {
|
|
198
|
+
filtered.entries.push({ ...entry });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return filtered;
|
|
202
|
+
}
|
|
203
|
+
/** Find entries sharing the same C4 ID. */
|
|
204
|
+
duplicates() {
|
|
205
|
+
const idx = this.ensureIndex();
|
|
206
|
+
const idMap = new Map();
|
|
207
|
+
for (const entry of this.entries) {
|
|
208
|
+
if (entry.c4id && !entry.c4id.isNil() && !isDir(entry)) {
|
|
209
|
+
const key = entry.c4id.toString();
|
|
210
|
+
const path = idx.pathOf.get(entry) ?? entry.name;
|
|
211
|
+
const existing = idMap.get(key);
|
|
212
|
+
if (existing) {
|
|
213
|
+
existing.push(path);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
idMap.set(key, [path]);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Only return entries with duplicates
|
|
221
|
+
const result = new Map();
|
|
222
|
+
for (const [key, paths] of idMap) {
|
|
223
|
+
if (paths.length > 1)
|
|
224
|
+
result.set(key, paths);
|
|
225
|
+
}
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
/** Summary string: "N files, M dirs, X bytes" */
|
|
229
|
+
summary() {
|
|
230
|
+
let fileCount = 0;
|
|
231
|
+
let dirCount = 0;
|
|
232
|
+
let totalSize = 0;
|
|
233
|
+
let hasNull = false;
|
|
234
|
+
for (const entry of this.entries) {
|
|
235
|
+
if (isDir(entry)) {
|
|
236
|
+
dirCount++;
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
fileCount++;
|
|
240
|
+
if (entry.size >= 0)
|
|
241
|
+
totalSize += entry.size;
|
|
242
|
+
else
|
|
243
|
+
hasNull = true;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
const sizeStr = hasNull ? 'unknown' : formatBytes(totalSize);
|
|
247
|
+
return `${fileCount} files, ${dirCount} dirs, ${sizeStr}`;
|
|
248
|
+
}
|
|
249
|
+
/** Validate the manifest for structural errors. */
|
|
250
|
+
validate() {
|
|
251
|
+
const seen = new Set();
|
|
252
|
+
const dirStack = [];
|
|
253
|
+
for (const e of this.entries) {
|
|
254
|
+
if (e.name === '')
|
|
255
|
+
throw new InvalidEntryError('empty name');
|
|
256
|
+
if (isPathName(e.name))
|
|
257
|
+
throw new PathTraversalError(e.name);
|
|
258
|
+
while (dirStack.length > e.depth)
|
|
259
|
+
dirStack.pop();
|
|
260
|
+
const fullPath = dirStack.join('') + e.name;
|
|
261
|
+
if (seen.has(fullPath))
|
|
262
|
+
throw new DuplicatePathError(fullPath);
|
|
263
|
+
seen.add(fullPath);
|
|
264
|
+
if (isDir(e)) {
|
|
265
|
+
while (dirStack.length <= e.depth)
|
|
266
|
+
dirStack.push('');
|
|
267
|
+
dirStack[e.depth] = e.name;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
/** Encode to c4m text. */
|
|
272
|
+
encode(options) {
|
|
273
|
+
return encode(this, options);
|
|
274
|
+
}
|
|
275
|
+
/** Iterable protocol — yields [path, entry] pairs. */
|
|
276
|
+
*[Symbol.iterator]() {
|
|
277
|
+
const idx = this.ensureIndex();
|
|
278
|
+
for (const entry of this.entries) {
|
|
279
|
+
yield [idx.pathOf.get(entry) ?? entry.name, entry];
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// ---- Private ----
|
|
283
|
+
ensureIndex() {
|
|
284
|
+
if (this._index)
|
|
285
|
+
return this._index;
|
|
286
|
+
const idx = {
|
|
287
|
+
byPath: new Map(),
|
|
288
|
+
byName: new Map(),
|
|
289
|
+
pathOf: new Map(),
|
|
290
|
+
children: new Map(),
|
|
291
|
+
parent: new Map(),
|
|
292
|
+
root: [],
|
|
293
|
+
};
|
|
294
|
+
// First pass
|
|
295
|
+
for (const e of this.entries) {
|
|
296
|
+
idx.byName.set(e.name, e);
|
|
297
|
+
if (e.depth === 0)
|
|
298
|
+
idx.root.push(e);
|
|
299
|
+
}
|
|
300
|
+
// Second pass: parent-child
|
|
301
|
+
for (let i = 0; i < this.entries.length; i++) {
|
|
302
|
+
const e = this.entries[i];
|
|
303
|
+
if (e.depth === 0)
|
|
304
|
+
continue;
|
|
305
|
+
for (let j = i - 1; j >= 0; j--) {
|
|
306
|
+
const candidate = this.entries[j];
|
|
307
|
+
if (candidate.depth === e.depth - 1 && isDir(candidate)) {
|
|
308
|
+
idx.parent.set(e, candidate);
|
|
309
|
+
const kids = idx.children.get(candidate) ?? [];
|
|
310
|
+
kids.push(e);
|
|
311
|
+
idx.children.set(candidate, kids);
|
|
312
|
+
break;
|
|
313
|
+
}
|
|
314
|
+
if (candidate.depth < e.depth - 1)
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Third pass: full paths
|
|
319
|
+
for (const e of this.entries) {
|
|
320
|
+
const parts = [];
|
|
321
|
+
let current = e;
|
|
322
|
+
while (current) {
|
|
323
|
+
parts.push(current.name);
|
|
324
|
+
current = idx.parent.get(current);
|
|
325
|
+
}
|
|
326
|
+
parts.reverse();
|
|
327
|
+
const fullPath = parts.join('');
|
|
328
|
+
idx.byPath.set(fullPath, e);
|
|
329
|
+
idx.pathOf.set(e, fullPath);
|
|
330
|
+
}
|
|
331
|
+
this._index = idx;
|
|
332
|
+
return idx;
|
|
333
|
+
}
|
|
334
|
+
sortSiblingsHierarchically() {
|
|
335
|
+
if (this.entries.length === 0)
|
|
336
|
+
return;
|
|
337
|
+
const result = [];
|
|
338
|
+
const used = new Array(this.entries.length).fill(false);
|
|
339
|
+
const processLevel = (parentIdx, parentDepth) => {
|
|
340
|
+
const childDepth = parentIdx === -1 ? 0 : parentDepth + 1;
|
|
341
|
+
const startIdx = parentIdx === -1 ? 0 : parentIdx + 1;
|
|
342
|
+
const children = [];
|
|
343
|
+
for (let i = startIdx; i < this.entries.length; i++) {
|
|
344
|
+
if (used[i])
|
|
345
|
+
continue;
|
|
346
|
+
const entry = this.entries[i];
|
|
347
|
+
if (entry.depth < childDepth)
|
|
348
|
+
break;
|
|
349
|
+
if (entry.depth > childDepth)
|
|
350
|
+
continue;
|
|
351
|
+
children.push({ entry, index: i });
|
|
352
|
+
}
|
|
353
|
+
// Deduplicate by name
|
|
354
|
+
const seen = new Map();
|
|
355
|
+
const deduped = [];
|
|
356
|
+
for (const c of children) {
|
|
357
|
+
const existing = seen.get(c.entry.name);
|
|
358
|
+
if (existing !== undefined) {
|
|
359
|
+
used[deduped[existing].index] = true;
|
|
360
|
+
deduped[existing] = c;
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
seen.set(c.entry.name, deduped.length);
|
|
364
|
+
deduped.push(c);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
// Sort: files before dirs, then natural sort
|
|
368
|
+
deduped.sort((a, b) => {
|
|
369
|
+
const aIsDir = isDir(a.entry);
|
|
370
|
+
const bIsDir = isDir(b.entry);
|
|
371
|
+
if (aIsDir !== bIsDir)
|
|
372
|
+
return aIsDir ? 1 : -1;
|
|
373
|
+
return naturalLess(a.entry.name, b.entry.name) ? -1
|
|
374
|
+
: naturalLess(b.entry.name, a.entry.name) ? 1 : 0;
|
|
375
|
+
});
|
|
376
|
+
for (const c of deduped) {
|
|
377
|
+
used[c.index] = true;
|
|
378
|
+
result.push(c.entry);
|
|
379
|
+
if (isDir(c.entry)) {
|
|
380
|
+
processLevel(c.index, c.entry.depth);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
};
|
|
384
|
+
processLevel(-1, -1);
|
|
385
|
+
// Orphaned entries
|
|
386
|
+
for (let i = 0; i < this.entries.length; i++) {
|
|
387
|
+
if (!used[i])
|
|
388
|
+
result.push(this.entries[i]);
|
|
389
|
+
}
|
|
390
|
+
this.entries = result;
|
|
391
|
+
this._index = null;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
// ---- Metadata Propagation ----
|
|
395
|
+
function propagateMetadata(entries) {
|
|
396
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
397
|
+
const entry = entries[i];
|
|
398
|
+
if (isDir(entry) && hasNullValues(entry)) {
|
|
399
|
+
const children = getDirectoryChildren(entries, entry);
|
|
400
|
+
if (entry.size < 0) {
|
|
401
|
+
entry.size = calculateDirectorySize(children);
|
|
402
|
+
}
|
|
403
|
+
if (entry.timestamp.getTime() === 0) {
|
|
404
|
+
entry.timestamp = getMostRecentModtime(children);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
function getDirectoryChildren(entries, dir) {
|
|
410
|
+
const children = [];
|
|
411
|
+
let collecting = false;
|
|
412
|
+
for (const e of entries) {
|
|
413
|
+
if (e === dir) {
|
|
414
|
+
collecting = true;
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
if (collecting) {
|
|
418
|
+
if (e.depth === dir.depth + 1)
|
|
419
|
+
children.push(e);
|
|
420
|
+
else if (e.depth <= dir.depth)
|
|
421
|
+
break;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
return children;
|
|
425
|
+
}
|
|
426
|
+
function calculateDirectorySize(entries) {
|
|
427
|
+
let total = 0;
|
|
428
|
+
for (const e of entries) {
|
|
429
|
+
if (e.size < 0)
|
|
430
|
+
return -1;
|
|
431
|
+
total += e.size;
|
|
432
|
+
}
|
|
433
|
+
total += c4mContentSize(entries);
|
|
434
|
+
return total;
|
|
435
|
+
}
|
|
436
|
+
/** Byte length of the canonical c4m text for one directory level. */
|
|
437
|
+
function c4mContentSize(entries) {
|
|
438
|
+
const encoder = new TextEncoder();
|
|
439
|
+
let n = 0;
|
|
440
|
+
for (const e of entries) {
|
|
441
|
+
n += encoder.encode(canonicalEntry(e)).byteLength + 1; // +1 for '\n'
|
|
442
|
+
}
|
|
443
|
+
return n;
|
|
444
|
+
}
|
|
445
|
+
function getMostRecentModtime(entries) {
|
|
446
|
+
let mostRecent = new Date(0);
|
|
447
|
+
for (const e of entries) {
|
|
448
|
+
if (e.timestamp.getTime() === 0)
|
|
449
|
+
return new Date(0);
|
|
450
|
+
if (e.timestamp > mostRecent)
|
|
451
|
+
mostRecent = e.timestamp;
|
|
452
|
+
}
|
|
453
|
+
return mostRecent.getTime() === 0 ? new Date(0) : mostRecent;
|
|
454
|
+
}
|
|
455
|
+
function formatBytes(bytes) {
|
|
456
|
+
if (bytes === 0)
|
|
457
|
+
return '0 B';
|
|
458
|
+
const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
|
|
459
|
+
const i = Math.floor(Math.log(bytes) / Math.log(1024));
|
|
460
|
+
const val = bytes / Math.pow(1024, i);
|
|
461
|
+
return `${val.toFixed(i === 0 ? 0 : 1)} ${units[i]}`;
|
|
462
|
+
}
|
|
463
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../../../core/src/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { FileSystem, DirEntry, FileStat } from './filesystem.js';
|
|
2
|
+
/**
|
|
3
|
+
* In-memory filesystem tree implementing the FileSystem interface.
|
|
4
|
+
* Useful for tests and operations that don't need real I/O.
|
|
5
|
+
*
|
|
6
|
+
* Paths use forward slashes. Leading/trailing slashes are normalized.
|
|
7
|
+
*/
|
|
8
|
+
export declare class MemoryFS implements FileSystem {
|
|
9
|
+
private root;
|
|
10
|
+
constructor();
|
|
11
|
+
readDir(path: string): AsyncIterable<DirEntry>;
|
|
12
|
+
stat(path: string): Promise<FileStat>;
|
|
13
|
+
readFile(path: string): Promise<ReadableStream<Uint8Array>>;
|
|
14
|
+
readFileBytes(path: string): Promise<Uint8Array>;
|
|
15
|
+
writeFile(path: string, data: ReadableStream<Uint8Array> | Uint8Array): Promise<void>;
|
|
16
|
+
mkdir(path: string, options?: {
|
|
17
|
+
recursive?: boolean;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
remove(path: string, options?: {
|
|
20
|
+
recursive?: boolean;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
rename(oldPath: string, newPath: string): Promise<void>;
|
|
23
|
+
setMeta(path: string, meta: {
|
|
24
|
+
mode?: number;
|
|
25
|
+
mtime?: Date;
|
|
26
|
+
}): Promise<void>;
|
|
27
|
+
/** Helper: write a string as a file (convenience for tests). */
|
|
28
|
+
writeText(path: string, text: string): Promise<void>;
|
|
29
|
+
/** Helper: read a file as a string (convenience for tests). */
|
|
30
|
+
readText(path: string): Promise<string>;
|
|
31
|
+
private resolve;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=memory-fs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-fs.d.ts","sourceRoot":"","sources":["../../../../../core/src/memory-fs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAcrE;;;;;GAKG;AACH,qBAAa,QAAS,YAAW,UAAU;IACzC,OAAO,CAAC,IAAI,CAAQ;;IAab,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;IAe/C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAYrC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAM3D,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMhD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BrF,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBtE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBvD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjF,gEAAgE;IAC1D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,+DAA+D;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7C,OAAO,CAAC,OAAO;CAYhB"}
|