@c9up/atlas 0.2.0 → 0.2.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 +8 -0
  2. package/db.darwin-arm64.node +0 -0
  3. package/db.darwin-x64.node +0 -0
  4. package/db.linux-arm64-gnu.node +0 -0
  5. package/db.linux-x64-gnu.node +0 -0
  6. package/db.win32-x64-msvc.node +0 -0
  7. package/dist/AtlasProvider.d.ts +60 -7
  8. package/dist/AtlasProvider.d.ts.map +1 -1
  9. package/dist/AtlasProvider.js +204 -38
  10. package/dist/AtlasProvider.js.map +1 -1
  11. package/dist/BaseEntity.d.ts +17 -0
  12. package/dist/BaseEntity.d.ts.map +1 -1
  13. package/dist/BaseEntity.js.map +1 -1
  14. package/dist/BaseModel.d.ts +63 -27
  15. package/dist/BaseModel.d.ts.map +1 -1
  16. package/dist/BaseModel.js +108 -51
  17. package/dist/BaseModel.js.map +1 -1
  18. package/dist/BaseRepository.d.ts +11 -1
  19. package/dist/BaseRepository.d.ts.map +1 -1
  20. package/dist/BaseRepository.js +95 -20
  21. package/dist/BaseRepository.js.map +1 -1
  22. package/dist/ConnectionManager.d.ts +106 -0
  23. package/dist/ConnectionManager.d.ts.map +1 -0
  24. package/dist/ConnectionManager.js +228 -0
  25. package/dist/ConnectionManager.js.map +1 -0
  26. package/dist/ModelQuery.d.ts +256 -43
  27. package/dist/ModelQuery.d.ts.map +1 -1
  28. package/dist/ModelQuery.js +899 -231
  29. package/dist/ModelQuery.js.map +1 -1
  30. package/dist/Transaction.d.ts +54 -1
  31. package/dist/Transaction.d.ts.map +1 -1
  32. package/dist/Transaction.js +121 -59
  33. package/dist/Transaction.js.map +1 -1
  34. package/dist/adapters/NapiDbAdapter.d.ts +11 -0
  35. package/dist/adapters/NapiDbAdapter.d.ts.map +1 -1
  36. package/dist/adapters/NapiDbAdapter.js +35 -7
  37. package/dist/adapters/NapiDbAdapter.js.map +1 -1
  38. package/dist/console/contract.d.ts +62 -0
  39. package/dist/console/contract.d.ts.map +1 -0
  40. package/dist/console/contract.js +38 -0
  41. package/dist/console/contract.js.map +1 -0
  42. package/dist/console/factoryCommands.d.ts +23 -0
  43. package/dist/console/factoryCommands.d.ts.map +1 -0
  44. package/dist/console/factoryCommands.js +62 -0
  45. package/dist/console/factoryCommands.js.map +1 -0
  46. package/dist/console/migrationCommands.d.ts +38 -8
  47. package/dist/console/migrationCommands.d.ts.map +1 -1
  48. package/dist/console/migrationCommands.js +157 -50
  49. package/dist/console/migrationCommands.js.map +1 -1
  50. package/dist/console/schemaCheckCommand.d.ts +11 -17
  51. package/dist/console/schemaCheckCommand.d.ts.map +1 -1
  52. package/dist/console/schemaCheckCommand.js +21 -15
  53. package/dist/console/schemaCheckCommand.js.map +1 -1
  54. package/dist/console/schemaDumpCommand.d.ts +30 -0
  55. package/dist/console/schemaDumpCommand.d.ts.map +1 -0
  56. package/dist/console/schemaDumpCommand.js +69 -0
  57. package/dist/console/schemaDumpCommand.js.map +1 -0
  58. package/dist/console/schemaGenerateCommand.d.ts +100 -0
  59. package/dist/console/schemaGenerateCommand.d.ts.map +1 -0
  60. package/dist/console/schemaGenerateCommand.js +246 -0
  61. package/dist/console/schemaGenerateCommand.js.map +1 -0
  62. package/dist/console/seederCommands.d.ts +46 -0
  63. package/dist/console/seederCommands.d.ts.map +1 -0
  64. package/dist/console/seederCommands.js +136 -0
  65. package/dist/console/seederCommands.js.map +1 -0
  66. package/dist/decorators/entity.d.ts +13 -2
  67. package/dist/decorators/entity.d.ts.map +1 -1
  68. package/dist/decorators/entity.js +10 -0
  69. package/dist/decorators/entity.js.map +1 -1
  70. package/dist/decorators/hooks.d.ts +3 -3
  71. package/dist/decorators/hooks.d.ts.map +1 -1
  72. package/dist/decorators/hooks.js.map +1 -1
  73. package/dist/events.d.ts +5 -0
  74. package/dist/events.d.ts.map +1 -1
  75. package/dist/events.js.map +1 -1
  76. package/dist/factories.d.ts +8 -0
  77. package/dist/factories.d.ts.map +1 -0
  78. package/dist/factories.js +8 -0
  79. package/dist/factories.js.map +1 -0
  80. package/dist/index.d.ts +11 -5
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +12 -4
  83. package/dist/index.js.map +1 -1
  84. package/dist/lucid-schema.d.ts +15 -0
  85. package/dist/lucid-schema.d.ts.map +1 -0
  86. package/dist/lucid-schema.js +16 -0
  87. package/dist/lucid-schema.js.map +1 -0
  88. package/dist/orm.d.ts +14 -0
  89. package/dist/orm.d.ts.map +1 -0
  90. package/dist/orm.js +14 -0
  91. package/dist/orm.js.map +1 -0
  92. package/dist/query/DatabaseQueryBuilder.d.ts +557 -0
  93. package/dist/query/DatabaseQueryBuilder.d.ts.map +1 -0
  94. package/dist/query/DatabaseQueryBuilder.js +1798 -0
  95. package/dist/query/DatabaseQueryBuilder.js.map +1 -0
  96. package/dist/query/DmlBuilder.d.ts +62 -0
  97. package/dist/query/DmlBuilder.d.ts.map +1 -0
  98. package/dist/query/DmlBuilder.js +84 -0
  99. package/dist/query/DmlBuilder.js.map +1 -0
  100. package/dist/query/QueryBuilder.d.ts +5 -0
  101. package/dist/query/QueryBuilder.d.ts.map +1 -1
  102. package/dist/query/QueryBuilder.js +7 -0
  103. package/dist/query/QueryBuilder.js.map +1 -1
  104. package/dist/query/RawQueryBuilder.d.ts +47 -0
  105. package/dist/query/RawQueryBuilder.d.ts.map +1 -0
  106. package/dist/query/RawQueryBuilder.js +138 -0
  107. package/dist/query/RawQueryBuilder.js.map +1 -0
  108. package/dist/query/interpolate.d.ts +45 -0
  109. package/dist/query/interpolate.d.ts.map +1 -0
  110. package/dist/query/interpolate.js +51 -0
  111. package/dist/query/interpolate.js.map +1 -0
  112. package/dist/query/native.d.ts +8 -0
  113. package/dist/query/native.d.ts.map +1 -1
  114. package/dist/query/native.js +14 -0
  115. package/dist/query/native.js.map +1 -1
  116. package/dist/query/operators.d.ts +4 -0
  117. package/dist/query/operators.d.ts.map +1 -0
  118. package/dist/query/operators.js +27 -0
  119. package/dist/query/operators.js.map +1 -0
  120. package/dist/schema/Migration.d.ts +31 -7
  121. package/dist/schema/Migration.d.ts.map +1 -1
  122. package/dist/schema/Migration.js +34 -7
  123. package/dist/schema/Migration.js.map +1 -1
  124. package/dist/schema/MigrationRunner.d.ts +56 -6
  125. package/dist/schema/MigrationRunner.d.ts.map +1 -1
  126. package/dist/schema/MigrationRunner.js +382 -112
  127. package/dist/schema/MigrationRunner.js.map +1 -1
  128. package/dist/schema/Schema.d.ts +59 -2
  129. package/dist/schema/Schema.d.ts.map +1 -1
  130. package/dist/schema/Schema.js +143 -9
  131. package/dist/schema/Schema.js.map +1 -1
  132. package/dist/schema/SchemaDumper.d.ts +121 -0
  133. package/dist/schema/SchemaDumper.d.ts.map +1 -0
  134. package/dist/schema/SchemaDumper.js +365 -0
  135. package/dist/schema/SchemaDumper.js.map +1 -0
  136. package/dist/schema/Seeder.d.ts +13 -0
  137. package/dist/schema/Seeder.d.ts.map +1 -1
  138. package/dist/schema/Seeder.js +28 -5
  139. package/dist/schema/Seeder.js.map +1 -1
  140. package/dist/schema/TableBuilder.d.ts +27 -8
  141. package/dist/schema/TableBuilder.d.ts.map +1 -1
  142. package/dist/schema/TableBuilder.js +50 -12
  143. package/dist/schema/TableBuilder.js.map +1 -1
  144. package/dist/schema/catalog.d.ts +25 -1
  145. package/dist/schema/catalog.d.ts.map +1 -1
  146. package/dist/schema/catalog.js +69 -22
  147. package/dist/schema/catalog.js.map +1 -1
  148. package/dist/schema/introspect.d.ts +1 -1
  149. package/dist/schema/introspect.d.ts.map +1 -1
  150. package/dist/schema/introspect.js +26 -11
  151. package/dist/schema/introspect.js.map +1 -1
  152. package/dist/seeders.d.ts +7 -0
  153. package/dist/seeders.d.ts.map +1 -0
  154. package/dist/seeders.js +7 -0
  155. package/dist/seeders.js.map +1 -0
  156. package/dist/services/db.d.ts +120 -9
  157. package/dist/services/db.d.ts.map +1 -1
  158. package/dist/services/db.js +182 -26
  159. package/dist/services/db.js.map +1 -1
  160. package/dist/testing/DatabaseCleanup.d.ts +29 -6
  161. package/dist/testing/DatabaseCleanup.d.ts.map +1 -1
  162. package/dist/testing/DatabaseCleanup.js +44 -17
  163. package/dist/testing/DatabaseCleanup.js.map +1 -1
  164. package/dist/testing/DbAssertions.d.ts +48 -0
  165. package/dist/testing/DbAssertions.d.ts.map +1 -0
  166. package/dist/testing/DbAssertions.js +80 -0
  167. package/dist/testing/DbAssertions.js.map +1 -0
  168. package/dist/testing/Factory.d.ts +111 -25
  169. package/dist/testing/Factory.d.ts.map +1 -1
  170. package/dist/testing/Factory.js +331 -56
  171. package/dist/testing/Factory.js.map +1 -1
  172. package/dist/testing/TestUtils.d.ts +49 -0
  173. package/dist/testing/TestUtils.d.ts.map +1 -0
  174. package/dist/testing/TestUtils.js +79 -0
  175. package/dist/testing/TestUtils.js.map +1 -0
  176. package/dist/testing/index.d.ts +3 -1
  177. package/dist/testing/index.d.ts.map +1 -1
  178. package/dist/testing/index.js +3 -1
  179. package/dist/testing/index.js.map +1 -1
  180. package/dist/types/relations.d.ts +31 -0
  181. package/dist/types/relations.d.ts.map +1 -0
  182. package/dist/types/relations.js +20 -0
  183. package/dist/types/relations.js.map +1 -0
  184. package/index.darwin-arm64.node +0 -0
  185. package/index.darwin-x64.node +0 -0
  186. package/index.linux-arm64-gnu.node +0 -0
  187. package/index.linux-x64-gnu.node +0 -0
  188. package/index.win32-x64-msvc.node +0 -0
  189. package/package.json +30 -2
  190. package/src/AtlasProvider.ts +297 -51
  191. package/src/BaseEntity.ts +29 -0
  192. package/src/BaseModel.ts +174 -37
  193. package/src/BaseRepository.ts +136 -17
  194. package/src/ConnectionManager.ts +298 -0
  195. package/src/ModelQuery.ts +1309 -260
  196. package/src/Transaction.ts +194 -60
  197. package/src/adapters/NapiDbAdapter.ts +72 -14
  198. package/src/console/contract.ts +96 -0
  199. package/src/console/factoryCommands.ts +73 -0
  200. package/src/console/migrationCommands.ts +253 -63
  201. package/src/console/schemaCheckCommand.ts +26 -22
  202. package/src/console/schemaDumpCommand.ts +96 -0
  203. package/src/console/schemaGenerateCommand.ts +380 -0
  204. package/src/console/seederCommands.ts +174 -0
  205. package/src/decorators/entity.ts +18 -2
  206. package/src/decorators/hooks.ts +5 -3
  207. package/src/events.ts +5 -0
  208. package/src/factories.ts +10 -0
  209. package/src/index.ts +50 -3
  210. package/src/lucid-schema.ts +22 -0
  211. package/src/orm.ts +13 -0
  212. package/src/query/DatabaseQueryBuilder.ts +2724 -0
  213. package/src/query/DmlBuilder.ts +131 -0
  214. package/src/query/QueryBuilder.ts +8 -0
  215. package/src/query/RawQueryBuilder.ts +173 -0
  216. package/src/query/interpolate.ts +73 -0
  217. package/src/query/native.ts +29 -0
  218. package/src/query/operators.ts +27 -0
  219. package/src/schema/Migration.ts +36 -7
  220. package/src/schema/MigrationRunner.ts +483 -119
  221. package/src/schema/Schema.ts +168 -19
  222. package/src/schema/SchemaDumper.ts +518 -0
  223. package/src/schema/Seeder.ts +47 -10
  224. package/src/schema/TableBuilder.ts +48 -11
  225. package/src/schema/catalog.ts +94 -24
  226. package/src/schema/introspect.ts +26 -9
  227. package/src/seeders.ts +16 -0
  228. package/src/services/db.ts +343 -31
  229. package/src/testing/DatabaseCleanup.ts +73 -21
  230. package/src/testing/DbAssertions.ts +127 -0
  231. package/src/testing/Factory.ts +559 -79
  232. package/src/testing/TestUtils.ts +123 -0
  233. package/src/testing/index.ts +12 -1
  234. package/src/types/relations.ts +43 -0
@@ -17,26 +17,56 @@
17
17
  * // reamrc.ts → commands: [() => import('./commands/migrate.js')]
18
18
  * // run: <console-entry> migration:run
19
19
  */
20
- import type { AtlasCommand } from "./schemaCheckCommand.js";
20
+ import { type AtlasCommandClass } from "./contract.js";
21
+ import { type SchemaGenerateOptions } from "./schemaGenerateCommand.js";
21
22
  export interface MigrationCommandOptions {
22
23
  /** Directory holding the numbered migration files. */
23
24
  migrationsDir: string;
25
+ /**
26
+ * Sort migration files numerically (`2_x` before `10_x`). Adonis Lucid
27
+ * `migrations.naturalSort`. Defaults to `false`.
28
+ */
29
+ naturalSort?: boolean;
30
+ /**
31
+ * Run every migration outside a transaction. Adonis Lucid
32
+ * `migrations.disableTransactions`. A migration can also opt out with
33
+ * `static disableTransactions = true`. Defaults to `false`.
34
+ */
35
+ disableTransactions?: boolean;
36
+ /**
37
+ * Regenerate the schema file after a mutating migration command
38
+ * (run/rollback/reset/refresh/fresh) — Adonis Lucid's post-migration
39
+ * `schema:generate`. Off unless an `outputPath` is given; on by default once
40
+ * it is, unless `enabled: false`; suppress per-run with `--no-schema-generate`.
41
+ */
42
+ schemaGeneration?: SchemaGenerateOptions;
43
+ /**
44
+ * Default schema-dump path auto-loaded by `migration:run` / `migration:fresh`
45
+ * when the target DB has no applied migrations (Adonis Lucid bootstraps from
46
+ * the dump by default). Overridden per-run by `--schema-path`; a run never
47
+ * loads it once migrations exist.
48
+ */
49
+ schemaPath?: string;
24
50
  }
25
51
  /** `migration:run` — apply every pending migration. */
26
- export declare function migrationRunCommand(options: MigrationCommandOptions): AtlasCommand;
52
+ export declare function migrationRunCommand(options: MigrationCommandOptions): AtlasCommandClass;
27
53
  /**
28
54
  * `migration:rollback` — undo the latest batch, or with `--batch=N` roll back
29
55
  * everything applied after batch N (`--batch=0` rolls back all).
30
56
  */
31
- export declare function migrationRollbackCommand(options: MigrationCommandOptions): AtlasCommand;
57
+ export declare function migrationRollbackCommand(options: MigrationCommandOptions): AtlasCommandClass;
32
58
  /** `migration:status` — list every migration and whether it is applied. */
33
- export declare function migrationStatusCommand(options: MigrationCommandOptions): AtlasCommand;
59
+ export declare function migrationStatusCommand(options: MigrationCommandOptions): AtlasCommandClass;
34
60
  /** `migration:reset` — roll back every applied migration. */
35
- export declare function migrationResetCommand(options: MigrationCommandOptions): AtlasCommand;
61
+ export declare function migrationResetCommand(options: MigrationCommandOptions): AtlasCommandClass;
62
+ /** `migration:unlock` — force-clear a stuck migration lock (Lucid `migration:unlock`). */
63
+ export declare function migrationUnlockCommand(options: MigrationCommandOptions): AtlasCommandClass;
64
+ /** `migration:fresh` — drop every table, then re-run all migrations (Lucid `migration:fresh`). */
65
+ export declare function migrationFreshCommand(options: MigrationCommandOptions): AtlasCommandClass;
36
66
  /** `migration:refresh` — roll everything back, then re-run all migrations. */
37
- export declare function migrationRefreshCommand(options: MigrationCommandOptions): AtlasCommand;
67
+ export declare function migrationRefreshCommand(options: MigrationCommandOptions): AtlasCommandClass;
38
68
  /** `db:wipe` — drop every table, including the migrations bookkeeping table. */
39
- export declare function dbWipeCommand(options: MigrationCommandOptions): AtlasCommand;
69
+ export declare function dbWipeCommand(options: MigrationCommandOptions): AtlasCommandClass;
40
70
  /**
41
71
  * `make:migration <name>` — scaffold a timestamped migration file in
42
72
  * `migrationsDir`. The `Date.now()` prefix keeps files in creation order under
@@ -44,5 +74,5 @@ export declare function dbWipeCommand(options: MigrationCommandOptions): AtlasCo
44
74
  * is validated (no path separators / traversal) and the file is written with
45
75
  * `wx` so an existing migration is never clobbered.
46
76
  */
47
- export declare function makeMigrationCommand(options: MigrationCommandOptions): AtlasCommand;
77
+ export declare function makeMigrationCommand(options: MigrationCommandOptions): AtlasCommandClass;
48
78
  //# sourceMappingURL=migrationCommands.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrationCommands.d.ts","sourceRoot":"","sources":["../../src/console/migrationCommands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,uBAAuB;IACvC,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;CACtB;AAsCD,uDAAuD;AACvD,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,uBAAuB,GAC9B,YAAY,CAad;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,uBAAuB,GAC9B,YAAY,CAuBd;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,uBAAuB,GAC9B,YAAY,CAkBd;AAED,6DAA6D;AAC7D,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,uBAAuB,GAC9B,YAAY,CAed;AAED,8EAA8E;AAC9E,wBAAgB,uBAAuB,CACtC,OAAO,EAAE,uBAAuB,GAC9B,YAAY,CAWd;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,OAAO,EAAE,uBAAuB,GAAG,YAAY,CAW5E;AAkBD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,uBAAuB,GAC9B,YAAY,CAyBd"}
1
+ {"version":3,"file":"migrationCommands.d.ts","sourceRoot":"","sources":["../../src/console/migrationCommands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,OAAO,EAAE,KAAK,iBAAiB,EAAkB,MAAM,eAAe,CAAC;AACvE,OAAO,EAEN,KAAK,qBAAqB,EAC1B,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,uBAAuB;IACvC,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AA+CD,uDAAuD;AACvD,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,uBAAuB,GAC9B,iBAAiB,CAuBnB;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,uBAAuB,GAC9B,iBAAiB,CAuCnB;AAED,2EAA2E;AAC3E,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,uBAAuB,GAC9B,iBAAiB,CAoBnB;AAED,6DAA6D;AAC7D,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,uBAAuB,GAC9B,iBAAiB,CAuBnB;AAED,0FAA0F;AAC1F,wBAAgB,sBAAsB,CACrC,OAAO,EAAE,uBAAuB,GAC9B,iBAAiB,CAenB;AAED,kGAAkG;AAClG,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,uBAAuB,GAC9B,iBAAiB,CA2BnB;AAED,8EAA8E;AAC9E,wBAAgB,uBAAuB,CACtC,OAAO,EAAE,uBAAuB,GAC9B,iBAAiB,CAqBnB;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAC5B,OAAO,EAAE,uBAAuB,GAC9B,iBAAiB,CAiBnB;AAkBD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,uBAAuB,GAC9B,iBAAiB,CA2BnB"}
@@ -22,6 +22,8 @@ import * as path from "node:path";
22
22
  import { MigrationRunner, } from "../schema/MigrationRunner.js";
23
23
  import { getDb } from "../services/db.js";
24
24
  import { assertSafeName } from "../utils/safePath.js";
25
+ import { argument, flag } from "./contract.js";
26
+ import { generateSchemaFile, } from "./schemaGenerateCommand.js";
25
27
  /**
26
28
  * Adapt the shared singleton connection to the runner's {@link DatabaseAdapter}.
27
29
  * `close()` is intentionally a no-op — the console kernel owns the connection's
@@ -34,6 +36,9 @@ function toAdapter(conn) {
34
36
  },
35
37
  query: (sql, params) => conn.query(sql, params),
36
38
  runInTransaction: (batch) => conn.runInTransaction(batch),
39
+ // Thread the connection's managed interactive transaction through so the
40
+ // runner can make this.defer() atomic and restore MySQL FK checks.
41
+ transaction: conn.transaction?.bind(conn),
37
42
  close: async () => { },
38
43
  };
39
44
  }
@@ -48,22 +53,33 @@ function resolveRunner(options) {
48
53
  process.exitCode = 1;
49
54
  return undefined;
50
55
  }
56
+ // Pass the connection's ACTUAL dialect — without it the runner defaults to
57
+ // sqlite and emits SQLite SQL (lock table, FK handling, DDL) against a
58
+ // Postgres/MySQL database.
51
59
  return new MigrationRunner(toAdapter(db), {
52
60
  migrationsDir: options.migrationsDir,
61
+ dialect: db.dialect,
62
+ naturalSort: options.naturalSort,
63
+ disableTransactions: options.disableTransactions,
53
64
  });
54
65
  }
55
66
  /** `migration:run` — apply every pending migration. */
56
67
  export function migrationRunCommand(options) {
57
- return {
58
- name: "migration:run",
59
- description: "Run all pending migrations",
68
+ return class MigrationRun {
69
+ static commandName = "migration:run";
70
+ static description = "Run all pending migrations (--schema-path to bootstrap from a dump)";
71
+ static options = { startApp: true };
72
+ static flags = [schemaPathOption(), noSchemaGenerateFlag()];
60
73
  async run() {
61
74
  const runner = resolveRunner(options);
62
75
  if (!runner)
63
76
  return;
64
- const ran = await runner.migrate();
77
+ const ran = await runner.migrate({
78
+ schemaPath: this.schemaPath ?? options.schemaPath,
79
+ });
65
80
  console.log(ran.length ? `Migrated: ${ran.join(", ")}` : "Already up to date");
66
- },
81
+ await maybeRegenSchema(options, this);
82
+ }
67
83
  };
68
84
  }
69
85
  /**
@@ -71,31 +87,42 @@ export function migrationRunCommand(options) {
71
87
  * everything applied after batch N (`--batch=0` rolls back all).
72
88
  */
73
89
  export function migrationRollbackCommand(options) {
74
- return {
75
- name: "migration:rollback",
76
- description: "Roll back the latest batch (or --batch=N)",
77
- async run(_args, flags) {
90
+ return class MigrationRollback {
91
+ static commandName = "migration:rollback";
92
+ static description = "Roll back the latest batch (or --batch=N; --force in prod)";
93
+ static options = { startApp: true };
94
+ static flags = [
95
+ flag("batch", "number", {
96
+ description: "Roll back everything applied after batch N (0 = all)",
97
+ }),
98
+ forceFlag(),
99
+ noSchemaGenerateFlag(),
100
+ ];
101
+ async run() {
78
102
  const runner = resolveRunner(options);
79
103
  if (!runner)
80
104
  return;
81
- const batch = parseBatchFlag(flags.batch);
105
+ const batch = parseBatchFlag(this.batch);
82
106
  if (batch === "invalid") {
83
107
  console.error("[atlas] --batch must be a non-negative integer");
84
108
  process.exitCode = 1;
85
109
  return;
86
110
  }
87
- const rolled = await runner.rollback(batch === undefined ? {} : { batch });
111
+ const force = this.force === true;
112
+ const rolled = await runner.rollback(batch === undefined ? { force } : { batch, force });
88
113
  console.log(rolled.length
89
114
  ? `Rolled back: ${rolled.join(", ")}`
90
115
  : "Nothing to roll back");
91
- },
116
+ await maybeRegenSchema(options, this);
117
+ }
92
118
  };
93
119
  }
94
120
  /** `migration:status` — list every migration and whether it is applied. */
95
121
  export function migrationStatusCommand(options) {
96
- return {
97
- name: "migration:status",
98
- description: "Show applied and pending migrations",
122
+ return class MigrationStatus {
123
+ static commandName = "migration:status";
124
+ static description = "Show applied and pending migrations";
125
+ static options = { startApp: true };
99
126
  async run() {
100
127
  const runner = resolveRunner(options);
101
128
  if (!runner)
@@ -109,51 +136,98 @@ export function migrationStatusCommand(options) {
109
136
  const batch = row.batch === undefined ? "" : ` (batch ${row.batch})`;
110
137
  console.log(`${row.status.padEnd(8)} ${row.name}${batch}`);
111
138
  }
112
- },
139
+ }
113
140
  };
114
141
  }
115
142
  /** `migration:reset` — roll back every applied migration. */
116
143
  export function migrationResetCommand(options) {
117
- return {
118
- name: "migration:reset",
119
- description: "Roll back all migrations",
144
+ return class MigrationReset {
145
+ static commandName = "migration:reset";
146
+ static description = "Roll back all migrations (--force to override prod guard)";
147
+ static options = { startApp: true };
148
+ static flags = [forceFlag(), noSchemaGenerateFlag()];
120
149
  async run() {
121
150
  const runner = resolveRunner(options);
122
151
  if (!runner)
123
152
  return;
124
- const rolled = await runner.reset();
153
+ const rolled = await runner.reset({ force: this.force === true });
125
154
  console.log(rolled.length
126
155
  ? `Rolled back: ${rolled.join(", ")}`
127
156
  : "Nothing to reset");
128
- },
157
+ await maybeRegenSchema(options, this);
158
+ }
159
+ };
160
+ }
161
+ /** `migration:unlock` — force-clear a stuck migration lock (Lucid `migration:unlock`). */
162
+ export function migrationUnlockCommand(options) {
163
+ return class MigrationUnlock {
164
+ static commandName = "migration:unlock";
165
+ static description = "Force-clear a stuck migration lock";
166
+ static options = { startApp: true };
167
+ async run() {
168
+ const runner = resolveRunner(options);
169
+ if (!runner)
170
+ return;
171
+ const cleared = await runner.forceUnlock();
172
+ console.log(cleared ? "Migration lock cleared" : "No migration lock was held");
173
+ }
174
+ };
175
+ }
176
+ /** `migration:fresh` — drop every table, then re-run all migrations (Lucid `migration:fresh`). */
177
+ export function migrationFreshCommand(options) {
178
+ return class MigrationFresh {
179
+ static commandName = "migration:fresh";
180
+ static description = "Drop all tables, then re-run every migration (--force to override prod guard)";
181
+ static options = { startApp: true };
182
+ static flags = [forceFlag(), schemaPathOption(), noSchemaGenerateFlag()];
183
+ async run() {
184
+ const runner = resolveRunner(options);
185
+ if (!runner)
186
+ return;
187
+ const { executed } = await runner.fresh({
188
+ force: this.force === true,
189
+ schemaPath: this.schemaPath ?? options.schemaPath,
190
+ });
191
+ console.log(executed.length
192
+ ? `Dropped all tables, re-ran: ${executed.join(", ")}`
193
+ : "Dropped all tables (no migrations to run)");
194
+ await maybeRegenSchema(options, this);
195
+ }
129
196
  };
130
197
  }
131
198
  /** `migration:refresh` — roll everything back, then re-run all migrations. */
132
199
  export function migrationRefreshCommand(options) {
133
- return {
134
- name: "migration:refresh",
135
- description: "Roll back all migrations, then re-run them",
200
+ return class MigrationRefresh {
201
+ static commandName = "migration:refresh";
202
+ static description = "Roll back all migrations, then re-run them (--force to override prod guard)";
203
+ static options = { startApp: true };
204
+ static flags = [forceFlag(), noSchemaGenerateFlag()];
136
205
  async run() {
137
206
  const runner = resolveRunner(options);
138
207
  if (!runner)
139
208
  return;
140
- const { rolled, executed } = await runner.refresh();
209
+ const { rolled, executed } = await runner.refresh({
210
+ force: this.force === true,
211
+ });
141
212
  console.log(`Rolled back: ${rolled.length}, re-ran: ${executed.length}`);
142
- },
213
+ await maybeRegenSchema(options, this);
214
+ }
143
215
  };
144
216
  }
145
217
  /** `db:wipe` — drop every table, including the migrations bookkeeping table. */
146
218
  export function dbWipeCommand(options) {
147
- return {
148
- name: "db:wipe",
149
- description: "Drop all tables (including the migrations table)",
219
+ return class DbWipe {
220
+ static commandName = "db:wipe";
221
+ static description = "Drop all tables including the migrations table (--force to override prod guard)";
222
+ static options = { startApp: true };
223
+ static flags = [forceFlag()];
150
224
  async run() {
151
225
  const runner = resolveRunner(options);
152
226
  if (!runner)
153
227
  return;
154
- await runner.wipe();
228
+ await runner.wipe({ force: this.force === true });
155
229
  console.log("Dropped all tables");
156
- },
230
+ }
157
231
  };
158
232
  }
159
233
  /** Scaffold body for a fresh migration (`make:migration`). */
@@ -179,42 +253,75 @@ export default class extends Migration {
179
253
  * `wx` so an existing migration is never clobbered.
180
254
  */
181
255
  export function makeMigrationCommand(options) {
182
- return {
183
- name: "make:migration",
184
- description: "Scaffold a new timestamped migration file",
185
- async run(args) {
186
- const name = args[0];
187
- if (!name) {
188
- console.error("[atlas] usage: make:migration <name>");
189
- process.exitCode = 1;
190
- return;
191
- }
256
+ return class MakeMigration {
257
+ static commandName = "make:migration";
258
+ static description = "Scaffold a new timestamped migration file";
259
+ // Filesystem only — no connection needed.
260
+ static options = { startApp: false };
261
+ static args = [argument("name", { description: "Migration file name" })];
262
+ async run() {
263
+ // A missing name never reaches here: the kernel reports the required
264
+ // argument by name before `run()`.
192
265
  try {
193
- assertSafeName(name, "MIGRATION_INVALID", "migration");
266
+ assertSafeName(this.name, "MIGRATION_INVALID", "migration");
194
267
  }
195
268
  catch {
196
- console.error(`[atlas] invalid migration name: ${name}`);
269
+ console.error(`[atlas] invalid migration name: ${this.name}`);
197
270
  process.exitCode = 1;
198
271
  return;
199
272
  }
200
- const fileName = `${Date.now()}_${name}.ts`;
273
+ const fileName = `${Date.now()}_${this.name}.ts`;
201
274
  const filePath = path.join(options.migrationsDir, fileName);
202
275
  await fsp.mkdir(options.migrationsDir, { recursive: true });
203
276
  await fsp.writeFile(filePath, MIGRATION_STUB, { flag: "wx" });
204
277
  console.log(`Created ${filePath}`);
205
- },
278
+ }
206
279
  };
207
280
  }
281
+ /**
282
+ * Flags shared by several migration commands.
283
+ *
284
+ * Declared per command rather than inherited: `migration:status` takes neither
285
+ * `--force` nor `--schema-path`, and listing them anyway would put flags in its
286
+ * help that it ignores.
287
+ */
288
+ const forceFlag = () => flag("force", "boolean", {
289
+ description: "Override the production guard",
290
+ });
291
+ const schemaPathOption = () => flag("schemaPath", "string", {
292
+ description: "Bootstrap from a schema dump before migrating",
293
+ });
294
+ const noSchemaGenerateFlag = () => flag("noSchemaGenerate", "boolean", {
295
+ description: "Skip regenerating the schema file afterwards",
296
+ });
297
+ /**
298
+ * Regenerate the schema file after a mutating migration command (Adonis Lucid's
299
+ * post-migration `schema:generate`) — unless it's disabled, has no `outputPath`,
300
+ * or the run passed `--no-schema-generate`.
301
+ */
302
+ async function maybeRegenSchema(options, command) {
303
+ const cfg = options.schemaGeneration;
304
+ // Opt-in by configuring an outputPath; then ON unless explicitly disabled —
305
+ // Adonis Lucid presents `enabled: false` as the OFF switch (default on).
306
+ if (!cfg?.outputPath || cfg.enabled === false)
307
+ return;
308
+ if (command.noSchemaGenerate === true)
309
+ return;
310
+ const db = getDb();
311
+ if (!db)
312
+ return;
313
+ const n = await generateSchemaFile(db, cfg);
314
+ console.log(`Regenerated ${cfg.outputPath} (${n} table${n === 1 ? "" : "s"})`);
315
+ }
208
316
  /**
209
317
  * Parse the `--batch` flag: absent → undefined (default rollback), a
210
318
  * non-negative integer string → that number, anything else → `"invalid"`.
211
319
  */
212
320
  function parseBatchFlag(value) {
213
- if (value === undefined || value === true)
321
+ // The kernel already rejected a non-numeric `--batch`; what is left to check
322
+ // is that the number is a non-negative integer.
323
+ if (value === undefined)
214
324
  return undefined;
215
- if (value === false)
216
- return "invalid";
217
- const n = Number(value);
218
- return Number.isInteger(n) && n >= 0 ? n : "invalid";
325
+ return Number.isInteger(value) && value >= 0 ? value : "invalid";
219
326
  }
220
327
  //# sourceMappingURL=migrationCommands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrationCommands.js","sourceRoot":"","sources":["../../src/console/migrationCommands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrationCommands.js","sourceRoot":"","sources":["../../src/console/migrationCommands.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,22 @@
1
1
  /**
2
2
  * `atlas:check` console command — the Ream-idiomatic CLI for schema
3
- * verification. Ream commands are plain `{ name, description, run }` objects
4
- * registered in `reamrc.commands` and dispatched by the console kernel
5
- * (`new Ignitor(...).console().handle(argv)`).
3
+ * verification. Ream commands are classes carrying their name, description and
4
+ * inputs as statics; the console kernel discovers them in `commands/` or reads
5
+ * them from `reamrc.commands`.
6
6
  *
7
7
  * Stays framework-agnostic: resolves the live connection + dialect from atlas's
8
8
  * OWN service locators (`getDb` / `getAtlasDialect`), never importing
9
- * `@c9up/ream`. The {@link AtlasCommand} shape structurally matches Ream's
10
- * `Command` interface, so the console kernel accepts it without a type
11
- * dependency in either direction.
9
+ * `@c9up/ream`. The {@link AtlasCommandClass} shape structurally matches Ream's
10
+ * command contract, so the console kernel accepts it without a type dependency
11
+ * in either direction.
12
12
  */
13
+ import { type AtlasCommandClass } from "./contract.js";
13
14
  type Constructor = new (...args: unknown[]) => unknown;
14
- /** Structural match of Ream's console `Command` (no `@c9up/ream` import). */
15
- export interface AtlasCommand {
16
- name: string;
17
- description: string;
18
- run(args: string[], flags: Record<string, string | boolean>): Promise<void>;
19
- }
15
+ export type { AtlasCommandClass } from "./contract.js";
20
16
  /**
21
17
  * Build the `atlas:check` command for the given models. Register it in
22
18
  * `reamrc.commands` (atlas has no global entity registry — list your models,
23
- * as in Lucid). Run it via the console kernel; `--warn` reports drift without a
19
+ * as in Lucid). Run it as `ream atlas:check`; `--warn` reports drift without a
24
20
  * non-zero exit (useful for an advisory CI step).
25
21
  *
26
22
  * @example
@@ -29,9 +25,7 @@ export interface AtlasCommand {
29
25
  * import { User } from '#models/user'
30
26
  * export default schemaCheckCommand([User])
31
27
  *
32
- * // reamrc.ts → commands: [() => import('./commands/atlas-check.js')]
33
- * // run: <console-entry> atlas:check
28
+ * // run: ream atlas:check --warn
34
29
  */
35
- export declare function schemaCheckCommand(entities: readonly Constructor[]): AtlasCommand;
36
- export {};
30
+ export declare function schemaCheckCommand(entities: readonly Constructor[]): AtlasCommandClass;
37
31
  //# sourceMappingURL=schemaCheckCommand.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemaCheckCommand.d.ts","sourceRoot":"","sources":["../../src/console/schemaCheckCommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,KAAK,WAAW,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAEvD,6EAA6E;AAC7E,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAC9B,YAAY,CAkBd"}
1
+ {"version":3,"file":"schemaCheckCommand.d.ts","sourceRoot":"","sources":["../../src/console/schemaCheckCommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,EAAE,KAAK,iBAAiB,EAAQ,MAAM,eAAe,CAAC;AAE7D,KAAK,WAAW,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAEvD,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAC9B,iBAAiB,CA2BnB"}
@@ -1,22 +1,23 @@
1
1
  /**
2
2
  * `atlas:check` console command — the Ream-idiomatic CLI for schema
3
- * verification. Ream commands are plain `{ name, description, run }` objects
4
- * registered in `reamrc.commands` and dispatched by the console kernel
5
- * (`new Ignitor(...).console().handle(argv)`).
3
+ * verification. Ream commands are classes carrying their name, description and
4
+ * inputs as statics; the console kernel discovers them in `commands/` or reads
5
+ * them from `reamrc.commands`.
6
6
  *
7
7
  * Stays framework-agnostic: resolves the live connection + dialect from atlas's
8
8
  * OWN service locators (`getDb` / `getAtlasDialect`), never importing
9
- * `@c9up/ream`. The {@link AtlasCommand} shape structurally matches Ream's
10
- * `Command` interface, so the console kernel accepts it without a type
11
- * dependency in either direction.
9
+ * `@c9up/ream`. The {@link AtlasCommandClass} shape structurally matches Ream's
10
+ * command contract, so the console kernel accepts it without a type dependency
11
+ * in either direction.
12
12
  */
13
13
  import { getAtlasDialect } from "../query/native.js";
14
14
  import { runSchemaCheck } from "../schema/SchemaCheck.js";
15
15
  import { getDb } from "../services/db.js";
16
+ import { flag } from "./contract.js";
16
17
  /**
17
18
  * Build the `atlas:check` command for the given models. Register it in
18
19
  * `reamrc.commands` (atlas has no global entity registry — list your models,
19
- * as in Lucid). Run it via the console kernel; `--warn` reports drift without a
20
+ * as in Lucid). Run it as `ream atlas:check`; `--warn` reports drift without a
20
21
  * non-zero exit (useful for an advisory CI step).
21
22
  *
22
23
  * @example
@@ -25,14 +26,19 @@ import { getDb } from "../services/db.js";
25
26
  * import { User } from '#models/user'
26
27
  * export default schemaCheckCommand([User])
27
28
  *
28
- * // reamrc.ts → commands: [() => import('./commands/atlas-check.js')]
29
- * // run: <console-entry> atlas:check
29
+ * // run: ream atlas:check --warn
30
30
  */
31
31
  export function schemaCheckCommand(entities) {
32
- return {
33
- name: "atlas:check",
34
- description: "Verify models match the live database schema",
35
- async run(_args, flags) {
32
+ return class SchemaCheck {
33
+ static commandName = "atlas:check";
34
+ static description = "Verify models match the live database schema";
35
+ static options = { startApp: true };
36
+ static flags = [
37
+ flag("warn", "boolean", {
38
+ description: "Report drift without failing (exit 0)",
39
+ }),
40
+ ];
41
+ async run() {
36
42
  const db = getDb();
37
43
  if (!db) {
38
44
  console.error("[atlas:check] no database connection — is AtlasProvider registered?");
@@ -41,9 +47,9 @@ export function schemaCheckCommand(entities) {
41
47
  }
42
48
  const code = await runSchemaCheck(entities, db, getAtlasDialect());
43
49
  // `--warn` downgrades drift to advisory (exit 0); default fails CI.
44
- if (code !== 0 && !flags.warn)
50
+ if (code !== 0 && !this.warn)
45
51
  process.exitCode = code;
46
- },
52
+ }
47
53
  };
48
54
  }
49
55
  //# sourceMappingURL=schemaCheckCommand.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemaCheckCommand.js","sourceRoot":"","sources":["../../src/console/schemaCheckCommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAW1C;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CACjC,QAAgC;IAEhC,OAAO;QACN,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,8CAA8C;QAC3D,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK;YACrB,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CACZ,qEAAqE,CACrE,CAAC;gBACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACR,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;YACnE,oEAAoE;YACpE,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxD,CAAC;KACD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"schemaCheckCommand.js","sourceRoot":"","sources":["../../src/console/schemaCheckCommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAA0B,IAAI,EAAE,MAAM,eAAe,CAAC;AAM7D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CACjC,QAAgC;IAEhC,OAAO,MAAM,WAAW;QACvB,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC;QACnC,MAAM,CAAC,WAAW,GAAG,8CAA8C,CAAC;QACpE,MAAM,CAAC,OAAO,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACpC,MAAM,CAAC,KAAK,GAAG;YACd,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE;gBACvB,WAAW,EAAE,uCAAuC;aACpD,CAAC;SACF,CAAC;QAIF,KAAK,CAAC,GAAG;YACR,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE,EAAE,CAAC;gBACT,OAAO,CAAC,KAAK,CACZ,qEAAqE,CACrE,CAAC;gBACF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACR,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;YACnE,oEAAoE;YACpE,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;QACvD,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * `schema:dump` — serialise the live database's schema to a `.sql` dump + a
3
+ * `.meta.json` manifest (Adonis Lucid `schema:dump` / `SchemaDumper`), so a
4
+ * fresh database can be rebuilt from the dump via `migration:run --schema-path`
5
+ * instead of replaying every migration.
6
+ *
7
+ * @example
8
+ * // commands/schema-dump.ts
9
+ * import { schemaDumpCommand } from '@c9up/atlas'
10
+ * export default schemaDumpCommand({ migrationsDir: 'database/migrations' })
11
+ * // run: <console-entry> schema:dump → database/schema/default-schema.sql
12
+ * // schema:dump --prune → also squashes the migration files
13
+ */
14
+ import { type AtlasCommandClass } from "./contract.js";
15
+ export interface SchemaDumpCommandOptions {
16
+ /** Directory the dump + manifest are written to. Default `"database/schema"`. */
17
+ outputDir?: string;
18
+ /** Migration directory — required for `--prune` (the files it collapses). */
19
+ migrationsDir?: string;
20
+ /** Migration bookkeeping table name. Default `"ream_migrations"`. */
21
+ schemaTableName?: string;
22
+ /**
23
+ * Timestamp string for the manifest. `Date.now()`/`new Date()` are unavailable
24
+ * in some atlas contexts, so pass one in when you need a deterministic value.
25
+ */
26
+ generatedAt?: string;
27
+ }
28
+ /** `schema:dump` — dump the schema; `--prune` squashes migrations, `--connection` targets one. */
29
+ export declare function schemaDumpCommand(options?: SchemaDumpCommandOptions): AtlasCommandClass;
30
+ //# sourceMappingURL=schemaDumpCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaDumpCommand.d.ts","sourceRoot":"","sources":["../../src/console/schemaDumpCommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,KAAK,iBAAiB,EAAQ,MAAM,eAAe,CAAC;AAE7D,MAAM,WAAW,wBAAwB;IACxC,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,kGAAkG;AAClG,wBAAgB,iBAAiB,CAChC,OAAO,GAAE,wBAA6B,GACpC,iBAAiB,CA4DnB"}