@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 @@
|
|
|
1
|
+
{"version":3,"file":"diacritic-folds.js","sourceRoot":"","sources":["../../src/rules/diacritic-folds.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Systemic Organization tenant scoping — Principle XI's own instrument
|
|
3
|
+
* (feature 050, FR-012 / SC-001).
|
|
4
|
+
*
|
|
5
|
+
* The rule is one sentence: **every MikroORM entity class carries exactly one
|
|
6
|
+
* tenant-scope classification decorator** — `@OrgScoped`, `@CustomerScoped`,
|
|
7
|
+
* `@GlobalEntity`, `@TransitivelyScoped` or `@RuleScoped`. An entity with none
|
|
8
|
+
* escapes the global-filter guard silently; an entity with two has a guard
|
|
9
|
+
* nobody can predict from the class.
|
|
10
|
+
*
|
|
11
|
+
* ## Why this rule is the one Phase 3 lands first
|
|
12
|
+
*
|
|
13
|
+
* It is the highest-value member of the estate and it was, until this
|
|
14
|
+
* relocation, the most completely defeated one. Eleven of the fifteen paid
|
|
15
|
+
* modules ship persisted entities (`specs/134-paid-module-extraction/`), and the
|
|
16
|
+
* moment a module lives in another repository a class shipped with no
|
|
17
|
+
* classification decorator is exactly the silence there was no instrument for:
|
|
18
|
+
* this repository's walk cannot see the package's source, and Principle XI —
|
|
19
|
+
* non-negotiable — held in name only outside the mothership.
|
|
20
|
+
*
|
|
21
|
+
* ## One analysis, two readers, and why that is not two implementations
|
|
22
|
+
*
|
|
23
|
+
* The **analysis** is {@link classifyFindings}: over a list of
|
|
24
|
+
* {@link EntityFinding}, which classes carry none and which carry more than one.
|
|
25
|
+
* It has one implementation and both hosts call it
|
|
26
|
+
* (`specs/101-endora-check/contracts/package-scope-layout.md` §6).
|
|
27
|
+
*
|
|
28
|
+
* What differs is the **reader**, because the two hosts' inputs differ and §2's
|
|
29
|
+
* table says so in as many words — *"unchanged code, different input"*:
|
|
30
|
+
*
|
|
31
|
+
* * {@link analyzeSource} reads decorated TypeScript. That is this
|
|
32
|
+
* repository's own tree, where a module's source is on disk.
|
|
33
|
+
* * {@link analyzeEmitted} reads the **artefact** — the file the platform
|
|
34
|
+
* actually loads (§4). A published package ships compiled output, and
|
|
35
|
+
* `@Entity(` does not survive into it, so a source-text probe of a `dist`
|
|
36
|
+
* finds nothing and reports clean. What *does* survive is the class-level
|
|
37
|
+
* `__decorate([Entity({ … }), OrgScoped()], Class)` call `tsc` writes, and
|
|
38
|
+
* the decorator identifiers inside it are the same names the source spells.
|
|
39
|
+
*
|
|
40
|
+
* Both readers return the same shape, so the counting, the report and the
|
|
41
|
+
* failure text all run over one array — which is what makes the sentence above
|
|
42
|
+
* true of the code and not only of the prose.
|
|
43
|
+
*
|
|
44
|
+
* **The emit shape is not assumed to hold for ever, and that is handled by the
|
|
45
|
+
* floor rather than by a promise.** If TypeScript's decorator emit changed, this
|
|
46
|
+
* reader would find no class at all — and the package's own `entities` export
|
|
47
|
+
* ({@link declaredEntityClasses}) is the independent second author that turns
|
|
48
|
+
* that into a refusal instead of a clean run.
|
|
49
|
+
*/
|
|
50
|
+
/** This rule's log prefix, spelled once so the two hosts cannot disagree. */
|
|
51
|
+
export declare const PREFIX = "[tenant-classification]";
|
|
52
|
+
/**
|
|
53
|
+
* The five decorators, in the order a failure message lists them.
|
|
54
|
+
*
|
|
55
|
+
* A list rather than a set, because the remedy sentence has to name them in a
|
|
56
|
+
* stable order and a `Set`'s iteration order is an implementation detail nobody
|
|
57
|
+
* should have to reason about in a CI log.
|
|
58
|
+
*/
|
|
59
|
+
export declare const CLASSIFICATION_DECORATOR_NAMES: readonly string[];
|
|
60
|
+
export declare const CLASSIFICATION_DECORATORS: ReadonlySet<string>;
|
|
61
|
+
/** Only a file that spells `@Entity(` can declare one; the parse decides the rest. */
|
|
62
|
+
export declare const ENTITY_DECORATOR_HINT: RegExp;
|
|
63
|
+
/**
|
|
64
|
+
* Only an emitted file that spells `__decorate` can hold one.
|
|
65
|
+
*
|
|
66
|
+
* The artefact's counterpart to {@link ENTITY_DECORATOR_HINT}, and the same
|
|
67
|
+
* contract: a cheap text gate in front of a parse, never the predicate.
|
|
68
|
+
*/
|
|
69
|
+
export declare const EMITTED_DECORATE_HINT: RegExp;
|
|
70
|
+
export interface EntityFinding {
|
|
71
|
+
file: string;
|
|
72
|
+
className: string;
|
|
73
|
+
classifications: string[];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Every `.ts` under `dir` except tests and declaration files.
|
|
77
|
+
*
|
|
78
|
+
* The walk used to collect `*.entity.ts` only. Nothing enforces that suffix, so
|
|
79
|
+
* an entity declared anywhere else was not unclassified as far as this check was
|
|
80
|
+
* concerned — it was unread, which a green run cannot be told apart from
|
|
81
|
+
* (issue #113). {@link ENTITY_DECORATOR_HINT} decides what is worth parsing.
|
|
82
|
+
*/
|
|
83
|
+
export declare function walk(dir: string, out?: string[]): string[];
|
|
84
|
+
/**
|
|
85
|
+
* Every emitted module under `dir`.
|
|
86
|
+
*
|
|
87
|
+
* Source maps and declaration files are not what the platform loads, so they are
|
|
88
|
+
* not what this reads. The extension set is the one Node will execute.
|
|
89
|
+
*/
|
|
90
|
+
export declare function walkEmitted(dir: string, out?: string[]): string[];
|
|
91
|
+
/** Analyze a single TypeScript source string for MikroORM entities + their classification. Exported for tests. */
|
|
92
|
+
export declare function analyzeSource(source: string, file: string): EntityFinding[];
|
|
93
|
+
/**
|
|
94
|
+
* The same analysis over the **emitted** artefact.
|
|
95
|
+
*
|
|
96
|
+
* `tsc` lowers a decorated class to a class-level call — `Class =
|
|
97
|
+
* __decorate([D1(), D2()], Class)` — and lowers a decorated *member* to a
|
|
98
|
+
* four-argument one. Only the class-level form is this rule's subject, and the
|
|
99
|
+
* two are told apart by the argument list rather than by position in the file:
|
|
100
|
+
* the member form names a `prototype` and a property key, the class form names
|
|
101
|
+
* the class and nothing else.
|
|
102
|
+
*
|
|
103
|
+
* The left-hand side is not consulted for the class name. CommonJS emit writes
|
|
104
|
+
* `exports.Loyalty = Loyalty = __decorate(…)`, ES emit writes `Loyalty =
|
|
105
|
+
* __decorate(…)`, and both name the class in the call's **second argument**,
|
|
106
|
+
* which is the one thing the two spellings agree on.
|
|
107
|
+
*/
|
|
108
|
+
export declare function analyzeEmitted(source: string, file: string): EntityFinding[];
|
|
109
|
+
/**
|
|
110
|
+
* The entity classes a composition **hands the ORM**, as its own artefact
|
|
111
|
+
* declares them.
|
|
112
|
+
*
|
|
113
|
+
* This is the rule's independent second author, and it is the package's own
|
|
114
|
+
* statement rather than this file's guess: `export const entities = [A, B]` is
|
|
115
|
+
* the array the host's merged ORM configuration consumes, so a walk that read
|
|
116
|
+
* fewer classes than the composition declares read a residue of its population
|
|
117
|
+
* and must refuse (`contracts/package-scope-layout.md` §3). Both emit shapes are
|
|
118
|
+
* accepted for the same reason {@link analyzeEmitted} accepts both.
|
|
119
|
+
*
|
|
120
|
+
* A class listed under a computed or spread element is not named here. That is
|
|
121
|
+
* deliberate and it fails **closed**: an unnamed member lowers the covered count
|
|
122
|
+
* and never the expected one, so it turns into a refusal rather than into a
|
|
123
|
+
* class nobody looked for.
|
|
124
|
+
*/
|
|
125
|
+
export declare function declaredEntityClasses(source: string, file: string): string[];
|
|
126
|
+
/**
|
|
127
|
+
* One persisted class as an owner map describes it, in this rule's shape.
|
|
128
|
+
*
|
|
129
|
+
* Structural on purpose: `package-declarations.ts`'s `PackageEntity` satisfies
|
|
130
|
+
* it, so the repository host passes its own record through unchanged and the CLI
|
|
131
|
+
* package takes no dependency on the platform to state the type.
|
|
132
|
+
*/
|
|
133
|
+
export interface DescribedEntity {
|
|
134
|
+
readonly packageName: string;
|
|
135
|
+
readonly className: string;
|
|
136
|
+
readonly classifications: readonly string[];
|
|
137
|
+
readonly file: string;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* An installed package's entity classes, in the same shape a walk produces
|
|
141
|
+
* (feature 080, T034).
|
|
142
|
+
*
|
|
143
|
+
* The rule is one rule: exactly one classification, whatever the entity arrived
|
|
144
|
+
* in. Keeping the two populations in one shape is what makes that true of the
|
|
145
|
+
* code as well as of the sentence — the counting, the `--list` output and the
|
|
146
|
+
* failure report all run over one array.
|
|
147
|
+
*
|
|
148
|
+
* `file` is the resolved artefact the class was imported from, so the message
|
|
149
|
+
* points at something the reader can open. Exported so a red proof can enter
|
|
150
|
+
* here with a package entity rather than with a finished report.
|
|
151
|
+
*/
|
|
152
|
+
export declare function packageEntityFindings(entities: readonly DescribedEntity[]): EntityFinding[];
|
|
153
|
+
/** Every entity class in `files`, parsing only the ones a hint admits. */
|
|
154
|
+
export declare function analyzeEmittedFiles(files: readonly string[]): EntityFinding[];
|
|
155
|
+
export interface Classification {
|
|
156
|
+
readonly classified: readonly EntityFinding[];
|
|
157
|
+
readonly unclassified: readonly EntityFinding[];
|
|
158
|
+
readonly multiple: readonly EntityFinding[];
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* The analysis, and the only place the predicate is written.
|
|
162
|
+
*
|
|
163
|
+
* `exactly one` is two failures rather than one, and they have different
|
|
164
|
+
* remedies: none means the guard never applies, more than one means nobody can
|
|
165
|
+
* say which guard applies. Reporting them as one kind would hand an author a
|
|
166
|
+
* sentence that is wrong for half the cases.
|
|
167
|
+
*/
|
|
168
|
+
export declare function classifyFindings(findings: readonly EntityFinding[]): Classification;
|
|
169
|
+
/** The sentence an author reads, per failure kind. One spelling, two hosts. */
|
|
170
|
+
export declare function remedyFor(finding: EntityFinding): string;
|
|
171
|
+
//# sourceMappingURL=entity-tenant-classification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-tenant-classification.d.ts","sourceRoot":"","sources":["../../src/rules/entity-tenant-classification.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAOH,6EAA6E;AAC7E,eAAO,MAAM,MAAM,4BAA4B,CAAC;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,EAAE,SAAS,MAAM,EAM3D,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,CAEzD,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,QAAiB,CAAC;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,QAAoB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAW9D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAuBrE;AA+BD,kHAAkH;AAClH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAW3E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAyB5E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAmC5E;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,GAAG,aAAa,EAAE,CAM3F;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,aAAa,EAAE,CAQ7E;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,QAAQ,CAAC,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,cAAc,CAMnF;AAED,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAaxD"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Systemic Organization tenant scoping — Principle XI's own instrument
|
|
3
|
+
* (feature 050, FR-012 / SC-001).
|
|
4
|
+
*
|
|
5
|
+
* The rule is one sentence: **every MikroORM entity class carries exactly one
|
|
6
|
+
* tenant-scope classification decorator** — `@OrgScoped`, `@CustomerScoped`,
|
|
7
|
+
* `@GlobalEntity`, `@TransitivelyScoped` or `@RuleScoped`. An entity with none
|
|
8
|
+
* escapes the global-filter guard silently; an entity with two has a guard
|
|
9
|
+
* nobody can predict from the class.
|
|
10
|
+
*
|
|
11
|
+
* ## Why this rule is the one Phase 3 lands first
|
|
12
|
+
*
|
|
13
|
+
* It is the highest-value member of the estate and it was, until this
|
|
14
|
+
* relocation, the most completely defeated one. Eleven of the fifteen paid
|
|
15
|
+
* modules ship persisted entities (`specs/134-paid-module-extraction/`), and the
|
|
16
|
+
* moment a module lives in another repository a class shipped with no
|
|
17
|
+
* classification decorator is exactly the silence there was no instrument for:
|
|
18
|
+
* this repository's walk cannot see the package's source, and Principle XI —
|
|
19
|
+
* non-negotiable — held in name only outside the mothership.
|
|
20
|
+
*
|
|
21
|
+
* ## One analysis, two readers, and why that is not two implementations
|
|
22
|
+
*
|
|
23
|
+
* The **analysis** is {@link classifyFindings}: over a list of
|
|
24
|
+
* {@link EntityFinding}, which classes carry none and which carry more than one.
|
|
25
|
+
* It has one implementation and both hosts call it
|
|
26
|
+
* (`specs/101-endora-check/contracts/package-scope-layout.md` §6).
|
|
27
|
+
*
|
|
28
|
+
* What differs is the **reader**, because the two hosts' inputs differ and §2's
|
|
29
|
+
* table says so in as many words — *"unchanged code, different input"*:
|
|
30
|
+
*
|
|
31
|
+
* * {@link analyzeSource} reads decorated TypeScript. That is this
|
|
32
|
+
* repository's own tree, where a module's source is on disk.
|
|
33
|
+
* * {@link analyzeEmitted} reads the **artefact** — the file the platform
|
|
34
|
+
* actually loads (§4). A published package ships compiled output, and
|
|
35
|
+
* `@Entity(` does not survive into it, so a source-text probe of a `dist`
|
|
36
|
+
* finds nothing and reports clean. What *does* survive is the class-level
|
|
37
|
+
* `__decorate([Entity({ … }), OrgScoped()], Class)` call `tsc` writes, and
|
|
38
|
+
* the decorator identifiers inside it are the same names the source spells.
|
|
39
|
+
*
|
|
40
|
+
* Both readers return the same shape, so the counting, the report and the
|
|
41
|
+
* failure text all run over one array — which is what makes the sentence above
|
|
42
|
+
* true of the code and not only of the prose.
|
|
43
|
+
*
|
|
44
|
+
* **The emit shape is not assumed to hold for ever, and that is handled by the
|
|
45
|
+
* floor rather than by a promise.** If TypeScript's decorator emit changed, this
|
|
46
|
+
* reader would find no class at all — and the package's own `entities` export
|
|
47
|
+
* ({@link declaredEntityClasses}) is the independent second author that turns
|
|
48
|
+
* that into a refusal instead of a clean run.
|
|
49
|
+
*/
|
|
50
|
+
import { readdirSync, readFileSync, statSync } from 'node:fs';
|
|
51
|
+
import { join } from 'node:path';
|
|
52
|
+
import ts from 'typescript';
|
|
53
|
+
/** This rule's log prefix, spelled once so the two hosts cannot disagree. */
|
|
54
|
+
export const PREFIX = '[tenant-classification]';
|
|
55
|
+
/**
|
|
56
|
+
* The five decorators, in the order a failure message lists them.
|
|
57
|
+
*
|
|
58
|
+
* A list rather than a set, because the remedy sentence has to name them in a
|
|
59
|
+
* stable order and a `Set`'s iteration order is an implementation detail nobody
|
|
60
|
+
* should have to reason about in a CI log.
|
|
61
|
+
*/
|
|
62
|
+
export const CLASSIFICATION_DECORATOR_NAMES = [
|
|
63
|
+
'OrgScoped',
|
|
64
|
+
'CustomerScoped',
|
|
65
|
+
'GlobalEntity',
|
|
66
|
+
'TransitivelyScoped',
|
|
67
|
+
'RuleScoped',
|
|
68
|
+
];
|
|
69
|
+
export const CLASSIFICATION_DECORATORS = new Set(CLASSIFICATION_DECORATOR_NAMES);
|
|
70
|
+
/** Only a file that spells `@Entity(` can declare one; the parse decides the rest. */
|
|
71
|
+
export const ENTITY_DECORATOR_HINT = /@Entity\s*\(/;
|
|
72
|
+
/**
|
|
73
|
+
* Only an emitted file that spells `__decorate` can hold one.
|
|
74
|
+
*
|
|
75
|
+
* The artefact's counterpart to {@link ENTITY_DECORATOR_HINT}, and the same
|
|
76
|
+
* contract: a cheap text gate in front of a parse, never the predicate.
|
|
77
|
+
*/
|
|
78
|
+
export const EMITTED_DECORATE_HINT = /__decorate\s*\(/;
|
|
79
|
+
/**
|
|
80
|
+
* Every `.ts` under `dir` except tests and declaration files.
|
|
81
|
+
*
|
|
82
|
+
* The walk used to collect `*.entity.ts` only. Nothing enforces that suffix, so
|
|
83
|
+
* an entity declared anywhere else was not unclassified as far as this check was
|
|
84
|
+
* concerned — it was unread, which a green run cannot be told apart from
|
|
85
|
+
* (issue #113). {@link ENTITY_DECORATOR_HINT} decides what is worth parsing.
|
|
86
|
+
*/
|
|
87
|
+
export function walk(dir, out = []) {
|
|
88
|
+
for (const name of readdirSync(dir)) {
|
|
89
|
+
const full = join(dir, name);
|
|
90
|
+
if (statSync(full).isDirectory()) {
|
|
91
|
+
if (name === 'node_modules' || name === 'dist')
|
|
92
|
+
continue;
|
|
93
|
+
walk(full, out);
|
|
94
|
+
}
|
|
95
|
+
else if (name.endsWith('.ts') && !name.endsWith('.test.ts') && !name.endsWith('.d.ts')) {
|
|
96
|
+
out.push(full);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Every emitted module under `dir`.
|
|
103
|
+
*
|
|
104
|
+
* Source maps and declaration files are not what the platform loads, so they are
|
|
105
|
+
* not what this reads. The extension set is the one Node will execute.
|
|
106
|
+
*/
|
|
107
|
+
export function walkEmitted(dir, out = []) {
|
|
108
|
+
let entries;
|
|
109
|
+
try {
|
|
110
|
+
entries = readdirSync(dir);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
115
|
+
for (const name of entries.sort()) {
|
|
116
|
+
const full = join(dir, name);
|
|
117
|
+
let directory;
|
|
118
|
+
try {
|
|
119
|
+
directory = statSync(full).isDirectory();
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (directory) {
|
|
125
|
+
if (name === 'node_modules')
|
|
126
|
+
continue;
|
|
127
|
+
walkEmitted(full, out);
|
|
128
|
+
}
|
|
129
|
+
else if (/\.(js|mjs|cjs)$/.test(name)) {
|
|
130
|
+
out.push(full);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return out;
|
|
134
|
+
}
|
|
135
|
+
/** The name a decorator expression applies, whatever spelling it arrived in. */
|
|
136
|
+
function appliedName(expression) {
|
|
137
|
+
const callee = ts.isCallExpression(expression) ? expression.expression : expression;
|
|
138
|
+
if (ts.isIdentifier(callee))
|
|
139
|
+
return callee.text;
|
|
140
|
+
// `core_1.Entity` — CommonJS emit routes every import through its namespace
|
|
141
|
+
// object, so the name this rule reasons about is the property, not the object.
|
|
142
|
+
if (ts.isPropertyAccessExpression(callee) && ts.isIdentifier(callee.name))
|
|
143
|
+
return callee.name.text;
|
|
144
|
+
// `(0, core_1.Entity)()` — the indirect-call form tsc emits to drop `this`.
|
|
145
|
+
if (ts.isParenthesizedExpression(callee))
|
|
146
|
+
return appliedName(callee.expression);
|
|
147
|
+
if (ts.isBinaryExpression(callee) && callee.operatorToken.kind === ts.SyntaxKind.CommaToken) {
|
|
148
|
+
return appliedName(callee.right);
|
|
149
|
+
}
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
function decoratorName(decorator) {
|
|
153
|
+
return appliedName(decorator.expression);
|
|
154
|
+
}
|
|
155
|
+
/** One `EntityFinding` from a set of applied decorator names, or `null`. */
|
|
156
|
+
function findingOf(names, className, file) {
|
|
157
|
+
if (!names.includes('Entity'))
|
|
158
|
+
return null; // only MikroORM entities
|
|
159
|
+
return {
|
|
160
|
+
file,
|
|
161
|
+
className,
|
|
162
|
+
classifications: names.filter((name) => CLASSIFICATION_DECORATORS.has(name)),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/** Analyze a single TypeScript source string for MikroORM entities + their classification. Exported for tests. */
|
|
166
|
+
export function analyzeSource(source, file) {
|
|
167
|
+
const sf = ts.createSourceFile(file, source, ts.ScriptTarget.Latest, true);
|
|
168
|
+
const findings = [];
|
|
169
|
+
sf.forEachChild((node) => {
|
|
170
|
+
if (!ts.isClassDeclaration(node))
|
|
171
|
+
return;
|
|
172
|
+
const decorators = ts.getDecorators(node) ?? [];
|
|
173
|
+
const names = decorators.map(decoratorName).filter((n) => Boolean(n));
|
|
174
|
+
const finding = findingOf(names, node.name?.text ?? '<anonymous>', file);
|
|
175
|
+
if (finding !== null)
|
|
176
|
+
findings.push(finding);
|
|
177
|
+
});
|
|
178
|
+
return findings;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* The same analysis over the **emitted** artefact.
|
|
182
|
+
*
|
|
183
|
+
* `tsc` lowers a decorated class to a class-level call — `Class =
|
|
184
|
+
* __decorate([D1(), D2()], Class)` — and lowers a decorated *member* to a
|
|
185
|
+
* four-argument one. Only the class-level form is this rule's subject, and the
|
|
186
|
+
* two are told apart by the argument list rather than by position in the file:
|
|
187
|
+
* the member form names a `prototype` and a property key, the class form names
|
|
188
|
+
* the class and nothing else.
|
|
189
|
+
*
|
|
190
|
+
* The left-hand side is not consulted for the class name. CommonJS emit writes
|
|
191
|
+
* `exports.Loyalty = Loyalty = __decorate(…)`, ES emit writes `Loyalty =
|
|
192
|
+
* __decorate(…)`, and both name the class in the call's **second argument**,
|
|
193
|
+
* which is the one thing the two spellings agree on.
|
|
194
|
+
*/
|
|
195
|
+
export function analyzeEmitted(source, file) {
|
|
196
|
+
const sf = ts.createSourceFile(file, source, ts.ScriptTarget.Latest, true);
|
|
197
|
+
const findings = [];
|
|
198
|
+
const visit = (node) => {
|
|
199
|
+
if (ts.isCallExpression(node) && appliedName(node.expression) === '__decorate') {
|
|
200
|
+
const [decorators, target] = node.arguments;
|
|
201
|
+
if (node.arguments.length === 2 &&
|
|
202
|
+
decorators !== undefined &&
|
|
203
|
+
ts.isArrayLiteralExpression(decorators) &&
|
|
204
|
+
target !== undefined &&
|
|
205
|
+
ts.isIdentifier(target)) {
|
|
206
|
+
const names = decorators.elements
|
|
207
|
+
.map((element) => appliedName(element))
|
|
208
|
+
.filter((name) => name !== undefined);
|
|
209
|
+
const finding = findingOf(names, target.text, file);
|
|
210
|
+
if (finding !== null)
|
|
211
|
+
findings.push(finding);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
node.forEachChild(visit);
|
|
215
|
+
};
|
|
216
|
+
sf.forEachChild(visit);
|
|
217
|
+
return findings;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* The entity classes a composition **hands the ORM**, as its own artefact
|
|
221
|
+
* declares them.
|
|
222
|
+
*
|
|
223
|
+
* This is the rule's independent second author, and it is the package's own
|
|
224
|
+
* statement rather than this file's guess: `export const entities = [A, B]` is
|
|
225
|
+
* the array the host's merged ORM configuration consumes, so a walk that read
|
|
226
|
+
* fewer classes than the composition declares read a residue of its population
|
|
227
|
+
* and must refuse (`contracts/package-scope-layout.md` §3). Both emit shapes are
|
|
228
|
+
* accepted for the same reason {@link analyzeEmitted} accepts both.
|
|
229
|
+
*
|
|
230
|
+
* A class listed under a computed or spread element is not named here. That is
|
|
231
|
+
* deliberate and it fails **closed**: an unnamed member lowers the covered count
|
|
232
|
+
* and never the expected one, so it turns into a refusal rather than into a
|
|
233
|
+
* class nobody looked for.
|
|
234
|
+
*/
|
|
235
|
+
export function declaredEntityClasses(source, file) {
|
|
236
|
+
const sf = ts.createSourceFile(file, source, ts.ScriptTarget.Latest, true);
|
|
237
|
+
const names = [];
|
|
238
|
+
const collect = (array) => {
|
|
239
|
+
for (const element of array.elements) {
|
|
240
|
+
if (ts.isIdentifier(element))
|
|
241
|
+
names.push(element.text);
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
const visit = (node) => {
|
|
245
|
+
// `export const entities = [ … ]`
|
|
246
|
+
if (ts.isVariableDeclaration(node) &&
|
|
247
|
+
ts.isIdentifier(node.name) &&
|
|
248
|
+
node.name.text === 'entities' &&
|
|
249
|
+
node.initializer !== undefined &&
|
|
250
|
+
ts.isArrayLiteralExpression(node.initializer)) {
|
|
251
|
+
collect(node.initializer);
|
|
252
|
+
}
|
|
253
|
+
// `exports.entities = [ … ]`
|
|
254
|
+
if (ts.isBinaryExpression(node) &&
|
|
255
|
+
node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
|
|
256
|
+
ts.isPropertyAccessExpression(node.left) &&
|
|
257
|
+
node.left.name.text === 'entities' &&
|
|
258
|
+
ts.isArrayLiteralExpression(node.right)) {
|
|
259
|
+
collect(node.right);
|
|
260
|
+
}
|
|
261
|
+
node.forEachChild(visit);
|
|
262
|
+
};
|
|
263
|
+
sf.forEachChild(visit);
|
|
264
|
+
return names;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* An installed package's entity classes, in the same shape a walk produces
|
|
268
|
+
* (feature 080, T034).
|
|
269
|
+
*
|
|
270
|
+
* The rule is one rule: exactly one classification, whatever the entity arrived
|
|
271
|
+
* in. Keeping the two populations in one shape is what makes that true of the
|
|
272
|
+
* code as well as of the sentence — the counting, the `--list` output and the
|
|
273
|
+
* failure report all run over one array.
|
|
274
|
+
*
|
|
275
|
+
* `file` is the resolved artefact the class was imported from, so the message
|
|
276
|
+
* points at something the reader can open. Exported so a red proof can enter
|
|
277
|
+
* here with a package entity rather than with a finished report.
|
|
278
|
+
*/
|
|
279
|
+
export function packageEntityFindings(entities) {
|
|
280
|
+
return entities.map((entity) => ({
|
|
281
|
+
file: entity.file,
|
|
282
|
+
className: `${entity.className} (${entity.packageName})`,
|
|
283
|
+
classifications: [...entity.classifications],
|
|
284
|
+
}));
|
|
285
|
+
}
|
|
286
|
+
/** Every entity class in `files`, parsing only the ones a hint admits. */
|
|
287
|
+
export function analyzeEmittedFiles(files) {
|
|
288
|
+
const findings = [];
|
|
289
|
+
for (const file of files) {
|
|
290
|
+
const source = readFileSync(file, 'utf8');
|
|
291
|
+
if (!EMITTED_DECORATE_HINT.test(source))
|
|
292
|
+
continue;
|
|
293
|
+
findings.push(...analyzeEmitted(source, file));
|
|
294
|
+
}
|
|
295
|
+
return findings;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* The analysis, and the only place the predicate is written.
|
|
299
|
+
*
|
|
300
|
+
* `exactly one` is two failures rather than one, and they have different
|
|
301
|
+
* remedies: none means the guard never applies, more than one means nobody can
|
|
302
|
+
* say which guard applies. Reporting them as one kind would hand an author a
|
|
303
|
+
* sentence that is wrong for half the cases.
|
|
304
|
+
*/
|
|
305
|
+
export function classifyFindings(findings) {
|
|
306
|
+
return {
|
|
307
|
+
classified: findings.filter((finding) => finding.classifications.length === 1),
|
|
308
|
+
unclassified: findings.filter((finding) => finding.classifications.length === 0),
|
|
309
|
+
multiple: findings.filter((finding) => finding.classifications.length > 1),
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
/** The sentence an author reads, per failure kind. One spelling, two hosts. */
|
|
313
|
+
export function remedyFor(finding) {
|
|
314
|
+
if (finding.classifications.length === 0) {
|
|
315
|
+
return (`${finding.className} is a persisted entity carrying no tenant-scope classification, so ` +
|
|
316
|
+
`the global-filter guard never applies to it (Constitution XI). Add exactly one of ` +
|
|
317
|
+
`@${CLASSIFICATION_DECORATOR_NAMES.join(' / @')}.`);
|
|
318
|
+
}
|
|
319
|
+
return (`${finding.className} carries ${finding.classifications.length} tenant-scope ` +
|
|
320
|
+
`classifications (${finding.classifications.map((name) => `@${name}`).join(', ')}), so which ` +
|
|
321
|
+
`guard applies to it cannot be read off the class. Keep exactly one.`);
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=entity-tenant-classification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-tenant-classification.js","sourceRoot":"","sources":["../../src/rules/entity-tenant-classification.ts"],"names":[],"mappings":"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"}
|