orez-lite 0.9.7
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/LICENSE +21 -0
- package/README.md +12 -0
- package/dist/browser/generated/sqlite3-browser.wasm +0 -0
- package/dist/browser/generated/sync_wasm.js +922 -0
- package/dist/browser/generated/sync_wasm_bg.wasm +0 -0
- package/dist/browser/host.d.ts +10 -0
- package/dist/browser/host.d.ts.map +1 -0
- package/dist/browser/host.js +496 -0
- package/dist/browser/host.js.map +1 -0
- package/dist/browser/idb-snapshot.d.ts +11 -0
- package/dist/browser/idb-snapshot.d.ts.map +1 -0
- package/dist/browser/idb-snapshot.js +122 -0
- package/dist/browser/idb-snapshot.js.map +1 -0
- package/dist/browser/index.d.ts +5 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +5 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/message-port.d.ts +7 -0
- package/dist/browser/message-port.d.ts.map +1 -0
- package/dist/browser/message-port.js +188 -0
- package/dist/browser/message-port.js.map +1 -0
- package/dist/browser/sqlite-adapter.d.ts +53 -0
- package/dist/browser/sqlite-adapter.d.ts.map +1 -0
- package/dist/browser/sqlite-adapter.js +126 -0
- package/dist/browser/sqlite-adapter.js.map +1 -0
- package/dist/browser/types.d.ts +52 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +2 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/cf-deploy/bundle.d.ts +18 -0
- package/dist/cf-deploy/bundle.d.ts.map +1 -0
- package/dist/cf-deploy/bundle.js +273 -0
- package/dist/cf-deploy/bundle.js.map +1 -0
- package/dist/cf-deploy/config.d.ts +12 -0
- package/dist/cf-deploy/config.d.ts.map +1 -0
- package/dist/cf-deploy/config.js +11 -0
- package/dist/cf-deploy/config.js.map +1 -0
- package/dist/cf-deploy/index.d.ts +10 -0
- package/dist/cf-deploy/index.d.ts.map +1 -0
- package/dist/cf-deploy/index.js +12 -0
- package/dist/cf-deploy/index.js.map +1 -0
- package/dist/cf-deploy/leaves.d.ts +8 -0
- package/dist/cf-deploy/leaves.d.ts.map +1 -0
- package/dist/cf-deploy/leaves.js +66 -0
- package/dist/cf-deploy/leaves.js.map +1 -0
- package/dist/cf-deploy/migration.d.ts +27 -0
- package/dist/cf-deploy/migration.d.ts.map +1 -0
- package/dist/cf-deploy/migration.js +734 -0
- package/dist/cf-deploy/migration.js.map +1 -0
- package/dist/cf-deploy/nativeMigrations.d.ts +24 -0
- package/dist/cf-deploy/nativeMigrations.d.ts.map +1 -0
- package/dist/cf-deploy/nativeMigrations.js +185 -0
- package/dist/cf-deploy/nativeMigrations.js.map +1 -0
- package/dist/cf-deploy/prune.d.ts +14 -0
- package/dist/cf-deploy/prune.d.ts.map +1 -0
- package/dist/cf-deploy/prune.js +235 -0
- package/dist/cf-deploy/prune.js.map +1 -0
- package/dist/cf-deploy/readiness.d.ts +11 -0
- package/dist/cf-deploy/readiness.d.ts.map +1 -0
- package/dist/cf-deploy/readiness.js +56 -0
- package/dist/cf-deploy/readiness.js.map +1 -0
- package/dist/cf-deploy/sources.d.ts +3 -0
- package/dist/cf-deploy/sources.d.ts.map +1 -0
- package/dist/cf-deploy/sources.js +24 -0
- package/dist/cf-deploy/sources.js.map +1 -0
- package/dist/cf-deploy/wrangler.d.ts +9 -0
- package/dist/cf-deploy/wrangler.d.ts.map +1 -0
- package/dist/cf-deploy/wrangler.js +48 -0
- package/dist/cf-deploy/wrangler.js.map +1 -0
- package/dist/cf-do/application-sql.d.ts +49 -0
- package/dist/cf-do/application-sql.d.ts.map +1 -0
- package/dist/cf-do/application-sql.js +124 -0
- package/dist/cf-do/application-sql.js.map +1 -0
- package/dist/cf-do/cdc.d.ts +155 -0
- package/dist/cf-do/cdc.d.ts.map +1 -0
- package/dist/cf-do/cdc.js +723 -0
- package/dist/cf-do/cdc.js.map +1 -0
- package/dist/cf-do/cursor-pull.d.ts +27 -0
- package/dist/cf-do/cursor-pull.d.ts.map +1 -0
- package/dist/cf-do/cursor-pull.js +78 -0
- package/dist/cf-do/cursor-pull.js.map +1 -0
- package/dist/cf-do/lite-data-worker.d.ts +171 -0
- package/dist/cf-do/lite-data-worker.d.ts.map +1 -0
- package/dist/cf-do/lite-data-worker.js +685 -0
- package/dist/cf-do/lite-data-worker.js.map +1 -0
- package/dist/cf-do/namespace-backup.d.ts +85 -0
- package/dist/cf-do/namespace-backup.d.ts.map +1 -0
- package/dist/cf-do/namespace-backup.js +470 -0
- package/dist/cf-do/namespace-backup.js.map +1 -0
- package/dist/cf-do/row-undo.d.ts +36 -0
- package/dist/cf-do/row-undo.d.ts.map +1 -0
- package/dist/cf-do/row-undo.js +221 -0
- package/dist/cf-do/row-undo.js.map +1 -0
- package/dist/cf-do/tx-journal.d.ts +118 -0
- package/dist/cf-do/tx-journal.d.ts.map +1 -0
- package/dist/cf-do/tx-journal.js +717 -0
- package/dist/cf-do/tx-journal.js.map +1 -0
- package/dist/cf-do/watermark.d.ts +29 -0
- package/dist/cf-do/watermark.d.ts.map +1 -0
- package/dist/cf-do/watermark.js +105 -0
- package/dist/cf-do/watermark.js.map +1 -0
- package/dist/cf-do/worker.d.ts +282 -0
- package/dist/cf-do/worker.d.ts.map +1 -0
- package/dist/cf-do/worker.js +1999 -0
- package/dist/cf-do/worker.js.map +1 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -0
- package/dist/cloudflare-build.d.ts +9 -0
- package/dist/cloudflare-build.d.ts.map +1 -0
- package/dist/cloudflare-build.js +9 -0
- package/dist/cloudflare-build.js.map +1 -0
- package/dist/cloudflare-bun-wasm-loader.d.ts +2 -0
- package/dist/cloudflare-bun-wasm-loader.d.ts.map +1 -0
- package/dist/cloudflare-bun-wasm-loader.js +2 -0
- package/dist/cloudflare-bun-wasm-loader.js.map +1 -0
- package/dist/cloudflare-query-compiler.d.ts +2 -0
- package/dist/cloudflare-query-compiler.d.ts.map +1 -0
- package/dist/cloudflare-query-compiler.js +2 -0
- package/dist/cloudflare-query-compiler.js.map +1 -0
- package/dist/cloudflare-runtime.d.ts +15 -0
- package/dist/cloudflare-runtime.d.ts.map +1 -0
- package/dist/cloudflare-runtime.js +11 -0
- package/dist/cloudflare-runtime.js.map +1 -0
- package/dist/cloudflare-sync.d.ts +3 -0
- package/dist/cloudflare-sync.d.ts.map +1 -0
- package/dist/cloudflare-sync.js +3 -0
- package/dist/cloudflare-sync.js.map +1 -0
- package/dist/cloudflare-transaction-query.d.ts +2 -0
- package/dist/cloudflare-transaction-query.d.ts.map +1 -0
- package/dist/cloudflare-transaction-query.js +2 -0
- package/dist/cloudflare-transaction-query.js.map +1 -0
- package/dist/cloudflare-vite-wasm-loader.d.ts +2 -0
- package/dist/cloudflare-vite-wasm-loader.d.ts.map +1 -0
- package/dist/cloudflare-vite-wasm-loader.js +2 -0
- package/dist/cloudflare-vite-wasm-loader.js.map +1 -0
- package/dist/cloudflare.d.ts +3 -0
- package/dist/cloudflare.d.ts.map +1 -0
- package/dist/cloudflare.js +3 -0
- package/dist/cloudflare.js.map +1 -0
- package/dist/do-sql-tracking.d.ts +114 -0
- package/dist/do-sql-tracking.d.ts.map +1 -0
- package/dist/do-sql-tracking.js +280 -0
- package/dist/do-sql-tracking.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/wake.d.ts +22 -0
- package/dist/wake.d.ts.map +1 -0
- package/dist/wake.js +114 -0
- package/dist/wake.js.map +1 -0
- package/dist/worker/cf-do-shim.d.ts +53 -0
- package/dist/worker/cf-do-shim.d.ts.map +1 -0
- package/dist/worker/cf-do-shim.js +66 -0
- package/dist/worker/cf-do-shim.js.map +1 -0
- package/dist/zero-http/encrypted-column-codec.d.ts +46 -0
- package/dist/zero-http/encrypted-column-codec.d.ts.map +1 -0
- package/dist/zero-http/encrypted-column-codec.js +676 -0
- package/dist/zero-http/encrypted-column-codec.js.map +1 -0
- package/dist/zero-http/encrypted-column-conformance.d.ts +7 -0
- package/dist/zero-http/encrypted-column-conformance.d.ts.map +1 -0
- package/dist/zero-http/encrypted-column-conformance.js +161 -0
- package/dist/zero-http/encrypted-column-conformance.js.map +1 -0
- package/dist/zero-http/fixture-schema.d.ts +127 -0
- package/dist/zero-http/fixture-schema.d.ts.map +1 -0
- package/dist/zero-http/fixture-schema.js +56 -0
- package/dist/zero-http/fixture-schema.js.map +1 -0
- package/dist/zero-http/mount.d.ts +71 -0
- package/dist/zero-http/mount.d.ts.map +1 -0
- package/dist/zero-http/mount.js +594 -0
- package/dist/zero-http/mount.js.map +1 -0
- package/dist/zero-http/payload-codec.d.ts +91 -0
- package/dist/zero-http/payload-codec.d.ts.map +1 -0
- package/dist/zero-http/payload-codec.js +10 -0
- package/dist/zero-http/payload-codec.js.map +1 -0
- package/dist/zero-http/server.d.ts +16 -0
- package/dist/zero-http/server.d.ts.map +1 -0
- package/dist/zero-http/server.js +270 -0
- package/dist/zero-http/server.js.map +1 -0
- package/dist/zero-http/test-harness.d.ts +32 -0
- package/dist/zero-http/test-harness.d.ts.map +1 -0
- package/dist/zero-http/test-harness.js +77 -0
- package/dist/zero-http/test-harness.js.map +1 -0
- package/dist/zero-http/transport.d.ts +71 -0
- package/dist/zero-http/transport.d.ts.map +1 -0
- package/dist/zero-http/transport.js +1106 -0
- package/dist/zero-http/transport.js.map +1 -0
- package/package.json +116 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/cf-deploy/migration.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,OAAO,CAAA;AAC9B,MAAM,eAAe,GAAG,OAAO,CAAA;AAE/B,SAAS,WAAW,CAAC,QAAgB,EAAE,GAAqB;IAC1D,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IACvE,OAAO,QAAQ;SACZ,KAAK,CAAC,eAAe,CAAC;SACtB,IAAI,CAAC,UAAU,CAAC;SAChB,KAAK,CAAC,cAAc,CAAC;SACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACnB,CAAC;AA2BD,MAAM,UAAU,0BAA0B,CACxC,GAAqB,EACrB,KAA2C;IAE3C,MAAM,uBAAuB,GAAG,WAAW,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAA;IAChF,MAAM,kBAAkB,GAAG,WAAW,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAA;IAEpE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,iCAAiC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;wBACvD,uBAAuB;WACpC,uBAAuB;;;;;aAKrB,uBAAuB;;CAEnC,CAAA;IACC,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,oBAAoB,GAAG,WAAW,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAA;QAClF,OAAO,0BAA0B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC;;gCAEhD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;;8BAErC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC;iCACtC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;yBAChD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC;yBAC1C,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA0nBnC,uBAAuB;;;;;;;;;;;sCAWT,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA0C/C,uBAAuB;;;;;aAKrB,uBAAuB;;CAEnC,CAAA;IACC,CAAC;IAED,MAAM,UAAU,GAAU,KAAK,CAAA;IAC/B,MAAM,IAAI,SAAS,CAAC,0CAA0C,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;AACrF,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type NativeSqlMigrationStatement = {
|
|
2
|
+
id: string;
|
|
3
|
+
sql: string;
|
|
4
|
+
declaredColumns?: Array<{
|
|
5
|
+
definition: string;
|
|
6
|
+
name: string;
|
|
7
|
+
}>;
|
|
8
|
+
rebuildColumns?: string[];
|
|
9
|
+
rebuildTarget?: string;
|
|
10
|
+
skipIfColumnExists?: {
|
|
11
|
+
column: string;
|
|
12
|
+
table: string;
|
|
13
|
+
};
|
|
14
|
+
skipIfColumnMissing?: {
|
|
15
|
+
column: string;
|
|
16
|
+
table: string;
|
|
17
|
+
};
|
|
18
|
+
skipIfTableMissing?: string;
|
|
19
|
+
supersedes?: string[];
|
|
20
|
+
};
|
|
21
|
+
type ParsedNativeSqlMigrationStatement = Omit<NativeSqlMigrationStatement, 'id' | 'rebuildColumns' | 'rebuildTarget' | 'supersedes' | 'skipIfTableMissing'>;
|
|
22
|
+
export declare function readNativeSqlMigrationStatements(migrationsDir: string, parseStatement: (sql: string) => ParsedNativeSqlMigrationStatement): NativeSqlMigrationStatement[];
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=nativeMigrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeMigrations.d.ts","sourceRoot":"","sources":["../../src/cf-deploy/nativeMigrations.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,2BAA2B,GAAG;IACxC,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7D,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kBAAkB,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACtD,mBAAmB,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACvD,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB,CAAA;AAED,KAAK,iCAAiC,GAAG,IAAI,CAC3C,2BAA2B,EAC3B,IAAI,GAAG,gBAAgB,GAAG,eAAe,GAAG,YAAY,GAAG,oBAAoB,CAChF,CAAA;AAmFD,wBAAgB,gCAAgC,CAC9C,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,iCAAiC,GACjE,2BAA2B,EAAE,CAmI/B"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
// the column names declared by a rebuild block's `__new_<t>` CREATE. this is the
|
|
4
|
+
// only honest evidence the block landed: the ledger records the block statement
|
|
5
|
+
// by statement, but a rolled-back block leaves the ORIGINAL <t> behind, so the
|
|
6
|
+
// table NAME still resolves while the rebuilt shape is gone.
|
|
7
|
+
function rebuildColumnNames(createSql) {
|
|
8
|
+
return createTableColumnEntries(createSql).map((entry) => entry.name);
|
|
9
|
+
}
|
|
10
|
+
// every column ENTRY a CREATE TABLE declares, with its full definition text.
|
|
11
|
+
// the phantom-ledger reconcile uses these to converge a live table that
|
|
12
|
+
// predates its ledgered CREATE: the old table resolves by NAME, so the CREATE
|
|
13
|
+
// never re-runs, and columns that only ever existed inside its definition are
|
|
14
|
+
// otherwise unreachable (prod 2026-07-26, 217 wedged namespaces).
|
|
15
|
+
function createTableColumnEntries(createSql) {
|
|
16
|
+
const open = createSql.indexOf('(');
|
|
17
|
+
if (open < 0)
|
|
18
|
+
return [];
|
|
19
|
+
const entries = [];
|
|
20
|
+
let entry = '';
|
|
21
|
+
let depth = 0;
|
|
22
|
+
// quote tracking is not optional here. a column DEFAULT can legally contain a
|
|
23
|
+
// comma or a paren — `platforms text DEFAULT '{"ios":true,"android":false}'`
|
|
24
|
+
// is in the checked-in baseline — and a depth-only split cuts through the
|
|
25
|
+
// literal and reads its tail ("android") as a column name. one phantom column
|
|
26
|
+
// makes blockLanded permanently false for a table that is exactly current,
|
|
27
|
+
// which drops and rebuilds a live table on every single migration run.
|
|
28
|
+
const body = createSql.slice(open + 1);
|
|
29
|
+
for (let index = 0; index < body.length; index++) {
|
|
30
|
+
const character = body[index];
|
|
31
|
+
if (character === "'" ||
|
|
32
|
+
character === '"' ||
|
|
33
|
+
character === '`' ||
|
|
34
|
+
character === '[') {
|
|
35
|
+
const closing = character === '[' ? ']' : character;
|
|
36
|
+
entry += character;
|
|
37
|
+
index++;
|
|
38
|
+
while (index < body.length) {
|
|
39
|
+
if (body[index] === closing) {
|
|
40
|
+
// '' / "" / `` inside a literal is an escaped quote, not the end of it
|
|
41
|
+
if (body[index + 1] === closing && closing !== ']') {
|
|
42
|
+
entry += body[index] + body[index + 1];
|
|
43
|
+
index += 2;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
entry += body[index];
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
entry += body[index];
|
|
50
|
+
index++;
|
|
51
|
+
}
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (character === '(')
|
|
55
|
+
depth++;
|
|
56
|
+
else if (character === ')') {
|
|
57
|
+
if (depth === 0)
|
|
58
|
+
break;
|
|
59
|
+
depth--;
|
|
60
|
+
}
|
|
61
|
+
if (character === ',' && depth === 0) {
|
|
62
|
+
entries.push(entry);
|
|
63
|
+
entry = '';
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
entry += character;
|
|
67
|
+
}
|
|
68
|
+
entries.push(entry);
|
|
69
|
+
return entries
|
|
70
|
+
.map((value) => value.trim())
|
|
71
|
+
.filter((value) => value.length > 0 &&
|
|
72
|
+
!/^(?:CONSTRAINT|FOREIGN KEY|PRIMARY KEY|UNIQUE|CHECK)\b/i.test(value))
|
|
73
|
+
.flatMap((definition) => {
|
|
74
|
+
const name = /^[`"]?(\w+)/.exec(definition)?.[1];
|
|
75
|
+
return name ? [{ definition, name }] : [];
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
export function readNativeSqlMigrationStatements(migrationsDir, parseStatement) {
|
|
79
|
+
const migrationPaths = [];
|
|
80
|
+
const visit = (dir) => {
|
|
81
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
82
|
+
const path = join(dir, entry.name);
|
|
83
|
+
if (entry.isDirectory())
|
|
84
|
+
visit(path);
|
|
85
|
+
else if (entry.isFile() && entry.name === 'migration.sql')
|
|
86
|
+
migrationPaths.push(path);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
visit(migrationsDir);
|
|
90
|
+
const statements = migrationPaths
|
|
91
|
+
.sort((a, b) => a.localeCompare(b))
|
|
92
|
+
.flatMap((path) => {
|
|
93
|
+
const migrationId = path.slice(migrationsDir.length + 1);
|
|
94
|
+
// drizzle rebuilds a table by creating `__new_<table>`, copying rows into
|
|
95
|
+
// it, dropping the original, and renaming the copy over it. the runner
|
|
96
|
+
// ledgers those statements individually, and the rename destroys the very
|
|
97
|
+
// table the create made — so a run that stops after the rename records the
|
|
98
|
+
// create as applied with nothing left to rename, and every later run dies
|
|
99
|
+
// on `no such table: __new_<table>`. carrying the temp table onto the rest
|
|
100
|
+
// of the block makes it skip itself once it has already completed.
|
|
101
|
+
let recreateTempTable = null;
|
|
102
|
+
return readFileSync(path, 'utf-8')
|
|
103
|
+
.split('--> statement-breakpoint')
|
|
104
|
+
.map((statement) => statement.trim())
|
|
105
|
+
.filter(Boolean)
|
|
106
|
+
.map((sql, index) => {
|
|
107
|
+
const statement = parseStatement(sql);
|
|
108
|
+
const rewritten = statement.sql
|
|
109
|
+
.replace(/^CREATE TABLE\s+(?!IF NOT EXISTS\s+)/i, 'CREATE TABLE IF NOT EXISTS ')
|
|
110
|
+
.replace(/^CREATE UNIQUE INDEX\s+(?!IF NOT EXISTS\s+)/i, 'CREATE UNIQUE INDEX IF NOT EXISTS ')
|
|
111
|
+
.replace(/^CREATE INDEX\s+(?!IF NOT EXISTS\s+)/i, 'CREATE INDEX IF NOT EXISTS ');
|
|
112
|
+
const skipIfTableMissing = recreateTempTable;
|
|
113
|
+
const created = /^CREATE TABLE IF NOT EXISTS\s+[`"]?(__new_\w+)[`"]?/i.exec(rewritten);
|
|
114
|
+
if (created)
|
|
115
|
+
recreateTempTable = created[1];
|
|
116
|
+
// every statement from the CREATE through the RENAME belongs to the
|
|
117
|
+
// block, the rename included. the reconciler resurrects them as one
|
|
118
|
+
// unit, so it needs membership on the DROP too.
|
|
119
|
+
const blockTempTable = recreateTempTable;
|
|
120
|
+
if (recreateTempTable &&
|
|
121
|
+
!created &&
|
|
122
|
+
new RegExp(`^ALTER TABLE\\s+[\`"]?${recreateTempTable}[\`"]?\\s+RENAME TO`, 'i').test(rewritten)) {
|
|
123
|
+
recreateTempTable = null;
|
|
124
|
+
}
|
|
125
|
+
const plainCreate = !created && /^CREATE TABLE IF NOT EXISTS\s+[`"]?\w+/i.test(rewritten);
|
|
126
|
+
return {
|
|
127
|
+
id: `${migrationId}:${index}`,
|
|
128
|
+
...statement,
|
|
129
|
+
...(skipIfTableMissing ? { skipIfTableMissing } : null),
|
|
130
|
+
...(blockTempTable
|
|
131
|
+
? { rebuildTarget: blockTempTable.slice('__new_'.length) }
|
|
132
|
+
: null),
|
|
133
|
+
...(created ? { rebuildColumns: rebuildColumnNames(rewritten) } : null),
|
|
134
|
+
...(plainCreate
|
|
135
|
+
? { declaredColumns: createTableColumnEntries(rewritten) }
|
|
136
|
+
: null),
|
|
137
|
+
sql: rewritten,
|
|
138
|
+
};
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
const supersessionsPath = join(migrationsDir, 'supersessions.json');
|
|
142
|
+
if (!existsSync(supersessionsPath))
|
|
143
|
+
return statements;
|
|
144
|
+
const configuredSupersessions = JSON.parse(readFileSync(supersessionsPath, 'utf8'));
|
|
145
|
+
if (!configuredSupersessions ||
|
|
146
|
+
typeof configuredSupersessions !== 'object' ||
|
|
147
|
+
Array.isArray(configuredSupersessions)) {
|
|
148
|
+
throw new Error('migration supersessions must be an object');
|
|
149
|
+
}
|
|
150
|
+
const statementIndexes = new Map(statements.map((statement, index) => [statement.id, index]));
|
|
151
|
+
const supersessions = {};
|
|
152
|
+
const successors = new Map();
|
|
153
|
+
for (const [successor, configuredSuperseded] of Object.entries(configuredSupersessions)) {
|
|
154
|
+
const successorIndex = statementIndexes.get(successor);
|
|
155
|
+
if (successorIndex === undefined) {
|
|
156
|
+
throw new Error(`migration supersession successor does not exist: ${successor}`);
|
|
157
|
+
}
|
|
158
|
+
if (!Array.isArray(configuredSuperseded) ||
|
|
159
|
+
configuredSuperseded.length === 0 ||
|
|
160
|
+
configuredSuperseded.some((id) => typeof id !== 'string')) {
|
|
161
|
+
throw new Error(`migration supersession must name statements: ${successor}`);
|
|
162
|
+
}
|
|
163
|
+
const superseded = configuredSuperseded;
|
|
164
|
+
for (const id of superseded) {
|
|
165
|
+
const supersededIndex = statementIndexes.get(id);
|
|
166
|
+
if (supersededIndex === undefined) {
|
|
167
|
+
throw new Error(`superseded migration statement does not exist: ${id}`);
|
|
168
|
+
}
|
|
169
|
+
if (supersededIndex >= successorIndex) {
|
|
170
|
+
throw new Error(`migration statement must supersede an earlier statement: ${id}`);
|
|
171
|
+
}
|
|
172
|
+
const existingSuccessor = successors.get(id);
|
|
173
|
+
if (existingSuccessor) {
|
|
174
|
+
throw new Error(`migration statement has multiple successors: ${id} (${existingSuccessor}, ${successor})`);
|
|
175
|
+
}
|
|
176
|
+
successors.set(id, successor);
|
|
177
|
+
}
|
|
178
|
+
supersessions[successor] = superseded;
|
|
179
|
+
}
|
|
180
|
+
return statements.map((statement) => {
|
|
181
|
+
const supersedes = supersessions[statement.id];
|
|
182
|
+
return supersedes ? { ...statement, supersedes } : statement;
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=nativeMigrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeMigrations.js","sourceRoot":"","sources":["../../src/cf-deploy/nativeMigrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare function pruneUnreachableWorkerModules(workerDir: string, entryName: string): void;
|
|
2
|
+
export interface WorkerChunkPruneSignatures {
|
|
3
|
+
browserOnlyChunkSignature: RegExp;
|
|
4
|
+
serverNodeOnlyChunkSignatures: readonly string[];
|
|
5
|
+
}
|
|
6
|
+
export declare function pruneWorkerChunksBySignature(workerDir: string, signatures: WorkerChunkPruneSignatures): {
|
|
7
|
+
removed: number;
|
|
8
|
+
bytes: number;
|
|
9
|
+
};
|
|
10
|
+
export declare function workerServesNoPageRoutes(workerDir: string): boolean;
|
|
11
|
+
export declare function workerAssetsBytes(workerDir: string): number;
|
|
12
|
+
export declare function stripDeadPageRouteImports(workerDir: string): boolean;
|
|
13
|
+
export declare function shimWorkerCreateRequire(workerDir: string): void;
|
|
14
|
+
//# sourceMappingURL=prune.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune.d.ts","sourceRoot":"","sources":["../../src/cf-deploy/prune.ts"],"names":[],"mappings":"AAYA,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI,CAyDN;AAED,MAAM,WAAW,0BAA0B;IACzC,yBAAyB,EAAE,MAAM,CAAA;IACjC,6BAA6B,EAAE,SAAS,MAAM,EAAE,CAAA;CACjD;AAKD,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,0BAA0B,GACrC;IACD,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd,CAmCA;AAUD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAcnE;AAKD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAa3D;AASD,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAqCpE;AA0BD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CA4B/D"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { existsSync, readFileSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync, } from 'fs';
|
|
2
|
+
import { dirname, join } from 'path';
|
|
3
|
+
// remove asset chunks not reachable (static OR dynamic) from the worker entry.
|
|
4
|
+
export function pruneUnreachableWorkerModules(workerDir, entryName) {
|
|
5
|
+
const assetsDir = join(workerDir, 'assets');
|
|
6
|
+
if (!existsSync(assetsDir))
|
|
7
|
+
return;
|
|
8
|
+
const reachable = new Set();
|
|
9
|
+
const canon = (p) => {
|
|
10
|
+
try {
|
|
11
|
+
return realpathSync(p);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return p;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const visit = (file) => {
|
|
18
|
+
const f = canon(file);
|
|
19
|
+
if (reachable.has(f))
|
|
20
|
+
return;
|
|
21
|
+
reachable.add(f);
|
|
22
|
+
let src;
|
|
23
|
+
try {
|
|
24
|
+
src = readFileSync(f, 'utf-8');
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
// match ANY relative module ref in import/export/import(). a FRESH regex per
|
|
30
|
+
// call — a shared /g regex's lastIndex is clobbered by the recursive visits.
|
|
31
|
+
const refRe = /["'](\.\.?\/[^"']+\.(?:js|mjs|wasm))["']/g;
|
|
32
|
+
const refs = [];
|
|
33
|
+
let m;
|
|
34
|
+
while ((m = refRe.exec(src)))
|
|
35
|
+
refs.push(m[1]);
|
|
36
|
+
for (const ref of refs)
|
|
37
|
+
visit(join(dirname(f), ref));
|
|
38
|
+
};
|
|
39
|
+
const entryPath = join(workerDir, entryName);
|
|
40
|
+
visit(entryPath);
|
|
41
|
+
const allAssets = readdirSync(assetsDir).filter((n) => n.endsWith('.js') || n.endsWith('.mjs'));
|
|
42
|
+
const reachableAssets = allAssets.filter((n) => reachable.has(canon(join(assetsDir, n))));
|
|
43
|
+
// SAFETY: if the trace found (almost) nothing reachable, the entry/ref
|
|
44
|
+
// resolution is broken — do NOT prune (pruning everything bricks the worker).
|
|
45
|
+
if (reachableAssets.length < allAssets.length * 0.05) {
|
|
46
|
+
// eslint-disable-next-line no-console
|
|
47
|
+
console.log(`[cloudflare] skip module-prune: only ${reachableAssets.length}/${allAssets.length} assets reached from ${entryName} (trace looks broken)`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
let removed = 0;
|
|
51
|
+
for (const name of allAssets) {
|
|
52
|
+
if (!reachable.has(canon(join(assetsDir, name)))) {
|
|
53
|
+
rmSync(join(assetsDir, name), { force: true });
|
|
54
|
+
removed++;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (removed > 0) {
|
|
58
|
+
// eslint-disable-next-line no-console
|
|
59
|
+
console.log(`[cloudflare] pruned ${removed} unreachable asset modules`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// remove async chunks matching caller-owned signatures from dist/worker/assets
|
|
63
|
+
// before wrangler attaches modules. returns the count + bytes pruned for the
|
|
64
|
+
// deploy log.
|
|
65
|
+
export function pruneWorkerChunksBySignature(workerDir, signatures) {
|
|
66
|
+
const assetsDir = join(workerDir, 'assets');
|
|
67
|
+
if (!existsSync(assetsDir))
|
|
68
|
+
return { removed: 0, bytes: 0 };
|
|
69
|
+
let removed = 0;
|
|
70
|
+
let bytes = 0;
|
|
71
|
+
for (const name of readdirSync(assetsDir)) {
|
|
72
|
+
if (!name.endsWith('.js') && !name.endsWith('.mjs'))
|
|
73
|
+
continue;
|
|
74
|
+
const file = join(assetsDir, name);
|
|
75
|
+
let head;
|
|
76
|
+
try {
|
|
77
|
+
// signatures appear in the module-eval body; reading the whole chunk is
|
|
78
|
+
// fine — these are at most a few MiB and we only do it once per deploy.
|
|
79
|
+
head = readFileSync(file, 'utf-8');
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (!signatures.browserOnlyChunkSignature.test(head) &&
|
|
85
|
+
!signatures.serverNodeOnlyChunkSignatures.some((sig) => head.includes(sig))) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
bytes += Buffer.byteLength(head);
|
|
89
|
+
rmSync(file, { force: true });
|
|
90
|
+
removed++;
|
|
91
|
+
}
|
|
92
|
+
// removing the browser-only chunks orphans every chunk that was reachable
|
|
93
|
+
// ONLY through them (e.g. the ~466 shiki/textmate-grammar/wasm chunks
|
|
94
|
+
// pulled in solely by the codemirror+lsp editor surface — 2.6 MiB gz).
|
|
95
|
+
// The initial reachability prune ran during app-worker bundling before
|
|
96
|
+
// these deletions, so it counted them as live; re-run it now to drop the
|
|
97
|
+
// newly-unreachable set. without this the worker ships dead grammar chunks
|
|
98
|
+
// and trips CF's 10 MiB code limit.
|
|
99
|
+
if (removed > 0)
|
|
100
|
+
pruneUnreachableWorkerModules(workerDir, 'index.js');
|
|
101
|
+
return { removed, bytes };
|
|
102
|
+
}
|
|
103
|
+
// true when the worker serves NO page routes — run_worker_first lists only
|
|
104
|
+
// /api and /sync paths, so the ASSETS binding serves every (prebuilt SPA/SSG)
|
|
105
|
+
// page directly and the worker's fetch never renders one. this is the ground
|
|
106
|
+
// truth: an ssr route or a route with a loader MUST appear in run_worker_first
|
|
107
|
+
// to function (otherwise ASSETS short-circuits to a stale static shell and the
|
|
108
|
+
// worker never runs), so an api/sync-only list proves the worker renders
|
|
109
|
+
// nothing. for any app that does render pages this returns false and the strip
|
|
110
|
+
// below is a no-op.
|
|
111
|
+
export function workerServesNoPageRoutes(workerDir) {
|
|
112
|
+
try {
|
|
113
|
+
const wrangler = JSON.parse(readFileSync(join(workerDir, 'wrangler.json'), 'utf-8'));
|
|
114
|
+
const rwf = wrangler.assets?.run_worker_first;
|
|
115
|
+
if (!Array.isArray(rwf) || rwf.length === 0)
|
|
116
|
+
return false;
|
|
117
|
+
return rwf.every((p) => typeof p === 'string' && (/^\/api(\/|\b)/.test(p) || /^\/sync(\/|\b)/.test(p)));
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// total bytes of assets/*.{js,mjs} — a proxy for resident module weight, since
|
|
124
|
+
// no_bundle + the `assets/**/*.js` rule makes workerd attach every one as a
|
|
125
|
+
// resident ESModule in the 128 MiB DO isolate.
|
|
126
|
+
export function workerAssetsBytes(workerDir) {
|
|
127
|
+
const assetsDir = join(workerDir, 'assets');
|
|
128
|
+
if (!existsSync(assetsDir))
|
|
129
|
+
return 0;
|
|
130
|
+
let bytes = 0;
|
|
131
|
+
for (const n of readdirSync(assetsDir)) {
|
|
132
|
+
if (!n.endsWith('.js') && !n.endsWith('.mjs'))
|
|
133
|
+
continue;
|
|
134
|
+
try {
|
|
135
|
+
bytes += statSync(join(assetsDir, n)).size;
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// ignore a file that vanished mid-scan
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return bytes;
|
|
142
|
+
}
|
|
143
|
+
// neutralize one-app.js's lazy serverEntry + page-component imports so the
|
|
144
|
+
// reachability prune can drop the resident client graph (router ~1.4 MiB,
|
|
145
|
+
// zero-client ~777 KiB, every page chunk + transitive tamagui UI) the worker
|
|
146
|
+
// never executes. ONLY safe when workerServesNoPageRoutes is true. the api{}
|
|
147
|
+
// imports (push/pull/auth — these DO run on the worker) are deliberately left
|
|
148
|
+
// intact: the rewrite is scoped to the serverEntry line + the pages{} block,
|
|
149
|
+
// which the api{} block follows and bounds. returns true if it rewrote.
|
|
150
|
+
export function stripDeadPageRouteImports(workerDir) {
|
|
151
|
+
const files = readdirSync(workerDir).filter((n) => /^one-app-.*\.js$/.test(n));
|
|
152
|
+
if (files.length !== 1) {
|
|
153
|
+
// eslint-disable-next-line no-console
|
|
154
|
+
console.log(`[cloudflare] skip page-import strip: expected 1 one-app-*.js, found ${files.length}`);
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
const file = join(workerDir, files[0]);
|
|
158
|
+
const orig = readFileSync(file, 'utf-8');
|
|
159
|
+
// a thunk that, if EVER called (it never is for an api/sync-only worker),
|
|
160
|
+
// fails loudly at the call site instead of serving a blank page — so a future
|
|
161
|
+
// app that slips past the gate surfaces in the deploy's runtime validation.
|
|
162
|
+
const DEAD = '() => Promise.reject(new Error("page route not served by this worker (run_worker_first is api/sync only); chunk stripped to free DO isolate memory"))';
|
|
163
|
+
// esbuild emits double-quoted specifiers: import("./assets/<chunk>.js").
|
|
164
|
+
const thunk = /\(\)\s*=>\s*import\("\.\/assets\/[^"]+"\)/g;
|
|
165
|
+
// serverEntry: a single line preceding the pages block.
|
|
166
|
+
let src = orig.replace(/serverEntry:\s*\(\)\s*=>\s*import\("\.\/assets\/[^"]+"\)/, `serverEntry: ${DEAD}`);
|
|
167
|
+
// the pages:{...} block only, bounded by the api:{...} block that follows it.
|
|
168
|
+
const pagesStart = src.indexOf('pages:');
|
|
169
|
+
const apiStart = pagesStart === -1 ? -1 : src.indexOf('api:', pagesStart);
|
|
170
|
+
if (pagesStart !== -1 && apiStart > pagesStart) {
|
|
171
|
+
const block = src.slice(pagesStart, apiStart).replace(thunk, DEAD);
|
|
172
|
+
src = src.slice(0, pagesStart) + block + src.slice(apiStart);
|
|
173
|
+
}
|
|
174
|
+
if (src === orig) {
|
|
175
|
+
// eslint-disable-next-line no-console
|
|
176
|
+
console.log('[cloudflare] skip page-import strip: no lazy page imports matched');
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
writeFileSync(file, src);
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
// workerd does NOT populate `import.meta.url` for attached ESModule worker
|
|
183
|
+
// modules — it evaluates to `undefined` (verified at runtime against compat-date
|
|
184
|
+
// 2026-03-29 + nodejs_compat). rolldown/esbuild emit a CJS-interop banner
|
|
185
|
+
// `var __require = createRequire(import.meta.url)` at the top of any chunk that
|
|
186
|
+
// bundles a CommonJS dependency (e.g. react.production.js, pulled into the SSR
|
|
187
|
+
// render graph). with `import.meta.url` undefined, that top-level call throws
|
|
188
|
+
// `ERR_INVALID_ARG_VALUE` the instant the chunk is evaluated.
|
|
189
|
+
//
|
|
190
|
+
// it only surfaces on `+ssr` routes: SPA/SSG routes serve prebuilt html and
|
|
191
|
+
// never evaluate the server render graph in the worker, so the very first
|
|
192
|
+
// request-time render (a `+ssr` page) is what trips it. One's handlePage
|
|
193
|
+
// swallows the throw and returns an empty 200, so every `+ssr` route renders a
|
|
194
|
+
// blank body and deploy validation (which only hits prebuilt routes) stays
|
|
195
|
+
// green — exactly how this shipped unnoticed.
|
|
196
|
+
//
|
|
197
|
+
// shim it the same way `__filename`/`__dirname` are shimmed in the esbuild
|
|
198
|
+
// `define` above, but reach the external `assets/*` chunks too (they're marked
|
|
199
|
+
// external to esbuild, so the `define` never touches them): give createRequire a
|
|
200
|
+
// valid base URL. `import.meta.url` is already undefined at runtime, so nothing
|
|
201
|
+
// can depend on its real value — replacing it is strictly safe. matches the
|
|
202
|
+
// literal rolldown/esbuild banner only; the aliased form inside the sub-worker
|
|
203
|
+
// banner *template string* (`createRequire as CREATE_REQUIRE_NAME`) is left
|
|
204
|
+
// intact, since that template is injected into node sub-workers where
|
|
205
|
+
// `import.meta.url` is real.
|
|
206
|
+
export function shimWorkerCreateRequire(workerDir) {
|
|
207
|
+
const re = /createRequire\(\s*import\.meta\.url\s*\)/g;
|
|
208
|
+
let patched = 0;
|
|
209
|
+
const visit = (dir) => {
|
|
210
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
211
|
+
// skip dot-dirs (.vite/.orez/.do-bundle) and node_modules — only emitted
|
|
212
|
+
// worker modules (root entry + chunks + assets) carry the banner.
|
|
213
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules')
|
|
214
|
+
continue;
|
|
215
|
+
const p = join(dir, entry.name);
|
|
216
|
+
if (entry.isDirectory()) {
|
|
217
|
+
visit(p);
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
if (!p.endsWith('.js') && !p.endsWith('.mjs'))
|
|
221
|
+
continue;
|
|
222
|
+
const src = readFileSync(p, 'utf-8');
|
|
223
|
+
const out = src.replace(re, 'createRequire("file:///index.js")');
|
|
224
|
+
if (out !== src) {
|
|
225
|
+
writeFileSync(p, out);
|
|
226
|
+
patched++;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
visit(workerDir);
|
|
231
|
+
if (patched > 0) {
|
|
232
|
+
console.log(`[cloudflare] shimmed createRequire(import.meta.url) in ${patched} worker module(s)`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=prune.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../src/cf-deploy/prune.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type CloudflareDeployLog = (message: string) => void;
|
|
2
|
+
export declare function getAccountWorkersSubdomain(accountId: string, apiToken: string): Promise<string>;
|
|
3
|
+
export declare function waitForWorkerReady({ url, expectedVersion, workerName, log, intervalMs, maxAttempts, }: {
|
|
4
|
+
url: string;
|
|
5
|
+
expectedVersion: string;
|
|
6
|
+
workerName: string;
|
|
7
|
+
log: CloudflareDeployLog;
|
|
8
|
+
intervalMs?: number;
|
|
9
|
+
maxAttempts?: number;
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=readiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../../src/cf-deploy/readiness.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;AAI3D,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED,wBAAsB,kBAAkB,CAAC,EACvC,GAAG,EACH,eAAe,EACf,UAAU,EACV,GAAG,EACH,UAAgC,EAChC,WAAkC,GACnC,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,mBAAmB,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ChB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const DEFAULT_INTERVAL_MS = 2_000;
|
|
2
|
+
const DEFAULT_MAX_ATTEMPTS = 60;
|
|
3
|
+
let cachedWorkersSubdomain;
|
|
4
|
+
export async function getAccountWorkersSubdomain(accountId, apiToken) {
|
|
5
|
+
if (cachedWorkersSubdomain?.accountId === accountId) {
|
|
6
|
+
return cachedWorkersSubdomain.subdomain;
|
|
7
|
+
}
|
|
8
|
+
const response = await fetch(`https://api.cloudflare.com/client/v4/accounts/${accountId}/workers/subdomain`, { headers: { Authorization: `Bearer ${apiToken}` } });
|
|
9
|
+
if (!response.ok) {
|
|
10
|
+
throw new Error(`failed to read workers subdomain for account ${accountId}: ${response.status} ${(await response.text()).slice(0, 200)}`);
|
|
11
|
+
}
|
|
12
|
+
const body = (await response.json());
|
|
13
|
+
const subdomain = body.result?.subdomain;
|
|
14
|
+
if (!subdomain) {
|
|
15
|
+
throw new Error(`workers subdomain response for account ${accountId} had no result.subdomain`);
|
|
16
|
+
}
|
|
17
|
+
cachedWorkersSubdomain = { accountId, subdomain };
|
|
18
|
+
return subdomain;
|
|
19
|
+
}
|
|
20
|
+
export async function waitForWorkerReady({ url, expectedVersion, workerName, log, intervalMs = DEFAULT_INTERVAL_MS, maxAttempts = DEFAULT_MAX_ATTEMPTS, }) {
|
|
21
|
+
log(`[cloudflare] polling ${url} for readiness...`);
|
|
22
|
+
let lastError;
|
|
23
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
24
|
+
try {
|
|
25
|
+
const [rootResponse, versionResponse] = await Promise.all([
|
|
26
|
+
fetch(url, { redirect: 'manual' }),
|
|
27
|
+
fetch(`${url}/version.json`, {
|
|
28
|
+
redirect: 'manual',
|
|
29
|
+
headers: {
|
|
30
|
+
'cache-control': 'no-cache',
|
|
31
|
+
pragma: 'no-cache',
|
|
32
|
+
},
|
|
33
|
+
}),
|
|
34
|
+
]);
|
|
35
|
+
const versionBody = versionResponse.status === 200 ? await versionResponse.json() : null;
|
|
36
|
+
if (rootResponse.status >= 200 &&
|
|
37
|
+
rootResponse.status < 400 &&
|
|
38
|
+
typeof versionBody === 'object' &&
|
|
39
|
+
versionBody !== null &&
|
|
40
|
+
'version' in versionBody &&
|
|
41
|
+
versionBody.version === expectedVersion) {
|
|
42
|
+
log(`[cloudflare] worker responded ${rootResponse.status} after ${attempt} attempt(s)`);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
lastError = `root ${rootResponse.status}; version ${versionResponse.status} ${JSON.stringify(versionBody)}`;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
lastError = error instanceof Error ? error.message : String(error);
|
|
49
|
+
}
|
|
50
|
+
if (attempt < maxAttempts) {
|
|
51
|
+
await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
throw new Error(`worker ${workerName} did not become ready within ${(maxAttempts * intervalMs) / 1000}s; last: ${lastError}`);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=readiness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readiness.js","sourceRoot":"","sources":["../../src/cf-deploy/readiness.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/cf-deploy/sources.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAoBtD"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { quoteSqlIdentifier } from './leaves.js';
|
|
2
|
+
/** SQLite schema used by the native Orez Lite mutation acknowledgement shard. */
|
|
3
|
+
export function zeroHttpShardDDL(appId) {
|
|
4
|
+
const appSchema = `${appId}_0`;
|
|
5
|
+
const schema = quoteSqlIdentifier(appSchema);
|
|
6
|
+
return [
|
|
7
|
+
`CREATE SCHEMA IF NOT EXISTS ${schema};`,
|
|
8
|
+
`CREATE TABLE IF NOT EXISTS ${schema}.clients (` +
|
|
9
|
+
`"clientGroupID" text NOT NULL, ` +
|
|
10
|
+
`"clientID" text NOT NULL, ` +
|
|
11
|
+
`"lastMutationID" bigint NOT NULL, ` +
|
|
12
|
+
`PRIMARY KEY ("clientGroupID", "clientID")` +
|
|
13
|
+
`);`,
|
|
14
|
+
`ALTER TABLE ${schema}.clients ADD COLUMN IF NOT EXISTS "userID" text;`,
|
|
15
|
+
`CREATE TABLE IF NOT EXISTS ${schema}.mutations (` +
|
|
16
|
+
`"clientGroupID" text NOT NULL, ` +
|
|
17
|
+
`"clientID" text NOT NULL, ` +
|
|
18
|
+
`"mutationID" bigint NOT NULL, ` +
|
|
19
|
+
`result json NOT NULL, ` +
|
|
20
|
+
`PRIMARY KEY ("clientGroupID", "clientID", "mutationID")` +
|
|
21
|
+
`);`,
|
|
22
|
+
].join('\n--> statement-breakpoint\n');
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/cf-deploy/sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEhD,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,SAAS,GAAG,GAAG,KAAK,IAAI,CAAA;IAC9B,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAA;IAC5C,OAAO;QACL,+BAA+B,MAAM,GAAG;QACxC,8BAA8B,MAAM,YAAY;YAC9C,iCAAiC;YACjC,4BAA4B;YAC5B,oCAAoC;YACpC,2CAA2C;YAC3C,IAAI;QACN,eAAe,MAAM,kDAAkD;QACvE,8BAA8B,MAAM,cAAc;YAChD,iCAAiC;YACjC,4BAA4B;YAC5B,gCAAgC;YAChC,wBAAwB;YACxB,yDAAyD;YACzD,IAAI;KACP,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;AACxC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type WranglerConfig = Record<string, unknown>;
|
|
2
|
+
export declare const CLOUDFLARE_COMPATIBILITY_DATE = "2026-03-29";
|
|
3
|
+
/**
|
|
4
|
+
* Add the current Orez Lite Durable Object contract to a Wrangler config.
|
|
5
|
+
*
|
|
6
|
+
* The caller owns routes, assets, services, and every app-specific binding.
|
|
7
|
+
*/
|
|
8
|
+
export declare function configureCloudflareWorker(config: WranglerConfig): WranglerConfig;
|
|
9
|
+
//# sourceMappingURL=wrangler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrangler.d.ts","sourceRoot":"","sources":["../../src/cf-deploy/wrangler.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAIpD,eAAO,MAAM,6BAA6B,eAAe,CAAA;AAczD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CA2ChF"}
|