@mimir-labs/core 0.1.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 +5 -0
- package/dist/implementation/adapters/agents-md/adapter.d.ts +2 -0
- package/dist/implementation/adapters/agents-md/adapter.js +35 -0
- package/dist/implementation/adapters/agents-md/adapter.js.map +1 -0
- package/dist/implementation/adapters/copilot/adapter.d.ts +2 -0
- package/dist/implementation/adapters/copilot/adapter.js +34 -0
- package/dist/implementation/adapters/copilot/adapter.js.map +1 -0
- package/dist/implementation/adapters/cursor/adapter.d.ts +2 -0
- package/dist/implementation/adapters/cursor/adapter.js +33 -0
- package/dist/implementation/adapters/cursor/adapter.js.map +1 -0
- package/dist/implementation/adapters/index.d.ts +5 -0
- package/dist/implementation/adapters/index.js +23 -0
- package/dist/implementation/adapters/index.js.map +1 -0
- package/dist/implementation/adapters/managed-section.d.ts +5 -0
- package/dist/implementation/adapters/managed-section.js +37 -0
- package/dist/implementation/adapters/managed-section.js.map +1 -0
- package/dist/implementation/adapters/registry.d.ts +11 -0
- package/dist/implementation/adapters/registry.js +50 -0
- package/dist/implementation/adapters/registry.js.map +1 -0
- package/dist/implementation/adapters/types.d.ts +19 -0
- package/dist/implementation/adapters/types.js +3 -0
- package/dist/implementation/adapters/types.js.map +1 -0
- package/dist/implementation/configuration/manifest-loader.d.ts +16 -0
- package/dist/implementation/configuration/manifest-loader.js +64 -0
- package/dist/implementation/configuration/manifest-loader.js.map +1 -0
- package/dist/implementation/configuration/package-config.d.ts +12 -0
- package/dist/implementation/configuration/package-config.js +33 -0
- package/dist/implementation/configuration/package-config.js.map +1 -0
- package/dist/implementation/dependency-discovery/discover-providers.d.ts +6 -0
- package/dist/implementation/dependency-discovery/discover-providers.js +39 -0
- package/dist/implementation/dependency-discovery/discover-providers.js.map +1 -0
- package/dist/implementation/doctor/evaluator.d.ts +16 -0
- package/dist/implementation/doctor/evaluator.js +269 -0
- package/dist/implementation/doctor/evaluator.js.map +1 -0
- package/dist/implementation/generation/examples/existing-aps/src/Modal.d.ts +4 -0
- package/dist/implementation/generation/examples/existing-aps/src/Modal.js +7 -0
- package/dist/implementation/generation/examples/existing-aps/src/Modal.js.map +1 -0
- package/dist/implementation/generation/examples/existing-aps/src/index.d.ts +1 -0
- package/dist/implementation/generation/examples/existing-aps/src/index.js +6 -0
- package/dist/implementation/generation/examples/existing-aps/src/index.js.map +1 -0
- package/dist/implementation/generation/examples/missing-metadata/src/Input.d.ts +6 -0
- package/dist/implementation/generation/examples/missing-metadata/src/Input.js +6 -0
- package/dist/implementation/generation/examples/missing-metadata/src/Input.js.map +1 -0
- package/dist/implementation/generation/examples/missing-metadata/src/index.d.ts +1 -0
- package/dist/implementation/generation/examples/missing-metadata/src/index.js +6 -0
- package/dist/implementation/generation/examples/missing-metadata/src/index.js.map +1 -0
- package/dist/implementation/generation/examples/react-exports/src/Button.d.ts +5 -0
- package/dist/implementation/generation/examples/react-exports/src/Button.js +7 -0
- package/dist/implementation/generation/examples/react-exports/src/Button.js.map +1 -0
- package/dist/implementation/generation/examples/react-exports/src/Button.stories.d.ts +16 -0
- package/dist/implementation/generation/examples/react-exports/src/Button.stories.js +20 -0
- package/dist/implementation/generation/examples/react-exports/src/Button.stories.js.map +1 -0
- package/dist/implementation/generation/examples/react-exports/src/index.d.ts +1 -0
- package/dist/implementation/generation/examples/react-exports/src/index.js +6 -0
- package/dist/implementation/generation/examples/react-exports/src/index.js.map +1 -0
- package/dist/implementation/generation/extractors/readme-extractor.d.ts +2 -0
- package/dist/implementation/generation/extractors/readme-extractor.js +58 -0
- package/dist/implementation/generation/extractors/readme-extractor.js.map +1 -0
- package/dist/implementation/generation/extractors/storybook-extractor.d.ts +2 -0
- package/dist/implementation/generation/extractors/storybook-extractor.js +64 -0
- package/dist/implementation/generation/extractors/storybook-extractor.js.map +1 -0
- package/dist/implementation/generation/extractors/typescript-extractor.d.ts +2 -0
- package/dist/implementation/generation/extractors/typescript-extractor.js +138 -0
- package/dist/implementation/generation/extractors/typescript-extractor.js.map +1 -0
- package/dist/implementation/generation/generate-service.d.ts +6 -0
- package/dist/implementation/generation/generate-service.js +121 -0
- package/dist/implementation/generation/generate-service.js.map +1 -0
- package/dist/implementation/generation/provenance/provenance-builder.d.ts +6 -0
- package/dist/implementation/generation/provenance/provenance-builder.js +44 -0
- package/dist/implementation/generation/provenance/provenance-builder.js.map +1 -0
- package/dist/implementation/generation/resource-builders/component-builder.d.ts +2 -0
- package/dist/implementation/generation/resource-builders/component-builder.js +68 -0
- package/dist/implementation/generation/resource-builders/component-builder.js.map +1 -0
- package/dist/implementation/generation/resource-builders/example-builder.d.ts +5 -0
- package/dist/implementation/generation/resource-builders/example-builder.js +10 -0
- package/dist/implementation/generation/resource-builders/example-builder.js.map +1 -0
- package/dist/implementation/generation/types.d.ts +80 -0
- package/dist/implementation/generation/types.js +3 -0
- package/dist/implementation/generation/types.js.map +1 -0
- package/dist/implementation/generators/aps-generator.d.ts +7 -0
- package/dist/implementation/generators/aps-generator.js +11 -0
- package/dist/implementation/generators/aps-generator.js.map +1 -0
- package/dist/implementation/generators/index.d.ts +4 -0
- package/dist/implementation/generators/index.js +15 -0
- package/dist/implementation/generators/index.js.map +1 -0
- package/dist/implementation/generators/registry.d.ts +8 -0
- package/dist/implementation/generators/registry.js +30 -0
- package/dist/implementation/generators/registry.js.map +1 -0
- package/dist/implementation/generators/types.d.ts +4 -0
- package/dist/implementation/generators/types.js +3 -0
- package/dist/implementation/generators/types.js.map +1 -0
- package/dist/implementation/io/fs.d.ts +6 -0
- package/dist/implementation/io/fs.js +47 -0
- package/dist/implementation/io/fs.js.map +1 -0
- package/dist/implementation/io/json.d.ts +1 -0
- package/dist/implementation/io/json.js +7 -0
- package/dist/implementation/io/json.js.map +1 -0
- package/dist/implementation/query/resource-summary.d.ts +4 -0
- package/dist/implementation/query/resource-summary.js +32 -0
- package/dist/implementation/query/resource-summary.js.map +1 -0
- package/dist/implementation/services/context-service.d.ts +4 -0
- package/dist/implementation/services/context-service.js +22 -0
- package/dist/implementation/services/context-service.js.map +1 -0
- package/dist/implementation/services/discovery-service.d.ts +1 -0
- package/dist/implementation/services/discovery-service.js +8 -0
- package/dist/implementation/services/discovery-service.js.map +1 -0
- package/dist/implementation/services/doctor-service.d.ts +1 -0
- package/dist/implementation/services/doctor-service.js +8 -0
- package/dist/implementation/services/doctor-service.js.map +1 -0
- package/dist/implementation/services/generate-service.d.ts +7 -0
- package/dist/implementation/services/generate-service.js +10 -0
- package/dist/implementation/services/generate-service.js.map +1 -0
- package/dist/implementation/services/governance-service.d.ts +1 -0
- package/dist/implementation/services/governance-service.js +28 -0
- package/dist/implementation/services/governance-service.js.map +1 -0
- package/dist/implementation/services/init-service.d.ts +6 -0
- package/dist/implementation/services/init-service.js +49 -0
- package/dist/implementation/services/init-service.js.map +1 -0
- package/dist/implementation/services/sync-service.d.ts +8 -0
- package/dist/implementation/services/sync-service.js +35 -0
- package/dist/implementation/services/sync-service.js.map +1 -0
- package/dist/implementation/services/validate-service.d.ts +1 -0
- package/dist/implementation/services/validate-service.js +8 -0
- package/dist/implementation/services/validate-service.js.map +1 -0
- package/dist/implementation/synchronization/agents-md.d.ts +2 -0
- package/dist/implementation/synchronization/agents-md.js +46 -0
- package/dist/implementation/synchronization/agents-md.js.map +1 -0
- package/dist/implementation/synchronization/context-generator.d.ts +7 -0
- package/dist/implementation/synchronization/context-generator.js +110 -0
- package/dist/implementation/synchronization/context-generator.js.map +1 -0
- package/dist/implementation/validation-engine/validate-package.d.ts +10 -0
- package/dist/implementation/validation-engine/validate-package.js +123 -0
- package/dist/implementation/validation-engine/validate-package.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol/compatibility/aps-component-schema.d.ts +17 -0
- package/dist/protocol/compatibility/aps-component-schema.js +85 -0
- package/dist/protocol/compatibility/aps-component-schema.js.map +1 -0
- package/dist/protocol/compatibility/aps-example-schema.d.ts +14 -0
- package/dist/protocol/compatibility/aps-example-schema.js +63 -0
- package/dist/protocol/compatibility/aps-example-schema.js.map +1 -0
- package/dist/protocol/compatibility/aps-manifest-schema.d.ts +15 -0
- package/dist/protocol/compatibility/aps-manifest-schema.js +115 -0
- package/dist/protocol/compatibility/aps-manifest-schema.js.map +1 -0
- package/dist/protocol/compatibility/aps-migration-schema.d.ts +14 -0
- package/dist/protocol/compatibility/aps-migration-schema.js +65 -0
- package/dist/protocol/compatibility/aps-migration-schema.js.map +1 -0
- package/dist/protocol/compatibility/aps-pattern-schema.d.ts +15 -0
- package/dist/protocol/compatibility/aps-pattern-schema.js +67 -0
- package/dist/protocol/compatibility/aps-pattern-schema.js.map +1 -0
- package/dist/protocol/compatibility/aps-rule-schema.d.ts +13 -0
- package/dist/protocol/compatibility/aps-rule-schema.js +55 -0
- package/dist/protocol/compatibility/aps-rule-schema.js.map +1 -0
- package/dist/protocol/compatibility/index.d.ts +14 -0
- package/dist/protocol/compatibility/index.js +6 -0
- package/dist/protocol/compatibility/index.js.map +1 -0
- package/dist/protocol/governance/applicability-validator.d.ts +2 -0
- package/dist/protocol/governance/applicability-validator.js +108 -0
- package/dist/protocol/governance/applicability-validator.js.map +1 -0
- package/dist/protocol/governance/conflict-validator.d.ts +2 -0
- package/dist/protocol/governance/conflict-validator.js +129 -0
- package/dist/protocol/governance/conflict-validator.js.map +1 -0
- package/dist/protocol/governance/evidence-validator.d.ts +2 -0
- package/dist/protocol/governance/evidence-validator.js +97 -0
- package/dist/protocol/governance/evidence-validator.js.map +1 -0
- package/dist/protocol/governance/identity-validator.d.ts +2 -0
- package/dist/protocol/governance/identity-validator.js +79 -0
- package/dist/protocol/governance/identity-validator.js.map +1 -0
- package/dist/protocol/governance/index.d.ts +79 -0
- package/dist/protocol/governance/index.js +115 -0
- package/dist/protocol/governance/index.js.map +1 -0
- package/dist/protocol/governance/lifecycle-validator.d.ts +2 -0
- package/dist/protocol/governance/lifecycle-validator.js +93 -0
- package/dist/protocol/governance/lifecycle-validator.js.map +1 -0
- package/dist/protocol/governance/provenance-validator.d.ts +2 -0
- package/dist/protocol/governance/provenance-validator.js +170 -0
- package/dist/protocol/governance/provenance-validator.js.map +1 -0
- package/dist/protocol/manifest/api-resource.d.ts +26 -0
- package/dist/protocol/manifest/api-resource.js +3 -0
- package/dist/protocol/manifest/api-resource.js.map +1 -0
- package/dist/protocol/manifest/common.d.ts +44 -0
- package/dist/protocol/manifest/common.js +3 -0
- package/dist/protocol/manifest/common.js.map +1 -0
- package/dist/protocol/manifest/component-resource.d.ts +48 -0
- package/dist/protocol/manifest/component-resource.js +3 -0
- package/dist/protocol/manifest/component-resource.js.map +1 -0
- package/dist/protocol/manifest/event-resource.d.ts +16 -0
- package/dist/protocol/manifest/event-resource.js +3 -0
- package/dist/protocol/manifest/event-resource.js.map +1 -0
- package/dist/protocol/manifest/example-resource.d.ts +17 -0
- package/dist/protocol/manifest/example-resource.js +3 -0
- package/dist/protocol/manifest/example-resource.js.map +1 -0
- package/dist/protocol/manifest/index.d.ts +13 -0
- package/dist/protocol/manifest/index.js +3 -0
- package/dist/protocol/manifest/index.js.map +1 -0
- package/dist/protocol/manifest/legacy-v1.d.ts +47 -0
- package/dist/protocol/manifest/legacy-v1.js +3 -0
- package/dist/protocol/manifest/legacy-v1.js.map +1 -0
- package/dist/protocol/manifest/manifest.d.ts +28 -0
- package/dist/protocol/manifest/manifest.js +3 -0
- package/dist/protocol/manifest/manifest.js.map +1 -0
- package/dist/protocol/manifest/migration-resource.d.ts +22 -0
- package/dist/protocol/manifest/migration-resource.js +3 -0
- package/dist/protocol/manifest/migration-resource.js.map +1 -0
- package/dist/protocol/manifest/model-resource.d.ts +21 -0
- package/dist/protocol/manifest/model-resource.js +3 -0
- package/dist/protocol/manifest/model-resource.js.map +1 -0
- package/dist/protocol/manifest/pattern-resource.d.ts +14 -0
- package/dist/protocol/manifest/pattern-resource.js +3 -0
- package/dist/protocol/manifest/pattern-resource.js.map +1 -0
- package/dist/protocol/manifest/resource.d.ts +24 -0
- package/dist/protocol/manifest/resource.js +3 -0
- package/dist/protocol/manifest/resource.js.map +1 -0
- package/dist/protocol/manifest/rule-resource.d.ts +27 -0
- package/dist/protocol/manifest/rule-resource.js +3 -0
- package/dist/protocol/manifest/rule-resource.js.map +1 -0
- package/dist/protocol/manifest/service-resource.d.ts +14 -0
- package/dist/protocol/manifest/service-resource.js +3 -0
- package/dist/protocol/manifest/service-resource.js.map +1 -0
- package/dist/shared/json.d.ts +2 -0
- package/dist/shared/json.js +14 -0
- package/dist/shared/json.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { ApsManifest, ApsResourceType } from "../manifest";
|
|
2
|
+
export type KnowledgeSourceType = "typescript" | "storybook" | "readme" | "human" | "static-analysis" | "architecture-policy" | "external";
|
|
3
|
+
export type KnowledgeConfidence = "low" | "medium" | "high";
|
|
4
|
+
export type KnowledgeAuthority = "advisory" | "required" | "policy";
|
|
5
|
+
export type GovernanceApplicability = {
|
|
6
|
+
framework?: string | string[];
|
|
7
|
+
language?: string | string[];
|
|
8
|
+
runtime?: string | string[];
|
|
9
|
+
platform?: string | string[];
|
|
10
|
+
layer?: string | string[];
|
|
11
|
+
boundedContext?: string | string[];
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
};
|
|
14
|
+
export type GovernanceEvidence = {
|
|
15
|
+
evidenceId?: string;
|
|
16
|
+
sourceType: KnowledgeSourceType;
|
|
17
|
+
sourceRef: string;
|
|
18
|
+
extractedAt: string;
|
|
19
|
+
confidence: KnowledgeConfidence;
|
|
20
|
+
authority: KnowledgeAuthority;
|
|
21
|
+
scope?: string;
|
|
22
|
+
sourceVersion?: string;
|
|
23
|
+
freshnessTtlDays?: number;
|
|
24
|
+
applicability?: GovernanceApplicability;
|
|
25
|
+
extractor?: string;
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
};
|
|
28
|
+
export type GovernanceConflict = {
|
|
29
|
+
id?: string;
|
|
30
|
+
fieldPath?: string;
|
|
31
|
+
candidates?: Array<Record<string, unknown>>;
|
|
32
|
+
selectedCandidateId?: string;
|
|
33
|
+
rejectedCandidateIds?: string[];
|
|
34
|
+
explanation?: string;
|
|
35
|
+
[key: string]: unknown;
|
|
36
|
+
};
|
|
37
|
+
export type GovernanceResource = {
|
|
38
|
+
type?: ApsResourceType | string;
|
|
39
|
+
id?: string;
|
|
40
|
+
name?: string;
|
|
41
|
+
description?: string;
|
|
42
|
+
metadata?: Record<string, unknown>;
|
|
43
|
+
deprecated?: unknown;
|
|
44
|
+
deprecationReason?: unknown;
|
|
45
|
+
replacementResourceIds?: unknown;
|
|
46
|
+
migrationIds?: unknown;
|
|
47
|
+
lifecycleState?: unknown;
|
|
48
|
+
[key: string]: unknown;
|
|
49
|
+
};
|
|
50
|
+
export type GovernanceIssue = {
|
|
51
|
+
code: string;
|
|
52
|
+
path: string;
|
|
53
|
+
message: string;
|
|
54
|
+
};
|
|
55
|
+
export type GovernanceCounters = {
|
|
56
|
+
governedFields: number;
|
|
57
|
+
fieldsWithEvidence: number;
|
|
58
|
+
fieldsWithProvenance: number;
|
|
59
|
+
};
|
|
60
|
+
export type GovernanceValidatorResult = {
|
|
61
|
+
errors: GovernanceIssue[];
|
|
62
|
+
warnings: GovernanceIssue[];
|
|
63
|
+
counters: GovernanceCounters;
|
|
64
|
+
};
|
|
65
|
+
export type GovernanceValidationResult = {
|
|
66
|
+
valid: boolean;
|
|
67
|
+
errors: GovernanceIssue[];
|
|
68
|
+
warnings: GovernanceIssue[];
|
|
69
|
+
metrics: {
|
|
70
|
+
resourcesChecked: number;
|
|
71
|
+
evidenceCoverage: number;
|
|
72
|
+
provenanceCoverage: number;
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
export declare function collectGovernanceResources(manifest: ApsManifest): {
|
|
76
|
+
resources: GovernanceResource[];
|
|
77
|
+
warnings: GovernanceIssue[];
|
|
78
|
+
};
|
|
79
|
+
export declare function validateGovernance(manifest: ApsManifest): GovernanceValidationResult;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.collectGovernanceResources = collectGovernanceResources;
|
|
4
|
+
exports.validateGovernance = validateGovernance;
|
|
5
|
+
const json_1 = require("../../shared/json");
|
|
6
|
+
const applicability_validator_1 = require("./applicability-validator");
|
|
7
|
+
const conflict_validator_1 = require("./conflict-validator");
|
|
8
|
+
const evidence_validator_1 = require("./evidence-validator");
|
|
9
|
+
const identity_validator_1 = require("./identity-validator");
|
|
10
|
+
const lifecycle_validator_1 = require("./lifecycle-validator");
|
|
11
|
+
const provenance_validator_1 = require("./provenance-validator");
|
|
12
|
+
const LEGACY_SECTION_TYPES = [
|
|
13
|
+
{ key: "components", type: "component" },
|
|
14
|
+
{ key: "apis", type: "api" },
|
|
15
|
+
{ key: "services", type: "service" },
|
|
16
|
+
{ key: "models", type: "model" },
|
|
17
|
+
{ key: "events", type: "event" },
|
|
18
|
+
{ key: "patterns", type: "pattern" },
|
|
19
|
+
{ key: "rules", type: "rule" },
|
|
20
|
+
{ key: "migrations", type: "migration" },
|
|
21
|
+
{ key: "examples", type: "example" }
|
|
22
|
+
];
|
|
23
|
+
function toPercentage(numerator, denominator) {
|
|
24
|
+
if (denominator === 0) {
|
|
25
|
+
return 0;
|
|
26
|
+
}
|
|
27
|
+
return Number(((numerator / denominator) * 100).toFixed(2));
|
|
28
|
+
}
|
|
29
|
+
function normalizeResourceEntry(entry, fallbackType, warnings, path) {
|
|
30
|
+
if (typeof entry === "string") {
|
|
31
|
+
return {
|
|
32
|
+
type: fallbackType,
|
|
33
|
+
name: entry
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (!(0, json_1.isObject)(entry)) {
|
|
37
|
+
warnings.push({
|
|
38
|
+
code: "APS_GOV_RESOURCE_ENTRY_SKIPPED",
|
|
39
|
+
path,
|
|
40
|
+
message: "Resource entry is not an object or string and was skipped"
|
|
41
|
+
});
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
...entry,
|
|
46
|
+
type: typeof entry.type === "string" ? entry.type : fallbackType
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function collectGovernanceResources(manifest) {
|
|
50
|
+
const resources = [];
|
|
51
|
+
const warnings = [];
|
|
52
|
+
if (Array.isArray(manifest.resources)) {
|
|
53
|
+
for (let index = 0; index < manifest.resources.length; index += 1) {
|
|
54
|
+
const entry = manifest.resources[index];
|
|
55
|
+
if ((0, json_1.isObject)(entry)) {
|
|
56
|
+
resources.push(entry);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
warnings.push({
|
|
60
|
+
code: "APS_GOV_RESOURCE_ENTRY_SKIPPED",
|
|
61
|
+
path: `manifest.resources[${index}]`,
|
|
62
|
+
message: "resources entry is not an object and was skipped"
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
for (const section of LEGACY_SECTION_TYPES) {
|
|
68
|
+
const value = manifest[section.key];
|
|
69
|
+
if (!Array.isArray(value)) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
73
|
+
const normalized = normalizeResourceEntry(value[index], section.type, warnings, `manifest.${section.key}[${index}]`);
|
|
74
|
+
if (normalized) {
|
|
75
|
+
resources.push(normalized);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return { resources, warnings };
|
|
80
|
+
}
|
|
81
|
+
function mergeValidatorResults(results) {
|
|
82
|
+
return {
|
|
83
|
+
errors: results.flatMap((result) => result.errors),
|
|
84
|
+
warnings: results.flatMap((result) => result.warnings),
|
|
85
|
+
counters: {
|
|
86
|
+
governedFields: results.reduce((acc, result) => acc + result.counters.governedFields, 0),
|
|
87
|
+
fieldsWithEvidence: results.reduce((acc, result) => acc + result.counters.fieldsWithEvidence, 0),
|
|
88
|
+
fieldsWithProvenance: results.reduce((acc, result) => acc + result.counters.fieldsWithProvenance, 0)
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function validateGovernance(manifest) {
|
|
93
|
+
const collected = collectGovernanceResources(manifest);
|
|
94
|
+
const validators = [
|
|
95
|
+
(0, provenance_validator_1.validateProvenance)(collected.resources),
|
|
96
|
+
(0, evidence_validator_1.validateEvidence)(collected.resources),
|
|
97
|
+
(0, lifecycle_validator_1.validateLifecycle)(collected.resources),
|
|
98
|
+
(0, applicability_validator_1.validateApplicability)(collected.resources),
|
|
99
|
+
(0, identity_validator_1.validateIdentity)(collected.resources, manifest),
|
|
100
|
+
(0, conflict_validator_1.validateConflicts)(collected.resources)
|
|
101
|
+
];
|
|
102
|
+
const merged = mergeValidatorResults(validators);
|
|
103
|
+
const allWarnings = [...collected.warnings, ...merged.warnings];
|
|
104
|
+
return {
|
|
105
|
+
valid: merged.errors.length === 0,
|
|
106
|
+
errors: merged.errors,
|
|
107
|
+
warnings: allWarnings,
|
|
108
|
+
metrics: {
|
|
109
|
+
resourcesChecked: collected.resources.length,
|
|
110
|
+
evidenceCoverage: toPercentage(merged.counters.fieldsWithEvidence, merged.counters.governedFields),
|
|
111
|
+
provenanceCoverage: toPercentage(merged.counters.fieldsWithProvenance, merged.counters.governedFields)
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/protocol/governance/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateLifecycle = validateLifecycle;
|
|
4
|
+
const json_1 = require("../../shared/json");
|
|
5
|
+
function hasText(value) {
|
|
6
|
+
return typeof value === "string" && value.trim().length > 0;
|
|
7
|
+
}
|
|
8
|
+
function hasNonEmptyStringArray(value) {
|
|
9
|
+
return Array.isArray(value) && value.some((item) => hasText(item));
|
|
10
|
+
}
|
|
11
|
+
function getDeprecationReason(resource) {
|
|
12
|
+
if (hasText(resource.deprecationReason)) {
|
|
13
|
+
return resource.deprecationReason;
|
|
14
|
+
}
|
|
15
|
+
if ((0, json_1.isObject)(resource.deprecated) && hasText(resource.deprecated.reason)) {
|
|
16
|
+
return resource.deprecated.reason;
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
function hasReplacementOrMigration(resource) {
|
|
21
|
+
if (hasNonEmptyStringArray(resource.replacementResourceIds)) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
if (hasNonEmptyStringArray(resource.migrationIds)) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
if ((0, json_1.isObject)(resource.deprecated)) {
|
|
28
|
+
if (Array.isArray(resource.deprecated.replacement) && resource.deprecated.replacement.length > 0) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
if (hasNonEmptyStringArray(resource.deprecated.migrationIds)) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
function validateLifecycle(resources) {
|
|
38
|
+
const errors = [];
|
|
39
|
+
const warnings = [];
|
|
40
|
+
for (let index = 0; index < resources.length; index += 1) {
|
|
41
|
+
const resource = resources[index];
|
|
42
|
+
const lifecycleState = hasText(resource.lifecycleState)
|
|
43
|
+
? resource.lifecycleState
|
|
44
|
+
: null;
|
|
45
|
+
const deprecated = resource.deprecated === true || lifecycleState === "deprecated";
|
|
46
|
+
const removed = lifecycleState === "removed";
|
|
47
|
+
if (deprecated) {
|
|
48
|
+
const basePath = `resources[${index}]`;
|
|
49
|
+
const reason = getDeprecationReason(resource);
|
|
50
|
+
if (!reason) {
|
|
51
|
+
errors.push({
|
|
52
|
+
code: "APS_GOV_DEPRECATION_REASON_REQUIRED",
|
|
53
|
+
path: `${basePath}.deprecationReason`,
|
|
54
|
+
message: "Deprecated resources must declare deprecationReason"
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
if (!hasReplacementOrMigration(resource)) {
|
|
58
|
+
errors.push({
|
|
59
|
+
code: "APS_GOV_DEPRECATION_SUCCESSOR_REQUIRED",
|
|
60
|
+
path: basePath,
|
|
61
|
+
message: "Deprecated resources must define replacementResourceIds or migrationIds"
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (removed) {
|
|
66
|
+
const basePath = `resources[${index}]`;
|
|
67
|
+
if (!hasReplacementOrMigration(resource) && !getDeprecationReason(resource)) {
|
|
68
|
+
errors.push({
|
|
69
|
+
code: "APS_GOV_REMOVED_HISTORY_REQUIRED",
|
|
70
|
+
path: basePath,
|
|
71
|
+
message: "Removed resources must preserve historical references (replacement/migration/reason)"
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (!hasText(resource.id)) {
|
|
75
|
+
warnings.push({
|
|
76
|
+
code: "APS_GOV_REMOVED_ID_RECOMMENDED",
|
|
77
|
+
path: `${basePath}.id`,
|
|
78
|
+
message: "Removed resources should keep stable id for historical traceability"
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
errors,
|
|
85
|
+
warnings,
|
|
86
|
+
counters: {
|
|
87
|
+
governedFields: 0,
|
|
88
|
+
fieldsWithEvidence: 0,
|
|
89
|
+
fieldsWithProvenance: 0
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=lifecycle-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-validator.js","sourceRoot":"","sources":["../../../src/protocol/governance/lifecycle-validator.ts"],"names":[],"mappings":";;AA6CA,8CA8DC;AA3GD,4CAA6C;AAG7C,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,oBAAoB,CAAC,QAA4B;IACxD,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC,iBAA2B,CAAC;IAC9C,CAAC;IAED,IAAI,IAAA,eAAQ,EAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACzE,OAAO,QAAQ,CAAC,UAAU,CAAC,MAAgB,CAAC;IAC9C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,yBAAyB,CAAC,QAA4B;IAC7D,IAAI,sBAAsB,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,sBAAsB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,IAAA,eAAQ,EAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjG,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,sBAAsB,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,iBAAiB,CAAC,SAA+B;IAC/D,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;YACrD,CAAC,CAAE,QAAQ,CAAC,cAAyB;YACrC,CAAC,CAAC,IAAI,CAAC;QAET,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,KAAK,IAAI,IAAI,cAAc,KAAK,YAAY,CAAC;QACnF,MAAM,OAAO,GAAG,cAAc,KAAK,SAAS,CAAC;QAE7C,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,aAAa,KAAK,GAAG,CAAC;YACvC,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,qCAAqC;oBAC3C,IAAI,EAAE,GAAG,QAAQ,oBAAoB;oBACrC,OAAO,EAAE,qDAAqD;iBAC/D,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,wCAAwC;oBAC9C,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,yEAAyE;iBACnF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,aAAa,KAAK,GAAG,CAAC;YACvC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5E,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,kCAAkC;oBACxC,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,sFAAsF;iBAChG,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,gCAAgC;oBACtC,IAAI,EAAE,GAAG,QAAQ,KAAK;oBACtB,OAAO,EAAE,qEAAqE;iBAC/E,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,QAAQ;QACR,QAAQ,EAAE;YACR,cAAc,EAAE,CAAC;YACjB,kBAAkB,EAAE,CAAC;YACrB,oBAAoB,EAAE,CAAC;SACxB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateProvenance = validateProvenance;
|
|
4
|
+
const json_1 = require("../../shared/json");
|
|
5
|
+
const VALID_SOURCE_TYPES = new Set([
|
|
6
|
+
"typescript",
|
|
7
|
+
"storybook",
|
|
8
|
+
"readme",
|
|
9
|
+
"human",
|
|
10
|
+
"static-analysis",
|
|
11
|
+
"architecture-policy",
|
|
12
|
+
"external"
|
|
13
|
+
]);
|
|
14
|
+
const VALID_CONFIDENCE = new Set(["low", "medium", "high"]);
|
|
15
|
+
const VALID_AUTHORITY = new Set(["advisory", "required", "policy"]);
|
|
16
|
+
function getGovernance(resource) {
|
|
17
|
+
if (!(0, json_1.isObject)(resource.metadata)) {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
const governance = resource.metadata.governance;
|
|
21
|
+
return (0, json_1.isObject)(governance) ? governance : {};
|
|
22
|
+
}
|
|
23
|
+
function getGovernedFields(resource) {
|
|
24
|
+
const governance = getGovernance(resource);
|
|
25
|
+
const fields = governance.fields;
|
|
26
|
+
if (!(0, json_1.isObject)(fields)) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
const governedFields = [];
|
|
30
|
+
for (const [fieldName, fieldValue] of Object.entries(fields)) {
|
|
31
|
+
if ((0, json_1.isObject)(fieldValue)) {
|
|
32
|
+
governedFields.push([fieldName, fieldValue]);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return governedFields;
|
|
36
|
+
}
|
|
37
|
+
function readEvidence(fieldConfig) {
|
|
38
|
+
if (!Array.isArray(fieldConfig.evidence)) {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
return fieldConfig.evidence.filter((item) => (0, json_1.isObject)(item));
|
|
42
|
+
}
|
|
43
|
+
function validateEvidenceShape(evidence, path, errors, warnings) {
|
|
44
|
+
let valid = true;
|
|
45
|
+
if (typeof evidence.sourceType !== "string" || !VALID_SOURCE_TYPES.has(evidence.sourceType)) {
|
|
46
|
+
errors.push({
|
|
47
|
+
code: "APS_GOV_INVALID_SOURCE_TYPE",
|
|
48
|
+
path,
|
|
49
|
+
message: "Evidence.sourceType is required and must be a valid source type"
|
|
50
|
+
});
|
|
51
|
+
valid = false;
|
|
52
|
+
}
|
|
53
|
+
if (typeof evidence.sourceRef !== "string" || evidence.sourceRef.trim() === "") {
|
|
54
|
+
errors.push({
|
|
55
|
+
code: "APS_GOV_INVALID_SOURCE_REF",
|
|
56
|
+
path,
|
|
57
|
+
message: "Evidence.sourceRef is required and must be a non-empty string"
|
|
58
|
+
});
|
|
59
|
+
valid = false;
|
|
60
|
+
}
|
|
61
|
+
if (typeof evidence.extractedAt !== "string" || Number.isNaN(Date.parse(evidence.extractedAt))) {
|
|
62
|
+
errors.push({
|
|
63
|
+
code: "APS_GOV_INVALID_EXTRACTED_AT",
|
|
64
|
+
path,
|
|
65
|
+
message: "Evidence.extractedAt is required and must be an ISO date string"
|
|
66
|
+
});
|
|
67
|
+
valid = false;
|
|
68
|
+
}
|
|
69
|
+
if (typeof evidence.confidence !== "string" || !VALID_CONFIDENCE.has(evidence.confidence)) {
|
|
70
|
+
errors.push({
|
|
71
|
+
code: "APS_GOV_INVALID_CONFIDENCE",
|
|
72
|
+
path,
|
|
73
|
+
message: "Evidence.confidence is required and must be low|medium|high"
|
|
74
|
+
});
|
|
75
|
+
valid = false;
|
|
76
|
+
}
|
|
77
|
+
if (typeof evidence.authority !== "string" || !VALID_AUTHORITY.has(evidence.authority)) {
|
|
78
|
+
errors.push({
|
|
79
|
+
code: "APS_GOV_INVALID_AUTHORITY",
|
|
80
|
+
path,
|
|
81
|
+
message: "Evidence.authority is required and must be advisory|required|policy"
|
|
82
|
+
});
|
|
83
|
+
valid = false;
|
|
84
|
+
}
|
|
85
|
+
if (evidence.authority === "policy") {
|
|
86
|
+
if (evidence.sourceType !== "architecture-policy" && evidence.sourceType !== "human") {
|
|
87
|
+
errors.push({
|
|
88
|
+
code: "APS_GOV_POLICY_SOURCE_INVALID",
|
|
89
|
+
path,
|
|
90
|
+
message: "Policy evidence must come from architecture-policy or human sources"
|
|
91
|
+
});
|
|
92
|
+
valid = false;
|
|
93
|
+
}
|
|
94
|
+
if (!(0, json_1.isObject)(evidence.applicability)) {
|
|
95
|
+
errors.push({
|
|
96
|
+
code: "APS_GOV_POLICY_APPLICABILITY_REQUIRED",
|
|
97
|
+
path,
|
|
98
|
+
message: "Policy evidence requires applicability context"
|
|
99
|
+
});
|
|
100
|
+
valid = false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (evidence.authority === "required") {
|
|
104
|
+
if (typeof evidence.scope !== "string" || evidence.scope.trim() === "") {
|
|
105
|
+
errors.push({
|
|
106
|
+
code: "APS_GOV_REQUIRED_SCOPE_MISSING",
|
|
107
|
+
path,
|
|
108
|
+
message: "Required evidence must define scope"
|
|
109
|
+
});
|
|
110
|
+
valid = false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (evidence.authority === "advisory" && evidence.confidence === "low") {
|
|
114
|
+
warnings.push({
|
|
115
|
+
code: "APS_GOV_LOW_CONFIDENCE_ADVISORY",
|
|
116
|
+
path,
|
|
117
|
+
message: "Advisory evidence with low confidence is acceptable but weak"
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
return valid;
|
|
121
|
+
}
|
|
122
|
+
function validateProvenance(resources) {
|
|
123
|
+
const errors = [];
|
|
124
|
+
const warnings = [];
|
|
125
|
+
let governedFields = 0;
|
|
126
|
+
let fieldsWithEvidence = 0;
|
|
127
|
+
let fieldsWithProvenance = 0;
|
|
128
|
+
for (let index = 0; index < resources.length; index += 1) {
|
|
129
|
+
const resource = resources[index];
|
|
130
|
+
const fields = getGovernedFields(resource);
|
|
131
|
+
for (const [fieldName, fieldConfig] of fields) {
|
|
132
|
+
governedFields += 1;
|
|
133
|
+
const basePath = `resources[${index}].metadata.governance.fields.${fieldName}`;
|
|
134
|
+
const evidenceList = readEvidence(fieldConfig);
|
|
135
|
+
const fieldAuthority = typeof fieldConfig.authority === "string" ? fieldConfig.authority : "advisory";
|
|
136
|
+
if (evidenceList.length > 0) {
|
|
137
|
+
fieldsWithEvidence += 1;
|
|
138
|
+
}
|
|
139
|
+
if ((fieldAuthority === "policy" || fieldAuthority === "required") && evidenceList.length === 0) {
|
|
140
|
+
errors.push({
|
|
141
|
+
code: "APS_GOV_EVIDENCE_REQUIRED",
|
|
142
|
+
path: basePath,
|
|
143
|
+
message: `Field authority '${fieldAuthority}' requires evidence`
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
let hasValidProvenance = false;
|
|
147
|
+
for (let evidenceIndex = 0; evidenceIndex < evidenceList.length; evidenceIndex += 1) {
|
|
148
|
+
const evidence = evidenceList[evidenceIndex];
|
|
149
|
+
const evidencePath = `${basePath}.evidence[${evidenceIndex}]`;
|
|
150
|
+
const valid = validateEvidenceShape(evidence, evidencePath, errors, warnings);
|
|
151
|
+
if (valid) {
|
|
152
|
+
hasValidProvenance = true;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (hasValidProvenance) {
|
|
156
|
+
fieldsWithProvenance += 1;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
errors,
|
|
162
|
+
warnings,
|
|
163
|
+
counters: {
|
|
164
|
+
governedFields,
|
|
165
|
+
fieldsWithEvidence,
|
|
166
|
+
fieldsWithProvenance
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=provenance-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance-validator.js","sourceRoot":"","sources":["../../../src/protocol/governance/provenance-validator.ts"],"names":[],"mappings":";;AA0JA,gDAuDC;AAjND,4CAA6C;AAW7C,MAAM,kBAAkB,GAA6B,IAAI,GAAG,CAAC;IAC3D,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,OAAO;IACP,iBAAiB;IACjB,qBAAqB;IACrB,UAAU;CACX,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAA6B,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACtF,MAAM,eAAe,GAA4B,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE7F,SAAS,aAAa,CAAC,QAA4B;IACjD,IAAI,CAAC,IAAA,eAAQ,EAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;IAChD,OAAO,IAAA,eAAQ,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,iBAAiB,CAAC,QAA4B;IACrD,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAEjC,IAAI,CAAC,IAAA,eAAQ,EAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,cAAc,GAA6C,EAAE,CAAC;IACpE,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7D,IAAI,IAAA,eAAQ,EAAC,UAAU,CAAC,EAAE,CAAC;YACzB,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,YAAY,CAAC,WAAoC;IACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAA8B,EAAE,CAAC,IAAA,eAAQ,EAAC,IAAI,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,qBAAqB,CAC5B,QAA4B,EAC5B,IAAY,EACZ,MAAyB,EACzB,QAA2B;IAE3B,IAAI,KAAK,GAAG,IAAI,CAAC;IAEjB,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5F,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,6BAA6B;YACnC,IAAI;YACJ,OAAO,EAAE,iEAAiE;SAC3E,CAAC,CAAC;QACH,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/E,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,4BAA4B;YAClC,IAAI;YACJ,OAAO,EAAE,+DAA+D;SACzE,CAAC,CAAC;QACH,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,8BAA8B;YACpC,IAAI;YACJ,OAAO,EAAE,iEAAiE;SAC3E,CAAC,CAAC;QACH,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1F,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,4BAA4B;YAClC,IAAI;YACJ,OAAO,EAAE,6DAA6D;SACvE,CAAC,CAAC;QACH,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACvF,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,2BAA2B;YACjC,IAAI;YACJ,OAAO,EAAE,qEAAqE;SAC/E,CAAC,CAAC;QACH,KAAK,GAAG,KAAK,CAAC;IAChB,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACpC,IAAI,QAAQ,CAAC,UAAU,KAAK,qBAAqB,IAAI,QAAQ,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;YACrF,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,+BAA+B;gBACrC,IAAI;gBACJ,OAAO,EAAE,qEAAqE;aAC/E,CAAC,CAAC;YACH,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,IAAA,eAAQ,EAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,uCAAuC;gBAC7C,IAAI;gBACJ,OAAO,EAAE,gDAAgD;aAC1D,CAAC,CAAC;YACH,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QACtC,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,gCAAgC;gBACtC,IAAI;gBACJ,OAAO,EAAE,qCAAqC;aAC/C,CAAC,CAAC;YACH,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,SAAS,KAAK,UAAU,IAAI,QAAQ,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QACvE,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,iCAAiC;YACvC,IAAI;YACJ,OAAO,EAAE,8DAA8D;SACxE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,kBAAkB,CAAC,SAA+B;IAChE,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAE7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAE3C,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,EAAE,CAAC;YAC9C,cAAc,IAAI,CAAC,CAAC;YACpB,MAAM,QAAQ,GAAG,aAAa,KAAK,gCAAgC,SAAS,EAAE,CAAC;YAC/E,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;YAC/C,MAAM,cAAc,GAAG,OAAO,WAAW,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;YAEtG,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,kBAAkB,IAAI,CAAC,CAAC;YAC1B,CAAC;YAED,IAAI,CAAC,cAAc,KAAK,QAAQ,IAAI,cAAc,KAAK,UAAU,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChG,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,2BAA2B;oBACjC,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,oBAAoB,cAAc,qBAAqB;iBACjE,CAAC,CAAC;YACL,CAAC;YAED,IAAI,kBAAkB,GAAG,KAAK,CAAC;YAC/B,KAAK,IAAI,aAAa,GAAG,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC,MAAM,EAAE,aAAa,IAAI,CAAC,EAAE,CAAC;gBACpF,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;gBAC7C,MAAM,YAAY,GAAG,GAAG,QAAQ,aAAa,aAAa,GAAG,CAAC;gBAC9D,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC9E,IAAI,KAAK,EAAE,CAAC;oBACV,kBAAkB,GAAG,IAAI,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,IAAI,kBAAkB,EAAE,CAAC;gBACvB,oBAAoB,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,QAAQ;QACR,QAAQ,EAAE;YACR,cAAc;YACd,kBAAkB;YAClB,oBAAoB;SACrB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ApsResourceReference, ApsRuleBinding } from "./common";
|
|
2
|
+
import type { ApsResource } from "./resource";
|
|
3
|
+
export interface ApsApiParameter {
|
|
4
|
+
name: string;
|
|
5
|
+
location?: "path" | "query" | "header" | "cookie" | "body" | string;
|
|
6
|
+
type?: string;
|
|
7
|
+
required?: boolean;
|
|
8
|
+
description?: string;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
export interface ApsApiResource extends ApsResource {
|
|
12
|
+
type: "api";
|
|
13
|
+
name: string;
|
|
14
|
+
protocol?: "http" | "grpc" | "graphql" | "websocket" | string;
|
|
15
|
+
method?: string;
|
|
16
|
+
path?: string;
|
|
17
|
+
operationId?: string;
|
|
18
|
+
request?: Record<string, unknown>;
|
|
19
|
+
response?: Record<string, unknown>;
|
|
20
|
+
auth?: Record<string, unknown>;
|
|
21
|
+
parameters?: ApsApiParameter[];
|
|
22
|
+
errors?: Array<Record<string, unknown>>;
|
|
23
|
+
rules?: ApsRuleBinding[];
|
|
24
|
+
examples?: ApsResourceReference[];
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-resource.js","sourceRoot":"","sources":["../../../src/protocol/manifest/api-resource.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export type ApsStringMap = Record<string, string>;
|
|
2
|
+
export type ApsSeverity = "error" | "warning" | "info" | "hint" | string;
|
|
3
|
+
export type ApsScope = "resource" | "package" | "project" | "workspace" | "global" | string;
|
|
4
|
+
export interface ApsResourceReference {
|
|
5
|
+
id?: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
type?: string;
|
|
8
|
+
package?: string;
|
|
9
|
+
import?: string;
|
|
10
|
+
path?: string;
|
|
11
|
+
[key: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
export interface ApsVersionConstraint {
|
|
14
|
+
minVersion?: string;
|
|
15
|
+
maxVersion?: string;
|
|
16
|
+
range?: string;
|
|
17
|
+
since?: string;
|
|
18
|
+
until?: string;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
export interface ApsDeprecation {
|
|
22
|
+
deprecated: boolean;
|
|
23
|
+
since?: string;
|
|
24
|
+
replacement?: ApsResourceReference[];
|
|
25
|
+
reason?: string;
|
|
26
|
+
removeIn?: string;
|
|
27
|
+
migrationIds?: string[];
|
|
28
|
+
[key: string]: unknown;
|
|
29
|
+
}
|
|
30
|
+
export interface ApsRuleBinding {
|
|
31
|
+
id?: string;
|
|
32
|
+
name?: string;
|
|
33
|
+
severity?: ApsSeverity;
|
|
34
|
+
[key: string]: unknown;
|
|
35
|
+
}
|
|
36
|
+
export interface ApsInlineExample {
|
|
37
|
+
title?: string;
|
|
38
|
+
description?: string;
|
|
39
|
+
language?: string;
|
|
40
|
+
imports?: string[];
|
|
41
|
+
code?: string;
|
|
42
|
+
explanation?: string;
|
|
43
|
+
[key: string]: unknown;
|
|
44
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/protocol/manifest/common.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ApsDeprecation, ApsInlineExample, ApsResourceReference, ApsRuleBinding, ApsVersionConstraint } from "./common";
|
|
2
|
+
import type { ApsResource } from "./resource";
|
|
3
|
+
export interface ApsComponentProp {
|
|
4
|
+
name: string;
|
|
5
|
+
type?: string;
|
|
6
|
+
required?: boolean;
|
|
7
|
+
default?: unknown;
|
|
8
|
+
description?: string;
|
|
9
|
+
values?: unknown[];
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface ApsComponentVariant {
|
|
13
|
+
name: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
conditions?: string[];
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
}
|
|
18
|
+
export interface ApsComponentState {
|
|
19
|
+
name: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
transitions?: string[];
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
}
|
|
24
|
+
export interface ApsComponentResource extends ApsResource {
|
|
25
|
+
type: "component";
|
|
26
|
+
name: string;
|
|
27
|
+
package?: string;
|
|
28
|
+
import?: string;
|
|
29
|
+
importLocation?: string;
|
|
30
|
+
category?: string;
|
|
31
|
+
intendedUsage?: string | string[];
|
|
32
|
+
whenToUse?: string[];
|
|
33
|
+
whenNotToUse?: string[];
|
|
34
|
+
alternatives?: ApsResourceReference[];
|
|
35
|
+
relatedResources?: ApsResourceReference[];
|
|
36
|
+
props?: ApsComponentProp[];
|
|
37
|
+
variants?: ApsComponentVariant[];
|
|
38
|
+
states?: ApsComponentState[];
|
|
39
|
+
rules?: ApsRuleBinding[];
|
|
40
|
+
examples?: ApsResourceReference[];
|
|
41
|
+
antiExamples?: ApsInlineExample[];
|
|
42
|
+
deprecated?: boolean | ApsDeprecation;
|
|
43
|
+
migrations?: string[];
|
|
44
|
+
versionConstraints?: ApsVersionConstraint;
|
|
45
|
+
aliases?: string[];
|
|
46
|
+
tags?: string[];
|
|
47
|
+
[key: string]: unknown;
|
|
48
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-resource.js","sourceRoot":"","sources":["../../../src/protocol/manifest/component-resource.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ApsResourceReference, ApsRuleBinding } from "./common";
|
|
2
|
+
import type { ApsResource } from "./resource";
|
|
3
|
+
export interface ApsEventResource extends ApsResource {
|
|
4
|
+
type: "event";
|
|
5
|
+
name: string;
|
|
6
|
+
topic?: string;
|
|
7
|
+
publisher?: string;
|
|
8
|
+
consumers?: string[];
|
|
9
|
+
payloadSchema?: Record<string, unknown>;
|
|
10
|
+
deliverySemantics?: "at-most-once" | "at-least-once" | "exactly-once" | string;
|
|
11
|
+
ordering?: "unordered" | "partitioned" | "global" | string;
|
|
12
|
+
relatedResources?: ApsResourceReference[];
|
|
13
|
+
rules?: ApsRuleBinding[];
|
|
14
|
+
examples?: ApsResourceReference[];
|
|
15
|
+
[key: string]: unknown;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-resource.js","sourceRoot":"","sources":["../../../src/protocol/manifest/event-resource.ts"],"names":[],"mappings":""}
|