@endora-commerce/cli 0.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +37 -0
- package/dist/bin/endora.d.ts +28 -0
- package/dist/bin/endora.d.ts.map +1 -0
- package/dist/bin/endora.js +926 -0
- package/dist/bin/endora.js.map +1 -0
- package/dist/check/estate.d.ts +189 -0
- package/dist/check/estate.d.ts.map +1 -0
- package/dist/check/estate.js +1037 -0
- package/dist/check/estate.js.map +1 -0
- package/dist/check/hosts.d.ts +25 -0
- package/dist/check/hosts.d.ts.map +1 -0
- package/dist/check/hosts.js +1347 -0
- package/dist/check/hosts.js.map +1 -0
- package/dist/check/index.d.ts +60 -0
- package/dist/check/index.d.ts.map +1 -0
- package/dist/check/index.js +111 -0
- package/dist/check/index.js.map +1 -0
- package/dist/check/layout.d.ts +136 -0
- package/dist/check/layout.d.ts.map +1 -0
- package/dist/check/layout.js +262 -0
- package/dist/check/layout.js.map +1 -0
- package/dist/check/ledger.d.ts +98 -0
- package/dist/check/ledger.d.ts.map +1 -0
- package/dist/check/ledger.js +173 -0
- package/dist/check/ledger.js.map +1 -0
- package/dist/check/peer-owners.d.ts +116 -0
- package/dist/check/peer-owners.d.ts.map +1 -0
- package/dist/check/peer-owners.js +225 -0
- package/dist/check/peer-owners.js.map +1 -0
- package/dist/check/report.d.ts +33 -0
- package/dist/check/report.d.ts.map +1 -0
- package/dist/check/report.js +107 -0
- package/dist/check/report.js.map +1 -0
- package/dist/check/run.d.ts +147 -0
- package/dist/check/run.d.ts.map +1 -0
- package/dist/check/run.js +111 -0
- package/dist/check/run.js.map +1 -0
- package/dist/checks.d.ts +17 -0
- package/dist/checks.d.ts.map +1 -0
- package/dist/checks.js +17 -0
- package/dist/checks.js.map +1 -0
- package/dist/dev/index.d.ts +83 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +298 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/generate/divergence.d.ts +38 -0
- package/dist/generate/divergence.d.ts.map +1 -0
- package/dist/generate/divergence.js +237 -0
- package/dist/generate/divergence.js.map +1 -0
- package/dist/generate/index.d.ts +90 -0
- package/dist/generate/index.d.ts.map +1 -0
- package/dist/generate/index.js +369 -0
- package/dist/generate/index.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/inputs/declaration.d.ts +18 -0
- package/dist/inputs/declaration.d.ts.map +1 -0
- package/dist/inputs/declaration.js +64 -0
- package/dist/inputs/declaration.js.map +1 -0
- package/dist/inputs/env-file.d.ts +73 -0
- package/dist/inputs/env-file.d.ts.map +1 -0
- package/dist/inputs/env-file.js +134 -0
- package/dist/inputs/env-file.js.map +1 -0
- package/dist/inputs/prompt.d.ts +21 -0
- package/dist/inputs/prompt.d.ts.map +1 -0
- package/dist/inputs/prompt.js +59 -0
- package/dist/inputs/prompt.js.map +1 -0
- package/dist/inputs/resolve.d.ts +163 -0
- package/dist/inputs/resolve.d.ts.map +1 -0
- package/dist/inputs/resolve.js +290 -0
- package/dist/inputs/resolve.js.map +1 -0
- package/dist/install/host.d.ts +27 -0
- package/dist/install/host.d.ts.map +1 -0
- package/dist/install/host.js +90 -0
- package/dist/install/host.js.map +1 -0
- package/dist/install/index.d.ts +173 -0
- package/dist/install/index.d.ts.map +1 -0
- package/dist/install/index.js +793 -0
- package/dist/install/index.js.map +1 -0
- package/dist/install/wizard.d.ts +144 -0
- package/dist/install/wizard.d.ts.map +1 -0
- package/dist/install/wizard.js +362 -0
- package/dist/install/wizard.js.map +1 -0
- package/dist/lib/admin-artefacts.d.ts +70 -0
- package/dist/lib/admin-artefacts.d.ts.map +1 -0
- package/dist/lib/admin-artefacts.js +354 -0
- package/dist/lib/admin-artefacts.js.map +1 -0
- package/dist/lib/admin-surfaces.d.ts +298 -0
- package/dist/lib/admin-surfaces.d.ts.map +1 -0
- package/dist/lib/admin-surfaces.js +669 -0
- package/dist/lib/admin-surfaces.js.map +1 -0
- package/dist/lib/delegated-composer.d.ts +85 -0
- package/dist/lib/delegated-composer.d.ts.map +1 -0
- package/dist/lib/delegated-composer.js +241 -0
- package/dist/lib/delegated-composer.js.map +1 -0
- package/dist/lib/divergence-artefacts.d.ts +305 -0
- package/dist/lib/divergence-artefacts.d.ts.map +1 -0
- package/dist/lib/divergence-artefacts.js +828 -0
- package/dist/lib/divergence-artefacts.js.map +1 -0
- package/dist/lib/divergence.d.ts +337 -0
- package/dist/lib/divergence.d.ts.map +1 -0
- package/dist/lib/divergence.js +1005 -0
- package/dist/lib/divergence.js.map +1 -0
- package/dist/lib/docs-artefacts.d.ts +395 -0
- package/dist/lib/docs-artefacts.d.ts.map +1 -0
- package/dist/lib/docs-artefacts.js +781 -0
- package/dist/lib/docs-artefacts.js.map +1 -0
- package/dist/lib/emitted-exports.d.ts +21 -0
- package/dist/lib/emitted-exports.d.ts.map +1 -0
- package/dist/lib/emitted-exports.js +96 -0
- package/dist/lib/emitted-exports.js.map +1 -0
- package/dist/lib/emitted-freshness.d.ts +112 -0
- package/dist/lib/emitted-freshness.d.ts.map +1 -0
- package/dist/lib/emitted-freshness.js +288 -0
- package/dist/lib/emitted-freshness.js.map +1 -0
- package/dist/lib/entity-index-artefact.d.ts +95 -0
- package/dist/lib/entity-index-artefact.d.ts.map +1 -0
- package/dist/lib/entity-index-artefact.js +210 -0
- package/dist/lib/entity-index-artefact.js.map +1 -0
- package/dist/lib/instance-build-inputs.d.ts +108 -0
- package/dist/lib/instance-build-inputs.d.ts.map +1 -0
- package/dist/lib/instance-build-inputs.js +165 -0
- package/dist/lib/instance-build-inputs.js.map +1 -0
- package/dist/lib/module-docs.d.ts +473 -0
- package/dist/lib/module-docs.d.ts.map +1 -0
- package/dist/lib/module-docs.js +711 -0
- package/dist/lib/module-docs.js.map +1 -0
- package/dist/lib/module-package-subpaths.d.ts +56 -0
- package/dist/lib/module-package-subpaths.d.ts.map +1 -0
- package/dist/lib/module-package-subpaths.js +223 -0
- package/dist/lib/module-package-subpaths.js.map +1 -0
- package/dist/lib/module-packages.d.ts +200 -0
- package/dist/lib/module-packages.d.ts.map +1 -0
- package/dist/lib/module-packages.js +580 -0
- package/dist/lib/module-packages.js.map +1 -0
- package/dist/lib/module-population.d.ts +129 -0
- package/dist/lib/module-population.d.ts.map +1 -0
- package/dist/lib/module-population.js +172 -0
- package/dist/lib/module-population.js.map +1 -0
- package/dist/lib/module-roots.d.ts +337 -0
- package/dist/lib/module-roots.d.ts.map +1 -0
- package/dist/lib/module-roots.js +586 -0
- package/dist/lib/module-roots.js.map +1 -0
- package/dist/lib/nested-checkouts.d.ts +33 -0
- package/dist/lib/nested-checkouts.d.ts.map +1 -0
- package/dist/lib/nested-checkouts.js +160 -0
- package/dist/lib/nested-checkouts.js.map +1 -0
- package/dist/lib/platform-root.d.ts +43 -0
- package/dist/lib/platform-root.d.ts.map +1 -0
- package/dist/lib/platform-root.js +134 -0
- package/dist/lib/platform-root.js.map +1 -0
- package/dist/lib/platform-surface.d.ts +235 -0
- package/dist/lib/platform-surface.d.ts.map +1 -0
- package/dist/lib/platform-surface.js +393 -0
- package/dist/lib/platform-surface.js.map +1 -0
- package/dist/lib/port-registrations.d.ts +223 -0
- package/dist/lib/port-registrations.d.ts.map +1 -0
- package/dist/lib/port-registrations.js +532 -0
- package/dist/lib/port-registrations.js.map +1 -0
- package/dist/lib/read-size.d.ts +154 -0
- package/dist/lib/read-size.d.ts.map +1 -0
- package/dist/lib/read-size.js +182 -0
- package/dist/lib/read-size.js.map +1 -0
- package/dist/lib/registration-owners.d.ts +79 -0
- package/dist/lib/registration-owners.d.ts.map +1 -0
- package/dist/lib/registration-owners.js +77 -0
- package/dist/lib/registration-owners.js.map +1 -0
- package/dist/lib/release-index.d.ts +53 -0
- package/dist/lib/release-index.d.ts.map +1 -0
- package/dist/lib/release-index.js +162 -0
- package/dist/lib/release-index.js.map +1 -0
- package/dist/lib/repeating-timers.d.ts +79 -0
- package/dist/lib/repeating-timers.d.ts.map +1 -0
- package/dist/lib/repeating-timers.js +189 -0
- package/dist/lib/repeating-timers.js.map +1 -0
- package/dist/lib/source-text.d.ts +34 -0
- package/dist/lib/source-text.d.ts.map +1 -0
- package/dist/lib/source-text.js +80 -0
- package/dist/lib/source-text.js.map +1 -0
- package/dist/lib/specifiers.d.ts +20 -0
- package/dist/lib/specifiers.d.ts.map +1 -0
- package/dist/lib/specifiers.js +130 -0
- package/dist/lib/specifiers.js.map +1 -0
- package/dist/lib/sql-tables.d.ts +166 -0
- package/dist/lib/sql-tables.d.ts.map +1 -0
- package/dist/lib/sql-tables.js +464 -0
- package/dist/lib/sql-tables.js.map +1 -0
- package/dist/lib/switchable-modules.d.ts +54 -0
- package/dist/lib/switchable-modules.d.ts.map +1 -0
- package/dist/lib/switchable-modules.js +104 -0
- package/dist/lib/switchable-modules.js.map +1 -0
- package/dist/lib/tailwind-sources.d.ts +136 -0
- package/dist/lib/tailwind-sources.d.ts.map +1 -0
- package/dist/lib/tailwind-sources.js +307 -0
- package/dist/lib/tailwind-sources.js.map +1 -0
- package/dist/lib/ui-layer.d.ts +54 -0
- package/dist/lib/ui-layer.d.ts.map +1 -0
- package/dist/lib/ui-layer.js +57 -0
- package/dist/lib/ui-layer.js.map +1 -0
- package/dist/lib/workspace-packages.d.ts +186 -0
- package/dist/lib/workspace-packages.d.ts.map +1 -0
- package/dist/lib/workspace-packages.js +351 -0
- package/dist/lib/workspace-packages.js.map +1 -0
- package/dist/new-instance/deploy.d.ts +211 -0
- package/dist/new-instance/deploy.d.ts.map +1 -0
- package/dist/new-instance/deploy.js +1381 -0
- package/dist/new-instance/deploy.js.map +1 -0
- package/dist/new-instance/docs-toolchain.d.ts +66 -0
- package/dist/new-instance/docs-toolchain.d.ts.map +1 -0
- package/dist/new-instance/docs-toolchain.js +69 -0
- package/dist/new-instance/docs-toolchain.js.map +1 -0
- package/dist/new-instance/host.d.ts +124 -0
- package/dist/new-instance/host.d.ts.map +1 -0
- package/dist/new-instance/host.js +276 -0
- package/dist/new-instance/host.js.map +1 -0
- package/dist/new-instance/index.d.ts +118 -0
- package/dist/new-instance/index.d.ts.map +1 -0
- package/dist/new-instance/index.js +567 -0
- package/dist/new-instance/index.js.map +1 -0
- package/dist/new-instance/modules.d.ts +188 -0
- package/dist/new-instance/modules.d.ts.map +1 -0
- package/dist/new-instance/modules.js +392 -0
- package/dist/new-instance/modules.js.map +1 -0
- package/dist/new-instance/template.d.ts +505 -0
- package/dist/new-instance/template.d.ts.map +1 -0
- package/dist/new-instance/template.js +1886 -0
- package/dist/new-instance/template.js.map +1 -0
- package/dist/new-module/emit.d.ts +67 -0
- package/dist/new-module/emit.d.ts.map +1 -0
- package/dist/new-module/emit.js +1393 -0
- package/dist/new-module/emit.js.map +1 -0
- package/dist/new-module/host.d.ts +67 -0
- package/dist/new-module/host.d.ts.map +1 -0
- package/dist/new-module/host.js +224 -0
- package/dist/new-module/host.js.map +1 -0
- package/dist/new-module/index.d.ts +32 -0
- package/dist/new-module/index.d.ts.map +1 -0
- package/dist/new-module/index.js +193 -0
- package/dist/new-module/index.js.map +1 -0
- package/dist/new-module/spec.d.ts +188 -0
- package/dist/new-module/spec.d.ts.map +1 -0
- package/dist/new-module/spec.js +404 -0
- package/dist/new-module/spec.js.map +1 -0
- package/dist/new-module/text.d.ts +15 -0
- package/dist/new-module/text.d.ts.map +1 -0
- package/dist/new-module/text.js +22 -0
- package/dist/new-module/text.js.map +1 -0
- package/dist/new-storefront/dockerfile.d.ts +20 -0
- package/dist/new-storefront/dockerfile.d.ts.map +1 -0
- package/dist/new-storefront/dockerfile.js +131 -0
- package/dist/new-storefront/dockerfile.js.map +1 -0
- package/dist/new-storefront/gitignore.d.ts +23 -0
- package/dist/new-storefront/gitignore.d.ts.map +1 -0
- package/dist/new-storefront/gitignore.js +39 -0
- package/dist/new-storefront/gitignore.js.map +1 -0
- package/dist/new-storefront/index.d.ts +93 -0
- package/dist/new-storefront/index.d.ts.map +1 -0
- package/dist/new-storefront/index.js +329 -0
- package/dist/new-storefront/index.js.map +1 -0
- package/dist/new-storefront/npmrc.d.ts +98 -0
- package/dist/new-storefront/npmrc.d.ts.map +1 -0
- package/dist/new-storefront/npmrc.js +217 -0
- package/dist/new-storefront/npmrc.js.map +1 -0
- package/dist/new-storefront/reference.d.ts +189 -0
- package/dist/new-storefront/reference.d.ts.map +1 -0
- package/dist/new-storefront/reference.js +430 -0
- package/dist/new-storefront/reference.js.map +1 -0
- package/dist/new-storefront/rewrite.d.ts +171 -0
- package/dist/new-storefront/rewrite.d.ts.map +1 -0
- package/dist/new-storefront/rewrite.js +701 -0
- package/dist/new-storefront/rewrite.js.map +1 -0
- package/dist/release-index.json +284 -0
- package/dist/rules/action-route-permissions.d.ts +141 -0
- package/dist/rules/action-route-permissions.d.ts.map +1 -0
- package/dist/rules/action-route-permissions.js +556 -0
- package/dist/rules/action-route-permissions.js.map +1 -0
- package/dist/rules/bundle-pairing.d.ts +74 -0
- package/dist/rules/bundle-pairing.d.ts.map +1 -0
- package/dist/rules/bundle-pairing.js +281 -0
- package/dist/rules/bundle-pairing.js.map +1 -0
- package/dist/rules/channel-resolution.d.ts +17 -0
- package/dist/rules/channel-resolution.d.ts.map +1 -0
- package/dist/rules/channel-resolution.js +382 -0
- package/dist/rules/channel-resolution.js.map +1 -0
- package/dist/rules/command-coverage.d.ts +210 -0
- package/dist/rules/command-coverage.d.ts.map +1 -0
- package/dist/rules/command-coverage.js +714 -0
- package/dist/rules/command-coverage.js.map +1 -0
- package/dist/rules/container-imports.d.ts +60 -0
- package/dist/rules/container-imports.d.ts.map +1 -0
- package/dist/rules/container-imports.js +158 -0
- package/dist/rules/container-imports.js.map +1 -0
- package/dist/rules/default-language-prose.d.ts +212 -0
- package/dist/rules/default-language-prose.d.ts.map +1 -0
- package/dist/rules/default-language-prose.js +710 -0
- package/dist/rules/default-language-prose.js.map +1 -0
- package/dist/rules/diacritic-folds.d.ts +238 -0
- package/dist/rules/diacritic-folds.d.ts.map +1 -0
- package/dist/rules/diacritic-folds.js +681 -0
- package/dist/rules/diacritic-folds.js.map +1 -0
- package/dist/rules/entity-tenant-classification.d.ts +171 -0
- package/dist/rules/entity-tenant-classification.d.ts.map +1 -0
- package/dist/rules/entity-tenant-classification.js +323 -0
- package/dist/rules/entity-tenant-classification.js.map +1 -0
- package/dist/rules/entry-presence.d.ts +142 -0
- package/dist/rules/entry-presence.d.ts.map +1 -0
- package/dist/rules/entry-presence.js +339 -0
- package/dist/rules/entry-presence.js.map +1 -0
- package/dist/rules/entry-scope.d.ts +91 -0
- package/dist/rules/entry-scope.d.ts.map +1 -0
- package/dist/rules/entry-scope.js +404 -0
- package/dist/rules/entry-scope.js.map +1 -0
- package/dist/rules/env-inputs.d.ts +222 -0
- package/dist/rules/env-inputs.d.ts.map +1 -0
- package/dist/rules/env-inputs.js +951 -0
- package/dist/rules/env-inputs.js.map +1 -0
- package/dist/rules/kernel-boundary.d.ts +37 -0
- package/dist/rules/kernel-boundary.d.ts.map +1 -0
- package/dist/rules/kernel-boundary.js +195 -0
- package/dist/rules/kernel-boundary.js.map +1 -0
- package/dist/rules/nul-bytes.d.ts +233 -0
- package/dist/rules/nul-bytes.d.ts.map +1 -0
- package/dist/rules/nul-bytes.js +332 -0
- package/dist/rules/nul-bytes.js.map +1 -0
- package/dist/rules/platform-surface.d.ts +479 -0
- package/dist/rules/platform-surface.d.ts.map +1 -0
- package/dist/rules/platform-surface.js +749 -0
- package/dist/rules/platform-surface.js.map +1 -0
- package/dist/rules/port-catches.d.ts +225 -0
- package/dist/rules/port-catches.d.ts.map +1 -0
- package/dist/rules/port-catches.js +1374 -0
- package/dist/rules/port-catches.js.map +1 -0
- package/dist/rules/port-shape.d.ts +213 -0
- package/dist/rules/port-shape.d.ts.map +1 -0
- package/dist/rules/port-shape.js +670 -0
- package/dist/rules/port-shape.js.map +1 -0
- package/dist/rules/queue-names.d.ts +108 -0
- package/dist/rules/queue-names.d.ts.map +1 -0
- package/dist/rules/queue-names.js +395 -0
- package/dist/rules/queue-names.js.map +1 -0
- package/dist/rules/singleton-identity.d.ts +205 -0
- package/dist/rules/singleton-identity.d.ts.map +1 -0
- package/dist/rules/singleton-identity.js +830 -0
- package/dist/rules/singleton-identity.js.map +1 -0
- package/dist/rules/subscribe-seam.d.ts +121 -0
- package/dist/rules/subscribe-seam.d.ts.map +1 -0
- package/dist/rules/subscribe-seam.js +594 -0
- package/dist/rules/subscribe-seam.js.map +1 -0
- package/dist/rules/transaction-context.d.ts +40 -0
- package/dist/rules/transaction-context.d.ts.map +1 -0
- package/dist/rules/transaction-context.js +294 -0
- package/dist/rules/transaction-context.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"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":"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"}
|