@principled/cairn 1.0.0-beta
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 +182 -0
- package/dist/analysis/analyzer.d.ts +13 -0
- package/dist/analysis/analyzer.d.ts.map +1 -0
- package/dist/analysis/analyzer.js +47 -0
- package/dist/analysis/analyzer.js.map +1 -0
- package/dist/analysis/embedding-provider.d.ts +12 -0
- package/dist/analysis/embedding-provider.d.ts.map +1 -0
- package/dist/analysis/embedding-provider.js +21 -0
- package/dist/analysis/embedding-provider.js.map +1 -0
- package/dist/analysis/index.d.ts +4 -0
- package/dist/analysis/index.d.ts.map +1 -0
- package/dist/analysis/index.js +4 -0
- package/dist/analysis/index.js.map +1 -0
- package/dist/analysis/stub-provider.d.ts +12 -0
- package/dist/analysis/stub-provider.d.ts.map +1 -0
- package/dist/analysis/stub-provider.js +30 -0
- package/dist/analysis/stub-provider.js.map +1 -0
- package/dist/catalog/catalog.d.ts +40 -0
- package/dist/catalog/catalog.d.ts.map +1 -0
- package/dist/catalog/catalog.js +118 -0
- package/dist/catalog/catalog.js.map +1 -0
- package/dist/catalog/category-merger.d.ts +25 -0
- package/dist/catalog/category-merger.d.ts.map +1 -0
- package/dist/catalog/category-merger.js +75 -0
- package/dist/catalog/category-merger.js.map +1 -0
- package/dist/catalog/index.d.ts +4 -0
- package/dist/catalog/index.d.ts.map +1 -0
- package/dist/catalog/index.js +4 -0
- package/dist/catalog/index.js.map +1 -0
- package/dist/catalog/post-merge-validation.d.ts +7 -0
- package/dist/catalog/post-merge-validation.d.ts.map +1 -0
- package/dist/catalog/post-merge-validation.js +59 -0
- package/dist/catalog/post-merge-validation.js.map +1 -0
- package/dist/cli/commands/add.d.ts +3 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +107 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/analyze.d.ts +3 -0
- package/dist/cli/commands/analyze.d.ts.map +1 -0
- package/dist/cli/commands/analyze.js +44 -0
- package/dist/cli/commands/analyze.js.map +1 -0
- package/dist/cli/commands/diff.d.ts +3 -0
- package/dist/cli/commands/diff.d.ts.map +1 -0
- package/dist/cli/commands/diff.js +69 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/edit.d.ts +3 -0
- package/dist/cli/commands/edit.d.ts.map +1 -0
- package/dist/cli/commands/edit.js +93 -0
- package/dist/cli/commands/edit.js.map +1 -0
- package/dist/cli/commands/export.d.ts +3 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +46 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +21 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/inspect.d.ts +3 -0
- package/dist/cli/commands/inspect.d.ts.map +1 -0
- package/dist/cli/commands/inspect.js +153 -0
- package/dist/cli/commands/inspect.js.map +1 -0
- package/dist/cli/commands/query.d.ts +3 -0
- package/dist/cli/commands/query.d.ts.map +1 -0
- package/dist/cli/commands/query.js +77 -0
- package/dist/cli/commands/query.js.map +1 -0
- package/dist/cli/commands/review.d.ts +3 -0
- package/dist/cli/commands/review.d.ts.map +1 -0
- package/dist/cli/commands/review.js +118 -0
- package/dist/cli/commands/review.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +3 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +125 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/helpers.d.ts +24 -0
- package/dist/cli/helpers.d.ts.map +1 -0
- package/dist/cli/helpers.js +152 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +34 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +45 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +201 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +37 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +42 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/data/data/defaults.yaml +101 -0
- package/dist/data/defaults.yaml +101 -0
- package/dist/errors.d.ts +45 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +84 -0
- package/dist/errors.js.map +1 -0
- package/dist/exporters/base.d.ts +17 -0
- package/dist/exporters/base.d.ts.map +1 -0
- package/dist/exporters/base.js +7 -0
- package/dist/exporters/base.js.map +1 -0
- package/dist/exporters/csv-exporter.d.ts +13 -0
- package/dist/exporters/csv-exporter.d.ts.map +1 -0
- package/dist/exporters/csv-exporter.js +73 -0
- package/dist/exporters/csv-exporter.js.map +1 -0
- package/dist/exporters/dot-exporter.d.ts +12 -0
- package/dist/exporters/dot-exporter.d.ts.map +1 -0
- package/dist/exporters/dot-exporter.js +72 -0
- package/dist/exporters/dot-exporter.js.map +1 -0
- package/dist/exporters/index.d.ts +8 -0
- package/dist/exporters/index.d.ts.map +1 -0
- package/dist/exporters/index.js +8 -0
- package/dist/exporters/index.js.map +1 -0
- package/dist/exporters/json-exporter.d.ts +14 -0
- package/dist/exporters/json-exporter.d.ts.map +1 -0
- package/dist/exporters/json-exporter.js +41 -0
- package/dist/exporters/json-exporter.js.map +1 -0
- package/dist/exporters/markdown-exporter.d.ts +14 -0
- package/dist/exporters/markdown-exporter.d.ts.map +1 -0
- package/dist/exporters/markdown-exporter.js +65 -0
- package/dist/exporters/markdown-exporter.js.map +1 -0
- package/dist/exporters/registry.d.ts +4 -0
- package/dist/exporters/registry.d.ts.map +1 -0
- package/dist/exporters/registry.js +20 -0
- package/dist/exporters/registry.js.map +1 -0
- package/dist/exporters/sqlite-exporter.d.ts +10 -0
- package/dist/exporters/sqlite-exporter.d.ts.map +1 -0
- package/dist/exporters/sqlite-exporter.js +20 -0
- package/dist/exporters/sqlite-exporter.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/inheritance/alias-resolver.d.ts +21 -0
- package/dist/inheritance/alias-resolver.d.ts.map +1 -0
- package/dist/inheritance/alias-resolver.js +40 -0
- package/dist/inheritance/alias-resolver.js.map +1 -0
- package/dist/inheritance/index.d.ts +9 -0
- package/dist/inheritance/index.d.ts.map +1 -0
- package/dist/inheritance/index.js +5 -0
- package/dist/inheritance/index.js.map +1 -0
- package/dist/inheritance/inheritance-resolver.d.ts +37 -0
- package/dist/inheritance/inheritance-resolver.d.ts.map +1 -0
- package/dist/inheritance/inheritance-resolver.js +164 -0
- package/dist/inheritance/inheritance-resolver.js.map +1 -0
- package/dist/inheritance/reference-parser.d.ts +27 -0
- package/dist/inheritance/reference-parser.d.ts.map +1 -0
- package/dist/inheritance/reference-parser.js +74 -0
- package/dist/inheritance/reference-parser.js.map +1 -0
- package/dist/inheritance/source-resolver.d.ts +29 -0
- package/dist/inheritance/source-resolver.d.ts.map +1 -0
- package/dist/inheritance/source-resolver.js +87 -0
- package/dist/inheritance/source-resolver.js.map +1 -0
- package/dist/model/category-registry.d.ts +48 -0
- package/dist/model/category-registry.d.ts.map +1 -0
- package/dist/model/category-registry.js +83 -0
- package/dist/model/category-registry.js.map +1 -0
- package/dist/model/document-meta.d.ts +38 -0
- package/dist/model/document-meta.d.ts.map +1 -0
- package/dist/model/document-meta.js +62 -0
- package/dist/model/document-meta.js.map +1 -0
- package/dist/model/document-parser.d.ts +17 -0
- package/dist/model/document-parser.d.ts.map +1 -0
- package/dist/model/document-parser.js +66 -0
- package/dist/model/document-parser.js.map +1 -0
- package/dist/model/document.d.ts +27 -0
- package/dist/model/document.d.ts.map +1 -0
- package/dist/model/document.js +42 -0
- package/dist/model/document.js.map +1 -0
- package/dist/model/element.d.ts +51 -0
- package/dist/model/element.d.ts.map +1 -0
- package/dist/model/element.js +78 -0
- package/dist/model/element.js.map +1 -0
- package/dist/model/graph.d.ts +42 -0
- package/dist/model/graph.d.ts.map +1 -0
- package/dist/model/graph.js +177 -0
- package/dist/model/graph.js.map +1 -0
- package/dist/model/index.d.ts +8 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +7 -0
- package/dist/model/index.js.map +1 -0
- package/dist/parsers/base.d.ts +28 -0
- package/dist/parsers/base.d.ts.map +1 -0
- package/dist/parsers/base.js +19 -0
- package/dist/parsers/base.js.map +1 -0
- package/dist/parsers/index.d.ts +6 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +6 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/markdown-parser.d.ts +12 -0
- package/dist/parsers/markdown-parser.d.ts.map +1 -0
- package/dist/parsers/markdown-parser.js +37 -0
- package/dist/parsers/markdown-parser.js.map +1 -0
- package/dist/parsers/registry.d.ts +11 -0
- package/dist/parsers/registry.d.ts.map +1 -0
- package/dist/parsers/registry.js +21 -0
- package/dist/parsers/registry.js.map +1 -0
- package/dist/parsers/typescript-parser.d.ts +12 -0
- package/dist/parsers/typescript-parser.d.ts.map +1 -0
- package/dist/parsers/typescript-parser.js +74 -0
- package/dist/parsers/typescript-parser.js.map +1 -0
- package/dist/parsers/yaml-parser.d.ts +12 -0
- package/dist/parsers/yaml-parser.d.ts.map +1 -0
- package/dist/parsers/yaml-parser.js +30 -0
- package/dist/parsers/yaml-parser.js.map +1 -0
- package/dist/provenance/index.d.ts +5 -0
- package/dist/provenance/index.d.ts.map +1 -0
- package/dist/provenance/index.js +4 -0
- package/dist/provenance/index.js.map +1 -0
- package/dist/provenance/review-hash.d.ts +11 -0
- package/dist/provenance/review-hash.d.ts.map +1 -0
- package/dist/provenance/review-hash.js +18 -0
- package/dist/provenance/review-hash.js.map +1 -0
- package/dist/provenance/schemas.d.ts +36 -0
- package/dist/provenance/schemas.d.ts.map +1 -0
- package/dist/provenance/schemas.js +26 -0
- package/dist/provenance/schemas.js.map +1 -0
- package/dist/provenance/staleness.d.ts +12 -0
- package/dist/provenance/staleness.d.ts.map +1 -0
- package/dist/provenance/staleness.js +46 -0
- package/dist/provenance/staleness.js.map +1 -0
- package/dist/refs/git-diff-tracer.d.ts +35 -0
- package/dist/refs/git-diff-tracer.d.ts.map +1 -0
- package/dist/refs/git-diff-tracer.js +143 -0
- package/dist/refs/git-diff-tracer.js.map +1 -0
- package/dist/schema/build-schema.d.ts +15 -0
- package/dist/schema/build-schema.d.ts.map +1 -0
- package/dist/schema/build-schema.js +83 -0
- package/dist/schema/build-schema.js.map +1 -0
- package/dist/schema/category-definition.d.ts +41 -0
- package/dist/schema/category-definition.d.ts.map +1 -0
- package/dist/schema/category-definition.js +22 -0
- package/dist/schema/category-definition.js.map +1 -0
- package/dist/schema/combined-schema.d.ts +17 -0
- package/dist/schema/combined-schema.d.ts.map +1 -0
- package/dist/schema/combined-schema.js +23 -0
- package/dist/schema/combined-schema.js.map +1 -0
- package/dist/schema/datetime.d.ts +11 -0
- package/dist/schema/datetime.d.ts.map +1 -0
- package/dist/schema/datetime.js +81 -0
- package/dist/schema/datetime.js.map +1 -0
- package/dist/schema/defaults-loader.d.ts +21 -0
- package/dist/schema/defaults-loader.d.ts.map +1 -0
- package/dist/schema/defaults-loader.js +55 -0
- package/dist/schema/defaults-loader.js.map +1 -0
- package/dist/schema/field-schema.d.ts +23 -0
- package/dist/schema/field-schema.d.ts.map +1 -0
- package/dist/schema/field-schema.js +18 -0
- package/dist/schema/field-schema.js.map +1 -0
- package/dist/schema/index.d.ts +17 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +17 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/reserved-fields.d.ts +32 -0
- package/dist/schema/reserved-fields.d.ts.map +1 -0
- package/dist/schema/reserved-fields.js +42 -0
- package/dist/schema/reserved-fields.js.map +1 -0
- package/dist/schema/types.d.ts +7 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +9 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +16 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/project-root.d.ts +14 -0
- package/dist/utils/project-root.d.ts.map +1 -0
- package/dist/utils/project-root.js +48 -0
- package/dist/utils/project-root.js.map +1 -0
- package/dist/validation/diagnostic.d.ts +23 -0
- package/dist/validation/diagnostic.d.ts.map +1 -0
- package/dist/validation/diagnostic.js +5 -0
- package/dist/validation/diagnostic.js.map +1 -0
- package/dist/validation/index.d.ts +6 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +4 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/passes/coverage-pass.d.ts +10 -0
- package/dist/validation/passes/coverage-pass.d.ts.map +1 -0
- package/dist/validation/passes/coverage-pass.js +99 -0
- package/dist/validation/passes/coverage-pass.js.map +1 -0
- package/dist/validation/passes/index.d.ts +6 -0
- package/dist/validation/passes/index.d.ts.map +1 -0
- package/dist/validation/passes/index.js +19 -0
- package/dist/validation/passes/index.js.map +1 -0
- package/dist/validation/passes/schema-pass.d.ts +12 -0
- package/dist/validation/passes/schema-pass.d.ts.map +1 -0
- package/dist/validation/passes/schema-pass.js +38 -0
- package/dist/validation/passes/schema-pass.js.map +1 -0
- package/dist/validation/passes/semantic-pass.d.ts +8 -0
- package/dist/validation/passes/semantic-pass.d.ts.map +1 -0
- package/dist/validation/passes/semantic-pass.js +126 -0
- package/dist/validation/passes/semantic-pass.js.map +1 -0
- package/dist/validation/passes/structural-pass.d.ts +8 -0
- package/dist/validation/passes/structural-pass.d.ts.map +1 -0
- package/dist/validation/passes/structural-pass.js +150 -0
- package/dist/validation/passes/structural-pass.js.map +1 -0
- package/dist/validation/passes/traceability-pass.d.ts +9 -0
- package/dist/validation/passes/traceability-pass.d.ts.map +1 -0
- package/dist/validation/passes/traceability-pass.js +87 -0
- package/dist/validation/passes/traceability-pass.js.map +1 -0
- package/dist/validation/passes/user-rules-pass.d.ts +9 -0
- package/dist/validation/passes/user-rules-pass.d.ts.map +1 -0
- package/dist/validation/passes/user-rules-pass.js +72 -0
- package/dist/validation/passes/user-rules-pass.js.map +1 -0
- package/dist/validation/runner.d.ts +17 -0
- package/dist/validation/runner.d.ts.map +1 -0
- package/dist/validation/runner.js +33 -0
- package/dist/validation/runner.js.map +1 -0
- package/package.json +43 -0
- package/src/data/defaults.yaml +101 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference-parser.js","sourceRoot":"","sources":["../../src/inheritance/reference-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface for resolving source identifiers to local filesystem paths.
|
|
3
|
+
*/
|
|
4
|
+
export interface SourceResolver {
|
|
5
|
+
resolve(source: string): string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Resolves local filesystem source paths (DEC-1.7).
|
|
9
|
+
* Supports relative and absolute paths with dual lookup (DEC-1.2, DEC-1.10):
|
|
10
|
+
* 1. Check <path>/gvp/ (standalone GVP repo)
|
|
11
|
+
* 2. Check <path>/.gvp/library/ (embedded in a project)
|
|
12
|
+
*/
|
|
13
|
+
export declare class LocalSourceResolver implements SourceResolver {
|
|
14
|
+
private readonly baseDir;
|
|
15
|
+
constructor(baseDir: string);
|
|
16
|
+
resolve(source: string): string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Stub resolver for git-based sources (DEC-1.9).
|
|
20
|
+
* Validates commit-ish is present. Full git fetching deferred for alpha.
|
|
21
|
+
*/
|
|
22
|
+
export declare class GitSourceResolver implements SourceResolver {
|
|
23
|
+
resolve(source: string): string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Factory that creates the appropriate resolver based on source format.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createSourceResolver(libraryDir: string): SourceResolver;
|
|
29
|
+
//# sourceMappingURL=source-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-resolver.d.ts","sourceRoot":"","sources":["../../src/inheritance/source-resolver.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAE5C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAmChC;AAED;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IACtD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAiChC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAYvE"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { InheritanceError } from '../errors.js';
|
|
4
|
+
/**
|
|
5
|
+
* Resolves local filesystem source paths (DEC-1.7).
|
|
6
|
+
* Supports relative and absolute paths with dual lookup (DEC-1.2, DEC-1.10):
|
|
7
|
+
* 1. Check <path>/gvp/ (standalone GVP repo)
|
|
8
|
+
* 2. Check <path>/.gvp/library/ (embedded in a project)
|
|
9
|
+
*/
|
|
10
|
+
export class LocalSourceResolver {
|
|
11
|
+
baseDir;
|
|
12
|
+
constructor(baseDir) {
|
|
13
|
+
this.baseDir = baseDir;
|
|
14
|
+
}
|
|
15
|
+
resolve(source) {
|
|
16
|
+
// Skip non-local sources
|
|
17
|
+
if (source.startsWith('@') && source !== '@local') {
|
|
18
|
+
throw new InheritanceError(`LocalSourceResolver cannot resolve remote source '${source}'. Use GitSourceResolver.`);
|
|
19
|
+
}
|
|
20
|
+
const resolved = source === '@local'
|
|
21
|
+
? this.baseDir
|
|
22
|
+
: path.isAbsolute(source)
|
|
23
|
+
? source
|
|
24
|
+
: path.resolve(this.baseDir, source);
|
|
25
|
+
// Dual lookup (DEC-1.2, DEC-1.10): gvp/ wins over .gvp/library/
|
|
26
|
+
const gvpDir = path.join(resolved, 'gvp');
|
|
27
|
+
if (fs.existsSync(gvpDir) && fs.statSync(gvpDir).isDirectory()) {
|
|
28
|
+
return gvpDir;
|
|
29
|
+
}
|
|
30
|
+
const dotGvpLibrary = path.join(resolved, '.gvp', 'library');
|
|
31
|
+
if (fs.existsSync(dotGvpLibrary) && fs.statSync(dotGvpLibrary).isDirectory()) {
|
|
32
|
+
return dotGvpLibrary;
|
|
33
|
+
}
|
|
34
|
+
// If path itself looks like a library directory (contains YAML files)
|
|
35
|
+
if (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) {
|
|
36
|
+
return resolved;
|
|
37
|
+
}
|
|
38
|
+
throw new InheritanceError(`Cannot resolve source '${source}': no library directory found at '${resolved}'. ` +
|
|
39
|
+
`Checked: ${gvpDir}, ${dotGvpLibrary}, ${resolved}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Stub resolver for git-based sources (DEC-1.9).
|
|
44
|
+
* Validates commit-ish is present. Full git fetching deferred for alpha.
|
|
45
|
+
*/
|
|
46
|
+
export class GitSourceResolver {
|
|
47
|
+
resolve(source) {
|
|
48
|
+
// Parse @github:user/repo@commitish or @azure:org/project@commitish
|
|
49
|
+
const match = source.match(/^@(\w+):(.+?)@(.+)$/);
|
|
50
|
+
if (!match) {
|
|
51
|
+
// Check if it's a git source without commit-ish
|
|
52
|
+
const noVersion = source.match(/^@(\w+):(.+)$/);
|
|
53
|
+
if (noVersion) {
|
|
54
|
+
throw new InheritanceError(`Git source '${source}' requires an immutable commit-ish (tag or SHA). ` +
|
|
55
|
+
`Use '${source}@v1.0.0' or '${source}@abc1234'. Branches are not allowed (DEC-1.9).`);
|
|
56
|
+
}
|
|
57
|
+
throw new InheritanceError(`Invalid git source format: '${source}'`);
|
|
58
|
+
}
|
|
59
|
+
const [, provider, repoPath, commitish] = match;
|
|
60
|
+
// Reject branch-like references (no slashes, starts with letter, no dots)
|
|
61
|
+
// This is a heuristic — exact validation would require git
|
|
62
|
+
// For alpha, just ensure something is there
|
|
63
|
+
if (!commitish || commitish.length === 0) {
|
|
64
|
+
throw new InheritanceError(`Git source '${source}' requires a commit-ish after '@'`);
|
|
65
|
+
}
|
|
66
|
+
// For alpha: throw not-implemented
|
|
67
|
+
throw new InheritanceError(`Git source resolution not yet implemented. ` +
|
|
68
|
+
`Source: @${provider}:${repoPath}@${commitish}. ` +
|
|
69
|
+
`For now, use local filesystem paths or clone the repo manually.`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Factory that creates the appropriate resolver based on source format.
|
|
74
|
+
*/
|
|
75
|
+
export function createSourceResolver(libraryDir) {
|
|
76
|
+
const local = new LocalSourceResolver(libraryDir);
|
|
77
|
+
const git = new GitSourceResolver();
|
|
78
|
+
return {
|
|
79
|
+
resolve(source) {
|
|
80
|
+
if (source.startsWith('@') && source !== '@local') {
|
|
81
|
+
return git.resolve(source);
|
|
82
|
+
}
|
|
83
|
+
return local.resolve(source);
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=source-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-resolver.js","sourceRoot":"","sources":["../../src/inheritance/source-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { CategoryDefinition, AllFieldSchemas, DefaultsFile } from '../schema/category-definition.js';
|
|
3
|
+
import type { FieldSchemaEntry } from '../schema/field-schema.js';
|
|
4
|
+
/**
|
|
5
|
+
* Registry of category definitions with lookup and schema caching.
|
|
6
|
+
* Built from defaults + optional user-defined categories.
|
|
7
|
+
*/
|
|
8
|
+
export declare class CategoryRegistry {
|
|
9
|
+
private readonly _categories;
|
|
10
|
+
private readonly _allFieldSchemas;
|
|
11
|
+
private readonly _schemaCache;
|
|
12
|
+
constructor(categories: Record<string, CategoryDefinition>, allFieldSchemas?: Record<string, FieldSchemaEntry>);
|
|
13
|
+
/** Create registry from a DefaultsFile (loaded defaults.yaml) */
|
|
14
|
+
static fromDefaults(defaults: DefaultsFile): CategoryRegistry;
|
|
15
|
+
/** Get category definition by name */
|
|
16
|
+
getByName(name: string): CategoryDefinition | undefined;
|
|
17
|
+
/** Get category by yaml_key */
|
|
18
|
+
getByYamlKey(yamlKey: string): {
|
|
19
|
+
name: string;
|
|
20
|
+
def: CategoryDefinition;
|
|
21
|
+
} | undefined;
|
|
22
|
+
/** Get category by id_prefix */
|
|
23
|
+
getByIdPrefix(prefix: string): {
|
|
24
|
+
name: string;
|
|
25
|
+
def: CategoryDefinition;
|
|
26
|
+
} | undefined;
|
|
27
|
+
/** Get all category names */
|
|
28
|
+
get categoryNames(): string[];
|
|
29
|
+
/** Get all yaml_keys (used by document parser to identify element sections) */
|
|
30
|
+
get allYamlKeys(): string[];
|
|
31
|
+
/** Get all categories as a plain record */
|
|
32
|
+
get categories(): Record<string, CategoryDefinition>;
|
|
33
|
+
/** Get the _all field schemas */
|
|
34
|
+
get allFieldSchemas(): Record<string, FieldSchemaEntry>;
|
|
35
|
+
/**
|
|
36
|
+
* Get the element Zod schema for a category (cached).
|
|
37
|
+
* Merges _all + per-category field_schemas, builds combined reserved+dynamic schema.
|
|
38
|
+
*/
|
|
39
|
+
getElementSchema(categoryName: string, options?: {
|
|
40
|
+
defaultTimezone?: string;
|
|
41
|
+
}): z.ZodObject<Record<string, z.ZodType>>;
|
|
42
|
+
/**
|
|
43
|
+
* Create a new registry with additional user categories merged on top.
|
|
44
|
+
* Per-category wins on collision (DEC-2.8, DEC-3.9).
|
|
45
|
+
*/
|
|
46
|
+
merge(userCategories: Record<string, CategoryDefinition>, userAll?: AllFieldSchemas): CategoryRegistry;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=category-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-registry.d.ts","sourceRoot":"","sources":["../../src/model/category-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAC1G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGlE;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmC;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkE;gBAG7F,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAC9C,eAAe,GAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAM;IAMxD,iEAAiE;IACjE,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,gBAAgB;IAO7D,sCAAsC;IACtC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAIvD,+BAA+B;IAC/B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,kBAAkB,CAAA;KAAE,GAAG,SAAS;IAOpF,gCAAgC;IAChC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,kBAAkB,CAAA;KAAE,GAAG,SAAS;IAOpF,6BAA6B;IAC7B,IAAI,aAAa,IAAI,MAAM,EAAE,CAE5B;IAED,+EAA+E;IAC/E,IAAI,WAAW,IAAI,MAAM,EAAE,CAE1B;IAED,2CAA2C;IAC3C,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAEnD;IAED,iCAAiC;IACjC,IAAI,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAEtD;IAED;;;OAGG;IACH,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAetH;;;OAGG;IACH,KAAK,CACH,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAClD,OAAO,CAAC,EAAE,eAAe,GACxB,gBAAgB;CAOpB"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { buildCategoryElementSchema } from '../schema/defaults-loader.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry of category definitions with lookup and schema caching.
|
|
4
|
+
* Built from defaults + optional user-defined categories.
|
|
5
|
+
*/
|
|
6
|
+
export class CategoryRegistry {
|
|
7
|
+
_categories;
|
|
8
|
+
_allFieldSchemas;
|
|
9
|
+
_schemaCache = new Map();
|
|
10
|
+
constructor(categories, allFieldSchemas = {}) {
|
|
11
|
+
this._categories = new Map(Object.entries(categories));
|
|
12
|
+
this._allFieldSchemas = allFieldSchemas;
|
|
13
|
+
}
|
|
14
|
+
/** Create registry from a DefaultsFile (loaded defaults.yaml) */
|
|
15
|
+
static fromDefaults(defaults) {
|
|
16
|
+
return new CategoryRegistry(defaults.categories, defaults._all?.field_schemas ?? {});
|
|
17
|
+
}
|
|
18
|
+
/** Get category definition by name */
|
|
19
|
+
getByName(name) {
|
|
20
|
+
return this._categories.get(name);
|
|
21
|
+
}
|
|
22
|
+
/** Get category by yaml_key */
|
|
23
|
+
getByYamlKey(yamlKey) {
|
|
24
|
+
for (const [name, def] of this._categories) {
|
|
25
|
+
if (def.yaml_key === yamlKey)
|
|
26
|
+
return { name, def };
|
|
27
|
+
}
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
/** Get category by id_prefix */
|
|
31
|
+
getByIdPrefix(prefix) {
|
|
32
|
+
for (const [name, def] of this._categories) {
|
|
33
|
+
if (def.id_prefix === prefix)
|
|
34
|
+
return { name, def };
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
/** Get all category names */
|
|
39
|
+
get categoryNames() {
|
|
40
|
+
return [...this._categories.keys()];
|
|
41
|
+
}
|
|
42
|
+
/** Get all yaml_keys (used by document parser to identify element sections) */
|
|
43
|
+
get allYamlKeys() {
|
|
44
|
+
return [...this._categories.values()].map(c => c.yaml_key);
|
|
45
|
+
}
|
|
46
|
+
/** Get all categories as a plain record */
|
|
47
|
+
get categories() {
|
|
48
|
+
return Object.fromEntries(this._categories);
|
|
49
|
+
}
|
|
50
|
+
/** Get the _all field schemas */
|
|
51
|
+
get allFieldSchemas() {
|
|
52
|
+
return this._allFieldSchemas;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get the element Zod schema for a category (cached).
|
|
56
|
+
* Merges _all + per-category field_schemas, builds combined reserved+dynamic schema.
|
|
57
|
+
*/
|
|
58
|
+
getElementSchema(categoryName, options) {
|
|
59
|
+
const cacheKey = `${categoryName}:${options?.defaultTimezone ?? ''}`;
|
|
60
|
+
const cached = this._schemaCache.get(cacheKey);
|
|
61
|
+
if (cached)
|
|
62
|
+
return cached;
|
|
63
|
+
const def = this._categories.get(categoryName);
|
|
64
|
+
if (!def) {
|
|
65
|
+
throw new Error(`Unknown category: '${categoryName}'`);
|
|
66
|
+
}
|
|
67
|
+
const schema = buildCategoryElementSchema(def, this._allFieldSchemas, options);
|
|
68
|
+
this._schemaCache.set(cacheKey, schema);
|
|
69
|
+
return schema;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create a new registry with additional user categories merged on top.
|
|
73
|
+
* Per-category wins on collision (DEC-2.8, DEC-3.9).
|
|
74
|
+
*/
|
|
75
|
+
merge(userCategories, userAll) {
|
|
76
|
+
const mergedCategories = { ...this.categories, ...userCategories };
|
|
77
|
+
const mergedAll = userAll?.field_schemas
|
|
78
|
+
? { ...this._allFieldSchemas, ...userAll.field_schemas }
|
|
79
|
+
: this._allFieldSchemas;
|
|
80
|
+
return new CategoryRegistry(mergedCategories, mergedAll);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=category-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"category-registry.js","sourceRoot":"","sources":["../../src/model/category-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** Config override entry (DEC-2.4, DEC-2.13) */
|
|
3
|
+
export declare const configOverrideEntrySchema: z.ZodObject<{
|
|
4
|
+
mode: z.ZodEnum<{
|
|
5
|
+
replace: "replace";
|
|
6
|
+
additive: "additive";
|
|
7
|
+
}>;
|
|
8
|
+
value: z.ZodUnknown;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
/** Document meta schema */
|
|
11
|
+
export declare const documentMetaSchema: z.ZodObject<{
|
|
12
|
+
name: z.ZodOptional<z.ZodString>;
|
|
13
|
+
id_prefix: z.ZodOptional<z.ZodString>;
|
|
14
|
+
inherits: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodString, z.ZodTransform<string[], string>>, z.ZodArray<z.ZodString>, z.ZodArray<z.ZodObject<{
|
|
15
|
+
source: z.ZodString;
|
|
16
|
+
as: z.ZodOptional<z.ZodString>;
|
|
17
|
+
}, z.core.$strip>>, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
18
|
+
source: z.ZodString;
|
|
19
|
+
as: z.ZodOptional<z.ZodString>;
|
|
20
|
+
}, z.core.$strip>]>>]>>;
|
|
21
|
+
scope: z.ZodOptional<z.ZodString>;
|
|
22
|
+
defaults: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
23
|
+
definitions: z.ZodOptional<z.ZodObject<{
|
|
24
|
+
tags: z.ZodOptional<z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodTransform<Record<string, {
|
|
25
|
+
description: string;
|
|
26
|
+
}>, Record<string, unknown>>>>;
|
|
27
|
+
categories: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<import("../schema/category-definition.js").CategoryDefinition, unknown, z.core.$ZodTypeInternals<import("../schema/category-definition.js").CategoryDefinition, unknown>>>>;
|
|
28
|
+
}, z.core.$strip>>;
|
|
29
|
+
config_overrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
30
|
+
mode: z.ZodEnum<{
|
|
31
|
+
replace: "replace";
|
|
32
|
+
additive: "additive";
|
|
33
|
+
}>;
|
|
34
|
+
value: z.ZodUnknown;
|
|
35
|
+
}, z.core.$strip>>>;
|
|
36
|
+
}, z.core.$loose>;
|
|
37
|
+
export type DocumentMeta = z.infer<typeof documentMetaSchema>;
|
|
38
|
+
//# sourceMappingURL=document-meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-meta.d.ts","sourceRoot":"","sources":["../../src/model/document-meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsCxB,gDAAgD;AAChD,eAAO,MAAM,yBAAyB;;;;;;iBAGpC,CAAC;AAEH,2BAA2B;AAC3B,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;yBA9Ba,MAAM;;;;;;;;;;;iBAiDlC,CAAC;AAEjB,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { categoryDefinitionSchema } from '../schema/category-definition.js';
|
|
3
|
+
/** Single tag definition */
|
|
4
|
+
const tagEntrySchema = z.object({
|
|
5
|
+
description: z.string(),
|
|
6
|
+
});
|
|
7
|
+
/**
|
|
8
|
+
* Tag definitions: accepts both flat format (DEC-2.14) and nested v0 format.
|
|
9
|
+
* Flat: { framework: { description: ... }, tooling: { description: ... } }
|
|
10
|
+
* Nested: { domains: { framework: { description: ... } }, concerns: { ... } }
|
|
11
|
+
* Nested format is flattened during parsing.
|
|
12
|
+
*/
|
|
13
|
+
const tagDefinitionSchema = z.record(z.string(), z.unknown()).transform((raw) => {
|
|
14
|
+
const flat = {};
|
|
15
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
16
|
+
if (value && typeof value === 'object' && 'description' in value) {
|
|
17
|
+
// Flat format: { tagname: { description: "..." } }
|
|
18
|
+
flat[key] = value;
|
|
19
|
+
}
|
|
20
|
+
else if (value && typeof value === 'object') {
|
|
21
|
+
// Nested format: { groupname: { tagname: { description: "..." }, ... } }
|
|
22
|
+
for (const [innerKey, innerValue] of Object.entries(value)) {
|
|
23
|
+
if (innerValue && typeof innerValue === 'object' && 'description' in innerValue) {
|
|
24
|
+
flat[innerKey] = innerValue;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return flat;
|
|
30
|
+
});
|
|
31
|
+
/** Document definitions block */
|
|
32
|
+
const definitionsSchema = z.object({
|
|
33
|
+
tags: tagDefinitionSchema.optional(),
|
|
34
|
+
categories: z.record(z.string(), categoryDefinitionSchema).optional(),
|
|
35
|
+
}).optional();
|
|
36
|
+
/** Config override entry (DEC-2.4, DEC-2.13) */
|
|
37
|
+
export const configOverrideEntrySchema = z.object({
|
|
38
|
+
mode: z.enum(['replace', 'additive']),
|
|
39
|
+
value: z.unknown(),
|
|
40
|
+
});
|
|
41
|
+
/** Document meta schema */
|
|
42
|
+
export const documentMetaSchema = z.object({
|
|
43
|
+
name: z.string().optional(),
|
|
44
|
+
id_prefix: z.string().optional(), // DOM-2: per-document id prefix
|
|
45
|
+
inherits: z.union([
|
|
46
|
+
z.string().transform(s => [s]), // bare string -> array
|
|
47
|
+
z.array(z.string()),
|
|
48
|
+
z.array(z.object({
|
|
49
|
+
source: z.string(),
|
|
50
|
+
as: z.string().optional(),
|
|
51
|
+
})),
|
|
52
|
+
z.array(z.union([
|
|
53
|
+
z.string(),
|
|
54
|
+
z.object({ source: z.string(), as: z.string().optional() }),
|
|
55
|
+
])),
|
|
56
|
+
]).optional(),
|
|
57
|
+
scope: z.string().optional(),
|
|
58
|
+
defaults: z.record(z.string(), z.unknown()).optional(),
|
|
59
|
+
definitions: definitionsSchema,
|
|
60
|
+
config_overrides: z.record(z.string(), configOverrideEntrySchema).optional(), // DEC-2.4, DEC-2.13
|
|
61
|
+
}).passthrough();
|
|
62
|
+
//# sourceMappingURL=document-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-meta.js","sourceRoot":"","sources":["../../src/model/document-meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Document } from './document.js';
|
|
2
|
+
import type { CategoryRegistry } from './category-registry.js';
|
|
3
|
+
/**
|
|
4
|
+
* Parse a GVP YAML document string into a Document object.
|
|
5
|
+
*
|
|
6
|
+
* Steps:
|
|
7
|
+
* 1. Parse YAML
|
|
8
|
+
* 2. Extract and validate meta block
|
|
9
|
+
* 3. For each recognized yaml_key, parse elements against category schema
|
|
10
|
+
* 4. Apply document-level defaults (DEC-2.5: per-document only, no cascade)
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseDocument(yamlContent: string, filePath: string, documentPath: string, source: string, registry: CategoryRegistry): Document;
|
|
13
|
+
/**
|
|
14
|
+
* Load and parse a GVP YAML document from a file path.
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadDocumentFromFile(filePath: string, documentPath: string, source: string, registry: CategoryRegistry): Document;
|
|
17
|
+
//# sourceMappingURL=document-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-parser.d.ts","sourceRoot":"","sources":["../../src/model/document-parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,GACzB,QAAQ,CAqDV;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,GACzB,QAAQ,CAIV"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as yaml from 'js-yaml';
|
|
2
|
+
import { documentMetaSchema } from './document-meta.js';
|
|
3
|
+
import { Document } from './document.js';
|
|
4
|
+
import { Element } from './element.js';
|
|
5
|
+
import { ValidationError } from '../errors.js';
|
|
6
|
+
/**
|
|
7
|
+
* Parse a GVP YAML document string into a Document object.
|
|
8
|
+
*
|
|
9
|
+
* Steps:
|
|
10
|
+
* 1. Parse YAML
|
|
11
|
+
* 2. Extract and validate meta block
|
|
12
|
+
* 3. For each recognized yaml_key, parse elements against category schema
|
|
13
|
+
* 4. Apply document-level defaults (DEC-2.5: per-document only, no cascade)
|
|
14
|
+
*/
|
|
15
|
+
export function parseDocument(yamlContent, filePath, documentPath, source, registry) {
|
|
16
|
+
const raw = yaml.load(yamlContent);
|
|
17
|
+
if (!raw || typeof raw !== 'object') {
|
|
18
|
+
throw new ValidationError(`Document at ${filePath} must be a YAML mapping`);
|
|
19
|
+
}
|
|
20
|
+
const data = raw;
|
|
21
|
+
// Extract and validate meta
|
|
22
|
+
const rawMeta = data.meta ?? {};
|
|
23
|
+
const meta = documentMetaSchema.parse(rawMeta);
|
|
24
|
+
// Parse elements by category
|
|
25
|
+
const elementsByCategory = new Map();
|
|
26
|
+
for (const yamlKey of registry.allYamlKeys) {
|
|
27
|
+
const rawElements = data[yamlKey];
|
|
28
|
+
if (!rawElements || !Array.isArray(rawElements))
|
|
29
|
+
continue;
|
|
30
|
+
const categoryLookup = registry.getByYamlKey(yamlKey);
|
|
31
|
+
if (!categoryLookup)
|
|
32
|
+
continue;
|
|
33
|
+
const { name: categoryName } = categoryLookup;
|
|
34
|
+
const schema = registry.getElementSchema(categoryName);
|
|
35
|
+
const elements = [];
|
|
36
|
+
for (let i = 0; i < rawElements.length; i++) {
|
|
37
|
+
const rawElement = rawElements[i];
|
|
38
|
+
if (!rawElement || typeof rawElement !== 'object') {
|
|
39
|
+
throw new ValidationError(`Element at ${filePath}:${yamlKey}[${i}] must be a YAML mapping`);
|
|
40
|
+
}
|
|
41
|
+
// Apply document-level defaults (DEC-2.5: element fields win)
|
|
42
|
+
const withDefaults = meta.defaults
|
|
43
|
+
? { ...meta.defaults, ...rawElement }
|
|
44
|
+
: rawElement;
|
|
45
|
+
// Validate against category schema
|
|
46
|
+
try {
|
|
47
|
+
const validated = schema.parse(withDefaults);
|
|
48
|
+
elements.push(new Element(validated, categoryName, source, documentPath));
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
throw new ValidationError(`Invalid element at ${filePath}:${yamlKey}[${i}] (${rawElement.id ?? 'unknown'}): ${e.message}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
elementsByCategory.set(categoryName, elements);
|
|
55
|
+
}
|
|
56
|
+
return new Document(meta, elementsByCategory, filePath, documentPath, source);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Load and parse a GVP YAML document from a file path.
|
|
60
|
+
*/
|
|
61
|
+
export function loadDocumentFromFile(filePath, documentPath, source, registry) {
|
|
62
|
+
const fs = require('fs');
|
|
63
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
64
|
+
return parseDocument(content, filePath, documentPath, source, registry);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=document-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-parser.js","sourceRoot":"","sources":["../../src/model/document-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { DocumentMeta } from './document-meta.js';
|
|
2
|
+
import type { Element } from './element.js';
|
|
3
|
+
import type { CategoryDefinition } from '../schema/category-definition.js';
|
|
4
|
+
/**
|
|
5
|
+
* A loaded GVP YAML document.
|
|
6
|
+
*/
|
|
7
|
+
export declare class Document {
|
|
8
|
+
readonly meta: DocumentMeta;
|
|
9
|
+
readonly filePath: string;
|
|
10
|
+
readonly documentPath: string;
|
|
11
|
+
readonly source: string;
|
|
12
|
+
private readonly _elementsByCategory;
|
|
13
|
+
constructor(meta: DocumentMeta, elementsByCategory: Map<string, Element[]>, filePath: string, documentPath: string, source: string);
|
|
14
|
+
/** Get elements for a specific category */
|
|
15
|
+
getElementsByCategory(categoryName: string): Element[];
|
|
16
|
+
/** Get all elements across all categories */
|
|
17
|
+
getAllElements(): Element[];
|
|
18
|
+
/** Get tag definitions from meta.definitions.tags */
|
|
19
|
+
getTagDefinitions(): Record<string, {
|
|
20
|
+
description: string;
|
|
21
|
+
}>;
|
|
22
|
+
/** Get user-defined category definitions from meta.definitions.categories */
|
|
23
|
+
getCategoryDefinitions(): Record<string, CategoryDefinition>;
|
|
24
|
+
/** Get document name (from meta.name, falls back to documentPath) */
|
|
25
|
+
get name(): string;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/model/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAE3E;;GAEG;AACH,qBAAa,QAAQ;IACnB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAyB;gBAG3D,IAAI,EAAE,YAAY,EAClB,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAC1C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM;IAShB,2CAA2C;IAC3C,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,EAAE;IAItD,6CAA6C;IAC7C,cAAc,IAAI,OAAO,EAAE;IAQ3B,qDAAqD;IACrD,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAI5D,6EAA6E;IAC7E,sBAAsB,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAI5D,qEAAqE;IACrE,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A loaded GVP YAML document.
|
|
3
|
+
*/
|
|
4
|
+
export class Document {
|
|
5
|
+
meta;
|
|
6
|
+
filePath;
|
|
7
|
+
documentPath; // relative path without extension
|
|
8
|
+
source;
|
|
9
|
+
_elementsByCategory;
|
|
10
|
+
constructor(meta, elementsByCategory, filePath, documentPath, source) {
|
|
11
|
+
this.meta = meta;
|
|
12
|
+
this._elementsByCategory = elementsByCategory;
|
|
13
|
+
this.filePath = filePath;
|
|
14
|
+
this.documentPath = documentPath;
|
|
15
|
+
this.source = source;
|
|
16
|
+
}
|
|
17
|
+
/** Get elements for a specific category */
|
|
18
|
+
getElementsByCategory(categoryName) {
|
|
19
|
+
return this._elementsByCategory.get(categoryName) ?? [];
|
|
20
|
+
}
|
|
21
|
+
/** Get all elements across all categories */
|
|
22
|
+
getAllElements() {
|
|
23
|
+
const all = [];
|
|
24
|
+
for (const elements of this._elementsByCategory.values()) {
|
|
25
|
+
all.push(...elements);
|
|
26
|
+
}
|
|
27
|
+
return all;
|
|
28
|
+
}
|
|
29
|
+
/** Get tag definitions from meta.definitions.tags */
|
|
30
|
+
getTagDefinitions() {
|
|
31
|
+
return this.meta.definitions?.tags ?? {};
|
|
32
|
+
}
|
|
33
|
+
/** Get user-defined category definitions from meta.definitions.categories */
|
|
34
|
+
getCategoryDefinitions() {
|
|
35
|
+
return (this.meta.definitions?.categories ?? {});
|
|
36
|
+
}
|
|
37
|
+
/** Get document name (from meta.name, falls back to documentPath) */
|
|
38
|
+
get name() {
|
|
39
|
+
return this.meta.name ?? this.documentPath;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/model/document.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,OAAO,QAAQ;IACV,IAAI,CAAe;IACnB,QAAQ,CAAS;IACjB,YAAY,CAAS,CAAC,kCAAkC;IACxD,MAAM,CAAS;IACP,mBAAmB,CAAyB;IAE7D,YACE,IAAkB,EAClB,kBAA0C,EAC1C,QAAgB,EAChB,YAAoB,EACpB,MAAc;QAEd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,2CAA2C;IAC3C,qBAAqB,CAAC,YAAoB;QACxC,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAC1D,CAAC;IAED,6CAA6C;IAC7C,cAAc;QACZ,MAAM,GAAG,GAAc,EAAE,CAAC;QAC1B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC;YACzD,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,qDAAqD;IACrD,iBAAiB;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,6EAA6E;IAC7E,sBAAsB;QACpB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,IAAI,EAAE,CAAuC,CAAC;IACzF,CAAC;IAED,qEAAqE;IACrE,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC;IAC7C,CAAC;CACF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single GVP element (DEC-6.2, DEC-6.3, DEC-6.4).
|
|
3
|
+
*
|
|
4
|
+
* Identity: (source, documentPath, id)
|
|
5
|
+
* Equality: equals() compares identity tuple
|
|
6
|
+
* String reps: toString(), toLibraryId(), toCanonicalId()
|
|
7
|
+
*/
|
|
8
|
+
export declare class Element {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly status: string;
|
|
12
|
+
readonly tags: string[];
|
|
13
|
+
readonly maps_to: string[];
|
|
14
|
+
readonly priority: number | undefined;
|
|
15
|
+
readonly categoryName: string;
|
|
16
|
+
readonly source: string;
|
|
17
|
+
readonly documentPath: string;
|
|
18
|
+
/** All data including reserved + dynamic fields */
|
|
19
|
+
private readonly _data;
|
|
20
|
+
constructor(data: Record<string, unknown>, categoryName: string, source: string, documentPath: string);
|
|
21
|
+
/** Get a dynamic field value by name */
|
|
22
|
+
get(fieldName: string): unknown;
|
|
23
|
+
/** Get all data as a plain record */
|
|
24
|
+
get data(): Record<string, unknown>;
|
|
25
|
+
/**
|
|
26
|
+
* Human-readable display form (DEC-6.4).
|
|
27
|
+
* E.g., 'V1: "Alignment"'
|
|
28
|
+
*/
|
|
29
|
+
toString(): string;
|
|
30
|
+
/**
|
|
31
|
+
* Within-library qualified reference (DEC-6.4, DEC-1.1c 2-segment).
|
|
32
|
+
* E.g., 'values:V1'
|
|
33
|
+
*/
|
|
34
|
+
toLibraryId(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Fully qualified canonical ID (DEC-6.4, DEC-1.1b).
|
|
37
|
+
* E.g., '@github:company/org-gvp:values:V1'
|
|
38
|
+
*/
|
|
39
|
+
toCanonicalId(): string;
|
|
40
|
+
/**
|
|
41
|
+
* Stable hash key for use as Map key (DEC-6.2).
|
|
42
|
+
* Based on (source, documentPath, id) tuple.
|
|
43
|
+
*/
|
|
44
|
+
hashKey(): string;
|
|
45
|
+
/**
|
|
46
|
+
* Identity equality (DEC-6.2, DEC-6.3).
|
|
47
|
+
* Based on (source, documentPath, id). Priority does NOT affect equality.
|
|
48
|
+
*/
|
|
49
|
+
equals(other: Element): boolean;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../src/model/element.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,qBAAa,OAAO;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0B;gBAG9C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM;IActB,wCAAwC;IACxC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B,qCAAqC;IACrC,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElC;IAED;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;OAGG;IACH,WAAW,IAAI,MAAM;IAIrB;;;OAGG;IACH,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,OAAO,IAAI,MAAM;IAIjB;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAOhC"}
|