@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,187 @@
|
|
|
1
|
+
import { FileNotFoundError, FileExistsError, bytesToStream, streamToBytes } 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 class MemoryFS {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.root = {
|
|
11
|
+
name: '',
|
|
12
|
+
isDirectory: true,
|
|
13
|
+
isSymlink: false,
|
|
14
|
+
mode: 0o755,
|
|
15
|
+
mtime: new Date(),
|
|
16
|
+
children: new Map(),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
async *readDir(path) {
|
|
20
|
+
const node = this.resolve(normalizePath(path));
|
|
21
|
+
if (!node || !node.isDirectory) {
|
|
22
|
+
throw new FileNotFoundError(path);
|
|
23
|
+
}
|
|
24
|
+
const entries = [...node.children.entries()].sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
|
|
25
|
+
for (const [, child] of entries) {
|
|
26
|
+
yield {
|
|
27
|
+
name: child.name,
|
|
28
|
+
isDirectory: child.isDirectory,
|
|
29
|
+
isSymlink: child.isSymlink,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async stat(path) {
|
|
34
|
+
const node = this.resolve(normalizePath(path));
|
|
35
|
+
if (!node)
|
|
36
|
+
throw new FileNotFoundError(path);
|
|
37
|
+
return {
|
|
38
|
+
size: node.content?.length ?? 0,
|
|
39
|
+
mode: node.mode,
|
|
40
|
+
mtime: node.mtime,
|
|
41
|
+
isDirectory: node.isDirectory,
|
|
42
|
+
isSymlink: node.isSymlink,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async readFile(path) {
|
|
46
|
+
const node = this.resolve(normalizePath(path));
|
|
47
|
+
if (!node || node.isDirectory)
|
|
48
|
+
throw new FileNotFoundError(path);
|
|
49
|
+
return bytesToStream(new Uint8Array(node.content ?? new Uint8Array(0)));
|
|
50
|
+
}
|
|
51
|
+
async readFileBytes(path) {
|
|
52
|
+
const node = this.resolve(normalizePath(path));
|
|
53
|
+
if (!node || node.isDirectory)
|
|
54
|
+
throw new FileNotFoundError(path);
|
|
55
|
+
return new Uint8Array(node.content ?? new Uint8Array(0));
|
|
56
|
+
}
|
|
57
|
+
async writeFile(path, data) {
|
|
58
|
+
const normalized = normalizePath(path);
|
|
59
|
+
const parts = normalized.split('/');
|
|
60
|
+
const fileName = parts.pop();
|
|
61
|
+
const parentPath = parts.join('/');
|
|
62
|
+
const parent = this.resolve(parentPath);
|
|
63
|
+
if (!parent || !parent.isDirectory) {
|
|
64
|
+
throw new FileNotFoundError(parentPath);
|
|
65
|
+
}
|
|
66
|
+
const bytes = data instanceof Uint8Array ? new Uint8Array(data) : await streamToBytes(data);
|
|
67
|
+
const existing = parent.children.get(fileName);
|
|
68
|
+
if (existing && existing.isDirectory) {
|
|
69
|
+
throw new FileExistsError(path);
|
|
70
|
+
}
|
|
71
|
+
parent.children.set(fileName, {
|
|
72
|
+
name: fileName,
|
|
73
|
+
isDirectory: false,
|
|
74
|
+
isSymlink: false,
|
|
75
|
+
mode: existing?.mode ?? 0o644,
|
|
76
|
+
mtime: new Date(),
|
|
77
|
+
content: bytes,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
async mkdir(path, options) {
|
|
81
|
+
const normalized = normalizePath(path);
|
|
82
|
+
if (normalized === '')
|
|
83
|
+
return; // root always exists
|
|
84
|
+
const parts = normalized.split('/');
|
|
85
|
+
let current = this.root;
|
|
86
|
+
for (let i = 0; i < parts.length; i++) {
|
|
87
|
+
const part = parts[i];
|
|
88
|
+
const existing = current.children.get(part);
|
|
89
|
+
if (existing) {
|
|
90
|
+
if (!existing.isDirectory) {
|
|
91
|
+
throw new FileExistsError(parts.slice(0, i + 1).join('/'));
|
|
92
|
+
}
|
|
93
|
+
current = existing;
|
|
94
|
+
}
|
|
95
|
+
else if (options?.recursive || i === parts.length - 1) {
|
|
96
|
+
const newDir = {
|
|
97
|
+
name: part,
|
|
98
|
+
isDirectory: true,
|
|
99
|
+
isSymlink: false,
|
|
100
|
+
mode: 0o755,
|
|
101
|
+
mtime: new Date(),
|
|
102
|
+
children: new Map(),
|
|
103
|
+
};
|
|
104
|
+
current.children.set(part, newDir);
|
|
105
|
+
current = newDir;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
throw new FileNotFoundError(parts.slice(0, i).join('/'));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async remove(path, options) {
|
|
113
|
+
const normalized = normalizePath(path);
|
|
114
|
+
if (normalized === '')
|
|
115
|
+
throw new Error('cannot remove root');
|
|
116
|
+
const parts = normalized.split('/');
|
|
117
|
+
const name = parts.pop();
|
|
118
|
+
const parentPath = parts.join('/');
|
|
119
|
+
const parent = this.resolve(parentPath);
|
|
120
|
+
if (!parent || !parent.isDirectory)
|
|
121
|
+
throw new FileNotFoundError(path);
|
|
122
|
+
const target = parent.children.get(name);
|
|
123
|
+
if (!target)
|
|
124
|
+
throw new FileNotFoundError(path);
|
|
125
|
+
if (target.isDirectory && target.children.size > 0 && !options?.recursive) {
|
|
126
|
+
throw new Error(`directory not empty: ${path}`);
|
|
127
|
+
}
|
|
128
|
+
parent.children.delete(name);
|
|
129
|
+
}
|
|
130
|
+
async rename(oldPath, newPath) {
|
|
131
|
+
const oldNorm = normalizePath(oldPath);
|
|
132
|
+
const newNorm = normalizePath(newPath);
|
|
133
|
+
const oldParts = oldNorm.split('/');
|
|
134
|
+
const oldName = oldParts.pop();
|
|
135
|
+
const oldParent = this.resolve(oldParts.join('/'));
|
|
136
|
+
if (!oldParent?.isDirectory)
|
|
137
|
+
throw new FileNotFoundError(oldPath);
|
|
138
|
+
const node = oldParent.children.get(oldName);
|
|
139
|
+
if (!node)
|
|
140
|
+
throw new FileNotFoundError(oldPath);
|
|
141
|
+
const newParts = newNorm.split('/');
|
|
142
|
+
const newName = newParts.pop();
|
|
143
|
+
const newParent = this.resolve(newParts.join('/'));
|
|
144
|
+
if (!newParent?.isDirectory)
|
|
145
|
+
throw new FileNotFoundError(newPath);
|
|
146
|
+
oldParent.children.delete(oldName);
|
|
147
|
+
node.name = newName;
|
|
148
|
+
newParent.children.set(newName, node);
|
|
149
|
+
}
|
|
150
|
+
async setMeta(path, meta) {
|
|
151
|
+
const node = this.resolve(normalizePath(path));
|
|
152
|
+
if (!node)
|
|
153
|
+
throw new FileNotFoundError(path);
|
|
154
|
+
if (meta.mode !== undefined)
|
|
155
|
+
node.mode = meta.mode;
|
|
156
|
+
if (meta.mtime !== undefined)
|
|
157
|
+
node.mtime = meta.mtime;
|
|
158
|
+
}
|
|
159
|
+
/** Helper: write a string as a file (convenience for tests). */
|
|
160
|
+
async writeText(path, text) {
|
|
161
|
+
await this.writeFile(path, new TextEncoder().encode(text));
|
|
162
|
+
}
|
|
163
|
+
/** Helper: read a file as a string (convenience for tests). */
|
|
164
|
+
async readText(path) {
|
|
165
|
+
const bytes = await this.readFileBytes(path);
|
|
166
|
+
return new TextDecoder().decode(bytes);
|
|
167
|
+
}
|
|
168
|
+
resolve(path) {
|
|
169
|
+
if (path === '')
|
|
170
|
+
return this.root;
|
|
171
|
+
const parts = path.split('/');
|
|
172
|
+
let current = this.root;
|
|
173
|
+
for (const part of parts) {
|
|
174
|
+
if (!current.isDirectory || !current.children)
|
|
175
|
+
return null;
|
|
176
|
+
const child = current.children.get(part);
|
|
177
|
+
if (!child)
|
|
178
|
+
return null;
|
|
179
|
+
current = child;
|
|
180
|
+
}
|
|
181
|
+
return current;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
function normalizePath(path) {
|
|
185
|
+
return path.replace(/^\/+|\/+$/g, '').replace(/\/+/g, '/');
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=memory-fs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-fs.js","sourceRoot":"","sources":["../../../../../core/src/memory-fs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { C4ID } from './id.js';
|
|
2
|
+
import type { Store } from './store.js';
|
|
3
|
+
/**
|
|
4
|
+
* In-memory content-addressed store backed by a Map.
|
|
5
|
+
* Useful for tests, small operations, and browser environments
|
|
6
|
+
* where persistence isn't needed.
|
|
7
|
+
*/
|
|
8
|
+
export declare class MemoryStore implements Store {
|
|
9
|
+
private data;
|
|
10
|
+
has(id: C4ID): Promise<boolean>;
|
|
11
|
+
get(id: C4ID): Promise<ReadableStream<Uint8Array>>;
|
|
12
|
+
put(data: ReadableStream<Uint8Array> | Uint8Array): Promise<C4ID>;
|
|
13
|
+
remove(id: C4ID): Promise<void>;
|
|
14
|
+
/** Number of objects in the store. */
|
|
15
|
+
get size(): number;
|
|
16
|
+
/** Total bytes stored. */
|
|
17
|
+
get totalBytes(): number;
|
|
18
|
+
/** Clear all stored content. */
|
|
19
|
+
clear(): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=memory-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../../../../../core/src/memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAEnC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAKvC;;;;GAIG;AACH,qBAAa,WAAY,YAAW,KAAK;IACvC,OAAO,CAAC,IAAI,CAAgC;IAEtC,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/B,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAOlD,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjE,MAAM,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,sCAAsC;IACtC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,0BAA0B;IAC1B,IAAI,UAAU,IAAI,MAAM,CAIvB;IAED,gCAAgC;IAChC,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { identifyBytes } from './id.js';
|
|
2
|
+
import { ContentNotFoundError } from './store.js';
|
|
3
|
+
import { streamToBytes, bytesToStream } from './filesystem.js';
|
|
4
|
+
import { tryCanonicalizeC4m } from './identify-content.js';
|
|
5
|
+
/**
|
|
6
|
+
* In-memory content-addressed store backed by a Map.
|
|
7
|
+
* Useful for tests, small operations, and browser environments
|
|
8
|
+
* where persistence isn't needed.
|
|
9
|
+
*/
|
|
10
|
+
export class MemoryStore {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.data = new Map();
|
|
13
|
+
}
|
|
14
|
+
async has(id) {
|
|
15
|
+
return this.data.has(id.toString());
|
|
16
|
+
}
|
|
17
|
+
async get(id) {
|
|
18
|
+
const key = id.toString();
|
|
19
|
+
const bytes = this.data.get(key);
|
|
20
|
+
if (!bytes)
|
|
21
|
+
throw new ContentNotFoundError(id);
|
|
22
|
+
return bytesToStream(new Uint8Array(bytes));
|
|
23
|
+
}
|
|
24
|
+
async put(data) {
|
|
25
|
+
let bytes = data instanceof Uint8Array ? data : await streamToBytes(data);
|
|
26
|
+
// If content parses as c4m, store the canonical form
|
|
27
|
+
const canonical = await tryCanonicalizeC4m(bytes);
|
|
28
|
+
if (canonical) {
|
|
29
|
+
bytes = canonical;
|
|
30
|
+
}
|
|
31
|
+
const id = await identifyBytes(bytes);
|
|
32
|
+
const key = id.toString();
|
|
33
|
+
if (!this.data.has(key)) {
|
|
34
|
+
this.data.set(key, new Uint8Array(bytes));
|
|
35
|
+
}
|
|
36
|
+
return id;
|
|
37
|
+
}
|
|
38
|
+
async remove(id) {
|
|
39
|
+
this.data.delete(id.toString());
|
|
40
|
+
}
|
|
41
|
+
/** Number of objects in the store. */
|
|
42
|
+
get size() {
|
|
43
|
+
return this.data.size;
|
|
44
|
+
}
|
|
45
|
+
/** Total bytes stored. */
|
|
46
|
+
get totalBytes() {
|
|
47
|
+
let total = 0;
|
|
48
|
+
for (const v of this.data.values())
|
|
49
|
+
total += v.length;
|
|
50
|
+
return total;
|
|
51
|
+
}
|
|
52
|
+
/** Clear all stored content. */
|
|
53
|
+
clear() {
|
|
54
|
+
this.data.clear();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=memory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../../../../core/src/memory-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE1D;;;;GAIG;AACH,MAAM,OAAO,WAAW;IAAxB;QACU,SAAI,GAAG,IAAI,GAAG,EAAsB,CAAA;IAkD9C,CAAC;IAhDC,KAAK,CAAC,GAAG,CAAC,EAAQ;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAQ;QAChB,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAChC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAA;QAC9C,OAAO,aAAa,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IAC7C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAA6C;QACrD,IAAI,KAAK,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;QAEzE,qDAAqD;QACrD,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAA;QACjD,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,GAAG,SAAS,CAAA;QACnB,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAA;QACrC,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;QAC3C,CAAC;QACD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAQ;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;IACjC,CAAC;IAED,sCAAsC;IACtC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACvB,CAAC;IAED,0BAA0B;IAC1B,IAAI,UAAU;QACZ,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,KAAK,IAAI,CAAC,CAAC,MAAM,CAAA;QACrD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,gCAAgC;IAChC,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naturalsort.d.ts","sourceRoot":"","sources":["../../../../../core/src/naturalsort.ts"],"names":[],"mappings":"AAqEA,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAgCzD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Natural sorting for c4m manifest entries.
|
|
2
|
+
// segmentString splits a string into alternating text/numeric segments.
|
|
3
|
+
// A segment is numeric if it consists of ASCII digits 0-9 (0x30-0x39) only.
|
|
4
|
+
// Unicode digits are treated as text.
|
|
5
|
+
function segmentString(s) {
|
|
6
|
+
if (s === "") {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
const segments = [];
|
|
10
|
+
let current = "";
|
|
11
|
+
let isNumeric = false;
|
|
12
|
+
let first = true;
|
|
13
|
+
for (const ch of s) {
|
|
14
|
+
const isDigit = ch >= "0" && ch <= "9";
|
|
15
|
+
if (first) {
|
|
16
|
+
first = false;
|
|
17
|
+
isNumeric = isDigit;
|
|
18
|
+
current = ch;
|
|
19
|
+
}
|
|
20
|
+
else if (isDigit !== isNumeric) {
|
|
21
|
+
// Transition between text and numeric
|
|
22
|
+
const seg = {
|
|
23
|
+
text: current,
|
|
24
|
+
isNumeric,
|
|
25
|
+
numValue: isNumeric ? parseNumber(current) : 0,
|
|
26
|
+
};
|
|
27
|
+
segments.push(seg);
|
|
28
|
+
current = ch;
|
|
29
|
+
isNumeric = isDigit;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
current += ch;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Add final segment
|
|
36
|
+
if (current.length > 0) {
|
|
37
|
+
segments.push({
|
|
38
|
+
text: current,
|
|
39
|
+
isNumeric,
|
|
40
|
+
numValue: isNumeric ? parseNumber(current) : 0,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return segments;
|
|
44
|
+
}
|
|
45
|
+
// parseNumber converts a numeric string to a number using manual parsing.
|
|
46
|
+
function parseNumber(s) {
|
|
47
|
+
let result = 0;
|
|
48
|
+
for (const ch of s) {
|
|
49
|
+
result = result * 10 + (ch.charCodeAt(0) - 0x30);
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
// naturalLess compares two strings using natural sorting.
|
|
54
|
+
// Natural sorting handles numeric sequences intelligently:
|
|
55
|
+
// - "file2.txt" comes before "file10.txt"
|
|
56
|
+
// - "render.1.exr" comes before "render.01.exr" (equal value, shorter first)
|
|
57
|
+
export function naturalLess(a, b) {
|
|
58
|
+
const segsA = segmentString(a);
|
|
59
|
+
const segsB = segmentString(b);
|
|
60
|
+
const minLen = Math.min(segsA.length, segsB.length);
|
|
61
|
+
for (let i = 0; i < minLen; i++) {
|
|
62
|
+
const segA = segsA[i];
|
|
63
|
+
const segB = segsB[i];
|
|
64
|
+
if (segA.isNumeric && segB.isNumeric) {
|
|
65
|
+
// Both numeric: compare as integers
|
|
66
|
+
if (segA.numValue !== segB.numValue) {
|
|
67
|
+
return segA.numValue < segB.numValue;
|
|
68
|
+
}
|
|
69
|
+
// Equal values: shorter representation first
|
|
70
|
+
if (segA.text.length !== segB.text.length) {
|
|
71
|
+
return segA.text.length < segB.text.length;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (segA.isNumeric !== segB.isNumeric) {
|
|
75
|
+
// Mixed types: text sorts before numeric
|
|
76
|
+
return !segA.isNumeric;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Both text: UTF-8 codepoint comparison (standard JS string comparison)
|
|
80
|
+
if (segA.text !== segB.text) {
|
|
81
|
+
return segA.text < segB.text;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// All compared segments equal: shorter name (fewer segments) first
|
|
86
|
+
return segsA.length < segsB.length;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=naturalsort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naturalsort.js","sourceRoot":"","sources":["../../../../../core/src/naturalsort.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { C4ID } from './id.js';
|
|
2
|
+
import { Manifest } from './manifest.js';
|
|
3
|
+
import { type Entry } from './entry.js';
|
|
4
|
+
export type ManifestEventType = 'add' | 'remove' | 'modify' | 'sort' | 'batch';
|
|
5
|
+
export interface ManifestChangeEvent {
|
|
6
|
+
type: ManifestEventType;
|
|
7
|
+
path?: string;
|
|
8
|
+
entry?: Entry;
|
|
9
|
+
oldEntry?: Entry;
|
|
10
|
+
changes?: ManifestChangeEvent[];
|
|
11
|
+
}
|
|
12
|
+
export type ManifestChangeListener = (event: ManifestChangeEvent) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Observable wrapper around a Manifest. Fires events on mutations.
|
|
15
|
+
* The underlying manifest is accessible via .manifest for read operations.
|
|
16
|
+
*/
|
|
17
|
+
export declare class ObservableManifest {
|
|
18
|
+
readonly manifest: Manifest;
|
|
19
|
+
private listeners;
|
|
20
|
+
private batching;
|
|
21
|
+
private batchedChanges;
|
|
22
|
+
constructor(manifest: Manifest);
|
|
23
|
+
/** Subscribe to an event type. '*' receives all events. Returns an unsubscribe function. */
|
|
24
|
+
on(event: ManifestEventType | '*', listener: ManifestChangeListener): () => void;
|
|
25
|
+
/** Remove a listener. */
|
|
26
|
+
off(event: ManifestEventType | '*', listener: ManifestChangeListener): void;
|
|
27
|
+
/** Add an entry. Fires 'add'. */
|
|
28
|
+
addEntry(entry: Entry): void;
|
|
29
|
+
/** Remove an entry. Fires 'remove'. */
|
|
30
|
+
removeEntry(entry: Entry): void;
|
|
31
|
+
/** Update fields on an entry. Fires 'modify' with the old snapshot. */
|
|
32
|
+
updateEntry(entry: Entry, updates: Partial<Entry>): void;
|
|
33
|
+
/** Sort entries. Fires 'sort'. */
|
|
34
|
+
sortEntries(): void;
|
|
35
|
+
/** Accumulate changes during fn, then fire a single 'batch' event. */
|
|
36
|
+
batch(fn: () => void): void;
|
|
37
|
+
get entries(): readonly Entry[];
|
|
38
|
+
get(path: string): Entry | undefined;
|
|
39
|
+
has(path: string): boolean;
|
|
40
|
+
getByName(name: string): Entry | undefined;
|
|
41
|
+
entryPath(e: Entry): string;
|
|
42
|
+
children(e: Entry): Entry[];
|
|
43
|
+
parent(e: Entry): Entry | undefined;
|
|
44
|
+
root(): Entry[];
|
|
45
|
+
files(): Iterable<[string, Entry]>;
|
|
46
|
+
directories(): Iterable<[string, Entry]>;
|
|
47
|
+
filter(predicate: (path: string, entry: Entry) => boolean): Manifest;
|
|
48
|
+
duplicates(): Map<string, string[]>;
|
|
49
|
+
summary(): string;
|
|
50
|
+
hasNullValues(): boolean;
|
|
51
|
+
computeC4ID(): Promise<C4ID>;
|
|
52
|
+
private emit;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=observable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["../../../../../core/src/observable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,KAAK,KAAK,EAAS,MAAM,YAAY,CAAA;AAE9C,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAE9E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,iBAAiB,CAAA;IACvB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,QAAQ,CAAC,EAAE,KAAK,CAAA;IAChB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAA;CAChC;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAA;AAEzE;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,OAAO,CAAC,SAAS,CAA2D;IAC5E,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAuB;gBAEjC,QAAQ,EAAE,QAAQ;IAO9B,4FAA4F;IAC5F,EAAE,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,EAAE,QAAQ,EAAE,sBAAsB,GAAG,MAAM,IAAI;IAUhF,yBAAyB;IACzB,GAAG,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAO3E,iCAAiC;IACjC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAM5B,uCAAuC;IACvC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAQ/B,uEAAuE;IACvE,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;IAaxD,kCAAkC;IAClC,WAAW,IAAI,IAAI;IAKnB,sEAAsE;IACtE,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAsB3B,IAAI,OAAO,IAAI,SAAS,KAAK,EAAE,CAE9B;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAIpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAI1C,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM;IAI3B,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE;IAI3B,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS;IAInC,IAAI,IAAI,KAAK,EAAE;IAIf,KAAK,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAIlC,WAAW,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAIxC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,QAAQ;IAIpE,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAInC,OAAO,IAAI,MAAM;IAIjB,aAAa,IAAI,OAAO;IAIxB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,OAAO,CAAC,IAAI;CAgBb"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observable wrapper around a Manifest. Fires events on mutations.
|
|
3
|
+
* The underlying manifest is accessible via .manifest for read operations.
|
|
4
|
+
*/
|
|
5
|
+
export class ObservableManifest {
|
|
6
|
+
constructor(manifest) {
|
|
7
|
+
this.manifest = manifest;
|
|
8
|
+
this.listeners = new Map();
|
|
9
|
+
this.batching = false;
|
|
10
|
+
this.batchedChanges = [];
|
|
11
|
+
}
|
|
12
|
+
/** Subscribe to an event type. '*' receives all events. Returns an unsubscribe function. */
|
|
13
|
+
on(event, listener) {
|
|
14
|
+
let set = this.listeners.get(event);
|
|
15
|
+
if (!set) {
|
|
16
|
+
set = new Set();
|
|
17
|
+
this.listeners.set(event, set);
|
|
18
|
+
}
|
|
19
|
+
set.add(listener);
|
|
20
|
+
return () => this.off(event, listener);
|
|
21
|
+
}
|
|
22
|
+
/** Remove a listener. */
|
|
23
|
+
off(event, listener) {
|
|
24
|
+
const set = this.listeners.get(event);
|
|
25
|
+
if (!set)
|
|
26
|
+
return;
|
|
27
|
+
set.delete(listener);
|
|
28
|
+
if (set.size === 0)
|
|
29
|
+
this.listeners.delete(event);
|
|
30
|
+
}
|
|
31
|
+
/** Add an entry. Fires 'add'. */
|
|
32
|
+
addEntry(entry) {
|
|
33
|
+
this.manifest.addEntry(entry);
|
|
34
|
+
const path = this.manifest.entryPath(entry);
|
|
35
|
+
this.emit({ type: 'add', path, entry });
|
|
36
|
+
}
|
|
37
|
+
/** Remove an entry. Fires 'remove'. */
|
|
38
|
+
removeEntry(entry) {
|
|
39
|
+
const path = this.manifest.entryPath(entry);
|
|
40
|
+
const idx = this.manifest.entries.indexOf(entry);
|
|
41
|
+
if (idx === -1)
|
|
42
|
+
return;
|
|
43
|
+
this.manifest.removeEntry(entry);
|
|
44
|
+
this.emit({ type: 'remove', path, entry });
|
|
45
|
+
}
|
|
46
|
+
/** Update fields on an entry. Fires 'modify' with the old snapshot. */
|
|
47
|
+
updateEntry(entry, updates) {
|
|
48
|
+
const idx = this.manifest.entries.indexOf(entry);
|
|
49
|
+
if (idx === -1)
|
|
50
|
+
return;
|
|
51
|
+
const oldEntry = { ...entry };
|
|
52
|
+
const path = this.manifest.entryPath(entry);
|
|
53
|
+
Object.assign(entry, updates);
|
|
54
|
+
// Invalidate the manifest's tree index since entry data changed.
|
|
55
|
+
// The simplest way: remove and re-add at the same position.
|
|
56
|
+
this.manifest.entries.splice(idx, 1, entry);
|
|
57
|
+
this.manifest.invalidateIndex();
|
|
58
|
+
this.emit({ type: 'modify', path, entry, oldEntry });
|
|
59
|
+
}
|
|
60
|
+
/** Sort entries. Fires 'sort'. */
|
|
61
|
+
sortEntries() {
|
|
62
|
+
this.manifest.sortEntries();
|
|
63
|
+
this.emit({ type: 'sort' });
|
|
64
|
+
}
|
|
65
|
+
/** Accumulate changes during fn, then fire a single 'batch' event. */
|
|
66
|
+
batch(fn) {
|
|
67
|
+
if (this.batching) {
|
|
68
|
+
// Already inside a batch, just run; inner events still accumulate.
|
|
69
|
+
fn();
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
this.batching = true;
|
|
73
|
+
this.batchedChanges = [];
|
|
74
|
+
try {
|
|
75
|
+
fn();
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
this.batching = false;
|
|
79
|
+
const changes = this.batchedChanges;
|
|
80
|
+
this.batchedChanges = [];
|
|
81
|
+
if (changes.length > 0) {
|
|
82
|
+
this.emit({ type: 'batch', changes });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// ---- Read delegates ----
|
|
87
|
+
get entries() {
|
|
88
|
+
return this.manifest.entries;
|
|
89
|
+
}
|
|
90
|
+
get(path) {
|
|
91
|
+
return this.manifest.get(path);
|
|
92
|
+
}
|
|
93
|
+
has(path) {
|
|
94
|
+
return this.manifest.has(path);
|
|
95
|
+
}
|
|
96
|
+
getByName(name) {
|
|
97
|
+
return this.manifest.getByName(name);
|
|
98
|
+
}
|
|
99
|
+
entryPath(e) {
|
|
100
|
+
return this.manifest.entryPath(e);
|
|
101
|
+
}
|
|
102
|
+
children(e) {
|
|
103
|
+
return this.manifest.children(e);
|
|
104
|
+
}
|
|
105
|
+
parent(e) {
|
|
106
|
+
return this.manifest.parent(e);
|
|
107
|
+
}
|
|
108
|
+
root() {
|
|
109
|
+
return this.manifest.root();
|
|
110
|
+
}
|
|
111
|
+
files() {
|
|
112
|
+
return this.manifest.files();
|
|
113
|
+
}
|
|
114
|
+
directories() {
|
|
115
|
+
return this.manifest.directories();
|
|
116
|
+
}
|
|
117
|
+
filter(predicate) {
|
|
118
|
+
return this.manifest.filter(predicate);
|
|
119
|
+
}
|
|
120
|
+
duplicates() {
|
|
121
|
+
return this.manifest.duplicates();
|
|
122
|
+
}
|
|
123
|
+
summary() {
|
|
124
|
+
return this.manifest.summary();
|
|
125
|
+
}
|
|
126
|
+
hasNullValues() {
|
|
127
|
+
return this.manifest.hasNullValues();
|
|
128
|
+
}
|
|
129
|
+
computeC4ID() {
|
|
130
|
+
return this.manifest.computeC4ID();
|
|
131
|
+
}
|
|
132
|
+
// ---- Private ----
|
|
133
|
+
emit(event) {
|
|
134
|
+
if (this.batching && event.type !== 'batch') {
|
|
135
|
+
this.batchedChanges.push(event);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const typed = this.listeners.get(event.type);
|
|
139
|
+
if (typed) {
|
|
140
|
+
for (const listener of typed)
|
|
141
|
+
listener(event);
|
|
142
|
+
}
|
|
143
|
+
const wildcard = this.listeners.get('*');
|
|
144
|
+
if (wildcard) {
|
|
145
|
+
for (const listener of wildcard)
|
|
146
|
+
listener(event);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=observable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable.js","sourceRoot":"","sources":["../../../../../core/src/observable.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { FileSystem } from './filesystem.js';
|
|
2
|
+
import type { Store } from './store.js';
|
|
3
|
+
import { Manifest } from './manifest.js';
|
|
4
|
+
/** Result of a pool (bundle) operation. */
|
|
5
|
+
export interface PoolResult {
|
|
6
|
+
copied: number;
|
|
7
|
+
skipped: number;
|
|
8
|
+
missing: number;
|
|
9
|
+
manifestPath: string;
|
|
10
|
+
}
|
|
11
|
+
/** Result of an ingest (absorb) operation. */
|
|
12
|
+
export interface IngestResult {
|
|
13
|
+
copied: number;
|
|
14
|
+
skipped: number;
|
|
15
|
+
manifests: string[];
|
|
16
|
+
}
|
|
17
|
+
export interface PoolOptions {
|
|
18
|
+
progress?: (c4id: string, index: number, total: number) => void;
|
|
19
|
+
manifestName?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Bundle a manifest with its referenced content for portable transfer.
|
|
23
|
+
*
|
|
24
|
+
* Creates:
|
|
25
|
+
* outputDir/
|
|
26
|
+
* <name>.c4m — the manifest
|
|
27
|
+
* objects/ — content store (flat, keyed by C4 ID string)
|
|
28
|
+
*/
|
|
29
|
+
export declare function pool(manifest: Manifest, outputDir: string, fs: FileSystem, store: Store, options?: PoolOptions): Promise<PoolResult>;
|
|
30
|
+
/**
|
|
31
|
+
* Absorb a pool bundle into a local store.
|
|
32
|
+
* Reads objects from bundleDir/objects/ and puts them in the store.
|
|
33
|
+
* Returns paths to any .c4m files found in the bundle.
|
|
34
|
+
*/
|
|
35
|
+
export declare function ingest(bundleDir: string, fs: FileSystem, store: Store, options?: {
|
|
36
|
+
progress?: (path: string, index: number, total: number) => void;
|
|
37
|
+
}): Promise<IngestResult>;
|
|
38
|
+
//# sourceMappingURL=pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../../../core/src/pool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,2CAA2C;AAC3C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;GAOG;AACH,wBAAsB,IAAI,CACxB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,UAAU,CAAC,CAwDrB;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAC1B,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,UAAU,EACd,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAC5E,OAAO,CAAC,YAAY,CAAC,CA+CvB"}
|