@depup/netlify-cli 24.11.1-depup.1 → 26.2.0-depup.8

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 (298) hide show
  1. package/README.md +52 -34
  2. package/bin/run.js +29 -9
  3. package/changes.json +127 -55
  4. package/dist/commands/base-command.d.ts.map +1 -1
  5. package/dist/commands/base-command.js +22 -6
  6. package/dist/commands/base-command.js.map +1 -1
  7. package/dist/commands/create/create-action.js +1 -1
  8. package/dist/commands/create/create-action.js.map +1 -1
  9. package/dist/commands/database/database.d.ts +0 -15
  10. package/dist/commands/database/database.d.ts.map +1 -1
  11. package/dist/commands/database/database.js +104 -113
  12. package/dist/commands/database/database.js.map +1 -1
  13. package/dist/commands/database/{connect.d.ts → db-connect.d.ts} +1 -1
  14. package/dist/commands/database/db-connect.d.ts.map +1 -0
  15. package/dist/commands/database/{connect.js → db-connect.js} +4 -4
  16. package/dist/commands/database/db-connect.js.map +1 -0
  17. package/dist/commands/database/db-init.d.ts +6 -0
  18. package/dist/commands/database/db-init.d.ts.map +1 -0
  19. package/dist/commands/database/db-init.js +298 -0
  20. package/dist/commands/database/db-init.js.map +1 -0
  21. package/dist/commands/database/{migrate.d.ts → db-migrate.d.ts} +1 -1
  22. package/dist/commands/database/db-migrate.d.ts.map +1 -0
  23. package/dist/commands/database/{migrate.js → db-migrate.js} +13 -4
  24. package/dist/commands/database/db-migrate.js.map +1 -0
  25. package/dist/commands/database/{migration-new.d.ts → db-migration-new.d.ts} +1 -2
  26. package/dist/commands/database/db-migration-new.d.ts.map +1 -0
  27. package/dist/commands/database/{migration-new.js → db-migration-new.js} +43 -45
  28. package/dist/commands/database/db-migration-new.js.map +1 -0
  29. package/dist/commands/database/{migration-pull.d.ts → db-migration-pull.d.ts} +1 -1
  30. package/dist/commands/database/db-migration-pull.d.ts.map +1 -0
  31. package/dist/commands/database/{migration-pull.js → db-migration-pull.js} +49 -24
  32. package/dist/commands/database/db-migration-pull.js.map +1 -0
  33. package/dist/commands/database/db-migrations-reset.d.ts +7 -0
  34. package/dist/commands/database/db-migrations-reset.d.ts.map +1 -0
  35. package/dist/commands/database/db-migrations-reset.js +108 -0
  36. package/dist/commands/database/db-migrations-reset.js.map +1 -0
  37. package/dist/commands/database/{reset.d.ts → db-reset.d.ts} +1 -1
  38. package/dist/commands/database/db-reset.d.ts.map +1 -0
  39. package/dist/commands/database/{reset.js → db-reset.js} +2 -2
  40. package/dist/commands/database/db-reset.js.map +1 -0
  41. package/dist/commands/database/db-status.d.ts +24 -0
  42. package/dist/commands/database/db-status.d.ts.map +1 -0
  43. package/dist/commands/database/db-status.js +348 -0
  44. package/dist/commands/database/db-status.js.map +1 -0
  45. package/dist/commands/database/util/api-errors.d.ts +2 -0
  46. package/dist/commands/database/util/api-errors.d.ts.map +1 -0
  47. package/dist/commands/database/util/api-errors.js +17 -0
  48. package/dist/commands/database/util/api-errors.js.map +1 -0
  49. package/dist/commands/database/util/applied-migrations.d.ts +20 -0
  50. package/dist/commands/database/util/applied-migrations.d.ts.map +1 -0
  51. package/dist/commands/database/util/applied-migrations.js +44 -0
  52. package/dist/commands/database/util/applied-migrations.js.map +1 -0
  53. package/dist/commands/database/util/constants.d.ts +4 -0
  54. package/dist/commands/database/util/constants.d.ts.map +1 -0
  55. package/dist/commands/database/util/constants.js +4 -0
  56. package/dist/commands/database/util/constants.js.map +1 -0
  57. package/dist/commands/database/util/db-connection.d.ts +18 -0
  58. package/dist/commands/database/util/db-connection.d.ts.map +1 -0
  59. package/dist/commands/database/util/db-connection.js +117 -0
  60. package/dist/commands/database/util/db-connection.js.map +1 -0
  61. package/dist/commands/database/util/init-data.d.ts +8 -0
  62. package/dist/commands/database/util/init-data.d.ts.map +1 -0
  63. package/dist/commands/database/util/init-data.js +47 -0
  64. package/dist/commands/database/util/init-data.js.map +1 -0
  65. package/dist/commands/database/util/meta-commands.d.ts.map +1 -0
  66. package/dist/commands/database/{meta-commands.js → util/meta-commands.js} +1 -1
  67. package/dist/commands/database/util/meta-commands.js.map +1 -0
  68. package/dist/commands/database/util/migrations-path.d.ts +4 -0
  69. package/dist/commands/database/util/migrations-path.d.ts.map +1 -0
  70. package/dist/commands/database/util/migrations-path.js +19 -0
  71. package/dist/commands/database/util/migrations-path.js.map +1 -0
  72. package/dist/commands/database/util/package-json.d.ts +2 -0
  73. package/dist/commands/database/util/package-json.d.ts.map +1 -0
  74. package/dist/commands/database/util/package-json.js +16 -0
  75. package/dist/commands/database/util/package-json.js.map +1 -0
  76. package/dist/commands/database/util/packages.d.ts +15 -0
  77. package/dist/commands/database/util/packages.d.ts.map +1 -0
  78. package/dist/commands/database/util/packages.js +59 -0
  79. package/dist/commands/database/util/packages.js.map +1 -0
  80. package/dist/commands/database/util/paths.d.ts +2 -0
  81. package/dist/commands/database/util/paths.d.ts.map +1 -0
  82. package/dist/commands/database/util/paths.js +13 -0
  83. package/dist/commands/database/util/paths.js.map +1 -0
  84. package/dist/commands/database/util/pg-client-executor.d.ts.map +1 -0
  85. package/dist/commands/database/util/pg-client-executor.js.map +1 -0
  86. package/dist/commands/database/util/psql-formatter.d.ts.map +1 -0
  87. package/dist/commands/database/util/psql-formatter.js.map +1 -0
  88. package/dist/commands/database/util/spawn-async.d.ts +3 -0
  89. package/dist/commands/database/util/spawn-async.d.ts.map +1 -0
  90. package/dist/commands/database/util/spawn-async.js +16 -0
  91. package/dist/commands/database/util/spawn-async.js.map +1 -0
  92. package/dist/commands/database/util/timestamp.d.ts +2 -0
  93. package/dist/commands/database/util/timestamp.d.ts.map +1 -0
  94. package/dist/commands/database/util/timestamp.js +7 -0
  95. package/dist/commands/database/util/timestamp.js.map +1 -0
  96. package/dist/commands/deploy/deploy.d.ts.map +1 -1
  97. package/dist/commands/deploy/deploy.js +16 -5
  98. package/dist/commands/deploy/deploy.js.map +1 -1
  99. package/dist/commands/dev/dev.d.ts.map +1 -1
  100. package/dist/commands/dev/dev.js +2 -0
  101. package/dist/commands/dev/dev.js.map +1 -1
  102. package/dist/commands/dev/programmatic-netlify-dev.d.ts +2 -1
  103. package/dist/commands/dev/programmatic-netlify-dev.d.ts.map +1 -1
  104. package/dist/commands/dev/programmatic-netlify-dev.js +3 -4
  105. package/dist/commands/dev/programmatic-netlify-dev.js.map +1 -1
  106. package/dist/commands/functions/functions-create.d.ts +1 -1
  107. package/dist/commands/functions/functions-create.d.ts.map +1 -1
  108. package/dist/commands/functions/functions-create.js +80 -17
  109. package/dist/commands/functions/functions-create.js.map +1 -1
  110. package/dist/commands/functions/functions.d.ts.map +1 -1
  111. package/dist/commands/functions/functions.js +2 -0
  112. package/dist/commands/functions/functions.js.map +1 -1
  113. package/dist/commands/init/init.js +1 -1
  114. package/dist/commands/init/init.js.map +1 -1
  115. package/dist/commands/link/link.js +1 -1
  116. package/dist/commands/link/link.js.map +1 -1
  117. package/dist/commands/login/login.d.ts.map +1 -1
  118. package/dist/commands/login/login.js +0 -6
  119. package/dist/commands/login/login.js.map +1 -1
  120. package/dist/commands/logs/index.d.ts +0 -2
  121. package/dist/commands/logs/index.d.ts.map +1 -1
  122. package/dist/commands/logs/index.js +95 -29
  123. package/dist/commands/logs/index.js.map +1 -1
  124. package/dist/commands/logs/log-api.d.ts +64 -0
  125. package/dist/commands/logs/log-api.d.ts.map +1 -0
  126. package/dist/commands/logs/log-api.js +200 -0
  127. package/dist/commands/logs/log-api.js.map +1 -0
  128. package/dist/commands/logs/logs.d.ts +4 -0
  129. package/dist/commands/logs/logs.d.ts.map +1 -0
  130. package/dist/commands/logs/logs.js +302 -0
  131. package/dist/commands/logs/logs.js.map +1 -0
  132. package/dist/commands/logs/sources/deploy.d.ts +13 -0
  133. package/dist/commands/logs/sources/deploy.d.ts.map +1 -0
  134. package/dist/commands/logs/sources/deploy.js +71 -0
  135. package/dist/commands/logs/sources/deploy.js.map +1 -0
  136. package/dist/commands/logs/sources/edge-functions.d.ts +17 -0
  137. package/dist/commands/logs/sources/edge-functions.d.ts.map +1 -0
  138. package/dist/commands/logs/sources/edge-functions.js +71 -0
  139. package/dist/commands/logs/sources/edge-functions.js.map +1 -0
  140. package/dist/commands/logs/sources/functions.d.ts +22 -0
  141. package/dist/commands/logs/sources/functions.d.ts.map +1 -0
  142. package/dist/commands/logs/sources/functions.js +75 -0
  143. package/dist/commands/logs/sources/functions.js.map +1 -0
  144. package/dist/commands/main.d.ts.map +1 -1
  145. package/dist/commands/main.js +38 -19
  146. package/dist/commands/main.js.map +1 -1
  147. package/dist/commands/serve/serve.d.ts.map +1 -1
  148. package/dist/commands/serve/serve.js +1 -0
  149. package/dist/commands/serve/serve.js.map +1 -1
  150. package/dist/commands/sites/sites-create.js +1 -1
  151. package/dist/commands/sites/sites-create.js.map +1 -1
  152. package/dist/lib/blobs/blobs.js +2 -2
  153. package/dist/lib/blobs/blobs.js.map +1 -1
  154. package/dist/lib/edge-functions/proxy.d.ts +2 -1
  155. package/dist/lib/edge-functions/proxy.d.ts.map +1 -1
  156. package/dist/lib/edge-functions/proxy.js +6 -2
  157. package/dist/lib/edge-functions/proxy.js.map +1 -1
  158. package/dist/lib/edge-functions/registry.d.ts +5 -1
  159. package/dist/lib/edge-functions/registry.d.ts.map +1 -1
  160. package/dist/lib/edge-functions/registry.js +24 -3
  161. package/dist/lib/edge-functions/registry.js.map +1 -1
  162. package/dist/lib/extensions.js +1 -1
  163. package/dist/lib/extensions.js.map +1 -1
  164. package/dist/lib/functions/netlify-function.d.ts +2 -2
  165. package/dist/lib/functions/netlify-function.d.ts.map +1 -1
  166. package/dist/lib/functions/netlify-function.js +16 -5
  167. package/dist/lib/functions/netlify-function.js.map +1 -1
  168. package/dist/lib/functions/registry.d.ts.map +1 -1
  169. package/dist/lib/functions/registry.js +1 -1
  170. package/dist/lib/functions/registry.js.map +1 -1
  171. package/dist/lib/functions/runtimes/index.d.ts +1 -0
  172. package/dist/lib/functions/runtimes/index.d.ts.map +1 -1
  173. package/dist/lib/functions/runtimes/index.js.map +1 -1
  174. package/dist/lib/functions/runtimes/js/builders/zisi.d.ts +1 -0
  175. package/dist/lib/functions/runtimes/js/builders/zisi.d.ts.map +1 -1
  176. package/dist/lib/functions/runtimes/js/builders/zisi.js +2 -1
  177. package/dist/lib/functions/runtimes/js/builders/zisi.js.map +1 -1
  178. package/dist/lib/functions/runtimes/js/index.d.ts.map +1 -1
  179. package/dist/tsconfig.build.tsbuildinfo +1 -1
  180. package/dist/utils/deploy/hash-fns.d.ts.map +1 -1
  181. package/dist/utils/deploy/hash-fns.js +12 -1
  182. package/dist/utils/deploy/hash-fns.js.map +1 -1
  183. package/dist/utils/deploy/upload-source-zip.d.ts.map +1 -1
  184. package/dist/utils/deploy/upload-source-zip.js +20 -11
  185. package/dist/utils/deploy/upload-source-zip.js.map +1 -1
  186. package/dist/utils/dev.js +1 -1
  187. package/dist/utils/dev.js.map +1 -1
  188. package/dist/utils/framework-server.d.ts.map +1 -1
  189. package/dist/utils/framework-server.js +2 -1
  190. package/dist/utils/framework-server.js.map +1 -1
  191. package/dist/utils/init/utils.d.ts.map +1 -1
  192. package/dist/utils/live-tunnel.js +2 -2
  193. package/dist/utils/live-tunnel.js.map +1 -1
  194. package/dist/utils/object-utilities.d.ts +64 -0
  195. package/dist/utils/object-utilities.d.ts.map +1 -0
  196. package/dist/utils/object-utilities.js +93 -0
  197. package/dist/utils/object-utilities.js.map +1 -0
  198. package/dist/utils/open-browser.d.ts +1 -1
  199. package/dist/utils/open-browser.d.ts.map +1 -1
  200. package/dist/utils/open-browser.js +4 -2
  201. package/dist/utils/open-browser.js.map +1 -1
  202. package/dist/utils/proxy-server.d.ts +2 -1
  203. package/dist/utils/proxy-server.d.ts.map +1 -1
  204. package/dist/utils/proxy-server.js +2 -1
  205. package/dist/utils/proxy-server.js.map +1 -1
  206. package/dist/utils/proxy.d.ts +2 -1
  207. package/dist/utils/proxy.d.ts.map +1 -1
  208. package/dist/utils/proxy.js +11 -2
  209. package/dist/utils/proxy.js.map +1 -1
  210. package/dist/utils/shell.d.ts +7 -0
  211. package/dist/utils/shell.d.ts.map +1 -1
  212. package/dist/utils/shell.js +36 -7
  213. package/dist/utils/shell.js.map +1 -1
  214. package/dist/utils/telemetry/index.d.ts +1 -1
  215. package/dist/utils/telemetry/index.d.ts.map +1 -1
  216. package/dist/utils/telemetry/index.js +1 -1
  217. package/dist/utils/telemetry/index.js.map +1 -1
  218. package/dist/utils/telemetry/report-error.d.ts +1 -0
  219. package/dist/utils/telemetry/report-error.d.ts.map +1 -1
  220. package/dist/utils/telemetry/report-error.js +15 -2
  221. package/dist/utils/telemetry/report-error.js.map +1 -1
  222. package/dist/utils/zip.d.ts +4 -0
  223. package/dist/utils/zip.d.ts.map +1 -0
  224. package/dist/utils/zip.js +114 -0
  225. package/dist/utils/zip.js.map +1 -0
  226. package/functions-templates/javascript/scheduled-function/package.json +1 -1
  227. package/functions-templates/typescript/database/.netlify-function-template.mjs +5 -0
  228. package/functions-templates/typescript/database/package-lock.json +357 -0
  229. package/functions-templates/typescript/database/package.json +23 -0
  230. package/functions-templates/typescript/database/{{name}}.mts +24 -0
  231. package/functions-templates/typescript/database-drizzle/.netlify-function-template.mjs +5 -0
  232. package/functions-templates/typescript/database-drizzle/package-lock.json +520 -0
  233. package/functions-templates/typescript/database-drizzle/package.json +25 -0
  234. package/functions-templates/typescript/database-drizzle/{{name}}.mts +26 -0
  235. package/functions-templates/typescript/hello-world/package-lock.json +15 -15
  236. package/functions-templates/typescript/hello-world/package.json +1 -1
  237. package/functions-templates/typescript/scheduled-function/package.json +1 -1
  238. package/package.json +278 -149
  239. package/scripts/netlifyPackage.js +2 -26
  240. package/dist/commands/database/connect.d.ts.map +0 -1
  241. package/dist/commands/database/connect.js.map +0 -1
  242. package/dist/commands/database/constants.d.ts +0 -4
  243. package/dist/commands/database/constants.d.ts.map +0 -1
  244. package/dist/commands/database/constants.js +0 -4
  245. package/dist/commands/database/constants.js.map +0 -1
  246. package/dist/commands/database/db-connection.d.ts +0 -15
  247. package/dist/commands/database/db-connection.d.ts.map +0 -1
  248. package/dist/commands/database/db-connection.js +0 -65
  249. package/dist/commands/database/db-connection.js.map +0 -1
  250. package/dist/commands/database/drizzle.d.ts +0 -3
  251. package/dist/commands/database/drizzle.d.ts.map +0 -1
  252. package/dist/commands/database/drizzle.js +0 -96
  253. package/dist/commands/database/drizzle.js.map +0 -1
  254. package/dist/commands/database/init.d.ts +0 -9
  255. package/dist/commands/database/init.d.ts.map +0 -1
  256. package/dist/commands/database/init.js +0 -124
  257. package/dist/commands/database/init.js.map +0 -1
  258. package/dist/commands/database/meta-commands.d.ts.map +0 -1
  259. package/dist/commands/database/meta-commands.js.map +0 -1
  260. package/dist/commands/database/migrate.d.ts.map +0 -1
  261. package/dist/commands/database/migrate.js.map +0 -1
  262. package/dist/commands/database/migration-new.d.ts.map +0 -1
  263. package/dist/commands/database/migration-new.js.map +0 -1
  264. package/dist/commands/database/migration-pull.d.ts.map +0 -1
  265. package/dist/commands/database/migration-pull.js.map +0 -1
  266. package/dist/commands/database/pg-client-executor.d.ts.map +0 -1
  267. package/dist/commands/database/pg-client-executor.js.map +0 -1
  268. package/dist/commands/database/psql-formatter.d.ts.map +0 -1
  269. package/dist/commands/database/psql-formatter.js.map +0 -1
  270. package/dist/commands/database/reset.d.ts.map +0 -1
  271. package/dist/commands/database/reset.js.map +0 -1
  272. package/dist/commands/database/status.d.ts +0 -4
  273. package/dist/commands/database/status.d.ts.map +0 -1
  274. package/dist/commands/database/status.js +0 -71
  275. package/dist/commands/database/status.js.map +0 -1
  276. package/dist/commands/database/utils.d.ts +0 -75
  277. package/dist/commands/database/utils.d.ts.map +0 -1
  278. package/dist/commands/database/utils.js +0 -172
  279. package/dist/commands/database/utils.js.map +0 -1
  280. package/dist/commands/logs/functions.d.ts +0 -4
  281. package/dist/commands/logs/functions.d.ts.map +0 -1
  282. package/dist/commands/logs/functions.js +0 -79
  283. package/dist/commands/logs/functions.js.map +0 -1
  284. package/functions-templates/go/hello-world/.netlify-function-template.mjs +0 -6
  285. package/functions-templates/go/hello-world/go.mod +0 -5
  286. package/functions-templates/go/hello-world/go.sum +0 -22
  287. package/functions-templates/go/hello-world/main.go +0 -24
  288. package/functions-templates/rust/hello-world/.netlify-function-template.mjs +0 -6
  289. package/functions-templates/rust/hello-world/Cargo.lock +0 -1149
  290. package/functions-templates/rust/hello-world/Cargo.toml +0 -14
  291. package/functions-templates/rust/hello-world/src/main.rs +0 -29
  292. package/npm-shrinkwrap.json +0 -12720
  293. package/scripts/prepublishOnly.js +0 -29
  294. /package/dist/commands/database/{meta-commands.d.ts → util/meta-commands.d.ts} +0 -0
  295. /package/dist/commands/database/{pg-client-executor.d.ts → util/pg-client-executor.d.ts} +0 -0
  296. /package/dist/commands/database/{pg-client-executor.js → util/pg-client-executor.js} +0 -0
  297. /package/dist/commands/database/{psql-formatter.d.ts → util/psql-formatter.d.ts} +0 -0
  298. /package/dist/commands/database/{psql-formatter.js → util/psql-formatter.js} +0 -0
@@ -0,0 +1,298 @@
1
+ import { existsSync } from 'fs';
2
+ import { mkdir, readdir, writeFile } from 'fs/promises';
3
+ import { join } from 'path';
4
+ import { applyMigrations } from '@netlify/dev';
5
+ import inquirer from 'inquirer';
6
+ import { chalk, log, netlifyCommand } from '../../utils/command-helpers.js';
7
+ import { startSpinner, stopSpinner } from '../../lib/spinner.js';
8
+ import { isInteractive } from '../../utils/scripted-commands.js';
9
+ import { generateNextPrefix } from './db-migration-new.js';
10
+ import { connectRawClient, describeError } from './util/db-connection.js';
11
+ import { DRIZZLE_SCHEMA_TS, DRIZZLE_SEED_SQL, drizzleConfigTs, SEED_MIGRATION_NAME, STARTER_MIGRATION_NAME, STARTER_MIGRATION_SQL, STARTER_TABLE, } from './util/init-data.js';
12
+ import { resolveMigrationsDirectory } from './util/migrations-path.js';
13
+ import { hasDependency } from './util/package-json.js';
14
+ import { getPackageManager, installPackages } from './util/packages.js';
15
+ import { relativeToProject } from './util/paths.js';
16
+ import { PgClientExecutor } from './util/pg-client-executor.js';
17
+ import { formatQueryResult } from './util/psql-formatter.js';
18
+ import { spawnAsync } from './util/spawn-async.js';
19
+ const NETLIFY_DATABASE_PACKAGE = '@netlify/database';
20
+ const DRIZZLE_ORM_PACKAGE = 'drizzle-orm';
21
+ const DRIZZLE_KIT_PACKAGE = 'drizzle-kit';
22
+ const DOCS_URL = 'https://ntl.fyi/database';
23
+ const sectionHeading = (title) => {
24
+ log('');
25
+ log(chalk.bold(title));
26
+ };
27
+ const info = (text) => {
28
+ log(chalk.gray(text));
29
+ };
30
+ const success = (text) => {
31
+ log(chalk.green(`✓ ${text}`));
32
+ };
33
+ const carefullyWriteFile = async (filePath, data, projectRoot) => {
34
+ if (existsSync(filePath)) {
35
+ const answers = await inquirer.prompt([
36
+ {
37
+ type: 'confirm',
38
+ name: 'overwrite',
39
+ message: `Overwrite existing file .${filePath.replace(projectRoot, '')}?`,
40
+ },
41
+ ]);
42
+ if (answers.overwrite) {
43
+ await writeFile(filePath, data);
44
+ }
45
+ }
46
+ else {
47
+ await writeFile(filePath, data);
48
+ }
49
+ };
50
+ const readDirectoryEntries = async (dir) => {
51
+ try {
52
+ return await readdir(dir);
53
+ }
54
+ catch (error) {
55
+ if (error.code === 'ENOENT')
56
+ return [];
57
+ throw error;
58
+ }
59
+ };
60
+ const promptForQueryStyle = async (interactive) => {
61
+ if (!interactive) {
62
+ return 'drizzle';
63
+ }
64
+ log('');
65
+ const { queryStyle } = await inquirer.prompt([
66
+ {
67
+ type: 'list',
68
+ name: 'queryStyle',
69
+ message: 'What is your preferred style?',
70
+ default: 'drizzle',
71
+ choices: [
72
+ { name: 'Drizzle ORM (recommended)', value: 'drizzle' },
73
+ { name: 'Direct SQL', value: 'raw' },
74
+ ],
75
+ },
76
+ ]);
77
+ return queryStyle;
78
+ };
79
+ const promptForStarter = async (interactive) => {
80
+ if (!interactive) {
81
+ return true;
82
+ }
83
+ log('');
84
+ log('To see the database in action, we can create some migrations with sample data');
85
+ log('and then query it. Alternatively, you can do this yourself at any time.');
86
+ log('');
87
+ const { answer } = await inquirer.prompt([
88
+ {
89
+ type: 'confirm',
90
+ name: 'answer',
91
+ message: 'Do you want to create sample data?',
92
+ default: true,
93
+ },
94
+ ]);
95
+ return answer;
96
+ };
97
+ const installDependencies = async (pm, projectRoot, migrationsDirectory, queryStyle) => {
98
+ sectionHeading('Install dependencies');
99
+ info("We'll install the dependencies you need to use Netlify Database");
100
+ info('');
101
+ info(`${NETLIFY_DATABASE_PACKAGE} is the main interface for Netlify Database, letting you initialize and query the`);
102
+ info('database with no configuration.');
103
+ if (queryStyle === 'drizzle') {
104
+ info('');
105
+ info('Drizzle is added too so your schema lives in TypeScript and migrations are generated from it.');
106
+ }
107
+ const toInstall = [];
108
+ const confirmedNames = [NETLIFY_DATABASE_PACKAGE];
109
+ if (!(await hasDependency(NETLIFY_DATABASE_PACKAGE, projectRoot))) {
110
+ toInstall.push({ pkg: `${NETLIFY_DATABASE_PACKAGE}@latest` });
111
+ }
112
+ if (queryStyle === 'drizzle') {
113
+ confirmedNames.push(DRIZZLE_ORM_PACKAGE, DRIZZLE_KIT_PACKAGE);
114
+ if (!(await hasDependency(DRIZZLE_ORM_PACKAGE, projectRoot))) {
115
+ toInstall.push({ pkg: `${DRIZZLE_ORM_PACKAGE}@beta` });
116
+ }
117
+ if (!(await hasDependency(DRIZZLE_KIT_PACKAGE, projectRoot))) {
118
+ toInstall.push({ pkg: `${DRIZZLE_KIT_PACKAGE}@beta`, dev: true });
119
+ }
120
+ }
121
+ await installPackages(pm, projectRoot, toInstall);
122
+ for (const name of confirmedNames) {
123
+ success(`${name} is installed`);
124
+ }
125
+ if (queryStyle === 'drizzle') {
126
+ const out = relativeToProject(projectRoot, migrationsDirectory);
127
+ await carefullyWriteFile(join(projectRoot, 'drizzle.config.ts'), drizzleConfigTs(out), projectRoot);
128
+ success('drizzle.config.ts ready');
129
+ }
130
+ };
131
+ // Scaffolds the schema + first migration for the chosen ORM and returns the
132
+ // path so it can be logged. Called only when the user opts in to the starter.
133
+ const scaffoldStarter = async (pm, projectRoot, migrationsDirectory, queryStyle) => {
134
+ sectionHeading('Create a starter migration');
135
+ if (queryStyle === 'drizzle') {
136
+ info("I'll scaffold a `planets` schema in TypeScript, run `drizzle-kit generate` against it, and add a");
137
+ info('seed migration with the eight planets in our solar system. 🪐');
138
+ const schemaDir = join(projectRoot, 'db');
139
+ await mkdir(schemaDir, { recursive: true });
140
+ await carefullyWriteFile(join(schemaDir, 'schema.ts'), DRIZZLE_SCHEMA_TS, projectRoot);
141
+ success('db/schema.ts ready');
142
+ log('');
143
+ info(`Running \`drizzle-kit generate --name ${STARTER_MIGRATION_NAME}\` against your schema...`);
144
+ const [runner, ...runnerArgs] = pm.remoteRunArgs;
145
+ await spawnAsync(runner, [...runnerArgs, 'drizzle-kit', 'generate', '--name', STARTER_MIGRATION_NAME], {
146
+ stdio: 'inherit',
147
+ shell: true,
148
+ cwd: projectRoot,
149
+ });
150
+ // The seed's timestamp is generated AFTER drizzle-kit runs. We read the
151
+ // migrations directory so `generateNextPrefix` can detect a collision and
152
+ // bump the prefix by one second if the two migrations landed in the same
153
+ // second — the deploy-time validator rejects duplicate numeric prefixes.
154
+ const existingMigrations = await readDirectoryEntries(migrationsDirectory);
155
+ const seedPrefix = generateNextPrefix(existingMigrations, 'timestamp');
156
+ const seedDirName = `${seedPrefix}_${SEED_MIGRATION_NAME}`;
157
+ const seedDir = join(migrationsDirectory, seedDirName);
158
+ await mkdir(seedDir, { recursive: true });
159
+ await writeFile(join(seedDir, 'migration.sql'), DRIZZLE_SEED_SQL, { flag: 'wx' });
160
+ log('');
161
+ success(`Created seed migration ${seedDirName}/migration.sql`);
162
+ return;
163
+ }
164
+ info("I'll create a migration that sets up a `planets` table where we'll store data about the planets in our");
165
+ info('solar system.');
166
+ await mkdir(migrationsDirectory, { recursive: true });
167
+ const fileName = `${generateNextPrefix([], 'timestamp')}_${STARTER_MIGRATION_NAME}.sql`;
168
+ await writeFile(join(migrationsDirectory, fileName), STARTER_MIGRATION_SQL, { flag: 'wx' });
169
+ success(`Created ${fileName}`);
170
+ };
171
+ const applyAndQuery = async (projectRoot, migrationsDirectory) => {
172
+ log('');
173
+ const spinner = startSpinner({ text: 'Applying the migration to the local database' });
174
+ let connection;
175
+ try {
176
+ connection = await connectRawClient(projectRoot);
177
+ const applied = await applyMigrations(new PgClientExecutor(connection.client), migrationsDirectory);
178
+ stopSpinner({
179
+ spinner,
180
+ text: applied.length === 0 ? 'No new migrations to apply' : `Applied ${String(applied.length)} migration(s)`,
181
+ });
182
+ let query = null;
183
+ try {
184
+ const result = await connection.client.query(`SELECT * FROM ${STARTER_TABLE}`);
185
+ query = {
186
+ fields: result.fields,
187
+ rows: result.rows,
188
+ rowCount: result.rowCount,
189
+ command: result.command,
190
+ };
191
+ }
192
+ catch {
193
+ // The table may not exist (e.g. Drizzle's schema failed to compile). We
194
+ // skip rendering the query block when that happens.
195
+ }
196
+ return { applied, query };
197
+ }
198
+ catch (err) {
199
+ stopSpinner({ spinner, error: true, text: `Failed to apply migrations: ${describeError(err)}` });
200
+ throw err;
201
+ }
202
+ finally {
203
+ if (connection)
204
+ await connection.cleanup();
205
+ }
206
+ };
207
+ const renderQueryBlock = (query) => {
208
+ info("We have data! Let's run a command that lets you run one-shot queries using SQL:");
209
+ log('');
210
+ log(` ${chalk.cyan(`$ ${netlifyCommand()} database connect --query "SELECT * FROM ${STARTER_TABLE}"`)}`);
211
+ log('');
212
+ const formatted = formatQueryResult(query.fields, query.rows, query.rowCount, query.command);
213
+ for (const line of formatted.split('\n')) {
214
+ log(` ${line}`);
215
+ }
216
+ };
217
+ const printNextSteps = (orm, withStarter) => {
218
+ log('');
219
+ log('A few commands to try from here:');
220
+ log('');
221
+ log(' • Check the state of your database, including applied and pending migrations:');
222
+ log(` ${chalk.cyan(`${netlifyCommand()} database status`)}`);
223
+ log('');
224
+ log(' • Open an interactive Postgres REPL for querying and introspecting the database:');
225
+ log(` ${chalk.cyan(`${netlifyCommand()} database connect`)}`);
226
+ log('');
227
+ if (withStarter) {
228
+ log(' • Run a one-shot query:');
229
+ log(` ${chalk.cyan(`${netlifyCommand()} database connect --query "SELECT * FROM ${STARTER_TABLE}"`)}`);
230
+ }
231
+ else if (orm === 'drizzle') {
232
+ log(' • Define your tables in `db/schema.ts`, then generate a migration from them:');
233
+ log(` ${chalk.cyan('npx drizzle-kit generate')}`);
234
+ }
235
+ else {
236
+ log(' • Create your first migration:');
237
+ log(` ${chalk.cyan(`${netlifyCommand()} database migrations new`)}`);
238
+ }
239
+ log('');
240
+ const template = orm === 'drizzle' ? 'database-drizzle' : 'database';
241
+ log(` • Scaffold a function that queries the \`${STARTER_TABLE}\` table:`);
242
+ log(` ${chalk.cyan(`${netlifyCommand()} functions:create --language typescript --template ${template}`)}`);
243
+ log('');
244
+ if (withStarter) {
245
+ log(' • Wipe local data and restore the database to a blank state:');
246
+ log(` ${chalk.cyan(`${netlifyCommand()} database reset`)}`);
247
+ log('');
248
+ }
249
+ log(' • Deploy your project (and its migrations) to Netlify:');
250
+ log(` ${chalk.cyan(`${netlifyCommand()} deploy`)}`);
251
+ log('');
252
+ log(`To explore more of Netlify Database, visit ${chalk.cyan(DOCS_URL)}.`);
253
+ };
254
+ export const initDatabase = async (options, command) => {
255
+ const projectRoot = command.netlify.site.root ?? command.project.root ?? command.project.baseDirectory;
256
+ if (!projectRoot) {
257
+ throw new Error('Could not determine the project root directory.');
258
+ }
259
+ const yes = options.yes ?? false;
260
+ const interactive = isInteractive() && !yes;
261
+ const pm = getPackageManager(command);
262
+ log(chalk.bold('Netlify Database'));
263
+ info('A fully managed Postgres database built into the Netlify platform. We automatically handle provisioning,');
264
+ info('migrations, and branching for you, so you can focus on building your application.');
265
+ const migrationsDirectory = resolveMigrationsDirectory(command);
266
+ const existingMigrations = (await readDirectoryEntries(migrationsDirectory)).filter((name) => !name.startsWith('.'));
267
+ if (existingMigrations.length > 0) {
268
+ log('');
269
+ info(`It looks like you already have migrations set up in ${chalk.bold(relativeToProject(projectRoot, migrationsDirectory))}.`);
270
+ info(`Run ${chalk.cyan(`${netlifyCommand()} database status`)} to see their current state.`);
271
+ return;
272
+ }
273
+ log('');
274
+ info('Database migrations are ordered SQL files that define and evolve your schema.');
275
+ info(`Netlify manages and applies migrations for you. Read more at ${chalk.cyan('https://ntl.fyi/database-migrations')}.`);
276
+ info('');
277
+ info('Do you want to write SQL queries directly in your application and author migrations yourself, or');
278
+ info('do you want an ORM (Drizzle) to write the schema in code and generate the migrations for you?');
279
+ const queryStyle = await promptForQueryStyle(interactive);
280
+ await installDependencies(pm, projectRoot, migrationsDirectory, queryStyle);
281
+ const withStarter = await promptForStarter(interactive);
282
+ if (withStarter) {
283
+ await scaffoldStarter(pm, projectRoot, migrationsDirectory, queryStyle);
284
+ sectionHeading('Apply the migration');
285
+ info('Applying the migration to your local database. This step is handled automatically by Netlify when you deploy.');
286
+ const { query } = await applyAndQuery(projectRoot, migrationsDirectory);
287
+ if (query) {
288
+ sectionHeading('Query data');
289
+ renderQueryBlock(query);
290
+ }
291
+ else {
292
+ info(`Could not query the \`${STARTER_TABLE}\` table. If you expected it to exist, check your migrations.`);
293
+ }
294
+ }
295
+ sectionHeading('🎉 You are all set! 🎉');
296
+ printNextSteps(queryStyle, withStarter);
297
+ };
298
+ //# sourceMappingURL=db-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-init.js","sourceRoot":"","sources":["../../../src/commands/database/db-init.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,4 @@ export interface MigrateOptions {
4
4
  json?: boolean;
5
5
  }
6
6
  export declare const migrate: (options: MigrateOptions, command: BaseCommand) => Promise<void>;
7
- //# sourceMappingURL=migrate.d.ts.map
7
+ //# sourceMappingURL=db-migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-migrate.d.ts","sourceRoot":"","sources":["../../../src/commands/database/db-migrate.ts"],"names":[],"mappings":"AAMA,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAI5C,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,eAAO,MAAM,OAAO,GAAU,SAAS,cAAc,EAAE,SAAS,WAAW,kBAqC1E,CAAA"}
@@ -1,15 +1,24 @@
1
+ import { existsSync } from 'fs';
2
+ import { join } from 'path';
1
3
  import { applyMigrations } from '@netlify/dev';
2
4
  import { log, logJson } from '../../utils/command-helpers.js';
3
- import { connectToDatabase } from './db-connection.js';
5
+ import { connectToDatabase } from './util/db-connection.js';
6
+ import { DEFAULT_MIGRATIONS_PATH } from './util/migrations-path.js';
4
7
  export const migrate = async (options, command) => {
5
8
  const { to: name, json } = options;
6
9
  const buildDir = command.netlify.site.root ?? command.project.root ?? command.project.baseDirectory;
7
10
  if (!buildDir) {
8
11
  throw new Error('Could not determine the project root directory.');
9
12
  }
10
- const migrationsDirectory = command.netlify.config.db?.migrations?.path;
13
+ let migrationsDirectory = command.netlify.config.db?.migrations?.path;
11
14
  if (!migrationsDirectory) {
12
- throw new Error('No migrations directory found. Create a directory at netlify/db/migrations or set `db.migrations.path` in `netlify.toml`.');
15
+ const defaultDirectory = join(buildDir, DEFAULT_MIGRATIONS_PATH);
16
+ if (existsSync(defaultDirectory)) {
17
+ migrationsDirectory = defaultDirectory;
18
+ }
19
+ else {
20
+ throw new Error(`No migrations directory found. Create a directory at ${DEFAULT_MIGRATIONS_PATH} or set \`db.migrations.path\` in \`netlify.toml\`.`);
21
+ }
13
22
  }
14
23
  const { executor, cleanup } = await connectToDatabase(buildDir);
15
24
  try {
@@ -31,4 +40,4 @@ export const migrate = async (options, command) => {
31
40
  await cleanup();
32
41
  }
33
42
  };
34
- //# sourceMappingURL=migrate.js.map
43
+ //# sourceMappingURL=db-migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-migrate.js","sourceRoot":"","sources":["../../../src/commands/database/db-migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAOnE,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,OAAuB,EAAE,OAAoB,EAAE,EAAE;IAC7E,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAA;IACnG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IAED,IAAI,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAA;IACrE,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAA;QAChE,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjC,mBAAmB,GAAG,gBAAgB,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,wDAAwD,uBAAuB,qDAAqD,CACrI,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAE/D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,CAAC,CAAA;QAE1E,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,CAAA;QAC1C,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,iCAAiC,CAAC,CAAA;QACxC,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;YACrF,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;gBAChC,GAAG,CAAC,OAAO,SAAS,EAAE,CAAC,CAAA;YACzB,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,EAAE,CAAA;IACjB,CAAC;AACH,CAAC,CAAA"}
@@ -8,6 +8,5 @@ export interface MigrationNewOptions {
8
8
  export declare const generateSlug: (description: string) => string;
9
9
  export declare const detectNumberingScheme: (existingNames: string[]) => NumberingScheme | undefined;
10
10
  export declare const generateNextPrefix: (existingNames: string[], scheme: NumberingScheme) => string;
11
- export declare const resolveMigrationsDirectory: (command: BaseCommand) => string;
12
11
  export declare const migrationNew: (options: MigrationNewOptions, command: BaseCommand) => Promise<void>;
13
- //# sourceMappingURL=migration-new.d.ts.map
12
+ //# sourceMappingURL=db-migration-new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-migration-new.d.ts","sourceRoot":"","sources":["../../../src/commands/database/db-migration-new.ts"],"names":[],"mappings":"AAMA,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAK5C,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,WAAW,CAAA;AAExD,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED,eAAO,MAAM,YAAY,GAAI,aAAa,MAAM,KAAG,MAQlD,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,EAAE,KAAG,eAAe,GAAG,SAiBjF,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAI,eAAe,MAAM,EAAE,EAAE,QAAQ,eAAe,KAAG,MAgBrF,CAAA;AAiBD,eAAO,MAAM,YAAY,GAAU,SAAS,mBAAmB,EAAE,SAAS,WAAW,kBAmFpF,CAAA"}
@@ -2,6 +2,9 @@ import { readdir, mkdir, writeFile } from 'fs/promises';
2
2
  import { join } from 'path';
3
3
  import inquirer from 'inquirer';
4
4
  import { log, logJson } from '../../utils/command-helpers.js';
5
+ import { resolveMigrationsDirectory } from './util/migrations-path.js';
6
+ import { utcTimestampPrefix } from './util/timestamp.js';
7
+ import { isInteractive } from '../../utils/scripted-commands.js';
5
8
  export const generateSlug = (description) => {
6
9
  return description
7
10
  .toLowerCase()
@@ -28,16 +31,12 @@ export const detectNumberingScheme = (existingNames) => {
28
31
  };
29
32
  export const generateNextPrefix = (existingNames, scheme) => {
30
33
  if (scheme === 'timestamp') {
31
- const now = new Date();
32
- const pad = (n, width = 2) => String(n).padStart(width, '0');
33
- return [
34
- now.getFullYear(),
35
- pad(now.getMonth() + 1),
36
- pad(now.getDate()),
37
- pad(now.getHours()),
38
- pad(now.getMinutes()),
39
- pad(now.getSeconds()),
40
- ].join('');
34
+ const now = utcTimestampPrefix();
35
+ const existingPrefixes = new Set(existingNames.map((n) => /^(\d+)/.exec(n)?.[1]).filter(Boolean));
36
+ if (existingPrefixes.has(now)) {
37
+ return utcTimestampPrefix(new Date(Date.now() + 1000));
38
+ }
39
+ return now;
41
40
  }
42
41
  const prefixes = existingNames.map((name) => {
43
42
  const match = /^(\d{4})[_-]/.exec(name);
@@ -61,18 +60,6 @@ const getExistingMigrationNames = async (migrationsDirectory) => {
61
60
  throw error;
62
61
  }
63
62
  };
64
- const DEFAULT_MIGRATIONS_PATH = 'netlify/db/migrations';
65
- export const resolveMigrationsDirectory = (command) => {
66
- const configuredPath = command.netlify.config.db?.migrations?.path;
67
- if (configuredPath) {
68
- return configuredPath;
69
- }
70
- const projectRoot = command.netlify.site.root ?? command.project.root ?? command.project.baseDirectory;
71
- if (!projectRoot) {
72
- throw new Error('Could not determine the project root directory.');
73
- }
74
- return join(projectRoot, DEFAULT_MIGRATIONS_PATH);
75
- };
76
63
  export const migrationNew = async (options, command) => {
77
64
  const { json } = options;
78
65
  const migrationsDirectory = resolveMigrationsDirectory(command);
@@ -81,30 +68,41 @@ export const migrationNew = async (options, command) => {
81
68
  let description = options.description;
82
69
  let scheme = options.scheme;
83
70
  if (!description) {
84
- const answers = await inquirer.prompt([
85
- {
86
- type: 'input',
87
- name: 'description',
88
- message: 'What is the purpose of this migration?',
89
- validate: (input) => (input.trim().length > 0 ? true : 'Description cannot be empty'),
90
- },
91
- ]);
92
- description = answers.description;
71
+ if (isInteractive()) {
72
+ const answers = await inquirer.prompt([
73
+ {
74
+ type: 'input',
75
+ name: 'description',
76
+ message: 'What is the purpose of this migration?',
77
+ validate: (input) => (input.trim().length > 0 ? true : 'Description cannot be empty'),
78
+ },
79
+ ]);
80
+ description = answers.description;
81
+ }
82
+ else {
83
+ throw new Error(`--description <description> argument is required when not running interactively. Provide a description of the migration (e.g. --description "add users table").`);
84
+ }
93
85
  }
94
86
  if (!scheme) {
95
- const answers = await inquirer.prompt([
96
- {
97
- type: 'list',
98
- name: 'scheme',
99
- message: 'Numbering scheme:',
100
- choices: [
101
- { name: 'Sequential (0001, 0002, ...)', value: 'sequential' },
102
- { name: 'Timestamp (20260312143000)', value: 'timestamp' },
103
- ],
104
- ...(detectedScheme && { default: detectedScheme }),
105
- },
106
- ]);
107
- scheme = answers.scheme;
87
+ const defaultScheme = detectedScheme ?? 'timestamp';
88
+ if (isInteractive()) {
89
+ const answers = await inquirer.prompt([
90
+ {
91
+ type: 'list',
92
+ name: 'scheme',
93
+ message: 'Numbering scheme:',
94
+ choices: [
95
+ { name: 'Timestamp (e.g. 20260312143000) [Recommended]', value: 'timestamp' },
96
+ { name: 'Sequential (e.g. 0001, 0002, ...)', value: 'sequential' },
97
+ ],
98
+ default: defaultScheme,
99
+ },
100
+ ]);
101
+ scheme = answers.scheme;
102
+ }
103
+ else {
104
+ scheme = defaultScheme;
105
+ }
108
106
  }
109
107
  const slug = generateSlug(description);
110
108
  if (!slug) {
@@ -132,4 +130,4 @@ export const migrationNew = async (options, command) => {
132
130
  log(` ${join(folderPath, 'migration.sql')}`);
133
131
  }
134
132
  };
135
- //# sourceMappingURL=migration-new.js.map
133
+ //# sourceMappingURL=db-migration-new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-migration-new.js","sourceRoot":"","sources":["../../../src/commands/database/db-migration-new.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,OAAO,QAAQ,MAAM,UAAU,CAAA;AAE/B,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAE7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAUhE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAAmB,EAAU,EAAE;IAC1D,OAAO,WAAW;SACf,WAAW,EAAE;SACb,IAAI,EAAE;SACN,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,aAAuB,EAA+B,EAAE;IAC5F,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACnE,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9D,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9D,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,aAAuB,EAAE,MAAuB,EAAU,EAAE;IAC7F,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAA;QAChC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QACjG,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,kBAAkB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAA;QACxD,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvC,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IACF,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACjE,OAAO,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAM,yBAAyB,GAAG,KAAK,EAAE,mBAA2B,EAAqB,EAAE;IACzF,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,mBAAmB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3E,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;aACtC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;aAC1B,IAAI,EAAE,CAAA;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,OAA4B,EAAE,OAAoB,EAAE,EAAE;IACvF,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAExB,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAA;IAC/D,MAAM,kBAAkB,GAAG,MAAM,yBAAyB,CAAC,mBAAmB,CAAC,CAAA;IAC/E,MAAM,cAAc,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAA;IAEhE,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;IACrC,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAE3B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,aAAa,EAAE,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAA0B;gBAC7D;oBACE,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,wCAAwC;oBACjD,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,6BAA6B,CAAC;iBAC9F;aACF,CAAC,CAAA;YACF,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QACnC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,iKAAiK,CAClK,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,aAAa,GAAG,cAAc,IAAI,WAAW,CAAA;QAEnD,IAAI,aAAa,EAAE,EAAE,CAAC;YACpB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAA8B;gBACjE;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,mBAAmB;oBAC5B,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,+CAA+C,EAAE,KAAK,EAAE,WAAW,EAAE;wBAC7E,EAAE,IAAI,EAAE,mCAAmC,EAAE,KAAK,EAAE,YAAY,EAAE;qBACnE;oBACD,OAAO,EAAE,aAAa;iBACvB;aACF,CAAC,CAAA;YACF,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,aAAa,CAAA;QACxB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;IACtC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,gBAAgB,WAAW,oGAAoG,CAChI,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAA;IAC7D,MAAM,UAAU,GAAG,GAAG,MAAM,IAAI,IAAI,EAAE,CAAA;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;IACxD,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;IAE3D,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,MAAM,SAAS,CACb,iBAAiB,EACjB;;;;;;;;CAQH,EACG,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAA;IAED,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;IACjD,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAA;QACvC,GAAG,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,EAAE,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC,CAAA"}
@@ -5,4 +5,4 @@ export interface MigrationPullOptions {
5
5
  json?: boolean;
6
6
  }
7
7
  export declare const migrationPull: (options: MigrationPullOptions, command: BaseCommand) => Promise<void>;
8
- //# sourceMappingURL=migration-pull.d.ts.map
8
+ //# sourceMappingURL=db-migration-pull.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-migration-pull.d.ts","sourceRoot":"","sources":["../../../src/commands/database/db-migration-pull.ts"],"names":[],"mappings":"AAOA,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAK5C,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAuGD,eAAO,MAAM,aAAa,GAAU,SAAS,oBAAoB,EAAE,SAAS,WAAW,kBAsEtF,CAAA"}