@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":"port-shape.js","sourceRoot":"","sources":["../../src/rules/port-shape.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { type HostResidentModules } from '../lib/module-population.js';
2
+ /**
3
+ * The BullMQ classes whose **first constructor argument is the queue name**.
4
+ *
5
+ * Derived from the library rather than guessed: every class under
6
+ * `bullmq/dist/<target>/classes/` that extends `QueueBase` takes `(name, …)`, because
7
+ * `QueueBase` itself does and it is `QueueBase` that throws. In 5.76.1 that is
8
+ * `Worker`, `QueueEvents`, `QueueEventsProducer`, `QueueGetters`,
9
+ * `JobScheduler` and `Repeat`, plus `Queue` through `QueueGetters` and
10
+ * `QueueBase` itself. Only the ones a consumer is meant to construct are listed
11
+ * — `Repeat` and `QueueGetters` are internal, and naming them costs nothing.
12
+ *
13
+ * `FlowProducer` is deliberately absent: it takes options, not a name, and
14
+ * names its queues per flow node. Nothing in this tree constructs one.
15
+ */
16
+ export declare const QUEUE_NAME_CLASSES: ReadonlySet<string>;
17
+ /** The one finding kind. See the header for why there is no second one. */
18
+ export type QueueNameFindingKind = 'colon-in-queue-name';
19
+ /** How argument 0 was resolved, which decides where the remedy is. */
20
+ export type QueueNameResolution =
21
+ /** A literal at the construction site. */
22
+ 'literal'
23
+ /** A `const` declared in the same file. */
24
+ | 'same-file-constant'
25
+ /** A `const` in a file this one imported from a relative specifier. */
26
+ | 'imported-constant'
27
+ /** Not resolvable from source text: a parameter, a property, a computed name. */
28
+ | 'unresolved';
29
+ export interface QueueNameSite {
30
+ /** Path under the walk root, POSIX separators. */
31
+ readonly file: string;
32
+ readonly line: number;
33
+ /** `null` outside a module — the kernel, a composition root, the platform. */
34
+ readonly moduleId: string | null;
35
+ /** The BullMQ class, by its *imported* name whatever it was bound to. */
36
+ readonly className: string;
37
+ /** Argument 0 as written, for the message. */
38
+ readonly spelling: string;
39
+ readonly resolution: QueueNameResolution;
40
+ /** The resolved name, or `null` for an unresolved site. */
41
+ readonly name: string | null;
42
+ /** `<file>:<line>` of the literal, when it is not at the site. */
43
+ readonly declaredAt: string | null;
44
+ }
45
+ export interface QueueNameFinding {
46
+ readonly kind: QueueNameFindingKind;
47
+ readonly site: QueueNameSite;
48
+ /** The offending name, never `null` — a finding implies a resolved site. */
49
+ readonly name: string;
50
+ }
51
+ /**
52
+ * `<file>:<name>` — the identity of a finding.
53
+ *
54
+ * Keyed on the **construction site's** file and the name rather than on a line,
55
+ * so moving the call inside its file does not change it. There is no ledger to
56
+ * key (see the header), but `endora check` keys every finding it reports and
57
+ * the two hosts must agree on the spelling.
58
+ */
59
+ export declare function keyOf(site: QueueNameSite): string;
60
+ export interface QueueNamesInput {
61
+ /** Every source in the walk, keyed by path relative to the walk root. */
62
+ readonly sources: ReadonlyMap<string, string>;
63
+ /**
64
+ * Directories whose files belong to a module no `modules/<id>/` segment
65
+ * names — `lib/module-roots.ts`' `hostResidentModules`. Only used to
66
+ * *attribute* a site; a site outside every module is still judged, because a
67
+ * colon in the kernel's own queue name would stop the boot just as dead.
68
+ */
69
+ readonly hostResidentModules?: HostResidentModules | undefined;
70
+ }
71
+ export interface QueueNamesResult {
72
+ /** Every queue-name site read, resolved or not. */
73
+ readonly sites: readonly QueueNameSite[];
74
+ /** The sites whose name this could read — the population actually judged. */
75
+ readonly resolved: readonly QueueNameSite[];
76
+ readonly findings: readonly QueueNameFinding[];
77
+ }
78
+ /**
79
+ * Every queue-name site in the walk, and the colons among them.
80
+ *
81
+ * Two passes, because a name can be declared in one file and constructed in
82
+ * another: the first parses every source once and records its string constants
83
+ * and its `bullmq` bindings; the second walks for constructions and resolves
84
+ * argument 0 against the first. Parsing once matters — the repository walk is
85
+ * thousands of files.
86
+ */
87
+ export declare function checkQueueNames(input: QueueNamesInput): QueueNamesResult;
88
+ /**
89
+ * The remedy, as the failure message prints it.
90
+ *
91
+ * A function rather than a string in the host, because both hosts print it and
92
+ * two copies of a message are two messages that drift.
93
+ */
94
+ export declare function remedyFor(finding: QueueNameFinding): string;
95
+ /**
96
+ * Every file this rule judges, under `roots`.
97
+ *
98
+ * The same walk `collectSeamFiles` makes and deliberately a second **entry
99
+ * point** rather than a second definition: it is called from here so that a
100
+ * host holding one population can hand it to both rules, and so that a change
101
+ * to what "a source file" means cannot reach one rule and miss the other. The
102
+ * import direction is this way round because subscribe-seam's is the older
103
+ * definition; neither rule uses the other's analysis.
104
+ */
105
+ export declare function collectQueueNameFiles(roots: readonly string[]): string[];
106
+ /** True when a path is one of the walk's own sources. Exported for the hosts. */
107
+ export declare function opensQueueNames(file: string): boolean;
108
+ //# sourceMappingURL=queue-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-names.d.ts","sourceRoot":"","sources":["../../src/rules/queue-names.ts"],"names":[],"mappings":"AAgHA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,6BAA6B,CAAC;AAOrC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAQjD,CAAC;AAKH,2EAA2E;AAC3E,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAEzD,sEAAsE;AACtE,MAAM,MAAM,mBAAmB;AAC7B,0CAA0C;AACxC,SAAS;AACX,2CAA2C;GACzC,oBAAoB;AACtB,uEAAuE;GACrE,mBAAmB;AACrB,iFAAiF;GAC/E,YAAY,CAAC;AAEjB,MAAM,WAAW,aAAa;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,yEAAyE;IACzE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;IACzC,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAEjD;AAED,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAChE;AAED,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAChD;AAuHD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAgExE;AA0DD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAW3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAExE;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD"}
@@ -0,0 +1,395 @@
1
+ /**
2
+ * CI check — **a BullMQ queue name is a value the library accepts**, which
3
+ * today means one rule: it may not contain `:`.
4
+ *
5
+ * ## The defect it exists for
6
+ *
7
+ * `comarch_xl` named its three queues `comarch_xl:detect`, `comarch_xl:sync`
8
+ * and `comarch_xl:shop-export`. BullMQ owns `:` as its own Redis
9
+ * key-namespace separator and `new QueueBase` throws
10
+ * `Queue name cannot contain :` **before it reaches Redis**, so the module's
11
+ * `startWorkers` threw, its plugin never finished loading, and the process
12
+ * never listened. That reached `master` and stayed there, and the reason this
13
+ * is a check rather than a review note is that one bad value produced three
14
+ * symptoms that name three different things:
15
+ *
16
+ * - `boot-gate`, in all four of its cases: *"the positive container never
17
+ * logged `backend listening`"* — a container that does not start, naming
18
+ * no module and no queue;
19
+ * - `acceptance:package-schema` A6 — *"the activation control switches the
20
+ * package off and back on"* — **inconclusive**, because the throw landed
21
+ * in the *gate-off* phase. So the colon also took away the operator's
22
+ * ability to switch a module off (Constitution XVII), which is not a
23
+ * boot-time symptom at all;
24
+ * - `test:backend:deployment`, later, for a different reason entirely.
25
+ *
26
+ * Only the acceptance criterion's output quoted the cause, and it reached it by
27
+ * accident of running the gate. The estate had no rule whose population
28
+ * contained a queue **name**, so nothing refused the value where it was
29
+ * written.
30
+ *
31
+ * ## Why this is a check of its own
32
+ *
33
+ * `check:subscribe-seam` is the near miss and widening it was the serious
34
+ * alternative. It rejects for the reason `check:block-names` gives for the same
35
+ * decision about `check:admin-zones`: **no existing check's population contains
36
+ * a queue name.** Subscribe-seam's population is BullMQ *`Worker` sites* and
37
+ * its question is where the constructed value **goes** — into `ctx.worker` or
38
+ * onto the floor. It never reads argument 0, and `comarch_xl`'s three
39
+ * constructions are `new Queue(…)`, which is not in its population at all. A
40
+ * rule about the name would arrive there as issue #244's shape through the
41
+ * repair: a second subject inside a population that was derived for the first.
42
+ *
43
+ * ## What counts as a queue-name site
44
+ *
45
+ * `new <Binding>(<arg0>, …)` where `<Binding>` is what the file imported from
46
+ * `bullmq` — the import is followed, so `import { Queue as BullQueue }` is the
47
+ * same site — and the class is one whose **first constructor parameter is the
48
+ * queue name**. That set is {@link QUEUE_NAME_CLASSES}. It is written down,
49
+ * which is a liability the floor answers rather than hides: a run that resolves
50
+ * **no** queue name at all is exit 2 in the repository host, because this tree
51
+ * is known to hold queues, so a renamed export or a moved walk reds instead of
52
+ * printing a clean line (issue #113).
53
+ *
54
+ * `arg0` is resolved three ways, and the third is the one that catches the
55
+ * defect:
56
+ *
57
+ * 1. a string literal, or a template with no substitutions, read in place;
58
+ * 2. an identifier declared `const X = '…'` in the **same file** — which is
59
+ * `comarch_xl`'s shape, and `newsletter`'s, and `product_feeds`';
60
+ * 3. an identifier this file **imported** from a relative specifier, resolved
61
+ * one hop into the file that declares it — `infakt`'s shape, where
62
+ * `workers/queue-names.ts` declares and `workers/*-worker.ts` constructs.
63
+ *
64
+ * Anything else — a parameter (`createComarchXlWorker(queueName, …)`), a
65
+ * property access (`queue.name`), a template with a substitution, a re-export
66
+ * chain — is an **unresolved** site. It is counted in the read line and never
67
+ * judged, because a rule that guessed would report on code it cannot see. The
68
+ * cost is honest and bounded: every name in this tree is a literal at its
69
+ * declaration, so a colon is always reachable at *some* site even when one site
70
+ * hides it behind a parameter.
71
+ *
72
+ * What it cannot see, stated here rather than discovered later: a name assembled
73
+ * at runtime (`` `${prefix}:${id}` `` — no declaration holds the colon), a
74
+ * `FlowProducer` flow node's `queueName` **property** rather than a
75
+ * constructor argument (nothing in this tree uses one), a `QueueBase` subclass,
76
+ * and a computed callee. The first is the one worth knowing about: it would
77
+ * still be refused at runtime and this rule would be silent.
78
+ *
79
+ * ## The rule is narrow on purpose
80
+ *
81
+ * `:` is the whole rule, because `:` is what the library refuses. The
82
+ * repository's own convention is broader — `<module_id>.<verb>`, which nearly
83
+ * every queue follows — and it is deliberately **not** enforced here, because
84
+ * nobody has ruled on it and four names in the tree would need a ledger entry
85
+ * on day one: `infakt-delivery`, `wfirma-delivery`, `pim-pimcore-delivery` and
86
+ * `webhook.deliver` (whose module id is `webhooks`). Those are style; this is a
87
+ * process that does not start. If the broader rule is ever wanted, the shape is
88
+ * a second finding kind here — `name-not-module-scoped` — with a ledger holding
89
+ * those four and a reason per entry, and it needs a ruling first.
90
+ *
91
+ * ## No ledger, and that is the design
92
+ *
93
+ * Every other rule in this estate carries a two-way ledger for the finding that
94
+ * may legitimately stand. This one cannot have such a finding: a ledgered colon
95
+ * is a queue that cannot be constructed, so the entry would exempt a module
96
+ * from starting. The remedy is always available in the same merge request —
97
+ * rename the constant — so there is nothing to postpone.
98
+ *
99
+ * ## One analysis, two hosts
100
+ *
101
+ * This file is the analysis. `backend/scripts/check-queue-names.ts` hosts it
102
+ * over this repository's source roots; `endora check` hosts it over one module
103
+ * package (`specs/101-endora-check/contracts/package-scope-layout.md` §6). The
104
+ * *site floor* — no queue name resolved at all is exit 2 — is a statement about
105
+ * a **repository** known to hold queues; a single package holding none is the
106
+ * ordinary case, so the package host declares that signal unevaluated rather
107
+ * than refusing, exactly as subscribe-seam's worker floor does.
108
+ */
109
+ import { dirname, join } from 'node:path';
110
+ import ts from 'typescript';
111
+ import { NO_HOST_RESIDENT_MODULES, } from '../lib/module-population.js';
112
+ import { moduleOf } from './container-imports.js';
113
+ // The walk, not the seam's analysis: `collectSeamFiles` is this tree's one
114
+ // definition of "a source file a static check opens", and a second copy would
115
+ // be two definitions of one population. See `collectQueueNameFiles` below.
116
+ import { collectSeamFiles } from './subscribe-seam.js';
117
+ /**
118
+ * The BullMQ classes whose **first constructor argument is the queue name**.
119
+ *
120
+ * Derived from the library rather than guessed: every class under
121
+ * `bullmq/dist/<target>/classes/` that extends `QueueBase` takes `(name, …)`, because
122
+ * `QueueBase` itself does and it is `QueueBase` that throws. In 5.76.1 that is
123
+ * `Worker`, `QueueEvents`, `QueueEventsProducer`, `QueueGetters`,
124
+ * `JobScheduler` and `Repeat`, plus `Queue` through `QueueGetters` and
125
+ * `QueueBase` itself. Only the ones a consumer is meant to construct are listed
126
+ * — `Repeat` and `QueueGetters` are internal, and naming them costs nothing.
127
+ *
128
+ * `FlowProducer` is deliberately absent: it takes options, not a name, and
129
+ * names its queues per flow node. Nothing in this tree constructs one.
130
+ */
131
+ export const QUEUE_NAME_CLASSES = new Set([
132
+ 'Queue',
133
+ 'QueueBase',
134
+ 'QueueEvents',
135
+ 'QueueEventsProducer',
136
+ 'QueueGetters',
137
+ 'JobScheduler',
138
+ 'Worker',
139
+ ]);
140
+ /** What BullMQ owns, and therefore what a queue name may not contain. */
141
+ const FORBIDDEN_IN_A_QUEUE_NAME = ':';
142
+ /**
143
+ * `<file>:<name>` — the identity of a finding.
144
+ *
145
+ * Keyed on the **construction site's** file and the name rather than on a line,
146
+ * so moving the call inside its file does not change it. There is no ledger to
147
+ * key (see the header), but `endora check` keys every finding it reports and
148
+ * the two hosts must agree on the spelling.
149
+ */
150
+ export function keyOf(site) {
151
+ return `${site.file}:${site.name ?? '<unresolved>'}`;
152
+ }
153
+ /** The string a node denotes, through casts and substitution-free templates. */
154
+ function stringLiteralOf(node) {
155
+ if (ts.isStringLiteralLike(node))
156
+ return node.text;
157
+ if (ts.isNoSubstitutionTemplateLiteral(node))
158
+ return node.text;
159
+ if (ts.isAsExpression(node) ||
160
+ ts.isNonNullExpression(node) ||
161
+ ts.isParenthesizedExpression(node) ||
162
+ ts.isTypeAssertionExpression(node)) {
163
+ return stringLiteralOf(node.expression);
164
+ }
165
+ return null;
166
+ }
167
+ /** The identifier a node denotes, through the same wrappers. */
168
+ function identifierOf(node) {
169
+ if (ts.isIdentifier(node))
170
+ return node.text;
171
+ if (ts.isAsExpression(node) ||
172
+ ts.isNonNullExpression(node) ||
173
+ ts.isParenthesizedExpression(node) ||
174
+ ts.isTypeAssertionExpression(node)) {
175
+ return identifierOf(node.expression);
176
+ }
177
+ return null;
178
+ }
179
+ /** Every `const <name> = '<literal>'` in a file, with the line it sits on. */
180
+ function stringConstantsOf(sf) {
181
+ const found = new Map();
182
+ const visit = (node) => {
183
+ if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.initializer) {
184
+ const value = stringLiteralOf(node.initializer);
185
+ if (value !== null) {
186
+ found.set(node.name.text, {
187
+ value,
188
+ line: sf.getLineAndCharacterOfPosition(node.getStart(sf)).line + 1,
189
+ });
190
+ }
191
+ }
192
+ node.forEachChild(visit);
193
+ };
194
+ sf.forEachChild(visit);
195
+ return found;
196
+ }
197
+ /**
198
+ * The local names a file bound BullMQ's queue-name classes to.
199
+ *
200
+ * Keyed by the **local** name and valued by the imported one, so a site says
201
+ * which class it constructed whatever the file called it.
202
+ */
203
+ function bullmqQueueBindings(sf) {
204
+ const bindings = new Map();
205
+ for (const statement of sf.statements) {
206
+ if (!ts.isImportDeclaration(statement))
207
+ continue;
208
+ if (stringLiteralOf(statement.moduleSpecifier) !== 'bullmq')
209
+ continue;
210
+ const named = statement.importClause?.namedBindings;
211
+ if (!named || !ts.isNamedImports(named))
212
+ continue;
213
+ for (const element of named.elements) {
214
+ const imported = (element.propertyName ?? element.name).text;
215
+ if (QUEUE_NAME_CLASSES.has(imported))
216
+ bindings.set(element.name.text, imported);
217
+ }
218
+ }
219
+ return bindings;
220
+ }
221
+ /**
222
+ * Where a file imported an identifier from, when the specifier is relative.
223
+ *
224
+ * Returns the specifier, not a resolved path: resolution is the caller's,
225
+ * because only it knows the key shape of the walk it is holding.
226
+ */
227
+ function relativeImportOf(sf, name) {
228
+ for (const statement of sf.statements) {
229
+ if (!ts.isImportDeclaration(statement))
230
+ continue;
231
+ const specifier = stringLiteralOf(statement.moduleSpecifier);
232
+ if (specifier === null || !specifier.startsWith('.'))
233
+ continue;
234
+ const named = statement.importClause?.namedBindings;
235
+ if (!named || !ts.isNamedImports(named))
236
+ continue;
237
+ for (const element of named.elements) {
238
+ if (element.name.text === name)
239
+ return specifier;
240
+ }
241
+ }
242
+ return null;
243
+ }
244
+ /**
245
+ * The walk key a relative specifier names, or `null` when it leaves the walk.
246
+ *
247
+ * `./x.js` is how ESM-correct TypeScript spells `./x.ts`, so the `.js`
248
+ * extension is rewritten before the lookup; `./x` and `./x/index.js` are tried
249
+ * too. A specifier whose target is not in `sources` is not in the walk — a
250
+ * package, or a file the walk skipped — and resolving it further would be this
251
+ * rule reading a tree it was not handed.
252
+ */
253
+ function keyForSpecifier(fromKey, specifier, sources) {
254
+ const base = join(dirname(fromKey), specifier).split('\\').join('/');
255
+ const candidates = [
256
+ base.replace(/\.js$/, '.ts'),
257
+ base.replace(/\.js$/, '.tsx'),
258
+ `${base}.ts`,
259
+ `${base}.tsx`,
260
+ `${base}/index.ts`,
261
+ ];
262
+ for (const candidate of candidates) {
263
+ if (sources.has(candidate))
264
+ return candidate;
265
+ }
266
+ return null;
267
+ }
268
+ /**
269
+ * Every queue-name site in the walk, and the colons among them.
270
+ *
271
+ * Two passes, because a name can be declared in one file and constructed in
272
+ * another: the first parses every source once and records its string constants
273
+ * and its `bullmq` bindings; the second walks for constructions and resolves
274
+ * argument 0 against the first. Parsing once matters — the repository walk is
275
+ * thousands of files.
276
+ */
277
+ export function checkQueueNames(input) {
278
+ const hostResident = input.hostResidentModules ?? NO_HOST_RESIDENT_MODULES;
279
+ const parsed = new Map();
280
+ for (const [file, text] of input.sources) {
281
+ // A file with no `bullmq` import cannot hold a construction site, but it
282
+ // can hold the *declaration* a site in another file imports, so both halves
283
+ // are recorded for every file. `indexOf` first: parsing every source is the
284
+ // expensive part and a cheap pre-filter on the text is wrong here for the
285
+ // same reason — a declaration file names no queue class.
286
+ const sf = ts.createSourceFile(file, text, ts.ScriptTarget.Latest, true);
287
+ parsed.set(file, {
288
+ sf,
289
+ constants: stringConstantsOf(sf),
290
+ bindings: bullmqQueueBindings(sf),
291
+ });
292
+ }
293
+ const sites = [];
294
+ for (const [file, { sf, constants, bindings }] of parsed) {
295
+ if (bindings.size === 0)
296
+ continue;
297
+ const moduleId = moduleOf(`/src/${file}`, hostResident);
298
+ const visit = (node) => {
299
+ if (ts.isNewExpression(node)) {
300
+ const local = identifierOf(node.expression);
301
+ const className = local === null ? undefined : bindings.get(local);
302
+ const argument = node.arguments?.[0];
303
+ if (className !== undefined && argument !== undefined) {
304
+ sites.push({
305
+ file,
306
+ line: sf.getLineAndCharacterOfPosition(node.getStart(sf)).line + 1,
307
+ moduleId,
308
+ className,
309
+ spelling: argument.getText(sf),
310
+ ...resolveName(argument, { file, constants, sf, sources: input.sources, parsed }),
311
+ });
312
+ }
313
+ }
314
+ node.forEachChild(visit);
315
+ };
316
+ sf.forEachChild(visit);
317
+ }
318
+ sites.sort((a, b) => (a.file === b.file ? a.line - b.line : a.file.localeCompare(b.file)));
319
+ const resolved = sites.filter((site) => site.name !== null);
320
+ const findings = resolved
321
+ .filter((site) => site.name.includes(FORBIDDEN_IN_A_QUEUE_NAME))
322
+ .map((site) => ({
323
+ kind: 'colon-in-queue-name',
324
+ site,
325
+ name: site.name,
326
+ }));
327
+ return { sites, resolved, findings };
328
+ }
329
+ /** Argument 0's value and how it was reached — the three ways in the header. */
330
+ function resolveName(argument, context) {
331
+ const literal = stringLiteralOf(argument);
332
+ if (literal !== null) {
333
+ return { resolution: 'literal', name: literal, declaredAt: null };
334
+ }
335
+ const identifier = identifierOf(argument);
336
+ if (identifier === null) {
337
+ return { resolution: 'unresolved', name: null, declaredAt: null };
338
+ }
339
+ const local = context.constants.get(identifier);
340
+ if (local !== undefined) {
341
+ return {
342
+ resolution: 'same-file-constant',
343
+ name: local.value,
344
+ declaredAt: `${context.file}:${local.line}`,
345
+ };
346
+ }
347
+ const specifier = relativeImportOf(context.sf, identifier);
348
+ if (specifier !== null) {
349
+ const key = keyForSpecifier(context.file, specifier, context.sources);
350
+ const target = key === null ? undefined : context.parsed.get(key);
351
+ const declared = target?.constants.get(identifier);
352
+ if (key !== null && declared !== undefined) {
353
+ return {
354
+ resolution: 'imported-constant',
355
+ name: declared.value,
356
+ declaredAt: `${key}:${declared.line}`,
357
+ };
358
+ }
359
+ }
360
+ return { resolution: 'unresolved', name: null, declaredAt: null };
361
+ }
362
+ /**
363
+ * The remedy, as the failure message prints it.
364
+ *
365
+ * A function rather than a string in the host, because both hosts print it and
366
+ * two copies of a message are two messages that drift.
367
+ */
368
+ export function remedyFor(finding) {
369
+ const { site } = finding;
370
+ const where = site.declaredAt === null ? `${site.file}:${site.line}` : site.declaredAt;
371
+ return (`new ${site.className}('${finding.name}') — a BullMQ queue name may not contain ':'. ` +
372
+ `BullMQ owns that character as its Redis key-namespace separator and \`new QueueBase\` ` +
373
+ `throws \`Queue name cannot contain :\` before it reaches Redis, so this does not ` +
374
+ `misbehave: the process never listens, and an operator cannot switch the module off ` +
375
+ `either (the throw lands in gate-off too). Rename it at ${where} — the tree's ` +
376
+ `convention is \`<module_id>.<verb>\`, e.g. \`${finding.name.split(':').join('.')}\`.`);
377
+ }
378
+ /**
379
+ * Every file this rule judges, under `roots`.
380
+ *
381
+ * The same walk `collectSeamFiles` makes and deliberately a second **entry
382
+ * point** rather than a second definition: it is called from here so that a
383
+ * host holding one population can hand it to both rules, and so that a change
384
+ * to what "a source file" means cannot reach one rule and miss the other. The
385
+ * import direction is this way round because subscribe-seam's is the older
386
+ * definition; neither rule uses the other's analysis.
387
+ */
388
+ export function collectQueueNameFiles(roots) {
389
+ return collectSeamFiles(roots);
390
+ }
391
+ /** True when a path is one of the walk's own sources. Exported for the hosts. */
392
+ export function opensQueueNames(file) {
393
+ return file.endsWith('.ts') && !file.endsWith('.test.ts') && !file.endsWith('.d.ts');
394
+ }
395
+ //# sourceMappingURL=queue-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-names.js","sourceRoot":"","sources":["../../src/rules/queue-names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2GG;AACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EACL,wBAAwB,GAEzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,2EAA2E;AAC3E,8EAA8E;AAC9E,2EAA2E;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IAC7D,OAAO;IACP,WAAW;IACX,aAAa;IACb,qBAAqB;IACrB,cAAc;IACd,cAAc;IACd,QAAQ;CACT,CAAC,CAAC;AAEH,yEAAyE;AACzE,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAwCtC;;;;;;;GAOG;AACH,MAAM,UAAU,KAAK,CAAC,IAAmB;IACvC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC;AACvD,CAAC;AAsBD,gFAAgF;AAChF,SAAS,eAAe,CAAC,IAAa;IACpC,IAAI,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IACnD,IAAI,EAAE,CAAC,+BAA+B,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAC/D,IACE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;QACvB,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC5B,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC;QAClC,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAClC,CAAC;QACD,OAAO,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gEAAgE;AAChE,SAAS,YAAY,CAAC,IAAa;IACjC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAC5C,IACE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;QACvB,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;QAC5B,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC;QAClC,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAClC,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,SAAS,iBAAiB,CAAC,EAAiB;IAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2C,CAAC;IACjE,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;QACpC,IAAI,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrF,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAChD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;oBACxB,KAAK;oBACL,IAAI,EAAE,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;iBACnE,CAAC,CAAC;YACL,CAAC;QACH,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;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,EAAiB;IAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC;YAAE,SAAS;QACjD,IAAI,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,QAAQ;YAAE,SAAS;QACtE,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC;QACpD,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC;YAAE,SAAS;QAClD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YAC7D,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,EAAiB,EAAE,IAAY;IACvD,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QACtC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC;YAAE,SAAS;QACjD,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC7D,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC;QACpD,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC;YAAE,SAAS;QAClD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI;gBAAE,OAAO,SAAS,CAAC;QACnD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,eAAe,CACtB,OAAe,EACf,SAAiB,EACjB,OAAoC;IAEpC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;QAC7B,GAAG,IAAI,KAAK;QACZ,GAAG,IAAI,MAAM;QACb,GAAG,IAAI,WAAW;KACnB,CAAC;IACF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,KAAsB;IACpD,MAAM,YAAY,GAAG,KAAK,CAAC,mBAAmB,IAAI,wBAAwB,CAAC;IAE3E,MAAM,MAAM,GAAG,IAAI,GAAG,EAOnB,CAAC;IACJ,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACzC,yEAAyE;QACzE,4EAA4E;QAC5E,4EAA4E;QAC5E,0EAA0E;QAC1E,yDAAyD;QACzD,MAAM,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;YACf,EAAE;YACF,SAAS,EAAE,iBAAiB,CAAC,EAAE,CAAC;YAChC,QAAQ,EAAE,mBAAmB,CAAC,EAAE,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC;QACzD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;YAAE,SAAS;QAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;QAExD,MAAM,KAAK,GAAG,CAAC,IAAa,EAAQ,EAAE;YACpC,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC5C,MAAM,SAAS,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrC,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBACtD,KAAK,CAAC,IAAI,CAAC;wBACT,IAAI;wBACJ,IAAI,EAAE,EAAE,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;wBAClE,QAAQ;wBACR,SAAS;wBACT,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC9B,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;qBAClF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC;QACF,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3F,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAuB,QAAQ;SAC1C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAE,IAAI,CAAC,IAAe,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;SAC3E,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACd,IAAI,EAAE,qBAA8B;QACpC,IAAI;QACJ,IAAI,EAAE,IAAI,CAAC,IAAc;KAC1B,CAAC,CAAC,CAAC;IAEN,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC;AAiBD,gFAAgF;AAChF,SAAS,WAAW,CAClB,QAAiB,EACjB,OAA0B;IAE1B,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAChD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO;YACL,UAAU,EAAE,oBAAoB;YAChC,IAAI,EAAE,KAAK,CAAC,KAAK;YACjB,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE;SAC5C,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC3D,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,GAAG,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO;gBACL,UAAU,EAAE,mBAAmB;gBAC/B,IAAI,EAAE,QAAQ,CAAC,KAAK;gBACpB,UAAU,EAAE,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE;aACtC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,OAAyB;IACjD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IACvF,OAAO,CACL,OAAO,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,IAAI,gDAAgD;QACtF,wFAAwF;QACxF,mFAAmF;QACnF,qFAAqF;QACrF,0DAA0D,KAAK,gBAAgB;QAC/E,gDAAgD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CACvF,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAwB;IAC5D,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACvF,CAAC"}