@endora-commerce/cli 0.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +37 -0
  3. package/dist/bin/endora.d.ts +28 -0
  4. package/dist/bin/endora.d.ts.map +1 -0
  5. package/dist/bin/endora.js +926 -0
  6. package/dist/bin/endora.js.map +1 -0
  7. package/dist/check/estate.d.ts +189 -0
  8. package/dist/check/estate.d.ts.map +1 -0
  9. package/dist/check/estate.js +1037 -0
  10. package/dist/check/estate.js.map +1 -0
  11. package/dist/check/hosts.d.ts +25 -0
  12. package/dist/check/hosts.d.ts.map +1 -0
  13. package/dist/check/hosts.js +1347 -0
  14. package/dist/check/hosts.js.map +1 -0
  15. package/dist/check/index.d.ts +60 -0
  16. package/dist/check/index.d.ts.map +1 -0
  17. package/dist/check/index.js +111 -0
  18. package/dist/check/index.js.map +1 -0
  19. package/dist/check/layout.d.ts +136 -0
  20. package/dist/check/layout.d.ts.map +1 -0
  21. package/dist/check/layout.js +262 -0
  22. package/dist/check/layout.js.map +1 -0
  23. package/dist/check/ledger.d.ts +98 -0
  24. package/dist/check/ledger.d.ts.map +1 -0
  25. package/dist/check/ledger.js +173 -0
  26. package/dist/check/ledger.js.map +1 -0
  27. package/dist/check/peer-owners.d.ts +116 -0
  28. package/dist/check/peer-owners.d.ts.map +1 -0
  29. package/dist/check/peer-owners.js +225 -0
  30. package/dist/check/peer-owners.js.map +1 -0
  31. package/dist/check/report.d.ts +33 -0
  32. package/dist/check/report.d.ts.map +1 -0
  33. package/dist/check/report.js +107 -0
  34. package/dist/check/report.js.map +1 -0
  35. package/dist/check/run.d.ts +147 -0
  36. package/dist/check/run.d.ts.map +1 -0
  37. package/dist/check/run.js +111 -0
  38. package/dist/check/run.js.map +1 -0
  39. package/dist/checks.d.ts +17 -0
  40. package/dist/checks.d.ts.map +1 -0
  41. package/dist/checks.js +17 -0
  42. package/dist/checks.js.map +1 -0
  43. package/dist/dev/index.d.ts +83 -0
  44. package/dist/dev/index.d.ts.map +1 -0
  45. package/dist/dev/index.js +298 -0
  46. package/dist/dev/index.js.map +1 -0
  47. package/dist/generate/divergence.d.ts +38 -0
  48. package/dist/generate/divergence.d.ts.map +1 -0
  49. package/dist/generate/divergence.js +237 -0
  50. package/dist/generate/divergence.js.map +1 -0
  51. package/dist/generate/index.d.ts +90 -0
  52. package/dist/generate/index.d.ts.map +1 -0
  53. package/dist/generate/index.js +369 -0
  54. package/dist/generate/index.js.map +1 -0
  55. package/dist/index.d.ts +23 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +35 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/inputs/declaration.d.ts +18 -0
  60. package/dist/inputs/declaration.d.ts.map +1 -0
  61. package/dist/inputs/declaration.js +64 -0
  62. package/dist/inputs/declaration.js.map +1 -0
  63. package/dist/inputs/env-file.d.ts +73 -0
  64. package/dist/inputs/env-file.d.ts.map +1 -0
  65. package/dist/inputs/env-file.js +134 -0
  66. package/dist/inputs/env-file.js.map +1 -0
  67. package/dist/inputs/prompt.d.ts +21 -0
  68. package/dist/inputs/prompt.d.ts.map +1 -0
  69. package/dist/inputs/prompt.js +59 -0
  70. package/dist/inputs/prompt.js.map +1 -0
  71. package/dist/inputs/resolve.d.ts +163 -0
  72. package/dist/inputs/resolve.d.ts.map +1 -0
  73. package/dist/inputs/resolve.js +290 -0
  74. package/dist/inputs/resolve.js.map +1 -0
  75. package/dist/install/host.d.ts +27 -0
  76. package/dist/install/host.d.ts.map +1 -0
  77. package/dist/install/host.js +90 -0
  78. package/dist/install/host.js.map +1 -0
  79. package/dist/install/index.d.ts +173 -0
  80. package/dist/install/index.d.ts.map +1 -0
  81. package/dist/install/index.js +793 -0
  82. package/dist/install/index.js.map +1 -0
  83. package/dist/install/wizard.d.ts +144 -0
  84. package/dist/install/wizard.d.ts.map +1 -0
  85. package/dist/install/wizard.js +362 -0
  86. package/dist/install/wizard.js.map +1 -0
  87. package/dist/lib/admin-artefacts.d.ts +70 -0
  88. package/dist/lib/admin-artefacts.d.ts.map +1 -0
  89. package/dist/lib/admin-artefacts.js +354 -0
  90. package/dist/lib/admin-artefacts.js.map +1 -0
  91. package/dist/lib/admin-surfaces.d.ts +298 -0
  92. package/dist/lib/admin-surfaces.d.ts.map +1 -0
  93. package/dist/lib/admin-surfaces.js +669 -0
  94. package/dist/lib/admin-surfaces.js.map +1 -0
  95. package/dist/lib/delegated-composer.d.ts +85 -0
  96. package/dist/lib/delegated-composer.d.ts.map +1 -0
  97. package/dist/lib/delegated-composer.js +241 -0
  98. package/dist/lib/delegated-composer.js.map +1 -0
  99. package/dist/lib/divergence-artefacts.d.ts +305 -0
  100. package/dist/lib/divergence-artefacts.d.ts.map +1 -0
  101. package/dist/lib/divergence-artefacts.js +828 -0
  102. package/dist/lib/divergence-artefacts.js.map +1 -0
  103. package/dist/lib/divergence.d.ts +337 -0
  104. package/dist/lib/divergence.d.ts.map +1 -0
  105. package/dist/lib/divergence.js +1005 -0
  106. package/dist/lib/divergence.js.map +1 -0
  107. package/dist/lib/docs-artefacts.d.ts +395 -0
  108. package/dist/lib/docs-artefacts.d.ts.map +1 -0
  109. package/dist/lib/docs-artefacts.js +781 -0
  110. package/dist/lib/docs-artefacts.js.map +1 -0
  111. package/dist/lib/emitted-exports.d.ts +21 -0
  112. package/dist/lib/emitted-exports.d.ts.map +1 -0
  113. package/dist/lib/emitted-exports.js +96 -0
  114. package/dist/lib/emitted-exports.js.map +1 -0
  115. package/dist/lib/emitted-freshness.d.ts +112 -0
  116. package/dist/lib/emitted-freshness.d.ts.map +1 -0
  117. package/dist/lib/emitted-freshness.js +288 -0
  118. package/dist/lib/emitted-freshness.js.map +1 -0
  119. package/dist/lib/entity-index-artefact.d.ts +95 -0
  120. package/dist/lib/entity-index-artefact.d.ts.map +1 -0
  121. package/dist/lib/entity-index-artefact.js +210 -0
  122. package/dist/lib/entity-index-artefact.js.map +1 -0
  123. package/dist/lib/instance-build-inputs.d.ts +108 -0
  124. package/dist/lib/instance-build-inputs.d.ts.map +1 -0
  125. package/dist/lib/instance-build-inputs.js +165 -0
  126. package/dist/lib/instance-build-inputs.js.map +1 -0
  127. package/dist/lib/module-docs.d.ts +473 -0
  128. package/dist/lib/module-docs.d.ts.map +1 -0
  129. package/dist/lib/module-docs.js +711 -0
  130. package/dist/lib/module-docs.js.map +1 -0
  131. package/dist/lib/module-package-subpaths.d.ts +56 -0
  132. package/dist/lib/module-package-subpaths.d.ts.map +1 -0
  133. package/dist/lib/module-package-subpaths.js +223 -0
  134. package/dist/lib/module-package-subpaths.js.map +1 -0
  135. package/dist/lib/module-packages.d.ts +200 -0
  136. package/dist/lib/module-packages.d.ts.map +1 -0
  137. package/dist/lib/module-packages.js +580 -0
  138. package/dist/lib/module-packages.js.map +1 -0
  139. package/dist/lib/module-population.d.ts +129 -0
  140. package/dist/lib/module-population.d.ts.map +1 -0
  141. package/dist/lib/module-population.js +172 -0
  142. package/dist/lib/module-population.js.map +1 -0
  143. package/dist/lib/module-roots.d.ts +337 -0
  144. package/dist/lib/module-roots.d.ts.map +1 -0
  145. package/dist/lib/module-roots.js +586 -0
  146. package/dist/lib/module-roots.js.map +1 -0
  147. package/dist/lib/nested-checkouts.d.ts +33 -0
  148. package/dist/lib/nested-checkouts.d.ts.map +1 -0
  149. package/dist/lib/nested-checkouts.js +160 -0
  150. package/dist/lib/nested-checkouts.js.map +1 -0
  151. package/dist/lib/platform-root.d.ts +43 -0
  152. package/dist/lib/platform-root.d.ts.map +1 -0
  153. package/dist/lib/platform-root.js +134 -0
  154. package/dist/lib/platform-root.js.map +1 -0
  155. package/dist/lib/platform-surface.d.ts +235 -0
  156. package/dist/lib/platform-surface.d.ts.map +1 -0
  157. package/dist/lib/platform-surface.js +393 -0
  158. package/dist/lib/platform-surface.js.map +1 -0
  159. package/dist/lib/port-registrations.d.ts +223 -0
  160. package/dist/lib/port-registrations.d.ts.map +1 -0
  161. package/dist/lib/port-registrations.js +532 -0
  162. package/dist/lib/port-registrations.js.map +1 -0
  163. package/dist/lib/read-size.d.ts +154 -0
  164. package/dist/lib/read-size.d.ts.map +1 -0
  165. package/dist/lib/read-size.js +182 -0
  166. package/dist/lib/read-size.js.map +1 -0
  167. package/dist/lib/registration-owners.d.ts +79 -0
  168. package/dist/lib/registration-owners.d.ts.map +1 -0
  169. package/dist/lib/registration-owners.js +77 -0
  170. package/dist/lib/registration-owners.js.map +1 -0
  171. package/dist/lib/release-index.d.ts +53 -0
  172. package/dist/lib/release-index.d.ts.map +1 -0
  173. package/dist/lib/release-index.js +162 -0
  174. package/dist/lib/release-index.js.map +1 -0
  175. package/dist/lib/repeating-timers.d.ts +79 -0
  176. package/dist/lib/repeating-timers.d.ts.map +1 -0
  177. package/dist/lib/repeating-timers.js +189 -0
  178. package/dist/lib/repeating-timers.js.map +1 -0
  179. package/dist/lib/source-text.d.ts +34 -0
  180. package/dist/lib/source-text.d.ts.map +1 -0
  181. package/dist/lib/source-text.js +80 -0
  182. package/dist/lib/source-text.js.map +1 -0
  183. package/dist/lib/specifiers.d.ts +20 -0
  184. package/dist/lib/specifiers.d.ts.map +1 -0
  185. package/dist/lib/specifiers.js +130 -0
  186. package/dist/lib/specifiers.js.map +1 -0
  187. package/dist/lib/sql-tables.d.ts +166 -0
  188. package/dist/lib/sql-tables.d.ts.map +1 -0
  189. package/dist/lib/sql-tables.js +464 -0
  190. package/dist/lib/sql-tables.js.map +1 -0
  191. package/dist/lib/switchable-modules.d.ts +54 -0
  192. package/dist/lib/switchable-modules.d.ts.map +1 -0
  193. package/dist/lib/switchable-modules.js +104 -0
  194. package/dist/lib/switchable-modules.js.map +1 -0
  195. package/dist/lib/tailwind-sources.d.ts +136 -0
  196. package/dist/lib/tailwind-sources.d.ts.map +1 -0
  197. package/dist/lib/tailwind-sources.js +307 -0
  198. package/dist/lib/tailwind-sources.js.map +1 -0
  199. package/dist/lib/ui-layer.d.ts +54 -0
  200. package/dist/lib/ui-layer.d.ts.map +1 -0
  201. package/dist/lib/ui-layer.js +57 -0
  202. package/dist/lib/ui-layer.js.map +1 -0
  203. package/dist/lib/workspace-packages.d.ts +186 -0
  204. package/dist/lib/workspace-packages.d.ts.map +1 -0
  205. package/dist/lib/workspace-packages.js +351 -0
  206. package/dist/lib/workspace-packages.js.map +1 -0
  207. package/dist/new-instance/deploy.d.ts +211 -0
  208. package/dist/new-instance/deploy.d.ts.map +1 -0
  209. package/dist/new-instance/deploy.js +1381 -0
  210. package/dist/new-instance/deploy.js.map +1 -0
  211. package/dist/new-instance/docs-toolchain.d.ts +66 -0
  212. package/dist/new-instance/docs-toolchain.d.ts.map +1 -0
  213. package/dist/new-instance/docs-toolchain.js +69 -0
  214. package/dist/new-instance/docs-toolchain.js.map +1 -0
  215. package/dist/new-instance/host.d.ts +124 -0
  216. package/dist/new-instance/host.d.ts.map +1 -0
  217. package/dist/new-instance/host.js +276 -0
  218. package/dist/new-instance/host.js.map +1 -0
  219. package/dist/new-instance/index.d.ts +118 -0
  220. package/dist/new-instance/index.d.ts.map +1 -0
  221. package/dist/new-instance/index.js +567 -0
  222. package/dist/new-instance/index.js.map +1 -0
  223. package/dist/new-instance/modules.d.ts +188 -0
  224. package/dist/new-instance/modules.d.ts.map +1 -0
  225. package/dist/new-instance/modules.js +392 -0
  226. package/dist/new-instance/modules.js.map +1 -0
  227. package/dist/new-instance/template.d.ts +505 -0
  228. package/dist/new-instance/template.d.ts.map +1 -0
  229. package/dist/new-instance/template.js +1886 -0
  230. package/dist/new-instance/template.js.map +1 -0
  231. package/dist/new-module/emit.d.ts +67 -0
  232. package/dist/new-module/emit.d.ts.map +1 -0
  233. package/dist/new-module/emit.js +1393 -0
  234. package/dist/new-module/emit.js.map +1 -0
  235. package/dist/new-module/host.d.ts +67 -0
  236. package/dist/new-module/host.d.ts.map +1 -0
  237. package/dist/new-module/host.js +224 -0
  238. package/dist/new-module/host.js.map +1 -0
  239. package/dist/new-module/index.d.ts +32 -0
  240. package/dist/new-module/index.d.ts.map +1 -0
  241. package/dist/new-module/index.js +193 -0
  242. package/dist/new-module/index.js.map +1 -0
  243. package/dist/new-module/spec.d.ts +188 -0
  244. package/dist/new-module/spec.d.ts.map +1 -0
  245. package/dist/new-module/spec.js +404 -0
  246. package/dist/new-module/spec.js.map +1 -0
  247. package/dist/new-module/text.d.ts +15 -0
  248. package/dist/new-module/text.d.ts.map +1 -0
  249. package/dist/new-module/text.js +22 -0
  250. package/dist/new-module/text.js.map +1 -0
  251. package/dist/new-storefront/dockerfile.d.ts +20 -0
  252. package/dist/new-storefront/dockerfile.d.ts.map +1 -0
  253. package/dist/new-storefront/dockerfile.js +131 -0
  254. package/dist/new-storefront/dockerfile.js.map +1 -0
  255. package/dist/new-storefront/gitignore.d.ts +23 -0
  256. package/dist/new-storefront/gitignore.d.ts.map +1 -0
  257. package/dist/new-storefront/gitignore.js +39 -0
  258. package/dist/new-storefront/gitignore.js.map +1 -0
  259. package/dist/new-storefront/index.d.ts +93 -0
  260. package/dist/new-storefront/index.d.ts.map +1 -0
  261. package/dist/new-storefront/index.js +329 -0
  262. package/dist/new-storefront/index.js.map +1 -0
  263. package/dist/new-storefront/npmrc.d.ts +98 -0
  264. package/dist/new-storefront/npmrc.d.ts.map +1 -0
  265. package/dist/new-storefront/npmrc.js +217 -0
  266. package/dist/new-storefront/npmrc.js.map +1 -0
  267. package/dist/new-storefront/reference.d.ts +189 -0
  268. package/dist/new-storefront/reference.d.ts.map +1 -0
  269. package/dist/new-storefront/reference.js +430 -0
  270. package/dist/new-storefront/reference.js.map +1 -0
  271. package/dist/new-storefront/rewrite.d.ts +171 -0
  272. package/dist/new-storefront/rewrite.d.ts.map +1 -0
  273. package/dist/new-storefront/rewrite.js +701 -0
  274. package/dist/new-storefront/rewrite.js.map +1 -0
  275. package/dist/release-index.json +284 -0
  276. package/dist/rules/action-route-permissions.d.ts +141 -0
  277. package/dist/rules/action-route-permissions.d.ts.map +1 -0
  278. package/dist/rules/action-route-permissions.js +556 -0
  279. package/dist/rules/action-route-permissions.js.map +1 -0
  280. package/dist/rules/bundle-pairing.d.ts +74 -0
  281. package/dist/rules/bundle-pairing.d.ts.map +1 -0
  282. package/dist/rules/bundle-pairing.js +281 -0
  283. package/dist/rules/bundle-pairing.js.map +1 -0
  284. package/dist/rules/channel-resolution.d.ts +17 -0
  285. package/dist/rules/channel-resolution.d.ts.map +1 -0
  286. package/dist/rules/channel-resolution.js +382 -0
  287. package/dist/rules/channel-resolution.js.map +1 -0
  288. package/dist/rules/command-coverage.d.ts +210 -0
  289. package/dist/rules/command-coverage.d.ts.map +1 -0
  290. package/dist/rules/command-coverage.js +714 -0
  291. package/dist/rules/command-coverage.js.map +1 -0
  292. package/dist/rules/container-imports.d.ts +60 -0
  293. package/dist/rules/container-imports.d.ts.map +1 -0
  294. package/dist/rules/container-imports.js +158 -0
  295. package/dist/rules/container-imports.js.map +1 -0
  296. package/dist/rules/default-language-prose.d.ts +212 -0
  297. package/dist/rules/default-language-prose.d.ts.map +1 -0
  298. package/dist/rules/default-language-prose.js +710 -0
  299. package/dist/rules/default-language-prose.js.map +1 -0
  300. package/dist/rules/diacritic-folds.d.ts +238 -0
  301. package/dist/rules/diacritic-folds.d.ts.map +1 -0
  302. package/dist/rules/diacritic-folds.js +681 -0
  303. package/dist/rules/diacritic-folds.js.map +1 -0
  304. package/dist/rules/entity-tenant-classification.d.ts +171 -0
  305. package/dist/rules/entity-tenant-classification.d.ts.map +1 -0
  306. package/dist/rules/entity-tenant-classification.js +323 -0
  307. package/dist/rules/entity-tenant-classification.js.map +1 -0
  308. package/dist/rules/entry-presence.d.ts +142 -0
  309. package/dist/rules/entry-presence.d.ts.map +1 -0
  310. package/dist/rules/entry-presence.js +339 -0
  311. package/dist/rules/entry-presence.js.map +1 -0
  312. package/dist/rules/entry-scope.d.ts +91 -0
  313. package/dist/rules/entry-scope.d.ts.map +1 -0
  314. package/dist/rules/entry-scope.js +404 -0
  315. package/dist/rules/entry-scope.js.map +1 -0
  316. package/dist/rules/env-inputs.d.ts +222 -0
  317. package/dist/rules/env-inputs.d.ts.map +1 -0
  318. package/dist/rules/env-inputs.js +951 -0
  319. package/dist/rules/env-inputs.js.map +1 -0
  320. package/dist/rules/kernel-boundary.d.ts +37 -0
  321. package/dist/rules/kernel-boundary.d.ts.map +1 -0
  322. package/dist/rules/kernel-boundary.js +195 -0
  323. package/dist/rules/kernel-boundary.js.map +1 -0
  324. package/dist/rules/nul-bytes.d.ts +233 -0
  325. package/dist/rules/nul-bytes.d.ts.map +1 -0
  326. package/dist/rules/nul-bytes.js +332 -0
  327. package/dist/rules/nul-bytes.js.map +1 -0
  328. package/dist/rules/platform-surface.d.ts +479 -0
  329. package/dist/rules/platform-surface.d.ts.map +1 -0
  330. package/dist/rules/platform-surface.js +749 -0
  331. package/dist/rules/platform-surface.js.map +1 -0
  332. package/dist/rules/port-catches.d.ts +225 -0
  333. package/dist/rules/port-catches.d.ts.map +1 -0
  334. package/dist/rules/port-catches.js +1374 -0
  335. package/dist/rules/port-catches.js.map +1 -0
  336. package/dist/rules/port-shape.d.ts +213 -0
  337. package/dist/rules/port-shape.d.ts.map +1 -0
  338. package/dist/rules/port-shape.js +670 -0
  339. package/dist/rules/port-shape.js.map +1 -0
  340. package/dist/rules/queue-names.d.ts +108 -0
  341. package/dist/rules/queue-names.d.ts.map +1 -0
  342. package/dist/rules/queue-names.js +395 -0
  343. package/dist/rules/queue-names.js.map +1 -0
  344. package/dist/rules/singleton-identity.d.ts +205 -0
  345. package/dist/rules/singleton-identity.d.ts.map +1 -0
  346. package/dist/rules/singleton-identity.js +830 -0
  347. package/dist/rules/singleton-identity.js.map +1 -0
  348. package/dist/rules/subscribe-seam.d.ts +121 -0
  349. package/dist/rules/subscribe-seam.d.ts.map +1 -0
  350. package/dist/rules/subscribe-seam.js +594 -0
  351. package/dist/rules/subscribe-seam.js.map +1 -0
  352. package/dist/rules/transaction-context.d.ts +40 -0
  353. package/dist/rules/transaction-context.d.ts.map +1 -0
  354. package/dist/rules/transaction-context.js +294 -0
  355. package/dist/rules/transaction-context.js.map +1 -0
  356. package/package.json +59 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,6EAA6E;AAC7E,MAAM,CAAC,MAAM,MAAM,GAAG,yBAAyB,CAAC;AAEhD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAsB;IAC/D,WAAW;IACX,gBAAgB;IAChB,cAAc;IACd,oBAAoB;IACpB,YAAY;CACb,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAwB,IAAI,GAAG,CACnE,8BAA8B,CAC/B,CAAC;AAEF,sFAAsF;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAQvD;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAAC,GAAW,EAAE,MAAgB,EAAE;IAClD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACjC,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,MAAM;gBAAE,SAAS;YACzD,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACzF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,MAAgB,EAAE;IACzD,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,SAAkB,CAAC;QACvB,IAAI,CAAC;YACH,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,IAAI,KAAK,cAAc;gBAAE,SAAS;YACtC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gFAAgF;AAChF,SAAS,WAAW,CAAC,UAAyB;IAC5C,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;IACpF,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAChD,4EAA4E;IAC5E,+EAA+E;IAC/E,IAAI,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IACnG,4EAA4E;IAC5E,IAAI,EAAE,CAAC,yBAAyB,CAAC,MAAM,CAAC;QAAE,OAAO,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChF,IAAI,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC5F,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,SAAuB;IAC5C,OAAO,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,4EAA4E;AAC5E,SAAS,SAAS,CAAC,KAAwB,EAAE,SAAiB,EAAE,IAAY;IAC1E,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,yBAAyB;IACrE,OAAO;QACL,IAAI;QACJ,SAAS;QACT,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,kHAAkH;AAClH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,IAAY;IACxD,MAAM,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,EAAE,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;QACvB,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAAE,OAAO;QACzC,MAAM,UAAU,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,aAAa,EAAE,IAAI,CAAC,CAAC;QACzE,IAAI,OAAO,KAAK,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,IAAY;IACzD,MAAM,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,YAAY,EAAE,CAAC;YAC/E,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YAC5C,IACE,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;gBAC3B,UAAU,KAAK,SAAS;gBACxB,EAAE,CAAC,wBAAwB,CAAC,UAAU,CAAC;gBACvC,MAAM,KAAK,SAAS;gBACpB,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EACvB,CAAC;gBACD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ;qBAC9B,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;qBACtC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;gBACxD,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACpD,IAAI,OAAO,KAAK,IAAI;oBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC;IACF,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,IAAY;IAChE,MAAM,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,OAAO,GAAG,CAAC,KAAgC,EAAQ,EAAE;QACzD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,kCAAkC;QAClC,IACE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAC9B,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU;YAC7B,IAAI,CAAC,WAAW,KAAK,SAAS;YAC9B,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,EAC7C,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;QACD,6BAA6B;QAC7B,IACE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,WAAW;YACrD,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU;YAClC,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EACvC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC;IACF,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC;AACf,CAAC;AAgBD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAoC;IACxE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,GAAG,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,WAAW,GAAG;QACxD,eAAe,EAAE,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC;KAC7C,CAAC,CAAC,CAAC;AACN,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,mBAAmB,CAAC,KAAwB;IAC1D,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,SAAS;QAClD,QAAQ,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAQD;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAkC;IACjE,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC;QAC9E,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC;QAChF,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,SAAS,CAAC,OAAsB;IAC9C,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CACL,GAAG,OAAO,CAAC,SAAS,qEAAqE;YACzF,oFAAoF;YACpF,IAAI,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CACnD,CAAC;IACJ,CAAC;IACD,OAAO,CACL,GAAG,OAAO,CAAC,SAAS,YAAY,OAAO,CAAC,eAAe,CAAC,MAAM,gBAAgB;QAC9E,oBAAoB,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc;QAC9F,qEAAqE,CACtE,CAAC;AACJ,CAAC"}