orez 0.2.25 → 0.2.26
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/cf-do/watermark.d.ts +21 -0
- package/dist/cf-do/watermark.d.ts.map +1 -0
- package/dist/cf-do/watermark.js +93 -0
- package/dist/cf-do/watermark.js.map +1 -0
- package/dist/cf-do/worker.d.ts +48 -22
- package/dist/cf-do/worker.d.ts.map +1 -1
- package/dist/cf-do/worker.js +642 -269
- package/dist/cf-do/worker.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/do-sql-tracking.d.ts +6 -0
- package/dist/do-sql-tracking.d.ts.map +1 -0
- package/dist/do-sql-tracking.js +14 -0
- package/dist/do-sql-tracking.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -14
- package/dist/index.js.map +1 -1
- package/dist/pg-proxy-browser.js +6 -6
- package/dist/pg-proxy-browser.js.map +1 -1
- package/dist/pg-proxy-do-backend.d.ts +96 -17
- package/dist/pg-proxy-do-backend.d.ts.map +1 -1
- package/dist/pg-proxy-do-backend.js +6033 -454
- package/dist/pg-proxy-do-backend.js.map +1 -1
- package/dist/replication/change-tracker.d.ts.map +1 -1
- package/dist/replication/change-tracker.js +18 -1
- package/dist/replication/change-tracker.js.map +1 -1
- package/dist/replication/handler.d.ts.map +1 -1
- package/dist/replication/handler.js +7 -2
- package/dist/replication/handler.js.map +1 -1
- package/dist/replication/pgoutput-encoder.d.ts.map +1 -1
- package/dist/replication/pgoutput-encoder.js +72 -30
- package/dist/replication/pgoutput-encoder.js.map +1 -1
- package/dist/worker/browser-build-config.d.ts.map +1 -1
- package/dist/worker/browser-build-config.js +2 -1
- package/dist/worker/browser-build-config.js.map +1 -1
- package/dist/worker/cf-patches.d.ts +5 -2
- package/dist/worker/cf-patches.d.ts.map +1 -1
- package/dist/worker/cf-patches.js +238 -4
- package/dist/worker/cf-patches.js.map +1 -1
- package/dist/worker/shims/node-stub.d.ts +35 -0
- package/dist/worker/shims/node-stub.d.ts.map +1 -1
- package/dist/worker/shims/node-stub.js +53 -1
- package/dist/worker/shims/node-stub.js.map +1 -1
- package/dist/worker/shims/oxfmt.d.ts +4 -0
- package/dist/worker/shims/oxfmt.d.ts.map +1 -0
- package/dist/worker/shims/oxfmt.js +4 -0
- package/dist/worker/shims/oxfmt.js.map +1 -0
- package/dist/worker/shims/postgres-socket.js +1 -1
- package/dist/worker/shims/postgres-socket.js.map +1 -1
- package/dist/worker/shims/sqlite.d.ts +1 -0
- package/dist/worker/shims/sqlite.d.ts.map +1 -1
- package/dist/worker/shims/sqlite.js +229 -9
- package/dist/worker/shims/sqlite.js.map +1 -1
- package/dist/worker/shims/ws.d.ts.map +1 -1
- package/dist/worker/shims/ws.js +45 -0
- package/dist/worker/shims/ws.js.map +1 -1
- package/dist/worker/shims/zero-process-env.d.ts +2 -0
- package/dist/worker/shims/zero-process-env.d.ts.map +1 -0
- package/dist/worker/shims/zero-process-env.js +9 -0
- package/dist/worker/shims/zero-process-env.js.map +1 -0
- package/dist/worker/zero-cache-embed-cf.d.ts +29 -12
- package/dist/worker/zero-cache-embed-cf.d.ts.map +1 -1
- package/dist/worker/zero-cache-embed-cf.js +83 -14
- package/dist/worker/zero-cache-embed-cf.js.map +1 -1
- package/package.json +6 -2
- package/src/cf-do/.wrangler/cache/cf.json +1 -0
- package/src/cf-do/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-shm +0 -0
- package/src/cf-do/.wrangler/state/v3/cache/miniflare-CacheObject/metadata.sqlite-wal +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/0f0f3bdf0abda097eb6f1246db4657d9fc622081362d894d82c1a1ce067b05b6.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/1ddd3a4a48a11b51658444f5458a1fb175194b1d5b6a5bda20ef3fe3205b900c.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/204a39120310d37e972c5914cfd71ad55c151bdb9e8ed289a5f8c5b052dd60e4.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/3835f242df9728adba3d127a238793fd054ed3e51df3f60749ee744c469bf2a2.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/4aa9c80eb716cf55b8995ccf7afab0b36c683e6da07d7c37a3f9c570136036df.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/533e2fd1d6ea46e7a9a0017916ef341802d438d72583462755f2c1f8225e9bf2.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/5ffa1aced1225ecaeac6366f7586aa3de92761cdff8711d81fbd81f248076abd.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/686c3a9f0d7e59ed2ab607efd4b76d779c97cafeb3818380033bf7c7eb86c819.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/6e8214e8dcfadd0deb52d64e5e9ca85c6b329ace11193909845995396914c473.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/78d9ec9ff873d3fe3507ff53c2a6f6dfc408b4268eb0db3f2a146c0678965366.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/7eff9f0ed7e27ad0d3f9d923de0682fab1928591172c1ba336c5f79a134a5d85.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/836cda5b995b25867d722ed4f4c2292167e80351a3c6038db626648eb247dd8b.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/91ef63b112209ab30172763acd8a0935106c248f7f1bcae5545ce37a9f201551.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/a66ea4293a5f5938bc6d116edfa2522bb85bc37aea3541fbc09c3b613b9b32c0.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/ceb2ab26b80590840b65651deb6e948d3bf81565c6751f3a58752cf4bf4aecae.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/metadata.sqlite +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/metadata.sqlite-shm +0 -0
- package/src/cf-do/.wrangler/state/v3/do/zero-do-ZeroDO/metadata.sqlite-wal +0 -0
- package/src/cf-do/ARCHITECTURE.md +83 -0
- package/src/cf-do/watermark.test.ts +103 -0
- package/src/cf-do/watermark.ts +118 -0
- package/src/cf-do/worker.ts +1033 -0
- package/src/cf-do/wrangler.toml +11 -0
- package/src/config.ts +1 -1
- package/src/do-sql-tracking.test.ts +19 -0
- package/src/do-sql-tracking.ts +19 -0
- package/src/index.ts +29 -14
- package/src/pg-proxy-browser.ts +6 -6
- package/src/pg-proxy-do-backend.test.ts +3890 -0
- package/src/pg-proxy-do-backend.ts +6799 -482
- package/src/replication/change-tracker.ts +16 -1
- package/src/replication/handler.test.ts +35 -0
- package/src/replication/handler.ts +7 -2
- package/src/replication/pgoutput-encoder.test.ts +71 -2
- package/src/replication/pgoutput-encoder.ts +65 -30
- package/src/worker/browser-build-config.test.ts +12 -0
- package/src/worker/browser-build-config.ts +2 -1
- package/src/worker/cf-patches.ts +274 -4
- package/src/worker/shims/node-stub.ts +53 -1
- package/src/worker/shims/oxfmt.ts +3 -0
- package/src/worker/shims/postgres-socket.ts +1 -1
- package/src/worker/shims/sqlite.test.ts +145 -0
- package/src/worker/shims/sqlite.ts +256 -9
- package/src/worker/shims/ws.ts +45 -0
- package/src/worker/shims/zero-process-env.ts +11 -0
- package/src/worker/zero-cache-embed-cf.ts +114 -18
- package/src/query-rewrites.test.ts +0 -30
- package/src/query-rewrites.ts +0 -152
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface DurableSqlResult {
|
|
2
|
+
one(): Record<string, unknown> | undefined;
|
|
3
|
+
toArray(): Array<Record<string, unknown>>;
|
|
4
|
+
}
|
|
5
|
+
export interface DurableSqlStorage {
|
|
6
|
+
exec(sql: string, ...params: unknown[]): DurableSqlResult;
|
|
7
|
+
}
|
|
8
|
+
export declare class DurableWatermarkState {
|
|
9
|
+
private readonly sql;
|
|
10
|
+
constructor(sql: DurableSqlStorage);
|
|
11
|
+
ensureTables(): void;
|
|
12
|
+
next(): number;
|
|
13
|
+
mark(watermark: number): void;
|
|
14
|
+
current(): number;
|
|
15
|
+
private watermarkState;
|
|
16
|
+
private setWatermarkState;
|
|
17
|
+
private watermarkSequenceValue;
|
|
18
|
+
private watermarkSequenceTables;
|
|
19
|
+
private updateWatermarkSequences;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=watermark.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watermark.d.ts","sourceRoot":"","sources":["../../src/cf-do/watermark.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAC1C,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAC1C;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAA;CAC1D;AAaD,qBAAa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,iBAAiB;IAEnD,YAAY,IAAI,IAAI;IAUpB,IAAI,IAAI,MAAM;IAId,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAK7B,OAAO,IAAI,MAAM;IAcjB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,uBAAuB;IAU/B,OAAO,CAAC,wBAAwB;CAiBjC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
const WATERMARK_STATE_TABLE = '_zero_change_state';
|
|
2
|
+
function quoteIdent(name) {
|
|
3
|
+
return `"${name.replace(/"/g, '""')}"`;
|
|
4
|
+
}
|
|
5
|
+
function finitePositiveNumber(value) {
|
|
6
|
+
const number = Number(value ?? 0);
|
|
7
|
+
return Number.isFinite(number) && number > 0 ? number : 0;
|
|
8
|
+
}
|
|
9
|
+
export class DurableWatermarkState {
|
|
10
|
+
sql;
|
|
11
|
+
constructor(sql) {
|
|
12
|
+
this.sql = sql;
|
|
13
|
+
}
|
|
14
|
+
ensureTables() {
|
|
15
|
+
this.sql.exec("CREATE TABLE IF NOT EXISTS _zero_changes (watermark INTEGER PRIMARY KEY AUTOINCREMENT, table_name TEXT NOT NULL, op TEXT NOT NULL CHECK (op IN ('INSERT', 'UPDATE', 'DELETE')), row_data TEXT, old_data TEXT, created_at INTEGER NOT NULL DEFAULT (unixepoch()))");
|
|
16
|
+
this.sql.exec(`CREATE TABLE IF NOT EXISTS ${quoteIdent(WATERMARK_STATE_TABLE)} (id INTEGER PRIMARY KEY CHECK (id = 1), last_value INTEGER NOT NULL DEFAULT 0)`);
|
|
17
|
+
this.setWatermarkState(this.watermarkState());
|
|
18
|
+
}
|
|
19
|
+
next() {
|
|
20
|
+
return this.current() + 1;
|
|
21
|
+
}
|
|
22
|
+
mark(watermark) {
|
|
23
|
+
this.setWatermarkState(watermark);
|
|
24
|
+
this.updateWatermarkSequences(watermark);
|
|
25
|
+
}
|
|
26
|
+
current() {
|
|
27
|
+
this.ensureTables();
|
|
28
|
+
const state = this.watermarkState();
|
|
29
|
+
const row = this.sql
|
|
30
|
+
.exec('SELECT COALESCE(MAX(watermark), 0) AS watermark FROM _zero_changes')
|
|
31
|
+
.one();
|
|
32
|
+
const tableWatermark = finitePositiveNumber(row?.watermark);
|
|
33
|
+
const sequenceWatermark = this.watermarkSequenceValue();
|
|
34
|
+
const watermark = Math.max(state, tableWatermark, sequenceWatermark);
|
|
35
|
+
if (watermark > state)
|
|
36
|
+
this.setWatermarkState(watermark);
|
|
37
|
+
if (watermark > sequenceWatermark)
|
|
38
|
+
this.updateWatermarkSequences(watermark);
|
|
39
|
+
return watermark;
|
|
40
|
+
}
|
|
41
|
+
watermarkState() {
|
|
42
|
+
try {
|
|
43
|
+
const table = quoteIdent(WATERMARK_STATE_TABLE);
|
|
44
|
+
const row = this.sql.exec(`SELECT last_value FROM ${table} WHERE id = 1`).one();
|
|
45
|
+
return finitePositiveNumber(row?.last_value);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
setWatermarkState(watermark) {
|
|
52
|
+
const table = quoteIdent(WATERMARK_STATE_TABLE);
|
|
53
|
+
this.sql.exec(`INSERT OR IGNORE INTO ${table} (id, last_value) VALUES (1, 0)`);
|
|
54
|
+
this.sql.exec(`UPDATE ${table} SET last_value = ? WHERE id = 1`, watermark);
|
|
55
|
+
}
|
|
56
|
+
watermarkSequenceValue() {
|
|
57
|
+
let watermark = 0;
|
|
58
|
+
for (const name of this.watermarkSequenceTables()) {
|
|
59
|
+
try {
|
|
60
|
+
const row = this.sql
|
|
61
|
+
.exec(`SELECT last_value, is_called FROM ${quoteIdent(name)} WHERE dummy = 1`)
|
|
62
|
+
.one();
|
|
63
|
+
if (!row || !row.is_called)
|
|
64
|
+
continue;
|
|
65
|
+
watermark = Math.max(watermark, finitePositiveNumber(row.last_value));
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
/* not an orez sequence table */
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return watermark;
|
|
72
|
+
}
|
|
73
|
+
watermarkSequenceTables() {
|
|
74
|
+
return this.sql
|
|
75
|
+
.exec("SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%zero_watermark%'")
|
|
76
|
+
.toArray()
|
|
77
|
+
.map((row) => String(row.name || ''))
|
|
78
|
+
.filter(Boolean);
|
|
79
|
+
}
|
|
80
|
+
updateWatermarkSequences(watermark) {
|
|
81
|
+
for (const name of this.watermarkSequenceTables()) {
|
|
82
|
+
const table = quoteIdent(name);
|
|
83
|
+
try {
|
|
84
|
+
this.sql.exec(`INSERT OR IGNORE INTO ${table} (dummy, last_value, is_called) VALUES (1, ?, 1)`, watermark);
|
|
85
|
+
this.sql.exec(`UPDATE ${table} SET last_value = ?, is_called = 1 WHERE dummy = 1`, watermark);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
/* not an orez sequence table */
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=watermark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watermark.js","sourceRoot":"","sources":["../../src/cf-do/watermark.ts"],"names":[],"mappings":"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"}
|
package/dist/cf-do/worker.d.ts
CHANGED
|
@@ -1,46 +1,80 @@
|
|
|
1
1
|
import { DurableObject } from 'cloudflare:workers';
|
|
2
2
|
/**
|
|
3
|
-
* zero-do:
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* zero-do: Durable Object that exposes raw SQL execution over ctx.storage.sql.
|
|
4
|
+
*
|
|
5
|
+
* The production Cloudflare path runs real zero-cache via
|
|
6
|
+
* src/worker/zero-cache-embed-cf.ts, with DoBackend calling this DO for
|
|
7
|
+
* Postgres-protocol-backed SQL. The WS sync handler here is kept for
|
|
8
|
+
* development/protocol experiments only; it is not the production replacement
|
|
9
|
+
* for zero-cache.
|
|
10
|
+
*
|
|
11
|
+
* Modes:
|
|
12
|
+
* WS /sync/v49/connect — bespoke Zero sync protocol (dev/protocol testing)
|
|
13
|
+
* POST /exec — raw SQL execution (from DoBackend adapter)
|
|
14
|
+
* POST /batch — atomic batch execution via ctx.storage.transaction()
|
|
6
15
|
*/
|
|
7
16
|
interface Env {
|
|
8
17
|
ZERO_DO: DurableObjectNamespace;
|
|
9
18
|
}
|
|
10
19
|
export declare class ZeroDO extends DurableObject {
|
|
11
20
|
private sql;
|
|
12
|
-
private
|
|
21
|
+
private watermarks;
|
|
13
22
|
private schemaTables;
|
|
23
|
+
private tableSchemas;
|
|
14
24
|
constructor(ctx: DurableObjectState, env: Env);
|
|
15
25
|
fetch(request: Request): Promise<Response>;
|
|
16
26
|
private handleSyncConnect;
|
|
17
27
|
webSocketMessage(socket: WebSocket, messageData: string | ArrayBuffer): Promise<void>;
|
|
18
|
-
webSocketClose(
|
|
28
|
+
webSocketClose(_socket: WebSocket, _code: number, _reason: string, _wasClean: boolean): void;
|
|
19
29
|
private applyDesiredQueries;
|
|
30
|
+
private applyDesiredQueryPatch;
|
|
31
|
+
private gotQueriesPatch;
|
|
32
|
+
private rowsPatchForTables;
|
|
20
33
|
private resolveTablesFromPatch;
|
|
21
34
|
private extractTableFromAST;
|
|
22
35
|
private handlePush;
|
|
23
36
|
private handleHttpPush;
|
|
37
|
+
private handlePull;
|
|
38
|
+
private handleExec;
|
|
39
|
+
/** Execute multiple statements atomically via ctx.storage.transaction() */
|
|
40
|
+
private handleBatch;
|
|
41
|
+
private handleChanges;
|
|
42
|
+
private executeSQL;
|
|
43
|
+
private cursorRows;
|
|
44
|
+
private applyMutation;
|
|
45
|
+
private applyTableMutation;
|
|
46
|
+
private tableActionFromMutationName;
|
|
47
|
+
private tableNameFromOperationName;
|
|
24
48
|
private applyCrudMutation;
|
|
49
|
+
private insertRow;
|
|
25
50
|
private upsertRow;
|
|
26
51
|
private updateRow;
|
|
27
52
|
private deleteRow;
|
|
28
53
|
private appendChange;
|
|
54
|
+
private appendTrackedChange;
|
|
29
55
|
private readChangesSince;
|
|
30
|
-
private
|
|
31
|
-
private ensureInternalTables;
|
|
56
|
+
private watermark;
|
|
32
57
|
private ensureSchemaTables;
|
|
33
|
-
private
|
|
34
|
-
private
|
|
58
|
+
private ensureSchemaMetadataTable;
|
|
59
|
+
private schemaForTable;
|
|
35
60
|
private tableExists;
|
|
36
61
|
private readAllRows;
|
|
62
|
+
private readRowByPrimaryKey;
|
|
63
|
+
private primaryKeyWhere;
|
|
64
|
+
private primaryKeyForTable;
|
|
65
|
+
private storageRow;
|
|
66
|
+
private storageColumnValue;
|
|
67
|
+
private normalizeRow;
|
|
37
68
|
private sendSyncPoke;
|
|
38
69
|
private broadcastPoke;
|
|
70
|
+
private broadcastMutationPoke;
|
|
39
71
|
private syncRowPatchFromChange;
|
|
40
|
-
private
|
|
72
|
+
private primaryKeyValue;
|
|
73
|
+
private cookie;
|
|
74
|
+
private nextCookie;
|
|
75
|
+
private readSocketAttachment;
|
|
41
76
|
private sendJSON;
|
|
42
77
|
private parseMessage;
|
|
43
|
-
private decodeInitConnection;
|
|
44
78
|
}
|
|
45
79
|
declare const _default: {
|
|
46
80
|
fetch(request: Request, env: Env): Promise<Response>;
|
|
@@ -49,17 +83,9 @@ export default _default;
|
|
|
49
83
|
interface DurableObjectState {
|
|
50
84
|
storage: {
|
|
51
85
|
sql: any;
|
|
86
|
+
transaction<T>(fn: () => T | Promise<T>): Promise<T>;
|
|
52
87
|
};
|
|
53
|
-
acceptWebSocket(socket: WebSocket): void;
|
|
54
|
-
getWebSockets(): WebSocket[];
|
|
55
|
-
}
|
|
56
|
-
interface DurableObjectNamespace {
|
|
57
|
-
idFromName(name: string): DurableObjectId;
|
|
58
|
-
get(id: DurableObjectId): DurableObjectStub;
|
|
59
|
-
}
|
|
60
|
-
interface DurableObjectId {
|
|
61
|
-
}
|
|
62
|
-
interface DurableObjectStub {
|
|
63
|
-
fetch(request: Request): Promise<Response>;
|
|
88
|
+
acceptWebSocket(socket: WebSocket, tags?: string[]): void;
|
|
89
|
+
getWebSockets(tag?: string): WebSocket[];
|
|
64
90
|
}
|
|
65
91
|
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/cf-do/worker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/cf-do/worker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAKlD;;;;;;;;;;;;;GAaG;AAEH,UAAU,GAAG;IACX,OAAO,EAAE,sBAAsB,CAAA;CAChC;AAgGD,qBAAa,MAAO,SAAQ,aAAa;IACvC,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,YAAY,CAAiC;gBAEzC,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG;IAMvC,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkChD,OAAO,CAAC,iBAAiB;IA0CnB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,WAAW;IA8B3E,cAAc,CACZ,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,OAAO;IAGpB,OAAO,CAAC,mBAAmB;IAgC3B,OAAO,CAAC,sBAAsB;IA6B9B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,UAAU;YAqBJ,cAAc;IA0B5B,OAAO,CAAC,UAAU;YAcJ,UAAU;IAqBxB,2EAA2E;YAC7D,WAAW;YAgCX,aAAa;IA0B3B,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,2BAA2B;IAKnC,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,kBAAkB;IA6B1B,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,qBAAqB;IAsC7B,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,YAAY;CAOrB;;mBAGsB,OAAO,OAAO,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;;AAD5D,wBA8BC;AAqBD,UAAU,kBAAkB;IAC1B,OAAO,EAAE;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,CAAA;IAC3E,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACzD,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CAAA;CACzC"}
|