@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,321 @@
1
+ /**
2
+ * migrator.ts — CLI data migration engine.
3
+ *
4
+ * Orchestrates data migration between providers (D1 ↔ PostgreSQL)
5
+ * by communicating with the running Worker's Admin Backup API.
6
+ *
7
+ * Flow:
8
+ * 1. Dump data from running Worker (old provider)
9
+ * 2. Caller deploys/restarts with new config
10
+ * 3. Restore data to new Worker (new provider)
11
+ *
12
+ * Supports: auth tables (16 tables) + data namespace tables (user-defined).
13
+ */
14
+ import chalk from 'chalk';
15
+ import { spin } from './spinner.js';
16
+ import { raiseNeedsInput } from './agent-contract.js';
17
+ import { isNonInteractive, isQuiet } from './cli-context.js';
18
+ import { fetchWithTimeout } from './fetch-with-timeout.js';
19
+ // ─── Progress Bar Helper ───
20
+ function progressBar(current, total, width = 20) {
21
+ if (total === 0)
22
+ return '░'.repeat(width);
23
+ const ratio = Math.min(current / total, 1);
24
+ const filled = Math.round(ratio * width);
25
+ const empty = width - filled;
26
+ const percent = Math.round(ratio * 100);
27
+ return '█'.repeat(filled) + '░'.repeat(empty) + ` ${percent}%`;
28
+ }
29
+ function logHuman(...args) {
30
+ if (isQuiet())
31
+ return;
32
+ console.log(...args);
33
+ }
34
+ // ─── Admin API Client ───
35
+ async function apiCall(serverUrl, serviceKey, path, body, timeoutMs = 120_000) {
36
+ const url = `${serverUrl.replace(/\/$/, '')}/admin/api/backup${path}`;
37
+ const resp = await fetchWithTimeout(url, {
38
+ method: 'POST',
39
+ headers: {
40
+ 'Content-Type': 'application/json',
41
+ 'X-EdgeBase-Service-Key': serviceKey,
42
+ },
43
+ body: body ? JSON.stringify(body) : undefined,
44
+ }, timeoutMs);
45
+ if (!resp.ok) {
46
+ const text = await resp.text();
47
+ throw new Error(`Migration API error (${resp.status}): ${text}`);
48
+ }
49
+ return resp.json();
50
+ }
51
+ // ─── Dump ───
52
+ /**
53
+ * Print table listing after dump.
54
+ */
55
+ function printTableListing(tables, indent = ' ') {
56
+ const nonEmpty = Object.entries(tables).filter(([, rows]) => rows.length > 0);
57
+ if (nonEmpty.length === 0)
58
+ return;
59
+ const maxNameLen = Math.max(...nonEmpty.map(([name]) => name.length), 10);
60
+ for (const [name, rows] of nonEmpty) {
61
+ logHuman(chalk.dim(`${indent}${name.padEnd(maxNameLen + 2)}`) +
62
+ chalk.dim(`${rows.length.toLocaleString().padStart(8)} rows`));
63
+ }
64
+ }
65
+ /**
66
+ * Dump data from the currently running Worker (before deploy/restart).
67
+ */
68
+ export async function dumpCurrentData(opts) {
69
+ const dumped = {};
70
+ // Auth dump
71
+ if (opts.scope === 'auth' || opts.scope === 'all') {
72
+ const s = spin('Dumping auth tables...');
73
+ try {
74
+ const result = await apiCall(opts.serverUrl, opts.serviceKey, '/dump-d1');
75
+ dumped.auth = { tables: result.tables };
76
+ const totalRows = Object.values(result.tables).reduce((sum, rows) => sum + rows.length, 0);
77
+ const tableCount = Object.keys(result.tables).filter(t => result.tables[t].length > 0).length;
78
+ s.succeed(`Auth tables dumped (${tableCount} tables, ${totalRows.toLocaleString()} rows)`);
79
+ printTableListing(result.tables);
80
+ }
81
+ catch (err) {
82
+ s.fail(`Auth dump failed: ${err.message}`);
83
+ throw err;
84
+ }
85
+ }
86
+ // Data namespace dump
87
+ if (opts.scope === 'data' || opts.scope === 'all') {
88
+ const namespaces = opts.namespaces ?? [];
89
+ if (namespaces.length > 0) {
90
+ dumped.data = {};
91
+ for (const ns of namespaces) {
92
+ const s = spin(`Dumping data namespace: ${ns}...`);
93
+ try {
94
+ const result = await apiCall(opts.serverUrl, opts.serviceKey, '/dump-data', { namespace: ns });
95
+ dumped.data[ns] = { tables: result.tables };
96
+ const totalRows = Object.values(result.tables).reduce((sum, rows) => sum + rows.length, 0);
97
+ const tableCount = Object.keys(result.tables).filter(t => result.tables[t].length > 0).length;
98
+ s.succeed(`Data '${ns}' dumped (${tableCount} tables, ${totalRows.toLocaleString()} rows)`);
99
+ printTableListing(result.tables);
100
+ }
101
+ catch (err) {
102
+ s.fail(`Data '${ns}' dump failed: ${err.message}`);
103
+ throw err;
104
+ }
105
+ }
106
+ }
107
+ }
108
+ return dumped;
109
+ }
110
+ // ─── Restore ───
111
+ /**
112
+ * Restore data to the new Worker (after deploy/restart).
113
+ * Sends tables one at a time with progress bar display.
114
+ */
115
+ export async function restoreToNewProvider(opts, dumped) {
116
+ // Auth restore — per-table progress
117
+ if (dumped.auth && (opts.scope === 'auth' || opts.scope === 'all')) {
118
+ const tables = dumped.auth.tables;
119
+ const nonEmptyTables = Object.entries(tables).filter(([, rows]) => rows.length > 0);
120
+ const totalRows = Object.values(tables).reduce((sum, rows) => sum + rows.length, 0);
121
+ const totalTables = nonEmptyTables.length;
122
+ const s = spin(`Restoring auth tables (${totalRows.toLocaleString()} rows)...`);
123
+ try {
124
+ // Step 1: Wipe existing data
125
+ s.text = 'Wiping existing auth data...';
126
+ await apiCall(opts.serverUrl, opts.serviceKey, '/restore-d1', { tables: {}, skipWipe: false }, 300_000);
127
+ // Step 2: Restore tables one by one
128
+ let completed = 0;
129
+ for (const [tableName, rows] of nonEmptyTables) {
130
+ s.text = `Restoring auth [${completed + 1}/${totalTables}] ${tableName} (${rows.length.toLocaleString()} rows) ${progressBar(completed, totalTables)}`;
131
+ await apiCall(opts.serverUrl, opts.serviceKey, '/restore-d1', { tables: { [tableName]: rows }, skipWipe: true }, 300_000);
132
+ completed++;
133
+ }
134
+ s.succeed(`Auth tables restored (${totalTables} tables, ${totalRows.toLocaleString()} rows)`);
135
+ }
136
+ catch (err) {
137
+ s.fail(`Auth restore failed: ${err.message}`);
138
+ throw err;
139
+ }
140
+ }
141
+ // Data namespace restore — per-table progress
142
+ if (dumped.data && (opts.scope === 'data' || opts.scope === 'all')) {
143
+ for (const [ns, data] of Object.entries(dumped.data)) {
144
+ const tables = data.tables;
145
+ const nonEmptyTables = Object.entries(tables).filter(([, rows]) => rows.length > 0);
146
+ const totalRows = Object.values(tables).reduce((sum, rows) => sum + rows.length, 0);
147
+ const totalTables = nonEmptyTables.length;
148
+ const s = spin(`Restoring data '${ns}' (${totalRows.toLocaleString()} rows)...`);
149
+ try {
150
+ // Step 1: Wipe existing data
151
+ s.text = `Wiping existing data '${ns}'...`;
152
+ await apiCall(opts.serverUrl, opts.serviceKey, '/restore-data', { namespace: ns, tables: {}, skipWipe: false }, 300_000);
153
+ // Step 2: Restore tables one by one
154
+ let completed = 0;
155
+ for (const [tableName, rows] of nonEmptyTables) {
156
+ s.text = `Restoring '${ns}' [${completed + 1}/${totalTables}] ${tableName} (${rows.length.toLocaleString()} rows) ${progressBar(completed, totalTables)}`;
157
+ await apiCall(opts.serverUrl, opts.serviceKey, '/restore-data', { namespace: ns, tables: { [tableName]: rows }, skipWipe: true }, 300_000);
158
+ completed++;
159
+ }
160
+ s.succeed(`Data '${ns}' restored (${totalTables} tables, ${totalRows.toLocaleString()} rows)`);
161
+ }
162
+ catch (err) {
163
+ s.fail(`Data '${ns}' restore failed: ${err.message}`);
164
+ throw err;
165
+ }
166
+ }
167
+ }
168
+ }
169
+ // ─── Dry Run ───
170
+ /**
171
+ * Display a migration preview without executing.
172
+ */
173
+ export async function dryRunSummary(opts) {
174
+ const startTime = Date.now();
175
+ let authTables = 0;
176
+ let authRows = 0;
177
+ let dataTables = 0;
178
+ let dataRows = 0;
179
+ logHuman();
180
+ logHuman(chalk.blue(' Migration Preview (dry run)'));
181
+ logHuman();
182
+ // Auth
183
+ if (opts.scope === 'auth' || opts.scope === 'all') {
184
+ try {
185
+ const result = await apiCall(opts.serverUrl, opts.serviceKey, '/dump-d1');
186
+ logHuman(chalk.cyan(' Auth Tables:'));
187
+ for (const [table, rows] of Object.entries(result.tables)) {
188
+ if (rows.length > 0) {
189
+ logHuman(` ${table.padEnd(30)} ${rows.length.toLocaleString()} rows`);
190
+ authTables++;
191
+ authRows += rows.length;
192
+ }
193
+ }
194
+ logHuman();
195
+ }
196
+ catch (err) {
197
+ logHuman(chalk.red(` Auth dump failed: ${err.message}`));
198
+ }
199
+ }
200
+ // Data namespaces
201
+ if (opts.scope === 'data' || opts.scope === 'all') {
202
+ for (const ns of opts.namespaces ?? []) {
203
+ try {
204
+ const result = await apiCall(opts.serverUrl, opts.serviceKey, '/dump-data', { namespace: ns });
205
+ logHuman(chalk.cyan(` Data: ${ns}`));
206
+ for (const [table, rows] of Object.entries(result.tables)) {
207
+ if (rows.length > 0) {
208
+ logHuman(` ${table.padEnd(30)} ${rows.length.toLocaleString()} rows`);
209
+ dataTables++;
210
+ dataRows += rows.length;
211
+ }
212
+ }
213
+ logHuman();
214
+ }
215
+ catch (err) {
216
+ logHuman(chalk.red(` Data '${ns}' dump failed: ${err.message}`));
217
+ }
218
+ }
219
+ }
220
+ const totalTables = authTables + dataTables;
221
+ const totalRows = authRows + dataRows;
222
+ logHuman(chalk.dim(` Total: ${totalTables} tables, ${totalRows.toLocaleString()} rows`));
223
+ logHuman();
224
+ return {
225
+ success: true,
226
+ authTables,
227
+ authRows,
228
+ dataTables,
229
+ dataRows,
230
+ duration: Date.now() - startTime,
231
+ errors: [],
232
+ };
233
+ }
234
+ // ─── Main Orchestrator ───
235
+ /**
236
+ * Execute a full migration. Called from deploy.ts, dev.ts, and migrate.ts.
237
+ *
238
+ * Note: This only handles the DUMP phase. The caller is responsible for:
239
+ * 1. Calling dumpCurrentData() before deploy/restart
240
+ * 2. Deploying/restarting with new config
241
+ * 3. Calling restoreToNewProvider() after deploy/restart
242
+ */
243
+ export async function executeMigration(opts) {
244
+ const startTime = Date.now();
245
+ if (opts.dryRun) {
246
+ return dryRunSummary(opts);
247
+ }
248
+ const errors = [];
249
+ let authTables = 0;
250
+ let authRows = 0;
251
+ let dataTables = 0;
252
+ let dataRows = 0;
253
+ // Full migration in one shot (for standalone migrate command where server stays running)
254
+ logHuman();
255
+ logHuman(chalk.blue('📦 Phase 1/2: Dumping data from current provider...'));
256
+ const dumped = await dumpCurrentData(opts);
257
+ logHuman();
258
+ logHuman(chalk.blue('📥 Phase 2/2: Restoring data to new provider...'));
259
+ await restoreToNewProvider(opts, dumped);
260
+ // Count results
261
+ if (dumped.auth) {
262
+ authTables = Object.keys(dumped.auth.tables).filter(t => dumped.auth.tables[t].length > 0).length;
263
+ authRows = Object.values(dumped.auth.tables).reduce((sum, rows) => sum + rows.length, 0);
264
+ }
265
+ if (dumped.data) {
266
+ for (const data of Object.values(dumped.data)) {
267
+ dataTables += Object.keys(data.tables).filter(t => data.tables[t].length > 0).length;
268
+ dataRows += Object.values(data.tables).reduce((sum, rows) => sum + rows.length, 0);
269
+ }
270
+ }
271
+ const duration = Date.now() - startTime;
272
+ logHuman();
273
+ logHuman(chalk.green('✓ Migration complete!'), chalk.dim(`(${(duration / 1000).toFixed(1)}s)`));
274
+ return { success: true, authTables, authRows, dataTables, dataRows, duration, errors };
275
+ }
276
+ // ─── Interactive Prompt ───
277
+ /**
278
+ * Prompt the user to choose migration action when provider change is detected.
279
+ */
280
+ export async function promptMigration(changes) {
281
+ if (!process.stdin.isTTY || isNonInteractive()) {
282
+ raiseNeedsInput({
283
+ code: 'provider_migration_decision_required',
284
+ field: 'migrationAction',
285
+ message: 'Provider changes were detected and require an explicit migration decision.',
286
+ hint: 'Run `edgebase migrate` to move data first, or rerun after intentionally deciding to skip migration.',
287
+ choices: [
288
+ {
289
+ label: 'Migrate data now',
290
+ value: 'migrate',
291
+ args: ['migrate'],
292
+ hint: 'Use the dedicated migrate command before continuing.',
293
+ },
294
+ {
295
+ label: 'Skip migration for now',
296
+ value: 'skip',
297
+ hint: 'Only safe if you intentionally want to continue without moving data.',
298
+ },
299
+ ],
300
+ });
301
+ }
302
+ const readline = await import('node:readline');
303
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
304
+ console.log();
305
+ console.log(chalk.yellow('⚠ Database provider changes detected:'));
306
+ for (const pc of changes) {
307
+ const label = pc.namespace === '_auth' ? 'Auth' : pc.namespace;
308
+ console.log(chalk.yellow(` • ${label}: ${pc.oldProvider} → ${pc.newProvider}`));
309
+ }
310
+ console.log();
311
+ console.log(chalk.cyan('[m]'), 'Migrate data to new provider');
312
+ console.log(chalk.cyan('[s]'), 'Skip (continue without migration)');
313
+ console.log();
314
+ return new Promise((resolve) => {
315
+ rl.question(chalk.cyan('Choose [m/s]: '), (answer) => {
316
+ rl.close();
317
+ resolve(answer.trim().toLowerCase() === 'm' ? 'migrate' : 'skip');
318
+ });
319
+ });
320
+ }
321
+ //# sourceMappingURL=migrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrator.js","sourceRoot":"","sources":["../../src/lib/migrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export interface RunNeonctlOptions {
2
+ apiKey?: string;
3
+ configDir?: string;
4
+ cwd?: string;
5
+ output?: 'json' | 'yaml' | 'table';
6
+ }
7
+ export interface NeonBranchSummary {
8
+ id?: string;
9
+ name: string;
10
+ default?: boolean;
11
+ primary?: boolean;
12
+ }
13
+ export interface NeonOrganizationSummary {
14
+ id: string;
15
+ name: string;
16
+ handle?: string;
17
+ }
18
+ export interface NeonProjectSummary {
19
+ id: string;
20
+ name: string;
21
+ orgId?: string;
22
+ }
23
+ export declare function getDefaultPostgresEnvKey(namespace: string): string;
24
+ export declare function buildNeonctlArgs(commandArgs: string[], options?: RunNeonctlOptions): string[];
25
+ export declare function runNeonctl(commandArgs: string[], options?: RunNeonctlOptions): string;
26
+ export declare function runNeonctlInteractive(commandArgs: string[], options?: RunNeonctlOptions): void;
27
+ export declare function parseNeonConnectionString(rawOutput: string): string;
28
+ export declare function parseNeonBranches(rawOutput: string): NeonBranchSummary[];
29
+ export declare function parseNeonOrganizations(rawOutput: string): NeonOrganizationSummary[];
30
+ export declare function parseNeonProjects(rawOutput: string): NeonProjectSummary[];
31
+ export declare function parseNeonProject(rawOutput: string): NeonProjectSummary | null;
32
+ export declare function parseNeonNamedItems(rawOutput: string): string[];
33
+ export declare function listNeonOrganizations(options?: RunNeonctlOptions): NeonOrganizationSummary[];
34
+ export declare function listNeonProjects(orgId: string, options?: RunNeonctlOptions): NeonProjectSummary[];
35
+ export declare function listNeonBranches(projectId: string, options?: RunNeonctlOptions): NeonBranchSummary[];
36
+ export declare function listNeonDatabases(projectId: string, branch: string | undefined, options?: RunNeonctlOptions): string[];
37
+ export declare function listNeonRoles(projectId: string, branch: string | undefined, options?: RunNeonctlOptions): string[];
38
+ export declare function upsertEnvValue(filePath: string, key: string, value: string, headerComment: string): void;
39
+ export declare function removeEnvValue(filePath: string, key: string): void;
40
+ export declare function writeProjectEnvValue(projectDir: string, fileName: '.env.development' | '.env.release', key: string, value: string): string;
41
+ //# sourceMappingURL=neon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neon.d.ts","sourceRoot":"","sources":["../../src/lib/neon.ts"],"names":[],"mappings":"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"}