@edge-base/cli 0.1.1

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 (234) hide show
  1. package/README.md +182 -0
  2. package/dist/commands/admin.d.ts +10 -0
  3. package/dist/commands/admin.d.ts.map +1 -0
  4. package/dist/commands/admin.js +307 -0
  5. package/dist/commands/admin.js.map +1 -0
  6. package/dist/commands/backup.d.ts +148 -0
  7. package/dist/commands/backup.d.ts.map +1 -0
  8. package/dist/commands/backup.js +1247 -0
  9. package/dist/commands/backup.js.map +1 -0
  10. package/dist/commands/completion.d.ts +3 -0
  11. package/dist/commands/completion.d.ts.map +1 -0
  12. package/dist/commands/completion.js +168 -0
  13. package/dist/commands/completion.js.map +1 -0
  14. package/dist/commands/create-plugin.d.ts +3 -0
  15. package/dist/commands/create-plugin.d.ts.map +1 -0
  16. package/dist/commands/create-plugin.js +208 -0
  17. package/dist/commands/create-plugin.js.map +1 -0
  18. package/dist/commands/deploy.d.ts +146 -0
  19. package/dist/commands/deploy.d.ts.map +1 -0
  20. package/dist/commands/deploy.js +1823 -0
  21. package/dist/commands/deploy.js.map +1 -0
  22. package/dist/commands/describe.d.ts +45 -0
  23. package/dist/commands/describe.d.ts.map +1 -0
  24. package/dist/commands/describe.js +114 -0
  25. package/dist/commands/describe.js.map +1 -0
  26. package/dist/commands/destroy.d.ts +13 -0
  27. package/dist/commands/destroy.d.ts.map +1 -0
  28. package/dist/commands/destroy.js +642 -0
  29. package/dist/commands/destroy.js.map +1 -0
  30. package/dist/commands/dev.d.ts +80 -0
  31. package/dist/commands/dev.d.ts.map +1 -0
  32. package/dist/commands/dev.js +1131 -0
  33. package/dist/commands/dev.js.map +1 -0
  34. package/dist/commands/docker.d.ts +22 -0
  35. package/dist/commands/docker.d.ts.map +1 -0
  36. package/dist/commands/docker.js +373 -0
  37. package/dist/commands/docker.js.map +1 -0
  38. package/dist/commands/export.d.ts +15 -0
  39. package/dist/commands/export.d.ts.map +1 -0
  40. package/dist/commands/export.js +142 -0
  41. package/dist/commands/export.js.map +1 -0
  42. package/dist/commands/init.d.ts +7 -0
  43. package/dist/commands/init.d.ts.map +1 -0
  44. package/dist/commands/init.js +506 -0
  45. package/dist/commands/init.js.map +1 -0
  46. package/dist/commands/keys.d.ts +23 -0
  47. package/dist/commands/keys.d.ts.map +1 -0
  48. package/dist/commands/keys.js +347 -0
  49. package/dist/commands/keys.js.map +1 -0
  50. package/dist/commands/logs.d.ts +17 -0
  51. package/dist/commands/logs.d.ts.map +1 -0
  52. package/dist/commands/logs.js +104 -0
  53. package/dist/commands/logs.js.map +1 -0
  54. package/dist/commands/migrate.d.ts +29 -0
  55. package/dist/commands/migrate.d.ts.map +1 -0
  56. package/dist/commands/migrate.js +302 -0
  57. package/dist/commands/migrate.js.map +1 -0
  58. package/dist/commands/migration.d.ts +18 -0
  59. package/dist/commands/migration.d.ts.map +1 -0
  60. package/dist/commands/migration.js +114 -0
  61. package/dist/commands/migration.js.map +1 -0
  62. package/dist/commands/neon.d.ts +66 -0
  63. package/dist/commands/neon.d.ts.map +1 -0
  64. package/dist/commands/neon.js +600 -0
  65. package/dist/commands/neon.js.map +1 -0
  66. package/dist/commands/plugins.d.ts +9 -0
  67. package/dist/commands/plugins.d.ts.map +1 -0
  68. package/dist/commands/plugins.js +295 -0
  69. package/dist/commands/plugins.js.map +1 -0
  70. package/dist/commands/realtime.d.ts +3 -0
  71. package/dist/commands/realtime.d.ts.map +1 -0
  72. package/dist/commands/realtime.js +71 -0
  73. package/dist/commands/realtime.js.map +1 -0
  74. package/dist/commands/secret.d.ts +7 -0
  75. package/dist/commands/secret.d.ts.map +1 -0
  76. package/dist/commands/secret.js +180 -0
  77. package/dist/commands/secret.js.map +1 -0
  78. package/dist/commands/seed.d.ts +21 -0
  79. package/dist/commands/seed.d.ts.map +1 -0
  80. package/dist/commands/seed.js +325 -0
  81. package/dist/commands/seed.js.map +1 -0
  82. package/dist/commands/telemetry.d.ts +12 -0
  83. package/dist/commands/telemetry.d.ts.map +1 -0
  84. package/dist/commands/telemetry.js +57 -0
  85. package/dist/commands/telemetry.js.map +1 -0
  86. package/dist/commands/typegen.d.ts +26 -0
  87. package/dist/commands/typegen.d.ts.map +1 -0
  88. package/dist/commands/typegen.js +212 -0
  89. package/dist/commands/typegen.js.map +1 -0
  90. package/dist/commands/upgrade.d.ts +29 -0
  91. package/dist/commands/upgrade.d.ts.map +1 -0
  92. package/dist/commands/upgrade.js +265 -0
  93. package/dist/commands/upgrade.js.map +1 -0
  94. package/dist/commands/webhook-test.d.ts +3 -0
  95. package/dist/commands/webhook-test.d.ts.map +1 -0
  96. package/dist/commands/webhook-test.js +133 -0
  97. package/dist/commands/webhook-test.js.map +1 -0
  98. package/dist/index.d.ts +3 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +183 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/lib/agent-contract.d.ts +36 -0
  103. package/dist/lib/agent-contract.d.ts.map +1 -0
  104. package/dist/lib/agent-contract.js +78 -0
  105. package/dist/lib/agent-contract.js.map +1 -0
  106. package/dist/lib/cf-auth.d.ts +76 -0
  107. package/dist/lib/cf-auth.d.ts.map +1 -0
  108. package/dist/lib/cf-auth.js +321 -0
  109. package/dist/lib/cf-auth.js.map +1 -0
  110. package/dist/lib/cli-context.d.ts +23 -0
  111. package/dist/lib/cli-context.d.ts.map +1 -0
  112. package/dist/lib/cli-context.js +40 -0
  113. package/dist/lib/cli-context.js.map +1 -0
  114. package/dist/lib/cloudflare-deploy-manifest.d.ts +26 -0
  115. package/dist/lib/cloudflare-deploy-manifest.d.ts.map +1 -0
  116. package/dist/lib/cloudflare-deploy-manifest.js +107 -0
  117. package/dist/lib/cloudflare-deploy-manifest.js.map +1 -0
  118. package/dist/lib/cloudflare-wrangler-resources.d.ts +32 -0
  119. package/dist/lib/cloudflare-wrangler-resources.d.ts.map +1 -0
  120. package/dist/lib/cloudflare-wrangler-resources.js +59 -0
  121. package/dist/lib/cloudflare-wrangler-resources.js.map +1 -0
  122. package/dist/lib/config-editor.d.ts +139 -0
  123. package/dist/lib/config-editor.d.ts.map +1 -0
  124. package/dist/lib/config-editor.js +1188 -0
  125. package/dist/lib/config-editor.js.map +1 -0
  126. package/dist/lib/deploy-shared.d.ts +55 -0
  127. package/dist/lib/deploy-shared.d.ts.map +1 -0
  128. package/dist/lib/deploy-shared.js +183 -0
  129. package/dist/lib/deploy-shared.js.map +1 -0
  130. package/dist/lib/dev-sidecar.d.ts +31 -0
  131. package/dist/lib/dev-sidecar.d.ts.map +1 -0
  132. package/dist/lib/dev-sidecar.js +1058 -0
  133. package/dist/lib/dev-sidecar.js.map +1 -0
  134. package/dist/lib/fetch-with-timeout.d.ts +14 -0
  135. package/dist/lib/fetch-with-timeout.d.ts.map +1 -0
  136. package/dist/lib/fetch-with-timeout.js +29 -0
  137. package/dist/lib/fetch-with-timeout.js.map +1 -0
  138. package/dist/lib/function-registry.d.ts +56 -0
  139. package/dist/lib/function-registry.d.ts.map +1 -0
  140. package/dist/lib/function-registry.js +210 -0
  141. package/dist/lib/function-registry.js.map +1 -0
  142. package/dist/lib/load-config.d.ts +24 -0
  143. package/dist/lib/load-config.d.ts.map +1 -0
  144. package/dist/lib/load-config.js +263 -0
  145. package/dist/lib/load-config.js.map +1 -0
  146. package/dist/lib/local-secrets.d.ts +2 -0
  147. package/dist/lib/local-secrets.d.ts.map +1 -0
  148. package/dist/lib/local-secrets.js +60 -0
  149. package/dist/lib/local-secrets.js.map +1 -0
  150. package/dist/lib/managed-resource-names.d.ts +4 -0
  151. package/dist/lib/managed-resource-names.d.ts.map +1 -0
  152. package/dist/lib/managed-resource-names.js +19 -0
  153. package/dist/lib/managed-resource-names.js.map +1 -0
  154. package/dist/lib/migrator.d.ts +57 -0
  155. package/dist/lib/migrator.d.ts.map +1 -0
  156. package/dist/lib/migrator.js +321 -0
  157. package/dist/lib/migrator.js.map +1 -0
  158. package/dist/lib/neon.d.ts +41 -0
  159. package/dist/lib/neon.d.ts.map +1 -0
  160. package/dist/lib/neon.js +325 -0
  161. package/dist/lib/neon.js.map +1 -0
  162. package/dist/lib/node-tools.d.ts +10 -0
  163. package/dist/lib/node-tools.d.ts.map +1 -0
  164. package/dist/lib/node-tools.js +32 -0
  165. package/dist/lib/node-tools.js.map +1 -0
  166. package/dist/lib/npm.d.ts +8 -0
  167. package/dist/lib/npm.d.ts.map +1 -0
  168. package/dist/lib/npm.js +10 -0
  169. package/dist/lib/npm.js.map +1 -0
  170. package/dist/lib/npx.d.ts +9 -0
  171. package/dist/lib/npx.d.ts.map +1 -0
  172. package/dist/lib/npx.js +11 -0
  173. package/dist/lib/npx.js.map +1 -0
  174. package/dist/lib/project-runtime.d.ts +38 -0
  175. package/dist/lib/project-runtime.d.ts.map +1 -0
  176. package/dist/lib/project-runtime.js +122 -0
  177. package/dist/lib/project-runtime.js.map +1 -0
  178. package/dist/lib/prompts.d.ts +28 -0
  179. package/dist/lib/prompts.d.ts.map +1 -0
  180. package/dist/lib/prompts.js +85 -0
  181. package/dist/lib/prompts.js.map +1 -0
  182. package/dist/lib/rate-limit-bindings.d.ts +11 -0
  183. package/dist/lib/rate-limit-bindings.d.ts.map +1 -0
  184. package/dist/lib/rate-limit-bindings.js +52 -0
  185. package/dist/lib/rate-limit-bindings.js.map +1 -0
  186. package/dist/lib/realtime-provision.d.ts +22 -0
  187. package/dist/lib/realtime-provision.d.ts.map +1 -0
  188. package/dist/lib/realtime-provision.js +246 -0
  189. package/dist/lib/realtime-provision.js.map +1 -0
  190. package/dist/lib/resolve-options.d.ts +42 -0
  191. package/dist/lib/resolve-options.d.ts.map +1 -0
  192. package/dist/lib/resolve-options.js +98 -0
  193. package/dist/lib/resolve-options.js.map +1 -0
  194. package/dist/lib/runtime-scaffold.d.ts +17 -0
  195. package/dist/lib/runtime-scaffold.d.ts.map +1 -0
  196. package/dist/lib/runtime-scaffold.js +366 -0
  197. package/dist/lib/runtime-scaffold.js.map +1 -0
  198. package/dist/lib/schema-check.d.ts +79 -0
  199. package/dist/lib/schema-check.d.ts.map +1 -0
  200. package/dist/lib/schema-check.js +347 -0
  201. package/dist/lib/schema-check.js.map +1 -0
  202. package/dist/lib/spinner.d.ts +20 -0
  203. package/dist/lib/spinner.d.ts.map +1 -0
  204. package/dist/lib/spinner.js +42 -0
  205. package/dist/lib/spinner.js.map +1 -0
  206. package/dist/lib/telemetry.d.ts +37 -0
  207. package/dist/lib/telemetry.d.ts.map +1 -0
  208. package/dist/lib/telemetry.js +98 -0
  209. package/dist/lib/telemetry.js.map +1 -0
  210. package/dist/lib/turnstile-provision.d.ts +27 -0
  211. package/dist/lib/turnstile-provision.d.ts.map +1 -0
  212. package/dist/lib/turnstile-provision.js +144 -0
  213. package/dist/lib/turnstile-provision.js.map +1 -0
  214. package/dist/lib/update-check.d.ts +13 -0
  215. package/dist/lib/update-check.d.ts.map +1 -0
  216. package/dist/lib/update-check.js +110 -0
  217. package/dist/lib/update-check.js.map +1 -0
  218. package/dist/lib/wrangler-secrets.d.ts +3 -0
  219. package/dist/lib/wrangler-secrets.d.ts.map +1 -0
  220. package/dist/lib/wrangler-secrets.js +32 -0
  221. package/dist/lib/wrangler-secrets.js.map +1 -0
  222. package/dist/lib/wrangler.d.ts +9 -0
  223. package/dist/lib/wrangler.d.ts.map +1 -0
  224. package/dist/lib/wrangler.js +84 -0
  225. package/dist/lib/wrangler.js.map +1 -0
  226. package/dist/templates/plugin/README.md.tmpl +91 -0
  227. package/dist/templates/plugin/client/js/package.json.tmpl +23 -0
  228. package/dist/templates/plugin/client/js/src/index.ts.tmpl +68 -0
  229. package/dist/templates/plugin/client/js/tsconfig.json.tmpl +14 -0
  230. package/dist/templates/plugin/server/package.json.tmpl +19 -0
  231. package/dist/templates/plugin/server/src/index.ts.tmpl +59 -0
  232. package/dist/templates/plugin/server/tsconfig.json.tmpl +14 -0
  233. package/llms.txt +94 -0
  234. package/package.json +60 -0
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Safe config loading — evaluates edgebase.config.ts without shell injection risk.
3
+ *
4
+ * Uses execFileSync (no shell) + temp script file with JSON.stringify'd paths
5
+ * to prevent command injection via malicious file paths.
6
+ *
7
+ * Three strategies (tsx → esbuild → regex), matching typegen.ts fallback chain.
8
+ */
9
+ import { execFileSync } from 'node:child_process';
10
+ import { writeFileSync, unlinkSync, mkdirSync, readFileSync } from 'node:fs';
11
+ import { join, resolve } from 'node:path';
12
+ import { buildBundleWithEsbuild, execTsxSync } from './node-tools.js';
13
+ import { ensureProjectSharedPackageLink } from './runtime-scaffold.js';
14
+ function firstUsefulLine(value) {
15
+ const lines = value
16
+ .split(/\r?\n/)
17
+ .map((line) => line.trim())
18
+ .filter(Boolean);
19
+ if (lines.length === 0)
20
+ return null;
21
+ return (lines.find((line) => line.startsWith('Error:'))
22
+ ?? lines.find((line) => /^Transform failed|^Build failed/.test(line))
23
+ ?? lines[0]);
24
+ }
25
+ function summarizeLoadConfigError(error) {
26
+ const baseMessage = error instanceof Error ? error.message.split('\n')[0] : String(error);
27
+ if (!error || typeof error !== 'object')
28
+ return baseMessage;
29
+ const stderr = typeof error.stderr === 'string'
30
+ ? error.stderr
31
+ : '';
32
+ const stdout = typeof error.stdout === 'string'
33
+ ? error.stdout
34
+ : '';
35
+ const detail = firstUsefulLine(stderr) ?? firstUsefulLine(stdout);
36
+ if (!detail || baseMessage.includes(detail))
37
+ return baseMessage;
38
+ return `${baseMessage} | ${detail}`;
39
+ }
40
+ /**
41
+ * Safely evaluate edgebase.config.ts via tsx and return the config as a plain object.
42
+ * Falls back to esbuild, then regex parsing if tsx is unavailable.
43
+ *
44
+ * @param configPath - Absolute or relative path to the config file
45
+ * @param cwd - Working directory for evaluation
46
+ * @param options.stripFunctions - Remove function values (default: true)
47
+ * @param options.allowRegexFallback - Allow schema-only regex parsing when evaluation fails (default: true)
48
+ */
49
+ export function loadConfigSafe(configPath, cwd, options) {
50
+ const stripFns = options?.stripFunctions !== false;
51
+ const allowRegexFallback = options?.allowRegexFallback !== false;
52
+ const absPath = resolve(configPath).replace(/\\/g, '/');
53
+ const tmpDir = join(cwd, '.edgebase');
54
+ mkdirSync(tmpDir, { recursive: true });
55
+ ensureProjectSharedPackageLink(cwd);
56
+ let tsxError = null;
57
+ let esbuildError = null;
58
+ // Strategy 1: tsx eval via temp script (safest, most accurate)
59
+ try {
60
+ const tmpScript = join(tmpDir, '_config_eval.mjs');
61
+ const replacer = stripFns
62
+ ? `(_, v) => typeof v === 'function' ? '__EDGEBASE_FUNCTION__' : v`
63
+ : `undefined`;
64
+ const code = [
65
+ `const p = ${JSON.stringify(absPath)};`,
66
+ `const mod = await import(p);`,
67
+ `const c = mod.default ?? mod;`,
68
+ `console.log(JSON.stringify(c, ${replacer}));`,
69
+ ].join('\n');
70
+ writeFileSync(tmpScript, code, 'utf-8');
71
+ try {
72
+ const result = execTsxSync([tmpScript], {
73
+ cwd, encoding: 'utf-8', timeout: 15000, stdio: ['pipe', 'pipe', 'pipe'],
74
+ }).trim();
75
+ return JSON.parse(result);
76
+ }
77
+ finally {
78
+ try {
79
+ unlinkSync(tmpScript);
80
+ }
81
+ catch { /* cleanup non-fatal */ }
82
+ }
83
+ }
84
+ catch (err) {
85
+ tsxError = summarizeLoadConfigError(err);
86
+ // tsx not available or config error — fall through
87
+ }
88
+ // Strategy 2: esbuild bundle + node eval
89
+ try {
90
+ const tmpBundle = join(tmpDir, '_config_eval_bundle.mjs');
91
+ buildBundleWithEsbuild(configPath, tmpBundle, cwd);
92
+ const tmpEvalScript = join(tmpDir, '_config_eval2.mjs');
93
+ const replacer = stripFns
94
+ ? `(_, v) => typeof v === 'function' ? '__EDGEBASE_FUNCTION__' : v`
95
+ : `undefined`;
96
+ const code = [
97
+ `const p = ${JSON.stringify(tmpBundle.replace(/\\/g, '/'))};`,
98
+ `const mod = await import(p);`,
99
+ `const c = mod.default ?? mod;`,
100
+ `console.log(JSON.stringify(c, ${replacer}));`,
101
+ ].join('\n');
102
+ writeFileSync(tmpEvalScript, code, 'utf-8');
103
+ try {
104
+ const result = execFileSync('node', [tmpEvalScript], {
105
+ cwd, encoding: 'utf-8', timeout: 10000, stdio: ['pipe', 'pipe', 'pipe'],
106
+ }).trim();
107
+ return JSON.parse(result);
108
+ }
109
+ finally {
110
+ try {
111
+ unlinkSync(tmpBundle);
112
+ }
113
+ catch { /* cleanup non-fatal */ }
114
+ try {
115
+ unlinkSync(tmpEvalScript);
116
+ }
117
+ catch { /* cleanup non-fatal */ }
118
+ }
119
+ }
120
+ catch (err) {
121
+ esbuildError = summarizeLoadConfigError(err);
122
+ // Both strategies failed — fall through to regex
123
+ }
124
+ if (!allowRegexFallback) {
125
+ const messages = [tsxError, esbuildError].filter((err) => Boolean(err));
126
+ const detail = messages.length > 0
127
+ ? ` ${messages.join(' | ')}`
128
+ : '';
129
+ throw new Error(`Failed to fully evaluate edgebase.config.ts.${detail}`.trim());
130
+ }
131
+ // Strategy 3: regex-based fallback (no execution required)
132
+ return parseConfigRegex(configPath);
133
+ }
134
+ // ─── Regex fallback parser ───
135
+ /**
136
+ * Find the index of the closing brace that balances the opening brace at `openIndex`.
137
+ * Returns -1 if no matching brace is found.
138
+ */
139
+ function findMatchingBrace(content, openIndex) {
140
+ let depth = 1;
141
+ for (let i = openIndex + 1; i < content.length; i++) {
142
+ if (content[i] === '{')
143
+ depth++;
144
+ else if (content[i] === '}') {
145
+ depth--;
146
+ if (depth === 0)
147
+ return i;
148
+ }
149
+ }
150
+ return -1;
151
+ }
152
+ function extractNamedObjectBlock(content, key) {
153
+ const pattern = new RegExp(`\\b${key}\\s*:\\s*\\{`, 'm');
154
+ const match = pattern.exec(content);
155
+ if (!match)
156
+ return null;
157
+ const openIndex = content.indexOf('{', match.index);
158
+ if (openIndex === -1)
159
+ return null;
160
+ const closeIndex = findMatchingBrace(content, openIndex);
161
+ if (closeIndex === -1)
162
+ return null;
163
+ return content.slice(openIndex + 1, closeIndex);
164
+ }
165
+ function extractTopLevelObjectEntries(block) {
166
+ const entries = {};
167
+ let cursor = 0;
168
+ while (cursor < block.length) {
169
+ const keyMatch = /\b([A-Za-z_]\w*)\b/g;
170
+ keyMatch.lastIndex = cursor;
171
+ const match = keyMatch.exec(block);
172
+ if (!match)
173
+ break;
174
+ const key = match[1];
175
+ let index = keyMatch.lastIndex;
176
+ while (index < block.length && /\s/.test(block[index]))
177
+ index++;
178
+ if (block[index] !== ':') {
179
+ cursor = index + 1;
180
+ continue;
181
+ }
182
+ index += 1;
183
+ while (index < block.length && /\s/.test(block[index]))
184
+ index++;
185
+ if (block[index] !== '{') {
186
+ cursor = index + 1;
187
+ continue;
188
+ }
189
+ const closeIndex = findMatchingBrace(block, index);
190
+ if (closeIndex === -1)
191
+ break;
192
+ entries[key] = block.slice(index + 1, closeIndex);
193
+ cursor = closeIndex + 1;
194
+ }
195
+ return entries;
196
+ }
197
+ /** Exported for testing. */
198
+ export function parseConfigRegex(configPath) {
199
+ const content = readFileSync(configPath, 'utf-8');
200
+ const result = {};
201
+ const databases = {};
202
+ const databasesBlock = extractNamedObjectBlock(content, 'databases');
203
+ if (databasesBlock) {
204
+ for (const [dbKey, dbContent] of Object.entries(extractTopLevelObjectEntries(databasesBlock))) {
205
+ const tablesBlock = extractNamedObjectBlock(dbContent, 'tables');
206
+ if (!tablesBlock)
207
+ continue;
208
+ const tables = extractTablesFromBlock(tablesBlock);
209
+ if (Object.keys(tables).length > 0) {
210
+ databases[dbKey] = { tables };
211
+ }
212
+ }
213
+ }
214
+ if (Object.keys(databases).length > 0) {
215
+ result.databases = databases;
216
+ }
217
+ return result;
218
+ }
219
+ function extractTablesFromBlock(block) {
220
+ const tables = {};
221
+ for (const [name, tableContent] of Object.entries(extractTopLevelObjectEntries(block))) {
222
+ const schemaBlock = extractNamedObjectBlock(tableContent, 'schema');
223
+ if (!schemaBlock)
224
+ continue;
225
+ const schema = extractSchemaFields(schemaBlock);
226
+ tables[name] = { schema };
227
+ }
228
+ return tables;
229
+ }
230
+ function extractSchemaFields(block) {
231
+ const schema = {};
232
+ for (const [name, fieldContent] of Object.entries(extractTopLevelObjectEntries(block))) {
233
+ if (['required', 'unique'].includes(name))
234
+ continue;
235
+ const typeMatch = /type\s*:\s*['"](\w+)['"]/.exec(fieldContent);
236
+ if (!typeMatch)
237
+ continue;
238
+ const field = { type: typeMatch[1] };
239
+ const rest = fieldContent;
240
+ if (/required\s*:\s*true/.test(rest))
241
+ field.required = true;
242
+ const referenceMatch = /references\s*:\s*['"]([^'"]+)['"]/.exec(rest)
243
+ ?? /references\s*:\s*\{[\s\S]*?table\s*:\s*['"]([^'"]+)['"]/.exec(rest);
244
+ if (referenceMatch)
245
+ field.references = referenceMatch[1];
246
+ const enumMatch = /enum\s*:\s*\[([^\]]+)\]/.exec(rest);
247
+ if (enumMatch) {
248
+ field.enum = enumMatch[1]
249
+ .split(',')
250
+ .map((entry) => entry.trim().replace(/^['"]|['"]$/g, ''))
251
+ .filter(Boolean);
252
+ }
253
+ schema[name] = field;
254
+ }
255
+ const falsePattern = /(\w+)\s*:\s*false/g;
256
+ let fm;
257
+ while ((fm = falsePattern.exec(block)) !== null) {
258
+ if (!['required', 'unique'].includes(fm[1]))
259
+ schema[fm[1]] = false;
260
+ }
261
+ return schema;
262
+ }
263
+ //# sourceMappingURL=load-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-config.js","sourceRoot":"","sources":["../../src/lib/load-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function writeLocalSecrets(projectDir: string, values: Record<string, string>): void;
2
+ //# sourceMappingURL=local-secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-secrets.d.ts","sourceRoot":"","sources":["../../src/lib/local-secrets.ts"],"names":[],"mappings":"AA2CA,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAkB1F"}
@@ -0,0 +1,60 @@
1
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ function parseEnvContent(content) {
4
+ const result = {};
5
+ for (const line of content.split('\n')) {
6
+ const trimmed = line.trim();
7
+ if (!trimmed || trimmed.startsWith('#'))
8
+ continue;
9
+ const eqIdx = trimmed.indexOf('=');
10
+ if (eqIdx <= 0)
11
+ continue;
12
+ result[trimmed.slice(0, eqIdx).trim()] = trimmed.slice(eqIdx + 1).trim();
13
+ }
14
+ return result;
15
+ }
16
+ function writeEnvFile(filePath, values, comment) {
17
+ const content = [
18
+ comment,
19
+ ...Object.entries(values).map(([key, value]) => `${key}=${value}`),
20
+ '',
21
+ ].join('\n');
22
+ writeFileSync(filePath, content, 'utf-8');
23
+ chmodSync(filePath, 0o600);
24
+ }
25
+ function readSecretsJson(projectDir) {
26
+ const filePath = join(projectDir, '.edgebase', 'secrets.json');
27
+ if (!existsSync(filePath))
28
+ return {};
29
+ try {
30
+ return JSON.parse(readFileSync(filePath, 'utf-8'));
31
+ }
32
+ catch {
33
+ return {};
34
+ }
35
+ }
36
+ function writeSecretsJson(projectDir, values) {
37
+ const edgebaseDir = join(projectDir, '.edgebase');
38
+ if (!existsSync(edgebaseDir))
39
+ mkdirSync(edgebaseDir, { recursive: true });
40
+ const filePath = join(edgebaseDir, 'secrets.json');
41
+ writeFileSync(filePath, JSON.stringify(values, null, 2) + '\n', 'utf-8');
42
+ chmodSync(filePath, 0o600);
43
+ }
44
+ export function writeLocalSecrets(projectDir, values) {
45
+ const envDevPath = join(projectDir, '.env.development');
46
+ const devVarsPath = join(projectDir, '.dev.vars');
47
+ const primaryPath = (existsSync(envDevPath) || !existsSync(devVarsPath))
48
+ ? envDevPath
49
+ : devVarsPath;
50
+ const existingPrimary = existsSync(primaryPath)
51
+ ? parseEnvContent(readFileSync(primaryPath, 'utf-8'))
52
+ : {};
53
+ const mergedPrimary = { ...existingPrimary, ...values };
54
+ writeEnvFile(primaryPath, mergedPrimary, '# EdgeBase local development secrets');
55
+ if (primaryPath !== devVarsPath) {
56
+ writeEnvFile(devVarsPath, mergedPrimary, '# EdgeBase local development secrets (synced)');
57
+ }
58
+ writeSecretsJson(projectDir, { ...readSecretsJson(projectDir), ...values });
59
+ }
60
+ //# sourceMappingURL=local-secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-secrets.js","sourceRoot":"","sources":["../../src/lib/local-secrets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,CAAC;YAAE,SAAS;QACzB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB,EAAE,MAA8B,EAAE,OAAe;IACrF,MAAM,OAAO,GAAG;QACd,OAAO;QACP,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QAClE,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1C,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAA2B,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAkB,EAAE,MAA8B;IAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACnD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACzE,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAkB,EAAE,MAA8B;IAClF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACtE,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,WAAW,CAAC;IAChB,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW,CAAC;QAC7C,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,aAAa,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,MAAM,EAAE,CAAC;IAExD,YAAY,CAAC,WAAW,EAAE,aAAa,EAAE,sCAAsC,CAAC,CAAC;IAEjF,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;QAChC,YAAY,CAAC,WAAW,EAAE,aAAa,EAAE,+CAA+C,CAAC,CAAC;IAC5F,CAAC;IAED,gBAAgB,CAAC,UAAU,EAAE,EAAE,GAAG,eAAe,CAAC,UAAU,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function extractWranglerWorkerName(content: string): string;
2
+ export declare function buildManagedD1DatabaseName(workerName: string, resourceName: string): string;
3
+ export declare function buildLegacyManagedD1DatabaseName(resourceName: string): string;
4
+ //# sourceMappingURL=managed-resource-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-resource-names.d.ts","sourceRoot":"","sources":["../../src/lib/managed-resource-names.ts"],"names":[],"mappings":"AAUA,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAE3F;AAED,wBAAgB,gCAAgC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE7E"}
@@ -0,0 +1,19 @@
1
+ function normalizeManagedName(value, fallback = 'edgebase') {
2
+ const normalized = value
3
+ .trim()
4
+ .toLowerCase()
5
+ .replace(/[^a-z0-9-]+/g, '-')
6
+ .replace(/^-+|-+$/g, '')
7
+ .replace(/-{2,}/g, '-');
8
+ return normalized || fallback;
9
+ }
10
+ export function extractWranglerWorkerName(content) {
11
+ return content.match(/^name\s*=\s*"([^"]+)"/m)?.[1] ?? '';
12
+ }
13
+ export function buildManagedD1DatabaseName(workerName, resourceName) {
14
+ return `${normalizeManagedName(workerName)}-${normalizeManagedName(resourceName, 'database')}`;
15
+ }
16
+ export function buildLegacyManagedD1DatabaseName(resourceName) {
17
+ return `edgebase-${normalizeManagedName(resourceName, 'database')}`;
18
+ }
19
+ //# sourceMappingURL=managed-resource-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-resource-names.js","sourceRoot":"","sources":["../../src/lib/managed-resource-names.ts"],"names":[],"mappings":"AAAA,SAAS,oBAAoB,CAAC,KAAa,EAAE,QAAQ,GAAG,UAAU;IAChE,MAAM,UAAU,GAAG,KAAK;SACrB,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,UAAU,IAAI,QAAQ,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAe;IACvD,OAAO,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,UAAkB,EAAE,YAAoB;IACjF,OAAO,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,oBAAoB,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,YAAoB;IACnE,OAAO,YAAY,oBAAoB,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC;AACtE,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { ProviderChange } from './schema-check.js';
2
+ export interface MigrationOptions {
3
+ /** What to migrate: auth, data, or both. */
4
+ scope: 'auth' | 'data' | 'all';
5
+ /** Data namespace(s) to migrate (e.g. ['shared']). */
6
+ namespaces?: string[];
7
+ /** Worker URL (http://localhost:8787 for dev, https://my-app.workers.dev for deploy). */
8
+ serverUrl: string;
9
+ /** Service Key for Admin API authentication. */
10
+ serviceKey: string;
11
+ /** Show preview only, don't execute. */
12
+ dryRun: boolean;
13
+ }
14
+ export interface DumpedData {
15
+ auth?: {
16
+ tables: Record<string, unknown[]>;
17
+ };
18
+ data?: Record<string, {
19
+ tables: Record<string, unknown[]>;
20
+ }>;
21
+ }
22
+ export interface MigrationResult {
23
+ success: boolean;
24
+ authTables: number;
25
+ authRows: number;
26
+ dataTables: number;
27
+ dataRows: number;
28
+ duration: number;
29
+ errors: string[];
30
+ }
31
+ /**
32
+ * Dump data from the currently running Worker (before deploy/restart).
33
+ */
34
+ export declare function dumpCurrentData(opts: MigrationOptions): Promise<DumpedData>;
35
+ /**
36
+ * Restore data to the new Worker (after deploy/restart).
37
+ * Sends tables one at a time with progress bar display.
38
+ */
39
+ export declare function restoreToNewProvider(opts: MigrationOptions, dumped: DumpedData): Promise<void>;
40
+ /**
41
+ * Display a migration preview without executing.
42
+ */
43
+ export declare function dryRunSummary(opts: MigrationOptions): Promise<MigrationResult>;
44
+ /**
45
+ * Execute a full migration. Called from deploy.ts, dev.ts, and migrate.ts.
46
+ *
47
+ * Note: This only handles the DUMP phase. The caller is responsible for:
48
+ * 1. Calling dumpCurrentData() before deploy/restart
49
+ * 2. Deploying/restarting with new config
50
+ * 3. Calling restoreToNewProvider() after deploy/restart
51
+ */
52
+ export declare function executeMigration(opts: MigrationOptions): Promise<MigrationResult>;
53
+ /**
54
+ * Prompt the user to choose migration action when provider change is detected.
55
+ */
56
+ export declare function promptMigration(changes: ProviderChange[]): Promise<'migrate' | 'skip'>;
57
+ //# sourceMappingURL=migrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../src/lib/migrator.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAC/B,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,yFAAyF;IACzF,SAAS,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;KAAE,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AA8DD;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAiDjF;AAID;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,IAAI,CAAC,CA4Ef;AAID;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAmEpF;AAID;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAwCvF;AAID;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC,CA2C5F"}