@agent-teams/engineering-foundation 0.2.1 → 0.4.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/README.md +15 -2
- package/dist/capabilities/public-api-compatibility/adapters/outbound/api-extractor/microsoft-public-api-extractor.d.ts +6 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/api-extractor/microsoft-public-api-extractor.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/api-extractor/microsoft-public-api-extractor.js +143 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/api-extractor/microsoft-public-api-extractor.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/crypto/node-change-fingerprint.d.ts +5 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/crypto/node-change-fingerprint.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/crypto/node-change-fingerprint.js +7 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/crypto/node-change-fingerprint.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/filesystem-public-api-repository.d.ts +9 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/filesystem-public-api-repository.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/filesystem-public-api-repository.js +205 -0
- package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/filesystem-public-api-repository.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/public-api.d.ts +46 -0
- package/dist/capabilities/public-api-compatibility/application/model/public-api.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/model/public-api.js +4 -0
- package/dist/capabilities/public-api-compatibility/application/model/public-api.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-public-api-compatibility.d.ts +13 -0
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-public-api-compatibility.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-public-api-compatibility.js +168 -0
- package/dist/capabilities/public-api-compatibility/application/policies/evaluate-public-api-compatibility.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/change-fingerprint.d.ts +4 -0
- package/dist/capabilities/public-api-compatibility/application/ports/change-fingerprint.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/change-fingerprint.js +2 -0
- package/dist/capabilities/public-api-compatibility/application/ports/change-fingerprint.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/public-api-extractor.d.ts +5 -0
- package/dist/capabilities/public-api-compatibility/application/ports/public-api-extractor.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/public-api-extractor.js +2 -0
- package/dist/capabilities/public-api-compatibility/application/ports/public-api-extractor.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/public-api-repository.d.ts +8 -0
- package/dist/capabilities/public-api-compatibility/application/ports/public-api-repository.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/ports/public-api-repository.js +2 -0
- package/dist/capabilities/public-api-compatibility/application/ports/public-api-repository.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/rules.d.ts +19 -0
- package/dist/capabilities/public-api-compatibility/application/rules.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/rules.js +20 -0
- package/dist/capabilities/public-api-compatibility/application/rules.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/analyze-public-api-compatibility.d.ts +15 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/analyze-public-api-compatibility.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/analyze-public-api-compatibility.js +30 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/analyze-public-api-compatibility.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/promote-public-api-baselines.d.ts +14 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/promote-public-api-baselines.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/promote-public-api-baselines.js +62 -0
- package/dist/capabilities/public-api-compatibility/application/use-cases/promote-public-api-baselines.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/contract/config.d.ts +5 -0
- package/dist/capabilities/public-api-compatibility/contract/config.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/contract/config.js +104 -0
- package/dist/capabilities/public-api-compatibility/contract/config.js.map +1 -0
- package/dist/capabilities/public-api-compatibility/module.d.ts +10 -0
- package/dist/capabilities/public-api-compatibility/module.d.ts.map +1 -0
- package/dist/capabilities/public-api-compatibility/module.js +69 -0
- package/dist/capabilities/public-api-compatibility/module.js.map +1 -0
- package/dist/capabilities/repository-security-baseline/adapters/outbound/filesystem/filesystem-repository-security-reader.d.ts +6 -0
- package/dist/capabilities/repository-security-baseline/adapters/outbound/filesystem/filesystem-repository-security-reader.d.ts.map +1 -0
- package/dist/capabilities/repository-security-baseline/adapters/outbound/filesystem/filesystem-repository-security-reader.js +200 -0
- package/dist/capabilities/repository-security-baseline/adapters/outbound/filesystem/filesystem-repository-security-reader.js.map +1 -0
- package/dist/capabilities/repository-security-baseline/application/model/repository-security.d.ts +46 -0
- package/dist/capabilities/repository-security-baseline/application/model/repository-security.d.ts.map +1 -0
- package/dist/capabilities/repository-security-baseline/application/model/repository-security.js +2 -0
- package/dist/capabilities/repository-security-baseline/application/model/repository-security.js.map +1 -0
- package/dist/capabilities/repository-security-baseline/application/policies/evaluate-repository-security.d.ts +4 -0
- package/dist/capabilities/repository-security-baseline/application/policies/evaluate-repository-security.d.ts.map +1 -0
- package/dist/capabilities/repository-security-baseline/application/policies/evaluate-repository-security.js +218 -0
- package/dist/capabilities/repository-security-baseline/application/policies/evaluate-repository-security.js.map +1 -0
- package/dist/capabilities/repository-security-baseline/application/ports/repository-security-reader.d.ts +5 -0
- package/dist/capabilities/repository-security-baseline/application/ports/repository-security-reader.d.ts.map +1 -0
- package/dist/capabilities/repository-security-baseline/application/ports/repository-security-reader.js +2 -0
- package/dist/capabilities/repository-security-baseline/application/ports/repository-security-reader.js.map +1 -0
- package/dist/capabilities/repository-security-baseline/application/rules.d.ts +23 -0
- package/dist/capabilities/repository-security-baseline/application/rules.d.ts.map +1 -0
- package/dist/capabilities/repository-security-baseline/application/rules.js +24 -0
- package/dist/capabilities/repository-security-baseline/application/rules.js.map +1 -0
- package/dist/capabilities/repository-security-baseline/application/use-cases/analyze-repository-security.d.ts +9 -0
- package/dist/capabilities/repository-security-baseline/application/use-cases/analyze-repository-security.d.ts.map +1 -0
- package/dist/capabilities/repository-security-baseline/application/use-cases/analyze-repository-security.js +7 -0
- package/dist/capabilities/repository-security-baseline/application/use-cases/analyze-repository-security.js.map +1 -0
- package/dist/capabilities/repository-security-baseline/contract/config.d.ts +5 -0
- package/dist/capabilities/repository-security-baseline/contract/config.d.ts.map +1 -0
- package/dist/capabilities/repository-security-baseline/contract/config.js +86 -0
- package/dist/capabilities/repository-security-baseline/contract/config.js.map +1 -0
- package/dist/capabilities/repository-security-baseline/module.d.ts +5 -0
- package/dist/capabilities/repository-security-baseline/module.d.ts.map +1 -0
- package/dist/capabilities/repository-security-baseline/module.js +49 -0
- package/dist/capabilities/repository-security-baseline/module.js.map +1 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/node/node-source-dependency-resolver.d.ts +6 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/node/node-source-dependency-resolver.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/node/node-source-dependency-resolver.js +151 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/node/node-source-dependency-resolver.js.map +1 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/oxc/oxc-source-dependency-parser.d.ts +7 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/oxc/oxc-source-dependency-parser.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/oxc/oxc-source-dependency-parser.js +96 -0
- package/dist/capabilities/source-dependencies/adapters/outbound/oxc/oxc-source-dependency-parser.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/model/source-workspace.d.ts +66 -0
- package/dist/capabilities/source-dependencies/application/model/source-workspace.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/model/source-workspace.js +13 -0
- package/dist/capabilities/source-dependencies/application/model/source-workspace.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.d.ts +15 -0
- package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.js +223 -0
- package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-parser.d.ts +6 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-parser.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-parser.js +2 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-parser.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-resolver.d.ts +12 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-resolver.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-resolver.js +2 -0
- package/dist/capabilities/source-dependencies/application/ports/source-dependency-resolver.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/rules.d.ts +26 -0
- package/dist/capabilities/source-dependencies/application/rules.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/rules.js +27 -0
- package/dist/capabilities/source-dependencies/application/rules.js.map +1 -0
- package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.d.ts +19 -0
- package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.js +69 -0
- package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.js.map +1 -0
- package/dist/capabilities/source-dependencies/contract/config.d.ts +5 -0
- package/dist/capabilities/source-dependencies/contract/config.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/contract/config.js +108 -0
- package/dist/capabilities/source-dependencies/contract/config.js.map +1 -0
- package/dist/capabilities/source-dependencies/module.d.ts +5 -0
- package/dist/capabilities/source-dependencies/module.d.ts.map +1 -0
- package/dist/capabilities/source-dependencies/module.js +61 -0
- package/dist/capabilities/source-dependencies/module.js.map +1 -0
- package/dist/capabilities/suppression-governance/adapters/outbound/oxc/oxc-suppression-scanner.d.ts +7 -0
- package/dist/capabilities/suppression-governance/adapters/outbound/oxc/oxc-suppression-scanner.d.ts.map +1 -0
- package/dist/capabilities/suppression-governance/adapters/outbound/oxc/oxc-suppression-scanner.js +115 -0
- package/dist/capabilities/suppression-governance/adapters/outbound/oxc/oxc-suppression-scanner.js.map +1 -0
- package/dist/capabilities/suppression-governance/adapters/outbound/time/system-clock.d.ts +5 -0
- package/dist/capabilities/suppression-governance/adapters/outbound/time/system-clock.d.ts.map +1 -0
- package/dist/capabilities/suppression-governance/adapters/outbound/time/system-clock.js +6 -0
- package/dist/capabilities/suppression-governance/adapters/outbound/time/system-clock.js.map +1 -0
- package/dist/capabilities/suppression-governance/application/model/iso-date.d.ts +2 -0
- package/dist/capabilities/suppression-governance/application/model/iso-date.d.ts.map +1 -0
- package/dist/capabilities/suppression-governance/application/model/iso-date.js +27 -0
- package/dist/capabilities/suppression-governance/application/model/iso-date.js.map +1 -0
- package/dist/capabilities/suppression-governance/application/model/suppression-governance.d.ts +35 -0
- package/dist/capabilities/suppression-governance/application/model/suppression-governance.d.ts.map +1 -0
- package/dist/capabilities/suppression-governance/application/model/suppression-governance.js +8 -0
- package/dist/capabilities/suppression-governance/application/model/suppression-governance.js.map +1 -0
- package/dist/capabilities/suppression-governance/application/policies/evaluate-suppression-governance.d.ts +8 -0
- package/dist/capabilities/suppression-governance/application/policies/evaluate-suppression-governance.d.ts.map +1 -0
- package/dist/capabilities/suppression-governance/application/policies/evaluate-suppression-governance.js +196 -0
- package/dist/capabilities/suppression-governance/application/policies/evaluate-suppression-governance.js.map +1 -0
- package/dist/capabilities/suppression-governance/application/ports/calendar-clock.d.ts +4 -0
- package/dist/capabilities/suppression-governance/application/ports/calendar-clock.d.ts.map +1 -0
- package/dist/capabilities/suppression-governance/application/ports/calendar-clock.js +2 -0
- package/dist/capabilities/suppression-governance/application/ports/calendar-clock.js.map +1 -0
- package/dist/capabilities/suppression-governance/application/ports/suppression-scanner.d.ts +6 -0
- package/dist/capabilities/suppression-governance/application/ports/suppression-scanner.d.ts.map +1 -0
- package/dist/capabilities/suppression-governance/application/ports/suppression-scanner.js +2 -0
- package/dist/capabilities/suppression-governance/application/ports/suppression-scanner.js.map +1 -0
- package/dist/capabilities/suppression-governance/application/rules.d.ts +25 -0
- package/dist/capabilities/suppression-governance/application/rules.d.ts.map +1 -0
- package/dist/capabilities/suppression-governance/application/rules.js +26 -0
- package/dist/capabilities/suppression-governance/application/rules.js.map +1 -0
- package/dist/capabilities/suppression-governance/application/use-cases/analyze-suppression-governance.d.ts +15 -0
- package/dist/capabilities/suppression-governance/application/use-cases/analyze-suppression-governance.d.ts.map +1 -0
- package/dist/capabilities/suppression-governance/application/use-cases/analyze-suppression-governance.js +15 -0
- package/dist/capabilities/suppression-governance/application/use-cases/analyze-suppression-governance.js.map +1 -0
- package/dist/capabilities/suppression-governance/contract/config.d.ts +5 -0
- package/dist/capabilities/suppression-governance/contract/config.d.ts.map +1 -0
- package/dist/capabilities/suppression-governance/contract/config.js +108 -0
- package/dist/capabilities/suppression-governance/contract/config.js.map +1 -0
- package/dist/capabilities/suppression-governance/module.d.ts +5 -0
- package/dist/capabilities/suppression-governance/module.d.ts.map +1 -0
- package/dist/capabilities/suppression-governance/module.js +57 -0
- package/dist/capabilities/suppression-governance/module.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.d.ts +1 -0
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.d.ts.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.js +4 -195
- package/dist/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.js.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-dependency-policy.d.ts +6 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-dependency-policy.d.ts.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-dependency-policy.js +2 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-dependency-policy.js.map +1 -0
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.d.ts +1 -26
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.d.ts.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.js +1 -6
- package/dist/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.js.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.d.ts +1 -1
- package/dist/capabilities/workspace-dependency-declarations/application/policies/evaluate-workspace-dependencies.d.ts.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/contract/config.d.ts +1 -5
- package/dist/capabilities/workspace-dependency-declarations/contract/config.d.ts.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/contract/config.js.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/module.d.ts +2 -0
- package/dist/capabilities/workspace-dependency-declarations/module.d.ts.map +1 -1
- package/dist/capabilities/workspace-dependency-declarations/module.js +2 -0
- package/dist/capabilities/workspace-dependency-declarations/module.js.map +1 -1
- package/dist/capability-runtime.d.ts +1 -5
- package/dist/capability-runtime.d.ts.map +1 -1
- package/dist/capability-runtime.js +4 -4
- package/dist/capability-runtime.js.map +1 -1
- package/dist/check-contract.d.ts +3 -2
- package/dist/check-contract.d.ts.map +1 -1
- package/dist/check-runner.d.ts +0 -2
- package/dist/check-runner.d.ts.map +1 -1
- package/dist/check-runner.js +1 -7
- package/dist/check-runner.js.map +1 -1
- package/dist/cli.js +36 -7
- package/dist/cli.js.map +1 -1
- package/dist/composition/capability-registry.d.ts.map +1 -1
- package/dist/composition/capability-registry.js +8 -0
- package/dist/composition/capability-registry.js.map +1 -1
- package/dist/composition/rule-registry.d.ts +8 -0
- package/dist/composition/rule-registry.d.ts.map +1 -0
- package/dist/composition/rule-registry.js +13 -0
- package/dist/composition/rule-registry.js.map +1 -0
- package/dist/filesystem-path-safety.d.ts +2 -0
- package/dist/filesystem-path-safety.d.ts.map +1 -0
- package/dist/filesystem-path-safety.js +19 -0
- package/dist/filesystem-path-safety.js.map +1 -0
- package/dist/foundation-config.d.ts +5 -4
- package/dist/foundation-config.d.ts.map +1 -1
- package/dist/foundation-config.js +56 -15
- package/dist/foundation-config.js.map +1 -1
- package/dist/local-mode/adapters/outbound/time/system-clock.d.ts +2 -0
- package/dist/local-mode/adapters/outbound/time/system-clock.d.ts.map +1 -0
- package/dist/local-mode/adapters/outbound/time/system-clock.js +4 -0
- package/dist/local-mode/adapters/outbound/time/system-clock.js.map +1 -0
- package/dist/local-mode/consumer-policy.js +1 -1
- package/dist/local-mode/consumer-policy.js.map +1 -1
- package/dist/local-mode/service.d.ts +1 -1
- package/dist/local-mode/service.d.ts.map +1 -1
- package/dist/local-mode/service.js +1 -1
- package/dist/local-mode/service.js.map +1 -1
- package/dist/package-self-check.d.ts +2 -2
- package/dist/package-self-check.d.ts.map +1 -1
- package/dist/package-self-check.js +23 -20
- package/dist/package-self-check.js.map +1 -1
- package/dist/schema-catalog.d.ts +1 -3
- package/dist/schema-catalog.d.ts.map +1 -1
- package/dist/schema-catalog.js +2 -6
- package/dist/schema-catalog.js.map +1 -1
- package/dist/schema-ids.d.ts +3 -0
- package/dist/schema-ids.d.ts.map +1 -0
- package/dist/schema-ids.js +11 -0
- package/dist/schema-ids.js.map +1 -0
- package/dist/semantic-version.d.ts +2 -0
- package/dist/semantic-version.d.ts.map +1 -1
- package/dist/semantic-version.js +72 -1
- package/dist/semantic-version.js.map +1 -1
- package/dist/source-inventory/adapters/outbound/filesystem/filesystem-source-tree-reader.d.ts +6 -0
- package/dist/source-inventory/adapters/outbound/filesystem/filesystem-source-tree-reader.d.ts.map +1 -0
- package/dist/source-inventory/adapters/outbound/filesystem/filesystem-source-tree-reader.js +133 -0
- package/dist/source-inventory/adapters/outbound/filesystem/filesystem-source-tree-reader.js.map +1 -0
- package/dist/source-inventory/application/model/source-file-snapshot.d.ts +5 -0
- package/dist/source-inventory/application/model/source-file-snapshot.d.ts.map +1 -0
- package/dist/source-inventory/application/model/source-file-snapshot.js +2 -0
- package/dist/source-inventory/application/model/source-file-snapshot.js.map +1 -0
- package/dist/source-inventory/application/ports/source-tree-reader.d.ts +5 -0
- package/dist/source-inventory/application/ports/source-tree-reader.d.ts.map +1 -0
- package/dist/source-inventory/application/ports/source-tree-reader.js +2 -0
- package/dist/source-inventory/application/ports/source-tree-reader.js.map +1 -0
- package/dist/strict-yaml.d.ts +1 -2
- package/dist/strict-yaml.d.ts.map +1 -1
- package/dist/strict-yaml.js +3 -3
- package/dist/strict-yaml.js.map +1 -1
- package/dist/workspace-inventory/adapters/outbound/pnpm/pnpm-workspace-inventory-reader.d.ts +6 -0
- package/dist/workspace-inventory/adapters/outbound/pnpm/pnpm-workspace-inventory-reader.d.ts.map +1 -0
- package/dist/workspace-inventory/adapters/outbound/pnpm/pnpm-workspace-inventory-reader.js +288 -0
- package/dist/workspace-inventory/adapters/outbound/pnpm/pnpm-workspace-inventory-reader.js.map +1 -0
- package/dist/workspace-inventory/application/model/workspace-inventory.d.ts +38 -0
- package/dist/workspace-inventory/application/model/workspace-inventory.d.ts.map +1 -0
- package/dist/workspace-inventory/application/model/workspace-inventory.js +7 -0
- package/dist/workspace-inventory/application/model/workspace-inventory.js.map +1 -0
- package/dist/workspace-inventory/application/ports/workspace-inventory-reader.d.ts +5 -0
- package/dist/workspace-inventory/application/ports/workspace-inventory-reader.d.ts.map +1 -0
- package/dist/workspace-inventory/application/ports/workspace-inventory-reader.js +2 -0
- package/dist/workspace-inventory/application/ports/workspace-inventory-reader.js.map +1 -0
- package/package.json +7 -1
- package/presets/oxlint/base.json +2 -0
- package/presets/oxlint/type-aware.json +39 -0
- package/schemas/architecture-source-dependencies/v1.schema.json +97 -0
- package/schemas/foundation-config/v1.schema.json +40 -0
- package/schemas/package-public-api-baseline/v1.schema.json +39 -0
- package/schemas/package-public-api-compatibility/v1.schema.json +70 -0
- package/schemas/quality-suppression-governance/v1.schema.json +109 -0
- package/schemas/repository-security-baseline/v1.schema.json +57 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { DiagnosticSeverity } from "../../../check-contract.js";
|
|
2
|
+
export interface SuppressionGovernanceRuleMetadata {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly severity: DiagnosticSeverity;
|
|
5
|
+
readonly rationale: string;
|
|
6
|
+
readonly remediation: string;
|
|
7
|
+
readonly documentation: string;
|
|
8
|
+
readonly requiresArchitectureReview: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const SUPPRESSION_GOVERNANCE_RULES: Readonly<{
|
|
11
|
+
broadSuppression: SuppressionGovernanceRuleMetadata;
|
|
12
|
+
excessiveLifetime: SuppressionGovernanceRuleMetadata;
|
|
13
|
+
expiredWaiver: SuppressionGovernanceRuleMetadata;
|
|
14
|
+
futureWaiver: SuppressionGovernanceRuleMetadata;
|
|
15
|
+
legacySuppression: SuppressionGovernanceRuleMetadata;
|
|
16
|
+
prohibitedTypeScriptSuppression: SuppressionGovernanceRuleMetadata;
|
|
17
|
+
protectedRuleSuppression: SuppressionGovernanceRuleMetadata;
|
|
18
|
+
sourceParseError: SuppressionGovernanceRuleMetadata;
|
|
19
|
+
staleWaiver: SuppressionGovernanceRuleMetadata;
|
|
20
|
+
unregisteredSuppression: SuppressionGovernanceRuleMetadata;
|
|
21
|
+
unscopedSuppression: SuppressionGovernanceRuleMetadata;
|
|
22
|
+
waiverMismatch: SuppressionGovernanceRuleMetadata;
|
|
23
|
+
}>;
|
|
24
|
+
export declare const SUPPRESSION_GOVERNANCE_RULES_BY_ID: ReadonlyMap<string, SuppressionGovernanceRuleMetadata>;
|
|
25
|
+
//# sourceMappingURL=rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/suppression-governance/application/rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;CAC9C;AAkBD,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;EA8DvC,CAAC;AAEH,eAAO,MAAM,kCAAkC,EAAE,WAAW,CAC1D,MAAM,EACN,iCAAiC,CAGlC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
function rule(suffix, rationale, remediation, requiresArchitectureReview = false) {
|
|
2
|
+
return Object.freeze({
|
|
3
|
+
id: `quality.suppression-governance.${suffix}`,
|
|
4
|
+
severity: "error",
|
|
5
|
+
rationale,
|
|
6
|
+
remediation,
|
|
7
|
+
documentation: "docs/architecture/suppression-governance.md",
|
|
8
|
+
requiresArchitectureReview
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export const SUPPRESSION_GOVERNANCE_RULES = Object.freeze({
|
|
12
|
+
broadSuppression: rule("broad-suppression", "File and region suppressions hide unrelated future diagnostics.", "Replace the directive with an exact line-scoped suppression and waiver."),
|
|
13
|
+
excessiveLifetime: rule("excessive-waiver-lifetime", "A temporary waiver must not silently become permanent technical debt.", "Shorten the waiver lifetime to at most 90 calendar days."),
|
|
14
|
+
expiredWaiver: rule("expired-waiver", "Expired exceptions must be removed or explicitly reconsidered.", "Remove the suppression or approve a new bounded waiver."),
|
|
15
|
+
futureWaiver: rule("future-waiver", "A waiver cannot be created in the future relative to the build clock.", "Correct createdOn using the current UTC calendar date."),
|
|
16
|
+
legacySuppression: rule("legacy-suppression", "ESLint compatibility directives create a second suppression vocabulary.", "Use an Oxlint directive and register an exact waiver."),
|
|
17
|
+
prohibitedTypeScriptSuppression: rule("prohibited-typescript-suppression", "TypeScript ignore and nocheck directives can hide unrelated compiler failures.", "Remove the directive; use a line-scoped @ts-expect-error waiver only when necessary."),
|
|
18
|
+
protectedRuleSuppression: rule("protected-rule-suppression", "Security and tenant-isolation rules are not waivable.", "Fix the violation or change the governing architecture through an accepted decision.", true),
|
|
19
|
+
sourceParseError: rule("source-parse-error", "Suppression evidence is incomplete when governed source does not parse.", "Fix the source syntax before evaluating suppression governance."),
|
|
20
|
+
staleWaiver: rule("stale-waiver", "A waiver without one exact suppression is stale or incorrectly scoped.", "Remove the waiver or align its path, line, directive, and rules with the source."),
|
|
21
|
+
unregisteredSuppression: rule("unregistered-suppression", "Every allowed suppression needs accountable, expiring ownership.", "Register an exact waiver with owner, reason, expiry, and decision reference."),
|
|
22
|
+
unscopedSuppression: rule("unscoped-suppression", "A suppression without explicit rule IDs can hide arbitrary diagnostics.", "List every suppressed rule explicitly."),
|
|
23
|
+
waiverMismatch: rule("waiver-mismatch", "A waiver must describe the exact directive and exact rule set at its location.", "Update the waiver or suppression so their directive and rules match exactly.")
|
|
24
|
+
});
|
|
25
|
+
export const SUPPRESSION_GOVERNANCE_RULES_BY_ID = new Map(Object.values(SUPPRESSION_GOVERNANCE_RULES).map((metadata) => [metadata.id, metadata]));
|
|
26
|
+
//# sourceMappingURL=rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../../../src/capabilities/suppression-governance/application/rules.ts"],"names":[],"mappings":"AAWA,SAAS,IAAI,CACX,MAAc,EACd,SAAiB,EACjB,WAAmB,EACnB,0BAA0B,GAAG,KAAK;IAElC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,kCAAkC,MAAM,EAAE;QAC9C,QAAQ,EAAE,OAAO;QACjB,SAAS;QACT,WAAW;QACX,aAAa,EAAE,6CAA6C;QAC5D,0BAA0B;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC;IACxD,gBAAgB,EAAE,IAAI,CACpB,mBAAmB,EACnB,iEAAiE,EACjE,yEAAyE,CAC1E;IACD,iBAAiB,EAAE,IAAI,CACrB,2BAA2B,EAC3B,uEAAuE,EACvE,0DAA0D,CAC3D;IACD,aAAa,EAAE,IAAI,CACjB,gBAAgB,EAChB,gEAAgE,EAChE,yDAAyD,CAC1D;IACD,YAAY,EAAE,IAAI,CAChB,eAAe,EACf,uEAAuE,EACvE,wDAAwD,CACzD;IACD,iBAAiB,EAAE,IAAI,CACrB,oBAAoB,EACpB,yEAAyE,EACzE,uDAAuD,CACxD;IACD,+BAA+B,EAAE,IAAI,CACnC,mCAAmC,EACnC,gFAAgF,EAChF,sFAAsF,CACvF;IACD,wBAAwB,EAAE,IAAI,CAC5B,4BAA4B,EAC5B,uDAAuD,EACvD,sFAAsF,EACtF,IAAI,CACL;IACD,gBAAgB,EAAE,IAAI,CACpB,oBAAoB,EACpB,yEAAyE,EACzE,iEAAiE,CAClE;IACD,WAAW,EAAE,IAAI,CACf,cAAc,EACd,wEAAwE,EACxE,kFAAkF,CACnF;IACD,uBAAuB,EAAE,IAAI,CAC3B,0BAA0B,EAC1B,kEAAkE,EAClE,8EAA8E,CAC/E;IACD,mBAAmB,EAAE,IAAI,CACvB,sBAAsB,EACtB,yEAAyE,EACzE,wCAAwC,CACzC;IACD,cAAc,EAAE,IAAI,CAClB,iBAAiB,EACjB,gFAAgF,EAChF,8EAA8E,CAC/E;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kCAAkC,GAG3C,IAAI,GAAG,CACT,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CACvF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { FoundationDiagnostic } from "../../../../check-contract.js";
|
|
2
|
+
import type { SourceTreeReader } from "../../../../source-inventory/application/ports/source-tree-reader.js";
|
|
3
|
+
import type { SuppressionGovernancePolicy } from "../model/suppression-governance.js";
|
|
4
|
+
import type { CalendarClock } from "../ports/calendar-clock.js";
|
|
5
|
+
import type { SuppressionScanner } from "../ports/suppression-scanner.js";
|
|
6
|
+
export declare function analyzeSuppressionGovernance(input: {
|
|
7
|
+
readonly consumerRoot: string;
|
|
8
|
+
readonly policy: SuppressionGovernancePolicy;
|
|
9
|
+
readonly signal?: AbortSignal;
|
|
10
|
+
}, dependencies: {
|
|
11
|
+
readonly clock: CalendarClock;
|
|
12
|
+
readonly scanner: SuppressionScanner;
|
|
13
|
+
readonly sourceReader: SourceTreeReader;
|
|
14
|
+
}): Promise<readonly FoundationDiagnostic[]>;
|
|
15
|
+
//# sourceMappingURL=analyze-suppression-governance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-suppression-governance.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/suppression-governance/application/use-cases/analyze-suppression-governance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sEAAsE,CAAC;AAE7G,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACtF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAG1E,wBAAsB,4BAA4B,CAChD,KAAK,EAAE;IACL,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B,EACD,YAAY,EAAE;IACZ,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;CACzC,GACA,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC,CAe1C"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { assertNotCancelled } from "../../../../strict-yaml.js";
|
|
2
|
+
import { evaluateSuppressionGovernance } from "../policies/evaluate-suppression-governance.js";
|
|
3
|
+
export async function analyzeSuppressionGovernance(input, dependencies) {
|
|
4
|
+
const files = await dependencies.sourceReader.read(input.consumerRoot, input.policy.governedRoots, input.signal);
|
|
5
|
+
const scans = files.map((file) => {
|
|
6
|
+
assertNotCancelled(input.signal);
|
|
7
|
+
return dependencies.scanner.scan(file);
|
|
8
|
+
});
|
|
9
|
+
return evaluateSuppressionGovernance({
|
|
10
|
+
policy: input.policy,
|
|
11
|
+
scans,
|
|
12
|
+
today: dependencies.clock.today()
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=analyze-suppression-governance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze-suppression-governance.js","sourceRoot":"","sources":["../../../../../src/capabilities/suppression-governance/application/use-cases/analyze-suppression-governance.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAIhE,OAAO,EAAE,6BAA6B,EAAE,MAAM,gDAAgD,CAAC;AAE/F,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,KAIC,EACD,YAIC;IAED,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,IAAI,CAChD,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,MAAM,CAAC,aAAa,EAC1B,KAAK,CAAC,MAAM,CACb,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC/B,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IACH,OAAO,6BAA6B,CAAC;QACnC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK;QACL,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE;KAClC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SuppressionGovernancePolicy } from "../application/model/suppression-governance.js";
|
|
2
|
+
export declare const CAPABILITY_ID: "quality.suppression-governance";
|
|
3
|
+
export declare const CAPABILITY_CONFIG_SCHEMA_VERSION: 1;
|
|
4
|
+
export declare function loadCapabilityConfig(consumerRoot: string, configPath: string, signal?: AbortSignal): Promise<SuppressionGovernancePolicy>;
|
|
5
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/suppression-governance/contract/config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,2BAA2B,EAG5B,MAAM,gDAAgD,CAAC;AAExD,eAAO,MAAM,aAAa,EAAG,gCAAyC,CAAC;AACvE,eAAO,MAAM,gCAAgC,EAAG,CAAU,CAAC;AA2F3D,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,2BAA2B,CAAC,CA8BtC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { CapabilityInputError } from "../../../capability-runtime.js";
|
|
2
|
+
import { assertSchema } from "../../../schema-catalog.js";
|
|
3
|
+
import { assertRepositoryRelativePath, loadStrictYamlFile } from "../../../strict-yaml.js";
|
|
4
|
+
import { isoDateToEpochDay } from "../application/model/iso-date.js";
|
|
5
|
+
export const CAPABILITY_ID = "quality.suppression-governance";
|
|
6
|
+
export const CAPABILITY_CONFIG_SCHEMA_VERSION = 1;
|
|
7
|
+
function inputError(message) {
|
|
8
|
+
throw new CapabilityInputError({
|
|
9
|
+
code: "SUPPRESSION_GOVERNANCE_CONFIG_INVALID",
|
|
10
|
+
message,
|
|
11
|
+
phase: "suppression-governance-config",
|
|
12
|
+
retryable: false
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
function record(value, field) {
|
|
16
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
17
|
+
inputError(`${field} must be an object.`);
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
function string(value, field) {
|
|
22
|
+
if (typeof value !== "string") {
|
|
23
|
+
inputError(`${field} must be a string.`);
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
function integer(value, field) {
|
|
28
|
+
if (!Number.isInteger(value)) {
|
|
29
|
+
inputError(`${field} must be an integer.`);
|
|
30
|
+
}
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
function strings(value, field) {
|
|
34
|
+
if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) {
|
|
35
|
+
inputError(`${field} must be an array of strings.`);
|
|
36
|
+
}
|
|
37
|
+
return Object.freeze(value);
|
|
38
|
+
}
|
|
39
|
+
function pathInside(path, root) {
|
|
40
|
+
return path === root || path.startsWith(`${root}/`);
|
|
41
|
+
}
|
|
42
|
+
function mapWaiver(value, index) {
|
|
43
|
+
const field = `waivers[${index}]`;
|
|
44
|
+
const waiver = record(value, field);
|
|
45
|
+
const path = string(waiver["path"], `${field}.path`);
|
|
46
|
+
assertRepositoryRelativePath(path, "suppression-governance-config");
|
|
47
|
+
const createdOn = string(waiver["createdOn"], `${field}.createdOn`);
|
|
48
|
+
const expiresOn = string(waiver["expiresOn"], `${field}.expiresOn`);
|
|
49
|
+
const createdDay = isoDateToEpochDay(createdOn);
|
|
50
|
+
const expiryDay = isoDateToEpochDay(expiresOn);
|
|
51
|
+
if (createdDay === undefined || expiryDay === undefined) {
|
|
52
|
+
inputError(`${field} contains an invalid calendar date.`);
|
|
53
|
+
}
|
|
54
|
+
if (createdDay > expiryDay) {
|
|
55
|
+
inputError(`${field}.createdOn must not be after expiresOn.`);
|
|
56
|
+
}
|
|
57
|
+
return Object.freeze({
|
|
58
|
+
id: string(waiver["id"], `${field}.id`),
|
|
59
|
+
path,
|
|
60
|
+
line: integer(waiver["line"], `${field}.line`),
|
|
61
|
+
directive: string(waiver["directive"], `${field}.directive`),
|
|
62
|
+
rules: Object.freeze(strings(waiver["rules"], `${field}.rules`).toSorted()),
|
|
63
|
+
owner: string(waiver["owner"], `${field}.owner`),
|
|
64
|
+
reason: string(waiver["reason"], `${field}.reason`),
|
|
65
|
+
createdOn,
|
|
66
|
+
expiresOn,
|
|
67
|
+
decisionRef: string(waiver["decisionRef"], `${field}.decisionRef`)
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function validatePolicy(policy) {
|
|
71
|
+
const waiverIds = new Set();
|
|
72
|
+
const waiverLocations = new Set();
|
|
73
|
+
for (const waiver of policy.waivers) {
|
|
74
|
+
if (waiverIds.has(waiver.id)) {
|
|
75
|
+
inputError(`Waiver ID is duplicated: ${waiver.id}.`);
|
|
76
|
+
}
|
|
77
|
+
waiverIds.add(waiver.id);
|
|
78
|
+
const location = `${waiver.path}:${waiver.line}`;
|
|
79
|
+
if (waiverLocations.has(location)) {
|
|
80
|
+
inputError(`Only one waiver may own a source line: ${location}.`);
|
|
81
|
+
}
|
|
82
|
+
waiverLocations.add(location);
|
|
83
|
+
if (!policy.governedRoots.some((root) => pathInside(waiver.path, root))) {
|
|
84
|
+
inputError(`Waiver path is outside governed roots: ${waiver.path}.`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export async function loadCapabilityConfig(consumerRoot, configPath, signal) {
|
|
89
|
+
const input = await loadStrictYamlFile(consumerRoot, configPath, "suppression-governance-config", signal);
|
|
90
|
+
await assertSchema("quality-suppression-governance/v1", input, "suppression-governance-config");
|
|
91
|
+
const root = record(input, "suppression governance config");
|
|
92
|
+
const governedRoots = strings(root["governedRoots"], "governedRoots");
|
|
93
|
+
for (const governedRoot of governedRoots) {
|
|
94
|
+
assertRepositoryRelativePath(governedRoot, "suppression-governance-config");
|
|
95
|
+
}
|
|
96
|
+
const waiverInputs = root["waivers"];
|
|
97
|
+
if (!Array.isArray(waiverInputs)) {
|
|
98
|
+
inputError("waivers must be an array.");
|
|
99
|
+
}
|
|
100
|
+
const policy = Object.freeze({
|
|
101
|
+
governedRoots: Object.freeze([...governedRoots]),
|
|
102
|
+
nonWaivableRulePrefixes: Object.freeze(strings(root["nonWaivableRulePrefixes"], "nonWaivableRulePrefixes")),
|
|
103
|
+
waivers: Object.freeze(waiverInputs.map(mapWaiver))
|
|
104
|
+
});
|
|
105
|
+
validatePolicy(policy);
|
|
106
|
+
return policy;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/capabilities/suppression-governance/contract/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type CapabilityDefinition } from "../../capability-runtime.js";
|
|
2
|
+
import { SUPPRESSION_GOVERNANCE_RULES_BY_ID } from "./application/rules.js";
|
|
3
|
+
export { SUPPRESSION_GOVERNANCE_RULES_BY_ID };
|
|
4
|
+
export declare function createSuppressionGovernanceCapability(): CapabilityDefinition;
|
|
5
|
+
//# sourceMappingURL=module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/capabilities/suppression-governance/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EAE1B,MAAM,6BAA6B,CAAC;AAIrC,OAAO,EAAE,kCAAkC,EAAE,MAAM,wBAAwB,CAAC;AAQ5E,OAAO,EAAE,kCAAkC,EAAE,CAAC;AAE9C,wBAAgB,qCAAqC,IAAI,oBAAoB,CAsD5E"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { CapabilityInputError, capabilityReport } from "../../capability-runtime.js";
|
|
2
|
+
import { FilesystemSourceTreeReader } from "../../source-inventory/adapters/outbound/filesystem/filesystem-source-tree-reader.js";
|
|
3
|
+
import { OxcSuppressionScanner } from "./adapters/outbound/oxc/oxc-suppression-scanner.js";
|
|
4
|
+
import { SystemCalendarClock } from "./adapters/outbound/time/system-clock.js";
|
|
5
|
+
import { SUPPRESSION_GOVERNANCE_RULES_BY_ID } from "./application/rules.js";
|
|
6
|
+
import { analyzeSuppressionGovernance } from "./application/use-cases/analyze-suppression-governance.js";
|
|
7
|
+
import { CAPABILITY_CONFIG_SCHEMA_VERSION, CAPABILITY_ID, loadCapabilityConfig } from "./contract/config.js";
|
|
8
|
+
export { SUPPRESSION_GOVERNANCE_RULES_BY_ID };
|
|
9
|
+
export function createSuppressionGovernanceCapability() {
|
|
10
|
+
const dependencies = Object.freeze({
|
|
11
|
+
clock: new SystemCalendarClock(),
|
|
12
|
+
scanner: new OxcSuppressionScanner(),
|
|
13
|
+
sourceReader: new FilesystemSourceTreeReader()
|
|
14
|
+
});
|
|
15
|
+
return Object.freeze({
|
|
16
|
+
id: CAPABILITY_ID,
|
|
17
|
+
configSchemaVersion: CAPABILITY_CONFIG_SCHEMA_VERSION,
|
|
18
|
+
async run(invocation) {
|
|
19
|
+
try {
|
|
20
|
+
const policy = await loadCapabilityConfig(invocation.consumerRoot, invocation.configPath, invocation.signal);
|
|
21
|
+
return capabilityReport({
|
|
22
|
+
capabilityId: CAPABILITY_ID,
|
|
23
|
+
capabilityConfigSchemaVersion: CAPABILITY_CONFIG_SCHEMA_VERSION,
|
|
24
|
+
diagnostics: await analyzeSuppressionGovernance({
|
|
25
|
+
consumerRoot: invocation.consumerRoot,
|
|
26
|
+
policy,
|
|
27
|
+
...(invocation.signal === undefined ? {} : { signal: invocation.signal })
|
|
28
|
+
}, dependencies)
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
if (error instanceof CapabilityInputError) {
|
|
33
|
+
return capabilityReport({
|
|
34
|
+
capabilityId: CAPABILITY_ID,
|
|
35
|
+
capabilityConfigSchemaVersion: CAPABILITY_CONFIG_SCHEMA_VERSION,
|
|
36
|
+
outcome: error.problem.code === "EXECUTION_CANCELLED"
|
|
37
|
+
? "cancelled"
|
|
38
|
+
: "invalid-input",
|
|
39
|
+
problem: error.problem
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return capabilityReport({
|
|
43
|
+
capabilityId: CAPABILITY_ID,
|
|
44
|
+
capabilityConfigSchemaVersion: CAPABILITY_CONFIG_SCHEMA_VERSION,
|
|
45
|
+
outcome: "failed",
|
|
46
|
+
problem: {
|
|
47
|
+
code: "CAPABILITY_EXECUTION_FAILED",
|
|
48
|
+
message: "Suppression governance capability execution failed.",
|
|
49
|
+
phase: "suppression-governance-execution",
|
|
50
|
+
retryable: false
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/capabilities/suppression-governance/module.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAGjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,0BAA0B,EAAE,MAAM,sFAAsF,CAAC;AAClI,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,kCAAkC,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,2DAA2D,CAAC;AACzG,OAAO,EACL,gCAAgC,EAChC,aAAa,EACb,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,kCAAkC,EAAE,CAAC;AAE9C,MAAM,UAAU,qCAAqC;IACnD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QACjC,KAAK,EAAE,IAAI,mBAAmB,EAAE;QAChC,OAAO,EAAE,IAAI,qBAAqB,EAAE;QACpC,YAAY,EAAE,IAAI,0BAA0B,EAAE;KAC/C,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,EAAE,EAAE,aAAa;QACjB,mBAAmB,EAAE,gCAAgC;QACrD,KAAK,CAAC,GAAG,CAAC,UAAgC;YACxC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,CACvC,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,MAAM,CAClB,CAAC;gBACF,OAAO,gBAAgB,CAAC;oBACtB,YAAY,EAAE,aAAa;oBAC3B,6BAA6B,EAAE,gCAAgC;oBAC/D,WAAW,EAAE,MAAM,4BAA4B,CAC7C;wBACE,YAAY,EAAE,UAAU,CAAC,YAAY;wBACrC,MAAM;wBACN,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;qBAC1E,EACD,YAAY,CACb;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;oBAC1C,OAAO,gBAAgB,CAAC;wBACtB,YAAY,EAAE,aAAa;wBAC3B,6BAA6B,EAAE,gCAAgC;wBAC/D,OAAO,EACL,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,qBAAqB;4BAC1C,CAAC,CAAC,WAAW;4BACb,CAAC,CAAC,eAAe;wBACrB,OAAO,EAAE,KAAK,CAAC,OAAO;qBACvB,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,gBAAgB,CAAC;oBACtB,YAAY,EAAE,aAAa;oBAC3B,6BAA6B,EAAE,gCAAgC;oBAC/D,OAAO,EAAE,QAAQ;oBACjB,OAAO,EAAE;wBACP,IAAI,EAAE,6BAA6B;wBACnC,OAAO,EAAE,qDAAqD;wBAC9D,KAAK,EAAE,kCAAkC;wBACzC,SAAS,EAAE,KAAK;qBACjB;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { WorkspaceSnapshot } from "../../../application/model/workspace-snapshot.js";
|
|
2
2
|
import type { WorkspaceReader } from "../../../application/ports/workspace-reader.js";
|
|
3
3
|
export declare class PnpmWorkspaceReader implements WorkspaceReader {
|
|
4
|
+
#private;
|
|
4
5
|
read(consumerRoot: string, workspaceManifestPath: string, signal?: AbortSignal): Promise<WorkspaceSnapshot>;
|
|
5
6
|
}
|
|
6
7
|
//# sourceMappingURL=pnpm-workspace-reader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pnpm-workspace-reader.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pnpm-workspace-reader.d.ts","sourceRoot":"","sources":["../../../../../../src/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAEtF,qBAAa,mBAAoB,YAAW,eAAe;;IAGzD,IAAI,CACF,YAAY,EAAE,MAAM,EACpB,qBAAqB,EAAE,MAAM,EAC7B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAM5B;CACF"}
|
|
@@ -1,199 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isAbsolute, posix, relative, resolve, sep } from "node:path";
|
|
3
|
-
import { CapabilityInputError } from "../../../../../capability-runtime.js";
|
|
4
|
-
import { assertNotCancelled, loadStrictYamlFile } from "../../../../../strict-yaml.js";
|
|
5
|
-
import { DEPENDENCY_SECTIONS } from "../../../application/model/workspace-snapshot.js";
|
|
6
|
-
const MAX_MANIFEST_BYTES = 2 * 1024 * 1024;
|
|
7
|
-
const MAX_WORKSPACE_PACKAGES = 5_000;
|
|
8
|
-
const READ_CONCURRENCY = 32;
|
|
9
|
-
const IGNORED_GLOBS = [
|
|
10
|
-
"**/.git/**",
|
|
11
|
-
"**/node_modules/**",
|
|
12
|
-
"**/dist/**",
|
|
13
|
-
"**/coverage/**"
|
|
14
|
-
];
|
|
15
|
-
function inputError(code, message, phase) {
|
|
16
|
-
throw new CapabilityInputError({ code, message, phase, retryable: false });
|
|
17
|
-
}
|
|
18
|
-
function isRecord(value) {
|
|
19
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
20
|
-
}
|
|
21
|
-
function toPosixPath(path) {
|
|
22
|
-
return path.split(sep).join("/");
|
|
23
|
-
}
|
|
24
|
-
function validateWorkspacePatterns(value) {
|
|
25
|
-
if (value === undefined) {
|
|
26
|
-
return [];
|
|
27
|
-
}
|
|
28
|
-
if (!Array.isArray(value) ||
|
|
29
|
-
value.some((pattern) => typeof pattern !== "string" ||
|
|
30
|
-
pattern.length === 0 ||
|
|
31
|
-
pattern.includes("\\") ||
|
|
32
|
-
pattern.startsWith("/") ||
|
|
33
|
-
pattern.split("/").includes(".."))) {
|
|
34
|
-
inputError("PNPM_WORKSPACE_INVALID", "pnpm-workspace.yaml packages must contain repository-relative POSIX glob patterns.", "workspace-discovery");
|
|
35
|
-
}
|
|
36
|
-
return value;
|
|
37
|
-
}
|
|
38
|
-
function stringRecord(value, field, phase) {
|
|
39
|
-
if (!isRecord(value)) {
|
|
40
|
-
inputError("GOVERNED_INPUT_INVALID", `${field} must be an object.`, phase);
|
|
41
|
-
}
|
|
42
|
-
for (const [name, specifier] of Object.entries(value)) {
|
|
43
|
-
if (name.length === 0 || typeof specifier !== "string" || specifier.length === 0) {
|
|
44
|
-
inputError("GOVERNED_INPUT_INVALID", `${field} must contain non-empty string values.`, phase);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return value;
|
|
48
|
-
}
|
|
49
|
-
function optionalStringArray(value, field) {
|
|
50
|
-
if (value === undefined) {
|
|
51
|
-
return [];
|
|
52
|
-
}
|
|
53
|
-
if (!Array.isArray(value) || value.some((entry) => typeof entry !== "string")) {
|
|
54
|
-
inputError("PACKAGE_MANIFEST_INVALID", `${field} must be an array of package names.`, "package-manifest");
|
|
55
|
-
}
|
|
56
|
-
return value;
|
|
57
|
-
}
|
|
58
|
-
async function readJsonManifest(consumerRoot, manifestPath, signal) {
|
|
59
|
-
assertNotCancelled(signal);
|
|
60
|
-
const canonicalRoot = await realpath(consumerRoot);
|
|
61
|
-
const absolutePath = resolve(canonicalRoot, manifestPath);
|
|
62
|
-
const canonicalPath = await realpath(absolutePath).catch(() => inputError("PACKAGE_MANIFEST_UNAVAILABLE", `Workspace package manifest is unavailable: ${manifestPath}.`, "package-manifest"));
|
|
63
|
-
const relation = relative(canonicalRoot, canonicalPath);
|
|
64
|
-
if (relation === ".." ||
|
|
65
|
-
relation.startsWith(`..${sep}`) ||
|
|
66
|
-
isAbsolute(relation)) {
|
|
67
|
-
inputError("PACKAGE_MANIFEST_ESCAPE", `Workspace package manifest escapes the consumer repository: ${manifestPath}.`, "package-manifest");
|
|
68
|
-
}
|
|
69
|
-
const metadata = await stat(canonicalPath);
|
|
70
|
-
if (!metadata.isFile() || metadata.size > MAX_MANIFEST_BYTES) {
|
|
71
|
-
inputError("PACKAGE_MANIFEST_INVALID", `Workspace package manifest must be a regular file no larger than ${MAX_MANIFEST_BYTES} bytes: ${manifestPath}.`, "package-manifest");
|
|
72
|
-
}
|
|
73
|
-
let input;
|
|
74
|
-
try {
|
|
75
|
-
input = JSON.parse(await readFile(canonicalPath, "utf8"));
|
|
76
|
-
}
|
|
77
|
-
catch {
|
|
78
|
-
inputError("PACKAGE_MANIFEST_INVALID", `Workspace package manifest is not valid JSON: ${manifestPath}.`, "package-manifest");
|
|
79
|
-
}
|
|
80
|
-
if (!isRecord(input)) {
|
|
81
|
-
inputError("PACKAGE_MANIFEST_INVALID", `Workspace package manifest must contain an object: ${manifestPath}.`, "package-manifest");
|
|
82
|
-
}
|
|
83
|
-
const packageName = typeof input.name === "string" && input.name.length > 0
|
|
84
|
-
? input.name
|
|
85
|
-
: `<unnamed:${manifestPath}>`;
|
|
86
|
-
const dependencies = [];
|
|
87
|
-
for (const section of DEPENDENCY_SECTIONS) {
|
|
88
|
-
if (input[section] === undefined) {
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
const declarations = stringRecord(input[section], `${manifestPath} ${section}`, "package-manifest");
|
|
92
|
-
for (const [dependencyName, specifier] of Object.entries(declarations)) {
|
|
93
|
-
dependencies.push({
|
|
94
|
-
packageName,
|
|
95
|
-
manifestPath,
|
|
96
|
-
section,
|
|
97
|
-
dependencyName,
|
|
98
|
-
specifier
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
const bundledDependencies = [
|
|
103
|
-
...optionalStringArray(input.bundleDependencies, `${manifestPath} bundleDependencies`),
|
|
104
|
-
...optionalStringArray(input.bundledDependencies, `${manifestPath} bundledDependencies`)
|
|
105
|
-
].toSorted();
|
|
106
|
-
return {
|
|
107
|
-
name: packageName,
|
|
108
|
-
manifestPath,
|
|
109
|
-
...(typeof input.packageManager === "string"
|
|
110
|
-
? { packageManager: input.packageManager }
|
|
111
|
-
: {}),
|
|
112
|
-
dependencies: dependencies.toSorted(compareDeclarations),
|
|
113
|
-
bundledDependencies
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
function compareDeclarations(left, right) {
|
|
117
|
-
return (left.dependencyName.localeCompare(right.dependencyName) ||
|
|
118
|
-
left.section.localeCompare(right.section));
|
|
119
|
-
}
|
|
120
|
-
function parseCatalog(workspace, field) {
|
|
121
|
-
const value = workspace[field];
|
|
122
|
-
if (value === undefined) {
|
|
123
|
-
return [];
|
|
124
|
-
}
|
|
125
|
-
if (field === "catalog") {
|
|
126
|
-
return Object.entries(stringRecord(value, "catalog", "workspace-manifest")).map(([dependencyName, version]) => ({
|
|
127
|
-
catalogName: "default",
|
|
128
|
-
dependencyName,
|
|
129
|
-
version
|
|
130
|
-
}));
|
|
131
|
-
}
|
|
132
|
-
if (!isRecord(value)) {
|
|
133
|
-
inputError("PNPM_WORKSPACE_INVALID", "catalogs must be an object.", "workspace-manifest");
|
|
134
|
-
}
|
|
135
|
-
const entries = [];
|
|
136
|
-
for (const [catalogName, catalog] of Object.entries(value)) {
|
|
137
|
-
for (const [dependencyName, version] of Object.entries(stringRecord(catalog, `catalogs.${catalogName}`, "workspace-manifest"))) {
|
|
138
|
-
entries.push({ catalogName, dependencyName, version });
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return entries;
|
|
142
|
-
}
|
|
143
|
-
function selectedByPatterns(directory, patterns) {
|
|
144
|
-
if (directory === ".") {
|
|
145
|
-
return true;
|
|
146
|
-
}
|
|
147
|
-
const positive = patterns.filter((pattern) => !pattern.startsWith("!"));
|
|
148
|
-
const negative = patterns
|
|
149
|
-
.filter((pattern) => pattern.startsWith("!"))
|
|
150
|
-
.map((pattern) => pattern.slice(1));
|
|
151
|
-
return (positive.some((pattern) => posix.matchesGlob(directory, pattern)) &&
|
|
152
|
-
!negative.some((pattern) => posix.matchesGlob(directory, pattern)));
|
|
153
|
-
}
|
|
154
|
-
async function discoverManifestPaths(consumerRoot, patterns, signal) {
|
|
155
|
-
const manifests = new Set(["package.json"]);
|
|
156
|
-
for await (const candidate of glob("**/package.json", {
|
|
157
|
-
cwd: consumerRoot,
|
|
158
|
-
exclude: IGNORED_GLOBS
|
|
159
|
-
})) {
|
|
160
|
-
assertNotCancelled(signal);
|
|
161
|
-
const manifestPath = toPosixPath(candidate);
|
|
162
|
-
const directory = posix.dirname(manifestPath);
|
|
163
|
-
if (selectedByPatterns(directory, patterns)) {
|
|
164
|
-
manifests.add(manifestPath);
|
|
165
|
-
if (manifests.size > MAX_WORKSPACE_PACKAGES) {
|
|
166
|
-
inputError("WORKSPACE_LIMIT_EXCEEDED", `Workspace contains more than ${MAX_WORKSPACE_PACKAGES} package manifests.`, "workspace-discovery");
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return [...manifests].toSorted();
|
|
171
|
-
}
|
|
172
|
-
async function readManifestBatch(consumerRoot, paths, signal) {
|
|
173
|
-
const packages = [];
|
|
174
|
-
for (let index = 0; index < paths.length; index += READ_CONCURRENCY) {
|
|
175
|
-
const batch = paths.slice(index, index + READ_CONCURRENCY);
|
|
176
|
-
packages.push(...(await Promise.all(batch.map((path) => readJsonManifest(consumerRoot, path, signal)))));
|
|
177
|
-
}
|
|
178
|
-
return packages.toSorted((left, right) => left.manifestPath.localeCompare(right.manifestPath));
|
|
179
|
-
}
|
|
1
|
+
import { PnpmWorkspaceInventoryReader } from "../../../../../workspace-inventory/adapters/outbound/pnpm/pnpm-workspace-inventory-reader.js";
|
|
180
2
|
export class PnpmWorkspaceReader {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
inputError("PNPM_WORKSPACE_INVALID", "pnpm-workspace.yaml must contain an object.", "workspace-manifest");
|
|
185
|
-
}
|
|
186
|
-
const patterns = validateWorkspacePatterns(input.packages);
|
|
187
|
-
const manifestPaths = await discoverManifestPaths(consumerRoot, patterns, signal);
|
|
188
|
-
return {
|
|
189
|
-
...(typeof input.catalogMode === "string" ? { catalogMode: input.catalogMode } : {}),
|
|
190
|
-
catalogs: [
|
|
191
|
-
...parseCatalog(input, "catalog"),
|
|
192
|
-
...parseCatalog(input, "catalogs")
|
|
193
|
-
].toSorted((left, right) => left.catalogName.localeCompare(right.catalogName) ||
|
|
194
|
-
left.dependencyName.localeCompare(right.dependencyName)),
|
|
195
|
-
packages: await readManifestBatch(consumerRoot, manifestPaths, signal)
|
|
196
|
-
};
|
|
3
|
+
#inventoryReader = new PnpmWorkspaceInventoryReader();
|
|
4
|
+
read(consumerRoot, workspaceManifestPath, signal) {
|
|
5
|
+
return this.#inventoryReader.read(consumerRoot, workspaceManifestPath, signal);
|
|
197
6
|
}
|
|
198
7
|
}
|
|
199
8
|
//# sourceMappingURL=pnpm-workspace-reader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pnpm-workspace-reader.js","sourceRoot":"","sources":["../../../../../../src/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pnpm-workspace-reader.js","sourceRoot":"","sources":["../../../../../../src/capabilities/workspace-dependency-declarations/adapters/outbound/pnpm-workspace/pnpm-workspace-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,8FAA8F,CAAC;AAI5I,MAAM,OAAO,mBAAmB;IACrB,gBAAgB,GAAG,IAAI,4BAA4B,EAAE,CAAC;IAE/D,IAAI,CACF,YAAoB,EACpB,qBAA6B,EAC7B,MAAoB;QAEpB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAC/B,YAAY,EACZ,qBAAqB,EACrB,MAAM,CACP,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface WorkspaceDependencyPolicy {
|
|
2
|
+
readonly reservedScopes: readonly string[];
|
|
3
|
+
readonly developmentOnlyPackages: readonly string[];
|
|
4
|
+
readonly exactRegistryDevelopmentOnlyPackages: readonly string[];
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=workspace-dependency-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-dependency-policy.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/model/workspace-dependency-policy.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,QAAQ,CAAC,uBAAuB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpD,QAAQ,CAAC,oCAAoC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-dependency-policy.js","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/model/workspace-dependency-policy.ts"],"names":[],"mappings":""}
|
|
@@ -1,27 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
export type DependencySection = (typeof DEPENDENCY_SECTIONS)[number];
|
|
3
|
-
export interface DependencyDeclaration {
|
|
4
|
-
readonly packageName: string;
|
|
5
|
-
readonly manifestPath: string;
|
|
6
|
-
readonly section: DependencySection;
|
|
7
|
-
readonly dependencyName: string;
|
|
8
|
-
readonly specifier: string;
|
|
9
|
-
}
|
|
10
|
-
export interface WorkspacePackage {
|
|
11
|
-
readonly name: string;
|
|
12
|
-
readonly manifestPath: string;
|
|
13
|
-
readonly packageManager?: string;
|
|
14
|
-
readonly dependencies: readonly DependencyDeclaration[];
|
|
15
|
-
readonly bundledDependencies: readonly string[];
|
|
16
|
-
}
|
|
17
|
-
export interface CatalogEntry {
|
|
18
|
-
readonly catalogName: string;
|
|
19
|
-
readonly dependencyName: string;
|
|
20
|
-
readonly version: string;
|
|
21
|
-
}
|
|
22
|
-
export interface WorkspaceSnapshot {
|
|
23
|
-
readonly catalogMode?: string;
|
|
24
|
-
readonly catalogs: readonly CatalogEntry[];
|
|
25
|
-
readonly packages: readonly WorkspacePackage[];
|
|
26
|
-
}
|
|
1
|
+
export type { DependencyDeclaration, WorkspaceInventory as WorkspaceSnapshot } from "../../../../workspace-inventory/application/model/workspace-inventory.js";
|
|
27
2
|
//# sourceMappingURL=workspace-snapshot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-snapshot.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"workspace-snapshot.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,kBAAkB,IAAI,iBAAiB,EACxC,MAAM,0EAA0E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-snapshot.js","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workspace-snapshot.js","sourceRoot":"","sources":["../../../../../src/capabilities/workspace-dependency-declarations/application/model/workspace-snapshot.ts"],"names":[],"mappings":""}
|