@c9up/atlas 0.1.19 → 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 (250) hide show
  1. package/README.md +63 -14
  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 +66 -7
  8. package/dist/AtlasProvider.d.ts.map +1 -1
  9. package/dist/AtlasProvider.js +205 -39
  10. package/dist/AtlasProvider.js.map +1 -1
  11. package/dist/BaseEntity.d.ts +181 -5
  12. package/dist/BaseEntity.d.ts.map +1 -1
  13. package/dist/BaseEntity.js +339 -33
  14. package/dist/BaseEntity.js.map +1 -1
  15. package/dist/BaseModel.d.ts +127 -0
  16. package/dist/BaseModel.d.ts.map +1 -0
  17. package/dist/BaseModel.js +250 -0
  18. package/dist/BaseModel.js.map +1 -0
  19. package/dist/BaseRepository.d.ts +81 -15
  20. package/dist/BaseRepository.d.ts.map +1 -1
  21. package/dist/BaseRepository.js +1433 -387
  22. package/dist/BaseRepository.js.map +1 -1
  23. package/dist/ConnectionManager.d.ts +106 -0
  24. package/dist/ConnectionManager.d.ts.map +1 -0
  25. package/dist/ConnectionManager.js +228 -0
  26. package/dist/ConnectionManager.js.map +1 -0
  27. package/dist/ModelQuery.d.ts +577 -41
  28. package/dist/ModelQuery.d.ts.map +1 -1
  29. package/dist/ModelQuery.js +2188 -291
  30. package/dist/ModelQuery.js.map +1 -1
  31. package/dist/Transaction.d.ts +71 -1
  32. package/dist/Transaction.d.ts.map +1 -1
  33. package/dist/Transaction.js +138 -24
  34. package/dist/Transaction.js.map +1 -1
  35. package/dist/adapters/NapiDbAdapter.d.ts +44 -4
  36. package/dist/adapters/NapiDbAdapter.d.ts.map +1 -1
  37. package/dist/adapters/NapiDbAdapter.js +131 -13
  38. package/dist/adapters/NapiDbAdapter.js.map +1 -1
  39. package/dist/console/contract.d.ts +62 -0
  40. package/dist/console/contract.d.ts.map +1 -0
  41. package/dist/console/contract.js +38 -0
  42. package/dist/console/contract.js.map +1 -0
  43. package/dist/console/factoryCommands.d.ts +23 -0
  44. package/dist/console/factoryCommands.d.ts.map +1 -0
  45. package/dist/console/factoryCommands.js +62 -0
  46. package/dist/console/factoryCommands.js.map +1 -0
  47. package/dist/console/migrationCommands.d.ts +78 -0
  48. package/dist/console/migrationCommands.d.ts.map +1 -0
  49. package/dist/console/migrationCommands.js +327 -0
  50. package/dist/console/migrationCommands.js.map +1 -0
  51. package/dist/console/schemaCheckCommand.d.ts +11 -17
  52. package/dist/console/schemaCheckCommand.d.ts.map +1 -1
  53. package/dist/console/schemaCheckCommand.js +21 -15
  54. package/dist/console/schemaCheckCommand.js.map +1 -1
  55. package/dist/console/schemaDumpCommand.d.ts +30 -0
  56. package/dist/console/schemaDumpCommand.d.ts.map +1 -0
  57. package/dist/console/schemaDumpCommand.js +69 -0
  58. package/dist/console/schemaDumpCommand.js.map +1 -0
  59. package/dist/console/schemaGenerateCommand.d.ts +100 -0
  60. package/dist/console/schemaGenerateCommand.d.ts.map +1 -0
  61. package/dist/console/schemaGenerateCommand.js +246 -0
  62. package/dist/console/schemaGenerateCommand.js.map +1 -0
  63. package/dist/console/seederCommands.d.ts +46 -0
  64. package/dist/console/seederCommands.d.ts.map +1 -0
  65. package/dist/console/seederCommands.js +136 -0
  66. package/dist/console/seederCommands.js.map +1 -0
  67. package/dist/decorators/entity.d.ts +50 -8
  68. package/dist/decorators/entity.d.ts.map +1 -1
  69. package/dist/decorators/entity.js +42 -2
  70. package/dist/decorators/entity.js.map +1 -1
  71. package/dist/decorators/hooks.d.ts +3 -3
  72. package/dist/decorators/hooks.d.ts.map +1 -1
  73. package/dist/decorators/hooks.js.map +1 -1
  74. package/dist/events.d.ts +69 -0
  75. package/dist/events.d.ts.map +1 -0
  76. package/dist/events.js +82 -0
  77. package/dist/events.js.map +1 -0
  78. package/dist/factories.d.ts +8 -0
  79. package/dist/factories.d.ts.map +1 -0
  80. package/dist/factories.js +8 -0
  81. package/dist/factories.js.map +1 -0
  82. package/dist/index.d.ts +15 -5
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +14 -3
  85. package/dist/index.js.map +1 -1
  86. package/dist/lucid-schema.d.ts +15 -0
  87. package/dist/lucid-schema.d.ts.map +1 -0
  88. package/dist/lucid-schema.js +16 -0
  89. package/dist/lucid-schema.js.map +1 -0
  90. package/dist/metadata-keys.d.ts +3 -2
  91. package/dist/metadata-keys.d.ts.map +1 -1
  92. package/dist/naming/NamingStrategy.d.ts +7 -0
  93. package/dist/naming/NamingStrategy.d.ts.map +1 -1
  94. package/dist/naming/NamingStrategy.js +16 -0
  95. package/dist/naming/NamingStrategy.js.map +1 -1
  96. package/dist/orm.d.ts +14 -0
  97. package/dist/orm.d.ts.map +1 -0
  98. package/dist/orm.js +14 -0
  99. package/dist/orm.js.map +1 -0
  100. package/dist/query/DatabaseQueryBuilder.d.ts +557 -0
  101. package/dist/query/DatabaseQueryBuilder.d.ts.map +1 -0
  102. package/dist/query/DatabaseQueryBuilder.js +1798 -0
  103. package/dist/query/DatabaseQueryBuilder.js.map +1 -0
  104. package/dist/query/DmlBuilder.d.ts +62 -0
  105. package/dist/query/DmlBuilder.d.ts.map +1 -0
  106. package/dist/query/DmlBuilder.js +84 -0
  107. package/dist/query/DmlBuilder.js.map +1 -0
  108. package/dist/query/QueryBuilder.d.ts +5 -0
  109. package/dist/query/QueryBuilder.d.ts.map +1 -1
  110. package/dist/query/QueryBuilder.js +7 -0
  111. package/dist/query/QueryBuilder.js.map +1 -1
  112. package/dist/query/RawQueryBuilder.d.ts +47 -0
  113. package/dist/query/RawQueryBuilder.d.ts.map +1 -0
  114. package/dist/query/RawQueryBuilder.js +138 -0
  115. package/dist/query/RawQueryBuilder.js.map +1 -0
  116. package/dist/query/interpolate.d.ts +45 -0
  117. package/dist/query/interpolate.d.ts.map +1 -0
  118. package/dist/query/interpolate.js +51 -0
  119. package/dist/query/interpolate.js.map +1 -0
  120. package/dist/query/native.d.ts +8 -0
  121. package/dist/query/native.d.ts.map +1 -1
  122. package/dist/query/native.js +14 -0
  123. package/dist/query/native.js.map +1 -1
  124. package/dist/query/operators.d.ts +4 -0
  125. package/dist/query/operators.d.ts.map +1 -0
  126. package/dist/query/operators.js +27 -0
  127. package/dist/query/operators.js.map +1 -0
  128. package/dist/schema/Migration.d.ts +50 -3
  129. package/dist/schema/Migration.d.ts.map +1 -1
  130. package/dist/schema/Migration.js +60 -24
  131. package/dist/schema/Migration.js.map +1 -1
  132. package/dist/schema/MigrationRunner.d.ts +95 -34
  133. package/dist/schema/MigrationRunner.d.ts.map +1 -1
  134. package/dist/schema/MigrationRunner.js +523 -68
  135. package/dist/schema/MigrationRunner.js.map +1 -1
  136. package/dist/schema/Schema.d.ts +114 -0
  137. package/dist/schema/Schema.d.ts.map +1 -1
  138. package/dist/schema/Schema.js +272 -3
  139. package/dist/schema/Schema.js.map +1 -1
  140. package/dist/schema/SchemaDumper.d.ts +121 -0
  141. package/dist/schema/SchemaDumper.d.ts.map +1 -0
  142. package/dist/schema/SchemaDumper.js +365 -0
  143. package/dist/schema/SchemaDumper.js.map +1 -0
  144. package/dist/schema/Seeder.d.ts +13 -0
  145. package/dist/schema/Seeder.d.ts.map +1 -1
  146. package/dist/schema/Seeder.js +28 -5
  147. package/dist/schema/Seeder.js.map +1 -1
  148. package/dist/schema/TableBuilder.d.ts +274 -16
  149. package/dist/schema/TableBuilder.d.ts.map +1 -1
  150. package/dist/schema/TableBuilder.js +656 -52
  151. package/dist/schema/TableBuilder.js.map +1 -1
  152. package/dist/schema/catalog.d.ts +71 -0
  153. package/dist/schema/catalog.d.ts.map +1 -0
  154. package/dist/schema/catalog.js +158 -0
  155. package/dist/schema/catalog.js.map +1 -0
  156. package/dist/schema/introspect.d.ts +1 -1
  157. package/dist/schema/introspect.d.ts.map +1 -1
  158. package/dist/schema/introspect.js +26 -11
  159. package/dist/schema/introspect.js.map +1 -1
  160. package/dist/schema/types.d.ts +150 -1
  161. package/dist/schema/types.d.ts.map +1 -1
  162. package/dist/schema/types.js +11 -0
  163. package/dist/schema/types.js.map +1 -1
  164. package/dist/seeders.d.ts +7 -0
  165. package/dist/seeders.d.ts.map +1 -0
  166. package/dist/seeders.js +7 -0
  167. package/dist/seeders.js.map +1 -0
  168. package/dist/services/db.d.ts +122 -5
  169. package/dist/services/db.d.ts.map +1 -1
  170. package/dist/services/db.js +187 -14
  171. package/dist/services/db.js.map +1 -1
  172. package/dist/testing/DatabaseCleanup.d.ts +33 -7
  173. package/dist/testing/DatabaseCleanup.d.ts.map +1 -1
  174. package/dist/testing/DatabaseCleanup.js +54 -24
  175. package/dist/testing/DatabaseCleanup.js.map +1 -1
  176. package/dist/testing/DbAssertions.d.ts +48 -0
  177. package/dist/testing/DbAssertions.d.ts.map +1 -0
  178. package/dist/testing/DbAssertions.js +80 -0
  179. package/dist/testing/DbAssertions.js.map +1 -0
  180. package/dist/testing/Factory.d.ts +166 -15
  181. package/dist/testing/Factory.d.ts.map +1 -1
  182. package/dist/testing/Factory.js +497 -23
  183. package/dist/testing/Factory.js.map +1 -1
  184. package/dist/testing/TestUtils.d.ts +49 -0
  185. package/dist/testing/TestUtils.d.ts.map +1 -0
  186. package/dist/testing/TestUtils.js +79 -0
  187. package/dist/testing/TestUtils.js.map +1 -0
  188. package/dist/testing/index.d.ts +3 -1
  189. package/dist/testing/index.d.ts.map +1 -1
  190. package/dist/testing/index.js +3 -1
  191. package/dist/testing/index.js.map +1 -1
  192. package/dist/types/relations.d.ts +31 -0
  193. package/dist/types/relations.d.ts.map +1 -0
  194. package/dist/types/relations.js +20 -0
  195. package/dist/types/relations.js.map +1 -0
  196. package/index.darwin-arm64.node +0 -0
  197. package/index.darwin-x64.node +0 -0
  198. package/index.linux-arm64-gnu.node +0 -0
  199. package/index.linux-x64-gnu.node +0 -0
  200. package/index.win32-x64-msvc.node +0 -0
  201. package/package.json +32 -2
  202. package/scripts/guard-publish.mjs +15 -0
  203. package/src/AtlasProvider.ts +305 -52
  204. package/src/BaseEntity.ts +460 -41
  205. package/src/BaseModel.ts +461 -0
  206. package/src/BaseRepository.ts +1710 -421
  207. package/src/ConnectionManager.ts +298 -0
  208. package/src/ModelQuery.ts +2998 -335
  209. package/src/Transaction.ts +227 -30
  210. package/src/adapters/NapiDbAdapter.ts +224 -17
  211. package/src/console/contract.ts +96 -0
  212. package/src/console/factoryCommands.ts +73 -0
  213. package/src/console/migrationCommands.ts +448 -0
  214. package/src/console/schemaCheckCommand.ts +26 -22
  215. package/src/console/schemaDumpCommand.ts +96 -0
  216. package/src/console/schemaGenerateCommand.ts +380 -0
  217. package/src/console/seederCommands.ts +174 -0
  218. package/src/decorators/entity.ts +71 -8
  219. package/src/decorators/hooks.ts +5 -3
  220. package/src/events.ts +117 -0
  221. package/src/factories.ts +10 -0
  222. package/src/index.ts +69 -3
  223. package/src/lucid-schema.ts +22 -0
  224. package/src/metadata-keys.ts +3 -2
  225. package/src/naming/NamingStrategy.ts +23 -0
  226. package/src/orm.ts +13 -0
  227. package/src/query/DatabaseQueryBuilder.ts +2724 -0
  228. package/src/query/DmlBuilder.ts +131 -0
  229. package/src/query/QueryBuilder.ts +8 -0
  230. package/src/query/RawQueryBuilder.ts +173 -0
  231. package/src/query/interpolate.ts +73 -0
  232. package/src/query/native.ts +29 -0
  233. package/src/query/operators.ts +27 -0
  234. package/src/schema/Migration.ts +71 -3
  235. package/src/schema/MigrationRunner.ts +676 -69
  236. package/src/schema/Schema.ts +359 -3
  237. package/src/schema/SchemaDumper.ts +518 -0
  238. package/src/schema/Seeder.ts +47 -10
  239. package/src/schema/TableBuilder.ts +783 -52
  240. package/src/schema/catalog.ts +236 -0
  241. package/src/schema/introspect.ts +26 -9
  242. package/src/schema/types.ts +137 -2
  243. package/src/seeders.ts +16 -0
  244. package/src/services/db.ts +361 -21
  245. package/src/testing/DatabaseCleanup.ts +78 -25
  246. package/src/testing/DbAssertions.ts +127 -0
  247. package/src/testing/Factory.ts +837 -40
  248. package/src/testing/TestUtils.ts +123 -0
  249. package/src/testing/index.ts +12 -1
  250. package/src/types/relations.ts +43 -0
@@ -4,38 +4,138 @@
4
4
  * @implements MISS-1
5
5
  */
6
6
  import { randomBytes } from "node:crypto";
7
+ import { EventEmitter } from "node:events";
8
+ import { makeTransactionQueryBuilders, } from "./query/DatabaseQueryBuilder.js";
9
+ import { getAtlasDialect } from "./query/native.js";
7
10
  import { isTransactionClient, TRANSACTION_BRAND, } from "./utils/transactionBrand.js";
8
- export async function transaction(db, callback, options) {
9
- if (isTransactionClient(db)) {
10
- const name = `sp_${randomBytes(6).toString("hex")}`;
11
- await db.execute(`SAVEPOINT ${name}`, []);
12
- const trx = {
13
- execute: db.execute.bind(db),
14
- query: db.query.bind(db),
15
- async commit() {
16
- await db.execute(`RELEASE SAVEPOINT ${name}`, []);
17
- },
18
- async rollback() {
19
- await db.execute(`ROLLBACK TO SAVEPOINT ${name}`, []);
20
- },
21
- isNested: true,
22
- [TRANSACTION_BRAND]: true,
23
- };
11
+ /**
12
+ * Build the overloaded `transaction()` method for a client. Managed when given a
13
+ * callback (auto RELEASE / ROLLBACK TO), manual otherwise — both open a SAVEPOINT
14
+ * on `getParent()`. The impl signature is deliberately broader than the overloads.
15
+ */
16
+ export function makeNestedTransactionFn(getParent) {
17
+ function tx(arg1, arg2) {
18
+ const parent = getParent();
19
+ const callback = typeof arg1 === "function" ? arg1 : undefined;
20
+ const options = typeof arg1 === "function" ? arg2 : arg1;
21
+ return callback
22
+ ? runManagedSavepoint(parent, callback, options)
23
+ : openSavepoint(parent);
24
+ }
25
+ return tx;
26
+ }
27
+ /** Managed nested savepoint: open, run the callback, RELEASE on success / ROLLBACK TO on throw. */
28
+ async function runManagedSavepoint(parent, callback, _options) {
29
+ const sp = await openSavepoint(parent);
30
+ try {
31
+ const result = await callback(sp);
32
+ await sp.commit();
33
+ return result;
34
+ }
35
+ catch (err) {
24
36
  try {
25
- const result = await callback(trx);
26
- await trx.commit();
27
- return result;
37
+ await sp.rollback();
38
+ }
39
+ catch {
40
+ /* best-effort */
28
41
  }
29
- catch (err) {
42
+ throw err;
43
+ }
44
+ }
45
+ /**
46
+ * Open a SAVEPOINT-backed nested transaction client on `parent`. Shared by the
47
+ * standalone {@link transaction} helper, `trx.transaction()`, and the napi pinned
48
+ * client. Commit RELEASEs the savepoint and forwards hooks to the parent (a
49
+ * nested commit isn't durable until the root commits); rollback does ROLLBACK TO
50
+ * + RELEASE and fires the local rollback hooks.
51
+ */
52
+ export async function openSavepoint(parent) {
53
+ const name = `sp_${randomBytes(6).toString("hex")}`;
54
+ await parent.execute(`SAVEPOINT ${name}`, []);
55
+ const commitHooks = [];
56
+ const rollbackHooks = [];
57
+ const evt = makeTrxEvents();
58
+ const base = {
59
+ execute: parent.execute.bind(parent),
60
+ query: parent.query.bind(parent),
61
+ async commit() {
62
+ await parent.execute(`RELEASE SAVEPOINT ${name}`, []);
63
+ evt.emit("commit"); // synchronous EventEmitter notification (this savepoint)
64
+ for (const hook of commitHooks)
65
+ parent.after("commit", hook);
66
+ for (const hook of rollbackHooks)
67
+ parent.after("rollback", hook);
68
+ },
69
+ async rollback() {
70
+ await parent.execute(`ROLLBACK TO SAVEPOINT ${name}`, []);
30
71
  try {
31
- await trx.rollback();
72
+ await parent.execute(`RELEASE SAVEPOINT ${name}`, []);
32
73
  }
33
74
  catch {
34
- /* best-effort */
75
+ /* best-effort — the savepoint is already logically unwound */
35
76
  }
36
- throw err;
77
+ evt.emit("rollback");
78
+ await runAfterHooks(rollbackHooks);
79
+ },
80
+ after(event, cb) {
81
+ (event === "commit" ? commitHooks : rollbackHooks).push(cb);
82
+ },
83
+ on: evt.on,
84
+ once: evt.once,
85
+ off: evt.off,
86
+ isNested: true,
87
+ [TRANSACTION_BRAND]: true,
88
+ };
89
+ const trx = Object.assign(base, makeTransactionQueryBuilders(base, getAtlasDialect()), { transaction: makeNestedTransactionFn(() => trx) });
90
+ return trx;
91
+ }
92
+ /**
93
+ * Run every registered after-hook, swallowing errors — a post-commit side
94
+ * effect must never surface a failure on a transaction the caller already saw
95
+ * commit (Lucid parity). Shared with the napi adapter's pinned-transaction path.
96
+ */
97
+ export async function runAfterHooks(hooks) {
98
+ for (const hook of hooks) {
99
+ try {
100
+ await hook();
101
+ }
102
+ catch {
103
+ /* swallowed — the transaction already succeeded */
37
104
  }
38
105
  }
106
+ }
107
+ /**
108
+ * The `on`/`once`/`off` EventEmitter surface for a transaction client, plus an
109
+ * internal `emit` the client fires at commit/rollback. Distinct from `after`
110
+ * hooks: these are synchronous, per-client, pre-hook notifications (Lucid — the
111
+ * trx client is a Node EventEmitter). `on`/`once`/`off` return the client for
112
+ * chaining via their `this` binding.
113
+ */
114
+ export function makeTrxEvents() {
115
+ const ee = new EventEmitter();
116
+ return {
117
+ on(e, cb) {
118
+ ee.on(e, cb);
119
+ return this;
120
+ },
121
+ once(e, cb) {
122
+ ee.once(e, cb);
123
+ return this;
124
+ },
125
+ off(e, cb) {
126
+ ee.off(e, cb);
127
+ return this;
128
+ },
129
+ emit(e) {
130
+ ee.emit(e);
131
+ },
132
+ };
133
+ }
134
+ export async function transaction(db, callback, options) {
135
+ // Nested (the caller passed a live trx) → a SAVEPOINT-backed managed savepoint.
136
+ if (isTransactionClient(db)) {
137
+ return runManagedSavepoint(db, callback, options);
138
+ }
39
139
  // Pinned interactive transaction (napi-backed): db.transaction() acquires ONE
40
140
  // connection and issues BEGIN on it; the managed form commits on success /
41
141
  // rolls back on throw, every statement on that same connection. This is the
@@ -47,18 +147,32 @@ export async function transaction(db, callback, options) {
47
147
  return db.transaction(callback, options);
48
148
  }
49
149
  await db.execute("BEGIN", []);
50
- const trx = {
150
+ const commitHooks = [];
151
+ const rollbackHooks = [];
152
+ const evt = makeTrxEvents();
153
+ const base = {
51
154
  execute: db.execute.bind(db),
52
155
  query: db.query.bind(db),
53
156
  async commit() {
54
157
  await db.execute("COMMIT", []);
158
+ evt.emit("commit"); // synchronous EventEmitter notification
159
+ await runAfterHooks(commitHooks);
55
160
  },
56
161
  async rollback() {
57
162
  await db.execute("ROLLBACK", []);
163
+ evt.emit("rollback");
164
+ await runAfterHooks(rollbackHooks);
165
+ },
166
+ after(event, cb) {
167
+ (event === "commit" ? commitHooks : rollbackHooks).push(cb);
58
168
  },
169
+ on: evt.on,
170
+ once: evt.once,
171
+ off: evt.off,
59
172
  isNested: false,
60
173
  [TRANSACTION_BRAND]: true,
61
174
  };
175
+ const trx = Object.assign(base, makeTransactionQueryBuilders(base, getAtlasDialect()), { transaction: makeNestedTransactionFn(() => trx) });
62
176
  try {
63
177
  const result = await callback(trx);
64
178
  await trx.commit();
@@ -1 +1 @@
1
- {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../src/Transaction.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EACN,mBAAmB,EACnB,iBAAiB,GACjB,MAAM,6BAA6B,CAAC;AASrC,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,EAAsB,EACtB,QAAoD,EACpD,OAA4B;IAE5B,IAAI,mBAAmB,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAE1C,MAAM,GAAG,GAAsB;YAC9B,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,MAAM;gBACX,MAAM,EAAE,CAAC,OAAO,CAAC,qBAAqB,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACnD,CAAC;YACD,KAAK,CAAC,QAAQ;gBACb,MAAM,EAAE,CAAC,OAAO,CAAC,yBAAyB,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,QAAQ,EAAE,IAAI;YACd,CAAC,iBAAiB,CAAC,EAAE,IAAI;SACzB,CAAC;QAEF,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,IAAI,CAAC;gBACJ,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACR,iBAAiB;YAClB,CAAC;YACD,MAAM,GAAG,CAAC;QACX,CAAC;IACF,CAAC;IAED,8EAA8E;IAC9E,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,4EAA4E;IAC5E,qEAAqE;IACrE,4DAA4D;IAC5D,IAAI,OAAO,EAAE,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE9B,MAAM,GAAG,GAAsB;QAC9B,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,MAAM;YACX,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,CAAC,QAAQ;YACb,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,QAAQ,EAAE,KAAK;QACf,CAAC,iBAAiB,CAAC,EAAE,IAAI;KACzB,CAAC;IAEF,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,CAAC;YACJ,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACR,iBAAiB;QAClB,CAAC;QACD,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../src/Transaction.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * NapiDbAdapter — bridges the Rust atlas-db NAPI binding to Atlas.
3
3
  */
4
- import type { TransactionClient } from "../Transaction.js";
4
+ import { type TransactionClient } from "../Transaction.js";
5
5
  /** One `(sql, params)` pair passed to `runInTransaction`. */
6
6
  export interface BatchStatement {
7
7
  sql: string;
@@ -17,12 +17,52 @@ export type IsolationLevel = "read uncommitted" | "read committed" | "repeatable
17
17
  export interface TransactionOptions {
18
18
  isolationLevel?: IsolationLevel;
19
19
  }
20
+ /**
21
+ * Context a caller can attach to a statement so the `db:query` event can say
22
+ * where it came from. Optional everywhere — a connection that ignores it stays
23
+ * a valid `AsyncDatabaseConnection`, which is what lets test doubles skip it.
24
+ */
25
+ export interface QueryMeta {
26
+ /** Entity class name, when the statement came from a repository/model. */
27
+ model?: string;
28
+ /** The call that produced it (`exec`, `first`, `paginate`, …). */
29
+ method?: string;
30
+ /** True for schema statements. */
31
+ ddl?: boolean;
32
+ /**
33
+ * Force emission for this statement even when the connection has
34
+ * `debug: false` — this is what `ModelQuery.debug()` sets.
35
+ */
36
+ debug?: boolean;
37
+ /**
38
+ * Arbitrary metadata attached to the `db:query` event (Adonis Lucid
39
+ * `reporterData`) — request id, user id, feature flag, … — for listeners.
40
+ */
41
+ reporterData?: Record<string, unknown>;
42
+ /**
43
+ * Server-side statement timeout in ms (Lucid `timeout(ms, { cancel: true })`).
44
+ * Routes to the driver's `statement_timeout` (Postgres) / `MAX_EXECUTION_TIME`
45
+ * (MySQL SELECT) so the server aborts the query — not just the client race.
46
+ */
47
+ serverTimeoutMs?: number;
48
+ }
49
+ /** Per-connection observability settings (Lucid's `debug` connection option). */
50
+ export interface ObservabilityOptions {
51
+ /**
52
+ * Emit a `db:query` event for every statement on this connection. Off by
53
+ * default: it costs a timing pair per query, and nothing is emitted anyway
54
+ * unless something subscribed via `onDbQuery`.
55
+ */
56
+ debug?: boolean;
57
+ /** Connection name, reported on each event so multi-connection apps can tell them apart. */
58
+ connectionName?: string;
59
+ }
20
60
  /** Async database connection backed by Rust (sqlx). */
21
61
  export interface AsyncDatabaseConnection {
22
62
  /** The dialect this connection targets — derived from the URL scheme at connect time. */
23
63
  readonly dialect: "sqlite" | "postgres" | "mysql";
24
- query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]>;
25
- execute(sql: string, params?: unknown[]): Promise<{
64
+ query<T = Record<string, unknown>>(sql: string, params?: unknown[], meta?: QueryMeta): Promise<T[]>;
65
+ execute(sql: string, params?: unknown[], meta?: QueryMeta): Promise<{
26
66
  rowsAffected: number;
27
67
  }>;
28
68
  /**
@@ -73,5 +113,5 @@ export interface ConnectRetryOptions {
73
113
  * const db = await createNapiConnection('postgres://user:pass@host/db')
74
114
  * const db = await createNapiConnection('mysql://user:pass@host/db')
75
115
  */
76
- export declare function createNapiConnection(url: string, poolMin?: number, poolMax?: number, pragmas?: Record<string, string | number>, retry?: ConnectRetryOptions): Promise<AsyncDatabaseConnection>;
116
+ export declare function createNapiConnection(url: string, poolMin?: number, poolMax?: number, pragmas?: Record<string, string | number>, retry?: ConnectRetryOptions, observability?: ObservabilityOptions): Promise<AsyncDatabaseConnection>;
77
117
  //# sourceMappingURL=NapiDbAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NapiDbAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/NapiDbAdapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAI3D,6DAA6D;AAC7D,MAAM,WAAW,cAAc;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACvB,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,cAAc,CAAC;AAElB,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IAClC,cAAc,CAAC,EAAE,cAAc,CAAC;CAChC;AAED,uDAAuD;AACvD,MAAM,WAAW,uBAAuB;IACvC,yFAAyF;IACzF,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IAClD,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,GAChB,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,WAAW,CAAC,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACtE,WAAW,CAAC,CAAC,CAAC,EACb,QAAQ,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EACpD,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC,CAAC;IACd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtB;AAmCD,2EAA2E;AAC3E,MAAM,WAAW,mBAAmB;IACnC,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACzC,GAAG,EAAE,MAAM,EACX,OAAO,SAAI,EACX,OAAO,SAAK,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACzC,KAAK,CAAC,EAAE,mBAAmB,GACzB,OAAO,CAAC,uBAAuB,CAAC,CAgJlC"}
1
+ {"version":3,"file":"NapiDbAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/NapiDbAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,44 @@
1
1
  /**
2
2
  * NapiDbAdapter — bridges the Rust atlas-db NAPI binding to Atlas.
3
3
  */
4
+ import { emitDbQuery, hasDbQueryListeners } from "../events.js";
5
+ import { makeTransactionQueryBuilders } from "../query/DatabaseQueryBuilder.js";
6
+ import { makeNestedTransactionFn, makeTrxEvents, runAfterHooks, } from "../Transaction.js";
4
7
  import { dialectFromUrl } from "../utils/dialectFromUrl.js";
5
8
  import { TRANSACTION_BRAND } from "../utils/transactionBrand.js";
9
+ /**
10
+ * JSON replacer for the napi boundary. `BigInt` throws in a plain
11
+ * `JSON.stringify` and a `Uint8Array`/`Buffer` serializes to a useless
12
+ * index-map, so both are wrapped in envelopes the Rust side decodes and binds
13
+ * losslessly: `{"$bigint": "123"}` → i64, `{"$bytes": "<base64>"}` → BLOB/BYTEA.
14
+ */
15
+ function napiReplacer(_key, value) {
16
+ if (typeof value === "bigint")
17
+ return { $bigint: value.toString() };
18
+ if (value instanceof Uint8Array) {
19
+ return { $bytes: Buffer.from(value).toString("base64") };
20
+ }
21
+ return value;
22
+ }
23
+ /**
24
+ * JSON reviver for napi result sets. Rebuilds `{"$bytes": …}` envelopes (emitted
25
+ * by the Rust decoder for BLOB/BYTEA columns) into a `Uint8Array`. Integers
26
+ * beyond JS's safe range arrive pre-stringified by Rust — no precision loss — so
27
+ * they stay strings, matching the pg/mysql driver convention.
28
+ */
29
+ function napiReviver(_key, value) {
30
+ if (typeof value === "object" &&
31
+ value !== null &&
32
+ !Array.isArray(value) &&
33
+ "$bytes" in value &&
34
+ Object.keys(value).length === 1) {
35
+ const bytes = value.$bytes;
36
+ if (typeof bytes === "string") {
37
+ return Uint8Array.from(Buffer.from(bytes, "base64"));
38
+ }
39
+ }
40
+ return value;
41
+ }
6
42
  /**
7
43
  * Connect to a database via the Rust NAPI driver.
8
44
  *
@@ -10,7 +46,8 @@ import { TRANSACTION_BRAND } from "../utils/transactionBrand.js";
10
46
  * const db = await createNapiConnection('postgres://user:pass@host/db')
11
47
  * const db = await createNapiConnection('mysql://user:pass@host/db')
12
48
  */
13
- export async function createNapiConnection(url, poolMin = 1, poolMax = 10, pragmas, retry) {
49
+ export async function createNapiConnection(url, poolMin = 1, poolMax = 10, pragmas, retry, observability = {}) {
50
+ const { debug = false, connectionName } = observability;
14
51
  // Throws with the underlying cause if the binary can't be loaded.
15
52
  const native = await loadNativeDb();
16
53
  // Validate sqlite pragmas before crossing the NAPI boundary.
@@ -45,24 +82,48 @@ export async function createNapiConnection(url, poolMin = 1, poolMax = 10, pragm
45
82
  // here routes to that same connection until commit/rollback hands it back.
46
83
  async function openPinned(isolationLevel) {
47
84
  const native = await db.begin(isolationLevel);
48
- return {
85
+ // Root (non-nested) transaction: after-hooks fire once the underlying
86
+ // COMMIT / ROLLBACK is durable (Lucid `trx.after(...)`), errors swallowed.
87
+ const commitHooks = [];
88
+ const rollbackHooks = [];
89
+ const evt = makeTrxEvents();
90
+ const base = {
49
91
  async execute(sql, params = []) {
50
- const affected = await native.execute(sql, JSON.stringify(params));
51
- return { rowsAffected: affected };
92
+ const json = await native.execute(sql, JSON.stringify(params, napiReplacer));
93
+ const r = JSON.parse(json);
94
+ return {
95
+ rowsAffected: Number(r.rows_affected),
96
+ lastInsertId: r.last_insert_id == null ? undefined : Number(r.last_insert_id),
97
+ };
52
98
  },
53
99
  async query(sql, params = []) {
54
- const json = await native.query(sql, JSON.stringify(params));
55
- return JSON.parse(json);
100
+ const json = await native.query(sql, JSON.stringify(params, napiReplacer));
101
+ return JSON.parse(json, napiReviver);
56
102
  },
57
103
  async commit() {
58
104
  await native.commit();
105
+ evt.emit("commit"); // synchronous EventEmitter notification (Lucid trx.on)
106
+ await runAfterHooks(commitHooks);
59
107
  },
60
108
  async rollback() {
61
109
  await native.rollback();
110
+ evt.emit("rollback");
111
+ await runAfterHooks(rollbackHooks);
112
+ },
113
+ after(event, cb) {
114
+ (event === "commit" ? commitHooks : rollbackHooks).push(cb);
62
115
  },
116
+ on: evt.on,
117
+ once: evt.once,
118
+ off: evt.off,
63
119
  isNested: false,
64
120
  [TRANSACTION_BRAND]: true,
65
121
  };
122
+ // Lucid: the transaction client is also a query-builder entry point
123
+ // (trx.table()/from()/insertQuery()), routed through THIS pinned connection.
124
+ // `trx.transaction()` opens a SAVEPOINT-backed nested client on this one.
125
+ const client = Object.assign(base, makeTransactionQueryBuilders(base, dialect), { transaction: makeNestedTransactionFn(() => client) });
126
+ return client;
66
127
  }
67
128
  async function transaction(arg1, arg2) {
68
129
  const callback = typeof arg1 === "function" ? arg1 : undefined;
@@ -85,21 +146,78 @@ export async function createNapiConnection(url, poolMin = 1, poolMax = 10, pragm
85
146
  throw err;
86
147
  }
87
148
  }
149
+ /**
150
+ * Run `fn`, emitting a `db:query` event around it when observation is on.
151
+ *
152
+ * The fast path is a single boolean pair: with no listeners, or with debug
153
+ * off and no per-query override, this adds nothing but the check. The event
154
+ * is emitted on failure too — a slow query that then throws is exactly the
155
+ * one worth seeing.
156
+ */
157
+ async function observed(sql, params, meta, fn) {
158
+ if (!(debug || meta?.debug) || !hasDbQueryListeners())
159
+ return fn();
160
+ const startedAt = performance.now();
161
+ try {
162
+ const result = await fn();
163
+ emitDbQuery({
164
+ sql,
165
+ bindings: params,
166
+ duration: performance.now() - startedAt,
167
+ connection: connectionName,
168
+ model: meta?.model,
169
+ method: meta?.method,
170
+ ddl: meta?.ddl,
171
+ inTransaction: false,
172
+ reporterData: meta?.reporterData,
173
+ });
174
+ return result;
175
+ }
176
+ catch (error) {
177
+ emitDbQuery({
178
+ sql,
179
+ bindings: params,
180
+ duration: performance.now() - startedAt,
181
+ connection: connectionName,
182
+ model: meta?.model,
183
+ method: meta?.method,
184
+ ddl: meta?.ddl,
185
+ inTransaction: false,
186
+ error: error instanceof Error ? error : new Error(String(error)),
187
+ reporterData: meta?.reporterData,
188
+ });
189
+ throw error;
190
+ }
191
+ }
88
192
  return {
89
193
  dialect,
90
194
  transaction,
91
- async query(sql, params = []) {
92
- const json = await db.query(sql, JSON.stringify(params));
93
- return JSON.parse(json);
195
+ async query(sql, params = [], meta) {
196
+ return observed(sql, params, meta, async () => {
197
+ const paramsJson = JSON.stringify(params, napiReplacer);
198
+ const json = meta?.serverTimeoutMs != null
199
+ ? await db.queryTimed(sql, paramsJson, meta.serverTimeoutMs)
200
+ : await db.query(sql, paramsJson);
201
+ return JSON.parse(json, napiReviver);
202
+ });
94
203
  },
95
- async execute(sql, params = []) {
96
- const affected = await db.execute(sql, JSON.stringify(params));
97
- return { rowsAffected: affected };
204
+ async execute(sql, params = [], meta) {
205
+ return observed(sql, params, meta, async () => {
206
+ const paramsJson = JSON.stringify(params, napiReplacer);
207
+ const json = meta?.serverTimeoutMs != null
208
+ ? await db.executeTimed(sql, paramsJson, meta.serverTimeoutMs)
209
+ : await db.execute(sql, paramsJson);
210
+ const r = JSON.parse(json);
211
+ return {
212
+ rowsAffected: Number(r.rows_affected),
213
+ lastInsertId: r.last_insert_id == null ? undefined : Number(r.last_insert_id),
214
+ };
215
+ });
98
216
  },
99
217
  async runInTransaction(batch) {
100
218
  // Rust side expects `[[sql, params], ...]`
101
219
  const payload = batch.map((s) => [s.sql, s.params ?? []]);
102
- return db.runInTransaction(JSON.stringify(payload));
220
+ return db.runInTransaction(JSON.stringify(payload, napiReplacer));
103
221
  },
104
222
  async close() {
105
223
  await db.close();
@@ -1 +1 @@
1
- {"version":3,"file":"NapiDbAdapter.js","sourceRoot":"","sources":["../../src/adapters/NapiDbAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NapiDbAdapter.js","sourceRoot":"","sources":["../../src/adapters/NapiDbAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * The console command contract, declared locally.
3
+ *
4
+ * Atlas stays framework-agnostic: it must not import `@c9up/ream`, so it
5
+ * describes the shape Ream's console kernel dispatches against rather than
6
+ * importing it. Same reasoning as the previous `AtlasCommand` interface — only
7
+ * the shape changed, from a plain object to a class carrying its inputs as
8
+ * metadata.
9
+ *
10
+ * Ream's decorators (`@args` / `@flags`) live in the framework, so the helpers
11
+ * below build the same metadata without them.
12
+ */
13
+ export interface CommandOptions {
14
+ /** Boot the application before `run()`. Off by default. */
15
+ startApp?: boolean;
16
+ staysAlive?: boolean;
17
+ allowUnknownFlags?: boolean;
18
+ }
19
+ export interface ArgumentMetaData {
20
+ type: "string" | "spread";
21
+ propertyName: string;
22
+ argumentName: string;
23
+ description?: string;
24
+ required: boolean;
25
+ default?: string | string[];
26
+ }
27
+ export interface FlagMetaData {
28
+ type: "string" | "boolean" | "number" | "array";
29
+ propertyName: string;
30
+ flagName: string;
31
+ description?: string;
32
+ alias: string[];
33
+ default?: string | string[] | number | boolean;
34
+ required: boolean;
35
+ }
36
+ /** The static side the kernel reads. */
37
+ export interface AtlasCommandClass {
38
+ new (): {
39
+ run(): Promise<void> | void;
40
+ };
41
+ commandName: string;
42
+ description: string;
43
+ options?: CommandOptions;
44
+ args?: readonly ArgumentMetaData[];
45
+ flags?: readonly FlagMetaData[];
46
+ help?: string | string[];
47
+ }
48
+ export declare function flag(propertyName: string, type: FlagMetaData["type"], options?: {
49
+ flagName?: string;
50
+ description?: string;
51
+ alias?: string[];
52
+ default?: FlagMetaData["default"];
53
+ required?: boolean;
54
+ }): FlagMetaData;
55
+ export declare function argument(propertyName: string, options?: {
56
+ type?: ArgumentMetaData["type"];
57
+ argumentName?: string;
58
+ description?: string;
59
+ required?: boolean;
60
+ default?: ArgumentMetaData["default"];
61
+ }): ArgumentMetaData;
62
+ //# sourceMappingURL=contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/console/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,cAAc;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IACjC,QAAQ;QAAE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,IAAI,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnC,KAAK,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CACzB;AAOD,wBAAgB,IAAI,CACnB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAC1B,OAAO,GAAE;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACd,GACJ,YAAY,CAUd;AAED,wBAAgB,QAAQ,CACvB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IACR,IAAI,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;CACjC,GACJ,gBAAgB,CASlB"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * The console command contract, declared locally.
3
+ *
4
+ * Atlas stays framework-agnostic: it must not import `@c9up/ream`, so it
5
+ * describes the shape Ream's console kernel dispatches against rather than
6
+ * importing it. Same reasoning as the previous `AtlasCommand` interface — only
7
+ * the shape changed, from a plain object to a class carrying its inputs as
8
+ * metadata.
9
+ *
10
+ * Ream's decorators (`@args` / `@flags`) live in the framework, so the helpers
11
+ * below build the same metadata without them.
12
+ */
13
+ /** `startServer` → `start-server`, matching the framework's decorators. */
14
+ function dashCase(value) {
15
+ return value.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
16
+ }
17
+ export function flag(propertyName, type, options = {}) {
18
+ return {
19
+ type,
20
+ propertyName,
21
+ flagName: options.flagName ?? dashCase(propertyName),
22
+ description: options.description,
23
+ alias: options.alias ?? [],
24
+ default: options.default,
25
+ required: options.required ?? false,
26
+ };
27
+ }
28
+ export function argument(propertyName, options = {}) {
29
+ return {
30
+ type: options.type ?? "string",
31
+ propertyName,
32
+ argumentName: options.argumentName ?? dashCase(propertyName),
33
+ description: options.description,
34
+ required: options.required ?? options.default === undefined,
35
+ default: options.default,
36
+ };
37
+ }
38
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/console/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAuCH,2EAA2E;AAC3E,SAAS,QAAQ,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,IAAI,CACnB,YAAoB,EACpB,IAA0B,EAC1B,UAMI,EAAE;IAEN,OAAO;QACN,IAAI;QACJ,YAAY;QACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC;QACpD,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;QAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;KACnC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CACvB,YAAoB,EACpB,UAMI,EAAE;IAEN,OAAO;QACN,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,QAAQ;QAC9B,YAAY;QACZ,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC;QAC5D,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS;QAC3D,OAAO,EAAE,OAAO,CAAC,OAAO;KACxB,CAAC;AACH,CAAC"}