@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.
- package/LICENSE +21 -0
- package/README.md +37 -0
- package/dist/bin/endora.d.ts +28 -0
- package/dist/bin/endora.d.ts.map +1 -0
- package/dist/bin/endora.js +926 -0
- package/dist/bin/endora.js.map +1 -0
- package/dist/check/estate.d.ts +189 -0
- package/dist/check/estate.d.ts.map +1 -0
- package/dist/check/estate.js +1037 -0
- package/dist/check/estate.js.map +1 -0
- package/dist/check/hosts.d.ts +25 -0
- package/dist/check/hosts.d.ts.map +1 -0
- package/dist/check/hosts.js +1347 -0
- package/dist/check/hosts.js.map +1 -0
- package/dist/check/index.d.ts +60 -0
- package/dist/check/index.d.ts.map +1 -0
- package/dist/check/index.js +111 -0
- package/dist/check/index.js.map +1 -0
- package/dist/check/layout.d.ts +136 -0
- package/dist/check/layout.d.ts.map +1 -0
- package/dist/check/layout.js +262 -0
- package/dist/check/layout.js.map +1 -0
- package/dist/check/ledger.d.ts +98 -0
- package/dist/check/ledger.d.ts.map +1 -0
- package/dist/check/ledger.js +173 -0
- package/dist/check/ledger.js.map +1 -0
- package/dist/check/peer-owners.d.ts +116 -0
- package/dist/check/peer-owners.d.ts.map +1 -0
- package/dist/check/peer-owners.js +225 -0
- package/dist/check/peer-owners.js.map +1 -0
- package/dist/check/report.d.ts +33 -0
- package/dist/check/report.d.ts.map +1 -0
- package/dist/check/report.js +107 -0
- package/dist/check/report.js.map +1 -0
- package/dist/check/run.d.ts +147 -0
- package/dist/check/run.d.ts.map +1 -0
- package/dist/check/run.js +111 -0
- package/dist/check/run.js.map +1 -0
- package/dist/checks.d.ts +17 -0
- package/dist/checks.d.ts.map +1 -0
- package/dist/checks.js +17 -0
- package/dist/checks.js.map +1 -0
- package/dist/dev/index.d.ts +83 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +298 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/generate/divergence.d.ts +38 -0
- package/dist/generate/divergence.d.ts.map +1 -0
- package/dist/generate/divergence.js +237 -0
- package/dist/generate/divergence.js.map +1 -0
- package/dist/generate/index.d.ts +90 -0
- package/dist/generate/index.d.ts.map +1 -0
- package/dist/generate/index.js +369 -0
- package/dist/generate/index.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/inputs/declaration.d.ts +18 -0
- package/dist/inputs/declaration.d.ts.map +1 -0
- package/dist/inputs/declaration.js +64 -0
- package/dist/inputs/declaration.js.map +1 -0
- package/dist/inputs/env-file.d.ts +73 -0
- package/dist/inputs/env-file.d.ts.map +1 -0
- package/dist/inputs/env-file.js +134 -0
- package/dist/inputs/env-file.js.map +1 -0
- package/dist/inputs/prompt.d.ts +21 -0
- package/dist/inputs/prompt.d.ts.map +1 -0
- package/dist/inputs/prompt.js +59 -0
- package/dist/inputs/prompt.js.map +1 -0
- package/dist/inputs/resolve.d.ts +163 -0
- package/dist/inputs/resolve.d.ts.map +1 -0
- package/dist/inputs/resolve.js +290 -0
- package/dist/inputs/resolve.js.map +1 -0
- package/dist/install/host.d.ts +27 -0
- package/dist/install/host.d.ts.map +1 -0
- package/dist/install/host.js +90 -0
- package/dist/install/host.js.map +1 -0
- package/dist/install/index.d.ts +173 -0
- package/dist/install/index.d.ts.map +1 -0
- package/dist/install/index.js +793 -0
- package/dist/install/index.js.map +1 -0
- package/dist/install/wizard.d.ts +144 -0
- package/dist/install/wizard.d.ts.map +1 -0
- package/dist/install/wizard.js +362 -0
- package/dist/install/wizard.js.map +1 -0
- package/dist/lib/admin-artefacts.d.ts +70 -0
- package/dist/lib/admin-artefacts.d.ts.map +1 -0
- package/dist/lib/admin-artefacts.js +354 -0
- package/dist/lib/admin-artefacts.js.map +1 -0
- package/dist/lib/admin-surfaces.d.ts +298 -0
- package/dist/lib/admin-surfaces.d.ts.map +1 -0
- package/dist/lib/admin-surfaces.js +669 -0
- package/dist/lib/admin-surfaces.js.map +1 -0
- package/dist/lib/delegated-composer.d.ts +85 -0
- package/dist/lib/delegated-composer.d.ts.map +1 -0
- package/dist/lib/delegated-composer.js +241 -0
- package/dist/lib/delegated-composer.js.map +1 -0
- package/dist/lib/divergence-artefacts.d.ts +305 -0
- package/dist/lib/divergence-artefacts.d.ts.map +1 -0
- package/dist/lib/divergence-artefacts.js +828 -0
- package/dist/lib/divergence-artefacts.js.map +1 -0
- package/dist/lib/divergence.d.ts +337 -0
- package/dist/lib/divergence.d.ts.map +1 -0
- package/dist/lib/divergence.js +1005 -0
- package/dist/lib/divergence.js.map +1 -0
- package/dist/lib/docs-artefacts.d.ts +395 -0
- package/dist/lib/docs-artefacts.d.ts.map +1 -0
- package/dist/lib/docs-artefacts.js +781 -0
- package/dist/lib/docs-artefacts.js.map +1 -0
- package/dist/lib/emitted-exports.d.ts +21 -0
- package/dist/lib/emitted-exports.d.ts.map +1 -0
- package/dist/lib/emitted-exports.js +96 -0
- package/dist/lib/emitted-exports.js.map +1 -0
- package/dist/lib/emitted-freshness.d.ts +112 -0
- package/dist/lib/emitted-freshness.d.ts.map +1 -0
- package/dist/lib/emitted-freshness.js +288 -0
- package/dist/lib/emitted-freshness.js.map +1 -0
- package/dist/lib/entity-index-artefact.d.ts +95 -0
- package/dist/lib/entity-index-artefact.d.ts.map +1 -0
- package/dist/lib/entity-index-artefact.js +210 -0
- package/dist/lib/entity-index-artefact.js.map +1 -0
- package/dist/lib/instance-build-inputs.d.ts +108 -0
- package/dist/lib/instance-build-inputs.d.ts.map +1 -0
- package/dist/lib/instance-build-inputs.js +165 -0
- package/dist/lib/instance-build-inputs.js.map +1 -0
- package/dist/lib/module-docs.d.ts +473 -0
- package/dist/lib/module-docs.d.ts.map +1 -0
- package/dist/lib/module-docs.js +711 -0
- package/dist/lib/module-docs.js.map +1 -0
- package/dist/lib/module-package-subpaths.d.ts +56 -0
- package/dist/lib/module-package-subpaths.d.ts.map +1 -0
- package/dist/lib/module-package-subpaths.js +223 -0
- package/dist/lib/module-package-subpaths.js.map +1 -0
- package/dist/lib/module-packages.d.ts +200 -0
- package/dist/lib/module-packages.d.ts.map +1 -0
- package/dist/lib/module-packages.js +580 -0
- package/dist/lib/module-packages.js.map +1 -0
- package/dist/lib/module-population.d.ts +129 -0
- package/dist/lib/module-population.d.ts.map +1 -0
- package/dist/lib/module-population.js +172 -0
- package/dist/lib/module-population.js.map +1 -0
- package/dist/lib/module-roots.d.ts +337 -0
- package/dist/lib/module-roots.d.ts.map +1 -0
- package/dist/lib/module-roots.js +586 -0
- package/dist/lib/module-roots.js.map +1 -0
- package/dist/lib/nested-checkouts.d.ts +33 -0
- package/dist/lib/nested-checkouts.d.ts.map +1 -0
- package/dist/lib/nested-checkouts.js +160 -0
- package/dist/lib/nested-checkouts.js.map +1 -0
- package/dist/lib/platform-root.d.ts +43 -0
- package/dist/lib/platform-root.d.ts.map +1 -0
- package/dist/lib/platform-root.js +134 -0
- package/dist/lib/platform-root.js.map +1 -0
- package/dist/lib/platform-surface.d.ts +235 -0
- package/dist/lib/platform-surface.d.ts.map +1 -0
- package/dist/lib/platform-surface.js +393 -0
- package/dist/lib/platform-surface.js.map +1 -0
- package/dist/lib/port-registrations.d.ts +223 -0
- package/dist/lib/port-registrations.d.ts.map +1 -0
- package/dist/lib/port-registrations.js +532 -0
- package/dist/lib/port-registrations.js.map +1 -0
- package/dist/lib/read-size.d.ts +154 -0
- package/dist/lib/read-size.d.ts.map +1 -0
- package/dist/lib/read-size.js +182 -0
- package/dist/lib/read-size.js.map +1 -0
- package/dist/lib/registration-owners.d.ts +79 -0
- package/dist/lib/registration-owners.d.ts.map +1 -0
- package/dist/lib/registration-owners.js +77 -0
- package/dist/lib/registration-owners.js.map +1 -0
- package/dist/lib/release-index.d.ts +53 -0
- package/dist/lib/release-index.d.ts.map +1 -0
- package/dist/lib/release-index.js +162 -0
- package/dist/lib/release-index.js.map +1 -0
- package/dist/lib/repeating-timers.d.ts +79 -0
- package/dist/lib/repeating-timers.d.ts.map +1 -0
- package/dist/lib/repeating-timers.js +189 -0
- package/dist/lib/repeating-timers.js.map +1 -0
- package/dist/lib/source-text.d.ts +34 -0
- package/dist/lib/source-text.d.ts.map +1 -0
- package/dist/lib/source-text.js +80 -0
- package/dist/lib/source-text.js.map +1 -0
- package/dist/lib/specifiers.d.ts +20 -0
- package/dist/lib/specifiers.d.ts.map +1 -0
- package/dist/lib/specifiers.js +130 -0
- package/dist/lib/specifiers.js.map +1 -0
- package/dist/lib/sql-tables.d.ts +166 -0
- package/dist/lib/sql-tables.d.ts.map +1 -0
- package/dist/lib/sql-tables.js +464 -0
- package/dist/lib/sql-tables.js.map +1 -0
- package/dist/lib/switchable-modules.d.ts +54 -0
- package/dist/lib/switchable-modules.d.ts.map +1 -0
- package/dist/lib/switchable-modules.js +104 -0
- package/dist/lib/switchable-modules.js.map +1 -0
- package/dist/lib/tailwind-sources.d.ts +136 -0
- package/dist/lib/tailwind-sources.d.ts.map +1 -0
- package/dist/lib/tailwind-sources.js +307 -0
- package/dist/lib/tailwind-sources.js.map +1 -0
- package/dist/lib/ui-layer.d.ts +54 -0
- package/dist/lib/ui-layer.d.ts.map +1 -0
- package/dist/lib/ui-layer.js +57 -0
- package/dist/lib/ui-layer.js.map +1 -0
- package/dist/lib/workspace-packages.d.ts +186 -0
- package/dist/lib/workspace-packages.d.ts.map +1 -0
- package/dist/lib/workspace-packages.js +351 -0
- package/dist/lib/workspace-packages.js.map +1 -0
- package/dist/new-instance/deploy.d.ts +211 -0
- package/dist/new-instance/deploy.d.ts.map +1 -0
- package/dist/new-instance/deploy.js +1381 -0
- package/dist/new-instance/deploy.js.map +1 -0
- package/dist/new-instance/docs-toolchain.d.ts +66 -0
- package/dist/new-instance/docs-toolchain.d.ts.map +1 -0
- package/dist/new-instance/docs-toolchain.js +69 -0
- package/dist/new-instance/docs-toolchain.js.map +1 -0
- package/dist/new-instance/host.d.ts +124 -0
- package/dist/new-instance/host.d.ts.map +1 -0
- package/dist/new-instance/host.js +276 -0
- package/dist/new-instance/host.js.map +1 -0
- package/dist/new-instance/index.d.ts +118 -0
- package/dist/new-instance/index.d.ts.map +1 -0
- package/dist/new-instance/index.js +567 -0
- package/dist/new-instance/index.js.map +1 -0
- package/dist/new-instance/modules.d.ts +188 -0
- package/dist/new-instance/modules.d.ts.map +1 -0
- package/dist/new-instance/modules.js +392 -0
- package/dist/new-instance/modules.js.map +1 -0
- package/dist/new-instance/template.d.ts +505 -0
- package/dist/new-instance/template.d.ts.map +1 -0
- package/dist/new-instance/template.js +1886 -0
- package/dist/new-instance/template.js.map +1 -0
- package/dist/new-module/emit.d.ts +67 -0
- package/dist/new-module/emit.d.ts.map +1 -0
- package/dist/new-module/emit.js +1393 -0
- package/dist/new-module/emit.js.map +1 -0
- package/dist/new-module/host.d.ts +67 -0
- package/dist/new-module/host.d.ts.map +1 -0
- package/dist/new-module/host.js +224 -0
- package/dist/new-module/host.js.map +1 -0
- package/dist/new-module/index.d.ts +32 -0
- package/dist/new-module/index.d.ts.map +1 -0
- package/dist/new-module/index.js +193 -0
- package/dist/new-module/index.js.map +1 -0
- package/dist/new-module/spec.d.ts +188 -0
- package/dist/new-module/spec.d.ts.map +1 -0
- package/dist/new-module/spec.js +404 -0
- package/dist/new-module/spec.js.map +1 -0
- package/dist/new-module/text.d.ts +15 -0
- package/dist/new-module/text.d.ts.map +1 -0
- package/dist/new-module/text.js +22 -0
- package/dist/new-module/text.js.map +1 -0
- package/dist/new-storefront/dockerfile.d.ts +20 -0
- package/dist/new-storefront/dockerfile.d.ts.map +1 -0
- package/dist/new-storefront/dockerfile.js +131 -0
- package/dist/new-storefront/dockerfile.js.map +1 -0
- package/dist/new-storefront/gitignore.d.ts +23 -0
- package/dist/new-storefront/gitignore.d.ts.map +1 -0
- package/dist/new-storefront/gitignore.js +39 -0
- package/dist/new-storefront/gitignore.js.map +1 -0
- package/dist/new-storefront/index.d.ts +93 -0
- package/dist/new-storefront/index.d.ts.map +1 -0
- package/dist/new-storefront/index.js +329 -0
- package/dist/new-storefront/index.js.map +1 -0
- package/dist/new-storefront/npmrc.d.ts +98 -0
- package/dist/new-storefront/npmrc.d.ts.map +1 -0
- package/dist/new-storefront/npmrc.js +217 -0
- package/dist/new-storefront/npmrc.js.map +1 -0
- package/dist/new-storefront/reference.d.ts +189 -0
- package/dist/new-storefront/reference.d.ts.map +1 -0
- package/dist/new-storefront/reference.js +430 -0
- package/dist/new-storefront/reference.js.map +1 -0
- package/dist/new-storefront/rewrite.d.ts +171 -0
- package/dist/new-storefront/rewrite.d.ts.map +1 -0
- package/dist/new-storefront/rewrite.js +701 -0
- package/dist/new-storefront/rewrite.js.map +1 -0
- package/dist/release-index.json +284 -0
- package/dist/rules/action-route-permissions.d.ts +141 -0
- package/dist/rules/action-route-permissions.d.ts.map +1 -0
- package/dist/rules/action-route-permissions.js +556 -0
- package/dist/rules/action-route-permissions.js.map +1 -0
- package/dist/rules/bundle-pairing.d.ts +74 -0
- package/dist/rules/bundle-pairing.d.ts.map +1 -0
- package/dist/rules/bundle-pairing.js +281 -0
- package/dist/rules/bundle-pairing.js.map +1 -0
- package/dist/rules/channel-resolution.d.ts +17 -0
- package/dist/rules/channel-resolution.d.ts.map +1 -0
- package/dist/rules/channel-resolution.js +382 -0
- package/dist/rules/channel-resolution.js.map +1 -0
- package/dist/rules/command-coverage.d.ts +210 -0
- package/dist/rules/command-coverage.d.ts.map +1 -0
- package/dist/rules/command-coverage.js +714 -0
- package/dist/rules/command-coverage.js.map +1 -0
- package/dist/rules/container-imports.d.ts +60 -0
- package/dist/rules/container-imports.d.ts.map +1 -0
- package/dist/rules/container-imports.js +158 -0
- package/dist/rules/container-imports.js.map +1 -0
- package/dist/rules/default-language-prose.d.ts +212 -0
- package/dist/rules/default-language-prose.d.ts.map +1 -0
- package/dist/rules/default-language-prose.js +710 -0
- package/dist/rules/default-language-prose.js.map +1 -0
- package/dist/rules/diacritic-folds.d.ts +238 -0
- package/dist/rules/diacritic-folds.d.ts.map +1 -0
- package/dist/rules/diacritic-folds.js +681 -0
- package/dist/rules/diacritic-folds.js.map +1 -0
- package/dist/rules/entity-tenant-classification.d.ts +171 -0
- package/dist/rules/entity-tenant-classification.d.ts.map +1 -0
- package/dist/rules/entity-tenant-classification.js +323 -0
- package/dist/rules/entity-tenant-classification.js.map +1 -0
- package/dist/rules/entry-presence.d.ts +142 -0
- package/dist/rules/entry-presence.d.ts.map +1 -0
- package/dist/rules/entry-presence.js +339 -0
- package/dist/rules/entry-presence.js.map +1 -0
- package/dist/rules/entry-scope.d.ts +91 -0
- package/dist/rules/entry-scope.d.ts.map +1 -0
- package/dist/rules/entry-scope.js +404 -0
- package/dist/rules/entry-scope.js.map +1 -0
- package/dist/rules/env-inputs.d.ts +222 -0
- package/dist/rules/env-inputs.d.ts.map +1 -0
- package/dist/rules/env-inputs.js +951 -0
- package/dist/rules/env-inputs.js.map +1 -0
- package/dist/rules/kernel-boundary.d.ts +37 -0
- package/dist/rules/kernel-boundary.d.ts.map +1 -0
- package/dist/rules/kernel-boundary.js +195 -0
- package/dist/rules/kernel-boundary.js.map +1 -0
- package/dist/rules/nul-bytes.d.ts +233 -0
- package/dist/rules/nul-bytes.d.ts.map +1 -0
- package/dist/rules/nul-bytes.js +332 -0
- package/dist/rules/nul-bytes.js.map +1 -0
- package/dist/rules/platform-surface.d.ts +479 -0
- package/dist/rules/platform-surface.d.ts.map +1 -0
- package/dist/rules/platform-surface.js +749 -0
- package/dist/rules/platform-surface.js.map +1 -0
- package/dist/rules/port-catches.d.ts +225 -0
- package/dist/rules/port-catches.d.ts.map +1 -0
- package/dist/rules/port-catches.js +1374 -0
- package/dist/rules/port-catches.js.map +1 -0
- package/dist/rules/port-shape.d.ts +213 -0
- package/dist/rules/port-shape.d.ts.map +1 -0
- package/dist/rules/port-shape.js +670 -0
- package/dist/rules/port-shape.js.map +1 -0
- package/dist/rules/queue-names.d.ts +108 -0
- package/dist/rules/queue-names.d.ts.map +1 -0
- package/dist/rules/queue-names.js +395 -0
- package/dist/rules/queue-names.js.map +1 -0
- package/dist/rules/singleton-identity.d.ts +205 -0
- package/dist/rules/singleton-identity.d.ts.map +1 -0
- package/dist/rules/singleton-identity.js +830 -0
- package/dist/rules/singleton-identity.js.map +1 -0
- package/dist/rules/subscribe-seam.d.ts +121 -0
- package/dist/rules/subscribe-seam.d.ts.map +1 -0
- package/dist/rules/subscribe-seam.js +594 -0
- package/dist/rules/subscribe-seam.js.map +1 -0
- package/dist/rules/transaction-context.d.ts +40 -0
- package/dist/rules/transaction-context.d.ts.map +1 -0
- package/dist/rules/transaction-context.js +294 -0
- package/dist/rules/transaction-context.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tree `endora new instance` writes — one plan, three kinds of file, and a
|
|
3
|
+
* rule that refuses a fourth (`contracts/instance-tree.md` §1, §2).
|
|
4
|
+
*
|
|
5
|
+
* ## R1.1 and R1.2 are the whole design
|
|
6
|
+
*
|
|
7
|
+
* Every file here carries its {@link FileKind}, and the kind is what decides
|
|
8
|
+
* whether it may exist at all:
|
|
9
|
+
*
|
|
10
|
+
* * **the client's own** — a value only they can supply, or code they will
|
|
11
|
+
* edit. Written once, never regenerated, never read by us again.
|
|
12
|
+
* * **wiring** — the smallest expression that hands the platform something it
|
|
13
|
+
* cannot derive: a database handle, a root directory, a process's argv.
|
|
14
|
+
* Bounded by R1.4 and counted by {@link wiringLineCount}.
|
|
15
|
+
* * **derived** — rendered from a fact the platform or the module set already
|
|
16
|
+
* holds.
|
|
17
|
+
*
|
|
18
|
+
* **A file that is none of the three may not be written** (R1.2), which is the
|
|
19
|
+
* rule that refuses the fork one file at a time: a composition root is not the
|
|
20
|
+
* client's (it is ours), is not wiring (it is 2 628 lines), and is not derived
|
|
21
|
+
* (nothing generates it). The kind is a field on every entry rather than a
|
|
22
|
+
* comment, so T139's T4 can assert it over the plan the command actually
|
|
23
|
+
* builds.
|
|
24
|
+
*
|
|
25
|
+
* ## Nothing is copied, so nothing is rewritten
|
|
26
|
+
*
|
|
27
|
+
* R1.3 / R5.5 / NFR-002. `endora new storefront` copies a reference tree and
|
|
28
|
+
* rewrites every declaration that names something above it; this command copies
|
|
29
|
+
* nothing, so there is no `rewrite.ts` beside this file and there must never be
|
|
30
|
+
* one — its appearance would be evidence that something was copied that should
|
|
31
|
+
* not have been. Every string below is rendered from the resolved packages, the
|
|
32
|
+
* CLI's own manifest and the operator's own flags.
|
|
33
|
+
*
|
|
34
|
+
* ## No demo artefact, at any tier (D-216)
|
|
35
|
+
*
|
|
36
|
+
* *"A client scaffolding an instance for their own trading receives no demo
|
|
37
|
+
* artefact in a tree they own: no composition, no script, no example and no
|
|
38
|
+
* placeholder. Silence means no."* Nothing here writes one, and the capability
|
|
39
|
+
* is discoverable through the next-steps block rather than reported as an
|
|
40
|
+
* omission — a capability announced as a deficiency is not optional.
|
|
41
|
+
*
|
|
42
|
+
* ## What this build cannot yet write, said here rather than discovered
|
|
43
|
+
*
|
|
44
|
+
* The backend member's wiring names symbols on the platform's declared
|
|
45
|
+
* subpaths — `./composition`, `./db`, `./lifecycle`, `./overlay` and
|
|
46
|
+
* `./packages` today. **How many symbols that is is not written here** (D-100): the
|
|
47
|
+
* reconciliation test derives it from the barrels on every run and prints it,
|
|
48
|
+
* and the count in this sentence was already wrong when the three names below
|
|
49
|
+
* were wrong. `composeApp` is one of them since T118 — the
|
|
50
|
+
* position §2.3 stated (*"`composeApp` is imported, never written (R1.2)"*) is
|
|
51
|
+
* met, and the file below supplies the one argument that composition takes:
|
|
52
|
+
* `deploymentRoot`, the directory holding `apps/`, which no package can derive
|
|
53
|
+
* because in an instance the platform came out of `node_modules`
|
|
54
|
+
* (`contracts/application-root-supplier.md` R1.1). **No contribute callback is
|
|
55
|
+
* supplied and there is nowhere in this tree to write one** — R2.4 — so a
|
|
56
|
+
* client's instance contributes over no name a module defaults.
|
|
57
|
+
*
|
|
58
|
+
* The ORM configuration below is the one place an instance restates its own
|
|
59
|
+
* artefacts, and it has none, so the platform's `*From` factories answer over
|
|
60
|
+
* the packages it installed: `configuredEntitiesFrom`,
|
|
61
|
+
* `discoverConfiguredMigrations` and `mikroOrmConfigFrom` on `./db`, and
|
|
62
|
+
* `resolveManifestEntries` on `./lifecycle` with its three suppliers.
|
|
63
|
+
*
|
|
64
|
+
* **That sentence used to name three other symbols, and nothing held this file
|
|
65
|
+
* to it.** It read *"`configuredMigrations`, `configuredEntities` and
|
|
66
|
+
* `resolvedManifestEntries` are `./db`'s and `./lifecycle`'s **under other
|
|
67
|
+
* names**"* — a doc block describing the repair, beside rendered text that had
|
|
68
|
+
* never taken it, so a scaffolded backend did not compile and the knowledge was
|
|
69
|
+
* present the whole time. The guard is
|
|
70
|
+
* `test/new-instance/template-reconciliation.test.ts`' T1, at **symbol**
|
|
71
|
+
* granularity rather than subpath: `./composition` and `./lifecycle` are both
|
|
72
|
+
* declared subpaths, so a reconciliation of the specifier alone passes over all
|
|
73
|
+
* three errors.
|
|
74
|
+
*
|
|
75
|
+
* §2.3's sixth wiring file, `backend/src/cli.ts`, **is** written since
|
|
76
|
+
* `specs/123-oss-install-experience/` G2, and the omission that stood in its
|
|
77
|
+
* place is deleted rather than reworded. Its reason was *"the demo layer around
|
|
78
|
+
* it is exported under no subpath"*, and what discharged it was not a wider
|
|
79
|
+
* `exports` map: `backend/src/cli/demo-command.ts` moved into
|
|
80
|
+
* `<scope>platform/demo` — where `test/unit/kernel/host-residue-partition.test.ts`
|
|
81
|
+
* had it ledgered as platform-shaped residue all along — and the dispatch around
|
|
82
|
+
* both halves became `<scope>platform/cli`'s `runCli`. So the file this command
|
|
83
|
+
* renders names nothing it had to invent, holds no copy of the 479 lines it
|
|
84
|
+
* calls (D-207), and is five lines.
|
|
85
|
+
*
|
|
86
|
+
* The cost of the omission was measured rather than aesthetic: with no CLI, a
|
|
87
|
+
* scaffolded instance could run no `admin_users create`, so the admin bundle A5
|
|
88
|
+
* and A13 prove is built and styled had nobody to log in as.
|
|
89
|
+
*/
|
|
90
|
+
import { type EnvironmentInput } from '@endora-commerce/contracts';
|
|
91
|
+
import { type InstanceBuildInput } from '../lib/instance-build-inputs.js';
|
|
92
|
+
import { type Topology } from './deploy.js';
|
|
93
|
+
/** §1.1's three kinds, and there is no fourth. */
|
|
94
|
+
export type FileKind = 'client' | 'wiring' | 'derived';
|
|
95
|
+
/** Which member of the workspace a file belongs to, or the workspace root. */
|
|
96
|
+
export type MemberName = 'root' | 'deployment' | 'backend' | 'admin' | 'docs';
|
|
97
|
+
/** One workspace member an operator can name, and what a person is told about it. */
|
|
98
|
+
export interface MemberDeclaration {
|
|
99
|
+
/** The `--without` name, and the directory the member is written into. */
|
|
100
|
+
readonly name: 'backend' | 'admin' | 'docs';
|
|
101
|
+
/** One line, for a human choosing which parts of an instance they want. */
|
|
102
|
+
readonly describes: string;
|
|
103
|
+
/**
|
|
104
|
+
* Why the member cannot be declined, or `null` when it can.
|
|
105
|
+
*
|
|
106
|
+
* A sentence rather than a boolean because the one place this is read with a
|
|
107
|
+
* human in front of it — the install wizard's checklist — renders the reason
|
|
108
|
+
* instead of a checkbox that refuses when unchecked (125 FR-152).
|
|
109
|
+
*/
|
|
110
|
+
readonly fixed: string | null;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* The members this template writes, and therefore the whole `--without`
|
|
114
|
+
* vocabulary (`specs/118-instance-member-selection/contracts/instance-members.md`
|
|
115
|
+
* R3.5a, ruled by D-215).
|
|
116
|
+
*
|
|
117
|
+
* **This is the one statement of the member set**, and two consumers read it:
|
|
118
|
+
* the refusal below, and `endora install`'s checklist (125 R6.3a), which
|
|
119
|
+
* renders one row per entry and holds no list of its own. A member the template
|
|
120
|
+
* gains is added here, beside the decision that writes it, and reaches both —
|
|
121
|
+
* `test/new-instance-members.test.ts` fails when a planned member has no entry.
|
|
122
|
+
*/
|
|
123
|
+
export declare const MEMBER_VOCABULARY: readonly MemberDeclaration[];
|
|
124
|
+
/**
|
|
125
|
+
* F10 and F11 (`instance-members.md` §5.6), decided over the names alone — the
|
|
126
|
+
* refusal sentence, or `null` when every name is one this template can decline.
|
|
127
|
+
*
|
|
128
|
+
* Exported because two commands validate the same flag before either writes:
|
|
129
|
+
* `endora new instance`, and `endora install`, which reports it together with
|
|
130
|
+
* every other precondition (125 FR-157) rather than one refusal later.
|
|
131
|
+
*/
|
|
132
|
+
export declare function memberRefusal(without: readonly string[]): string | null;
|
|
133
|
+
/** One file the command would write. */
|
|
134
|
+
export interface PlannedFile {
|
|
135
|
+
/** Relative to the target directory, with `/` separators. */
|
|
136
|
+
readonly path: string;
|
|
137
|
+
readonly kind: FileKind;
|
|
138
|
+
readonly member: MemberName;
|
|
139
|
+
readonly content: string;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* One module package the instance declares — and **its own** version beside its
|
|
143
|
+
* own name.
|
|
144
|
+
*
|
|
145
|
+
* The version travels on the same record as the name deliberately. It used to
|
|
146
|
+
* be absent, and the site that writes the `dependencies` entries had exactly one
|
|
147
|
+
* version in scope — the platform's — so every module was declared at it. That
|
|
148
|
+
* is only correct while a release moves every package together, and a release
|
|
149
|
+
* does not: of the packages this repository published on 2026-09-11, 68 moved to
|
|
150
|
+
* `0.8.0` and 15 to `0.7.1`, so a scaffolded instance asked a registry for
|
|
151
|
+
* `@endora-commerce/mod-addresses@^0.8.0` and was told the latest is `0.7.1`.
|
|
152
|
+
* Nothing in the estate makes a release uniform and nothing should: D-225 owns
|
|
153
|
+
* the series, and 15 packages genuinely had only patch-level changes.
|
|
154
|
+
*
|
|
155
|
+
* A caret range over a version a **different** package declares is not a value
|
|
156
|
+
* this command may invent (R2.5a), and it is the one such value that fails at
|
|
157
|
+
* the client's first `pnpm install` rather than in anything we run.
|
|
158
|
+
*/
|
|
159
|
+
export interface PlannedModulePackage {
|
|
160
|
+
/** The module id, which is what `--module` names and what orders the entries. */
|
|
161
|
+
readonly id: string;
|
|
162
|
+
/** The npm name, verbatim — this is the `dependencies` key. */
|
|
163
|
+
readonly packageName: string;
|
|
164
|
+
/**
|
|
165
|
+
* The version **this package** declares about itself, read off the manifest
|
|
166
|
+
* of the package the run resolved beside the target directory.
|
|
167
|
+
*/
|
|
168
|
+
readonly version: string;
|
|
169
|
+
}
|
|
170
|
+
/** A member this run did not write, and every reason that holds (D-215 §4). */
|
|
171
|
+
export interface PlannedOmission {
|
|
172
|
+
readonly path: string;
|
|
173
|
+
readonly reason: string;
|
|
174
|
+
}
|
|
175
|
+
/** The whole plan, decided before anything is written (R5.2). */
|
|
176
|
+
export interface InstancePlan {
|
|
177
|
+
readonly files: readonly PlannedFile[];
|
|
178
|
+
readonly omitted: readonly PlannedOmission[];
|
|
179
|
+
/** The workspace members whose directories this run writes. */
|
|
180
|
+
readonly members: readonly MemberName[];
|
|
181
|
+
/** The registry `--registry` named, normalised, or `null`. */
|
|
182
|
+
readonly registry: string | null;
|
|
183
|
+
/** Every dependency the root manifest declares, name to range. */
|
|
184
|
+
readonly dependencies: ReadonlyMap<string, string>;
|
|
185
|
+
}
|
|
186
|
+
/** Everything the plan is rendered from. Pure in, pure out. */
|
|
187
|
+
export interface PlanInput {
|
|
188
|
+
/** The workspace name, from the target directory's basename. */
|
|
189
|
+
readonly name: string;
|
|
190
|
+
readonly deployment: string;
|
|
191
|
+
readonly scope: string;
|
|
192
|
+
/**
|
|
193
|
+
* The platform package's own version. It ranges the **platform** entry and
|
|
194
|
+
* nothing else — see {@link PlannedModulePackage} for what happened the last
|
|
195
|
+
* time it ranged something else.
|
|
196
|
+
*/
|
|
197
|
+
readonly platformVersion: string;
|
|
198
|
+
readonly enginesNode: string;
|
|
199
|
+
readonly packageManager: string | undefined;
|
|
200
|
+
/** The resolved module set, each entry carrying its own version. */
|
|
201
|
+
readonly modules: readonly PlannedModulePackage[];
|
|
202
|
+
/** `null` when the admin shell does not resolve at the version being installed. */
|
|
203
|
+
readonly adminShellVersion: string | null;
|
|
204
|
+
/** `null` when the admin design system does not resolve. §2.4's other package. */
|
|
205
|
+
readonly adminKitVersion: string | null;
|
|
206
|
+
/**
|
|
207
|
+
* The ranges the admin member's own build tools are written from, each read
|
|
208
|
+
* off the admin shell's manifest rather than chosen here (R2.5a).
|
|
209
|
+
*
|
|
210
|
+
* `react` and `react-dom` are its `peerDependencies` — what a host that
|
|
211
|
+
* mounts the shell must resolve — and `vite`, `@vitejs/plugin-react`,
|
|
212
|
+
* `tailwindcss` and `@tailwindcss/vite` are the optional peers by which the
|
|
213
|
+
* shell states what kind of application a host is. A name with no range here
|
|
214
|
+
* is **not written and not guessed**: the member is omitted, naming it, for
|
|
215
|
+
* the same reason `devDependenciesFor` leaves one out.
|
|
216
|
+
*/
|
|
217
|
+
readonly adminRanges: ReadonlyMap<string, string>;
|
|
218
|
+
/**
|
|
219
|
+
* The packages the admin project must supply because what it composes
|
|
220
|
+
* declares them **optional** — name to range, already resolved.
|
|
221
|
+
*
|
|
222
|
+
* `index.ts`' `composedOptionalPeers` is the derivation and carries the
|
|
223
|
+
* argument: `manifests:generate` marks a peer optional exactly when only a UI
|
|
224
|
+
* layer reaches it, so for a project that renders those UI layers the set is
|
|
225
|
+
* not optional but **required**, and it is the one statement in either tree of
|
|
226
|
+
* what an admin host has to have.
|
|
227
|
+
*/
|
|
228
|
+
readonly adminPeers: ReadonlyMap<string, string>;
|
|
229
|
+
/** The CLI's own version — `endora generate` is what renders §2.6's artefacts. */
|
|
230
|
+
readonly cliVersion: string;
|
|
231
|
+
/**
|
|
232
|
+
* The ranges the documentation member is written from — name to range, read
|
|
233
|
+
* off the CLI's own manifest (R2.3's first named source, and R2.5a).
|
|
234
|
+
*
|
|
235
|
+
* `@docusaurus/core` and `@docusaurus/preset-classic` are the CLI's **optional
|
|
236
|
+
* peers**, which is the same declaration the admin shell makes about a host
|
|
237
|
+
* that mounts it: *"an application of this kind resolves these"*. The CLI
|
|
238
|
+
* renders this site's navigation and imports neither package, exactly as the
|
|
239
|
+
* shell declares `vite` and `tailwindcss` and imports neither. A name with no
|
|
240
|
+
* range here is **not written and not guessed**: the member is omitted,
|
|
241
|
+
* naming it.
|
|
242
|
+
*/
|
|
243
|
+
readonly docsRanges: ReadonlyMap<string, string>;
|
|
244
|
+
/**
|
|
245
|
+
* The ranges the instance's own `devDependencies` are derived from, each read
|
|
246
|
+
* off a manifest this run resolved rather than chosen here (R2.5a).
|
|
247
|
+
*
|
|
248
|
+
* The four peers and `ioredis` come from `@endora-commerce/platform`'s own
|
|
249
|
+
* `peerDependencies` and `dependencies`; `typescript` comes from the CLI's own
|
|
250
|
+
* manifest, which R2.3 names as a source. A package with no such source is not
|
|
251
|
+
* written — see {@link devDependenciesFor}.
|
|
252
|
+
*/
|
|
253
|
+
readonly declaredRanges: ReadonlyMap<string, string>;
|
|
254
|
+
/** Already normalised by the caller; `null` writes no `.npmrc`. */
|
|
255
|
+
readonly registry: string | null;
|
|
256
|
+
/** The `.npmrc` text, when there is a registry. Written by `npmrc.ts` (R5.7). */
|
|
257
|
+
readonly npmrc: string | null;
|
|
258
|
+
/**
|
|
259
|
+
* Which machine layout the `deploy/` examples describe (D-230).
|
|
260
|
+
*
|
|
261
|
+
* It selects and records nothing: no file this command writes carries the
|
|
262
|
+
* value, and nothing reads one back. `deploy.ts` is where the derivation and
|
|
263
|
+
* that rule both live.
|
|
264
|
+
*/
|
|
265
|
+
readonly topology: Topology;
|
|
266
|
+
/**
|
|
267
|
+
* The members the operator declined with `--without` (D-215, 118 R3.5).
|
|
268
|
+
*
|
|
269
|
+
* Optional, and absent is the empty set: the subtractive default is
|
|
270
|
+
* *everything*, so a caller that says nothing about members gets every member
|
|
271
|
+
* this build can write. Already validated by {@link memberRefusal}.
|
|
272
|
+
*/
|
|
273
|
+
readonly without?: ReadonlySet<string> | undefined;
|
|
274
|
+
/**
|
|
275
|
+
* What this instance reads from its environment — the platform's declaration
|
|
276
|
+
* unioned with the manifests of the modules it installs
|
|
277
|
+
* (`modules.ts`' `instanceEnvironmentInputs`).
|
|
278
|
+
*
|
|
279
|
+
* It is a **parameter** rather than a constant for the reason every other
|
|
280
|
+
* version and range here is: the declaration belongs to the packages the
|
|
281
|
+
* client's machine resolved, not to this CLI, and a list compiled in here
|
|
282
|
+
* could never see a module a client installed from a registry (D-100, R2.3).
|
|
283
|
+
*/
|
|
284
|
+
readonly declared: readonly EnvironmentInput[];
|
|
285
|
+
/**
|
|
286
|
+
* The text of a `.env` the operator placed in the target directory before
|
|
287
|
+
* running, or `''`.
|
|
288
|
+
*
|
|
289
|
+
* Tier 2 (`input-resolution.md` R1.2), and it reaches the plan rather than the
|
|
290
|
+
* writer so that `--dry-run` reports the file it would actually produce. What
|
|
291
|
+
* the operator wrote is merged into and never rewritten: their comments, their
|
|
292
|
+
* ordering and their own keys survive.
|
|
293
|
+
*/
|
|
294
|
+
readonly existingEnv: string;
|
|
295
|
+
/**
|
|
296
|
+
* The secrets this run generated, name to value (R2.5d).
|
|
297
|
+
*
|
|
298
|
+
* They arrive already generated because the plan is pure and a plan that
|
|
299
|
+
* called `randomBytes` would render a different tree on every call — which
|
|
300
|
+
* `--dry-run`'s whole purpose is to rule out. The caller generates once and
|
|
301
|
+
* reports the names in the provenance line.
|
|
302
|
+
*/
|
|
303
|
+
readonly generated: ReadonlyMap<string, string>;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* A workspace name a client can actually install.
|
|
307
|
+
*
|
|
308
|
+
* npm's own rule, applied to the basename the operator chose, and **refused**
|
|
309
|
+
* rather than sanitised: a command that quietly renamed the directory the
|
|
310
|
+
* operator named would put a name nobody chose into the file that is the
|
|
311
|
+
* module list (R1.2 there).
|
|
312
|
+
*/
|
|
313
|
+
export declare function assertWorkspaceName(name: string): void;
|
|
314
|
+
/**
|
|
315
|
+
* The deployment name, which is `DEPLOYMENT`'s value and nothing else reads it
|
|
316
|
+
* (§2.2).
|
|
317
|
+
*
|
|
318
|
+
* F4. It is a directory name under `apps/`, so the refusal is about what a
|
|
319
|
+
* directory name may be: no separator, no traversal, no leading dot.
|
|
320
|
+
*/
|
|
321
|
+
export declare function assertDeploymentName(deployment: string): void;
|
|
322
|
+
/**
|
|
323
|
+
* The derived artefacts an instance generates and commits none of (§2.6,
|
|
324
|
+
* `instance-repository.md` R3.2).
|
|
325
|
+
*
|
|
326
|
+
* **There are three and this list carried two** until T138 wrote the admin
|
|
327
|
+
* member. `admin/src/tailwind.generated.css` arrived with T124 on the same day
|
|
328
|
+
* this command landed, R3.2 already said three, and `new-instance.test.ts`'
|
|
329
|
+
* *"both generated artefacts are git-ignored"* asserted the stale count rather
|
|
330
|
+
* than catching it. A committed stylesheet enumeration is the tree and the
|
|
331
|
+
* install disagreeing about which packages were scanned — which is silent, and
|
|
332
|
+
* is the whole failure `admin-stylesheet-composition.md` exists for.
|
|
333
|
+
*
|
|
334
|
+
* **The fourth is the entity index** (`specs/109-backend-test-kit/` T065), and it
|
|
335
|
+
* is the first entry here that belongs to **no member**: its consumer is a test,
|
|
336
|
+
* and a test is not a member of a client's workspace. It is in this list for the
|
|
337
|
+
* one reason the list exists — `.gitignore` has to cover it — and it is
|
|
338
|
+
* `.gitignore`d for §2.6's own predicate: which modules a host installed is a
|
|
339
|
+
* fact about the install, so a committed index is the tree and the install
|
|
340
|
+
* disagreeing about which tables exist.
|
|
341
|
+
*/
|
|
342
|
+
export declare const GENERATED_ARTEFACTS: readonly ["admin/src/modules.generated.ts", "admin/src/tailwind.generated.css", "docs/sidebars.modules.generated.js", "backend/test/entities.generated.ts"];
|
|
343
|
+
/**
|
|
344
|
+
* The generated **trees** — a whole directory the generator owns, rather than a
|
|
345
|
+
* file it writes.
|
|
346
|
+
*
|
|
347
|
+
* They are apart from {@link GENERATED_ARTEFACTS} because the two answer
|
|
348
|
+
* different questions: that list is the files a reconciliation can name and
|
|
349
|
+
* compare, this one is what `.gitignore` has to cover. The documentation half
|
|
350
|
+
* of §2.6 is a *population* rather than a file — one copied page per page a
|
|
351
|
+
* module ships, one reference page per module, and the stamp that lets a run
|
|
352
|
+
* undo the previous one's copies — so a client's `.gitignore` names the
|
|
353
|
+
* directories and git's own "a tracked file is never ignored" keeps a page they
|
|
354
|
+
* write themselves visible with no exception list to maintain.
|
|
355
|
+
*/
|
|
356
|
+
export declare const GENERATED_TREES: readonly ["docs/docs/modules/**", "docs/docs/module-reference/**", "docs/.module-docs-copies.json"];
|
|
357
|
+
/**
|
|
358
|
+
* The named CLI aliases an instance's manifests earn
|
|
359
|
+
* (`specs/123-oss-install-experience/` T2-D).
|
|
360
|
+
*
|
|
361
|
+
* **Derived, never written.** `cli` is the pass-through and covers every
|
|
362
|
+
* command any installed module declares; what a named alias buys on top of it
|
|
363
|
+
* is that an operator reads it in `pnpm run`, and an alias addressing a module
|
|
364
|
+
* this instance did not install would fail with `unknown module` at the one
|
|
365
|
+
* moment a client is least able to tell a missing module from a broken CLI.
|
|
366
|
+
*
|
|
367
|
+
* **There is deliberately no `demo:seed` or `demo:reset` entry**, and
|
|
368
|
+
* `specs/123-oss-install-experience/` T2-D asked for both. D-216 is more
|
|
369
|
+
* specific than the task and is the owner's: *"a client scaffolding an instance
|
|
370
|
+
* for their own trading receives no demo artefact in a tree they own: no
|
|
371
|
+
* composition, **no script**, no example and no placeholder"* — and it names
|
|
372
|
+
* where the capability does belong, which is the next-steps block. `cli` reaches
|
|
373
|
+
* both verbs anyway (`pnpm run cli demo seed`), so nothing is unavailable; what
|
|
374
|
+
* is refused is a line in a client's manifest they did not ask for.
|
|
375
|
+
*/
|
|
376
|
+
export declare function cliAliasesFor(modules: readonly PlannedModulePackage[]): readonly (readonly [string, string])[];
|
|
377
|
+
/**
|
|
378
|
+
* The backend member's scripts, every one of them reading the instance's own
|
|
379
|
+
* `.env` (`specs/123-oss-install-experience/` G3).
|
|
380
|
+
*
|
|
381
|
+
* **`--env-file-if-exists=../.env`, and the `..` is the whole of it.** Every
|
|
382
|
+
* root script is `pnpm -C backend run …`, so these run with `backend/` as the
|
|
383
|
+
* working directory while the `.env` a client is told to fill in sits at the
|
|
384
|
+
* root of the tree beside `.env.example` and beside the `.env` entry in
|
|
385
|
+
* `.gitignore`. Without the prefix the file is inert: a client fills it in, runs
|
|
386
|
+
* `pnpm run migrate`, and the process reads nothing at all — which is the second
|
|
387
|
+
* half of the defect the acceptance criterion papers over by supplying the
|
|
388
|
+
* values through `process.env` instead.
|
|
389
|
+
*
|
|
390
|
+
* `-if-exists` rather than `--env-file`, because a `.env` is not obligatory: a
|
|
391
|
+
* container-hosted instance is configured entirely from its process environment,
|
|
392
|
+
* and a flag that refused to start without the file would break exactly the
|
|
393
|
+
* deployment `deploy/compose.prod.yml` describes. A value already in the
|
|
394
|
+
* environment wins over the file, which is Node's own precedence and the one an
|
|
395
|
+
* operator expects.
|
|
396
|
+
*
|
|
397
|
+
* It is one function rather than a spelling repeated ten times, so a script
|
|
398
|
+
* added later cannot be the one that silently does not read the file.
|
|
399
|
+
*/
|
|
400
|
+
export declare function backendScripts(input: PlanInput): Record<string, string>;
|
|
401
|
+
/** Lines of wiring in a plan — R1.4's bound, measured rather than intended. */
|
|
402
|
+
export declare function wiringLineCount(plan: InstancePlan): number;
|
|
403
|
+
/**
|
|
404
|
+
* The environment inputs a client is asked to fill in, in declaration order.
|
|
405
|
+
*
|
|
406
|
+
* Two exclusions, and both are rules rather than names. A **generable secret**
|
|
407
|
+
* is written into the `.env` this command produces and appears in no
|
|
408
|
+
* `.env.example` (R2.5d), so asking for it would be asking for a value the tool
|
|
409
|
+
* has already supplied. And an input **no written member reads** is out of the
|
|
410
|
+
* population (118).
|
|
411
|
+
*/
|
|
412
|
+
export declare function declaredEnvironmentInputs(declared: readonly EnvironmentInput[], admin: boolean): readonly EnvironmentInput[];
|
|
413
|
+
/** The generable secrets this run owes a value for, in declaration order. */
|
|
414
|
+
export declare function generableEnvironmentInputs(declared: readonly EnvironmentInput[], admin: boolean): readonly EnvironmentInput[];
|
|
415
|
+
/**
|
|
416
|
+
* `.env.example` — every input this instance actually reads (FR-010).
|
|
417
|
+
*
|
|
418
|
+
* **Two populations, and keeping them apart is the point.** The build inputs are
|
|
419
|
+
* inlined into an artefact by `docker build`; the declared inputs are read by a
|
|
420
|
+
* process on every start. An operator who conflates them rebuilds an image to
|
|
421
|
+
* change a password. They are two headed sections of one file rather than two
|
|
422
|
+
* files because a client fills in one `.env`, and a second example beside the
|
|
423
|
+
* first is a second thing to forget.
|
|
424
|
+
*
|
|
425
|
+
* Neither section is a list. The first is `INSTANCE_BUILD_INPUTS`; the second is
|
|
426
|
+
* the platform's declaration unioned with the manifests of the modules this run
|
|
427
|
+
* installed, scoped to the members it wrote. The defect it closes is the
|
|
428
|
+
* acceptance criterion's own note — *"its `.env.example` declares none of them,
|
|
429
|
+
* so a client who fills in the file the command wrote has nothing to put them
|
|
430
|
+
* in"* — and the note is deleted in the same merge request, because an
|
|
431
|
+
* instrument that reports a gap must not outlive it.
|
|
432
|
+
*/
|
|
433
|
+
export declare function envExample(inputs: readonly InstanceBuildInput[], declared: readonly EnvironmentInput[], admin: boolean): string;
|
|
434
|
+
/**
|
|
435
|
+
* The `.env` this command writes — the generated secrets, and a blank for
|
|
436
|
+
* everything else the instance reads.
|
|
437
|
+
*
|
|
438
|
+
* R2.5d: a generated secret is written **where the operator can read it**,
|
|
439
|
+
* change it and copy it into a secret store. The placeholders are there so that
|
|
440
|
+
* the file a client edits is the file their instance reads: telling them to
|
|
441
|
+
* `cp .env.example .env` after this command has already written one would have
|
|
442
|
+
* them overwrite the generated secrets with empty strings, and the boot that
|
|
443
|
+
* then failed would name none of this.
|
|
444
|
+
*
|
|
445
|
+
* **Every placeholder is commented out, and that is not cosmetic.** A blank
|
|
446
|
+
* assignment is not the same state as no assignment: Node's `--env-file` reads
|
|
447
|
+
* `MEILISEARCH_URL=` as the empty string, and the platform's `??` fallbacks
|
|
448
|
+
* treat an empty string as a value. Measured on the instance acceptance
|
|
449
|
+
* criterion — a `.env` listing every optional input as a blank turned twenty
|
|
450
|
+
* "unset"s into twenty empty strings and the health route answered **503** over
|
|
451
|
+
* a search engine that was running. So the file lists what there is to fill in
|
|
452
|
+
* and changes nothing until a client removes a `#`, and {@link writeEnvFile}
|
|
453
|
+
* fills a placeholder in place rather than appending a second assignment.
|
|
454
|
+
*
|
|
455
|
+
* A `.env` the operator placed here first is **merged into, never rewritten**:
|
|
456
|
+
* their comments, their ordering and their own keys survive, and a value they
|
|
457
|
+
* already supplied is not generated over.
|
|
458
|
+
*/
|
|
459
|
+
export declare function envFile(input: PlanInput, admin: boolean): string;
|
|
460
|
+
/**
|
|
461
|
+
* The plan. Nothing here touches the filesystem, so `--dry-run` reports exactly
|
|
462
|
+
* what a real run writes rather than a second derivation of it (R5.3).
|
|
463
|
+
*/
|
|
464
|
+
export declare function planInstance(input: PlanInput): InstancePlan;
|
|
465
|
+
/**
|
|
466
|
+
* The packages the instance builds with, each range read off a manifest this
|
|
467
|
+
* run resolved (§2.1, R2.5a).
|
|
468
|
+
*
|
|
469
|
+
* `instance-tree.md` §2.1 names the set — *"the platform's four peers plus
|
|
470
|
+
* `@mikro-orm/migrations`, `tsx`, `typescript`"* — and says nothing about where
|
|
471
|
+
* the **ranges** come from, which is the question R2.5a answers: a value with
|
|
472
|
+
* no source is one the command would have to invent. So each is derived:
|
|
473
|
+
*
|
|
474
|
+
* * the four peers, from `@endora-commerce/platform`'s own
|
|
475
|
+
* `peerDependencies`. A platform that widens `zod` to `^5` widens this in
|
|
476
|
+
* the same run, with nothing here to edit.
|
|
477
|
+
* * `@mikro-orm/migrations`, from the range the platform declares for
|
|
478
|
+
* `@mikro-orm/core`. The MikroORM packages version in lockstep and a
|
|
479
|
+
* migrator from another major does not load the driver from this one.
|
|
480
|
+
* * `ioredis`, from the platform's own `dependencies`. It is not in §2.1's
|
|
481
|
+
* list and it is not optional: the five operator commands construct the
|
|
482
|
+
* `OperatorResources` the platform asks them for, and one of its three
|
|
483
|
+
* members is a Redis connection.
|
|
484
|
+
* * `typescript`, from the CLI's own manifest — R2.3's first named source.
|
|
485
|
+
*
|
|
486
|
+
* **`tsx` is deliberately absent.** No manifest this run can read declares a
|
|
487
|
+
* range for it, so writing one would be the invention R2.5a forbids; the
|
|
488
|
+
* member's `dev` script uses `tsc` and `node --watch`, which need nothing that
|
|
489
|
+
* is not already here.
|
|
490
|
+
*/
|
|
491
|
+
export declare function devDependenciesFor(input: PlanInput,
|
|
492
|
+
/**
|
|
493
|
+
* Does this instance have an artefact to generate at all?
|
|
494
|
+
*
|
|
495
|
+
* The root's `generate` script is `endora generate` — one run renders every
|
|
496
|
+
* member's artefacts — so the binary has to be on the **root's** path. An
|
|
497
|
+
* instance with no artefact family at all has no `generate` script, and
|
|
498
|
+
* declaring the tool that runs it would be a dependency with nothing to do.
|
|
499
|
+
*
|
|
500
|
+
* The caller's predicate is `planInstance`'s `generatesArtefacts`, which since
|
|
501
|
+
* T065 counts the entity index: a headless instance with a module installed
|
|
502
|
+
* does have something to render, so it does get the tool.
|
|
503
|
+
*/
|
|
504
|
+
generates?: boolean): readonly (readonly [string, string])[];
|
|
505
|
+
//# sourceMappingURL=template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/new-instance/template.ts"],"names":[],"mappings":"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"}
|