@dimina-kit/fs-core 0.2.0-dev.20260711062001 → 0.3.0-dev.6-dev.20260711133419
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 +205 -18
- package/dist/client.js +23 -11
- package/dist/disk-mirror.js +2 -2
- package/dist/fs-core.worker.js +101 -21
- package/dist/sync/binary-sidecar.js +147 -0
- package/dist/sync/sync-engine.js +119 -169
- package/dist/sync/watch-expander.js +202 -0
- package/dist/worker-files.cjs +32 -0
- package/dist/worker-files.js +35 -0
- package/dist/worker-lib/.tsbuildinfo +1 -0
- package/dist/worker-lib/engine-shared.d.ts +79 -0
- package/dist/worker-lib/engine-shared.d.ts.map +1 -0
- package/dist/worker-lib/engine-shared.js +6 -3
- package/dist/worker-lib/paths.d.ts +4 -0
- package/dist/worker-lib/paths.d.ts.map +1 -0
- package/dist/worker-lib/protocol.d.ts +119 -0
- package/dist/worker-lib/protocol.d.ts.map +1 -0
- package/dist/worker-lib/protocol.js +73 -0
- package/dist/worker-lib/rpc-types.d.ts +68 -0
- package/dist/worker-lib/rpc-types.d.ts.map +1 -0
- package/dist/worker-lib/wal-codec.d.ts +58 -0
- package/dist/worker-lib/wal-codec.d.ts.map +1 -0
- package/dist/worker-lib/wal-codec.js +8 -5
- package/dist/zip.js +1 -1
- package/package.json +25 -2
- package/src/__checks__/types-smoke.ts +61 -0
- package/src/agent-tools.ts +3 -3
- package/src/client-retry.test.ts +76 -0
- package/src/client.ts +112 -45
- package/src/disk-mirror.ts +2 -2
- package/src/fs-core-handover.test.ts +215 -0
- package/src/fs-core-opid-replay.test.ts +158 -0
- package/src/fs-core-recovery-lock.test.ts +225 -0
- package/src/fs-core-recovery.ts +115 -13
- package/src/fs-core-write-ops.ts +14 -11
- package/src/fs-core.worker.ts +26 -11
- package/src/worker-files.test.ts +39 -0
- package/src/worker-files.ts +43 -0
- package/src/worker-lib/engine-shared.ts +19 -5
- package/src/worker-lib/protocol.test.ts +37 -0
- package/src/worker-lib/protocol.ts +184 -0
- package/src/worker-lib/wal-codec.ts +8 -5
- package/src/zip.ts +1 -1
- package/sync/binary-sidecar.test.ts +150 -0
- package/sync/binary-sidecar.ts +187 -0
- package/sync/sync-engine-degraded.test.ts +309 -0
- package/sync/sync-engine.test.ts +20 -91
- package/sync/sync-engine.ts +134 -181
- package/sync/truth-port.ts +3 -3
- package/sync/watch-expander.test.ts +96 -0
- package/sync/watch-expander.ts +236 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch-batch expansion — an OPTIONAL port-side helper for assembling a
|
|
3
|
+
* `TruthPort.changes` adapter (see truth-port.ts: turning a watcher's
|
|
4
|
+
* coalesced/lossy events into the actual set of paths worth re-examining is
|
|
5
|
+
* the PORT's responsibility; sync-engine.ts's `handleBatch` trusts the
|
|
6
|
+
* expanded batch as-is and does no expansion of its own). It turns raw
|
|
7
|
+
* `fs.watch`-style paths (which may be coalesced ancestor-DIRECTORY events,
|
|
8
|
+
* an overflow `'.'` full-tree rescan, or the name of a file that no longer
|
|
9
|
+
* exists) into the set of paths the sync engine should actually re-examine.
|
|
10
|
+
* The only dependency is a stat-capable `readdir` (one listing call, no
|
|
11
|
+
* content bytes) — see {@link WatchExpanderReaddir}.
|
|
12
|
+
*
|
|
13
|
+
* Why events are only a HINT, not the truth: FSEvents-style recursive
|
|
14
|
+
* watchers COALESCE a write burst into ancestor-DIRECTORY events (and an
|
|
15
|
+
* overflow surfaces as a null filename, reported as `'.'`) — observed: a
|
|
16
|
+
* 200-file external burst delivered only 132 per-file events, the rest
|
|
17
|
+
* arriving as their parent directory. So a watched path is not necessarily a
|
|
18
|
+
* file, and "nothing was reported for path X" does not mean X is unchanged.
|
|
19
|
+
*
|
|
20
|
+
* How stat-level truth-checking works (the git-index/rsync pattern): for
|
|
21
|
+
* every watch path, this module lists the TRUTH SOURCE's current
|
|
22
|
+
* (size, mtimeMs) for every file in that path's scope (itself + its parent
|
|
23
|
+
* directory — the same scope FSEvents coalescing collapses onto) and diffs it
|
|
24
|
+
* against a session-scoped index of what it last saw for each file:
|
|
25
|
+
* - a ledger path inside the scanned scope that is now missing from the
|
|
26
|
+
* disk listing is reported as a deletion (this is what recovers a
|
|
27
|
+
* coalesced `rm -rf`, which a real watcher may name only a few of the
|
|
28
|
+
* removed children for, or none) — unconditional, since a deletion has
|
|
29
|
+
* no "stat" to compare;
|
|
30
|
+
* - a disk file whose stat is NEW or DIFFERENT from the index is reported,
|
|
31
|
+
* and the index is updated to match;
|
|
32
|
+
* - a disk file whose stat is UNCHANGED is a stat-confirmed survivor and is
|
|
33
|
+
* never reported. This is the whole point: an N-file directory with one
|
|
34
|
+
* real change no longer costs the engine N content reads (readdir stats
|
|
35
|
+
* are cheap — one listing round trip per directory level, no bytes —
|
|
36
|
+
* while the engine's `handleInboundPath` does a full `port.read` per
|
|
37
|
+
* reported path);
|
|
38
|
+
* - the event path `p` ITSELF is additionally, unconditionally reported
|
|
39
|
+
* UNLESS it is currently a confirmed live, listable directory with no
|
|
40
|
+
* ledger record sitting at that exact path. Content can change without a
|
|
41
|
+
* stat move (same-size in-place edit inside one filesystem timestamp
|
|
42
|
+
* tick — the classic "racy git" case), and this module never reads file
|
|
43
|
+
* CONTENT to judge that — only the engine's own read+compare can, which
|
|
44
|
+
* is why a plain file / deleted path / transient probe failure always
|
|
45
|
+
* gets reported. A CONFIRMED live directory has no content of its own to
|
|
46
|
+
* mis-judge that way, so reporting it would normally just cost a wasted
|
|
47
|
+
* `port.read` (404 → EISDIR) — EXCEPT when the ledger still holds a
|
|
48
|
+
* record AT THAT EXACT PATH (a stale FILE record from before the path
|
|
49
|
+
* was replaced by a directory — see "Same-named file→directory
|
|
50
|
+
* replacement" below): that record needs the same EISDIR→404 retirement
|
|
51
|
+
* path, and for a ROOT-LEVEL replaced path (no parent directory of its
|
|
52
|
+
* own) the ledger-deletion sweep below cannot reach it by prefix at all,
|
|
53
|
+
* so this is the only path that retires it.
|
|
54
|
+
* Over-reporting is always safe (the engine content-compares every reported
|
|
55
|
+
* path, so a false positive is a no-op); under-reporting is what loses data,
|
|
56
|
+
* which is why the ledger-deletion sweep and the point-named path (per the
|
|
57
|
+
* exception above) are unconditional rather than stat-gated.
|
|
58
|
+
*
|
|
59
|
+
* Same-named file→directory replacement: EVERY scope gets the readdir probe,
|
|
60
|
+
* even when the path is a ledger-known FILE — a file can have been replaced
|
|
61
|
+
* by a same-named directory, and skipping the probe for "known files" would
|
|
62
|
+
* silently drop that directory's whole subtree (the watcher only names the
|
|
63
|
+
* parent). The stale ledger FILE record retires via whichever of two paths
|
|
64
|
+
* applies: the point-named-path exception above (when the watcher names the
|
|
65
|
+
* replaced path directly — the only option when it has no parent directory
|
|
66
|
+
* of its own to register a scope prefix), or the ledger-deletion sweep's
|
|
67
|
+
* PARENT-scope prefix (when the watcher instead names a sibling or the
|
|
68
|
+
* parent directory — the record no longer matches the replaced path's own
|
|
69
|
+
* now-a-directory prefix, only the parent's). Either way the engine's
|
|
70
|
+
* `port.read` gets EISDIR (mapped to a not-found by e.g. the devtools
|
|
71
|
+
* bridge), which its not-found discipline treats as a deletion.
|
|
72
|
+
*
|
|
73
|
+
* Index lifecycle: `resetIndex()` clears the session-scoped stat index —
|
|
74
|
+
* call it whenever the ledger itself is reseeded (e.g. dimina-kit
|
|
75
|
+
* wal-audit.ts's `initLedger`), so a stale index can never survive a project
|
|
76
|
+
* switch or ledger rebuild. `warmFromDisk()` then seeds it directly from the
|
|
77
|
+
* CURRENT disk tree right after the reseed (called once the ledger walk
|
|
78
|
+
* itself has completed) — without this, the first watch batch after every
|
|
79
|
+
* project open would see an all-cold index and re-report every file it
|
|
80
|
+
* touches, defeating the point of stat-diffing for exactly the common case
|
|
81
|
+
* (a directory-level event shortly after open). A path this module has never
|
|
82
|
+
* seen at all (warm-up included) is always reported on its first sighting —
|
|
83
|
+
* nothing is missed by a partial/failed warm-up, it just costs that one
|
|
84
|
+
* file's content read instead of being skipped.
|
|
85
|
+
*/
|
|
86
|
+
/** A stat-less disk entry (a readdir/stat race on the truth-source side)
|
|
87
|
+
* never matches a cached stat: `NaN !== NaN` unconditionally, so a racy
|
|
88
|
+
* entry is always reported rather than risking a false "unchanged" skip. */
|
|
89
|
+
function toDiskStat(size, mtimeMs) {
|
|
90
|
+
return { size: size ?? Number.NaN, mtimeMs: mtimeMs ?? Number.NaN };
|
|
91
|
+
}
|
|
92
|
+
/** `rel`'s scope prefixes for the ledger-deletion sweep: itself-as-a-directory
|
|
93
|
+
* and its parent directory — the same two listings {@link createWatchExpander}'s
|
|
94
|
+
* `listDiskStats` probes. `''` (the whole-ledger prefix) only ever arises from
|
|
95
|
+
* the `'.'` overflow rescan, handled by the caller before this is reached. */
|
|
96
|
+
function scopePrefixes(rel) {
|
|
97
|
+
const slash = rel.lastIndexOf('/');
|
|
98
|
+
const parentRel = slash >= 0 ? rel.slice(0, slash) : '';
|
|
99
|
+
const prefixes = new Set([rel ? `${rel}/` : '']);
|
|
100
|
+
if (slash >= 0)
|
|
101
|
+
prefixes.add(parentRel ? `${parentRel}/` : '');
|
|
102
|
+
return { prefixes, parentRel, slash };
|
|
103
|
+
}
|
|
104
|
+
/** `true` when `q` falls under one of `prefixes` (`''` matches everything —
|
|
105
|
+
* the `'.'` overflow case). */
|
|
106
|
+
function inScope(q, prefixes) {
|
|
107
|
+
for (const prefix of prefixes) {
|
|
108
|
+
if (prefix === '' || q.startsWith(prefix))
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
export function createWatchExpander(readdir) {
|
|
114
|
+
/** Session-scoped: `rel -> last stat this module reported for it`. Cleared
|
|
115
|
+
* by `resetIndex()`, seeded by `warmFromDisk()`; see this module's doc
|
|
116
|
+
* "Index lifecycle". */
|
|
117
|
+
let statIndex = new Map();
|
|
118
|
+
/** List every FILE's current (size, mtimeMs) under `startRel`, recursively
|
|
119
|
+
* — NO content reads (a content walk would turn each expansion pass back
|
|
120
|
+
* into a content-read storm). */
|
|
121
|
+
async function listDiskStats(startRel, out) {
|
|
122
|
+
async function walk(rel) {
|
|
123
|
+
const entries = await readdir(rel || '.');
|
|
124
|
+
for (const [name, type, size, mtimeMs] of entries) {
|
|
125
|
+
const childRel = rel ? `${rel}/${name}` : name;
|
|
126
|
+
if (type === 2)
|
|
127
|
+
await walk(childRel);
|
|
128
|
+
else
|
|
129
|
+
out.set(childRel, toDiskStat(size, mtimeMs));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
await walk(startRel);
|
|
133
|
+
}
|
|
134
|
+
/** One swallowed stat-listing probe. Returns whether `rel` is CURRENTLY a
|
|
135
|
+
* live, listable directory (a plain file, a deleted path, or any other
|
|
136
|
+
* probe failure all report `false`) — the caller uses this to decide
|
|
137
|
+
* whether the point-named path itself needs an unconditional report (see
|
|
138
|
+
* this module's doc). Failure otherwise changes nothing: the caller's own
|
|
139
|
+
* ledger-deletion sweep still covers a deleted/replaced path, and a tree
|
|
140
|
+
* mutating mid-walk just means the stats collected so far are what count. */
|
|
141
|
+
async function probeDiskStats(rel, out) {
|
|
142
|
+
try {
|
|
143
|
+
await listDiskStats(rel, out);
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/** Expand ONE watch path into `out` — see this module's doc for the full
|
|
151
|
+
* algorithm. `p === '.'` is the overflow full-tree rescan: scope is the
|
|
152
|
+
* whole tree (`rel = ''`, no parent probe, ledger prefix `''` matches
|
|
153
|
+
* every path). `ledgerPathSet` is `ledgerPaths` as a `Set` for the O(1)
|
|
154
|
+
* exact-path membership check the point-named-path exception needs. */
|
|
155
|
+
async function expandWatchPath(p, ledgerPaths, ledgerPathSet, out) {
|
|
156
|
+
const rel = p === '.' ? '' : p;
|
|
157
|
+
const diskStats = new Map();
|
|
158
|
+
const isLiveDirectory = await probeDiskStats(rel, diskStats);
|
|
159
|
+
const { prefixes, parentRel, slash } = scopePrefixes(rel);
|
|
160
|
+
if (p !== '.' && slash >= 0)
|
|
161
|
+
await probeDiskStats(parentRel, diskStats);
|
|
162
|
+
// See this module's doc for why a confirmed live directory is excluded
|
|
163
|
+
// UNLESS the ledger still has a stale record at that exact path.
|
|
164
|
+
if (p !== '.' && (!isLiveDirectory || ledgerPathSet.has(p)))
|
|
165
|
+
out.add(p);
|
|
166
|
+
// Ledger paths in scope but missing from the disk listing — coalesced
|
|
167
|
+
// deletions (see this module's doc).
|
|
168
|
+
for (const q of ledgerPaths) {
|
|
169
|
+
if (!inScope(q, prefixes))
|
|
170
|
+
continue;
|
|
171
|
+
if (!diskStats.has(q)) {
|
|
172
|
+
out.add(q);
|
|
173
|
+
statIndex.delete(q);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// Disk files in scope: report new/changed, skip stat-confirmed survivors.
|
|
177
|
+
for (const [q, stat] of diskStats) {
|
|
178
|
+
const known = statIndex.get(q);
|
|
179
|
+
if (known && known.size === stat.size && known.mtimeMs === stat.mtimeMs)
|
|
180
|
+
continue;
|
|
181
|
+
out.add(q);
|
|
182
|
+
statIndex.set(q, stat);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
async expandWatchBatch(paths, ledgerPaths) {
|
|
187
|
+
const out = new Set();
|
|
188
|
+
const ledgerPathSet = new Set(ledgerPaths);
|
|
189
|
+
for (const p of paths)
|
|
190
|
+
await expandWatchPath(p, ledgerPaths, ledgerPathSet, out);
|
|
191
|
+
return [...out];
|
|
192
|
+
},
|
|
193
|
+
resetIndex() {
|
|
194
|
+
statIndex = new Map();
|
|
195
|
+
},
|
|
196
|
+
async warmFromDisk() {
|
|
197
|
+
const warm = new Map();
|
|
198
|
+
await probeDiskStats('', warm);
|
|
199
|
+
statIndex = warm;
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var worker_files_exports = {};
|
|
20
|
+
__export(worker_files_exports, {
|
|
21
|
+
FS_CORE_WORKER_FILES: () => FS_CORE_WORKER_FILES,
|
|
22
|
+
resolveWorkerFiles: () => resolveWorkerFiles
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(worker_files_exports);
|
|
25
|
+
const FS_CORE_WORKER_FILES = ["fs-core.worker.js", "fs-query.worker.js"];
|
|
26
|
+
function resolveWorkerFiles(clientEntryPath) {
|
|
27
|
+
const cut = Math.max(clientEntryPath.lastIndexOf("/"), clientEntryPath.lastIndexOf("\\"));
|
|
28
|
+
if (cut < 0) throw new Error(`resolveWorkerFiles: not a path to client.js: ${clientEntryPath}`);
|
|
29
|
+
const sep = clientEntryPath[cut];
|
|
30
|
+
const dir = clientEntryPath.slice(0, cut);
|
|
31
|
+
return { dir, files: FS_CORE_WORKER_FILES.map((name) => dir + sep + name) };
|
|
32
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The authoritative statement of fs-core's worker-artifact distribution
|
|
3
|
+
* contract, for Node-side consumers that copy/serve the worker files
|
|
4
|
+
* (dimina-kit workbench's vite-preset, qdmp-web-workbench's server.cjs):
|
|
5
|
+
*
|
|
6
|
+
* dist/fs-core.worker.js and dist/fs-query.worker.js are single-file,
|
|
7
|
+
* self-contained ESM (no import statements) living in the SAME directory
|
|
8
|
+
* as dist/client.js, under exactly these file names.
|
|
9
|
+
*
|
|
10
|
+
* build-workers.js asserts this at build time; consumers should derive the
|
|
11
|
+
* names/locations from here instead of re-deriving them with hardcoded
|
|
12
|
+
* string joins. Pure string manipulation (no node:path) so the module loads
|
|
13
|
+
* in any runtime and ships as both ESM (dist/worker-files.js) and CJS
|
|
14
|
+
* (dist/worker-files.cjs — see the exports map's `require` condition, for
|
|
15
|
+
* CommonJS hosts like server.cjs).
|
|
16
|
+
*/
|
|
17
|
+
/** The worker artifacts' literal file names, siblings of `client.js`. */
|
|
18
|
+
export const FS_CORE_WORKER_FILES = ['fs-core.worker.js', 'fs-query.worker.js'];
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the on-disk worker file paths from the resolved path of the
|
|
21
|
+
* `./client` entry — the one path every consumer can obtain:
|
|
22
|
+
*
|
|
23
|
+
* resolveWorkerFiles(require.resolve('@dimina-kit/fs-core/client'))
|
|
24
|
+
*
|
|
25
|
+
* Preserves whichever path separator the input uses (POSIX or Windows), so
|
|
26
|
+
* the result is joinable/copyable as-is on the host platform.
|
|
27
|
+
*/
|
|
28
|
+
export function resolveWorkerFiles(clientEntryPath) {
|
|
29
|
+
const cut = Math.max(clientEntryPath.lastIndexOf('/'), clientEntryPath.lastIndexOf('\\'));
|
|
30
|
+
if (cut < 0)
|
|
31
|
+
throw new Error(`resolveWorkerFiles: not a path to client.js: ${clientEntryPath}`);
|
|
32
|
+
const sep = clientEntryPath[cut];
|
|
33
|
+
const dir = clientEntryPath.slice(0, cut);
|
|
34
|
+
return { dir, files: FS_CORE_WORKER_FILES.map((name) => dir + sep + name) };
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es5.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2016.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.dom.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.decorators.d.ts","../../../../node_modules/.pnpm/typescript@5.9.2/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../src/worker-lib/wal-codec.ts","../../src/worker-lib/protocol.ts","../../src/worker-lib/engine-shared.ts","../../src/worker-lib/paths.ts","../../src/worker-lib/rpc-types.ts","../../../../node_modules/.pnpm/@types+aria-query@5.0.4/node_modules/@types/aria-query/index.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/disposable.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/indexable.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/iterators.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/compatibility/index.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/globals.typedarray.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/buffer.buffer.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/globals.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/domexception.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/events.d.ts","../../../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/fetch.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/navigator.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/web-globals/storage.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/assert.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/assert/strict.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/async_hooks.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/buffer.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/child_process.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/cluster.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/console.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/constants.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/crypto.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dgram.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/diagnostics_channel.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dns.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/dns/promises.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/domain.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/events.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/fs.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/fs/promises.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/http.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/http2.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/https.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/inspector.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/inspector.generated.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/module.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/net.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/os.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/path.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/perf_hooks.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/process.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/punycode.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/querystring.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/readline.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/readline/promises.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/repl.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/sea.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/sqlite.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/promises.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/consumers.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/stream/web.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/string_decoder.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/test.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/timers.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/timers/promises.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/tls.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/trace_events.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/tty.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/url.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/util.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/v8.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/vm.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/wasi.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/worker_threads.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/zlib.d.ts","../../../../node_modules/.pnpm/@types+node@22.19.17/node_modules/@types/node/index.d.ts","../../../../node_modules/.pnpm/@types+keyv@3.1.4/node_modules/@types/keyv/index.d.ts","../../../../node_modules/.pnpm/@types+http-cache-semantics@4.2.0/node_modules/@types/http-cache-semantics/index.d.ts","../../../../node_modules/.pnpm/@types+responselike@1.0.3/node_modules/@types/responselike/index.d.ts","../../../../node_modules/.pnpm/@types+cacheable-request@6.0.3/node_modules/@types/cacheable-request/index.d.ts","../../../../node_modules/.pnpm/@types+deep-eql@4.0.2/node_modules/@types/deep-eql/index.d.ts","../../../../node_modules/.pnpm/assertion-error@2.0.1/node_modules/assertion-error/index.d.ts","../../../../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai/index.d.ts","../../../../node_modules/.pnpm/devtools-protocol@0.0.1173815/node_modules/devtools-protocol/types/protocol.d.ts","../../../../node_modules/.pnpm/devtools-protocol@0.0.1173815/node_modules/devtools-protocol/types/protocol-mapping.d.ts","../../../../node_modules/.pnpm/devtools-protocol@0.0.1173815/node_modules/devtools-protocol/types/protocol-proxy-api.d.ts","../../../../node_modules/.pnpm/@types+chrome-remote-interface@0.33.0/node_modules/@types/chrome-remote-interface/index.d.ts","../../../../node_modules/.pnpm/@types+ms@2.1.0/node_modules/@types/ms/index.d.ts","../../../../node_modules/.pnpm/@types+debug@4.1.13/node_modules/@types/debug/index.d.ts","../../../../node_modules/.pnpm/@types+esrecurse@4.3.1/node_modules/@types/esrecurse/index.d.ts","../../../../node_modules/.pnpm/@types+estree@1.0.8/node_modules/@types/estree/index.d.ts","../../../../node_modules/.pnpm/@types+fs-extra@9.0.13/node_modules/@types/fs-extra/index.d.ts","../../../../node_modules/.pnpm/@types+json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts","../../../../node_modules/.pnpm/@types+prop-types@15.7.15/node_modules/@types/prop-types/index.d.ts","../../../../node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/global.d.ts","../../../../node_modules/.pnpm/csstype@3.2.3/node_modules/csstype/index.d.ts","../../../../node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/index.d.ts","../../../../node_modules/.pnpm/@types+react-dom@18.3.7_@types+react@18.3.28/node_modules/@types/react-dom/index.d.ts","../../../../node_modules/.pnpm/@types+trusted-types@2.0.7/node_modules/@types/trusted-types/lib/index.d.ts","../../../../node_modules/.pnpm/@types+trusted-types@2.0.7/node_modules/@types/trusted-types/index.d.ts","../../../../node_modules/.pnpm/@types+ws@8.18.1/node_modules/@types/ws/index.d.ts","../../../../node_modules/.pnpm/@types+yauzl@2.10.3/node_modules/@types/yauzl/index.d.ts"],"fileIdsList":[[71,120,137,138],[71,120,131,134,137,138,163,170,171,172,173],[71,120,137,138,175,176],[71,120,137,138,179,180],[71,120,137,138,182],[71,120,132,137,138,170],[71,120,131,137,138,170],[71,117,118,120,137,138],[71,119,120,137,138],[120,137,138],[71,120,125,137,138,155],[71,120,121,126,131,137,138,140,152,163],[71,120,121,122,131,137,138,140],[66,67,68,71,120,137,138],[71,120,123,137,138,164],[71,120,124,125,132,137,138,141],[71,120,125,137,138,152,160],[71,120,126,128,131,137,138,140],[71,119,120,127,137,138],[71,120,128,129,137,138],[71,120,130,131,137,138],[71,119,120,131,137,138],[71,120,131,132,133,137,138,152,163],[71,120,131,132,133,137,138,147,152,155],[71,113,120,128,131,134,137,138,140,152,163],[71,120,131,132,134,135,137,138,140,152,160,163],[71,120,134,136,137,138,152,160,163],[69,70,71,72,73,74,75,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169],[71,120,131,137,138],[71,120,137,138,139,163],[71,120,128,131,137,138,140,152],[71,120,137,138,141],[71,120,137,138,142],[71,119,120,137,138,143],[71,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169],[71,120,137,138,145],[71,120,137,138,146],[71,120,131,137,138,147,148],[71,120,137,138,147,149,164,166],[71,120,132,137,138],[71,120,131,137,138,152,153,155],[71,120,137,138,154,155],[71,120,137,138,152,153],[71,120,137,138,155],[71,120,137,138,156],[71,117,120,137,138,152,157,163],[71,120,131,137,138,158,159],[71,120,137,138,158,159],[71,120,125,137,138,140,152,160],[71,120,137,138,161],[71,120,137,138,140,162],[71,120,134,137,138,146,163],[71,120,125,137,138,164],[71,120,137,138,152,165],[71,120,137,138,139,166],[71,120,137,138,167],[71,113,120,137,138],[71,113,120,131,133,137,138,143,152,155,163,165,166,168],[71,120,137,138,152,169],[71,120,137,138,191],[71,120,137,138,188,189,190],[71,120,134,137,138,152,170],[71,120,137,138,193],[71,120,131,134,136,137,138,140,152,160,163,169,170],[71,120,131,137,138,152,170],[71,120,137,138,178],[71,85,89,120,137,138,163],[71,85,120,137,138,152,163],[71,80,120,137,138],[71,82,85,120,137,138,160,163],[71,120,137,138,140,160],[71,120,137,138,170],[71,80,120,137,138,170],[71,82,85,120,137,138,140,163],[71,77,78,81,84,120,131,137,138,152,163],[71,85,92,120,137,138],[71,77,83,120,137,138],[71,85,106,107,120,137,138],[71,81,85,120,137,138,155,163,170],[71,106,120,137,138,170],[71,79,80,120,137,138,170],[71,85,120,137,138],[71,79,80,81,82,83,84,85,86,87,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,107,108,109,110,111,112,120,137,138],[71,85,100,120,137,138],[71,85,92,93,120,137,138],[71,83,85,93,94,120,137,138],[71,84,120,137,138],[71,77,80,85,120,137,138],[71,85,89,93,94,120,137,138],[71,89,120,137,138],[71,83,85,88,120,137,138,163],[71,77,82,85,92,120,137,138],[71,120,137,138,152],[71,80,85,106,120,137,138,168,170],[60,61,71,120,137,138]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fc1c715018bd0e18da3d081fc699ed864bcbc649f6c50f1c8ed16190d72c341","signature":"9b546d203bc5e7ee24e1c58d308ed9a0f051c77c5887b0a53c6e29e4e8b0819e","impliedFormat":99},{"version":"87d8e0cdaa871f6aba96c81cbbf41d68b69aeb8760e819968471f12d8101aa45","signature":"61bc310c0ba21ca50a756a2be5be5471da9fdf0ecc423cafbf76eb43725a7725","impliedFormat":99},{"version":"1c964b8867e333b1c9b121d01b59400a0c12845a9ed5bbb451a012cf10812b28","signature":"931735038a7680c23dbaf876f28f0a84b44f5814ea1d3ce6252ddc12ef598d01","impliedFormat":99},{"version":"8b9c1389a0ae5982da813d6e610cc969633b745aa697c66df0664878ceaacb45","signature":"14e3ec63b1cbbf9bab38f3c02d44c2df001a0762bda8fd877497e350f7cf149a","impliedFormat":99},{"version":"0a023ed2ad2c67bc5c2133587ce12a00549124ccacf26b065929530641e1291a","signature":"37c44cf815cb4620f0ad0be1836a3966a06793046cc873efe28fe3ef0aed2006","impliedFormat":99},{"version":"ae77d81a5541a8abb938a0efedf9ac4bea36fb3a24cc28cfa11c598863aba571","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"80523c00b8544a2000ae0143e4a90a00b47f99823eb7926c1e03c494216fc363","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"746911b62b329587939560deb5c036aca48aece03147b021fa680223255d5183","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","impliedFormat":1},{"version":"4f6ae308c5f2901f2988c817e1511520619e9025b9b12cc7cce2ab2e6ffed78a","impliedFormat":1},{"version":"8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","impliedFormat":1},{"version":"f992cd6cc0bcbaa4e6c810468c90f2d8595f8c6c3cf050c806397d3de8585562","impliedFormat":1},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"c08dfc92155fa371a85591a1f8a22f5c4e0a0f97933dac0de15da5f4d1b22578","impliedFormat":1},{"version":"fd1b77b4588ef43760d4c86443e446fa39715ac1e54f6ae5ca6fce5d6d9c76fa","impliedFormat":1},{"version":"6ba4e91dfe621ccd8d268b3b6b95d8b95a33a97fabfa0950d9d6b288503d2dfe","impliedFormat":1},{"version":"7257315c96212e317ccaf05cd4b95f9fdd48350b6d366a131f02cec67fe634f7","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"89e326922cadcc2331d7e851011cf9f0456a681aaf3c95b48b81f8d80e8cdfba","impliedFormat":1},{"version":"d5799bcf7fe4e6de3063abf4e321c14b051706f03cf5716d8a19f22fe1f69519","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"ed19da84b7dbf00952ad0b98ce5c194f1903bcf7c94d8103e8e0d63b271543ae","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"035312d4945d13efa134ae482f6dc56a1a9346f7ac3be7ccbad5741058ce87f3","affectsGlobalScope":true,"impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1},{"version":"74d5a87c3616cd5d8691059d531504403aa857e09cbaecb1c64dfb9ace0db185","impliedFormat":1}],"root":[[60,64]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":199,"noUncheckedIndexedAccess":true,"outDir":"./","rootDir":"../../src/worker-lib","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[65,1],[174,2],[177,3],[181,4],[183,5],[175,1],[184,1],[185,1],[186,6],[172,1],[187,1],[171,7],[182,1],[117,8],[118,8],[119,9],[71,10],[120,11],[121,12],[122,13],[66,1],[69,14],[67,1],[68,1],[123,15],[124,16],[125,17],[126,18],[127,19],[128,20],[129,20],[130,21],[131,22],[132,23],[133,24],[72,1],[70,1],[134,25],[135,26],[136,27],[170,28],[137,29],[138,1],[139,30],[140,31],[141,32],[142,33],[143,34],[144,35],[145,36],[146,37],[147,38],[148,38],[149,39],[150,1],[151,40],[152,41],[154,42],[153,43],[155,44],[156,45],[157,46],[158,47],[159,48],[160,49],[161,50],[162,51],[163,52],[164,53],[165,54],[166,55],[167,56],[73,1],[74,1],[75,1],[114,57],[115,1],[116,1],[168,58],[169,59],[188,1],[192,60],[189,1],[191,61],[173,62],[194,63],[193,1],[195,64],[196,65],[176,1],[76,1],[190,1],[179,66],[180,66],[178,1],[58,1],[59,1],[10,1],[11,1],[13,1],[12,1],[2,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[3,1],[22,1],[23,1],[4,1],[24,1],[28,1],[25,1],[26,1],[27,1],[29,1],[30,1],[31,1],[5,1],[32,1],[33,1],[34,1],[35,1],[6,1],[39,1],[36,1],[37,1],[38,1],[40,1],[7,1],[41,1],[46,1],[47,1],[42,1],[43,1],[44,1],[45,1],[8,1],[51,1],[48,1],[49,1],[50,1],[52,1],[9,1],[53,1],[54,1],[55,1],[57,1],[56,1],[1,1],[92,67],[102,68],[91,67],[112,69],[83,70],[82,71],[111,72],[105,73],[110,74],[85,75],[99,76],[84,77],[108,78],[80,79],[79,72],[109,80],[81,81],[86,82],[87,1],[90,82],[77,1],[113,83],[103,84],[94,85],[95,86],[97,87],[93,88],[96,89],[106,72],[88,90],[89,91],[98,92],[78,93],[101,84],[100,82],[104,1],[107,94],[62,95],[63,1],[61,1],[64,1],[60,1]],"latestChangedDtsFile":"./rpc-types.d.ts","version":"5.9.2"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fs-core 引擎共享定义(lib 中立)—— opcode 语义、调优常量、内存态记录形状、
|
|
3
|
+
* RPC 错误构造。被 fs-core.worker.ts 及其拆出的 fs-core-recovery.ts /
|
|
4
|
+
* fs-core-write-ops.ts 三方共用;纯类型/常量声明,不含任何 DOM/WebWorker
|
|
5
|
+
* 专属全局引用,可被主 tsconfig(DOM lib)与 tsconfig.worker.json
|
|
6
|
+
* (WebWorker lib)两个 program 同时编译。
|
|
7
|
+
*/
|
|
8
|
+
import type { WalRecord } from './wal-codec.js';
|
|
9
|
+
import type { FsCoreErrorCode } from './protocol.js';
|
|
10
|
+
export declare const OP: {
|
|
11
|
+
readonly WRITE: 1;
|
|
12
|
+
readonly RM: 2;
|
|
13
|
+
readonly MV: 3;
|
|
14
|
+
readonly MKDIR: 4;
|
|
15
|
+
readonly CHECKPOINT: 5;
|
|
16
|
+
readonly RESTORE: 6;
|
|
17
|
+
};
|
|
18
|
+
export declare const OP_NAME: Record<number, string>;
|
|
19
|
+
export declare const WRITE_OPCODES: Set<number>;
|
|
20
|
+
export declare const INLINE_MAX = 4096;
|
|
21
|
+
export declare const GROUP_WINDOW_MS = 50;
|
|
22
|
+
export declare const SEGMENT_ROTATE_BYTES: number;
|
|
23
|
+
export declare const OPID_WINDOW = 1024;
|
|
24
|
+
export declare const TURN_DEFAULT_TTL_MS = 120000;
|
|
25
|
+
export declare const TURN_MAX_OPS = 1000;
|
|
26
|
+
export declare const AUDIT_CAP = 4096;
|
|
27
|
+
export declare const CHECKPOINT_KEEP = 20;
|
|
28
|
+
export interface MirrorEntry {
|
|
29
|
+
content: string;
|
|
30
|
+
rev: number;
|
|
31
|
+
}
|
|
32
|
+
export interface AuditEntry {
|
|
33
|
+
gen: number;
|
|
34
|
+
opcode: number;
|
|
35
|
+
actor?: string;
|
|
36
|
+
turnId?: string;
|
|
37
|
+
path?: string;
|
|
38
|
+
from?: string;
|
|
39
|
+
to?: string;
|
|
40
|
+
cpId?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface TurnState {
|
|
43
|
+
turnId: string;
|
|
44
|
+
cpId: string;
|
|
45
|
+
expiresAt: number;
|
|
46
|
+
ops: number;
|
|
47
|
+
}
|
|
48
|
+
export interface WindowOp {
|
|
49
|
+
respond: (r: Record<string, unknown>) => void;
|
|
50
|
+
gen: number;
|
|
51
|
+
path?: string;
|
|
52
|
+
actor?: string;
|
|
53
|
+
opId?: string;
|
|
54
|
+
extra?: Record<string, unknown>;
|
|
55
|
+
}
|
|
56
|
+
/** An opId's cached RPC result, replayed verbatim (+`idempotent: true`) when
|
|
57
|
+
* the same opId is re-sent after a response timeout. The live write path
|
|
58
|
+
* caches the FULL respond payload (`{gen, rev, ...extra}` / restore's
|
|
59
|
+
* `{gen, restored}`) so a replay carries the same fields the first response
|
|
60
|
+
* did — `cpId`/`turnId`/`expiresAt`/`restored` included. Entries rebuilt by
|
|
61
|
+
* WAL replay after a worker restart only carry `{gen}` (the WAL does not
|
|
62
|
+
* record memory-only extras); those entries serve cross-session dedup, which
|
|
63
|
+
* a same-session retry never hits. */
|
|
64
|
+
export type OpIdResult = {
|
|
65
|
+
gen: number;
|
|
66
|
+
rev?: number;
|
|
67
|
+
} & Record<string, unknown>;
|
|
68
|
+
export type Respond = (r: Record<string, unknown>) => void;
|
|
69
|
+
export interface WorkerError extends Error {
|
|
70
|
+
code?: FsCoreErrorCode;
|
|
71
|
+
extra?: Record<string, unknown>;
|
|
72
|
+
}
|
|
73
|
+
/** `code` is typed against the exported wire contract (worker-lib/protocol.ts),
|
|
74
|
+
* so the set of codes this worker can throw and the set consumers can match on
|
|
75
|
+
* are the same list by construction. */
|
|
76
|
+
export declare function rpcErr(code: FsCoreErrorCode, message: string, extra?: Record<string, unknown>): WorkerError;
|
|
77
|
+
/** 供 fs-core-recovery.ts 的回放循环使用;纯函数(无副作用)。 */
|
|
78
|
+
export declare function epochFloor(replayed: WalRecord[]): number;
|
|
79
|
+
//# sourceMappingURL=engine-shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-shared.d.ts","sourceRoot":"","sources":["../../src/worker-lib/engine-shared.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,eAAO,MAAM,EAAE;;;;;;;CAA2E,CAAA;AAC1F,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAA+E,CAAA;AAE1H,eAAO,MAAM,aAAa,aAAwD,CAAA;AAClF,eAAO,MAAM,UAAU,OAAO,CAAA;AAC9B,eAAO,MAAM,eAAe,KAAK,CAAA;AACjC,eAAO,MAAM,oBAAoB,QAAkB,CAAA;AACnD,eAAO,MAAM,WAAW,OAAO,CAAA;AAE/B,eAAO,MAAM,mBAAmB,SAAS,CAAA;AACzC,eAAO,MAAM,YAAY,OAAO,CAAA;AAChC,eAAO,MAAM,SAAS,OAAO,CAAA;AAE7B,eAAO,MAAM,eAAe,KAAK,CAAA;AAEjC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC7C,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED;;;;;;;sCAOsC;AACtC,MAAM,MAAM,UAAU,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEhF,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;AAE1D,MAAM,WAAW,WAAY,SAAQ,KAAK;IACxC,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC;AAED;;wCAEwC;AACxC,wBAAgB,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAK3G;AAED,+CAA+C;AAC/C,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAExD"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
export const OP = { WRITE: 1, RM: 2, MV: 3, MKDIR: 4, CHECKPOINT: 5, RESTORE: 6 };
|
|
2
2
|
export const OP_NAME = { 1: 'write', 2: 'rm', 3: 'mv', 4: 'mkdir', 5: 'checkpoint', 6: 'restore' };
|
|
3
|
-
//
|
|
3
|
+
// restore 冲突检查只关心"写类"操作(改变文件内容/存在性),checkpoint 本身不算
|
|
4
4
|
export const WRITE_OPCODES = new Set([OP.WRITE, OP.RM, OP.MV, OP.RESTORE]);
|
|
5
5
|
export const INLINE_MAX = 4096; // payload ≤4KB 内联进 WAL 记录
|
|
6
6
|
export const GROUP_WINDOW_MS = 50; // 人类写组提交窗口
|
|
7
7
|
export const SEGMENT_ROTATE_BYTES = 4 * 1024 * 1024;
|
|
8
8
|
export const OPID_WINDOW = 1024;
|
|
9
|
-
//
|
|
9
|
+
// turn 能力:agent 写必须在有效 turn 内(fs-core 侧执法,不信任调用方透传)
|
|
10
10
|
export const TURN_DEFAULT_TTL_MS = 120000;
|
|
11
11
|
export const TURN_MAX_OPS = 1000; // per-turn 限额(跑飞的 agent 刹车)
|
|
12
12
|
export const AUDIT_CAP = 4096; // 内存审计环(fs_diff 的数据源;重启由 WAL 回放重建)
|
|
13
|
-
//
|
|
13
|
+
// checkpoint LRU:保留最近 N 个;被淘汰者的 blob 在下次 compaction GC 回收
|
|
14
14
|
export const CHECKPOINT_KEEP = 20;
|
|
15
|
+
/** `code` is typed against the exported wire contract (worker-lib/protocol.ts),
|
|
16
|
+
* so the set of codes this worker can throw and the set consumers can match on
|
|
17
|
+
* are the same list by construction. */
|
|
15
18
|
export function rpcErr(code, message, extra) {
|
|
16
19
|
const e = new Error(message);
|
|
17
20
|
e.code = code;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/worker-lib/paths.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB,UAAqC,CAAA;AAElE,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAUvD"}
|