@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
@@ -149,7 +149,18 @@ export class Schema {
149
149
  return this;
150
150
  }
151
151
 
152
+ /** `DROP TABLE` — errors if the table is missing (Adonis Lucid/Knex `dropTable`). */
152
153
  dropTable(name: string): this {
154
+ const { statements } = compileStatementNative(
155
+ { kind: "dropTable", table: this.#qualify(name), ifExists: false },
156
+ this.#dialect,
157
+ );
158
+ this.#statements.push(...statements);
159
+ return this;
160
+ }
161
+
162
+ /** `DROP TABLE IF EXISTS` — a no-op when missing (Lucid/Knex `dropTableIfExists`). */
163
+ dropTableIfExists(name: string): this {
153
164
  const { statements } = compileStatementNative(
154
165
  { kind: "dropTable", table: this.#qualify(name), ifExists: true },
155
166
  this.#dialect,
@@ -158,6 +169,89 @@ export class Schema {
158
169
  return this;
159
170
  }
160
171
 
172
+ /**
173
+ * `CREATE SCHEMA` (Lucid/Knex `createSchema`). Postgres and MySQL (where a
174
+ * schema is a database); rejected on SQLite, which has no schemas.
175
+ */
176
+ createSchema(name: string): this {
177
+ return this.#schemaStmt({ kind: "createSchema", name, ifNotExists: false });
178
+ }
179
+
180
+ /** `CREATE SCHEMA IF NOT EXISTS` (Lucid/Knex `createSchemaIfNotExists`). */
181
+ createSchemaIfNotExists(name: string): this {
182
+ return this.#schemaStmt({ kind: "createSchema", name, ifNotExists: true });
183
+ }
184
+
185
+ /** `DROP SCHEMA [CASCADE]` (Lucid/Knex `dropSchema`). CASCADE is Postgres-only. */
186
+ dropSchema(name: string, cascade = false): this {
187
+ return this.#schemaStmt({
188
+ kind: "dropSchema",
189
+ name,
190
+ ifExists: false,
191
+ cascade,
192
+ });
193
+ }
194
+
195
+ /** `DROP SCHEMA IF EXISTS [CASCADE]` (Lucid/Knex `dropSchemaIfExists`). */
196
+ dropSchemaIfExists(name: string, cascade = false): this {
197
+ return this.#schemaStmt({
198
+ kind: "dropSchema",
199
+ name,
200
+ ifExists: true,
201
+ cascade,
202
+ });
203
+ }
204
+
205
+ /** Compile a schema-level DDL spec and queue it. */
206
+ #schemaStmt(spec: object): this {
207
+ const { statements } = compileStatementNative(spec, this.#dialect);
208
+ this.#statements.push(...statements);
209
+ return this;
210
+ }
211
+
212
+ /**
213
+ * `CREATE TABLE new LIKE old` (Lucid/Knex `createTableLike`) — copy a table's
214
+ * structure. Postgres copies everything (`INCLUDING ALL`), MySQL uses `LIKE`,
215
+ * SQLite copies COLUMNS ONLY (`AS SELECT … WHERE 0` — no constraints/indexes,
216
+ * the same limitation Knex documents).
217
+ */
218
+ createTableLike(
219
+ name: string,
220
+ likeTable: string,
221
+ callback?: (table: TableBuilder) => void,
222
+ ): this {
223
+ this.#schemaStmt({
224
+ kind: "createTableLike",
225
+ table: this.#qualify(name),
226
+ likeTable: this.#qualify(likeTable),
227
+ ifNotExists: false,
228
+ });
229
+ // Lucid's optional callback adds columns to the copied table — emit them as
230
+ // a follow-up ALTER TABLE (the copy exists by the time it runs).
231
+ if (callback) this.alterTable(name, callback);
232
+ return this;
233
+ }
234
+
235
+ /**
236
+ * `ALTER VIEW` (Lucid/Knex `alterView`) — rename a view's columns via the
237
+ * callback (`view.column('id').rename('user_id')`). Postgres only: MySQL/SQLite
238
+ * can't rename view columns in place, so drop and re-create the view there.
239
+ */
240
+ alterView(name: string, callback: (view: AlterViewBuilder) => void): this {
241
+ const builder = new AlterViewBuilder();
242
+ callback(builder);
243
+ return this.#schemaStmt({
244
+ kind: "alterView",
245
+ view: this.#qualify(name),
246
+ renames: builder.renames,
247
+ });
248
+ }
249
+
250
+ /** Alias of {@link alterView} (Lucid/Knex `view`). */
251
+ view(name: string, callback: (view: AlterViewBuilder) => void): this {
252
+ return this.alterView(name, callback);
253
+ }
254
+
161
255
  createIndex(
162
256
  table: string,
163
257
  columns: string | string[],
@@ -221,29 +315,67 @@ export class Schema {
221
315
  return this.#pushView(name, select, { ...options, materialized: true });
222
316
  }
223
317
 
224
- /** `DROP VIEW IF EXISTS name` (Lucid/Knex `dropView`/`dropViewIfExists`). */
318
+ /** `DROP VIEW` errors if missing (Lucid/Knex `dropView`). */
225
319
  dropView(name: string): this {
226
- const { statements } = compileStatementNative(
227
- { kind: "dropView", name: this.#qualify(name), ifExists: true },
228
- this.#dialect,
229
- );
230
- this.#statements.push(...statements);
231
- return this;
320
+ return this.#schemaStmt({
321
+ kind: "dropView",
322
+ name: this.#qualify(name),
323
+ ifExists: false,
324
+ });
325
+ }
326
+
327
+ /** `DROP VIEW IF EXISTS` — a no-op when missing (Lucid/Knex `dropViewIfExists`). */
328
+ dropViewIfExists(name: string): this {
329
+ return this.#schemaStmt({
330
+ kind: "dropView",
331
+ name: this.#qualify(name),
332
+ ifExists: true,
333
+ });
232
334
  }
233
335
 
234
- /** `DROP MATERIALIZED VIEW IF EXISTS name` (Lucid/Knex). Postgres-only. */
336
+ /** `DROP MATERIALIZED VIEW` (Lucid/Knex). Postgres-only. */
235
337
  dropMaterializedView(name: string): this {
236
- const { statements } = compileStatementNative(
237
- {
238
- kind: "dropView",
239
- name: this.#qualify(name),
240
- ifExists: true,
241
- materialized: true,
242
- },
243
- this.#dialect,
244
- );
245
- this.#statements.push(...statements);
246
- return this;
338
+ return this.#schemaStmt({
339
+ kind: "dropView",
340
+ name: this.#qualify(name),
341
+ ifExists: false,
342
+ materialized: true,
343
+ });
344
+ }
345
+
346
+ /** `DROP MATERIALIZED VIEW IF EXISTS` (Lucid/Knex). Postgres-only. */
347
+ dropMaterializedViewIfExists(name: string): this {
348
+ return this.#schemaStmt({
349
+ kind: "dropView",
350
+ name: this.#qualify(name),
351
+ ifExists: true,
352
+ materialized: true,
353
+ });
354
+ }
355
+
356
+ /**
357
+ * Rename a view (Lucid/Knex `renameView`). Postgres `ALTER VIEW … RENAME TO`,
358
+ * MySQL `RENAME TABLE`; SQLite can't rename a view (drop and re-create).
359
+ */
360
+ renameView(from: string, to: string): this {
361
+ return this.#schemaStmt({
362
+ kind: "renameView",
363
+ from: this.#qualify(from),
364
+ to: this.#qualify(to),
365
+ materialized: false,
366
+ });
367
+ }
368
+
369
+ /**
370
+ * `REFRESH MATERIALIZED VIEW [CONCURRENTLY]` (Lucid/Knex
371
+ * `refreshMaterializedView`). Postgres-only.
372
+ */
373
+ refreshMaterializedView(name: string, concurrently = false): this {
374
+ return this.#schemaStmt({
375
+ kind: "refreshMaterializedView",
376
+ name: this.#qualify(name),
377
+ concurrently,
378
+ });
247
379
  }
248
380
 
249
381
  #pushView(
@@ -283,3 +415,20 @@ export class Schema {
283
415
  return [...this.#statements];
284
416
  }
285
417
  }
418
+
419
+ /**
420
+ * Callback builder for {@link Schema.alterView} — collects column renames
421
+ * (Adonis Lucid `view.column('id').rename('user_id')`).
422
+ */
423
+ export class AlterViewBuilder {
424
+ readonly renames: Array<{ from: string; to: string }> = [];
425
+
426
+ /** Target a view column; `.rename(to)` queues its rename. */
427
+ column(name: string): { rename(to: string): void } {
428
+ return {
429
+ rename: (to: string): void => {
430
+ this.renames.push({ from: name, to });
431
+ },
432
+ };
433
+ }
434
+ }