@endora-commerce/cli 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 (356) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +37 -0
  3. package/dist/bin/endora.d.ts +28 -0
  4. package/dist/bin/endora.d.ts.map +1 -0
  5. package/dist/bin/endora.js +926 -0
  6. package/dist/bin/endora.js.map +1 -0
  7. package/dist/check/estate.d.ts +189 -0
  8. package/dist/check/estate.d.ts.map +1 -0
  9. package/dist/check/estate.js +1037 -0
  10. package/dist/check/estate.js.map +1 -0
  11. package/dist/check/hosts.d.ts +25 -0
  12. package/dist/check/hosts.d.ts.map +1 -0
  13. package/dist/check/hosts.js +1347 -0
  14. package/dist/check/hosts.js.map +1 -0
  15. package/dist/check/index.d.ts +60 -0
  16. package/dist/check/index.d.ts.map +1 -0
  17. package/dist/check/index.js +111 -0
  18. package/dist/check/index.js.map +1 -0
  19. package/dist/check/layout.d.ts +136 -0
  20. package/dist/check/layout.d.ts.map +1 -0
  21. package/dist/check/layout.js +262 -0
  22. package/dist/check/layout.js.map +1 -0
  23. package/dist/check/ledger.d.ts +98 -0
  24. package/dist/check/ledger.d.ts.map +1 -0
  25. package/dist/check/ledger.js +173 -0
  26. package/dist/check/ledger.js.map +1 -0
  27. package/dist/check/peer-owners.d.ts +116 -0
  28. package/dist/check/peer-owners.d.ts.map +1 -0
  29. package/dist/check/peer-owners.js +225 -0
  30. package/dist/check/peer-owners.js.map +1 -0
  31. package/dist/check/report.d.ts +33 -0
  32. package/dist/check/report.d.ts.map +1 -0
  33. package/dist/check/report.js +107 -0
  34. package/dist/check/report.js.map +1 -0
  35. package/dist/check/run.d.ts +147 -0
  36. package/dist/check/run.d.ts.map +1 -0
  37. package/dist/check/run.js +111 -0
  38. package/dist/check/run.js.map +1 -0
  39. package/dist/checks.d.ts +17 -0
  40. package/dist/checks.d.ts.map +1 -0
  41. package/dist/checks.js +17 -0
  42. package/dist/checks.js.map +1 -0
  43. package/dist/dev/index.d.ts +83 -0
  44. package/dist/dev/index.d.ts.map +1 -0
  45. package/dist/dev/index.js +298 -0
  46. package/dist/dev/index.js.map +1 -0
  47. package/dist/generate/divergence.d.ts +38 -0
  48. package/dist/generate/divergence.d.ts.map +1 -0
  49. package/dist/generate/divergence.js +237 -0
  50. package/dist/generate/divergence.js.map +1 -0
  51. package/dist/generate/index.d.ts +90 -0
  52. package/dist/generate/index.d.ts.map +1 -0
  53. package/dist/generate/index.js +369 -0
  54. package/dist/generate/index.js.map +1 -0
  55. package/dist/index.d.ts +23 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +35 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/inputs/declaration.d.ts +18 -0
  60. package/dist/inputs/declaration.d.ts.map +1 -0
  61. package/dist/inputs/declaration.js +64 -0
  62. package/dist/inputs/declaration.js.map +1 -0
  63. package/dist/inputs/env-file.d.ts +73 -0
  64. package/dist/inputs/env-file.d.ts.map +1 -0
  65. package/dist/inputs/env-file.js +134 -0
  66. package/dist/inputs/env-file.js.map +1 -0
  67. package/dist/inputs/prompt.d.ts +21 -0
  68. package/dist/inputs/prompt.d.ts.map +1 -0
  69. package/dist/inputs/prompt.js +59 -0
  70. package/dist/inputs/prompt.js.map +1 -0
  71. package/dist/inputs/resolve.d.ts +163 -0
  72. package/dist/inputs/resolve.d.ts.map +1 -0
  73. package/dist/inputs/resolve.js +290 -0
  74. package/dist/inputs/resolve.js.map +1 -0
  75. package/dist/install/host.d.ts +27 -0
  76. package/dist/install/host.d.ts.map +1 -0
  77. package/dist/install/host.js +90 -0
  78. package/dist/install/host.js.map +1 -0
  79. package/dist/install/index.d.ts +173 -0
  80. package/dist/install/index.d.ts.map +1 -0
  81. package/dist/install/index.js +793 -0
  82. package/dist/install/index.js.map +1 -0
  83. package/dist/install/wizard.d.ts +144 -0
  84. package/dist/install/wizard.d.ts.map +1 -0
  85. package/dist/install/wizard.js +362 -0
  86. package/dist/install/wizard.js.map +1 -0
  87. package/dist/lib/admin-artefacts.d.ts +70 -0
  88. package/dist/lib/admin-artefacts.d.ts.map +1 -0
  89. package/dist/lib/admin-artefacts.js +354 -0
  90. package/dist/lib/admin-artefacts.js.map +1 -0
  91. package/dist/lib/admin-surfaces.d.ts +298 -0
  92. package/dist/lib/admin-surfaces.d.ts.map +1 -0
  93. package/dist/lib/admin-surfaces.js +669 -0
  94. package/dist/lib/admin-surfaces.js.map +1 -0
  95. package/dist/lib/delegated-composer.d.ts +85 -0
  96. package/dist/lib/delegated-composer.d.ts.map +1 -0
  97. package/dist/lib/delegated-composer.js +241 -0
  98. package/dist/lib/delegated-composer.js.map +1 -0
  99. package/dist/lib/divergence-artefacts.d.ts +305 -0
  100. package/dist/lib/divergence-artefacts.d.ts.map +1 -0
  101. package/dist/lib/divergence-artefacts.js +828 -0
  102. package/dist/lib/divergence-artefacts.js.map +1 -0
  103. package/dist/lib/divergence.d.ts +337 -0
  104. package/dist/lib/divergence.d.ts.map +1 -0
  105. package/dist/lib/divergence.js +1005 -0
  106. package/dist/lib/divergence.js.map +1 -0
  107. package/dist/lib/docs-artefacts.d.ts +395 -0
  108. package/dist/lib/docs-artefacts.d.ts.map +1 -0
  109. package/dist/lib/docs-artefacts.js +781 -0
  110. package/dist/lib/docs-artefacts.js.map +1 -0
  111. package/dist/lib/emitted-exports.d.ts +21 -0
  112. package/dist/lib/emitted-exports.d.ts.map +1 -0
  113. package/dist/lib/emitted-exports.js +96 -0
  114. package/dist/lib/emitted-exports.js.map +1 -0
  115. package/dist/lib/emitted-freshness.d.ts +112 -0
  116. package/dist/lib/emitted-freshness.d.ts.map +1 -0
  117. package/dist/lib/emitted-freshness.js +288 -0
  118. package/dist/lib/emitted-freshness.js.map +1 -0
  119. package/dist/lib/entity-index-artefact.d.ts +95 -0
  120. package/dist/lib/entity-index-artefact.d.ts.map +1 -0
  121. package/dist/lib/entity-index-artefact.js +210 -0
  122. package/dist/lib/entity-index-artefact.js.map +1 -0
  123. package/dist/lib/instance-build-inputs.d.ts +108 -0
  124. package/dist/lib/instance-build-inputs.d.ts.map +1 -0
  125. package/dist/lib/instance-build-inputs.js +165 -0
  126. package/dist/lib/instance-build-inputs.js.map +1 -0
  127. package/dist/lib/module-docs.d.ts +473 -0
  128. package/dist/lib/module-docs.d.ts.map +1 -0
  129. package/dist/lib/module-docs.js +711 -0
  130. package/dist/lib/module-docs.js.map +1 -0
  131. package/dist/lib/module-package-subpaths.d.ts +56 -0
  132. package/dist/lib/module-package-subpaths.d.ts.map +1 -0
  133. package/dist/lib/module-package-subpaths.js +223 -0
  134. package/dist/lib/module-package-subpaths.js.map +1 -0
  135. package/dist/lib/module-packages.d.ts +200 -0
  136. package/dist/lib/module-packages.d.ts.map +1 -0
  137. package/dist/lib/module-packages.js +580 -0
  138. package/dist/lib/module-packages.js.map +1 -0
  139. package/dist/lib/module-population.d.ts +129 -0
  140. package/dist/lib/module-population.d.ts.map +1 -0
  141. package/dist/lib/module-population.js +172 -0
  142. package/dist/lib/module-population.js.map +1 -0
  143. package/dist/lib/module-roots.d.ts +337 -0
  144. package/dist/lib/module-roots.d.ts.map +1 -0
  145. package/dist/lib/module-roots.js +586 -0
  146. package/dist/lib/module-roots.js.map +1 -0
  147. package/dist/lib/nested-checkouts.d.ts +33 -0
  148. package/dist/lib/nested-checkouts.d.ts.map +1 -0
  149. package/dist/lib/nested-checkouts.js +160 -0
  150. package/dist/lib/nested-checkouts.js.map +1 -0
  151. package/dist/lib/platform-root.d.ts +43 -0
  152. package/dist/lib/platform-root.d.ts.map +1 -0
  153. package/dist/lib/platform-root.js +134 -0
  154. package/dist/lib/platform-root.js.map +1 -0
  155. package/dist/lib/platform-surface.d.ts +235 -0
  156. package/dist/lib/platform-surface.d.ts.map +1 -0
  157. package/dist/lib/platform-surface.js +393 -0
  158. package/dist/lib/platform-surface.js.map +1 -0
  159. package/dist/lib/port-registrations.d.ts +223 -0
  160. package/dist/lib/port-registrations.d.ts.map +1 -0
  161. package/dist/lib/port-registrations.js +532 -0
  162. package/dist/lib/port-registrations.js.map +1 -0
  163. package/dist/lib/read-size.d.ts +154 -0
  164. package/dist/lib/read-size.d.ts.map +1 -0
  165. package/dist/lib/read-size.js +182 -0
  166. package/dist/lib/read-size.js.map +1 -0
  167. package/dist/lib/registration-owners.d.ts +79 -0
  168. package/dist/lib/registration-owners.d.ts.map +1 -0
  169. package/dist/lib/registration-owners.js +77 -0
  170. package/dist/lib/registration-owners.js.map +1 -0
  171. package/dist/lib/release-index.d.ts +53 -0
  172. package/dist/lib/release-index.d.ts.map +1 -0
  173. package/dist/lib/release-index.js +162 -0
  174. package/dist/lib/release-index.js.map +1 -0
  175. package/dist/lib/repeating-timers.d.ts +79 -0
  176. package/dist/lib/repeating-timers.d.ts.map +1 -0
  177. package/dist/lib/repeating-timers.js +189 -0
  178. package/dist/lib/repeating-timers.js.map +1 -0
  179. package/dist/lib/source-text.d.ts +34 -0
  180. package/dist/lib/source-text.d.ts.map +1 -0
  181. package/dist/lib/source-text.js +80 -0
  182. package/dist/lib/source-text.js.map +1 -0
  183. package/dist/lib/specifiers.d.ts +20 -0
  184. package/dist/lib/specifiers.d.ts.map +1 -0
  185. package/dist/lib/specifiers.js +130 -0
  186. package/dist/lib/specifiers.js.map +1 -0
  187. package/dist/lib/sql-tables.d.ts +166 -0
  188. package/dist/lib/sql-tables.d.ts.map +1 -0
  189. package/dist/lib/sql-tables.js +464 -0
  190. package/dist/lib/sql-tables.js.map +1 -0
  191. package/dist/lib/switchable-modules.d.ts +54 -0
  192. package/dist/lib/switchable-modules.d.ts.map +1 -0
  193. package/dist/lib/switchable-modules.js +104 -0
  194. package/dist/lib/switchable-modules.js.map +1 -0
  195. package/dist/lib/tailwind-sources.d.ts +136 -0
  196. package/dist/lib/tailwind-sources.d.ts.map +1 -0
  197. package/dist/lib/tailwind-sources.js +307 -0
  198. package/dist/lib/tailwind-sources.js.map +1 -0
  199. package/dist/lib/ui-layer.d.ts +54 -0
  200. package/dist/lib/ui-layer.d.ts.map +1 -0
  201. package/dist/lib/ui-layer.js +57 -0
  202. package/dist/lib/ui-layer.js.map +1 -0
  203. package/dist/lib/workspace-packages.d.ts +186 -0
  204. package/dist/lib/workspace-packages.d.ts.map +1 -0
  205. package/dist/lib/workspace-packages.js +351 -0
  206. package/dist/lib/workspace-packages.js.map +1 -0
  207. package/dist/new-instance/deploy.d.ts +211 -0
  208. package/dist/new-instance/deploy.d.ts.map +1 -0
  209. package/dist/new-instance/deploy.js +1381 -0
  210. package/dist/new-instance/deploy.js.map +1 -0
  211. package/dist/new-instance/docs-toolchain.d.ts +66 -0
  212. package/dist/new-instance/docs-toolchain.d.ts.map +1 -0
  213. package/dist/new-instance/docs-toolchain.js +69 -0
  214. package/dist/new-instance/docs-toolchain.js.map +1 -0
  215. package/dist/new-instance/host.d.ts +124 -0
  216. package/dist/new-instance/host.d.ts.map +1 -0
  217. package/dist/new-instance/host.js +276 -0
  218. package/dist/new-instance/host.js.map +1 -0
  219. package/dist/new-instance/index.d.ts +118 -0
  220. package/dist/new-instance/index.d.ts.map +1 -0
  221. package/dist/new-instance/index.js +567 -0
  222. package/dist/new-instance/index.js.map +1 -0
  223. package/dist/new-instance/modules.d.ts +188 -0
  224. package/dist/new-instance/modules.d.ts.map +1 -0
  225. package/dist/new-instance/modules.js +392 -0
  226. package/dist/new-instance/modules.js.map +1 -0
  227. package/dist/new-instance/template.d.ts +505 -0
  228. package/dist/new-instance/template.d.ts.map +1 -0
  229. package/dist/new-instance/template.js +1886 -0
  230. package/dist/new-instance/template.js.map +1 -0
  231. package/dist/new-module/emit.d.ts +67 -0
  232. package/dist/new-module/emit.d.ts.map +1 -0
  233. package/dist/new-module/emit.js +1393 -0
  234. package/dist/new-module/emit.js.map +1 -0
  235. package/dist/new-module/host.d.ts +67 -0
  236. package/dist/new-module/host.d.ts.map +1 -0
  237. package/dist/new-module/host.js +224 -0
  238. package/dist/new-module/host.js.map +1 -0
  239. package/dist/new-module/index.d.ts +32 -0
  240. package/dist/new-module/index.d.ts.map +1 -0
  241. package/dist/new-module/index.js +193 -0
  242. package/dist/new-module/index.js.map +1 -0
  243. package/dist/new-module/spec.d.ts +188 -0
  244. package/dist/new-module/spec.d.ts.map +1 -0
  245. package/dist/new-module/spec.js +404 -0
  246. package/dist/new-module/spec.js.map +1 -0
  247. package/dist/new-module/text.d.ts +15 -0
  248. package/dist/new-module/text.d.ts.map +1 -0
  249. package/dist/new-module/text.js +22 -0
  250. package/dist/new-module/text.js.map +1 -0
  251. package/dist/new-storefront/dockerfile.d.ts +20 -0
  252. package/dist/new-storefront/dockerfile.d.ts.map +1 -0
  253. package/dist/new-storefront/dockerfile.js +131 -0
  254. package/dist/new-storefront/dockerfile.js.map +1 -0
  255. package/dist/new-storefront/gitignore.d.ts +23 -0
  256. package/dist/new-storefront/gitignore.d.ts.map +1 -0
  257. package/dist/new-storefront/gitignore.js +39 -0
  258. package/dist/new-storefront/gitignore.js.map +1 -0
  259. package/dist/new-storefront/index.d.ts +93 -0
  260. package/dist/new-storefront/index.d.ts.map +1 -0
  261. package/dist/new-storefront/index.js +329 -0
  262. package/dist/new-storefront/index.js.map +1 -0
  263. package/dist/new-storefront/npmrc.d.ts +98 -0
  264. package/dist/new-storefront/npmrc.d.ts.map +1 -0
  265. package/dist/new-storefront/npmrc.js +217 -0
  266. package/dist/new-storefront/npmrc.js.map +1 -0
  267. package/dist/new-storefront/reference.d.ts +189 -0
  268. package/dist/new-storefront/reference.d.ts.map +1 -0
  269. package/dist/new-storefront/reference.js +430 -0
  270. package/dist/new-storefront/reference.js.map +1 -0
  271. package/dist/new-storefront/rewrite.d.ts +171 -0
  272. package/dist/new-storefront/rewrite.d.ts.map +1 -0
  273. package/dist/new-storefront/rewrite.js +701 -0
  274. package/dist/new-storefront/rewrite.js.map +1 -0
  275. package/dist/release-index.json +284 -0
  276. package/dist/rules/action-route-permissions.d.ts +141 -0
  277. package/dist/rules/action-route-permissions.d.ts.map +1 -0
  278. package/dist/rules/action-route-permissions.js +556 -0
  279. package/dist/rules/action-route-permissions.js.map +1 -0
  280. package/dist/rules/bundle-pairing.d.ts +74 -0
  281. package/dist/rules/bundle-pairing.d.ts.map +1 -0
  282. package/dist/rules/bundle-pairing.js +281 -0
  283. package/dist/rules/bundle-pairing.js.map +1 -0
  284. package/dist/rules/channel-resolution.d.ts +17 -0
  285. package/dist/rules/channel-resolution.d.ts.map +1 -0
  286. package/dist/rules/channel-resolution.js +382 -0
  287. package/dist/rules/channel-resolution.js.map +1 -0
  288. package/dist/rules/command-coverage.d.ts +210 -0
  289. package/dist/rules/command-coverage.d.ts.map +1 -0
  290. package/dist/rules/command-coverage.js +714 -0
  291. package/dist/rules/command-coverage.js.map +1 -0
  292. package/dist/rules/container-imports.d.ts +60 -0
  293. package/dist/rules/container-imports.d.ts.map +1 -0
  294. package/dist/rules/container-imports.js +158 -0
  295. package/dist/rules/container-imports.js.map +1 -0
  296. package/dist/rules/default-language-prose.d.ts +212 -0
  297. package/dist/rules/default-language-prose.d.ts.map +1 -0
  298. package/dist/rules/default-language-prose.js +710 -0
  299. package/dist/rules/default-language-prose.js.map +1 -0
  300. package/dist/rules/diacritic-folds.d.ts +238 -0
  301. package/dist/rules/diacritic-folds.d.ts.map +1 -0
  302. package/dist/rules/diacritic-folds.js +681 -0
  303. package/dist/rules/diacritic-folds.js.map +1 -0
  304. package/dist/rules/entity-tenant-classification.d.ts +171 -0
  305. package/dist/rules/entity-tenant-classification.d.ts.map +1 -0
  306. package/dist/rules/entity-tenant-classification.js +323 -0
  307. package/dist/rules/entity-tenant-classification.js.map +1 -0
  308. package/dist/rules/entry-presence.d.ts +142 -0
  309. package/dist/rules/entry-presence.d.ts.map +1 -0
  310. package/dist/rules/entry-presence.js +339 -0
  311. package/dist/rules/entry-presence.js.map +1 -0
  312. package/dist/rules/entry-scope.d.ts +91 -0
  313. package/dist/rules/entry-scope.d.ts.map +1 -0
  314. package/dist/rules/entry-scope.js +404 -0
  315. package/dist/rules/entry-scope.js.map +1 -0
  316. package/dist/rules/env-inputs.d.ts +222 -0
  317. package/dist/rules/env-inputs.d.ts.map +1 -0
  318. package/dist/rules/env-inputs.js +951 -0
  319. package/dist/rules/env-inputs.js.map +1 -0
  320. package/dist/rules/kernel-boundary.d.ts +37 -0
  321. package/dist/rules/kernel-boundary.d.ts.map +1 -0
  322. package/dist/rules/kernel-boundary.js +195 -0
  323. package/dist/rules/kernel-boundary.js.map +1 -0
  324. package/dist/rules/nul-bytes.d.ts +233 -0
  325. package/dist/rules/nul-bytes.d.ts.map +1 -0
  326. package/dist/rules/nul-bytes.js +332 -0
  327. package/dist/rules/nul-bytes.js.map +1 -0
  328. package/dist/rules/platform-surface.d.ts +479 -0
  329. package/dist/rules/platform-surface.d.ts.map +1 -0
  330. package/dist/rules/platform-surface.js +749 -0
  331. package/dist/rules/platform-surface.js.map +1 -0
  332. package/dist/rules/port-catches.d.ts +225 -0
  333. package/dist/rules/port-catches.d.ts.map +1 -0
  334. package/dist/rules/port-catches.js +1374 -0
  335. package/dist/rules/port-catches.js.map +1 -0
  336. package/dist/rules/port-shape.d.ts +213 -0
  337. package/dist/rules/port-shape.d.ts.map +1 -0
  338. package/dist/rules/port-shape.js +670 -0
  339. package/dist/rules/port-shape.js.map +1 -0
  340. package/dist/rules/queue-names.d.ts +108 -0
  341. package/dist/rules/queue-names.d.ts.map +1 -0
  342. package/dist/rules/queue-names.js +395 -0
  343. package/dist/rules/queue-names.js.map +1 -0
  344. package/dist/rules/singleton-identity.d.ts +205 -0
  345. package/dist/rules/singleton-identity.d.ts.map +1 -0
  346. package/dist/rules/singleton-identity.js +830 -0
  347. package/dist/rules/singleton-identity.js.map +1 -0
  348. package/dist/rules/subscribe-seam.d.ts +121 -0
  349. package/dist/rules/subscribe-seam.d.ts.map +1 -0
  350. package/dist/rules/subscribe-seam.js +594 -0
  351. package/dist/rules/subscribe-seam.js.map +1 -0
  352. package/dist/rules/transaction-context.d.ts +40 -0
  353. package/dist/rules/transaction-context.d.ts.map +1 -0
  354. package/dist/rules/transaction-context.js +294 -0
  355. package/dist/rules/transaction-context.js.map +1 -0
  356. package/package.json +59 -0
@@ -0,0 +1,129 @@
1
+ export { ManifestIndexUnreadableError } from './switchable-modules.js';
2
+ export interface ModulePopulationInput {
3
+ /** Module ids the generated manifest index registers. */
4
+ readonly registered: readonly string[];
5
+ /**
6
+ * Every path the walk produced. Absolute or relative, either separator: the
7
+ * module id is read out of the `modules/<id>/` segment, which every caller's
8
+ * paths carry whichever root they were made relative to.
9
+ */
10
+ readonly files: readonly string[];
11
+ /**
12
+ * Registered modules this check excludes from its own scan by design, so its
13
+ * floor asks for the population it actually reads. Every entry is a claim the
14
+ * check makes in its header, not a convenience.
15
+ */
16
+ readonly excluded?: readonly string[];
17
+ /**
18
+ * How a path is attributed to a module, where the `modules/<id>/` segment is
19
+ * not the answer (feature 080, T040a).
20
+ *
21
+ * A module that has become a **package** lives at a path of its own choosing
22
+ * — `packages/modules/blog/src/…` today, whatever the workspace globs allow
23
+ * tomorrow — and its id is read from its manifest's `endora.id` rather than
24
+ * from a directory name. `lib/module-roots.ts` supplies the function; the
25
+ * default is {@link moduleIdOf}, so a caller with only an application tree
26
+ * gets exactly the behaviour it had before this field existed.
27
+ */
28
+ readonly moduleIdOf?: (path: string) => string | null;
29
+ }
30
+ /**
31
+ * Directories whose files belong to one module although no `modules/<id>/`
32
+ * segment says so — keyed by the directory's path under the application's own
33
+ * source root, mapped to the module id (feature 080, T040b).
34
+ *
35
+ * There is one, and it is `_lifecycle` at `src/lifecycle/`. D-160.11 keeps the
36
+ * lifecycle subsystem out of the package sweep — it is the platform's operator
37
+ * half — so it is the one registered module whose sources the host owns, and
38
+ * the directory is deliberately not named after its id (a `src/_lifecycle/`
39
+ * would make `backend/src` itself a module root, see
40
+ * `scripts/lib/module-roots.ts`). Nothing here is written down: the map is
41
+ * derived per run from the manifest index's own `manifestPath`, which is the
42
+ * artefact that records where each module's manifest actually is.
43
+ */
44
+ export type HostResidentModules = ReadonlyMap<string, string>;
45
+ /** The default: every path attributes by its `modules/<id>/` segment alone. */
46
+ export declare const NO_HOST_RESIDENT_MODULES: HostResidentModules;
47
+ /**
48
+ * The module a path belongs to, or `null` for a file outside the module tree.
49
+ *
50
+ * Reads the **first** `modules/<id>/` segment, so an overlay module under
51
+ * `apps/<deployment>/modules/<id>/` resolves to its own id rather than to the
52
+ * deployment. `node_modules/` cannot match: the segment must start the path or
53
+ * follow a separator.
54
+ *
55
+ * `hostResident` is the second answer, and it is a **map rather than a shape**
56
+ * because there is no shape to read: a host-resident module's directory says
57
+ * nothing about which module it is, so the id comes from the index. Omitting it
58
+ * is not a neutral default — a file the walk read and attributed to `null` is a
59
+ * file every consumer treats as *not a module's*, which is the check judging
60
+ * nothing and reporting clean (issue #215 one layer in). Every caller that
61
+ * attributes inside its analysis therefore takes it from the layout and passes
62
+ * it down; the default exists for a fixture that has no such module.
63
+ *
64
+ * The comparison is made on the path's tail after the last `/src/`, so it
65
+ * answers the same for the three key shapes this repository uses — a layout
66
+ * key, an absolute path, and the synthetic `/src/<key>` several checks build —
67
+ * and cannot be fooled by a directory of that name deeper in another tree
68
+ * (`packages/platform/src/kernel/lifecycle/` is the live example).
69
+ */
70
+ export declare function moduleIdOf(path: string, hostResident?: HostResidentModules): string | null;
71
+ /** Registered modules the walk produced no file for. */
72
+ export declare function modulesWithoutSources(input: ModulePopulationInput): string[];
73
+ /**
74
+ * What the index expected of the walk and what the walk delivered, in the shape
75
+ * `scripts/lib/read-size.ts` prints (issue #244).
76
+ *
77
+ * The floor below already computes both numbers to decide whether to refuse;
78
+ * returning them is what lets the check *print* them, so a run that was never
79
+ * short still says which population it covered. A number nothing prints is a
80
+ * number nobody can see going wrong.
81
+ */
82
+ export interface ModulePopulationCoverage {
83
+ readonly source: 'manifest-index';
84
+ /** Registered modules this check is expected to read, exclusions removed. */
85
+ readonly expected: number;
86
+ /** How many of them the walk produced at least one file for. */
87
+ readonly covered: number;
88
+ }
89
+ /** The two numbers, without the refusal — the same derivation, printed. */
90
+ export declare function modulePopulationCoverage(input: ModulePopulationInput): ModulePopulationCoverage;
91
+ /**
92
+ * The sentence a check prints before `process.exit(2)`, or `null` when the walk
93
+ * covered every module the index registers.
94
+ *
95
+ * An index that registers nothing is refused too: "no module is registered" and
96
+ * "the index did not load" would otherwise be the same answer, and the second
97
+ * silently turns the floor off while looking like a normal run.
98
+ */
99
+ export declare function vacuousModulePopulation(input: ModulePopulationInput): string | null;
100
+ /**
101
+ * Ids of every module the generated index at `indexPath` registers.
102
+ *
103
+ * Throws `ManifestIndexUnreadableError` when the index is missing or empty; a
104
+ * caller turns that into exit 2, never into a pass.
105
+ */
106
+ export declare function loadRegisteredModuleIds(indexPath: string): Promise<readonly string[]>;
107
+ /**
108
+ * The CLI half: read the index, compare it against what the walk produced, and
109
+ * exit 2 rather than report on a residue.
110
+ *
111
+ * One function rather than nine copies, because nine copies of an exit-2 guard
112
+ * is nine chances to write the one that returns instead — and a check whose
113
+ * guard is subtly wrong is invisible by construction, since it reports green
114
+ * either way.
115
+ *
116
+ * Returns the coverage it just enforced, so the caller can hand it to
117
+ * `reportReadSize` and print the corroboration rather than only its own count
118
+ * of files (issue #244).
119
+ */
120
+ export declare function refuseVacuousModulePopulation(input: {
121
+ /** The check's log prefix, e.g. `[subscribe-seam]`. */
122
+ readonly prefix: string;
123
+ /** The generated manifest index, as `lib/module-roots.ts` resolved it. */
124
+ readonly manifestIndexPath: string;
125
+ readonly files: readonly string[];
126
+ readonly excluded?: readonly string[];
127
+ readonly moduleIdOf?: (path: string) => string | null;
128
+ }): Promise<ModulePopulationCoverage>;
129
+ //# sourceMappingURL=module-population.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-population.d.ts","sourceRoot":"","sources":["../../src/lib/module-population.ts"],"names":[],"mappings":"AAyCA,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAKvE,MAAM,WAAW,qBAAqB;IACpC,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACvD;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9D,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,EAAE,mBAA+B,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,YAAY,GAAE,mBAA8C,GAC3D,MAAM,GAAG,IAAI,CAUf;AAED,wDAAwD;AACxD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAS5E;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,2EAA2E;AAC3E,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,qBAAqB,GAC3B,wBAAwB,CAQ1B;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,GAAG,IAAI,CAcnF;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAE3F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACvD,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAwBpC"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * "Did the walk read the module tree, or a residue of it?" — the one derivation
3
+ * (issue #215).
4
+ *
5
+ * Fourteen of the twenty `check-*` scripts are filesystem walks whose whole
6
+ * population is `backend/src/modules`: 1364 of the 1469 `.ts` files under
7
+ * `backend/src` live there. Eight of them guarded that walk with
8
+ * `files.length === 0`, which is the wrong predicate. It catches only the case
9
+ * where the walk finds **nothing at all**; it cannot catch the case that
10
+ * actually happens when the tree moves, which is that the walk finds the
11
+ * remaining 105 files — `src/kernel`, `src/db`, `src/apps`, `src/http` — reads
12
+ * them, finds nothing wrong in them, and reports a clean tree. That is issue
13
+ * #113's failure mode, in eight checks at once, at the moment the repository is
14
+ * most disturbed.
15
+ *
16
+ * So the guard has to assert the walk found **the population it expects**, not
17
+ * merely a non-empty list. The expectation is derived from the generated
18
+ * manifest index, never written down: a hand-written count is a copy of a
19
+ * derived fact and goes stale in silence, which is what D-100 was written
20
+ * about. Two properties fall out of reading it, and the check needs both:
21
+ *
22
+ * 1. **The index is a path that must resolve.** Where it lives is
23
+ * `lib/module-roots.ts`' answer since feature 080's T040a — searched for
24
+ * over the workspace members rather than joined onto a source root — so a
25
+ * tree that moved without it is an error rather than an empty result, and
26
+ * the whole module directory going missing is refused before a single file
27
+ * is analysed.
28
+ * 2. **Every module it registers must contribute a source.** A *partial*
29
+ * move — the one a package split actually performs, index regenerated and
30
+ * pointing at the new home — leaves the index readable and the walk
31
+ * short. Only a per-module floor sees that, and it sees it without
32
+ * anybody choosing a number.
33
+ *
34
+ * The pure half takes the file list and the ids, so a red proof can drive it
35
+ * from a residue the tree does not contain, entering where a real run enters
36
+ * (issues #113, #130). {@link loadRegisteredModuleIds} is the only part that
37
+ * knows where the index lives, and it is `switchable-modules.ts`' reader — the
38
+ * two derivations cannot disagree about which modules exist.
39
+ */
40
+ import { loadManifestActivations } from './switchable-modules.js';
41
+ export { ManifestIndexUnreadableError } from './switchable-modules.js';
42
+ /** How many missing ids the message names before it counts the rest. */
43
+ const NAMED_IN_MESSAGE = 8;
44
+ /** The default: every path attributes by its `modules/<id>/` segment alone. */
45
+ export const NO_HOST_RESIDENT_MODULES = new Map();
46
+ /**
47
+ * The module a path belongs to, or `null` for a file outside the module tree.
48
+ *
49
+ * Reads the **first** `modules/<id>/` segment, so an overlay module under
50
+ * `apps/<deployment>/modules/<id>/` resolves to its own id rather than to the
51
+ * deployment. `node_modules/` cannot match: the segment must start the path or
52
+ * follow a separator.
53
+ *
54
+ * `hostResident` is the second answer, and it is a **map rather than a shape**
55
+ * because there is no shape to read: a host-resident module's directory says
56
+ * nothing about which module it is, so the id comes from the index. Omitting it
57
+ * is not a neutral default — a file the walk read and attributed to `null` is a
58
+ * file every consumer treats as *not a module's*, which is the check judging
59
+ * nothing and reporting clean (issue #215 one layer in). Every caller that
60
+ * attributes inside its analysis therefore takes it from the layout and passes
61
+ * it down; the default exists for a fixture that has no such module.
62
+ *
63
+ * The comparison is made on the path's tail after the last `/src/`, so it
64
+ * answers the same for the three key shapes this repository uses — a layout
65
+ * key, an absolute path, and the synthetic `/src/<key>` several checks build —
66
+ * and cannot be fooled by a directory of that name deeper in another tree
67
+ * (`packages/platform/src/kernel/lifecycle/` is the live example).
68
+ */
69
+ export function moduleIdOf(path, hostResident = NO_HOST_RESIDENT_MODULES) {
70
+ const normalised = path.split('\\').join('/');
71
+ const match = /(?:^|\/)modules\/([^/]+)\//.exec(normalised);
72
+ if (match)
73
+ return match[1] ?? null;
74
+ const marker = normalised.lastIndexOf('/src/');
75
+ const tail = marker === -1 ? normalised : normalised.slice(marker + '/src/'.length);
76
+ for (const [directory, moduleId] of hostResident) {
77
+ if (tail === directory || tail.startsWith(`${directory}/`))
78
+ return moduleId;
79
+ }
80
+ return null;
81
+ }
82
+ /** Registered modules the walk produced no file for. */
83
+ export function modulesWithoutSources(input) {
84
+ const excluded = new Set(input.excluded ?? []);
85
+ const idOf = input.moduleIdOf ?? moduleIdOf;
86
+ const seen = new Set();
87
+ for (const file of input.files) {
88
+ const id = idOf(file);
89
+ if (id !== null)
90
+ seen.add(id);
91
+ }
92
+ return input.registered.filter((id) => !excluded.has(id) && !seen.has(id)).sort();
93
+ }
94
+ /** The two numbers, without the refusal — the same derivation, printed. */
95
+ export function modulePopulationCoverage(input) {
96
+ const excluded = new Set(input.excluded ?? []);
97
+ const expected = input.registered.filter((id) => !excluded.has(id)).length;
98
+ return {
99
+ source: 'manifest-index',
100
+ expected,
101
+ covered: expected - modulesWithoutSources(input).length,
102
+ };
103
+ }
104
+ /**
105
+ * The sentence a check prints before `process.exit(2)`, or `null` when the walk
106
+ * covered every module the index registers.
107
+ *
108
+ * An index that registers nothing is refused too: "no module is registered" and
109
+ * "the index did not load" would otherwise be the same answer, and the second
110
+ * silently turns the floor off while looking like a normal run.
111
+ */
112
+ export function vacuousModulePopulation(input) {
113
+ if (input.registered.length === 0) {
114
+ return 'the manifest index registers no module — refusing to report a vacuous pass';
115
+ }
116
+ const missing = modulesWithoutSources(input);
117
+ if (missing.length === 0)
118
+ return null;
119
+ const named = missing.slice(0, NAMED_IN_MESSAGE).join(', ');
120
+ const rest = missing.length > NAMED_IN_MESSAGE ? `, +${missing.length - NAMED_IN_MESSAGE} more` : '';
121
+ return (`the walk read ${input.files.length} file(s) but produced none for ` +
122
+ `${missing.length} of the ${input.registered.length} registered modules ` +
123
+ `(${named}${rest}) — it is reading a residue of the module tree, not the tree; ` +
124
+ 'refusing to report a vacuous pass');
125
+ }
126
+ /**
127
+ * Ids of every module the generated index at `indexPath` registers.
128
+ *
129
+ * Throws `ManifestIndexUnreadableError` when the index is missing or empty; a
130
+ * caller turns that into exit 2, never into a pass.
131
+ */
132
+ export async function loadRegisteredModuleIds(indexPath) {
133
+ return (await loadManifestActivations(indexPath)).map((manifest) => manifest.id);
134
+ }
135
+ /**
136
+ * The CLI half: read the index, compare it against what the walk produced, and
137
+ * exit 2 rather than report on a residue.
138
+ *
139
+ * One function rather than nine copies, because nine copies of an exit-2 guard
140
+ * is nine chances to write the one that returns instead — and a check whose
141
+ * guard is subtly wrong is invisible by construction, since it reports green
142
+ * either way.
143
+ *
144
+ * Returns the coverage it just enforced, so the caller can hand it to
145
+ * `reportReadSize` and print the corroboration rather than only its own count
146
+ * of files (issue #244).
147
+ */
148
+ export async function refuseVacuousModulePopulation(input) {
149
+ let registered;
150
+ try {
151
+ registered = await loadRegisteredModuleIds(input.manifestIndexPath);
152
+ }
153
+ catch (error) {
154
+ console.error(`${input.prefix} the module index at ${input.manifestIndexPath} could not be read ` +
155
+ `(${String(error)}) — the expected population is derived from it, so there is ` +
156
+ 'nothing to compare the walk against; refusing to report a vacuous pass');
157
+ process.exit(2);
158
+ }
159
+ const population = {
160
+ registered,
161
+ files: input.files,
162
+ ...(input.excluded === undefined ? {} : { excluded: input.excluded }),
163
+ ...(input.moduleIdOf === undefined ? {} : { moduleIdOf: input.moduleIdOf }),
164
+ };
165
+ const reason = vacuousModulePopulation(population);
166
+ if (reason !== null) {
167
+ console.error(`${input.prefix} ${reason}`);
168
+ process.exit(2);
169
+ }
170
+ return modulePopulationCoverage(population);
171
+ }
172
+ //# sourceMappingURL=module-population.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-population.js","sourceRoot":"","sources":["../../src/lib/module-population.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAEvE,wEAAwE;AACxE,MAAM,gBAAgB,GAAG,CAAC,CAAC;AA+C3B,+EAA+E;AAC/E,MAAM,CAAC,MAAM,wBAAwB,GAAwB,IAAI,GAAG,EAAE,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,eAAoC,wBAAwB;IAE5D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,4BAA4B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACnC,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpF,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;QACjD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,qBAAqB,CAAC,KAA4B;IAChE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,IAAI,UAAU,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,EAAE,KAAK,IAAI;YAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACpF,CAAC;AAmBD,2EAA2E;AAC3E,MAAM,UAAU,wBAAwB,CACtC,KAA4B;IAE5B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3E,OAAO;QACL,MAAM,EAAE,gBAAgB;QACxB,QAAQ;QACR,OAAO,EAAE,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC,MAAM;KACxD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAA4B;IAClE,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,4EAA4E,CAAC;IACtF,CAAC;IACD,MAAM,OAAO,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,GAAG,gBAAgB,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACrG,OAAO,CACL,iBAAiB,KAAK,CAAC,KAAK,CAAC,MAAM,iCAAiC;QACpE,GAAG,OAAO,CAAC,MAAM,WAAW,KAAK,CAAC,UAAU,CAAC,MAAM,sBAAsB;QACzE,IAAI,KAAK,GAAG,IAAI,gEAAgE;QAChF,mCAAmC,CACpC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,SAAiB;IAC7D,OAAO,CAAC,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACnF,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,KAQnD;IACC,IAAI,UAA6B,CAAC;IAClC,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CACX,GAAG,KAAK,CAAC,MAAM,wBAAwB,KAAK,CAAC,iBAAiB,qBAAqB;YACjF,IAAI,MAAM,CAAC,KAAK,CAAC,8DAA8D;YAC/E,wEAAwE,CAC3E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,UAAU,GAA0B;QACxC,UAAU;QACV,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrE,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;KAC5E,CAAC;IACF,MAAM,MAAM,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACnD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,wBAAwB,CAAC,UAAU,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,337 @@
1
+ import type { AdminSurfaceLayout } from './admin-surfaces.js';
2
+ import { type WorkspaceFs } from './workspace-packages.js';
3
+ /** The file the composer generates and every module walk derives its floor from. */
4
+ export declare const MANIFEST_INDEX_FILENAME = "manifest-index.generated.ts";
5
+ /**
6
+ * Directories that are not this repository's own source and would either slow
7
+ * the search to no purpose or answer it with somebody else's copy.
8
+ *
9
+ * The same list the shell twin (`scripts/lib/module-root.sh`) prunes, kept in
10
+ * step with it by `test/unit/scripts/module-roots.test.ts`.
11
+ */
12
+ export declare const PRUNED_DIRECTORIES: readonly string[];
13
+ /** Raised when the module layout cannot be resolved; a caller turns it into exit 2. */
14
+ export declare class ModuleLayoutUnresolvableError extends Error {
15
+ readonly name = "ModuleLayoutUnresolvableError";
16
+ }
17
+ /** One place backend module sources live. */
18
+ export interface ModuleSourceRoot {
19
+ /** Absolute directory to walk. */
20
+ readonly directory: string;
21
+ /**
22
+ * The module every file under {@link directory} belongs to, or `null` when
23
+ * the directory holds several and attribution is read from the path.
24
+ */
25
+ readonly moduleId: string | null;
26
+ readonly origin: 'application' | 'workspace-package' | 'host-resident' | 'platform-resident';
27
+ }
28
+ export interface ModuleTreeLayout {
29
+ /** The checkout, fully resolved. */
30
+ readonly repoRoot: string;
31
+ /** The workspace member holding the manifest index — the application. */
32
+ readonly applicationRoot: string;
33
+ /** Its source root, derived from where the index sits. */
34
+ readonly srcRoot: string;
35
+ /** The generated manifest index, absolute. */
36
+ readonly manifestIndexPath: string;
37
+ /** Module ids that index registers. */
38
+ readonly registeredIds: readonly string[];
39
+ /** Every root holding module sources — application trees first, then packages. */
40
+ readonly moduleRoots: readonly ModuleSourceRoot[];
41
+ /** The per-deployment overlay tree (`<src>/apps`), which the index never lists. */
42
+ readonly overlayRoot: string;
43
+ /**
44
+ * The platform's own source directory, or `null` when this workspace has no
45
+ * member declaring `endora.type: "platform"` (every fixture tree).
46
+ *
47
+ * It is a root of its own because it is not the application's and not a
48
+ * module's: `packages/platform/src/{kernel,http,tenancy,commands,events}` is
49
+ * what `backend/src` reached relatively until the relocation, and what it now
50
+ * reaches through re-export shims. A check whose population *is* the platform
51
+ * refuses on `null` itself.
52
+ */
53
+ readonly platformRoot: string | null;
54
+ /**
55
+ * The npm name that platform publishes under — `null` on the same workspaces
56
+ * {@link ModuleTreeLayout.platformRoot} is `null` on.
57
+ *
58
+ * It is the other half of the same answer (feature 080, T060): a module in the
59
+ * application tree reaches the platform by relative path and a module in a
60
+ * package reaches it by this name, so a check whose population is *module
61
+ * reaches into the platform* needs both spellings or it loses the second set
62
+ * as the sweep converts them.
63
+ */
64
+ readonly platformPackageName: string | null;
65
+ /**
66
+ * Every directory a check that reads the whole application source tree must
67
+ * walk: the source root, the platform's, plus each package root — all three
68
+ * outside one another.
69
+ *
70
+ * The platform is here so that the twelve checks reading this keep the
71
+ * population they had before the relocation. Its five directories were under
72
+ * `src/` and every one of these walks covered them; leaving them out would
73
+ * have dropped six entity classifications from
74
+ * `check-entity-tenant-classification`, four repeating timers from
75
+ * `check:entry-scope` and the whole of `check:kernel-boundary`'s subject —
76
+ * each of which keeps printing a number and exiting 0, which is issue #215.
77
+ */
78
+ readonly sourceRoots: readonly string[];
79
+ /** Every directory a check that reads only module sources must walk. */
80
+ readonly moduleWalkRoots: readonly string[];
81
+ /** `modules/blog/x.ts` for the application, repo-relative for a package. */
82
+ readonly keyOf: (absolutePath: string) => string;
83
+ /** The same, with the application's own prefix: `src/modules/blog/x.ts`. */
84
+ readonly displayOf: (absolutePath: string) => string;
85
+ /**
86
+ * {@link ModuleTreeLayout.keyOf} inverted — the absolute path a key names.
87
+ *
88
+ * The two bases a key can be relative to are tried in the order that keeps
89
+ * the application's own spelling authoritative, because that is the one a
90
+ * ledger and a message already use.
91
+ */
92
+ readonly absolutePathOf: (key: string) => string;
93
+ /** The module a path belongs to, over every root, or `null`. */
94
+ readonly moduleIdOfPath: (absolutePath: string) => string | null;
95
+ /**
96
+ * Every module's own directory, by id — the enumeration half of
97
+ * {@link ModuleTreeLayout.moduleDirectoryOf}.
98
+ *
99
+ * A walk that has to visit *each* module (a bundle sweep, an i18n reconcile)
100
+ * reads this instead of listing a directory, because listing one answers for
101
+ * one root and there is now more than one.
102
+ */
103
+ readonly moduleDirectories: ReadonlyMap<string, string>;
104
+ /**
105
+ * The directory holding a module's own sources, or `null`.
106
+ *
107
+ * For an application root it is `<root>/<id>`; for a package it is the
108
+ * member directory. What it does **not** answer is where inside a package a
109
+ * named file lives — a package declares its entry points in its `exports`
110
+ * map, and reading that is the host package's business (T042a), not this
111
+ * one's. A caller that needs `backend.ts` therefore asks for the directory
112
+ * and looks in the two places a workspace member can keep it.
113
+ */
114
+ readonly moduleDirectoryOf: (moduleId: string) => string | null;
115
+ /**
116
+ * The npm name each module package publishes, mapped to the module id it
117
+ * declares — `@endora-commerce/mod-blog` → `blog`.
118
+ *
119
+ * It exists because a bare specifier can now reach a module, which is a thing
120
+ * this repository had never been able to say. `check-module-boundary`'s
121
+ * predicate 1 resolved relative specifiers only, on the stated premise that
122
+ * "there is no `@endora-commerce/mod-*` package yet"; !910 falsified that
123
+ * premise and the premise stayed. `blog` shipped with no ledger shard, so the
124
+ * hole cost nothing and showed nothing.
125
+ *
126
+ * The direction is name → id, and it is the only direction that is safe to
127
+ * key a ledger on (D-142): the npm name is npm's namespace, the manifest id is
128
+ * identity of record, and an edge that was `../blog/entities/blog-post.entity`
129
+ * before the move has to stay one key after it. Nothing here reads the name's
130
+ * spelling — a `mod-` prefix rule would be a derived fact written down (D-100)
131
+ * and would answer wrongly for the first package that is not named that way.
132
+ */
133
+ readonly modulePackageNames: ReadonlyMap<string, string>;
134
+ /**
135
+ * The directories of every **host-resident** module, keyed as
136
+ * {@link ModuleTreeLayout.keyOf} keys them, mapped to the module id.
137
+ *
138
+ * It is what a check hands to `moduleIdOf` / `moduleOf` so that its analysis
139
+ * attributes those files to their module. Empty on a tree that has none, in
140
+ * which case every attributor answers exactly as it did before this existed.
141
+ */
142
+ readonly hostResidentModules: ReadonlyMap<string, string>;
143
+ /**
144
+ * The admin application's module surfaces, or `null` when this workspace has
145
+ * no member declaring the source alias (feature 091, FR-017).
146
+ *
147
+ * It is a field of its own and deliberately **not** a member of
148
+ * {@link ModuleTreeLayout.moduleWalkRoots}: fifteen checks read that list and
149
+ * every one of them would acquire a population of `.ts`/`.tsx` files under
150
+ * `admin/` that it was never written to judge. `check:module-boundary` is the
151
+ * one check FR-017 names, and it is the one that calls this.
152
+ *
153
+ * **A function, and awaited, because the derivation parses TypeScript.**
154
+ * `admin-surfaces.ts` imports the compiler — the route table and the nav are
155
+ * read as AST nodes, not as text — and every consumer of this layout would
156
+ * otherwise load it. `test/helpers/lock-claims-check-fixture.ts` builds a
157
+ * spawnable tree out of a named list of libs and no `node_modules`, so an
158
+ * eager import there is `ERR_MODULE_NOT_FOUND` for `typescript` and every
159
+ * proof in that file fails for a reason that has nothing to do with a lock
160
+ * claim — measured, six of them.
161
+ *
162
+ * `null` is the tree with no frontend, and it is the behaviour that shipped.
163
+ * It is not a silent floor: `check:module-boundary` refuses a run whose
164
+ * ledger holds admin keys and whose layout answered `null` here.
165
+ *
166
+ * Since feature 091's Phase 5 it no longer answers `null` for an admin
167
+ * application whose module surfaces have all moved into their packages —
168
+ * that is {@link AdminSurfaceLayout.moduleRoot} being `null`, which is a
169
+ * measurement rather than a refusal (R16).
170
+ */
171
+ readonly adminSurfaces: () => Promise<AdminSurfaceLayout | null>;
172
+ /**
173
+ * Why {@link ModuleTreeLayout.adminSurfaces} answered `null`, or `null` when
174
+ * it did not (feature 091, Phase 5 T2; `admin-kit-surface.md` §7.3 R17).
175
+ *
176
+ * `resolveAdminSurfaces` refuses for four distinct causes — no member
177
+ * declares the alias, two do, the alias target is not on disk, and `App.tsx`
178
+ * or `components/AppShell.tsx` could not be read — and every one of them used
179
+ * to arrive at a caller as the same bare `null`, whereupon the caller printed
180
+ * a sentence of its own choosing. Measured: the tree refused on the module
181
+ * root and both callers reported the alias, which sends a reader to repair a
182
+ * file that is correct.
183
+ *
184
+ * **The reason travels with the answer.** It is memoised on the same call, so
185
+ * the two accessors cannot come to disagree, and it is non-null *exactly*
186
+ * when the layout is `null`. A check printing an admin refusal prints this
187
+ * string; the only case it may word itself is a workspace with no frontend at
188
+ * all, which is what the string then says.
189
+ */
190
+ readonly adminSurfacesRefusal: () => Promise<string | null>;
191
+ }
192
+ /**
193
+ * The nearest ancestor of `from` that declares a pnpm workspace.
194
+ *
195
+ * Nearest, so a worktree parked *inside* the main tree — which is where this
196
+ * repository's agents work — answers with itself rather than with its host.
197
+ * This is the same judgement `scripts/workspace-resolution.ts` makes, and the
198
+ * shell twin makes it through the `.git` marker instead, because a sourced
199
+ * library cannot assume a node toolchain.
200
+ */
201
+ export declare function findRepoRoot(from: string): string | null;
202
+ /**
203
+ * The one manifest index this repository owns.
204
+ *
205
+ * Searched over the workspace members rather than under a named source root: a
206
+ * search rooted at `backend/src` would answer "gone" for an index that merely
207
+ * moved one level up, which is the event this whole file exists for.
208
+ */
209
+ export declare function findManifestIndex(repoRoot: string, fs?: WorkspaceFs): string;
210
+ /**
211
+ * The application's source root: the index's ancestor that is an immediate
212
+ * child of the workspace member holding it.
213
+ *
214
+ * `backend/src/modules/_lifecycle/<index>` and `backend/src/<index>` both
215
+ * answer `backend/src`, which is what makes the owner's ruling about where the
216
+ * index lives a change this derivation does not have to be told about.
217
+ */
218
+ export declare function sourceRootOfIndex(indexPath: string, memberDir: string): string;
219
+ /**
220
+ * Application module roots: the parents of registered-id directories that hold
221
+ * a `manifest.ts`.
222
+ *
223
+ * Both halves of that predicate are load-bearing. The id filter is what keeps
224
+ * an overlay tree (`src/apps/<deployment>/modules/<id>`) and the test
225
+ * fixtures' module-shaped directories out — neither is in the bare-core index.
226
+ * The `manifest.ts` filter is what keeps a directory that merely shares a
227
+ * module's name out: `test/unit/orders` is not a module root's child, and a
228
+ * derivation that took the name alone would say it was.
229
+ */
230
+ export declare function applicationModuleRoots(srcRoot: string, registered: ReadonlySet<string>): readonly string[];
231
+ /**
232
+ * The module roots the two derivations above cannot see: a module whose sources
233
+ * the **host application** owns (feature 080, T040b).
234
+ *
235
+ * There is one, `_lifecycle`, and it is one by D-160.11 — the lifecycle
236
+ * subsystem is the platform's operator half, so it never became a package the
237
+ * way the other 66 modules did. It is still a registered module with a
238
+ * manifest, permissions, an activation declaration and its own i18n bundles, so
239
+ * every module walk has to keep reading it; what changed is only where its
240
+ * directory sits.
241
+ *
242
+ * It cannot be found the way {@link applicationModuleRoots} finds a module,
243
+ * because that predicate is *"a directory named after a registered id"* and
244
+ * this directory is deliberately **not**: a `src/_lifecycle/` would make
245
+ * `backend/src` itself a module root, and every kernel, `db/` and `http/` file
246
+ * under it a module's source with no module to attribute it to. So it is read
247
+ * from the index's own `manifestPath` — the artefact that already records where
248
+ * each module's manifest is, for all three origins — and a module whose
249
+ * manifest sits under the application source root but is not an immediate child
250
+ * of a module root is one of these.
251
+ *
252
+ * Nothing is written down and the derivation fails closed in both directions
253
+ * (D-100, issue #215). A module whose directory disappeared cannot arrive here
254
+ * as "host-resident": its manifest specifier would resolve to nothing and the
255
+ * index would not import at all, which is exit 2 at the reader. And a candidate
256
+ * that is the source root itself, or an ancestor of a root already found, is
257
+ * refused rather than walked — a root that swallows the tree reports every file
258
+ * in it as one module's.
259
+ */
260
+ export declare function hostResidentModuleRoots(srcRoot: string, found: readonly ModuleSourceRoot[], manifestPaths: ReadonlyMap<string, string>): ModuleSourceRoot[];
261
+ /**
262
+ * Module roots inside the **platform package** (feature 080, D-160.11's second
263
+ * half).
264
+ *
265
+ * `_lifecycle` moved from `backend/src/lifecycle/` into
266
+ * `packages/platform/src/lifecycle/`, which is neither an application module
267
+ * root nor a module package: the platform declares `endora.type: "platform"`,
268
+ * so `declaredModuleId` answers `null` for it and the package half of the
269
+ * derivation never sees the module inside. Without this the one registered
270
+ * module living there produces no file for any module walk and the #215 floor
271
+ * refuses all sixteen of them — the correct failure, and not a useful one.
272
+ *
273
+ * **It cannot be derived from the index's `manifestPath` the way
274
+ * {@link hostResidentModuleRoots} is**, and that is a fact about the package
275
+ * rather than a shortcut taken here. A platform-resident module is imported by
276
+ * the generated index at the package's **built** file — the host publishes five
277
+ * subpaths and no more (D-160.7), and naming the source would evaluate the
278
+ * platform twice — so `manifestPath` resolves under `dist/`, which is where the
279
+ * module's i18n bundles are and is not where its sources are. Mapping one to
280
+ * the other would be a `dist`↔`src` convention written into a derivation
281
+ * (D-100), and the package's own emit layout is free to change it.
282
+ *
283
+ * So the module is found by the **same marker core discovery uses** — a
284
+ * directory holding a `manifest.ts` that declares a registered id — with the id
285
+ * read out of the manifest rather than off the directory name, because
286
+ * `_lifecycle` deliberately lives in `lifecycle/`: a directory named after a
287
+ * registered id makes its *parent* a module root, and `src/_lifecycle/` would
288
+ * make the whole platform source root one.
289
+ */
290
+ export declare function platformResidentModuleRoots(platformRoot: string | null, found: readonly ModuleSourceRoot[], registered: ReadonlySet<string>): ModuleSourceRoot[];
291
+ /**
292
+ * The whole layout, resolved once.
293
+ *
294
+ * Async because the registered ids come out of the generated index, which is a
295
+ * TypeScript module the checks import rather than a file they parse — the same
296
+ * reader `lib/switchable-modules.ts` uses, so the two derivations cannot
297
+ * disagree about which modules exist.
298
+ */
299
+ export declare function resolveModuleLayout(from?: string, fs?: WorkspaceFs): Promise<ModuleTreeLayout>;
300
+ /**
301
+ * The CLI half: resolve the layout, or print the refusal and exit 2.
302
+ *
303
+ * One function rather than a copy per check, for the reason
304
+ * `refuseVacuousModulePopulation` is one function: a copy per check is a chance
305
+ * per check to write the one that returns instead of exiting, and a check whose
306
+ * guard is subtly wrong is invisible by construction.
307
+ */
308
+ export declare function requireModuleLayout(prefix: string): Promise<ModuleTreeLayout>;
309
+ /**
310
+ * Does this source file compose a module — i.e. is it the module's entry point?
311
+ *
312
+ * **The marker, never a filename** (feature 080, T040b). A module in the
313
+ * application's tree keeps `registerModule` in `backend.ts`; a module package
314
+ * keeps it wherever its `exports` map's `./backend` subpath leads, which for
315
+ * both packages in this repository is `src/backend/index.ts`. A predicate
316
+ * spelled as a filename therefore answers `false` for a packaged module, and
317
+ * the answer is not merely incomplete — it is fail-*open* at the place it is
318
+ * asked. `check-port-dependencies` matched `'/backend.ts'` and so could not see
319
+ * a packaged module's `di.providePort` calls: every consumer of one of those
320
+ * ports read as *resolving an ungated registration*, and was told to write an
321
+ * absent-owner policy for a gate that was right there. `blog` hid it by owning
322
+ * no port another module resolves; `quote_requests` owns two, resolved by six
323
+ * modules, and reported six findings the moment it moved.
324
+ *
325
+ * One expression, shared by `generate-composer.ts` — which locates a module's
326
+ * entry point this way for both origins — and by every check that needs the
327
+ * same file. A check whose decision exists in two places can go half-missing
328
+ * without either red proof noticing.
329
+ *
330
+ * It reads the **export**, not an import or a call, so a file that merely
331
+ * mentions `registerModule` is not one; and it does not follow a re-export, so
332
+ * a barrel that forwards `registerModule` from a neighbour is not recognised
333
+ * here. The composer refuses a package with zero or two such files with a
334
+ * message that says so, which is where that shape is caught.
335
+ */
336
+ export declare function declaresRegisterModule(source: string): boolean;
337
+ //# sourceMappingURL=module-roots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-roots.d.ts","sourceRoot":"","sources":["../../src/lib/module-roots.ts"],"names":[],"mappings":"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"}