@claudexor/daemon 5.0.2 → 5.1.0
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/client.d.ts +56 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/deferred-message-owner.d.ts +4 -0
- package/dist/deferred-message-owner.d.ts.map +1 -1
- package/dist/deferred-messages.d.ts +22 -1
- package/dist/deferred-messages.d.ts.map +1 -1
- package/dist/deferred-messages.js +50 -15
- package/dist/deferred-messages.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interactions.d.ts.map +1 -1
- package/dist/interactions.js +29 -7
- package/dist/interactions.js.map +1 -1
- package/dist/model-operation-execution.d.ts +10 -0
- package/dist/model-operation-execution.d.ts.map +1 -1
- package/dist/model-operation-execution.js +12 -5
- package/dist/model-operation-execution.js.map +1 -1
- package/dist/model-operations.d.ts +1 -0
- package/dist/model-operations.d.ts.map +1 -1
- package/dist/model-operations.js +20 -10
- package/dist/model-operations.js.map +1 -1
- package/dist/quota-registry-support.d.ts.map +1 -1
- package/dist/quota-registry-support.js +14 -9
- package/dist/quota-registry-support.js.map +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js.map +1 -1
- package/dist/store/blob-files.d.ts +2 -2
- package/dist/store/blob-files.d.ts.map +1 -1
- package/dist/store/blob-files.js +1 -0
- package/dist/store/blob-files.js.map +1 -1
- package/dist/store/command-prune.d.ts.map +1 -1
- package/dist/store/command-prune.js +4 -0
- package/dist/store/command-prune.js.map +1 -1
- package/dist/store/commands.d.ts +7 -2
- package/dist/store/commands.d.ts.map +1 -1
- package/dist/store/commands.js +38 -11
- package/dist/store/commands.js.map +1 -1
- package/dist/store/deferred-message-rows.d.ts +10 -0
- package/dist/store/deferred-message-rows.d.ts.map +1 -1
- package/dist/store/deferred-message-rows.js +28 -1
- package/dist/store/deferred-message-rows.js.map +1 -1
- package/dist/store/deferred-messages.d.ts +10 -3
- package/dist/store/deferred-messages.d.ts.map +1 -1
- package/dist/store/deferred-messages.js +45 -9
- package/dist/store/deferred-messages.js.map +1 -1
- package/dist/store/external-files.d.ts +17 -0
- package/dist/store/external-files.d.ts.map +1 -1
- package/dist/store/external-files.js +54 -0
- package/dist/store/external-files.js.map +1 -1
- package/dist/store/idempotency.d.ts +1 -1
- package/dist/store/idempotency.d.ts.map +1 -1
- package/dist/store/idempotency.js +2 -1
- package/dist/store/idempotency.js.map +1 -1
- package/dist/store/libuv-pool.d.ts +25 -0
- package/dist/store/libuv-pool.d.ts.map +1 -0
- package/dist/store/libuv-pool.js +96 -0
- package/dist/store/libuv-pool.js.map +1 -0
- package/dist/store/maintenance-worker.d.ts.map +1 -1
- package/dist/store/maintenance-worker.js +45 -0
- package/dist/store/maintenance-worker.js.map +1 -1
- package/dist/store/maintenance.d.ts +28 -2
- package/dist/store/maintenance.d.ts.map +1 -1
- package/dist/store/maintenance.js +36 -6
- package/dist/store/maintenance.js.map +1 -1
- package/dist/store/project-router.d.ts +107 -1
- package/dist/store/project-router.d.ts.map +1 -1
- package/dist/store/project-router.js +30 -0
- package/dist/store/project-router.js.map +1 -1
- package/dist/store/publish-blob.d.ts.map +1 -1
- package/dist/store/publish-blob.js +36 -14
- package/dist/store/publish-blob.js.map +1 -1
- package/dist/store/purge-files.d.ts +11 -2
- package/dist/store/purge-files.d.ts.map +1 -1
- package/dist/store/purge-files.js +34 -7
- package/dist/store/purge-files.js.map +1 -1
- package/dist/store/resource-release.d.ts +15 -0
- package/dist/store/resource-release.d.ts.map +1 -0
- package/dist/store/resource-release.js +56 -0
- package/dist/store/resource-release.js.map +1 -0
- package/dist/store/resource-rows.d.ts +2 -0
- package/dist/store/resource-rows.d.ts.map +1 -1
- package/dist/store/resource-rows.js.map +1 -1
- package/dist/store/resource-uses.d.ts +84 -0
- package/dist/store/resource-uses.d.ts.map +1 -0
- package/dist/store/resource-uses.js +129 -0
- package/dist/store/resource-uses.js.map +1 -0
- package/dist/store/resources.d.ts +16 -2
- package/dist/store/resources.d.ts.map +1 -1
- package/dist/store/resources.js +42 -3
- package/dist/store/resources.js.map +1 -1
- package/dist/store/retention-changes.d.ts +8 -2
- package/dist/store/retention-changes.d.ts.map +1 -1
- package/dist/store/retention-changes.js +24 -11
- package/dist/store/retention-changes.js.map +1 -1
- package/dist/store/retention-generations.d.ts +7 -2
- package/dist/store/retention-generations.d.ts.map +1 -1
- package/dist/store/retention-generations.js +71 -26
- package/dist/store/retention-generations.js.map +1 -1
- package/dist/store/retention-reference-reader.d.ts +26 -1
- package/dist/store/retention-reference-reader.d.ts.map +1 -1
- package/dist/store/retention-reference-reader.js +31 -7
- package/dist/store/retention-reference-reader.js.map +1 -1
- package/dist/store/retention-references.d.ts +5 -0
- package/dist/store/retention-references.d.ts.map +1 -1
- package/dist/store/retention-references.js +35 -6
- package/dist/store/retention-references.js.map +1 -1
- package/dist/store/schema.d.ts +2 -2
- package/dist/store/schema.d.ts.map +1 -1
- package/dist/store/schema.js +17 -2
- package/dist/store/schema.js.map +1 -1
- package/dist/store/sql-command-router.d.ts +10 -1
- package/dist/store/sql-command-router.d.ts.map +1 -1
- package/dist/store/sql-command-router.js +10 -1
- package/dist/store/sql-command-router.js.map +1 -1
- package/dist/store/sql-daemon-services.d.ts.map +1 -1
- package/dist/store/sql-daemon-services.js +9 -8
- package/dist/store/sql-daemon-services.js.map +1 -1
- package/dist/store/sql-validation.d.ts.map +1 -1
- package/dist/store/sql-validation.js +1 -0
- package/dist/store/sql-validation.js.map +1 -1
- package/dist/store/terminal-files.d.ts +6 -3
- package/dist/store/terminal-files.d.ts.map +1 -1
- package/dist/store/terminal-files.js +6 -38
- package/dist/store/terminal-files.js.map +1 -1
- package/dist/store/thread-closure.d.ts +62 -0
- package/dist/store/thread-closure.d.ts.map +1 -0
- package/dist/store/thread-closure.js +290 -0
- package/dist/store/thread-closure.js.map +1 -0
- package/dist/store/thread-retirement.d.ts +29 -0
- package/dist/store/thread-retirement.d.ts.map +1 -0
- package/dist/store/thread-retirement.js +123 -0
- package/dist/store/thread-retirement.js.map +1 -0
- package/dist/store/threads.d.ts.map +1 -1
- package/dist/store/threads.js +6 -1
- package/dist/store/threads.js.map +1 -1
- package/dist/store/upload-imports.d.ts.map +1 -1
- package/dist/store/upload-imports.js +16 -3
- package/dist/store/upload-imports.js.map +1 -1
- package/dist/store/uploads.d.ts +13 -2
- package/dist/store/uploads.d.ts.map +1 -1
- package/dist/store/uploads.js +76 -30
- package/dist/store/uploads.js.map +1 -1
- package/dist/store-contracts.d.ts +25 -2
- package/dist/store-contracts.d.ts.map +1 -1
- package/dist/terminal-authority.d.ts +1 -1
- package/dist/thread-lifecycle.d.ts +3 -1
- package/dist/thread-lifecycle.d.ts.map +1 -1
- package/dist/thread-lifecycle.js +2 -2
- package/dist/thread-lifecycle.js.map +1 -1
- package/dist/writer-lease.d.ts.map +1 -1
- package/dist/writer-lease.js +6 -3
- package/dist/writer-lease.js.map +1 -1
- package/package.json +5 -5
|
@@ -4,6 +4,7 @@ import { closeSync, constants, existsSync, linkSync, mkdirSync, openSync, rename
|
|
|
4
4
|
import { link, open, stat, unlink } from "node:fs/promises";
|
|
5
5
|
import { dirname, join } from "node:path";
|
|
6
6
|
import { mapStoreError } from "./errors.js";
|
|
7
|
+
import { withUploadWriteSlot } from "./libuv-pool.js";
|
|
7
8
|
/** Node does not expose the POSIX O_DSYNC name on Windows, but passes numeric
|
|
8
9
|
* open flags to libuv. UV_FS_O_DSYNC maps to FILE_FLAG_WRITE_THROUGH there
|
|
9
10
|
* (deps/uv/include/uv/win.h in the supported Node runtime). */
|
|
@@ -150,6 +151,59 @@ export async function writeStagedTemp(dir, name, bytes) {
|
|
|
150
151
|
throw error;
|
|
151
152
|
}
|
|
152
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Incremental `O_DSYNC` write of an existing file on the libuv pool, using the
|
|
156
|
+
* same flags as `writeStagedTemp`. The caller owns the path (an upload part).
|
|
157
|
+
* `accept` runs on the request thread before each chunk is submitted and may
|
|
158
|
+
* throw to stop the transfer; `committed` runs after that chunk's write returns.
|
|
159
|
+
* A write already sitting in the pool finishes before the next `accept`.
|
|
160
|
+
* Each pool operation (the open with its truncate, every write, the close)
|
|
161
|
+
* holds one slot of the upload gate until it returns, so a transfer waiting for
|
|
162
|
+
* its next chunk from the network holds none. `cancelled` runs while the open
|
|
163
|
+
* or a write waits for a slot and may throw. The close waits for its slot even
|
|
164
|
+
* after a cancel, so the descriptor is closed on every exit.
|
|
165
|
+
*/
|
|
166
|
+
export async function writeExternalIncremental(path, chunks, hooks) {
|
|
167
|
+
const handle = await withUploadWriteSlot(hooks?.cancelled, async () => {
|
|
168
|
+
const opened = await open(path, externalWriteFlags(constants.O_RDWR));
|
|
169
|
+
try {
|
|
170
|
+
await opened.truncate(0);
|
|
171
|
+
return opened;
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
await opened.close().catch(() => undefined);
|
|
175
|
+
throw error;
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
let received = 0;
|
|
179
|
+
let closed = false;
|
|
180
|
+
const close = async () => {
|
|
181
|
+
if (closed)
|
|
182
|
+
return;
|
|
183
|
+
closed = true;
|
|
184
|
+
await withUploadWriteSlot(undefined, () => handle.close());
|
|
185
|
+
};
|
|
186
|
+
try {
|
|
187
|
+
for await (const chunk of chunks) {
|
|
188
|
+
hooks?.accept?.(chunk, received);
|
|
189
|
+
let offset = 0;
|
|
190
|
+
while (offset < chunk.byteLength) {
|
|
191
|
+
const { bytesWritten } = await withUploadWriteSlot(hooks?.cancelled, () => handle.write(chunk, offset, chunk.byteLength - offset, received + offset));
|
|
192
|
+
if (bytesWritten <= 0)
|
|
193
|
+
throw new Error(`short write of ${path}`);
|
|
194
|
+
offset += bytesWritten;
|
|
195
|
+
}
|
|
196
|
+
received += chunk.byteLength;
|
|
197
|
+
hooks?.committed?.(chunk, received);
|
|
198
|
+
}
|
|
199
|
+
await close();
|
|
200
|
+
return received;
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
await close().catch(() => undefined);
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
153
207
|
/**
|
|
154
208
|
* The off-loop twin of `writeExternalFile` for a content-addressed body: the
|
|
155
209
|
* same `O_DSYNC` temp, published under its final name only while that name is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-files.js","sourceRoot":"","sources":["../../src/store/external-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,SAAS,EACT,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"external-files.js","sourceRoot":"","sources":["../../src/store/external-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type SqlWriteContext } from "./mutation.js";
|
|
2
|
-
export type IdempotencyOwner = "command" | "thread" | "turn" | "decision" | "project" | "setup" | "upload" | "quarantine" | "deferred_message";
|
|
2
|
+
export type IdempotencyOwner = "command" | "thread" | "turn" | "decision" | "project" | "setup" | "upload" | "quarantine" | "deferred_message" | "thread_retire";
|
|
3
3
|
export interface IdempotencyKey {
|
|
4
4
|
owner: IdempotencyOwner;
|
|
5
5
|
pid: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/store/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAEzE,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,UAAU,GACV,SAAS,GACT,OAAO,GACP,QAAQ,GACR,YAAY,GACZ,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/store/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAEzE,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,UAAU,GACV,SAAS,GACT,OAAO,GACP,QAAQ,GACR,YAAY,GACZ,kBAAkB,GAClB,eAAe,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,gBAAgB,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiBD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EACrC,GAAG,EAAE,cAAc,EACnB,aAAa,EAAE,MAAM,GACpB,kBAAkB,GAAG,SAAS,CAoBhC;AAED;+EAC+E;AAC/E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,kBAAkB,GAC1B,kBAAkB,CA6BpB;AAED;mFACmF;AACnF,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,gBAAgB,EACvB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,MAAM,CAOR"}
|
|
@@ -36,8 +36,9 @@ export function bindIdempotencyInTx(sql, binding) {
|
|
|
36
36
|
return existing;
|
|
37
37
|
if (binding.owner !== "upload" &&
|
|
38
38
|
binding.owner !== "deferred_message" &&
|
|
39
|
+
binding.owner !== "thread_retire" &&
|
|
39
40
|
binding.result !== undefined) {
|
|
40
|
-
throw new Error("only upload
|
|
41
|
+
throw new Error("only upload, deferred-message and thread-retire idempotency bindings carry a result");
|
|
41
42
|
}
|
|
42
43
|
sql
|
|
43
44
|
.prepare("INSERT INTO idempotency(owner, pid, key_digest, operation, request_digest, target_id, result, created_at) VALUES(?, ?, ?, ?, ?, ?, ?, ?)")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/store/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAwB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/store/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAwB,MAAM,eAAe,CAAC;AAsCzE,SAAS,QAAQ;IACf,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2DAA2D,CAAC,EAAE;QAC1F,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAC/B,GAAqC,EACrC,GAAmB,EACnB,aAAqB;IAErB,MAAM,GAAG,GAAG,GAAG;SACZ,OAAO,CACN,iIAAiI,CAClI;SACA,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAA2B,CAAC;IACpE,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,GAAG,CAAC,cAAc,KAAK,aAAa;QAAE,QAAQ,EAAE,CAAC;IACrD,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI;YACrB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY,EAAE,CAAC;KACjF,CAAC;AACJ,CAAC;AAED;+EAC+E;AAC/E,MAAM,UAAU,mBAAmB,CACjC,GAAoB,EACpB,OAA2B;IAE3B,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACxE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IACE,OAAO,CAAC,KAAK,KAAK,QAAQ;QAC1B,OAAO,CAAC,KAAK,KAAK,kBAAkB;QACpC,OAAO,CAAC,KAAK,KAAK,eAAe;QACjC,OAAO,CAAC,MAAM,KAAK,SAAS,EAC5B,CAAC;QACD,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;IACD,GAAG;SACA,OAAO,CACN,0IAA0I,CAC3I;SACA,GAAG,CACF,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EACjF,OAAO,CAAC,SAAS,CAClB,CAAC;IACJ,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;mFACmF;AACnF,MAAM,UAAU,2BAA2B,CACzC,GAAoB,EACpB,KAAuB,EACvB,GAAW,EACX,QAAgB;IAEhB,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,MAAM,CACX,GAAG;SACA,OAAO,CAAC,uEAAuE,CAAC;SAChF,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CACrC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pool an operator-set (or unset) `UV_THREADPOOL_SIZE` gives. Unset means
|
|
3
|
+
* libuv's default of 4; assigning the variable after the pool exists does not
|
|
4
|
+
* resize it. A non-positive value is libuv's 1, and anything above 1024 is
|
|
5
|
+
* libuv's maximum.
|
|
6
|
+
*/
|
|
7
|
+
export declare function libuvPoolSizeFrom(raw: string | undefined): number;
|
|
8
|
+
export declare function libuvPoolSize(): number;
|
|
9
|
+
/** Upload writes leave two threads for DNS and other filesystem work.
|
|
10
|
+
* A pool of one cannot spare them; that is the size the operator set. */
|
|
11
|
+
export declare function uploadWriteSlots(): number;
|
|
12
|
+
export interface UploadWriteGate {
|
|
13
|
+
acquire(cancelled?: () => void): Promise<() => void>;
|
|
14
|
+
wake(): void;
|
|
15
|
+
}
|
|
16
|
+
/** One queue. `acquire` resolves with a release function. A caller who finds
|
|
17
|
+
* the gate full waits on that promise (the event loop), not a spin. `wake`
|
|
18
|
+
* rechecks every waiter, so a cancellation rejects without waiting for a slot.
|
|
19
|
+
* Release is idempotent and hands the slot to the oldest waiter. */
|
|
20
|
+
export declare function createUploadWriteGate(slots: () => number): UploadWriteGate;
|
|
21
|
+
/** One pool operation under one upload slot, released when the operation settles.
|
|
22
|
+
* Callers do not hold a slot while they wait for network bytes. */
|
|
23
|
+
export declare function withUploadWriteSlot<T>(cancelled: (() => void) | undefined, operation: () => Promise<T>): Promise<T>;
|
|
24
|
+
export declare function wakeUploadWriteSlots(): void;
|
|
25
|
+
//# sourceMappingURL=libuv-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"libuv-pool.d.ts","sourceRoot":"","sources":["../../src/store/libuv-pool.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKjE;AAED,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED;yEACyE;AACzE,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACrD,IAAI,IAAI,IAAI,CAAC;CACd;AAED;;;oEAGoE;AACpE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,MAAM,GAAG,eAAe,CA6C1E;AAID;mEACmE;AACnE,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,EACnC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The size the daemon entry applied when the operator had not set
|
|
3
|
+
* `UV_THREADPOOL_SIZE`. The entry created the pool at that size and then removed
|
|
4
|
+
* the variable, so harness children do not inherit it. Same key as
|
|
5
|
+
* `packages/cli/src/host-libuv-pool.ts` and `packages/claudexor/bin/libuv-pool.js`.
|
|
6
|
+
*/
|
|
7
|
+
const APPLIED_POOL = Symbol.for("claudexor.libuvPoolSize");
|
|
8
|
+
/**
|
|
9
|
+
* The pool an operator-set (or unset) `UV_THREADPOOL_SIZE` gives. Unset means
|
|
10
|
+
* libuv's default of 4; assigning the variable after the pool exists does not
|
|
11
|
+
* resize it. A non-positive value is libuv's 1, and anything above 1024 is
|
|
12
|
+
* libuv's maximum.
|
|
13
|
+
*/
|
|
14
|
+
export function libuvPoolSizeFrom(raw) {
|
|
15
|
+
if (raw == null || raw === "")
|
|
16
|
+
return 4;
|
|
17
|
+
const parsed = Number.parseInt(raw, 10);
|
|
18
|
+
if (!Number.isFinite(parsed) || parsed <= 0)
|
|
19
|
+
return 1;
|
|
20
|
+
return Math.min(parsed, 1024);
|
|
21
|
+
}
|
|
22
|
+
export function libuvPoolSize() {
|
|
23
|
+
const applied = globalThis[APPLIED_POOL];
|
|
24
|
+
if (typeof applied === "number")
|
|
25
|
+
return applied;
|
|
26
|
+
return libuvPoolSizeFrom(process.env.UV_THREADPOOL_SIZE);
|
|
27
|
+
}
|
|
28
|
+
/** Upload writes leave two threads for DNS and other filesystem work.
|
|
29
|
+
* A pool of one cannot spare them; that is the size the operator set. */
|
|
30
|
+
export function uploadWriteSlots() {
|
|
31
|
+
return Math.max(1, libuvPoolSize() - 2);
|
|
32
|
+
}
|
|
33
|
+
/** One queue. `acquire` resolves with a release function. A caller who finds
|
|
34
|
+
* the gate full waits on that promise (the event loop), not a spin. `wake`
|
|
35
|
+
* rechecks every waiter, so a cancellation rejects without waiting for a slot.
|
|
36
|
+
* Release is idempotent and hands the slot to the oldest waiter. */
|
|
37
|
+
export function createUploadWriteGate(slots) {
|
|
38
|
+
let active = 0;
|
|
39
|
+
const queue = [];
|
|
40
|
+
const attemptOf = (cancelled, settle) => {
|
|
41
|
+
const attempt = () => {
|
|
42
|
+
const index = queue.indexOf(attempt);
|
|
43
|
+
if (index >= 0)
|
|
44
|
+
queue.splice(index, 1);
|
|
45
|
+
try {
|
|
46
|
+
cancelled?.();
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
settle.reject(error);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (active >= slots()) {
|
|
53
|
+
queue.push(attempt);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
active += 1;
|
|
57
|
+
let released = false;
|
|
58
|
+
settle.resolve(() => {
|
|
59
|
+
if (released)
|
|
60
|
+
return;
|
|
61
|
+
released = true;
|
|
62
|
+
active -= 1;
|
|
63
|
+
queue.shift()?.();
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
return attempt;
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
acquire(cancelled) {
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
attemptOf(cancelled, { resolve, reject })();
|
|
72
|
+
});
|
|
73
|
+
},
|
|
74
|
+
wake() {
|
|
75
|
+
const pending = queue.splice(0, queue.length);
|
|
76
|
+
for (const attempt of pending)
|
|
77
|
+
attempt();
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const uploadWrites = createUploadWriteGate(uploadWriteSlots);
|
|
82
|
+
/** One pool operation under one upload slot, released when the operation settles.
|
|
83
|
+
* Callers do not hold a slot while they wait for network bytes. */
|
|
84
|
+
export async function withUploadWriteSlot(cancelled, operation) {
|
|
85
|
+
const release = await uploadWrites.acquire(cancelled);
|
|
86
|
+
try {
|
|
87
|
+
return await operation();
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
release();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export function wakeUploadWriteSlots() {
|
|
94
|
+
uploadWrites.wake();
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=libuv-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"libuv-pool.js","sourceRoot":"","sources":["../../src/store/libuv-pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maintenance-worker.d.ts","sourceRoot":"","sources":["../../src/store/maintenance-worker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"maintenance-worker.d.ts","sourceRoot":"","sources":["../../src/store/maintenance-worker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAS7F,OAAO,KAAK,EAKV,qBAAqB,EAGtB,MAAM,kBAAkB,CAAC;AAuI1B,2FAA2F;AAC3F,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
|
|
@@ -7,6 +7,7 @@ import { STORE_WORKER_DATA_KEY } from "./flusher-protocol.js";
|
|
|
7
7
|
import { loadEngineRuntime } from "./runtime.js";
|
|
8
8
|
import { runLegacyImport } from "./importer.js";
|
|
9
9
|
import { discoverLegacyPartitions } from "./import-discovery.js";
|
|
10
|
+
import { readThreadClosure } from "./thread-closure.js";
|
|
10
11
|
const BLOB_NAME = /^[0-9a-f]{64}$/;
|
|
11
12
|
const PART_NAME = /^(.+)\.part$/;
|
|
12
13
|
const SQLITE_CORRUPT = 11;
|
|
@@ -107,10 +108,47 @@ function sweepCandidates(db, request) {
|
|
|
107
108
|
result.durationMs = performance.now() - started;
|
|
108
109
|
return result;
|
|
109
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* One thread's closure in one read-only snapshot. Its first read fixes the snapshot
|
|
113
|
+
* and proves which store it is; every closure row then comes from that snapshot, so
|
|
114
|
+
* no commit in between can tear it. It writes nothing and always ends here, so the
|
|
115
|
+
* WAL is never held past this request.
|
|
116
|
+
*/
|
|
117
|
+
function threadClosure(db, prepare, request, barrier) {
|
|
118
|
+
db.exec("BEGIN");
|
|
119
|
+
try {
|
|
120
|
+
const identity = prepare("SELECT value FROM meta WHERE key='store_id'").get();
|
|
121
|
+
if ((identity?.value ?? null) !== request.storeId)
|
|
122
|
+
throw new Error("the maintenance snapshot does not read this engine store");
|
|
123
|
+
if (barrier)
|
|
124
|
+
parkAtBarrier(barrier);
|
|
125
|
+
return readThreadClosure({ prepare, storeId: request.storeId ?? undefined }, request.threadId);
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
if (db.isTransaction)
|
|
129
|
+
db.exec("ROLLBACK");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/** Test seam (`MaintenanceWorkerHooks.closureBarrier`): wait for this arrival's release. */
|
|
133
|
+
function parkAtBarrier(buffer) {
|
|
134
|
+
const slots = new Int32Array(buffer);
|
|
135
|
+
const arrival = Atomics.add(slots, 0, 1) + 1;
|
|
136
|
+
Atomics.notify(slots, 0);
|
|
137
|
+
for (let released = Atomics.load(slots, 1); released < arrival; released = Atomics.load(slots, 1))
|
|
138
|
+
Atomics.wait(slots, 1, released);
|
|
139
|
+
}
|
|
110
140
|
/** `node:sqlite` is imported lazily: the daemon package must load on a Node without it. */
|
|
111
141
|
export async function runMaintenanceWorker(port, data) {
|
|
112
142
|
const { sqlite } = await loadEngineRuntime();
|
|
113
143
|
const db = new sqlite.DatabaseSync(data.dbPath, { readOnly: true, timeout: 0 });
|
|
144
|
+
// Cached per SQL text for the connection's life, as the writer caches its own.
|
|
145
|
+
const statements = new Map();
|
|
146
|
+
const prepare = (sql) => {
|
|
147
|
+
let statement = statements.get(sql);
|
|
148
|
+
if (!statement)
|
|
149
|
+
statements.set(sql, (statement = db.prepare(sql)));
|
|
150
|
+
return statement;
|
|
151
|
+
};
|
|
114
152
|
port.on("message", (request) => {
|
|
115
153
|
let response;
|
|
116
154
|
try {
|
|
@@ -124,6 +162,13 @@ export async function runMaintenanceWorker(port, data) {
|
|
|
124
162
|
case "sweep_candidates":
|
|
125
163
|
response = { id: request.id, ok: true, result: sweepCandidates(db, request) };
|
|
126
164
|
break;
|
|
165
|
+
case "thread_closure":
|
|
166
|
+
response = {
|
|
167
|
+
id: request.id,
|
|
168
|
+
ok: true,
|
|
169
|
+
result: threadClosure(db, prepare, request, data.hooks?.closureBarrier),
|
|
170
|
+
};
|
|
171
|
+
break;
|
|
127
172
|
}
|
|
128
173
|
}
|
|
129
174
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maintenance-worker.js","sourceRoot":"","sources":["../../src/store/maintenance-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAoB,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"maintenance-worker.js","sourceRoot":"","sources":["../../src/store/maintenance-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { BlobFiles } from "./blob-files.js";
|
|
2
2
|
import { STORE_WORKER_DATA_KEY } from "./flusher-protocol.js";
|
|
3
3
|
import type { EngineStore } from "./store.js";
|
|
4
|
+
import type { ThreadClosure } from "./thread-closure.js";
|
|
4
5
|
import "./maintenance-worker.js";
|
|
5
6
|
export interface MaintenanceWorkerData {
|
|
6
7
|
[STORE_WORKER_DATA_KEY]: "maintenance";
|
|
7
8
|
dbPath: string;
|
|
9
|
+
hooks?: MaintenanceWorkerHooks;
|
|
10
|
+
}
|
|
11
|
+
/** Test seams, inert unless set (the flusher's `FlusherHooks` precedent). */
|
|
12
|
+
export interface MaintenanceWorkerHooks {
|
|
13
|
+
/** A closure read parks here inside its snapshot, once the snapshot is fixed and
|
|
14
|
+
* before any closure row is read: slot 0 counts arrivals, and a read goes on once
|
|
15
|
+
* slot 1 reaches its own arrival number. */
|
|
16
|
+
closureBarrier?: SharedArrayBuffer;
|
|
8
17
|
}
|
|
9
18
|
/** Requests are a discriminated union: the importer (PR-D) adds its kind here
|
|
10
19
|
* and a handler in the worker; nothing else changes. */
|
|
@@ -22,6 +31,12 @@ export type MaintenanceRequest = {
|
|
|
22
31
|
uploadsDir: string;
|
|
23
32
|
/** Files whose mtime is at or after this epoch-ms instant are left alone. */
|
|
24
33
|
olderThanMs: number;
|
|
34
|
+
} | {
|
|
35
|
+
id: number;
|
|
36
|
+
kind: "thread_closure";
|
|
37
|
+
threadId: string;
|
|
38
|
+
/** The store the snapshot must prove it reads. */
|
|
39
|
+
storeId: string | null;
|
|
25
40
|
};
|
|
26
41
|
export interface IntegrityReport {
|
|
27
42
|
ok: boolean;
|
|
@@ -64,7 +79,7 @@ export interface SweepReport extends Omit<SweepCandidates, "candidates"> {
|
|
|
64
79
|
export type MaintenanceResponse = {
|
|
65
80
|
id: number;
|
|
66
81
|
ok: true;
|
|
67
|
-
result: IntegrityReport | ExportReport | SweepCandidates;
|
|
82
|
+
result: IntegrityReport | ExportReport | SweepCandidates | ThreadClosure | null;
|
|
68
83
|
} | {
|
|
69
84
|
id: number;
|
|
70
85
|
ok: false;
|
|
@@ -78,6 +93,7 @@ export interface MaintenanceControllerOptions {
|
|
|
78
93
|
processStartedAt?: number;
|
|
79
94
|
/** The store's blob owner (one per store: it holds the unref generations). */
|
|
80
95
|
blobs?: BlobFiles;
|
|
96
|
+
hooks?: MaintenanceWorkerHooks;
|
|
81
97
|
}
|
|
82
98
|
/**
|
|
83
99
|
* Maintenance (SYNTHESIS_R5 §2, §6.5, §7 p.6; R5_AMENDMENTS A4, C2, C9):
|
|
@@ -86,7 +102,9 @@ export interface MaintenanceControllerOptions {
|
|
|
86
102
|
* The worker owns a separate read-only connection, never shares a thread or
|
|
87
103
|
* connection with the flusher, never writes a row, and only ENUMERATES sweep
|
|
88
104
|
* candidates older than the process start; every removal is decided on the
|
|
89
|
-
* main thread through the one owner-generation unlink rule (C10).
|
|
105
|
+
* main thread through the one owner-generation unlink rule (C10). Its snapshot
|
|
106
|
+
* also answers a thread's closure for an export's observation; every decision
|
|
107
|
+
* reads the closure again on the writer, inside the deciding transaction.
|
|
90
108
|
*/
|
|
91
109
|
export declare class MaintenanceController {
|
|
92
110
|
private readonly store;
|
|
@@ -104,6 +122,14 @@ export declare class MaintenanceController {
|
|
|
104
122
|
integrityCheck(): Promise<IntegrityReport>;
|
|
105
123
|
/** `VACUUM INTO target`: a consistent snapshot copy, written by the worker. */
|
|
106
124
|
exportTo(target: string): Promise<ExportReport>;
|
|
125
|
+
/**
|
|
126
|
+
* The thread's closure as one read-only snapshot holds it, read on the worker so
|
|
127
|
+
* the writer's thread stays free. An observation only: retirement reads it again
|
|
128
|
+
* inside its own transaction. `signal` ends the caller's wait alone. A read the
|
|
129
|
+
* worker has not taken leaves the queue; one it has taken keeps the worker until
|
|
130
|
+
* it ends, and its answer is dropped.
|
|
131
|
+
*/
|
|
132
|
+
threadClosure(threadId: string, signal?: AbortSignal): Promise<ThreadClosure | null>;
|
|
107
133
|
/** The worker's candidate list for files older than the process start (test seam). */
|
|
108
134
|
sweepCandidates(): Promise<SweepCandidates>;
|
|
109
135
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../src/store/maintenance.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAA2B,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"maintenance.d.ts","sourceRoot":"","sources":["../../src/store/maintenance.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,9 @@ import "./maintenance-worker.js";
|
|
|
14
14
|
* The worker owns a separate read-only connection, never shares a thread or
|
|
15
15
|
* connection with the flusher, never writes a row, and only ENUMERATES sweep
|
|
16
16
|
* candidates older than the process start; every removal is decided on the
|
|
17
|
-
* main thread through the one owner-generation unlink rule (C10).
|
|
17
|
+
* main thread through the one owner-generation unlink rule (C10). Its snapshot
|
|
18
|
+
* also answers a thread's closure for an export's observation; every decision
|
|
19
|
+
* reads the closure again on the writer, inside the deciding transaction.
|
|
18
20
|
*/
|
|
19
21
|
export class MaintenanceController {
|
|
20
22
|
store;
|
|
@@ -46,6 +48,16 @@ export class MaintenanceController {
|
|
|
46
48
|
exportTo(target) {
|
|
47
49
|
return this.run({ id: 0, kind: "vacuum_into", target });
|
|
48
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* The thread's closure as one read-only snapshot holds it, read on the worker so
|
|
53
|
+
* the writer's thread stays free. An observation only: retirement reads it again
|
|
54
|
+
* inside its own transaction. `signal` ends the caller's wait alone. A read the
|
|
55
|
+
* worker has not taken leaves the queue; one it has taken keeps the worker until
|
|
56
|
+
* it ends, and its answer is dropped.
|
|
57
|
+
*/
|
|
58
|
+
threadClosure(threadId, signal) {
|
|
59
|
+
return this.run({ id: 0, kind: "thread_closure", threadId, storeId: this.store.storeId ?? null }, signal);
|
|
60
|
+
}
|
|
49
61
|
/** The worker's candidate list for files older than the process start (test seam). */
|
|
50
62
|
sweepCandidates() {
|
|
51
63
|
return this.run({
|
|
@@ -113,16 +125,33 @@ export class MaintenanceController {
|
|
|
113
125
|
if (worker)
|
|
114
126
|
await worker.terminate();
|
|
115
127
|
}
|
|
116
|
-
run(request) {
|
|
128
|
+
run(request, signal) {
|
|
117
129
|
if (this.closing) {
|
|
118
130
|
return Promise.reject(new StoreError("store_closed", 503, false, "engine store is closing"));
|
|
119
131
|
}
|
|
132
|
+
if (signal?.aborted)
|
|
133
|
+
return Promise.reject(signal.reason);
|
|
120
134
|
return new Promise((resolve, reject) => {
|
|
121
|
-
|
|
135
|
+
const leave = () => {
|
|
136
|
+
const queued = this.queue.indexOf(pending);
|
|
137
|
+
if (queued >= 0)
|
|
138
|
+
this.queue.splice(queued, 1);
|
|
139
|
+
reject(signal.reason);
|
|
140
|
+
};
|
|
141
|
+
const settled = () => signal?.removeEventListener("abort", leave);
|
|
142
|
+
const pending = {
|
|
122
143
|
request: { ...request, id: this.nextId++ },
|
|
123
|
-
resolve:
|
|
124
|
-
|
|
125
|
-
|
|
144
|
+
resolve: (value) => {
|
|
145
|
+
settled();
|
|
146
|
+
resolve(value);
|
|
147
|
+
},
|
|
148
|
+
reject: (error) => {
|
|
149
|
+
settled();
|
|
150
|
+
reject(error);
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
signal?.addEventListener("abort", leave, { once: true });
|
|
154
|
+
this.queue.push(pending);
|
|
126
155
|
this.pump();
|
|
127
156
|
});
|
|
128
157
|
}
|
|
@@ -139,6 +168,7 @@ export class MaintenanceController {
|
|
|
139
168
|
const data = {
|
|
140
169
|
[STORE_WORKER_DATA_KEY]: "maintenance",
|
|
141
170
|
dbPath: this.store.paths.database,
|
|
171
|
+
...(this.options.hooks ? { hooks: this.options.hooks } : {}),
|
|
142
172
|
};
|
|
143
173
|
const worker = new Worker(this.entry, {
|
|
144
174
|
workerData: data,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../src/store/maintenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"maintenance.js","sourceRoot":"","sources":["../../src/store/maintenance.ts"],"names":[],"mappings":"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"}
|