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.
Files changed (190) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +12 -0
  3. package/dist/browser/generated/sqlite3-browser.wasm +0 -0
  4. package/dist/browser/generated/sync_wasm.js +922 -0
  5. package/dist/browser/generated/sync_wasm_bg.wasm +0 -0
  6. package/dist/browser/host.d.ts +10 -0
  7. package/dist/browser/host.d.ts.map +1 -0
  8. package/dist/browser/host.js +496 -0
  9. package/dist/browser/host.js.map +1 -0
  10. package/dist/browser/idb-snapshot.d.ts +11 -0
  11. package/dist/browser/idb-snapshot.d.ts.map +1 -0
  12. package/dist/browser/idb-snapshot.js +122 -0
  13. package/dist/browser/idb-snapshot.js.map +1 -0
  14. package/dist/browser/index.d.ts +5 -0
  15. package/dist/browser/index.d.ts.map +1 -0
  16. package/dist/browser/index.js +5 -0
  17. package/dist/browser/index.js.map +1 -0
  18. package/dist/browser/message-port.d.ts +7 -0
  19. package/dist/browser/message-port.d.ts.map +1 -0
  20. package/dist/browser/message-port.js +188 -0
  21. package/dist/browser/message-port.js.map +1 -0
  22. package/dist/browser/sqlite-adapter.d.ts +53 -0
  23. package/dist/browser/sqlite-adapter.d.ts.map +1 -0
  24. package/dist/browser/sqlite-adapter.js +126 -0
  25. package/dist/browser/sqlite-adapter.js.map +1 -0
  26. package/dist/browser/types.d.ts +52 -0
  27. package/dist/browser/types.d.ts.map +1 -0
  28. package/dist/browser/types.js +2 -0
  29. package/dist/browser/types.js.map +1 -0
  30. package/dist/cf-deploy/bundle.d.ts +18 -0
  31. package/dist/cf-deploy/bundle.d.ts.map +1 -0
  32. package/dist/cf-deploy/bundle.js +273 -0
  33. package/dist/cf-deploy/bundle.js.map +1 -0
  34. package/dist/cf-deploy/config.d.ts +12 -0
  35. package/dist/cf-deploy/config.d.ts.map +1 -0
  36. package/dist/cf-deploy/config.js +11 -0
  37. package/dist/cf-deploy/config.js.map +1 -0
  38. package/dist/cf-deploy/index.d.ts +10 -0
  39. package/dist/cf-deploy/index.d.ts.map +1 -0
  40. package/dist/cf-deploy/index.js +12 -0
  41. package/dist/cf-deploy/index.js.map +1 -0
  42. package/dist/cf-deploy/leaves.d.ts +8 -0
  43. package/dist/cf-deploy/leaves.d.ts.map +1 -0
  44. package/dist/cf-deploy/leaves.js +66 -0
  45. package/dist/cf-deploy/leaves.js.map +1 -0
  46. package/dist/cf-deploy/migration.d.ts +27 -0
  47. package/dist/cf-deploy/migration.d.ts.map +1 -0
  48. package/dist/cf-deploy/migration.js +734 -0
  49. package/dist/cf-deploy/migration.js.map +1 -0
  50. package/dist/cf-deploy/nativeMigrations.d.ts +24 -0
  51. package/dist/cf-deploy/nativeMigrations.d.ts.map +1 -0
  52. package/dist/cf-deploy/nativeMigrations.js +185 -0
  53. package/dist/cf-deploy/nativeMigrations.js.map +1 -0
  54. package/dist/cf-deploy/prune.d.ts +14 -0
  55. package/dist/cf-deploy/prune.d.ts.map +1 -0
  56. package/dist/cf-deploy/prune.js +235 -0
  57. package/dist/cf-deploy/prune.js.map +1 -0
  58. package/dist/cf-deploy/readiness.d.ts +11 -0
  59. package/dist/cf-deploy/readiness.d.ts.map +1 -0
  60. package/dist/cf-deploy/readiness.js +56 -0
  61. package/dist/cf-deploy/readiness.js.map +1 -0
  62. package/dist/cf-deploy/sources.d.ts +3 -0
  63. package/dist/cf-deploy/sources.d.ts.map +1 -0
  64. package/dist/cf-deploy/sources.js +24 -0
  65. package/dist/cf-deploy/sources.js.map +1 -0
  66. package/dist/cf-deploy/wrangler.d.ts +9 -0
  67. package/dist/cf-deploy/wrangler.d.ts.map +1 -0
  68. package/dist/cf-deploy/wrangler.js +48 -0
  69. package/dist/cf-deploy/wrangler.js.map +1 -0
  70. package/dist/cf-do/application-sql.d.ts +49 -0
  71. package/dist/cf-do/application-sql.d.ts.map +1 -0
  72. package/dist/cf-do/application-sql.js +124 -0
  73. package/dist/cf-do/application-sql.js.map +1 -0
  74. package/dist/cf-do/cdc.d.ts +155 -0
  75. package/dist/cf-do/cdc.d.ts.map +1 -0
  76. package/dist/cf-do/cdc.js +723 -0
  77. package/dist/cf-do/cdc.js.map +1 -0
  78. package/dist/cf-do/cursor-pull.d.ts +27 -0
  79. package/dist/cf-do/cursor-pull.d.ts.map +1 -0
  80. package/dist/cf-do/cursor-pull.js +78 -0
  81. package/dist/cf-do/cursor-pull.js.map +1 -0
  82. package/dist/cf-do/lite-data-worker.d.ts +171 -0
  83. package/dist/cf-do/lite-data-worker.d.ts.map +1 -0
  84. package/dist/cf-do/lite-data-worker.js +685 -0
  85. package/dist/cf-do/lite-data-worker.js.map +1 -0
  86. package/dist/cf-do/namespace-backup.d.ts +85 -0
  87. package/dist/cf-do/namespace-backup.d.ts.map +1 -0
  88. package/dist/cf-do/namespace-backup.js +470 -0
  89. package/dist/cf-do/namespace-backup.js.map +1 -0
  90. package/dist/cf-do/row-undo.d.ts +36 -0
  91. package/dist/cf-do/row-undo.d.ts.map +1 -0
  92. package/dist/cf-do/row-undo.js +221 -0
  93. package/dist/cf-do/row-undo.js.map +1 -0
  94. package/dist/cf-do/tx-journal.d.ts +118 -0
  95. package/dist/cf-do/tx-journal.d.ts.map +1 -0
  96. package/dist/cf-do/tx-journal.js +717 -0
  97. package/dist/cf-do/tx-journal.js.map +1 -0
  98. package/dist/cf-do/watermark.d.ts +29 -0
  99. package/dist/cf-do/watermark.d.ts.map +1 -0
  100. package/dist/cf-do/watermark.js +105 -0
  101. package/dist/cf-do/watermark.js.map +1 -0
  102. package/dist/cf-do/worker.d.ts +282 -0
  103. package/dist/cf-do/worker.d.ts.map +1 -0
  104. package/dist/cf-do/worker.js +1999 -0
  105. package/dist/cf-do/worker.js.map +1 -0
  106. package/dist/client.d.ts +2 -0
  107. package/dist/client.d.ts.map +1 -0
  108. package/dist/client.js +2 -0
  109. package/dist/client.js.map +1 -0
  110. package/dist/cloudflare-build.d.ts +9 -0
  111. package/dist/cloudflare-build.d.ts.map +1 -0
  112. package/dist/cloudflare-build.js +9 -0
  113. package/dist/cloudflare-build.js.map +1 -0
  114. package/dist/cloudflare-bun-wasm-loader.d.ts +2 -0
  115. package/dist/cloudflare-bun-wasm-loader.d.ts.map +1 -0
  116. package/dist/cloudflare-bun-wasm-loader.js +2 -0
  117. package/dist/cloudflare-bun-wasm-loader.js.map +1 -0
  118. package/dist/cloudflare-query-compiler.d.ts +2 -0
  119. package/dist/cloudflare-query-compiler.d.ts.map +1 -0
  120. package/dist/cloudflare-query-compiler.js +2 -0
  121. package/dist/cloudflare-query-compiler.js.map +1 -0
  122. package/dist/cloudflare-runtime.d.ts +15 -0
  123. package/dist/cloudflare-runtime.d.ts.map +1 -0
  124. package/dist/cloudflare-runtime.js +11 -0
  125. package/dist/cloudflare-runtime.js.map +1 -0
  126. package/dist/cloudflare-sync.d.ts +3 -0
  127. package/dist/cloudflare-sync.d.ts.map +1 -0
  128. package/dist/cloudflare-sync.js +3 -0
  129. package/dist/cloudflare-sync.js.map +1 -0
  130. package/dist/cloudflare-transaction-query.d.ts +2 -0
  131. package/dist/cloudflare-transaction-query.d.ts.map +1 -0
  132. package/dist/cloudflare-transaction-query.js +2 -0
  133. package/dist/cloudflare-transaction-query.js.map +1 -0
  134. package/dist/cloudflare-vite-wasm-loader.d.ts +2 -0
  135. package/dist/cloudflare-vite-wasm-loader.d.ts.map +1 -0
  136. package/dist/cloudflare-vite-wasm-loader.js +2 -0
  137. package/dist/cloudflare-vite-wasm-loader.js.map +1 -0
  138. package/dist/cloudflare.d.ts +3 -0
  139. package/dist/cloudflare.d.ts.map +1 -0
  140. package/dist/cloudflare.js +3 -0
  141. package/dist/cloudflare.js.map +1 -0
  142. package/dist/do-sql-tracking.d.ts +114 -0
  143. package/dist/do-sql-tracking.d.ts.map +1 -0
  144. package/dist/do-sql-tracking.js +280 -0
  145. package/dist/do-sql-tracking.js.map +1 -0
  146. package/dist/index.d.ts +4 -0
  147. package/dist/index.d.ts.map +1 -0
  148. package/dist/index.js +3 -0
  149. package/dist/index.js.map +1 -0
  150. package/dist/wake.d.ts +22 -0
  151. package/dist/wake.d.ts.map +1 -0
  152. package/dist/wake.js +114 -0
  153. package/dist/wake.js.map +1 -0
  154. package/dist/worker/cf-do-shim.d.ts +53 -0
  155. package/dist/worker/cf-do-shim.d.ts.map +1 -0
  156. package/dist/worker/cf-do-shim.js +66 -0
  157. package/dist/worker/cf-do-shim.js.map +1 -0
  158. package/dist/zero-http/encrypted-column-codec.d.ts +46 -0
  159. package/dist/zero-http/encrypted-column-codec.d.ts.map +1 -0
  160. package/dist/zero-http/encrypted-column-codec.js +676 -0
  161. package/dist/zero-http/encrypted-column-codec.js.map +1 -0
  162. package/dist/zero-http/encrypted-column-conformance.d.ts +7 -0
  163. package/dist/zero-http/encrypted-column-conformance.d.ts.map +1 -0
  164. package/dist/zero-http/encrypted-column-conformance.js +161 -0
  165. package/dist/zero-http/encrypted-column-conformance.js.map +1 -0
  166. package/dist/zero-http/fixture-schema.d.ts +127 -0
  167. package/dist/zero-http/fixture-schema.d.ts.map +1 -0
  168. package/dist/zero-http/fixture-schema.js +56 -0
  169. package/dist/zero-http/fixture-schema.js.map +1 -0
  170. package/dist/zero-http/mount.d.ts +71 -0
  171. package/dist/zero-http/mount.d.ts.map +1 -0
  172. package/dist/zero-http/mount.js +594 -0
  173. package/dist/zero-http/mount.js.map +1 -0
  174. package/dist/zero-http/payload-codec.d.ts +91 -0
  175. package/dist/zero-http/payload-codec.d.ts.map +1 -0
  176. package/dist/zero-http/payload-codec.js +10 -0
  177. package/dist/zero-http/payload-codec.js.map +1 -0
  178. package/dist/zero-http/server.d.ts +16 -0
  179. package/dist/zero-http/server.d.ts.map +1 -0
  180. package/dist/zero-http/server.js +270 -0
  181. package/dist/zero-http/server.js.map +1 -0
  182. package/dist/zero-http/test-harness.d.ts +32 -0
  183. package/dist/zero-http/test-harness.d.ts.map +1 -0
  184. package/dist/zero-http/test-harness.js +77 -0
  185. package/dist/zero-http/test-harness.js.map +1 -0
  186. package/dist/zero-http/transport.d.ts +71 -0
  187. package/dist/zero-http/transport.d.ts.map +1 -0
  188. package/dist/zero-http/transport.js +1106 -0
  189. package/dist/zero-http/transport.js.map +1 -0
  190. 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,3 @@
1
+ /** SQLite schema used by the native Orez Lite mutation acknowledgement shard. */
2
+ export declare function zeroHttpShardDDL(appId: string): string;
3
+ //# sourceMappingURL=sources.d.ts.map
@@ -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"}