@endora-commerce/platform 0.100.0

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 (657) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -0
  3. package/dist/cli/dispatch.d.ts +146 -0
  4. package/dist/cli/dispatch.d.ts.map +1 -0
  5. package/dist/cli/dispatch.js +259 -0
  6. package/dist/cli/dispatch.js.map +1 -0
  7. package/dist/cli/index.d.ts +58 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +58 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/module-commands.d.ts +118 -0
  12. package/dist/cli/module-commands.d.ts.map +1 -0
  13. package/dist/cli/module-commands.js +120 -0
  14. package/dist/cli/module-commands.js.map +1 -0
  15. package/dist/commands/actor.d.ts +19 -0
  16. package/dist/commands/actor.d.ts.map +1 -0
  17. package/dist/commands/actor.js +45 -0
  18. package/dist/commands/actor.js.map +1 -0
  19. package/dist/commands/audit-from-context.d.ts +24 -0
  20. package/dist/commands/audit-from-context.d.ts.map +1 -0
  21. package/dist/commands/audit-from-context.js +28 -0
  22. package/dist/commands/audit-from-context.js.map +1 -0
  23. package/dist/commands/command-bus.d.ts +40 -0
  24. package/dist/commands/command-bus.d.ts.map +1 -0
  25. package/dist/commands/command-bus.js +46 -0
  26. package/dist/commands/command-bus.js.map +1 -0
  27. package/dist/commands/command.d.ts +76 -0
  28. package/dist/commands/command.d.ts.map +1 -0
  29. package/dist/commands/command.js +2 -0
  30. package/dist/commands/command.js.map +1 -0
  31. package/dist/commands/index.d.ts +65 -0
  32. package/dist/commands/index.d.ts.map +1 -0
  33. package/dist/commands/index.js +57 -0
  34. package/dist/commands/index.js.map +1 -0
  35. package/dist/commands/reversible.d.ts +66 -0
  36. package/dist/commands/reversible.d.ts.map +1 -0
  37. package/dist/commands/reversible.js +41 -0
  38. package/dist/commands/reversible.js.map +1 -0
  39. package/dist/composition/compose-app.d.ts +305 -0
  40. package/dist/composition/compose-app.d.ts.map +1 -0
  41. package/dist/composition/compose-app.js +939 -0
  42. package/dist/composition/compose-app.js.map +1 -0
  43. package/dist/composition/index.d.ts +92 -0
  44. package/dist/composition/index.d.ts.map +1 -0
  45. package/dist/composition/index.js +175 -0
  46. package/dist/composition/index.js.map +1 -0
  47. package/dist/composition/newsletter-token-secret.d.ts +19 -0
  48. package/dist/composition/newsletter-token-secret.d.ts.map +1 -0
  49. package/dist/composition/newsletter-token-secret.js +24 -0
  50. package/dist/composition/newsletter-token-secret.js.map +1 -0
  51. package/dist/composition/process-runs-workers.d.ts +17 -0
  52. package/dist/composition/process-runs-workers.d.ts.map +1 -0
  53. package/dist/composition/process-runs-workers.js +19 -0
  54. package/dist/composition/process-runs-workers.js.map +1 -0
  55. package/dist/db/baseline-migration-inventory.d.ts +15 -0
  56. package/dist/db/baseline-migration-inventory.d.ts.map +1 -0
  57. package/dist/db/baseline-migration-inventory.js +115 -0
  58. package/dist/db/baseline-migration-inventory.js.map +1 -0
  59. package/dist/db/configured-entities.d.ts +74 -0
  60. package/dist/db/configured-entities.d.ts.map +1 -0
  61. package/dist/db/configured-entities.js +20 -0
  62. package/dist/db/configured-entities.js.map +1 -0
  63. package/dist/db/configured-migrations.d.ts +199 -0
  64. package/dist/db/configured-migrations.d.ts.map +1 -0
  65. package/dist/db/configured-migrations.js +181 -0
  66. package/dist/db/configured-migrations.js.map +1 -0
  67. package/dist/db/index.d.ts +54 -0
  68. package/dist/db/index.d.ts.map +1 -0
  69. package/dist/db/index.js +54 -0
  70. package/dist/db/index.js.map +1 -0
  71. package/dist/db/migrate.d.ts +21 -0
  72. package/dist/db/migrate.d.ts.map +1 -0
  73. package/dist/db/migrate.js +48 -0
  74. package/dist/db/migrate.js.map +1 -0
  75. package/dist/db/migration-order.d.ts +159 -0
  76. package/dist/db/migration-order.d.ts.map +1 -0
  77. package/dist/db/migration-order.js +273 -0
  78. package/dist/db/migration-order.js.map +1 -0
  79. package/dist/db/mikro-orm.config.d.ts +51 -0
  80. package/dist/db/mikro-orm.config.d.ts.map +1 -0
  81. package/dist/db/mikro-orm.config.js +64 -0
  82. package/dist/db/mikro-orm.config.js.map +1 -0
  83. package/dist/db/orm.d.ts +40 -0
  84. package/dist/db/orm.d.ts.map +1 -0
  85. package/dist/db/orm.js +25 -0
  86. package/dist/db/orm.js.map +1 -0
  87. package/dist/db/platform-schema.d.ts +102 -0
  88. package/dist/db/platform-schema.d.ts.map +1 -0
  89. package/dist/db/platform-schema.js +79 -0
  90. package/dist/db/platform-schema.js.map +1 -0
  91. package/dist/db/pluralizing-naming-strategy.d.ts +16 -0
  92. package/dist/db/pluralizing-naming-strategy.d.ts.map +1 -0
  93. package/dist/db/pluralizing-naming-strategy.js +66 -0
  94. package/dist/db/pluralizing-naming-strategy.js.map +1 -0
  95. package/dist/demo/guard.d.ts +101 -0
  96. package/dist/demo/guard.d.ts.map +1 -0
  97. package/dist/demo/guard.js +168 -0
  98. package/dist/demo/guard.js.map +1 -0
  99. package/dist/demo/host-command.d.ts +133 -0
  100. package/dist/demo/host-command.d.ts.map +1 -0
  101. package/dist/demo/host-command.js +113 -0
  102. package/dist/demo/host-command.js.map +1 -0
  103. package/dist/demo/index.d.ts +82 -0
  104. package/dist/demo/index.d.ts.map +1 -0
  105. package/dist/demo/index.js +82 -0
  106. package/dist/demo/index.js.map +1 -0
  107. package/dist/demo/packages.d.ts +67 -0
  108. package/dist/demo/packages.d.ts.map +1 -0
  109. package/dist/demo/packages.js +132 -0
  110. package/dist/demo/packages.js.map +1 -0
  111. package/dist/demo/plan.d.ts +111 -0
  112. package/dist/demo/plan.d.ts.map +1 -0
  113. package/dist/demo/plan.js +74 -0
  114. package/dist/demo/plan.js.map +1 -0
  115. package/dist/demo/report.d.ts +17 -0
  116. package/dist/demo/report.d.ts.map +1 -0
  117. package/dist/demo/report.js +85 -0
  118. package/dist/demo/report.js.map +1 -0
  119. package/dist/demo/runner.d.ts +207 -0
  120. package/dist/demo/runner.d.ts.map +1 -0
  121. package/dist/demo/runner.js +169 -0
  122. package/dist/demo/runner.js.map +1 -0
  123. package/dist/demo/scope.d.ts +44 -0
  124. package/dist/demo/scope.d.ts.map +1 -0
  125. package/dist/demo/scope.js +44 -0
  126. package/dist/demo/scope.js.map +1 -0
  127. package/dist/env/index.d.ts +68 -0
  128. package/dist/env/index.d.ts.map +1 -0
  129. package/dist/env/index.js +427 -0
  130. package/dist/env/index.js.map +1 -0
  131. package/dist/events/bus.d.ts +29 -0
  132. package/dist/events/bus.d.ts.map +1 -0
  133. package/dist/events/bus.js +67 -0
  134. package/dist/events/bus.js.map +1 -0
  135. package/dist/events/index.d.ts +19 -0
  136. package/dist/events/index.d.ts.map +1 -0
  137. package/dist/events/index.js +19 -0
  138. package/dist/events/index.js.map +1 -0
  139. package/dist/http/cursor.d.ts +10 -0
  140. package/dist/http/cursor.d.ts.map +1 -0
  141. package/dist/http/cursor.js +20 -0
  142. package/dist/http/cursor.js.map +1 -0
  143. package/dist/http/error-envelope.d.ts +127 -0
  144. package/dist/http/error-envelope.d.ts.map +1 -0
  145. package/dist/http/error-envelope.js +402 -0
  146. package/dist/http/error-envelope.js.map +1 -0
  147. package/dist/http/health.d.ts +88 -0
  148. package/dist/http/health.d.ts.map +1 -0
  149. package/dist/http/health.js +77 -0
  150. package/dist/http/health.js.map +1 -0
  151. package/dist/http/index.d.ts +50 -0
  152. package/dist/http/index.d.ts.map +1 -0
  153. package/dist/http/index.js +50 -0
  154. package/dist/http/index.js.map +1 -0
  155. package/dist/http/interceptors/dispatch.d.ts +14 -0
  156. package/dist/http/interceptors/dispatch.d.ts.map +1 -0
  157. package/dist/http/interceptors/dispatch.js +113 -0
  158. package/dist/http/interceptors/dispatch.js.map +1 -0
  159. package/dist/http/interceptors/index.d.ts +6 -0
  160. package/dist/http/interceptors/index.d.ts.map +1 -0
  161. package/dist/http/interceptors/index.js +5 -0
  162. package/dist/http/interceptors/index.js.map +1 -0
  163. package/dist/http/interceptors/registry.d.ts +44 -0
  164. package/dist/http/interceptors/registry.d.ts.map +1 -0
  165. package/dist/http/interceptors/registry.js +123 -0
  166. package/dist/http/interceptors/registry.js.map +1 -0
  167. package/dist/http/interceptors/route-table.d.ts +33 -0
  168. package/dist/http/interceptors/route-table.d.ts.map +1 -0
  169. package/dist/http/interceptors/route-table.js +39 -0
  170. package/dist/http/interceptors/route-table.js.map +1 -0
  171. package/dist/http/interceptors/types.d.ts +101 -0
  172. package/dist/http/interceptors/types.d.ts.map +1 -0
  173. package/dist/http/interceptors/types.js +2 -0
  174. package/dist/http/interceptors/types.js.map +1 -0
  175. package/dist/http/interceptors/validation.d.ts +22 -0
  176. package/dist/http/interceptors/validation.d.ts.map +1 -0
  177. package/dist/http/interceptors/validation.js +39 -0
  178. package/dist/http/interceptors/validation.js.map +1 -0
  179. package/dist/http/logger.d.ts +9 -0
  180. package/dist/http/logger.d.ts.map +1 -0
  181. package/dist/http/logger.js +25 -0
  182. package/dist/http/logger.js.map +1 -0
  183. package/dist/http/openapi.d.ts +21 -0
  184. package/dist/http/openapi.d.ts.map +1 -0
  185. package/dist/http/openapi.js +114 -0
  186. package/dist/http/openapi.js.map +1 -0
  187. package/dist/http/product-audience.d.ts +78 -0
  188. package/dist/http/product-audience.d.ts.map +1 -0
  189. package/dist/http/product-audience.js +92 -0
  190. package/dist/http/product-audience.js.map +1 -0
  191. package/dist/http/request-actor.d.ts +82 -0
  192. package/dist/http/request-actor.d.ts.map +1 -0
  193. package/dist/http/request-actor.js +2 -0
  194. package/dist/http/request-actor.js.map +1 -0
  195. package/dist/http/server.d.ts +60 -0
  196. package/dist/http/server.d.ts.map +1 -0
  197. package/dist/http/server.js +117 -0
  198. package/dist/http/server.js.map +1 -0
  199. package/dist/http/storefront-revalidator.d.ts +29 -0
  200. package/dist/http/storefront-revalidator.d.ts.map +1 -0
  201. package/dist/http/storefront-revalidator.js +34 -0
  202. package/dist/http/storefront-revalidator.js.map +1 -0
  203. package/dist/http/test-actor-carrier.d.ts +28 -0
  204. package/dist/http/test-actor-carrier.d.ts.map +1 -0
  205. package/dist/http/test-actor-carrier.js +10 -0
  206. package/dist/http/test-actor-carrier.js.map +1 -0
  207. package/dist/http/trusted-proxy.d.ts +48 -0
  208. package/dist/http/trusted-proxy.d.ts.map +1 -0
  209. package/dist/http/trusted-proxy.js +136 -0
  210. package/dist/http/trusted-proxy.js.map +1 -0
  211. package/dist/kernel/audit/audit-log-entry.entity.d.ts +33 -0
  212. package/dist/kernel/audit/audit-log-entry.entity.d.ts.map +1 -0
  213. package/dist/kernel/audit/audit-log-entry.entity.js +102 -0
  214. package/dist/kernel/audit/audit-log-entry.entity.js.map +1 -0
  215. package/dist/kernel/audit/audit-log-service.d.ts +63 -0
  216. package/dist/kernel/audit/audit-log-service.d.ts.map +1 -0
  217. package/dist/kernel/audit/audit-log-service.js +107 -0
  218. package/dist/kernel/audit/audit-log-service.js.map +1 -0
  219. package/dist/kernel/cache/in-process-cache-registry.d.ts +93 -0
  220. package/dist/kernel/cache/in-process-cache-registry.d.ts.map +1 -0
  221. package/dist/kernel/cache/in-process-cache-registry.js +78 -0
  222. package/dist/kernel/cache/in-process-cache-registry.js.map +1 -0
  223. package/dist/kernel/cache/shared-drop-marks.d.ts +39 -0
  224. package/dist/kernel/cache/shared-drop-marks.d.ts.map +1 -0
  225. package/dist/kernel/cache/shared-drop-marks.js +68 -0
  226. package/dist/kernel/cache/shared-drop-marks.js.map +1 -0
  227. package/dist/kernel/compose.d.ts +234 -0
  228. package/dist/kernel/compose.d.ts.map +1 -0
  229. package/dist/kernel/compose.js +279 -0
  230. package/dist/kernel/compose.js.map +1 -0
  231. package/dist/kernel/container.d.ts +95 -0
  232. package/dist/kernel/container.d.ts.map +1 -0
  233. package/dist/kernel/container.js +90 -0
  234. package/dist/kernel/container.js.map +1 -0
  235. package/dist/kernel/contribution-sinks.d.ts +106 -0
  236. package/dist/kernel/contribution-sinks.d.ts.map +1 -0
  237. package/dist/kernel/contribution-sinks.js +153 -0
  238. package/dist/kernel/contribution-sinks.js.map +1 -0
  239. package/dist/kernel/crypto/password-hasher.d.ts +3 -0
  240. package/dist/kernel/crypto/password-hasher.d.ts.map +1 -0
  241. package/dist/kernel/crypto/password-hasher.js +44 -0
  242. package/dist/kernel/crypto/password-hasher.js.map +1 -0
  243. package/dist/kernel/i18n/error-envelope-options.d.ts +56 -0
  244. package/dist/kernel/i18n/error-envelope-options.d.ts.map +1 -0
  245. package/dist/kernel/i18n/error-envelope-options.js +46 -0
  246. package/dist/kernel/i18n/error-envelope-options.js.map +1 -0
  247. package/dist/kernel/i18n/error-translation.d.ts +144 -0
  248. package/dist/kernel/i18n/error-translation.d.ts.map +1 -0
  249. package/dist/kernel/i18n/error-translation.js +84 -0
  250. package/dist/kernel/i18n/error-translation.js.map +1 -0
  251. package/dist/kernel/i18n/request-language.d.ts +80 -0
  252. package/dist/kernel/i18n/request-language.d.ts.map +1 -0
  253. package/dist/kernel/i18n/request-language.js +168 -0
  254. package/dist/kernel/i18n/request-language.js.map +1 -0
  255. package/dist/kernel/index.d.ts +142 -0
  256. package/dist/kernel/index.d.ts.map +1 -0
  257. package/dist/kernel/index.js +160 -0
  258. package/dist/kernel/index.js.map +1 -0
  259. package/dist/kernel/lazy-port.d.ts +59 -0
  260. package/dist/kernel/lazy-port.d.ts.map +1 -0
  261. package/dist/kernel/lazy-port.js +78 -0
  262. package/dist/kernel/lazy-port.js.map +1 -0
  263. package/dist/kernel/lifecycle/activation-resolver.d.ts +63 -0
  264. package/dist/kernel/lifecycle/activation-resolver.d.ts.map +1 -0
  265. package/dist/kernel/lifecycle/activation-resolver.js +70 -0
  266. package/dist/kernel/lifecycle/activation-resolver.js.map +1 -0
  267. package/dist/kernel/lifecycle/capability-registry.d.ts +145 -0
  268. package/dist/kernel/lifecycle/capability-registry.d.ts.map +1 -0
  269. package/dist/kernel/lifecycle/capability-registry.js +170 -0
  270. package/dist/kernel/lifecycle/capability-registry.js.map +1 -0
  271. package/dist/kernel/lifecycle/effective-state.d.ts +126 -0
  272. package/dist/kernel/lifecycle/effective-state.d.ts.map +1 -0
  273. package/dist/kernel/lifecycle/effective-state.js +111 -0
  274. package/dist/kernel/lifecycle/effective-state.js.map +1 -0
  275. package/dist/kernel/lifecycle/module-registration.entity.d.ts +57 -0
  276. package/dist/kernel/lifecycle/module-registration.entity.d.ts.map +1 -0
  277. package/dist/kernel/lifecycle/module-registration.entity.js +111 -0
  278. package/dist/kernel/lifecycle/module-registration.entity.js.map +1 -0
  279. package/dist/kernel/lifecycle/plugin-helpers.d.ts +165 -0
  280. package/dist/kernel/lifecycle/plugin-helpers.d.ts.map +1 -0
  281. package/dist/kernel/lifecycle/plugin-helpers.js +395 -0
  282. package/dist/kernel/lifecycle/plugin-helpers.js.map +1 -0
  283. package/dist/kernel/lifecycle/registry-cache.d.ts +318 -0
  284. package/dist/kernel/lifecycle/registry-cache.d.ts.map +1 -0
  285. package/dist/kernel/lifecycle/registry-cache.js +509 -0
  286. package/dist/kernel/lifecycle/registry-cache.js.map +1 -0
  287. package/dist/kernel/lifecycle/required-modules.d.ts +137 -0
  288. package/dist/kernel/lifecycle/required-modules.d.ts.map +1 -0
  289. package/dist/kernel/lifecycle/required-modules.js +80 -0
  290. package/dist/kernel/lifecycle/required-modules.js.map +1 -0
  291. package/dist/kernel/lifecycle/unique-module-ids.d.ts +58 -0
  292. package/dist/kernel/lifecycle/unique-module-ids.d.ts.map +1 -0
  293. package/dist/kernel/lifecycle/unique-module-ids.js +82 -0
  294. package/dist/kernel/lifecycle/unique-module-ids.js.map +1 -0
  295. package/dist/kernel/logging.d.ts +116 -0
  296. package/dist/kernel/logging.d.ts.map +1 -0
  297. package/dist/kernel/logging.js +71 -0
  298. package/dist/kernel/logging.js.map +1 -0
  299. package/dist/kernel/module-context.d.ts +563 -0
  300. package/dist/kernel/module-context.d.ts.map +1 -0
  301. package/dist/kernel/module-context.js +670 -0
  302. package/dist/kernel/module-context.js.map +1 -0
  303. package/dist/kernel/ports/audit.d.ts +115 -0
  304. package/dist/kernel/ports/audit.d.ts.map +1 -0
  305. package/dist/kernel/ports/audit.js +2 -0
  306. package/dist/kernel/ports/audit.js.map +1 -0
  307. package/dist/kernel/ports/organizations.d.ts +56 -0
  308. package/dist/kernel/ports/organizations.d.ts.map +1 -0
  309. package/dist/kernel/ports/organizations.js +2 -0
  310. package/dist/kernel/ports/organizations.js.map +1 -0
  311. package/dist/kernel/ports/provide.d.ts +14 -0
  312. package/dist/kernel/ports/provide.d.ts.map +1 -0
  313. package/dist/kernel/ports/provide.js +50 -0
  314. package/dist/kernel/ports/provide.js.map +1 -0
  315. package/dist/kernel/ports/require-admin.d.ts +61 -0
  316. package/dist/kernel/ports/require-admin.d.ts.map +1 -0
  317. package/dist/kernel/ports/require-admin.js +2 -0
  318. package/dist/kernel/ports/require-admin.js.map +1 -0
  319. package/dist/kernel/ports/require-customer.d.ts +17 -0
  320. package/dist/kernel/ports/require-customer.d.ts.map +1 -0
  321. package/dist/kernel/ports/require-customer.js +2 -0
  322. package/dist/kernel/ports/require-customer.js.map +1 -0
  323. package/dist/kernel/ports/sales-channel.d.ts +84 -0
  324. package/dist/kernel/ports/sales-channel.d.ts.map +1 -0
  325. package/dist/kernel/ports/sales-channel.js +2 -0
  326. package/dist/kernel/ports/sales-channel.js.map +1 -0
  327. package/dist/kernel/ports/settings.d.ts +59 -0
  328. package/dist/kernel/ports/settings.d.ts.map +1 -0
  329. package/dist/kernel/ports/settings.js +2 -0
  330. package/dist/kernel/ports/settings.js.map +1 -0
  331. package/dist/kernel/public-api-base-url.d.ts +98 -0
  332. package/dist/kernel/public-api-base-url.d.ts.map +1 -0
  333. package/dist/kernel/public-api-base-url.js +144 -0
  334. package/dist/kernel/public-api-base-url.js.map +1 -0
  335. package/dist/kernel/request-scope-hook.d.ts +63 -0
  336. package/dist/kernel/request-scope-hook.d.ts.map +1 -0
  337. package/dist/kernel/request-scope-hook.js +67 -0
  338. package/dist/kernel/request-scope-hook.js.map +1 -0
  339. package/dist/kernel/sales-channels/channel-bridge-registry.d.ts +109 -0
  340. package/dist/kernel/sales-channels/channel-bridge-registry.d.ts.map +1 -0
  341. package/dist/kernel/sales-channels/channel-bridge-registry.js +75 -0
  342. package/dist/kernel/sales-channels/channel-bridge-registry.js.map +1 -0
  343. package/dist/kernel/sales-channels/compose.d.ts +69 -0
  344. package/dist/kernel/sales-channels/compose.d.ts.map +1 -0
  345. package/dist/kernel/sales-channels/compose.js +43 -0
  346. package/dist/kernel/sales-channels/compose.js.map +1 -0
  347. package/dist/kernel/sales-channels/default-channel-reconciler.d.ts +66 -0
  348. package/dist/kernel/sales-channels/default-channel-reconciler.d.ts.map +1 -0
  349. package/dist/kernel/sales-channels/default-channel-reconciler.js +91 -0
  350. package/dist/kernel/sales-channels/default-channel-reconciler.js.map +1 -0
  351. package/dist/kernel/sales-channels/no-system-default-channel.error.d.ts +28 -0
  352. package/dist/kernel/sales-channels/no-system-default-channel.error.d.ts.map +1 -0
  353. package/dist/kernel/sales-channels/no-system-default-channel.error.js +33 -0
  354. package/dist/kernel/sales-channels/no-system-default-channel.error.js.map +1 -0
  355. package/dist/kernel/sales-channels/request-channel-assortment.d.ts +72 -0
  356. package/dist/kernel/sales-channels/request-channel-assortment.d.ts.map +1 -0
  357. package/dist/kernel/sales-channels/request-channel-assortment.js +83 -0
  358. package/dist/kernel/sales-channels/request-channel-assortment.js.map +1 -0
  359. package/dist/kernel/sales-channels/sales-channel-membership.service.d.ts +157 -0
  360. package/dist/kernel/sales-channels/sales-channel-membership.service.d.ts.map +1 -0
  361. package/dist/kernel/sales-channels/sales-channel-membership.service.js +302 -0
  362. package/dist/kernel/sales-channels/sales-channel-membership.service.js.map +1 -0
  363. package/dist/kernel/sales-channels/sales-channel-resolver.middleware.d.ts +76 -0
  364. package/dist/kernel/sales-channels/sales-channel-resolver.middleware.d.ts.map +1 -0
  365. package/dist/kernel/sales-channels/sales-channel-resolver.middleware.js +184 -0
  366. package/dist/kernel/sales-channels/sales-channel-resolver.middleware.js.map +1 -0
  367. package/dist/kernel/sales-channels/sales-channel-resolver.service.d.ts +82 -0
  368. package/dist/kernel/sales-channels/sales-channel-resolver.service.d.ts.map +1 -0
  369. package/dist/kernel/sales-channels/sales-channel-resolver.service.js +126 -0
  370. package/dist/kernel/sales-channels/sales-channel-resolver.service.js.map +1 -0
  371. package/dist/kernel/sales-channels/sales-channel.entity.d.ts +50 -0
  372. package/dist/kernel/sales-channels/sales-channel.entity.d.ts.map +1 -0
  373. package/dist/kernel/sales-channels/sales-channel.entity.js +132 -0
  374. package/dist/kernel/sales-channels/sales-channel.entity.js.map +1 -0
  375. package/dist/kernel/sales-channels/sales-channels-cache.d.ts +170 -0
  376. package/dist/kernel/sales-channels/sales-channels-cache.d.ts.map +1 -0
  377. package/dist/kernel/sales-channels/sales-channels-cache.js +243 -0
  378. package/dist/kernel/sales-channels/sales-channels-cache.js.map +1 -0
  379. package/dist/kernel/scope.d.ts +153 -0
  380. package/dist/kernel/scope.d.ts.map +1 -0
  381. package/dist/kernel/scope.js +172 -0
  382. package/dist/kernel/scope.js.map +1 -0
  383. package/dist/kernel/settings/compose.d.ts +49 -0
  384. package/dist/kernel/settings/compose.d.ts.map +1 -0
  385. package/dist/kernel/settings/compose.js +21 -0
  386. package/dist/kernel/settings/compose.js.map +1 -0
  387. package/dist/kernel/settings/manifest-reconciler.d.ts +78 -0
  388. package/dist/kernel/settings/manifest-reconciler.d.ts.map +1 -0
  389. package/dist/kernel/settings/manifest-reconciler.js +343 -0
  390. package/dist/kernel/settings/manifest-reconciler.js.map +1 -0
  391. package/dist/kernel/settings/secret-value-codec.d.ts +52 -0
  392. package/dist/kernel/settings/secret-value-codec.d.ts.map +1 -0
  393. package/dist/kernel/settings/secret-value-codec.js +102 -0
  394. package/dist/kernel/settings/secret-value-codec.js.map +1 -0
  395. package/dist/kernel/settings/setting-group.entity.d.ts +25 -0
  396. package/dist/kernel/settings/setting-group.entity.d.ts.map +1 -0
  397. package/dist/kernel/settings/setting-group.entity.js +79 -0
  398. package/dist/kernel/settings/setting-group.entity.js.map +1 -0
  399. package/dist/kernel/settings/setting-value.entity.d.ts +23 -0
  400. package/dist/kernel/settings/setting-value.entity.d.ts.map +1 -0
  401. package/dist/kernel/settings/setting-value.entity.js +66 -0
  402. package/dist/kernel/settings/setting-value.entity.js.map +1 -0
  403. package/dist/kernel/settings/setting.entity.d.ts +56 -0
  404. package/dist/kernel/settings/setting.entity.d.ts.map +1 -0
  405. package/dist/kernel/settings/setting.entity.js +147 -0
  406. package/dist/kernel/settings/setting.entity.js.map +1 -0
  407. package/dist/kernel/settings/settings-cache.d.ts +158 -0
  408. package/dist/kernel/settings/settings-cache.d.ts.map +1 -0
  409. package/dist/kernel/settings/settings-cache.js +253 -0
  410. package/dist/kernel/settings/settings-cache.js.map +1 -0
  411. package/dist/kernel/settings/settings.service.d.ts +142 -0
  412. package/dist/kernel/settings/settings.service.d.ts.map +1 -0
  413. package/dist/kernel/settings/settings.service.js +294 -0
  414. package/dist/kernel/settings/settings.service.js.map +1 -0
  415. package/dist/lifecycle/backend.d.ts +51 -0
  416. package/dist/lifecycle/backend.d.ts.map +1 -0
  417. package/dist/lifecycle/backend.js +40 -0
  418. package/dist/lifecycle/backend.js.map +1 -0
  419. package/dist/lifecycle/commands/activation.commands.d.ts +97 -0
  420. package/dist/lifecycle/commands/activation.commands.d.ts.map +1 -0
  421. package/dist/lifecycle/commands/activation.commands.js +142 -0
  422. package/dist/lifecycle/commands/activation.commands.js.map +1 -0
  423. package/dist/lifecycle/commands/disable.d.ts +3 -0
  424. package/dist/lifecycle/commands/disable.d.ts.map +1 -0
  425. package/dist/lifecycle/commands/disable.js +126 -0
  426. package/dist/lifecycle/commands/disable.js.map +1 -0
  427. package/dist/lifecycle/commands/enable.d.ts +3 -0
  428. package/dist/lifecycle/commands/enable.d.ts.map +1 -0
  429. package/dist/lifecycle/commands/enable.js +102 -0
  430. package/dist/lifecycle/commands/enable.js.map +1 -0
  431. package/dist/lifecycle/commands/install.d.ts +3 -0
  432. package/dist/lifecycle/commands/install.d.ts.map +1 -0
  433. package/dist/lifecycle/commands/install.js +263 -0
  434. package/dist/lifecycle/commands/install.js.map +1 -0
  435. package/dist/lifecycle/commands/operator-entry.d.ts +104 -0
  436. package/dist/lifecycle/commands/operator-entry.d.ts.map +1 -0
  437. package/dist/lifecycle/commands/operator-entry.js +127 -0
  438. package/dist/lifecycle/commands/operator-entry.js.map +1 -0
  439. package/dist/lifecycle/commands/operator-runtime.d.ts +147 -0
  440. package/dist/lifecycle/commands/operator-runtime.d.ts.map +1 -0
  441. package/dist/lifecycle/commands/operator-runtime.js +40 -0
  442. package/dist/lifecycle/commands/operator-runtime.js.map +1 -0
  443. package/dist/lifecycle/commands/status.d.ts +3 -0
  444. package/dist/lifecycle/commands/status.d.ts.map +1 -0
  445. package/dist/lifecycle/commands/status.js +108 -0
  446. package/dist/lifecycle/commands/status.js.map +1 -0
  447. package/dist/lifecycle/commands/uninstall.d.ts +3 -0
  448. package/dist/lifecycle/commands/uninstall.d.ts.map +1 -0
  449. package/dist/lifecycle/commands/uninstall.js +223 -0
  450. package/dist/lifecycle/commands/uninstall.js.map +1 -0
  451. package/dist/lifecycle/divergence-declaration.d.ts +74 -0
  452. package/dist/lifecycle/divergence-declaration.d.ts.map +1 -0
  453. package/dist/lifecycle/divergence-declaration.js +92 -0
  454. package/dist/lifecycle/divergence-declaration.js.map +1 -0
  455. package/dist/lifecycle/i18n/en.json +4 -0
  456. package/dist/lifecycle/i18n/pl.json +4 -0
  457. package/dist/lifecycle/index.d.ts +110 -0
  458. package/dist/lifecycle/index.d.ts.map +1 -0
  459. package/dist/lifecycle/index.js +189 -0
  460. package/dist/lifecycle/index.js.map +1 -0
  461. package/dist/lifecycle/manifest-registry.d.ts +244 -0
  462. package/dist/lifecycle/manifest-registry.d.ts.map +1 -0
  463. package/dist/lifecycle/manifest-registry.js +223 -0
  464. package/dist/lifecycle/manifest-registry.js.map +1 -0
  465. package/dist/lifecycle/manifest.d.ts +166 -0
  466. package/dist/lifecycle/manifest.d.ts.map +1 -0
  467. package/dist/lifecycle/manifest.js +121 -0
  468. package/dist/lifecycle/manifest.js.map +1 -0
  469. package/dist/lifecycle/plugin.d.ts +56 -0
  470. package/dist/lifecycle/plugin.d.ts.map +1 -0
  471. package/dist/lifecycle/plugin.js +59 -0
  472. package/dist/lifecycle/plugin.js.map +1 -0
  473. package/dist/lifecycle/resident.d.ts +16 -0
  474. package/dist/lifecycle/resident.d.ts.map +1 -0
  475. package/dist/lifecycle/resident.js +59 -0
  476. package/dist/lifecycle/resident.js.map +1 -0
  477. package/dist/lifecycle/routes.admin.d.ts +57 -0
  478. package/dist/lifecycle/routes.admin.d.ts.map +1 -0
  479. package/dist/lifecycle/routes.admin.js +162 -0
  480. package/dist/lifecycle/routes.admin.js.map +1 -0
  481. package/dist/lifecycle/routes.storefront.d.ts +26 -0
  482. package/dist/lifecycle/routes.storefront.d.ts.map +1 -0
  483. package/dist/lifecycle/routes.storefront.js +36 -0
  484. package/dist/lifecycle/routes.storefront.js.map +1 -0
  485. package/dist/lifecycle/services/deactivation-ledger.d.ts +216 -0
  486. package/dist/lifecycle/services/deactivation-ledger.d.ts.map +1 -0
  487. package/dist/lifecycle/services/deactivation-ledger.js +171 -0
  488. package/dist/lifecycle/services/deactivation-ledger.js.map +1 -0
  489. package/dist/lifecycle/services/dep-graph.d.ts +119 -0
  490. package/dist/lifecycle/services/dep-graph.d.ts.map +1 -0
  491. package/dist/lifecycle/services/dep-graph.js +334 -0
  492. package/dist/lifecycle/services/dep-graph.js.map +1 -0
  493. package/dist/lifecycle/services/gating-graph.d.ts +164 -0
  494. package/dist/lifecycle/services/gating-graph.d.ts.map +1 -0
  495. package/dist/lifecycle/services/gating-graph.js +203 -0
  496. package/dist/lifecycle/services/gating-graph.js.map +1 -0
  497. package/dist/lifecycle/services/lock.d.ts +27 -0
  498. package/dist/lifecycle/services/lock.d.ts.map +1 -0
  499. package/dist/lifecycle/services/lock.js +82 -0
  500. package/dist/lifecycle/services/lock.js.map +1 -0
  501. package/dist/lifecycle/services/manifest-loader.d.ts +125 -0
  502. package/dist/lifecycle/services/manifest-loader.d.ts.map +1 -0
  503. package/dist/lifecycle/services/manifest-loader.js +210 -0
  504. package/dist/lifecycle/services/manifest-loader.js.map +1 -0
  505. package/dist/lifecycle/services/migration-ownership.d.ts +36 -0
  506. package/dist/lifecycle/services/migration-ownership.d.ts.map +1 -0
  507. package/dist/lifecycle/services/migration-ownership.js +15 -0
  508. package/dist/lifecycle/services/migration-ownership.js.map +1 -0
  509. package/dist/lifecycle/services/module-id-claims.d.ts +38 -0
  510. package/dist/lifecycle/services/module-id-claims.d.ts.map +1 -0
  511. package/dist/lifecycle/services/module-id-claims.js +123 -0
  512. package/dist/lifecycle/services/module-id-claims.js.map +1 -0
  513. package/dist/lifecycle/services/module-origin.d.ts +55 -0
  514. package/dist/lifecycle/services/module-origin.d.ts.map +1 -0
  515. package/dist/lifecycle/services/module-origin.js +47 -0
  516. package/dist/lifecycle/services/module-origin.js.map +1 -0
  517. package/dist/lifecycle/services/orchestrator.d.ts +235 -0
  518. package/dist/lifecycle/services/orchestrator.d.ts.map +1 -0
  519. package/dist/lifecycle/services/orchestrator.js +954 -0
  520. package/dist/lifecycle/services/orchestrator.js.map +1 -0
  521. package/dist/lifecycle/services/presence-load.d.ts +281 -0
  522. package/dist/lifecycle/services/presence-load.d.ts.map +1 -0
  523. package/dist/lifecycle/services/presence-load.js +437 -0
  524. package/dist/lifecycle/services/presence-load.js.map +1 -0
  525. package/dist/lifecycle/services/static-registry.d.ts +47 -0
  526. package/dist/lifecycle/services/static-registry.d.ts.map +1 -0
  527. package/dist/lifecycle/services/static-registry.js +41 -0
  528. package/dist/lifecycle/services/static-registry.js.map +1 -0
  529. package/dist/migrations/20260424T165847_core_foundation_init.d.ts +25 -0
  530. package/dist/migrations/20260424T165847_core_foundation_init.d.ts.map +1 -0
  531. package/dist/migrations/20260424T165847_core_foundation_init.js +238 -0
  532. package/dist/migrations/20260424T165847_core_foundation_init.js.map +1 -0
  533. package/dist/migrations/20260425T050720_core_commerce_init.d.ts +19 -0
  534. package/dist/migrations/20260425T050720_core_commerce_init.d.ts.map +1 -0
  535. package/dist/migrations/20260425T050720_core_commerce_init.js +200 -0
  536. package/dist/migrations/20260425T050720_core_commerce_init.js.map +1 -0
  537. package/dist/migrations/20260430T101450_core_settings_init.d.ts +25 -0
  538. package/dist/migrations/20260430T101450_core_settings_init.d.ts.map +1 -0
  539. package/dist/migrations/20260430T101450_core_settings_init.js +113 -0
  540. package/dist/migrations/20260430T101450_core_settings_init.js.map +1 -0
  541. package/dist/migrations/20260430T170044_core_sales_channels_promote.d.ts +67 -0
  542. package/dist/migrations/20260430T170044_core_sales_channels_promote.d.ts.map +1 -0
  543. package/dist/migrations/20260430T170044_core_sales_channels_promote.js +101 -0
  544. package/dist/migrations/20260430T170044_core_sales_channels_promote.js.map +1 -0
  545. package/dist/migrations/20260506T200657_core_module_lifecycle_init.d.ts +21 -0
  546. package/dist/migrations/20260506T200657_core_module_lifecycle_init.d.ts.map +1 -0
  547. package/dist/migrations/20260506T200657_core_module_lifecycle_init.js +41 -0
  548. package/dist/migrations/20260506T200657_core_module_lifecycle_init.js.map +1 -0
  549. package/dist/migrations/20260514T111329_core_settings_global_value.d.ts +30 -0
  550. package/dist/migrations/20260514T111329_core_settings_global_value.d.ts.map +1 -0
  551. package/dist/migrations/20260514T111329_core_settings_global_value.js +34 -0
  552. package/dist/migrations/20260514T111329_core_settings_global_value.js.map +1 -0
  553. package/dist/migrations/20260611T140411_core_settings_secret_value_type.d.ts +26 -0
  554. package/dist/migrations/20260611T140411_core_settings_secret_value_type.d.ts.map +1 -0
  555. package/dist/migrations/20260611T140411_core_settings_secret_value_type.js +63 -0
  556. package/dist/migrations/20260611T140411_core_settings_secret_value_type.js.map +1 -0
  557. package/dist/migrations/20260611T140419_core_settings_enum_options.d.ts +19 -0
  558. package/dist/migrations/20260611T140419_core_settings_enum_options.d.ts.map +1 -0
  559. package/dist/migrations/20260611T140419_core_settings_enum_options.js +23 -0
  560. package/dist/migrations/20260611T140419_core_settings_enum_options.js.map +1 -0
  561. package/dist/migrations/20260629T090100_core_settings_hidden_flag.d.ts +20 -0
  562. package/dist/migrations/20260629T090100_core_settings_hidden_flag.d.ts.map +1 -0
  563. package/dist/migrations/20260629T090100_core_settings_hidden_flag.js +24 -0
  564. package/dist/migrations/20260629T090100_core_settings_hidden_flag.js.map +1 -0
  565. package/dist/migrations/20260717T134752_core_tenant_scope_indexes.d.ts +27 -0
  566. package/dist/migrations/20260717T134752_core_tenant_scope_indexes.d.ts.map +1 -0
  567. package/dist/migrations/20260717T134752_core_tenant_scope_indexes.js +32 -0
  568. package/dist/migrations/20260717T134752_core_tenant_scope_indexes.js.map +1 -0
  569. package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.d.ts +24 -0
  570. package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.d.ts.map +1 -0
  571. package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.js +57 -0
  572. package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.js.map +1 -0
  573. package/dist/migrations/20260816T203339_core_retire_core_activation_settings.d.ts +39 -0
  574. package/dist/migrations/20260816T203339_core_retire_core_activation_settings.d.ts.map +1 -0
  575. package/dist/migrations/20260816T203339_core_retire_core_activation_settings.js +59 -0
  576. package/dist/migrations/20260816T203339_core_retire_core_activation_settings.js.map +1 -0
  577. package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.d.ts +34 -0
  578. package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.d.ts.map +1 -0
  579. package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.js +38 -0
  580. package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.js.map +1 -0
  581. package/dist/migrations/baseline-migrations.generated.d.ts +2 -0
  582. package/dist/migrations/baseline-migrations.generated.d.ts.map +1 -0
  583. package/dist/migrations/baseline-migrations.generated.js +136 -0
  584. package/dist/migrations/baseline-migrations.generated.js.map +1 -0
  585. package/dist/migrations/index.d.ts +62 -0
  586. package/dist/migrations/index.d.ts.map +1 -0
  587. package/dist/migrations/index.js +75 -0
  588. package/dist/migrations/index.js.map +1 -0
  589. package/dist/overlay/deployment-roots.d.ts +37 -0
  590. package/dist/overlay/deployment-roots.d.ts.map +1 -0
  591. package/dist/overlay/deployment-roots.js +90 -0
  592. package/dist/overlay/deployment-roots.js.map +1 -0
  593. package/dist/overlay/index.d.ts +62 -0
  594. package/dist/overlay/index.d.ts.map +1 -0
  595. package/dist/overlay/index.js +62 -0
  596. package/dist/overlay/index.js.map +1 -0
  597. package/dist/overlay/overlay-runtime.d.ts +173 -0
  598. package/dist/overlay/overlay-runtime.d.ts.map +1 -0
  599. package/dist/overlay/overlay-runtime.js +281 -0
  600. package/dist/overlay/overlay-runtime.js.map +1 -0
  601. package/dist/overlay/resolve-overlay.d.ts +41 -0
  602. package/dist/overlay/resolve-overlay.d.ts.map +1 -0
  603. package/dist/overlay/resolve-overlay.js +72 -0
  604. package/dist/overlay/resolve-overlay.js.map +1 -0
  605. package/dist/packages/index.d.ts +57 -0
  606. package/dist/packages/index.d.ts.map +1 -0
  607. package/dist/packages/index.js +57 -0
  608. package/dist/packages/index.js.map +1 -0
  609. package/dist/packages/installed-packages.d.ts +79 -0
  610. package/dist/packages/installed-packages.d.ts.map +1 -0
  611. package/dist/packages/installed-packages.js +312 -0
  612. package/dist/packages/installed-packages.js.map +1 -0
  613. package/dist/packages/package-entity-lookup.d.ts +120 -0
  614. package/dist/packages/package-entity-lookup.d.ts.map +1 -0
  615. package/dist/packages/package-entity-lookup.js +17 -0
  616. package/dist/packages/package-entity-lookup.js.map +1 -0
  617. package/dist/packages/package-runtime.d.ts +177 -0
  618. package/dist/packages/package-runtime.d.ts.map +1 -0
  619. package/dist/packages/package-runtime.js +386 -0
  620. package/dist/packages/package-runtime.js.map +1 -0
  621. package/dist/tenancy/derived-scope.d.ts +43 -0
  622. package/dist/tenancy/derived-scope.d.ts.map +1 -0
  623. package/dist/tenancy/derived-scope.js +76 -0
  624. package/dist/tenancy/derived-scope.js.map +1 -0
  625. package/dist/tenancy/escape-hatch.d.ts +30 -0
  626. package/dist/tenancy/escape-hatch.d.ts.map +1 -0
  627. package/dist/tenancy/escape-hatch.js +50 -0
  628. package/dist/tenancy/escape-hatch.js.map +1 -0
  629. package/dist/tenancy/filters.d.ts +87 -0
  630. package/dist/tenancy/filters.d.ts.map +1 -0
  631. package/dist/tenancy/filters.js +126 -0
  632. package/dist/tenancy/filters.js.map +1 -0
  633. package/dist/tenancy/index.d.ts +63 -0
  634. package/dist/tenancy/index.d.ts.map +1 -0
  635. package/dist/tenancy/index.js +61 -0
  636. package/dist/tenancy/index.js.map +1 -0
  637. package/dist/tenancy/org-scoped.decorator.d.ts +150 -0
  638. package/dist/tenancy/org-scoped.decorator.d.ts.map +1 -0
  639. package/dist/tenancy/org-scoped.decorator.js +339 -0
  640. package/dist/tenancy/org-scoped.decorator.js.map +1 -0
  641. package/dist/tenancy/org-write-guard.d.ts +106 -0
  642. package/dist/tenancy/org-write-guard.d.ts.map +1 -0
  643. package/dist/tenancy/org-write-guard.js +141 -0
  644. package/dist/tenancy/org-write-guard.js.map +1 -0
  645. package/dist/tenancy/resolve-tenant-context.d.ts +91 -0
  646. package/dist/tenancy/resolve-tenant-context.d.ts.map +1 -0
  647. package/dist/tenancy/resolve-tenant-context.js +85 -0
  648. package/dist/tenancy/resolve-tenant-context.js.map +1 -0
  649. package/dist/tenancy/scoped-em.d.ts +10 -0
  650. package/dist/tenancy/scoped-em.d.ts.map +1 -0
  651. package/dist/tenancy/scoped-em.js +11 -0
  652. package/dist/tenancy/scoped-em.js.map +1 -0
  653. package/dist/tenancy/tenant-context.d.ts +154 -0
  654. package/dist/tenancy/tenant-context.d.ts.map +1 -0
  655. package/dist/tenancy/tenant-context.js +109 -0
  656. package/dist/tenancy/tenant-context.js.map +1 -0
  657. package/package.json +123 -0
@@ -0,0 +1,48 @@
1
+ export async function runMigrationCommand(orm, command, io) {
2
+ const migrator = orm.getMigrator();
3
+ switch (command) {
4
+ case 'up': {
5
+ const applied = await migrator.up();
6
+ io.out(`applied ${applied.length} migration(s)\n`);
7
+ for (const m of applied)
8
+ io.out(` + ${m.name}\n`);
9
+ return 0;
10
+ }
11
+ case 'down': {
12
+ const reverted = await migrator.down();
13
+ io.out(`reverted ${reverted.length} migration(s)\n`);
14
+ for (const m of reverted)
15
+ io.out(` - ${m.name}\n`);
16
+ return 0;
17
+ }
18
+ case 'pending': {
19
+ const pending = await migrator.getPendingMigrations();
20
+ if (pending.length === 0) {
21
+ io.out('no pending migrations\n');
22
+ }
23
+ else {
24
+ for (const m of pending)
25
+ io.out(` ~ ${m.name}\n`);
26
+ }
27
+ return 0;
28
+ }
29
+ case 'fresh': {
30
+ // Drop the entire schema by name rather than relying on
31
+ // `dropSchema()`, which only removes tables present in the current
32
+ // entity metadata. Tables that exist in the DB but are no longer (or
33
+ // not yet) reflected in metadata — e.g. pivot tables — would survive
34
+ // that path and make Migration001 fail with "relation already exists".
35
+ // A raw `DROP SCHEMA ... CASCADE` guarantees a clean slate.
36
+ const conn = orm.em.getConnection();
37
+ await conn.execute('drop schema public cascade; create schema public;');
38
+ const applied = await migrator.up();
39
+ io.out(`dropped and re-applied ${applied.length} migration(s)\n`);
40
+ return 0;
41
+ }
42
+ default: {
43
+ io.err(`unknown command: ${command}\n`);
44
+ return 1;
45
+ }
46
+ }
47
+ }
48
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAa,EACb,OAAe,EACf,EAAsB;IAEtB,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAEnC,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,CAAC,CAAC;YACV,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,CAAC;YACpC,EAAE,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,MAAM,iBAAiB,CAAC,CAAC;YACnD,KAAK,MAAM,CAAC,IAAI,OAAO;gBAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YACnD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvC,EAAE,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,MAAM,iBAAiB,CAAC,CAAC;YACrD,KAAK,MAAM,CAAC,IAAI,QAAQ;gBAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YACpD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,oBAAoB,EAAE,CAAC;YACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,CAAC,IAAI,OAAO;oBAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,wDAAwD;YACxD,mEAAmE;YACnE,qEAAqE;YACrE,qEAAqE;YACrE,uEAAuE;YACvE,4DAA4D;YAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;YACpC,MAAM,IAAI,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC;YACxE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,CAAC;YACpC,EAAE,CAAC,GAAG,CAAC,0BAA0B,OAAO,CAAC,MAAM,iBAAiB,CAAC,CAAC;YAClE,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,EAAE,CAAC,GAAG,CAAC,oBAAoB,OAAO,IAAI,CAAC,CAAC;YACxC,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,159 @@
1
+ import type { MigrationObject } from '@mikro-orm/core';
2
+ /**
3
+ * Computes the order in which migrations are handed to the migrator.
4
+ *
5
+ * Pure by design: no I/O, no clock read, no environment read, and no import
6
+ * from `src/modules/`. It is importable and testable without booting the ORM.
7
+ *
8
+ * The rule is two blocks. A **baseline block** — the migrations named by the
9
+ * platform's published baseline list — is emitted first, in the order that list
10
+ * holds them, exactly as history applied them. Everything else is the
11
+ * **open block**, emitted module by module in a topological order of the
12
+ * module dependency graph, each module's migrations contiguous and ascending
13
+ * by timestamp. So a timestamp orders migrations only **within** their own
14
+ * module, and a manifest's `dependencies` array is the only thing ordering one
15
+ * module's schema against another's — which is what lets a migration arrive
16
+ * from an installed package whose author knows nothing of the host's history.
17
+ *
18
+ * Specified by specs/081-per-module-migration-order/contracts/ — the ordering
19
+ * in `ordering-algorithm.md` (which supersedes the feature-065 contract in
20
+ * whole), the class-name rule it enforces in `migration-identity.md`. The
21
+ * baseline block's membership rule is amended by
22
+ * `specs/110-instance-repository/contracts/instance-migration-order.md`: it is
23
+ * an **identity**, not a stamp and not an origin, so that the same corpus
24
+ * installed from packages orders identically. That contract's §1 is where every
25
+ * obvious alternative — squash, re-stamp, declare a dependency, drop the
26
+ * boundary — is refused with the reason.
27
+ */
28
+ /** A migration class as MikroORM instantiates it. */
29
+ export type MigrationClass = MigrationObject['class'];
30
+ /** Where a registry entry came from. Absent means `'core'`. */
31
+ export type MigrationOrigin = 'core' | 'external';
32
+ export interface MigrationRegistryEntry {
33
+ /**
34
+ * Owning module id — a `manifest.id` from the resolved manifest index, or
35
+ * the literal 'core' for the cross-cutting migrations in src/db/migrations/.
36
+ */
37
+ moduleId: string;
38
+ /** The migration class. `cls.name` IS the migration name persisted in the DB. */
39
+ cls: MigrationClass;
40
+ /**
41
+ * Absent means `'core'`, so the committed generated registry is untouched. A
42
+ * producer outside it must set `'external'`.
43
+ *
44
+ * **No ordering decision is taken on it** (R1.6). It survives because the
45
+ * acceptance criterion's per-origin template digest reads it and
46
+ * `configured-migrations.ts` reports it — but it once decided membership of
47
+ * the frozen prefix, and that is exactly what made the prefix empty when the
48
+ * modules became packages: `origin` answers *"did this come out of our
49
+ * build"*, which is not the question *"is this one of the migrations whose
50
+ * order is history"*. The second question is answered by
51
+ * {@link OrderMigrationsInput.baseline}, which names them.
52
+ */
53
+ origin?: MigrationOrigin;
54
+ }
55
+ export type MigrationOrderErrorCode = 'unparsable-name' | 'duplicate-name' | 'duplicate-timestamp' | 'unknown-module' | 'unscoped-name';
56
+ export declare class MigrationOrderError extends Error {
57
+ readonly code: MigrationOrderErrorCode;
58
+ constructor(code: MigrationOrderErrorCode, message: string);
59
+ }
60
+ /**
61
+ * The frozen historical prefix boundary. **Closed. Never drained.**
62
+ *
63
+ * Every migration the committed core registry contributed at or before this
64
+ * UTC stamp predates feature 065: it was written, and applied, in the
65
+ * hand-maintained array order of the pre-065 `migrationsList`, and those
66
+ * modules' `dependencies` arrays do not describe the order they actually need
67
+ * — they contradict it in 37 places. Emitting that block in any other order
68
+ * produces one a fresh database cannot apply: measured, not assumed — with the
69
+ * boundary removed, `db:fresh` fails at
70
+ * `Migration20260505T102206AssetsLibraryInit` with `relation "cms_pages" does
71
+ * not exist`, because the graph pulls `assets_library` ahead of `cms`.
72
+ *
73
+ * So it is not "the block we have not corrected yet"; it is "the block whose
74
+ * order is history", and nothing should try to drain it. It cannot grow
75
+ * either: `scripts/new-migration.ts` clamps every scaffolded core stamp past
76
+ * the boundary.
77
+ *
78
+ * **It is a generation-time rule, and no longer a runtime membership test**
79
+ * (`specs/110-instance-repository/contracts/instance-migration-order.md` R1.2).
80
+ * `scripts/new-migration.ts` clamps a scaffolded stamp past it, and
81
+ * `composer:generate` renders the published baseline list out of what the
82
+ * committed core registry contributes at or below it. Nothing asks it at run
83
+ * time, because a stamp is a claim an arriving package can make and a name is
84
+ * not: an entry stamped `20250101T000000` reaches this platform from a registry
85
+ * with the same authority as one of ours, and history is a list of names.
86
+ */
87
+ export declare const BASELINE_THROUGH = "20260801T000000";
88
+ export interface OrderMigrationsInput {
89
+ /** Registry entries. Order is irrelevant. */
90
+ entries: readonly MigrationRegistryEntry[];
91
+ /**
92
+ * moduleId → directly declared `dependencies`. Must contain every entry's
93
+ * moduleId. This is the primary ordering input, and no other manifest array
94
+ * is read: nothing else orders one module's migrations against another's.
95
+ */
96
+ moduleDependencies: ReadonlyMap<string, readonly string[]>;
97
+ /**
98
+ * The frozen historical prefix, **by identity**: the migration class names
99
+ * whose order is history, in the order history applied them.
100
+ *
101
+ * Normally `BASELINE_MIGRATIONS`, the list `@endora-commerce/platform`
102
+ * publishes — data about this platform's history, carried to a client by the
103
+ * package that carries the history (R1.5), and generated rather than
104
+ * hand-written (R1.3). A name here that this composition does not supply is
105
+ * simply not emitted, which is what an instance installing a subset of the
106
+ * modules is; the two-way reconciliation that would catch a *wrong* list is a
107
+ * guard over this repository's committed artefacts
108
+ * (`test/unit/db/instance-migration-order.test.ts`), never a throw here.
109
+ */
110
+ baseline: readonly string[];
111
+ }
112
+ /** What the computation observed and did not refuse. */
113
+ export interface MigrationOrderDiagnostic {
114
+ kind: 'module-cycle';
115
+ /** Every member of the strongly connected component, sorted. At least two. */
116
+ modules: readonly string[];
117
+ /** Operator-readable: names the members and says what the order did instead. */
118
+ message: string;
119
+ }
120
+ export interface MigrationOrderResult {
121
+ /** Assigned verbatim to `migrations.migrationsList`. */
122
+ migrations: MigrationObject[];
123
+ diagnostics: readonly MigrationOrderDiagnostic[];
124
+ }
125
+ /**
126
+ * The frozen prefix as history recorded it, over migration **names**.
127
+ *
128
+ * This is the one derivation of that order in the repository: `composer:generate`
129
+ * renders the published baseline list with it, and the fixtures that drive
130
+ * `orderMigrations` build their own frozen block with it. A second
131
+ * implementation would be free to disagree with the first, and nothing compares
132
+ * two orders that are never computed together.
133
+ *
134
+ * It is a **generation-time** answer and takes the watermark for that reason
135
+ * (R1.2). The result is what {@link orderMigrations} then emits verbatim: the
136
+ * ordering itself asks no question about a stamp.
137
+ */
138
+ export declare function historicalBaselineOrder(names: readonly string[], baselineThrough?: string): string[];
139
+ /**
140
+ * Every dependency cycle in a module graph, in the same shape and wording
141
+ * `orderMigrations` reports — one strongly connected component of more than
142
+ * one module per diagnostic, members sorted.
143
+ *
144
+ * Two of the diagnostic's three readers are here: `test/unit/db/module-graph.test.ts`,
145
+ * which fails the build on a cycle in the committed manifests, and the ORM
146
+ * configuration, which warns at boot and keeps serving. The third is the
147
+ * `_lifecycle` orchestrator, which refuses an install whose arrival closes a
148
+ * cycle — the one moment where refusing costs nothing (081 FR-012).
149
+ *
150
+ * **The walk itself is the platform's** (D-160.11): the orchestrator reads
151
+ * `moduleDependencyCycles` directly rather than this wrapper, because it lives
152
+ * in `@endora-commerce/platform` and this file is the host application's. Three
153
+ * reactions, one graph walk — the split is the point, and what keeps a second
154
+ * walk from being free to disagree with this one is that there is only one.
155
+ * What is added here is the *wording*, which is the migration order's own.
156
+ */
157
+ export declare function findModuleCycles(moduleDependencies: ReadonlyMap<string, readonly string[]>): readonly MigrationOrderDiagnostic[];
158
+ export declare function orderMigrations(input: OrderMigrationsInput): MigrationOrderResult;
159
+ //# sourceMappingURL=migration-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-order.d.ts","sourceRoot":"","sources":["../../src/db/migration-order.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAUvD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,qDAAqD;AACrD,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AAEtD,+DAA+D;AAC/D,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,UAAU,CAAC;AAElD,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,GAAG,EAAE,cAAc,CAAC;IACpB;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,MAAM,uBAAuB,GAC/B,iBAAiB,GACjB,gBAAgB,GAChB,qBAAqB,GACrB,gBAAgB,GAChB,eAAe,CAAC;AAEpB,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC;gBAE3B,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM;CAK3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAElD,MAAM,WAAW,oBAAoB;IACnC,6CAA6C;IAC7C,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC3C;;;;OAIG;IACH,kBAAkB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC3D;;;;;;;;;;;;OAYG;IACH,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED,wDAAwD;AACxD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,cAAc,CAAC;IACrB,8EAA8E;IAC9E,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,WAAW,EAAE,SAAS,wBAAwB,EAAE,CAAC;CAClD;AA4ID;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,eAAe,GAAE,MAAyB,GACzC,MAAM,EAAE,CAkBV;AAmDD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAC9B,kBAAkB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,GACzD,SAAS,wBAAwB,EAAE,CAErC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,oBAAoB,CAmDjF"}
@@ -0,0 +1,273 @@
1
+ // The graph walk is the platform's (D-160.11): the lifecycle orchestrator refuses an
2
+ // install whose arrival closes a cycle, and the member list it names an operator has to
3
+ // be the member list reported here. One implementation is what makes that true.
4
+ import { moduleDependencyCycles, sortComponentsTopologically, stronglyConnectedComponents, } from '../lifecycle/services/dep-graph.js';
5
+ export class MigrationOrderError extends Error {
6
+ code;
7
+ constructor(code, message) {
8
+ super(message);
9
+ this.name = 'MigrationOrderError';
10
+ this.code = code;
11
+ }
12
+ }
13
+ /**
14
+ * The frozen historical prefix boundary. **Closed. Never drained.**
15
+ *
16
+ * Every migration the committed core registry contributed at or before this
17
+ * UTC stamp predates feature 065: it was written, and applied, in the
18
+ * hand-maintained array order of the pre-065 `migrationsList`, and those
19
+ * modules' `dependencies` arrays do not describe the order they actually need
20
+ * — they contradict it in 37 places. Emitting that block in any other order
21
+ * produces one a fresh database cannot apply: measured, not assumed — with the
22
+ * boundary removed, `db:fresh` fails at
23
+ * `Migration20260505T102206AssetsLibraryInit` with `relation "cms_pages" does
24
+ * not exist`, because the graph pulls `assets_library` ahead of `cms`.
25
+ *
26
+ * So it is not "the block we have not corrected yet"; it is "the block whose
27
+ * order is history", and nothing should try to drain it. It cannot grow
28
+ * either: `scripts/new-migration.ts` clamps every scaffolded core stamp past
29
+ * the boundary.
30
+ *
31
+ * **It is a generation-time rule, and no longer a runtime membership test**
32
+ * (`specs/110-instance-repository/contracts/instance-migration-order.md` R1.2).
33
+ * `scripts/new-migration.ts` clamps a scaffolded stamp past it, and
34
+ * `composer:generate` renders the published baseline list out of what the
35
+ * committed core registry contributes at or below it. Nothing asks it at run
36
+ * time, because a stamp is a claim an arriving package can make and a name is
37
+ * not: an entry stamped `20250101T000000` reaches this platform from a registry
38
+ * with the same authority as one of ours, and history is a list of names.
39
+ */
40
+ export const BASELINE_THROUGH = '20260801T000000';
41
+ /** The cross-cutting pseudo-module owning src/db/migrations/. */
42
+ const CORE_MODULE_ID = 'core';
43
+ /** Class-name recognizer — see contracts/migration-identity.md §2. */
44
+ const MIGRATION_CLASS_RE = /^Migration(\d{8}T\d{6})[A-Z0-9]/;
45
+ /** `orders` → `Orders`, `customer_accounts` → `CustomerAccounts`, `_i18n` → `I18n`. */
46
+ function expectedNamePrefix(moduleId) {
47
+ return (moduleId.startsWith('_') ? moduleId.slice(1) : moduleId)
48
+ .split('_')
49
+ .filter((part) => part.length > 0)
50
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
51
+ .join('');
52
+ }
53
+ /**
54
+ * Rejects a well-formed stamp that names no real instant — month 13, hour 25,
55
+ * 30 February. The round trip is what catches the last one: `Date.UTC` rolls it
56
+ * forward to 2 March rather than refusing it.
57
+ */
58
+ function assertRealInstant(name, timestamp) {
59
+ const at = (from, width) => Number(timestamp.slice(from, from + width));
60
+ const utc = new Date(Date.UTC(at(0, 4), at(4, 2) - 1, at(6, 2), at(9, 2), at(11, 2), at(13, 2)));
61
+ // '2026-08-19T07:48:16.000Z' → '20260819T074816'. The regex bounds the year
62
+ // to four digits, so `toISOString` never takes its extended ±YYYYYY form.
63
+ if (utc.toISOString().replace(/[-:]/g, '').slice(0, 15) !== timestamp) {
64
+ throw new MigrationOrderError('unparsable-name', `[migration-order] migration "${name}" carries the timestamp ${timestamp}, ` +
65
+ `which is not a real UTC instant. Fix the class name and the filename.`);
66
+ }
67
+ }
68
+ /** Step 1 — parse & validate entries. */
69
+ function parseEntries(entries, moduleDependencies) {
70
+ const byName = new Map();
71
+ // Keyed by module, not globally: two authors who cannot talk to each other
72
+ // must not have to coordinate stamps, and after Step 5 a stamp orders
73
+ // nothing outside its own module anyway.
74
+ const byModuleStamp = new Map();
75
+ const parsed = [];
76
+ for (const entry of entries) {
77
+ const name = entry.cls.name;
78
+ const match = MIGRATION_CLASS_RE.exec(name);
79
+ if (!match) {
80
+ throw new MigrationOrderError('unparsable-name', `[migration-order] migration class "${name}" does not match the naming ` +
81
+ `convention Migration<YYYYMMDDTHHmmss><PascalCaseTail>. See ` +
82
+ `specs/081-per-module-migration-order/contracts/migration-identity.md.`);
83
+ }
84
+ const timestamp = match[1];
85
+ assertRealInstant(name, timestamp);
86
+ const duplicateName = byName.get(name);
87
+ if (duplicateName) {
88
+ throw new MigrationOrderError('duplicate-name', `[migration-order] migration "${name}" is registered more than once ` +
89
+ `(modules "${duplicateName.moduleId}" and "${entry.moduleId}"). The class ` +
90
+ `name is what \`mikro_orm_migrations\` stores, so it must be globally ` +
91
+ `unique; rename one and regenerate with \`composer:generate\`.`);
92
+ }
93
+ const prefix = expectedNamePrefix(entry.moduleId);
94
+ if (!name.slice(match[0].length - 1).startsWith(prefix)) {
95
+ throw new MigrationOrderError('unscoped-name', `[migration-order] migration "${name}" is owned by module "${entry.moduleId}", ` +
96
+ `so it must be named Migration${timestamp}${prefix}…. A class name is ` +
97
+ `scoped by its module, which is what makes it unique across every module ` +
98
+ `the platform can compose — contracts/migration-identity.md §2.`);
99
+ }
100
+ const stampKey = `${entry.moduleId} ${timestamp}`;
101
+ const duplicateStamp = byModuleStamp.get(stampKey);
102
+ if (duplicateStamp) {
103
+ throw new MigrationOrderError('duplicate-timestamp', `[migration-order] module "${entry.moduleId}" has two migrations stamped ` +
104
+ `${timestamp}: "${duplicateStamp.name}" and "${name}". Inside one module the ` +
105
+ `timestamp is the whole order; advance one by a whole second (file and class).`);
106
+ }
107
+ if (entry.moduleId !== CORE_MODULE_ID && !moduleDependencies.has(entry.moduleId)) {
108
+ throw new MigrationOrderError('unknown-module', `[migration-order] migration "${name}" declares the unknown owning ` +
109
+ `module "${entry.moduleId}". Add the module's manifest and run ` +
110
+ `\`pnpm --filter backend run manifest-index:generate\`.`);
111
+ }
112
+ const migration = {
113
+ name,
114
+ timestamp,
115
+ moduleId: entry.moduleId,
116
+ origin: entry.origin ?? CORE_MODULE_ID,
117
+ cls: entry.cls,
118
+ };
119
+ byName.set(name, migration);
120
+ byModuleStamp.set(stampKey, migration);
121
+ parsed.push(migration);
122
+ }
123
+ return parsed;
124
+ }
125
+ /**
126
+ * Ascending by timestamp, ties broken by class name — the tiebreak is what
127
+ * keeps the output a pure function of its inputs now that two modules may
128
+ * legally share a stamp.
129
+ */
130
+ function chronologically(left, right) {
131
+ if (left.timestamp !== right.timestamp)
132
+ return left.timestamp < right.timestamp ? -1 : 1;
133
+ return left.name < right.name ? -1 : 1;
134
+ }
135
+ /**
136
+ * The frozen prefix as history recorded it, over migration **names**.
137
+ *
138
+ * This is the one derivation of that order in the repository: `composer:generate`
139
+ * renders the published baseline list with it, and the fixtures that drive
140
+ * `orderMigrations` build their own frozen block with it. A second
141
+ * implementation would be free to disagree with the first, and nothing compares
142
+ * two orders that are never computed together.
143
+ *
144
+ * It is a **generation-time** answer and takes the watermark for that reason
145
+ * (R1.2). The result is what {@link orderMigrations} then emits verbatim: the
146
+ * ordering itself asks no question about a stamp.
147
+ */
148
+ export function historicalBaselineOrder(names, baselineThrough = BASELINE_THROUGH) {
149
+ return names
150
+ .map((name) => {
151
+ const match = MIGRATION_CLASS_RE.exec(name);
152
+ if (!match) {
153
+ throw new MigrationOrderError('unparsable-name', `[migration-order] migration class "${name}" does not match the naming ` +
154
+ `convention Migration<YYYYMMDDTHHmmss><PascalCaseTail>, so the frozen ` +
155
+ `historical prefix cannot be derived from it. See ` +
156
+ `specs/081-per-module-migration-order/contracts/migration-identity.md.`);
157
+ }
158
+ return { name, timestamp: match[1] };
159
+ })
160
+ .filter((migration) => migration.timestamp <= baselineThrough)
161
+ .sort(chronologically)
162
+ .map((migration) => migration.name);
163
+ }
164
+ /**
165
+ * Step 4 — a stable topological sort of the condensation.
166
+ *
167
+ * **The walk is the platform's** (`sortComponentsTopologically`), for the reason
168
+ * `stronglyConnectedComponents` is: feature 113's demo runner orders modules by
169
+ * the same manifest graph, and its contract says it *"MUST NOT maintain an order
170
+ * of its own"* (§4.1). Two implementations of one order would disagree silently,
171
+ * because nothing compares a demo run's order to a migration run's.
172
+ *
173
+ * What stays here is the `'core'` argument, which is this file's alone: `'core'`
174
+ * declares nothing and nothing declares it, so it is always ready at the start,
175
+ * every module's tables sit downstream of the bootstrap tables, and saying so
176
+ * beats relying on an accident of alphabetical ordering.
177
+ */
178
+ function sortComponents(components, neighboursOf) {
179
+ return sortComponentsTopologically(components, neighboursOf, CORE_MODULE_ID);
180
+ }
181
+ /** Step 3 — the ordering graph of a module dependency map, and its components. */
182
+ function orderingGraph(moduleDependencies) {
183
+ const nodes = [...moduleDependencies.keys()];
184
+ if (!moduleDependencies.has(CORE_MODULE_ID))
185
+ nodes.push(CORE_MODULE_ID);
186
+ // Edges to ids absent from the map are skipped; a *migration* claiming such
187
+ // a module is rejected by Step 1 instead.
188
+ const neighboursOf = (id) => (moduleDependencies.get(id) ?? []).filter((dependency) => moduleDependencies.has(dependency));
189
+ return { components: stronglyConnectedComponents(nodes, neighboursOf), neighboursOf };
190
+ }
191
+ /** A component of more than one module is a cycle, and is reported, never thrown. */
192
+ function cycleDiagnostics(components) {
193
+ return components
194
+ .filter((members) => members.length > 1)
195
+ .map((members) => ({
196
+ kind: 'module-cycle',
197
+ modules: members,
198
+ message: `[migration-order] modules [${members.join(', ')}] declare a dependency cycle. ` +
199
+ `Their migrations are emitted as one block in timestamp order, because the ` +
200
+ `declarations contain no order. Fix the \`dependencies\` array in one of them.`,
201
+ }));
202
+ }
203
+ /**
204
+ * Every dependency cycle in a module graph, in the same shape and wording
205
+ * `orderMigrations` reports — one strongly connected component of more than
206
+ * one module per diagnostic, members sorted.
207
+ *
208
+ * Two of the diagnostic's three readers are here: `test/unit/db/module-graph.test.ts`,
209
+ * which fails the build on a cycle in the committed manifests, and the ORM
210
+ * configuration, which warns at boot and keeps serving. The third is the
211
+ * `_lifecycle` orchestrator, which refuses an install whose arrival closes a
212
+ * cycle — the one moment where refusing costs nothing (081 FR-012).
213
+ *
214
+ * **The walk itself is the platform's** (D-160.11): the orchestrator reads
215
+ * `moduleDependencyCycles` directly rather than this wrapper, because it lives
216
+ * in `@endora-commerce/platform` and this file is the host application's. Three
217
+ * reactions, one graph walk — the split is the point, and what keeps a second
218
+ * walk from being free to disagree with this one is that there is only one.
219
+ * What is added here is the *wording*, which is the migration order's own.
220
+ */
221
+ export function findModuleCycles(moduleDependencies) {
222
+ return cycleDiagnostics(moduleDependencyCycles(moduleDependencies));
223
+ }
224
+ export function orderMigrations(input) {
225
+ const { entries, moduleDependencies, baseline: baselineNames } = input;
226
+ const parsed = parseEntries(entries, moduleDependencies);
227
+ const { components, neighboursOf } = orderingGraph(moduleDependencies);
228
+ // Reported, never thrown: the graph is the primary ordering now, so a throw
229
+ // would mean a stranger's manifest can stop a shop's own schema from
230
+ // migrating. The readers want different reactions — a red unit test
231
+ // (`test/unit/db/module-graph.test.ts`), a `warn` at boot, and the lifecycle
232
+ // refusing an install that closes a loop (FR-012) — and none of them belongs
233
+ // in a pure function.
234
+ const diagnostics = cycleDiagnostics(components);
235
+ // Step 2 — baseline membership, by **identity**. The published list is
236
+ // ordered and that order is history's, so the block is emitted as the list
237
+ // holds it rather than as a comparator recomputes it: a comparator that ever
238
+ // disagreed with the list would make the artefact a lie, and this way there
239
+ // is nothing for it to disagree with. A listed name this composition does not
240
+ // supply is simply absent — that is an instance installing a subset.
241
+ const baselinePosition = new Map(baselineNames.map((name, index) => [name, index]));
242
+ const baseline = [];
243
+ const openByModule = new Map();
244
+ for (const migration of parsed) {
245
+ if (baselinePosition.has(migration.name)) {
246
+ baseline.push(migration);
247
+ continue;
248
+ }
249
+ const bucket = openByModule.get(migration.moduleId);
250
+ if (bucket)
251
+ bucket.push(migration);
252
+ else
253
+ openByModule.set(migration.moduleId, [migration]);
254
+ }
255
+ baseline.sort((left, right) => baselinePosition.get(left.name) - baselinePosition.get(right.name));
256
+ // Step 5 — the open block, component by component, contiguous. A
257
+ // multi-module component has no internal order to respect, so its members'
258
+ // migrations are merged and emitted chronologically across the whole block:
259
+ // the baseline block's rule, applied locally.
260
+ const open = [];
261
+ for (const members of sortComponents(components, neighboursOf)) {
262
+ const owned = members.flatMap((member) => openByModule.get(member) ?? []);
263
+ open.push(...owned.sort(chronologically));
264
+ }
265
+ return {
266
+ migrations: [...baseline, ...open].map((migration) => ({
267
+ name: migration.name,
268
+ class: migration.cls,
269
+ })),
270
+ diagnostics,
271
+ };
272
+ }
273
+ //# sourceMappingURL=migration-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-order.js","sourceRoot":"","sources":["../../src/db/migration-order.ts"],"names":[],"mappings":"AACA,qFAAqF;AACrF,wFAAwF;AACxF,gFAAgF;AAChF,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,oCAAoC,CAAC;AAkE5C,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,IAAI,CAA0B;IAEvC,YAAY,IAA6B,EAAE,OAAe;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AA0ClD,iEAAiE;AACjE,MAAM,cAAc,GAAG,MAAM,CAAC;AAE9B,sEAAsE;AACtE,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;AAU7D,uFAAuF;AACvF,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;SAC7D,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAY,EAAE,SAAiB;IACxD,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;IAChG,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjG,4EAA4E;IAC5E,0EAA0E;IAC1E,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;QACtE,MAAM,IAAI,mBAAmB,CAC3B,iBAAiB,EACjB,gCAAgC,IAAI,2BAA2B,SAAS,IAAI;YAC1E,uEAAuE,CAC1E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,yCAAyC;AACzC,SAAS,YAAY,CACnB,OAA0C,EAC1C,kBAA0D;IAE1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAClD,2EAA2E;IAC3E,sEAAsE;IACtE,yCAAyC;IACzC,MAAM,aAAa,GAAG,IAAI,GAAG,EAA2B,CAAC;IACzD,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5B,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,mBAAmB,CAC3B,iBAAiB,EACjB,sCAAsC,IAAI,8BAA8B;gBACtE,6DAA6D;gBAC7D,uEAAuE,CAC1E,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QAC5B,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAEnC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,IAAI,mBAAmB,CAC3B,gBAAgB,EAChB,gCAAgC,IAAI,iCAAiC;gBACnE,aAAa,aAAa,CAAC,QAAQ,UAAU,KAAK,CAAC,QAAQ,gBAAgB;gBAC3E,uEAAuE;gBACvE,+DAA+D,CAClE,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,mBAAmB,CAC3B,eAAe,EACf,gCAAgC,IAAI,yBAAyB,KAAK,CAAC,QAAQ,KAAK;gBAC9E,gCAAgC,SAAS,GAAG,MAAM,qBAAqB;gBACvE,0EAA0E;gBAC1E,gEAAgE,CACnE,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClD,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,mBAAmB,CAC3B,qBAAqB,EACrB,6BAA6B,KAAK,CAAC,QAAQ,+BAA+B;gBACxE,GAAG,SAAS,MAAM,cAAc,CAAC,IAAI,UAAU,IAAI,2BAA2B;gBAC9E,+EAA+E,CAClF,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,QAAQ,KAAK,cAAc,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjF,MAAM,IAAI,mBAAmB,CAC3B,gBAAgB,EAChB,gCAAgC,IAAI,gCAAgC;gBAClE,WAAW,KAAK,CAAC,QAAQ,uCAAuC;gBAChE,wDAAwD,CAC3D,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAoB;YACjC,IAAI;YACJ,SAAS;YACT,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,cAAc;YACtC,GAAG,EAAE,KAAK,CAAC,GAAG;SACf,CAAC;QACF,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5B,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CACtB,IAA2D,EAC3D,KAA4D;IAE5D,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,OAAO,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAwB,EACxB,kBAA0B,gBAAgB;IAE1C,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,mBAAmB,CAC3B,iBAAiB,EACjB,sCAAsC,IAAI,8BAA8B;gBACtE,uEAAuE;gBACvE,mDAAmD;gBACnD,uEAAuE,CAC1E,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC;IACxC,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,IAAI,eAAe,CAAC;SAC7D,IAAI,CAAC,eAAe,CAAC;SACrB,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,cAAc,CACrB,UAA+B,EAC/B,YAA+C;IAE/C,OAAO,2BAA2B,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;AAC/E,CAAC;AAED,kFAAkF;AAClF,SAAS,aAAa,CAAC,kBAA0D;IAI/E,MAAM,KAAK,GAAG,CAAC,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxE,4EAA4E;IAC5E,0CAA0C;IAC1C,MAAM,YAAY,GAAG,CAAC,EAAU,EAAqB,EAAE,CACrD,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAChG,OAAO,EAAE,UAAU,EAAE,2BAA2B,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;AACxF,CAAC;AAED,qFAAqF;AACrF,SAAS,gBAAgB,CAAC,UAA+B;IACvD,OAAO,UAAU;SACd,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;SACvC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjB,IAAI,EAAE,cAAuB;QAC7B,OAAO,EAAE,OAAO;QAChB,OAAO,EACL,8BAA8B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC;YAChF,4EAA4E;YAC5E,+EAA+E;KAClF,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,kBAA0D;IAE1D,OAAO,gBAAgB,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IACvE,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAEzD,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAEvE,4EAA4E;IAC5E,qEAAqE;IACrE,oEAAoE;IACpE,6EAA6E;IAC7E,6EAA6E;IAC7E,sBAAsB;IACtB,MAAM,WAAW,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAEjD,uEAAuE;IACvE,2EAA2E;IAC3E,6EAA6E;IAC7E,4EAA4E;IAC5E,8EAA8E;IAC9E,qEAAqE;IACrE,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAU,CAAC,CAAC,CAAC;IAC7F,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC1D,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;QAC/B,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;YAC9B,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC,CAAC;IAErG,iEAAiE;IACjE,2EAA2E;IAC3E,4EAA4E;IAC5E,8CAA8C;IAC9C,MAAM,IAAI,GAAsB,EAAE,CAAC;IACnC,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO;QACL,UAAU,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACrD,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,KAAK,EAAE,SAAS,CAAC,GAAG;SACrB,CAAC,CAAC;QACH,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { type Options } from '@mikro-orm/postgresql';
2
+ import type { ConfiguredEntity } from './configured-entities.js';
3
+ import type { ConfiguredMigrations } from './configured-migrations.js';
4
+ /**
5
+ * MikroORM configuration for an Endora platform.
6
+ *
7
+ * - PostgreSQL driver (constitutional stack).
8
+ * - Plural snake_case table names + snake_case columns (Principle VI) via the
9
+ * custom naming strategy in ./pluralizing-naming-strategy.ts (R-04).
10
+ * - Migration ownership is module-local: each module keeps its migration files
11
+ * under its own `migrations/` directory. The few genuinely cross-cutting
12
+ * bootstrap migrations (foundation/commerce init, module-lifecycle, tenant
13
+ * indexes) are the platform's own and live in `../migrations/`. Adding a
14
+ * migration means dropping a file in the owning module's migrations/ dir and
15
+ * regenerating — never here.
16
+ * - Both registries stay explicit static-import lists rather than a filesystem
17
+ * glob: glob discovery needs runtime dynamic `import()` of .ts files, which
18
+ * Node's ESM loader cannot transform and which breaks under Vitest. Since
19
+ * feature 071's F2 the lists are *emitted* from a filesystem walk by
20
+ * scripts/generate-composer.ts and committed, so they are static imports
21
+ * nobody maintains by hand. The "registered ⇔ on-disk" round-trip is enforced
22
+ * by test/unit/db/migrations-registry.test.ts, and `overlay:check` fails on a
23
+ * committed artefact that drifted from the tree.
24
+ * - Execution order is computed by ./migration-order.ts: a frozen historical
25
+ * prefix, then module by module in a topological order of the manifest
26
+ * dependency graph, each module's migrations contiguous and ascending by
27
+ * timestamp. See docs/docs/architecture/migrations.md.
28
+ *
29
+ * ## It takes its inputs and reads no artefact (`specs/110-instance-repository/` R7.4)
30
+ *
31
+ * Both committed registries are **bare core**, and stay that way: an installed
32
+ * extension package may ship entities and migrations (D-106.2), but which
33
+ * packages an instance installed is a fact about the process rather than about
34
+ * the tree, so the committed artefacts must not claim to know (D-119, confirmed
35
+ * as D-155). The package half is therefore discovered at runtime by
36
+ * `configured-entities.ts` and `configured-migrations.ts`, and the host hands
37
+ * the merged result in here. `backend/src/db/mikro-orm.config.ts` is the
38
+ * binding: it holds the async factory, the memoisation and the fourteen callers
39
+ * — all three facts about one process — and this file is the configuration
40
+ * itself, which is the platform's. `DATABASE_URL`, `NODE_ENV` and `DB_DEBUG`
41
+ * are the exception and stay a `process.env` read here; see {@link databaseUrl}.
42
+ */
43
+ /** What {@link mikroOrmConfigFrom} needs from the host. */
44
+ export interface OrmConfigurationInputs {
45
+ /** The merged entity set — `configuredEntitiesFrom`'s answer. */
46
+ readonly entities: readonly ConfiguredEntity[];
47
+ /** The merged execution order — `configuredMigrations`' answer. */
48
+ readonly migrations: ConfiguredMigrations;
49
+ }
50
+ export declare function mikroOrmConfigFrom(inputs: OrmConfigurationInputs): Options;
51
+ //# sourceMappingURL=mikro-orm.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mikro-orm.config.d.ts","sourceRoot":"","sources":["../../src/db/mikro-orm.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAInE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,2DAA2D;AAC3D,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,mEAAmE;IACnE,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;CAC3C;AAiBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CA8C1E"}
@@ -0,0 +1,64 @@
1
+ import { defineConfig } from '@mikro-orm/postgresql';
2
+ import { Migrator } from '@mikro-orm/migrations';
3
+ import { PluralizingNamingStrategy } from './pluralizing-naming-strategy.js';
4
+ import { OrgWriteGuardSubscriber } from '../tenancy/org-write-guard.js';
5
+ /**
6
+ * Read off `process.env` directly, and deliberately not through an injected
7
+ * environment.
8
+ *
9
+ * `check:env-inputs` reconciles the platform's declared inputs against the
10
+ * `process.env` and `import.meta.env` reads its walk can see, so a value
11
+ * reached through a parameter is a declared input nothing reads — measured on
12
+ * this file when T116 moved it: `DATABASE_URL` and `DB_DEBUG` both reported
13
+ * `unread-input`, which is an operator being asked for a value that changes
14
+ * nothing. Which database a process talks to is a fact about that process, so
15
+ * reading it here is also the honest shape.
16
+ */
17
+ const databaseUrl = () => process.env['DATABASE_URL'] ?? 'postgresql://b2b:b2b@localhost:5432/b2b';
18
+ export function mikroOrmConfigFrom(inputs) {
19
+ // A dependency cycle is a diagnostic, not a throw: the graph is the primary
20
+ // ordering now, so refusing here would let one mis-declared manifest stop
21
+ // the whole platform's schema from migrating — and since a manifest can
22
+ // arrive from an installed package, that manifest may be a stranger's.
23
+ // Nothing in this file branches on it — warning is the whole reaction, and
24
+ // the platform boots and serves. The other two readers refuse instead, each
25
+ // where refusing costs nothing: test/unit/db/module-graph.test.ts fails the
26
+ // build on a cycle in the committed manifests, and the _lifecycle
27
+ // orchestrator refuses an install whose arrival closes one (FR-012).
28
+ // test/unit/db/migration-order-boot-warning.test.ts is the proof that this
29
+ // warning fires on a cycle and is silent without one.
30
+ for (const diagnostic of inputs.migrations.diagnostics) {
31
+ console.warn(diagnostic.message);
32
+ }
33
+ return defineConfig({
34
+ clientUrl: databaseUrl(),
35
+ namingStrategy: PluralizingNamingStrategy,
36
+ // Explicit class list, not a glob — glob discovery requires runtime
37
+ // dynamic `import()` of .ts files, which Node's ESM loader cannot
38
+ // transform and which breaks under Vitest. See
39
+ // backend/src/db/entities-registry.generated.ts for the rationale and for
40
+ // what emits it, and ./configured-entities.ts for the package half.
41
+ entities: [...inputs.entities],
42
+ // The tenant guard on the write side (D-260/A). One subscriber, over the
43
+ // classification registry the `@OrgScoped()` decorators already write, so
44
+ // there is nothing per entity and nothing per module to declare here as
45
+ // classes arrive. It is constructed rather than passed in because it takes
46
+ // no input: its subscribed set and its predicate are both `tenancy/`'s, and
47
+ // a host that could substitute it could switch the guard off.
48
+ // See ../tenancy/org-write-guard.ts for what it does and does not catch.
49
+ subscribers: [new OrgWriteGuardSubscriber()],
50
+ debug: process.env['NODE_ENV'] === 'development' && process.env['DB_DEBUG'] === 'true',
51
+ allowGlobalContext: false,
52
+ forceUndefined: true,
53
+ extensions: [Migrator],
54
+ migrations: {
55
+ migrationsList: inputs.migrations.migrations,
56
+ transactional: true,
57
+ disableForeignKeys: false,
58
+ allOrNothing: true,
59
+ emit: 'ts',
60
+ snapshot: false,
61
+ },
62
+ });
63
+ }
64
+ //# sourceMappingURL=mikro-orm.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mikro-orm.config.js","sourceRoot":"","sources":["../../src/db/mikro-orm.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgB,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAoDxE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,GAAG,GAAW,EAAE,CAC/B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,yCAAyC,CAAC;AAE3E,MAAM,UAAU,kBAAkB,CAAC,MAA8B;IAC/D,4EAA4E;IAC5E,0EAA0E;IAC1E,wEAAwE;IACxE,uEAAuE;IACvE,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,kEAAkE;IAClE,qEAAqE;IACrE,2EAA2E;IAC3E,sDAAsD;IACtD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,YAAY,CAAC;QAClB,SAAS,EAAE,WAAW,EAAE;QACxB,cAAc,EAAE,yBAAyB;QACzC,oEAAoE;QACpE,kEAAkE;QAClE,+CAA+C;QAC/C,0EAA0E;QAC1E,oEAAoE;QACpE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC9B,yEAAyE;QACzE,0EAA0E;QAC1E,wEAAwE;QACxE,2EAA2E;QAC3E,4EAA4E;QAC5E,8DAA8D;QAC9D,yEAAyE;QACzE,WAAW,EAAE,CAAC,IAAI,uBAAuB,EAAE,CAAC;QAC5C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM;QACtF,kBAAkB,EAAE,KAAK;QACzB,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,CAAC,QAAQ,CAAC;QACtB,UAAU,EAAE;YACV,cAAc,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU;YAC5C,aAAa,EAAE,IAAI;YACnB,kBAAkB,EAAE,KAAK;YACzB,YAAY,EAAE,IAAI;YAClB,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,KAAK;SAChB;KACF,CAAC,CAAC;AACL,CAAC"}