@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 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/new-module/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * `ModuleScaffoldSpec` — the author's answers, normalised once, before anything
3
+ * is written (`specs/089-endora-cli-module-scaffold/data-model.md` §1).
4
+ *
5
+ * Every emitted file is a function of this one record, which is what stops two
6
+ * emitted files disagreeing about what the module is: the permission code in
7
+ * `routes.admin.ts`, in `src/manifest.ts` and in both i18n bundles is one value
8
+ * read three times rather than three values written three times. That
9
+ * disagreement is the failure mode a hand-written module has, and it is silent —
10
+ * `check:action-route-permissions` exists because two shipped modules declared a
11
+ * real permission code against a route that enforced a different real one.
12
+ *
13
+ * **It deliberately carries nothing that appears in `package.json`.** The layer
14
+ * decisions are expressed as *directories that exist*, and the platform's
15
+ * manifest generator reads the directories; a field here for `exports` or
16
+ * `peerDependencies` would be the second author `module-scaffold-output.md` §2
17
+ * exists to prevent.
18
+ */
19
+ import { defineModuleManifest, type AdminNavSectionName, type KnownIconName } from '@endora-commerce/contracts';
20
+ /** A refusal the author can act on: exit 1, and nothing is written. */
21
+ export declare class ScaffoldInputError extends Error {
22
+ readonly name = "ScaffoldInputError";
23
+ }
24
+ /** An input the command could not read: exit 2. */
25
+ export declare class ScaffoldHostError extends Error {
26
+ readonly name = "ScaffoldHostError";
27
+ }
28
+ export interface ScaffoldPermission {
29
+ readonly code: string;
30
+ readonly label: string;
31
+ }
32
+ export interface ScaffoldAction {
33
+ readonly id: string;
34
+ /** The admin SPA route the palette entry opens. */
35
+ readonly route: string;
36
+ }
37
+ export type ScaffoldActivation = {
38
+ readonly kind: 'setting';
39
+ readonly settingCode: string;
40
+ } | {
41
+ readonly kind: 'non-deactivatable';
42
+ readonly reason: string;
43
+ };
44
+ /** Which tenant-scope decorator the emitted entity carries (Principle XI). */
45
+ export type TenantScope = 'org-scoped' | 'customer-scoped' | 'global';
46
+ export declare const TENANT_SCOPES: readonly TenantScope[];
47
+ /** The decorator each scope spells, as `@endora-commerce/platform/tenancy` exports it. */
48
+ export declare const TENANT_SCOPE_DECORATORS: Readonly<Record<TenantScope, string>>;
49
+ export interface ScaffoldLayers {
50
+ readonly entities: boolean;
51
+ readonly ports: boolean;
52
+ readonly worker: boolean;
53
+ readonly subscriber: boolean;
54
+ /**
55
+ * The sidebar section the emitted `src/admin/` layer joins, or `null` for a
56
+ * module with no admin surface at all.
57
+ *
58
+ * The section **is** the layer's presence, one field rather than a flag plus
59
+ * a nullable enum, because there is nothing the scaffold could default it to.
60
+ * A module may not invent a section (D-23: an invented heading is one nobody
61
+ * else can join), and where a screen belongs in an operator's sidebar is a
62
+ * product judgement the tool does not hold — so the flag that turns the layer
63
+ * on is the flag that carries the answer.
64
+ */
65
+ readonly admin: AdminNavSectionName | null;
66
+ }
67
+ export interface ModuleScaffoldSpec {
68
+ readonly id: string;
69
+ readonly name: string;
70
+ readonly description: string;
71
+ readonly dependencies: readonly string[];
72
+ readonly permissions: readonly ScaffoldPermission[];
73
+ readonly actions: readonly ScaffoldAction[];
74
+ readonly icon: KnownIconName;
75
+ readonly layers: ScaffoldLayers;
76
+ readonly tenantScope: TenantScope;
77
+ readonly activation: ScaffoldActivation;
78
+ /**
79
+ * `YYYYMMDDTHHmmss`, UTC — computed once for the whole run, so the migration
80
+ * file name, its class name and `src/migrations/index.ts` cannot disagree.
81
+ */
82
+ readonly migrationStamp: string;
83
+ }
84
+ /**
85
+ * The frozen historical prefix's watermark
86
+ * (`backend/src/db/migration-order.ts`'s `BASELINE_THROUGH`).
87
+ *
88
+ * A migration stamped at or below it is ordered by history rather than by its
89
+ * module's manifest `dependencies`, so `migration:new` clamps above it and so
90
+ * does this. The constant is this package's copy of a fact that repository owns,
91
+ * and it is a copy because the owner is an application this package may not
92
+ * import — `backend/test/unit/packages/cli-migration-identity.test.ts` holds the
93
+ * two to each other in both directions, so the copy cannot go stale in silence.
94
+ */
95
+ export declare const BASELINE_THROUGH = "20260801T000000";
96
+ /** `YYYYMMDDTHHmmss`, UTC, fixed width, literal `T` at index 8. */
97
+ export declare function formatStamp(date: Date): string;
98
+ /** The stamp a migration scaffolded now takes: never at or below the watermark. */
99
+ export declare function migrationStampFor(now: Date): string;
100
+ /** `_lifecycle` → `lifecycle`; the segment every derived name is built from. */
101
+ export declare function segmentOf(moduleId: string): string;
102
+ /** `quote_requests` → `quote-requests`. */
103
+ export declare function slugOf(moduleId: string): string;
104
+ /** `quote_requests` → `QuoteRequests`. */
105
+ export declare function pascalOf(moduleId: string): string;
106
+ /** `quote_requests` → `quoteRequests`. */
107
+ export declare function camelOf(moduleId: string): string;
108
+ /** `open-widgets` → `openWidgets`, the module-relative i18n key segment. */
109
+ export declare function camelOfActionId(actionId: string): string;
110
+ /** `@endora-commerce/` + `quote_requests` → `@endora-commerce/mod-quote-requests`. */
111
+ export declare function npmNameFor(scope: string, moduleId: string): string;
112
+ /**
113
+ * The admin API path an emitted screen is served at.
114
+ *
115
+ * `check:action-route-permissions` reconstructs the *entry route* of a palette
116
+ * action in three levels and takes the first that answers; level 1 is an exact
117
+ * registration at `/api/v1/admin` + the target. Emitting the route at exactly
118
+ * that path is what makes the action's declared permission the code the check
119
+ * finds, without the emitted module depending on a fallback level.
120
+ */
121
+ export declare function adminApiPathFor(route: string): string;
122
+ /** Every admin route the emitted module registers, deduplicated, in input order. */
123
+ export declare function adminRoutesOf(spec: ModuleScaffoldSpec): readonly string[];
124
+ /**
125
+ * The SPA route the emitted admin screen is mounted at, or `null` when there is
126
+ * no admin layer.
127
+ *
128
+ * It is the **first** route {@link adminRoutesOf} produces, which is what makes
129
+ * the three declarations agree without any of them restating the others: the
130
+ * palette action's `targetRoute`, the SPA route the screen is mounted at, and
131
+ * the server route `/api/v1/admin` + it that the screen reads and
132
+ * {@link gatingPermissionOf} gates. `check:action-route-permissions`
133
+ * reconstructs an action's entry route as exactly that concatenation, so an
134
+ * emitted module answers it with one value rather than with three that happen
135
+ * to match.
136
+ */
137
+ export declare function adminScreenRouteOf(spec: ModuleScaffoldSpec): string | null;
138
+ /** `nav.quoteRequests.label` — the module-relative key the sidebar entry resolves. */
139
+ export declare function navLabelKeyOf(spec: ModuleScaffoldSpec): string;
140
+ /** `QuoteRequestsPage` — the emitted screen's component and file name. */
141
+ export declare function pageComponentOf(spec: ModuleScaffoldSpec): string;
142
+ /**
143
+ * The permission every emitted admin route is gated by.
144
+ *
145
+ * The first one declared, and the scaffold says so rather than inventing a
146
+ * mapping the flags cannot express: `--permission` is repeatable and `--action`
147
+ * carries no permission of its own, so any other choice would be the tool
148
+ * deciding which of the author's codes gates which of the author's screens.
149
+ * `check:action-route-permissions` compares the action's `requiredPermission`
150
+ * against the gate on that action's own route, so the two must be this one
151
+ * value.
152
+ */
153
+ export declare function gatingPermissionOf(spec: ModuleScaffoldSpec): ScaffoldPermission | null;
154
+ /** The raw answers, before validation. Every field is optional exactly as argv is. */
155
+ export interface ScaffoldInput {
156
+ readonly id?: string | undefined;
157
+ readonly name?: string | undefined;
158
+ readonly description?: string | undefined;
159
+ readonly dependencies?: readonly string[] | undefined;
160
+ readonly permissions?: readonly string[] | undefined;
161
+ readonly actions?: readonly string[] | undefined;
162
+ readonly icon?: string | undefined;
163
+ readonly entities?: boolean | undefined;
164
+ readonly ports?: boolean | undefined;
165
+ readonly worker?: boolean | undefined;
166
+ readonly subscriber?: boolean | undefined;
167
+ readonly admin?: string | undefined;
168
+ readonly tenantScope?: string | undefined;
169
+ readonly activationSetting?: string | undefined;
170
+ readonly nonDeactivatable?: string | undefined;
171
+ readonly now?: Date | undefined;
172
+ }
173
+ /**
174
+ * Normalise and refuse. Every refusal here happens before the command writes its
175
+ * first byte (`cli-surface.md` §3.3): a partially written module type-checks
176
+ * against nothing, is in no registry, and makes the author's next command a
177
+ * manual clean-up.
178
+ */
179
+ export declare function buildScaffoldSpec(input: ScaffoldInput): ModuleScaffoldSpec;
180
+ /**
181
+ * The manifest object the emitted `src/manifest.ts` describes.
182
+ *
183
+ * Built here so `buildScaffoldSpec` can validate it through
184
+ * `defineModuleManifest`, and used by the emitter to render the source text —
185
+ * one shape, validated and rendered from the same value.
186
+ */
187
+ export declare function manifestObjectFor(spec: ModuleScaffoldSpec): Parameters<typeof defineModuleManifest>[0];
188
+ //# sourceMappingURL=spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../src/new-module/spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,404 @@
1
+ /**
2
+ * `ModuleScaffoldSpec` — the author's answers, normalised once, before anything
3
+ * is written (`specs/089-endora-cli-module-scaffold/data-model.md` §1).
4
+ *
5
+ * Every emitted file is a function of this one record, which is what stops two
6
+ * emitted files disagreeing about what the module is: the permission code in
7
+ * `routes.admin.ts`, in `src/manifest.ts` and in both i18n bundles is one value
8
+ * read three times rather than three values written three times. That
9
+ * disagreement is the failure mode a hand-written module has, and it is silent —
10
+ * `check:action-route-permissions` exists because two shipped modules declared a
11
+ * real permission code against a route that enforced a different real one.
12
+ *
13
+ * **It deliberately carries nothing that appears in `package.json`.** The layer
14
+ * decisions are expressed as *directories that exist*, and the platform's
15
+ * manifest generator reads the directories; a field here for `exports` or
16
+ * `peerDependencies` would be the second author `module-scaffold-output.md` §2
17
+ * exists to prevent.
18
+ */
19
+ import { AdminNavSectionNameSchema, KnownIconNameSchema, PERMISSION_CATALOGUE, defineModuleManifest, moduleIdRe, settingCodeRe, } from '@endora-commerce/contracts';
20
+ /** A refusal the author can act on: exit 1, and nothing is written. */
21
+ export class ScaffoldInputError extends Error {
22
+ name = 'ScaffoldInputError';
23
+ }
24
+ /** An input the command could not read: exit 2. */
25
+ export class ScaffoldHostError extends Error {
26
+ name = 'ScaffoldHostError';
27
+ }
28
+ export const TENANT_SCOPES = ['org-scoped', 'customer-scoped', 'global'];
29
+ /** The decorator each scope spells, as `@endora-commerce/platform/tenancy` exports it. */
30
+ export const TENANT_SCOPE_DECORATORS = {
31
+ 'org-scoped': 'OrgScoped',
32
+ 'customer-scoped': 'CustomerScoped',
33
+ global: 'GlobalEntity',
34
+ };
35
+ /**
36
+ * The frozen historical prefix's watermark
37
+ * (`backend/src/db/migration-order.ts`'s `BASELINE_THROUGH`).
38
+ *
39
+ * A migration stamped at or below it is ordered by history rather than by its
40
+ * module's manifest `dependencies`, so `migration:new` clamps above it and so
41
+ * does this. The constant is this package's copy of a fact that repository owns,
42
+ * and it is a copy because the owner is an application this package may not
43
+ * import — `backend/test/unit/packages/cli-migration-identity.test.ts` holds the
44
+ * two to each other in both directions, so the copy cannot go stale in silence.
45
+ */
46
+ export const BASELINE_THROUGH = '20260801T000000';
47
+ /** `YYYYMMDDTHHmmss`, UTC, fixed width, literal `T` at index 8. */
48
+ export function formatStamp(date) {
49
+ const pad = (value, width = 2) => String(value).padStart(width, '0');
50
+ return (`${pad(date.getUTCFullYear(), 4)}${pad(date.getUTCMonth() + 1)}${pad(date.getUTCDate())}` +
51
+ `T${pad(date.getUTCHours())}${pad(date.getUTCMinutes())}${pad(date.getUTCSeconds())}`);
52
+ }
53
+ /** The stamp a migration scaffolded now takes: never at or below the watermark. */
54
+ export function migrationStampFor(now) {
55
+ const stamp = formatStamp(now);
56
+ return stamp > BASELINE_THROUGH ? stamp : `${BASELINE_THROUGH.slice(0, 8)}T000001`;
57
+ }
58
+ /** `_lifecycle` → `lifecycle`; the segment every derived name is built from. */
59
+ export function segmentOf(moduleId) {
60
+ return moduleId.replace(/^_+/, '');
61
+ }
62
+ /** `quote_requests` → `quote-requests`. */
63
+ export function slugOf(moduleId) {
64
+ return segmentOf(moduleId).replace(/_/g, '-');
65
+ }
66
+ /** `quote_requests` → `QuoteRequests`. */
67
+ export function pascalOf(moduleId) {
68
+ return segmentOf(moduleId)
69
+ .split('_')
70
+ .filter((part) => part.length > 0)
71
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
72
+ .join('');
73
+ }
74
+ /** `quote_requests` → `quoteRequests`. */
75
+ export function camelOf(moduleId) {
76
+ const pascal = pascalOf(moduleId);
77
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
78
+ }
79
+ /** `open-widgets` → `openWidgets`, the module-relative i18n key segment. */
80
+ export function camelOfActionId(actionId) {
81
+ return actionId
82
+ .split('-')
83
+ .filter((part) => part.length > 0)
84
+ .map((part, index) => (index === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1)))
85
+ .join('');
86
+ }
87
+ /** `@endora-commerce/` + `quote_requests` → `@endora-commerce/mod-quote-requests`. */
88
+ export function npmNameFor(scope, moduleId) {
89
+ return `${scope}mod-${slugOf(moduleId)}`;
90
+ }
91
+ /**
92
+ * The admin API path an emitted screen is served at.
93
+ *
94
+ * `check:action-route-permissions` reconstructs the *entry route* of a palette
95
+ * action in three levels and takes the first that answers; level 1 is an exact
96
+ * registration at `/api/v1/admin` + the target. Emitting the route at exactly
97
+ * that path is what makes the action's declared permission the code the check
98
+ * finds, without the emitted module depending on a fallback level.
99
+ */
100
+ export function adminApiPathFor(route) {
101
+ return `/api/v1/admin${route}`;
102
+ }
103
+ /** Every admin route the emitted module registers, deduplicated, in input order. */
104
+ export function adminRoutesOf(spec) {
105
+ if (spec.permissions.length === 0)
106
+ return [];
107
+ const routes = spec.actions.map((action) => action.route);
108
+ if (routes.length === 0)
109
+ return [`/${slugOf(spec.id)}`];
110
+ return [...new Set(routes)];
111
+ }
112
+ /**
113
+ * The SPA route the emitted admin screen is mounted at, or `null` when there is
114
+ * no admin layer.
115
+ *
116
+ * It is the **first** route {@link adminRoutesOf} produces, which is what makes
117
+ * the three declarations agree without any of them restating the others: the
118
+ * palette action's `targetRoute`, the SPA route the screen is mounted at, and
119
+ * the server route `/api/v1/admin` + it that the screen reads and
120
+ * {@link gatingPermissionOf} gates. `check:action-route-permissions`
121
+ * reconstructs an action's entry route as exactly that concatenation, so an
122
+ * emitted module answers it with one value rather than with three that happen
123
+ * to match.
124
+ */
125
+ export function adminScreenRouteOf(spec) {
126
+ if (spec.layers.admin === null)
127
+ return null;
128
+ return adminRoutesOf(spec)[0] ?? null;
129
+ }
130
+ /** `nav.quoteRequests.label` — the module-relative key the sidebar entry resolves. */
131
+ export function navLabelKeyOf(spec) {
132
+ return `nav.${camelOf(spec.id)}.label`;
133
+ }
134
+ /** `QuoteRequestsPage` — the emitted screen's component and file name. */
135
+ export function pageComponentOf(spec) {
136
+ return `${pascalOf(spec.id)}Page`;
137
+ }
138
+ /**
139
+ * The permission every emitted admin route is gated by.
140
+ *
141
+ * The first one declared, and the scaffold says so rather than inventing a
142
+ * mapping the flags cannot express: `--permission` is repeatable and `--action`
143
+ * carries no permission of its own, so any other choice would be the tool
144
+ * deciding which of the author's codes gates which of the author's screens.
145
+ * `check:action-route-permissions` compares the action's `requiredPermission`
146
+ * against the gate on that action's own route, so the two must be this one
147
+ * value.
148
+ */
149
+ export function gatingPermissionOf(spec) {
150
+ return spec.permissions[0] ?? null;
151
+ }
152
+ const DEFAULT_ICON = 'Boxes';
153
+ /**
154
+ * Normalise and refuse. Every refusal here happens before the command writes its
155
+ * first byte (`cli-surface.md` §3.3): a partially written module type-checks
156
+ * against nothing, is in no registry, and makes the author's next command a
157
+ * manual clean-up.
158
+ */
159
+ export function buildScaffoldSpec(input) {
160
+ const id = (input.id ?? '').trim();
161
+ if (id.length === 0) {
162
+ throw new ScaffoldInputError('a module id is required: `endora new module <id> --name … --description …`.');
163
+ }
164
+ if (!moduleIdRe.test(id)) {
165
+ throw new ScaffoldInputError(`"${id}" is not a legal module id. It must match ${String(moduleIdRe)} — the id is the ` +
166
+ `directory name, the \`endora.id\` in package.json and the \`id\` in src/manifest.ts, ` +
167
+ `and those three have to agree.`);
168
+ }
169
+ const name = (input.name ?? '').trim();
170
+ if (name.length === 0) {
171
+ throw new ScaffoldInputError('--name is required. A module\'s human-readable name is a human judgement and this ' +
172
+ 'command does not invent one.');
173
+ }
174
+ const description = (input.description ?? '').trim();
175
+ if (description.length === 0) {
176
+ throw new ScaffoldInputError('--description is required. It is the one field of package.json the platform\'s ' +
177
+ 'manifest generator refuses to invent, and it is seeded from src/manifest.ts, so a ' +
178
+ 'module without one cannot get a package.json at all.');
179
+ }
180
+ const dependencies = (input.dependencies ?? []).map((entry) => entry.trim()).filter(Boolean);
181
+ for (const dependency of dependencies) {
182
+ if (!moduleIdRe.test(dependency)) {
183
+ throw new ScaffoldInputError(`--depends "${dependency}" is not a legal module id (${String(moduleIdRe)}).`);
184
+ }
185
+ if (dependency === id) {
186
+ throw new ScaffoldInputError(`--depends "${dependency}" is this module itself.`);
187
+ }
188
+ }
189
+ const permissions = (input.permissions ?? []).map((entry) => parsePermission(entry, id));
190
+ const seenPermissions = new Set();
191
+ for (const permission of permissions) {
192
+ if (seenPermissions.has(permission.code)) {
193
+ throw new ScaffoldInputError(`--permission "${permission.code}" is declared twice; one code has one label.`);
194
+ }
195
+ seenPermissions.add(permission.code);
196
+ }
197
+ const actions = (input.actions ?? []).map((entry) => parseAction(entry));
198
+ const seenActions = new Set();
199
+ for (const action of actions) {
200
+ if (seenActions.has(action.id)) {
201
+ throw new ScaffoldInputError(`--action "${action.id}" is declared twice.`);
202
+ }
203
+ seenActions.add(action.id);
204
+ }
205
+ if (actions.length > 0 && permissions.length === 0) {
206
+ throw new ScaffoldInputError('an --action needs a --permission: `check:action-route-permissions` compares the ' +
207
+ 'action\'s `requiredPermission` against the code enforced on that action\'s own route, ' +
208
+ 'and a module with no permission emits no gated route for it to find.');
209
+ }
210
+ const icon = parseIcon(input.icon);
211
+ const tenantScope = parseTenantScope(input.tenantScope);
212
+ const activation = parseActivation(input.activationSetting, input.nonDeactivatable, id);
213
+ const spec = {
214
+ id,
215
+ name,
216
+ description,
217
+ dependencies: [...dependencies].sort(),
218
+ permissions,
219
+ actions,
220
+ icon,
221
+ layers: {
222
+ entities: input.entities === true,
223
+ ports: input.ports === true,
224
+ worker: input.worker === true,
225
+ subscriber: input.subscriber === true,
226
+ admin: parseAdminSection(input.admin, permissions),
227
+ },
228
+ tenantScope,
229
+ activation,
230
+ migrationStamp: migrationStampFor(input.now ?? new Date()),
231
+ };
232
+ // The last refusal, and the one that costs nothing to keep honest: build the
233
+ // manifest this run is about to emit and hand it to the contract's own
234
+ // validator. Every rule about an id, a permission code, an action id, a
235
+ // translation key, an icon, a target route, a setting code and the
236
+ // activation union is enforced by the schema that will enforce it at boot,
237
+ // rather than by a second copy of those regexes here.
238
+ try {
239
+ defineModuleManifest(manifestObjectFor(spec));
240
+ }
241
+ catch (error) {
242
+ throw new ScaffoldInputError(`the manifest these inputs describe is not valid: ${error instanceof Error ? error.message : String(error)}`);
243
+ }
244
+ return spec;
245
+ }
246
+ /**
247
+ * The manifest object the emitted `src/manifest.ts` describes.
248
+ *
249
+ * Built here so `buildScaffoldSpec` can validate it through
250
+ * `defineModuleManifest`, and used by the emitter to render the source text —
251
+ * one shape, validated and rendered from the same value.
252
+ */
253
+ export function manifestObjectFor(spec) {
254
+ return {
255
+ id: spec.id,
256
+ name: spec.name,
257
+ description: spec.description,
258
+ version: '1.0.0',
259
+ dependencies: [...spec.dependencies],
260
+ activation: spec.activation.kind === 'setting'
261
+ ? { settingCode: spec.activation.settingCode, default: true }
262
+ : { nonDeactivatable: true, reason: spec.activation.reason },
263
+ i18n: { bundlesDir: 'i18n' },
264
+ ...(spec.permissions.length === 0
265
+ ? {}
266
+ : {
267
+ permissions: spec.permissions.map((permission) => ({
268
+ code: permission.code,
269
+ module: spec.id,
270
+ label: permission.label,
271
+ })),
272
+ }),
273
+ ...(spec.actions.length === 0
274
+ ? {}
275
+ : {
276
+ actions: spec.actions.map((action, index) => ({
277
+ id: action.id,
278
+ labelKey: `actions.${camelOfActionId(action.id)}.label`,
279
+ descriptionKey: `actions.${camelOfActionId(action.id)}.description`,
280
+ icon: spec.icon,
281
+ targetRoute: action.route,
282
+ requiredPermission: gatingPermissionOf(spec)?.code ?? '',
283
+ keywords: [spec.name.toLowerCase()],
284
+ weight: 100 + index,
285
+ })),
286
+ }),
287
+ };
288
+ }
289
+ function parsePermission(entry, moduleId) {
290
+ const separator = entry.indexOf('=');
291
+ if (separator <= 0) {
292
+ throw new ScaffoldInputError(`--permission "${entry}" must be written <code>=<label>, e.g. ` +
293
+ `--permission ${segmentOf(moduleId)}:read="View ${segmentOf(moduleId)}".`);
294
+ }
295
+ const code = entry.slice(0, separator).trim();
296
+ const label = entry.slice(separator + 1).trim();
297
+ if (code.length === 0 || label.length === 0) {
298
+ throw new ScaffoldInputError(`--permission "${entry}" needs both a code and a label; the label is what an operator ` +
299
+ `reads on /admin-roles.`);
300
+ }
301
+ if (PERMISSION_CATALOGUE.some((existing) => existing.code === code)) {
302
+ throw new ScaffoldInputError(`--permission "${code}" is already in the core PERMISSION_CATALOGUE. A shared code has ` +
303
+ `one owner; enforce it from your routes instead of declaring it a second time.`);
304
+ }
305
+ return { code, label };
306
+ }
307
+ function parseAction(entry) {
308
+ const separator = entry.indexOf('=');
309
+ if (separator <= 0) {
310
+ throw new ScaffoldInputError(`--action "${entry}" must be written <action-id>=<admin-route>, e.g. ` +
311
+ `--action open-widgets=/widgets.`);
312
+ }
313
+ const id = entry.slice(0, separator).trim();
314
+ const route = entry.slice(separator + 1).trim();
315
+ if (route.includes('?')) {
316
+ throw new ScaffoldInputError(`--action "${id}" targets "${route}", which carries a query string. A palette action ` +
317
+ `names a route, and the manifest's route pattern rejects one.`);
318
+ }
319
+ if (!route.startsWith('/')) {
320
+ throw new ScaffoldInputError(`--action "${id}" targets "${route}", which is not an admin route; it must start with "/".`);
321
+ }
322
+ return { id, route };
323
+ }
324
+ function parseIcon(icon) {
325
+ if (icon === undefined)
326
+ return DEFAULT_ICON;
327
+ const parsed = KnownIconNameSchema.safeParse(icon);
328
+ if (!parsed.success) {
329
+ throw new ScaffoldInputError(`--icon "${icon}" is not in KnownIconNameSchema. The admin maps those names to ` +
330
+ `components in admin/src/lib/admin-actions/icon-map.ts, so a name outside the schema ` +
331
+ `renders nothing.`);
332
+ }
333
+ return parsed.data;
334
+ }
335
+ /**
336
+ * The sidebar section the admin layer joins, or `null` when the author asked
337
+ * for no admin layer.
338
+ *
339
+ * Two refusals, and both are about something the emitted layer could not
340
+ * otherwise be right about:
341
+ *
342
+ * * **a section outside the published set.** `AdminNavSectionNameSchema` is
343
+ * closed and the admin's sidebar renders exactly its members, so an
344
+ * invented name is an entry that renders nowhere — worse than one that
345
+ * fails, which is why the contribution contract refuses both directions.
346
+ * * **no `--permission`.** A nav entry's `requiredPermission` must be the
347
+ * code enforced on its own destination, and the destination is this
348
+ * module's own admin route — which the scaffold emits only when it has a
349
+ * permission to gate it with. A layer emitted without one would be an
350
+ * ungated screen advertised in every operator's sidebar, and there is no
351
+ * code to invent for it.
352
+ */
353
+ function parseAdminSection(value, permissions) {
354
+ if (value === undefined)
355
+ return null;
356
+ const parsed = AdminNavSectionNameSchema.safeParse(value.trim());
357
+ if (!parsed.success) {
358
+ throw new ScaffoldInputError(`--admin "${value}" is not a sidebar section. It is one of ` +
359
+ `${AdminNavSectionNameSchema.options.join(', ')} — the set the admin's shell renders. ` +
360
+ `A module may not invent a section: an invented heading is one no other module can ` +
361
+ `join, so two features that belong together end up as two headings of one each.`);
362
+ }
363
+ if (permissions.length === 0) {
364
+ throw new ScaffoldInputError('--admin needs a --permission: a nav entry\'s `requiredPermission` is the code enforced ' +
365
+ 'on its own destination, and the destination is this module\'s admin route, which is ' +
366
+ 'emitted only when there is a permission to gate it with. Without one the emitted ' +
367
+ 'screen would be advertised in every operator\'s sidebar and gated by nothing.');
368
+ }
369
+ return parsed.data;
370
+ }
371
+ function parseTenantScope(value) {
372
+ if (value === undefined)
373
+ return 'org-scoped';
374
+ if (TENANT_SCOPES.includes(value))
375
+ return value;
376
+ throw new ScaffoldInputError(`--tenant-scope "${value}" is not one of ${TENANT_SCOPES.join(', ')}. Every persisted ` +
377
+ `entity carries exactly one tenant-scope decorator (Principle XI).`);
378
+ }
379
+ function parseActivation(settingCode, reason, moduleId) {
380
+ if (settingCode !== undefined && reason !== undefined) {
381
+ throw new ScaffoldInputError('--activation-setting and --non-deactivatable are the two forms of one declaration; ' +
382
+ 'exactly one of them is valid.');
383
+ }
384
+ if (reason !== undefined) {
385
+ if (reason.trim().length === 0) {
386
+ throw new ScaffoldInputError('--non-deactivatable needs a reason: it is the sentence an operator reads beside the ' +
387
+ 'locked control, and it is why the platform refuses to disable or uninstall the ' +
388
+ 'module at all.');
389
+ }
390
+ return { kind: 'non-deactivatable', reason: reason.trim() };
391
+ }
392
+ if (moduleId.startsWith('_')) {
393
+ throw new ScaffoldInputError(`"${moduleId}" is an \`_\`-prefixed id, which the platform reserves for its own ` +
394
+ `internals, and \`defineModuleManifest\` refuses every activation form for one except ` +
395
+ `\`nonDeactivatable\`. Pass --non-deactivatable "<reason>" — the reason is the sentence ` +
396
+ `an operator reads beside the locked control — or choose an id without the underscore.`);
397
+ }
398
+ const code = (settingCode ?? `${moduleId}.enabled`).trim();
399
+ if (!settingCodeRe.test(code)) {
400
+ throw new ScaffoldInputError(`--activation-setting "${code}" is not a legal setting code (${String(settingCodeRe)}).`);
401
+ }
402
+ return { kind: 'setting', settingCode: code };
403
+ }
404
+ //# sourceMappingURL=spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/new-module/spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,UAAU,EACV,aAAa,GAGd,MAAM,4BAA4B,CAAC;AAEpC,uEAAuE;AACvE,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACzB,IAAI,GAAG,oBAAoB,CAAC;CAC/C;AAED,mDAAmD;AACnD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACxB,IAAI,GAAG,mBAAmB,CAAC;CAC9C;AAoBD,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,YAAY,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;AAEjG,0FAA0F;AAC1F,MAAM,CAAC,MAAM,uBAAuB,GAA0C;IAC5E,YAAY,EAAE,WAAW;IACzB,iBAAiB,EAAE,gBAAgB;IACnC,MAAM,EAAE,cAAc;CACvB,CAAC;AAuCF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAElD,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,IAAU;IACpC,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC,EAAU,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACrF,OAAO,CACL,GAAG,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE;QACzF,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,CACtF,CAAC;AACJ,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,GAAS;IACzC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;AACrF,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,MAAM,CAAC,QAAgB;IACrC,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,OAAO,SAAS,CAAC,QAAQ,CAAC;SACvB,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,0CAA0C;AAC1C,MAAM,UAAU,OAAO,CAAC,QAAgB;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,QAAQ;SACZ,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACzF,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,QAAgB;IACxD,OAAO,GAAG,KAAK,OAAO,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,gBAAgB,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,aAAa,CAAC,IAAwB;IACpD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAwB;IACzD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5C,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACxC,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAAC,IAAwB;IACpD,OAAO,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;AACzC,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAC,IAAwB;IACtD,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;AACpC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAwB;IACzD,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACrC,CAAC;AAsBD,MAAM,YAAY,GAAkB,OAAO,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IACpD,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,kBAAkB,CAC1B,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,kBAAkB,CAC1B,IAAI,EAAE,6CAA6C,MAAM,CAAC,UAAU,CAAC,mBAAmB;YACtF,uFAAuF;YACvF,gCAAgC,CACnC,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,kBAAkB,CAC1B,oFAAoF;YAClF,8BAA8B,CACjC,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,kBAAkB,CAC1B,iFAAiF;YAC/E,oFAAoF;YACpF,sDAAsD,CACzD,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7F,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,kBAAkB,CAC1B,cAAc,UAAU,+BAA+B,MAAM,CAAC,UAAU,CAAC,IAAI,CAC9E,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;YACtB,MAAM,IAAI,kBAAkB,CAAC,cAAc,UAAU,0BAA0B,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACzF,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,IAAI,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,kBAAkB,CAC1B,iBAAiB,UAAU,CAAC,IAAI,8CAA8C,CAC/E,CAAC;QACJ,CAAC;QACD,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,kBAAkB,CAAC,aAAa,MAAM,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC7E,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,kBAAkB,CAC1B,kFAAkF;YAChF,wFAAwF;YACxF,sEAAsE,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAExF,MAAM,IAAI,GAAuB;QAC/B,EAAE;QACF,IAAI;QACJ,WAAW;QACX,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,EAAE;QACtC,WAAW;QACX,OAAO;QACP,IAAI;QACJ,MAAM,EAAE;YACN,QAAQ,EAAE,KAAK,CAAC,QAAQ,KAAK,IAAI;YACjC,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI;YAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI;YAC7B,UAAU,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI;YACrC,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC;SACnD;QACD,WAAW;QACX,UAAU;QACV,cAAc,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;KAC3D,CAAC;IAEF,6EAA6E;IAC7E,uEAAuE;IACvE,wEAAwE;IACxE,mEAAmE;IACnE,2EAA2E;IAC3E,sDAAsD;IACtD,IAAI,CAAC;QACH,oBAAoB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,IAAI,kBAAkB,CAC1B,oDACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAwB;IACxD,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QACpC,UAAU,EACR,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS;YAChC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE;YAC7D,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAa,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;QACzE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;QAC5B,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAC/B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBACjD,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,MAAM,EAAE,IAAI,CAAC,EAAE;oBACf,KAAK,EAAE,UAAU,CAAC,KAAK;iBACxB,CAAC,CAAC;aACJ,CAAC;QACN,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAC3B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC5C,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,QAAQ,EAAE,WAAW,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ;oBACvD,cAAc,EAAE,WAAW,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc;oBACnE,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,WAAW,EAAE,MAAM,CAAC,KAAK;oBACzB,kBAAkB,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;oBACxD,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnC,MAAM,EAAE,GAAG,GAAG,KAAK;iBACpB,CAAC,CAAC;aACJ,CAAC;KACP,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,QAAgB;IACtD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,kBAAkB,CAC1B,iBAAiB,KAAK,yCAAyC;YAC7D,gBAAgB,SAAS,CAAC,QAAQ,CAAC,eAAe,SAAS,CAAC,QAAQ,CAAC,IAAI,CAC5E,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,kBAAkB,CAC1B,iBAAiB,KAAK,iEAAiE;YACrF,wBAAwB,CAC3B,CAAC;IACJ,CAAC;IACD,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,kBAAkB,CAC1B,iBAAiB,IAAI,mEAAmE;YACtF,+EAA+E,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,kBAAkB,CAC1B,aAAa,KAAK,oDAAoD;YACpE,iCAAiC,CACpC,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,kBAAkB,CAC1B,aAAa,EAAE,cAAc,KAAK,oDAAoD;YACpF,8DAA8D,CACjE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,kBAAkB,CAC1B,aAAa,EAAE,cAAc,KAAK,yDAAyD,CAC5F,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,SAAS,CAAC,IAAwB;IACzC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IAC5C,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,kBAAkB,CAC1B,WAAW,IAAI,iEAAiE;YAC9E,sFAAsF;YACtF,kBAAkB,CACrB,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,iBAAiB,CACxB,KAAyB,EACzB,WAA0C;IAE1C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,yBAAyB,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,kBAAkB,CAC1B,YAAY,KAAK,2CAA2C;YAC1D,GAAG,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,wCAAwC;YACvF,oFAAoF;YACpF,gFAAgF,CACnF,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,kBAAkB,CAC1B,yFAAyF;YACvF,sFAAsF;YACtF,mFAAmF;YACnF,+EAA+E,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAyB;IACjD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IAC7C,IAAK,aAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAoB,CAAC;IACtF,MAAM,IAAI,kBAAkB,CAC1B,mBAAmB,KAAK,mBAAmB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB;QACrF,mEAAmE,CACtE,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,WAA+B,EAC/B,MAA0B,EAC1B,QAAgB;IAEhB,IAAI,WAAW,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACtD,MAAM,IAAI,kBAAkB,CAC1B,qFAAqF;YACnF,+BAA+B,CAClC,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,kBAAkB,CAC1B,sFAAsF;gBACpF,iFAAiF;gBACjF,gBAAgB,CACnB,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,kBAAkB,CAC1B,IAAI,QAAQ,qEAAqE;YAC/E,uFAAuF;YACvF,yFAAyF;YACzF,uFAAuF,CAC1F,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,QAAQ,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,kBAAkB,CAC1B,yBAAyB,IAAI,kCAAkC,MAAM,CAAC,aAAa,CAAC,IAAI,CACzF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The small text helpers the emitters share.
3
+ *
4
+ * They exist so a value the author typed is quoted **once**, in one place: a
5
+ * label carrying an apostrophe, a description carrying a backslash, and a
6
+ * reason carrying a newline are all things an author writes and a naive
7
+ * `'${value}'` turns into a file that does not parse.
8
+ */
9
+ /** A single-quoted TypeScript string literal, escaped. */
10
+ export declare function quote(value: string): string;
11
+ /** A JSON object rendered as a flat two-space-indented map, keys in the given order. */
12
+ export declare function flatJson(entries: readonly (readonly [string, string])[]): string;
13
+ /** `..`, `../..`, … — the path from a package directory back to the checkout root. */
14
+ export declare function rootPrefixFor(depth: number): string;
15
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/new-module/text.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,0DAA0D;AAC1D,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,CAGhF;AAED,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEnD"}