@documentation-robotics/cli 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/PYTHON_CLI_PARITY.md +265 -0
- package/PYTHON_CLI_STRUCTURE_UPDATE.md +246 -0
- package/README.md +926 -0
- package/biome.json +42 -0
- package/bunfig.toml +3 -0
- package/dist/ai/claude-client.js +71 -0
- package/dist/ai/claude-client.js.map +7 -0
- package/dist/ai/context-provider.js +129 -0
- package/dist/ai/context-provider.js.map +7 -0
- package/dist/ai/tools.js +231 -0
- package/dist/ai/tools.js.map +7 -0
- package/dist/cli.js +224 -0
- package/dist/cli.js.map +7 -0
- package/dist/commands/add.js +51 -0
- package/dist/commands/add.js.map +7 -0
- package/dist/commands/changeset.js +174 -0
- package/dist/commands/changeset.js.map +7 -0
- package/dist/commands/chat.js +111 -0
- package/dist/commands/chat.js.map +7 -0
- package/dist/commands/conformance.js +132 -0
- package/dist/commands/conformance.js.map +7 -0
- package/dist/commands/delete.js +31 -0
- package/dist/commands/delete.js.map +7 -0
- package/dist/commands/element.js +28 -0
- package/dist/commands/element.js.map +7 -0
- package/dist/commands/export.js +65 -0
- package/dist/commands/export.js.map +7 -0
- package/dist/commands/info.js +40 -0
- package/dist/commands/info.js.map +7 -0
- package/dist/commands/init.js +45 -0
- package/dist/commands/init.js.map +7 -0
- package/dist/commands/list.js +32 -0
- package/dist/commands/list.js.map +7 -0
- package/dist/commands/migrate.js +36 -0
- package/dist/commands/migrate.js.map +7 -0
- package/dist/commands/project.js +74 -0
- package/dist/commands/project.js.map +7 -0
- package/dist/commands/relationship.js +118 -0
- package/dist/commands/relationship.js.map +7 -0
- package/dist/commands/search.js +48 -0
- package/dist/commands/search.js.map +7 -0
- package/dist/commands/show.js +38 -0
- package/dist/commands/show.js.map +7 -0
- package/dist/commands/trace.js +60 -0
- package/dist/commands/trace.js.map +7 -0
- package/dist/commands/update.js +37 -0
- package/dist/commands/update.js.map +7 -0
- package/dist/commands/upgrade.js +152 -0
- package/dist/commands/upgrade.js.map +7 -0
- package/dist/commands/validate.js +71 -0
- package/dist/commands/validate.js.map +7 -0
- package/dist/commands/version.js +20 -0
- package/dist/commands/version.js.map +7 -0
- package/dist/commands/visualize.js +51 -0
- package/dist/commands/visualize.js.map +7 -0
- package/dist/core/active-changeset.js +52 -0
- package/dist/core/active-changeset.js.map +7 -0
- package/dist/core/changeset.js +244 -0
- package/dist/core/changeset.js.map +7 -0
- package/dist/core/dependency-tracker.js +322 -0
- package/dist/core/dependency-tracker.js.map +7 -0
- package/dist/core/element.js +65 -0
- package/dist/core/element.js.map +7 -0
- package/dist/core/layer.js +75 -0
- package/dist/core/layer.js.map +7 -0
- package/dist/core/manifest.js +57 -0
- package/dist/core/manifest.js.map +7 -0
- package/dist/core/migration-registry.js +131 -0
- package/dist/core/migration-registry.js.map +7 -0
- package/dist/core/model.js +455 -0
- package/dist/core/model.js.map +7 -0
- package/dist/core/projection-engine.js +288 -0
- package/dist/core/projection-engine.js.map +7 -0
- package/dist/core/reference-registry.js +188 -0
- package/dist/core/reference-registry.js.map +7 -0
- package/dist/core/relationship-registry.js +114 -0
- package/dist/core/relationship-registry.js.map +7 -0
- package/dist/core/relationships.js +78 -0
- package/dist/core/relationships.js.map +7 -0
- package/dist/export/archimate-exporter.js +111 -0
- package/dist/export/archimate-exporter.js.map +7 -0
- package/dist/export/export-manager.js +63 -0
- package/dist/export/export-manager.js.map +7 -0
- package/dist/export/graphml-exporter.js +39 -0
- package/dist/export/graphml-exporter.js.map +7 -0
- package/dist/export/index.js +17 -0
- package/dist/export/index.js.map +7 -0
- package/dist/export/json-schema-exporter.js +60 -0
- package/dist/export/json-schema-exporter.js.map +7 -0
- package/dist/export/markdown-exporter.js +99 -0
- package/dist/export/markdown-exporter.js.map +7 -0
- package/dist/export/openapi-exporter.js +85 -0
- package/dist/export/openapi-exporter.js.map +7 -0
- package/dist/export/plantuml-exporter.js +60 -0
- package/dist/export/plantuml-exporter.js.map +7 -0
- package/dist/export/types.js +36 -0
- package/dist/export/types.js.map +7 -0
- package/dist/schemas/bundled/01-motivation-layer.schema.json +942 -0
- package/dist/schemas/bundled/02-business-layer.schema.json +1293 -0
- package/dist/schemas/bundled/03-security-layer.schema.json +2177 -0
- package/dist/schemas/bundled/04-application-layer.schema.json +1328 -0
- package/dist/schemas/bundled/05-technology-layer.schema.json +1465 -0
- package/dist/schemas/bundled/06-api-layer.schema.json +1743 -0
- package/dist/schemas/bundled/07-data-model-layer.schema.json +1253 -0
- package/dist/schemas/bundled/08-datastore-layer.schema.json +892 -0
- package/dist/schemas/bundled/09-ux-layer.schema.json +1506 -0
- package/dist/schemas/bundled/10-navigation-layer.schema.json +843 -0
- package/dist/schemas/bundled/11-apm-observability-layer.schema.json +1430 -0
- package/dist/schemas/bundled/12-testing-layer.schema.json +1091 -0
- package/dist/schemas/bundled/common/layer-extensions.schema.json +266 -0
- package/dist/schemas/bundled/common/predicates.schema.json +493 -0
- package/dist/schemas/bundled/common/relationships.schema.json +791 -0
- package/dist/schemas/bundled/common/source-references.schema.json +71 -0
- package/dist/schemas/bundled/link-registry.json +1839 -0
- package/dist/schemas/bundled/link-registry.schema.json +339 -0
- package/dist/schemas/bundled/relationship-catalog.json +1302 -0
- package/dist/schemas/bundled/relationship-type.schema.json +221 -0
- package/dist/server/server.js +1207 -0
- package/dist/server/server.js.map +7 -0
- package/dist/server/telemetry-middleware.js +24 -0
- package/dist/server/telemetry-middleware.js.map +7 -0
- package/dist/telemetry/console-interceptor.js +34 -0
- package/dist/telemetry/console-interceptor.js.map +7 -0
- package/dist/telemetry/index.js +54 -0
- package/dist/telemetry/index.js.map +7 -0
- package/dist/telemetry/resilient-exporter.js +41 -0
- package/dist/telemetry/resilient-exporter.js.map +7 -0
- package/dist/telemetry/resilient-log-exporter.js +41 -0
- package/dist/telemetry/resilient-log-exporter.js.map +7 -0
- package/dist/telemetry/test-instrumentation.js +32 -0
- package/dist/telemetry/test-instrumentation.js.map +7 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +7 -0
- package/dist/utils/element-utils.js +11 -0
- package/dist/utils/element-utils.js.map +7 -0
- package/dist/utils/errors.js +105 -0
- package/dist/utils/errors.js.map +7 -0
- package/dist/utils/file-io.js +69 -0
- package/dist/utils/file-io.js.map +7 -0
- package/dist/utils/globals.js +28 -0
- package/dist/utils/globals.js.map +7 -0
- package/dist/utils/model-path.js +22 -0
- package/dist/utils/model-path.js.map +7 -0
- package/dist/utils/project-paths.js +45 -0
- package/dist/utils/project-paths.js.map +7 -0
- package/dist/utils/spec-installer.js +85 -0
- package/dist/utils/spec-installer.js.map +7 -0
- package/dist/utils/spec-version.js +33 -0
- package/dist/utils/spec-version.js.map +7 -0
- package/dist/validators/index.js +15 -0
- package/dist/validators/index.js.map +7 -0
- package/dist/validators/naming-validator.js +82 -0
- package/dist/validators/naming-validator.js.map +7 -0
- package/dist/validators/reference-validator.js +106 -0
- package/dist/validators/reference-validator.js.map +7 -0
- package/dist/validators/schema-validator.js +148 -0
- package/dist/validators/schema-validator.js.map +7 -0
- package/dist/validators/semantic-validator.js +80 -0
- package/dist/validators/semantic-validator.js.map +7 -0
- package/dist/validators/types.js +48 -0
- package/dist/validators/types.js.map +7 -0
- package/dist/validators/validator.js +67 -0
- package/dist/validators/validator.js.map +7 -0
- package/docs/TEST-INSTRUMENTATION.md +405 -0
- package/docs/telemetry.md +427 -0
- package/package.json +70 -0
- package/test-debug.js +33 -0
- package/test-special.mjs +46 -0
- package/test_runner.ts +7 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
class Element {
|
|
2
|
+
id;
|
|
3
|
+
type;
|
|
4
|
+
name;
|
|
5
|
+
description;
|
|
6
|
+
properties;
|
|
7
|
+
references;
|
|
8
|
+
relationships;
|
|
9
|
+
layer;
|
|
10
|
+
// Track which layer this element belongs to (Python CLI compatibility)
|
|
11
|
+
filePath;
|
|
12
|
+
// Track source file path for saving back (Python CLI compatibility)
|
|
13
|
+
rawData;
|
|
14
|
+
// Preserve raw YAML data to avoid losing unknown fields (Python CLI compatibility)
|
|
15
|
+
constructor(data) {
|
|
16
|
+
this.id = data.id, this.type = data.type, this.name = data.name, this.description = data.description, this.properties = data.properties ?? {}, this.references = data.references ?? [], this.relationships = data.relationships ?? [], this.layer = data.layer, this.filePath = data.filePath, this.rawData = data.rawData;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get a property by key with type inference
|
|
20
|
+
*/
|
|
21
|
+
getProperty(key) {
|
|
22
|
+
return this.properties[key];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Set a property by key
|
|
26
|
+
*/
|
|
27
|
+
setProperty(key, value) {
|
|
28
|
+
this.properties[key] = value;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get array property with type safety
|
|
32
|
+
*/
|
|
33
|
+
getArrayProperty(key) {
|
|
34
|
+
const value = this.properties[key];
|
|
35
|
+
return Array.isArray(value) ? value : [];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Add item to array property
|
|
39
|
+
*/
|
|
40
|
+
addToArrayProperty(key, item) {
|
|
41
|
+
const current = this.getArrayProperty(key);
|
|
42
|
+
current.push(item), this.properties[key] = current;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Serialize to JSON representation
|
|
46
|
+
*/
|
|
47
|
+
toJSON() {
|
|
48
|
+
const result = {
|
|
49
|
+
id: this.id,
|
|
50
|
+
type: this.type,
|
|
51
|
+
name: this.name
|
|
52
|
+
};
|
|
53
|
+
return this.description && (result.description = this.description), Object.keys(this.properties).length > 0 && (result.properties = this.properties), this.references.length > 0 && (result.references = this.references), this.relationships.length > 0 && (result.relationships = this.relationships), result;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* String representation
|
|
57
|
+
*/
|
|
58
|
+
toString() {
|
|
59
|
+
return `Element(${this.id})`;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export {
|
|
63
|
+
Element
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=element.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/core/element.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Element as IElement, Reference, Relationship } from \"../types/index.js\";\n\n/**\n * Element class representing an individual architecture item\n */\nexport class Element implements IElement {\n id: string;\n type: string;\n name: string;\n description?: string;\n properties: Record<string, unknown>;\n references: Reference[];\n relationships: Relationship[];\n layer?: string; // Track which layer this element belongs to (Python CLI compatibility)\n filePath?: string; // Track source file path for saving back (Python CLI compatibility)\n rawData?: any; // Preserve raw YAML data to avoid losing unknown fields (Python CLI compatibility)\n\n constructor(data: {\n id: string;\n type: string;\n name: string;\n description?: string;\n properties?: Record<string, unknown>;\n references?: Reference[];\n relationships?: Relationship[];\n layer?: string;\n filePath?: string;\n rawData?: any;\n }) {\n this.id = data.id;\n this.type = data.type;\n this.name = data.name;\n this.description = data.description;\n this.properties = data.properties ?? {};\n this.references = data.references ?? [];\n this.relationships = data.relationships ?? [];\n this.layer = data.layer;\n this.filePath = data.filePath;\n this.rawData = data.rawData;\n }\n\n /**\n * Get a property by key with type inference\n */\n getProperty<T>(key: string): T | undefined {\n return this.properties[key] as T | undefined;\n }\n\n /**\n * Set a property by key\n */\n setProperty(key: string, value: unknown): void {\n this.properties[key] = value;\n }\n\n /**\n * Get array property with type safety\n */\n getArrayProperty<T>(key: string): T[] {\n const value = this.properties[key];\n if (Array.isArray(value)) {\n return value as T[];\n }\n return [];\n }\n\n /**\n * Add item to array property\n */\n addToArrayProperty<T>(key: string, item: T): void {\n const current = this.getArrayProperty<T>(key);\n current.push(item);\n this.properties[key] = current;\n }\n\n /**\n * Serialize to JSON representation\n */\n toJSON(): IElement {\n const result: IElement = {\n id: this.id,\n type: this.type,\n name: this.name,\n };\n\n if (this.description) {\n result.description = this.description;\n }\n\n if (Object.keys(this.properties).length > 0) {\n result.properties = this.properties;\n }\n\n if (this.references.length > 0) {\n result.references = this.references;\n }\n\n if (this.relationships.length > 0) {\n result.relationships = this.relationships;\n }\n\n return result;\n }\n\n /**\n * String representation\n */\n toString(): string {\n return `Element(${this.id})`;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAKM,MAAO,QAAO;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA;;EACA;;EAEA,YAAY,MAWX;AACC,SAAK,KAAK,KAAK,IACf,KAAK,OAAO,KAAK,MACjB,KAAK,OAAO,KAAK,MACjB,KAAK,cAAc,KAAK,aACxB,KAAK,aAAa,KAAK,cAAc,CAAA,GACrC,KAAK,aAAa,KAAK,cAAc,CAAA,GACrC,KAAK,gBAAgB,KAAK,iBAAiB,CAAA,GAC3C,KAAK,QAAQ,KAAK,OAClB,KAAK,WAAW,KAAK,UACrB,KAAK,UAAU,KAAK;EACtB;;;;EAKA,YAAe,KAAW;AACxB,WAAO,KAAK,WAAW,GAAG;EAC5B;;;;EAKA,YAAY,KAAa,OAAc;AACrC,SAAK,WAAW,GAAG,IAAI;EACzB;;;;EAKA,iBAAoB,KAAW;AAC7B,UAAM,QAAQ,KAAK,WAAW,GAAG;AACjC,WAAI,MAAM,QAAQ,KAAK,IACd,QAEF,CAAA;EACT;;;;EAKA,mBAAsB,KAAa,MAAO;AACxC,UAAM,UAAU,KAAK,iBAAoB,GAAG;AAC5C,YAAQ,KAAK,IAAI,GACjB,KAAK,WAAW,GAAG,IAAI;EACzB;;;;EAKA,SAAM;AACJ,UAAM,SAAmB;MACvB,IAAI,KAAK;MACT,MAAM,KAAK;MACX,MAAM,KAAK;;AAGb,WAAI,KAAK,gBACP,OAAO,cAAc,KAAK,cAGxB,OAAO,KAAK,KAAK,UAAU,EAAE,SAAS,MACxC,OAAO,aAAa,KAAK,aAGvB,KAAK,WAAW,SAAS,MAC3B,OAAO,aAAa,KAAK,aAGvB,KAAK,cAAc,SAAS,MAC9B,OAAO,gBAAgB,KAAK,gBAGvB;EACT;;;;EAKA,WAAQ;AACN,WAAO,WAAW,KAAK,EAAE;EAC3B;;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Element } from "./element.js";
|
|
2
|
+
class Layer {
|
|
3
|
+
name;
|
|
4
|
+
elements;
|
|
5
|
+
metadata;
|
|
6
|
+
dirty = !1;
|
|
7
|
+
constructor(name, elements = []) {
|
|
8
|
+
this.name = name, this.elements = new Map(elements.map((e) => [e.id, e]));
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Add an element to the layer
|
|
12
|
+
*/
|
|
13
|
+
addElement(element) {
|
|
14
|
+
this.elements.set(element.id, element), this.dirty = !0;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get an element by ID
|
|
18
|
+
*/
|
|
19
|
+
getElement(id) {
|
|
20
|
+
return this.elements.get(id);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Delete an element by ID
|
|
24
|
+
*/
|
|
25
|
+
deleteElement(id) {
|
|
26
|
+
const result = this.elements.delete(id);
|
|
27
|
+
return result && (this.dirty = !0), result;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* List all elements in the layer
|
|
31
|
+
*/
|
|
32
|
+
listElements() {
|
|
33
|
+
return Array.from(this.elements.values());
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if layer has unsaved changes
|
|
37
|
+
*/
|
|
38
|
+
isDirty() {
|
|
39
|
+
return this.dirty;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Mark layer as clean (no unsaved changes)
|
|
43
|
+
*/
|
|
44
|
+
markClean() {
|
|
45
|
+
this.dirty = !1;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Serialize to JSON representation
|
|
49
|
+
*/
|
|
50
|
+
toJSON() {
|
|
51
|
+
const result = {
|
|
52
|
+
elements: Array.from(this.elements.values()).map((e) => e.toJSON())
|
|
53
|
+
};
|
|
54
|
+
return this.metadata && (result.metadata = this.metadata), result;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Create Layer from JSON data
|
|
58
|
+
*/
|
|
59
|
+
static fromJSON(name, data) {
|
|
60
|
+
const elements = data.elements.map((e) => new Element({
|
|
61
|
+
id: e.id,
|
|
62
|
+
type: e.type,
|
|
63
|
+
name: e.name,
|
|
64
|
+
description: e.description,
|
|
65
|
+
properties: e.properties,
|
|
66
|
+
references: e.references,
|
|
67
|
+
relationships: e.relationships
|
|
68
|
+
})), layer = new Layer(name, elements);
|
|
69
|
+
return layer.metadata = data.metadata, layer;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export {
|
|
73
|
+
Layer
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=layer.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/core/layer.ts"],
|
|
4
|
+
"sourcesContent": ["import { Element } from \"./element.js\";\nimport type { LayerData } from \"../types/index.js\";\n\n/**\n * Layer class representing a container for elements within a layer\n */\nexport class Layer {\n name: string;\n elements: Map<string, Element>;\n metadata?: { layer: string; version: string };\n private dirty: boolean = false;\n\n constructor(name: string, elements: Element[] = []) {\n this.name = name;\n this.elements = new Map(elements.map((e) => [e.id, e]));\n }\n\n /**\n * Add an element to the layer\n */\n addElement(element: Element): void {\n this.elements.set(element.id, element);\n this.dirty = true;\n }\n\n /**\n * Get an element by ID\n */\n getElement(id: string): Element | undefined {\n return this.elements.get(id);\n }\n\n /**\n * Delete an element by ID\n */\n deleteElement(id: string): boolean {\n const result = this.elements.delete(id);\n if (result) {\n this.dirty = true;\n }\n return result;\n }\n\n /**\n * List all elements in the layer\n */\n listElements(): Element[] {\n return Array.from(this.elements.values());\n }\n\n /**\n * Check if layer has unsaved changes\n */\n isDirty(): boolean {\n return this.dirty;\n }\n\n /**\n * Mark layer as clean (no unsaved changes)\n */\n markClean(): void {\n this.dirty = false;\n }\n\n /**\n * Serialize to JSON representation\n */\n toJSON(): LayerData {\n const result: LayerData = {\n elements: Array.from(this.elements.values()).map((e) => e.toJSON()),\n };\n\n if (this.metadata) {\n result.metadata = this.metadata;\n }\n\n return result;\n }\n\n /**\n * Create Layer from JSON data\n */\n static fromJSON(name: string, data: LayerData): Layer {\n const elements = data.elements.map(\n (e) =>\n new Element({\n id: e.id,\n type: e.type,\n name: e.name,\n description: e.description,\n properties: e.properties,\n references: e.references,\n relationships: e.relationships,\n })\n );\n const layer = new Layer(name, elements);\n layer.metadata = data.metadata;\n return layer;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,eAAe;AAMlB,MAAO,MAAK;EAChB;EACA;EACA;EACQ,QAAiB;EAEzB,YAAY,MAAc,WAAsB,CAAA,GAAE;AAChD,SAAK,OAAO,MACZ,KAAK,WAAW,IAAI,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;EACxD;;;;EAKA,WAAW,SAAgB;AACzB,SAAK,SAAS,IAAI,QAAQ,IAAI,OAAO,GACrC,KAAK,QAAQ;EACf;;;;EAKA,WAAW,IAAU;AACnB,WAAO,KAAK,SAAS,IAAI,EAAE;EAC7B;;;;EAKA,cAAc,IAAU;AACtB,UAAM,SAAS,KAAK,SAAS,OAAO,EAAE;AACtC,WAAI,WACF,KAAK,QAAQ,KAER;EACT;;;;EAKA,eAAY;AACV,WAAO,MAAM,KAAK,KAAK,SAAS,OAAM,CAAE;EAC1C;;;;EAKA,UAAO;AACL,WAAO,KAAK;EACd;;;;EAKA,YAAS;AACP,SAAK,QAAQ;EACf;;;;EAKA,SAAM;AACJ,UAAM,SAAoB;MACxB,UAAU,MAAM,KAAK,KAAK,SAAS,OAAM,CAAE,EAAE,IAAI,CAAC,MAAM,EAAE,OAAM,CAAE;;AAGpE,WAAI,KAAK,aACP,OAAO,WAAW,KAAK,WAGlB;EACT;;;;EAKA,OAAO,SAAS,MAAc,MAAe;AAC3C,UAAM,WAAW,KAAK,SAAS,IAC7B,CAAC,MACC,IAAI,QAAQ;MACV,IAAI,EAAE;MACN,MAAM,EAAE;MACR,MAAM,EAAE;MACR,aAAa,EAAE;MACf,YAAY,EAAE;MACd,YAAY,EAAE;MACd,eAAe,EAAE;KAClB,CAAC,GAEA,QAAQ,IAAI,MAAM,MAAM,QAAQ;AACtC,iBAAM,WAAW,KAAK,UACf;EACT;;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
class Manifest {
|
|
2
|
+
name;
|
|
3
|
+
version;
|
|
4
|
+
description;
|
|
5
|
+
author;
|
|
6
|
+
created;
|
|
7
|
+
modified;
|
|
8
|
+
specVersion;
|
|
9
|
+
layers;
|
|
10
|
+
// Python CLI layer configuration
|
|
11
|
+
statistics;
|
|
12
|
+
cross_references;
|
|
13
|
+
conventions;
|
|
14
|
+
// Python CLI conventions
|
|
15
|
+
upgrade_history;
|
|
16
|
+
// Python CLI upgrade tracking
|
|
17
|
+
changeset_history;
|
|
18
|
+
// Changeset application tracking
|
|
19
|
+
constructor(data) {
|
|
20
|
+
this.name = data.name, this.version = data.version, this.description = data.description, this.author = data.author, this.created = data.created ?? (/* @__PURE__ */ new Date()).toISOString(), this.modified = data.modified ?? (/* @__PURE__ */ new Date()).toISOString(), this.specVersion = data.specVersion, this.layers = data.layers, this.statistics = data.statistics, this.cross_references = data.cross_references, this.conventions = data.conventions, this.upgrade_history = data.upgrade_history, this.changeset_history = data.changeset_history || [];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Update the modified timestamp to current time
|
|
24
|
+
*/
|
|
25
|
+
updateModified() {
|
|
26
|
+
this.modified = (/* @__PURE__ */ new Date()).toISOString();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Serialize to JSON representation
|
|
30
|
+
*/
|
|
31
|
+
toJSON() {
|
|
32
|
+
const result = {
|
|
33
|
+
name: this.name,
|
|
34
|
+
version: this.version,
|
|
35
|
+
created: this.created,
|
|
36
|
+
modified: this.modified
|
|
37
|
+
};
|
|
38
|
+
return this.description && (result.description = this.description), this.author && (result.author = this.author), this.specVersion && (result.specVersion = this.specVersion), this.layers && (result.layers = this.layers), this.statistics && (result.statistics = this.statistics), this.cross_references && (result.cross_references = this.cross_references), this.conventions && (result.conventions = this.conventions), this.upgrade_history && (result.upgrade_history = this.upgrade_history), this.changeset_history && this.changeset_history.length > 0 && (result.changeset_history = this.changeset_history), result;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create Manifest from JSON string
|
|
42
|
+
*/
|
|
43
|
+
static fromJSON(json) {
|
|
44
|
+
const data = JSON.parse(json);
|
|
45
|
+
return new Manifest(data);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* String representation
|
|
49
|
+
*/
|
|
50
|
+
toString() {
|
|
51
|
+
return `Manifest(${this.name} v${this.version})`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export {
|
|
55
|
+
Manifest
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/core/manifest.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ManifestData } from \"../types/index.js\";\n\n/**\n * Manifest class representing model metadata\n */\nexport class Manifest {\n name: string;\n version: string;\n description?: string;\n author?: string;\n created: string;\n modified: string;\n specVersion?: string;\n layers?: Record<string, any>; // Python CLI layer configuration\n statistics?: {\n total_elements: number;\n total_relationships: number;\n completeness?: number;\n last_validation?: string;\n validation_status?: string;\n };\n cross_references?: {\n total: number;\n by_type: Record<string, number>;\n };\n conventions?: any; // Python CLI conventions\n upgrade_history?: any[]; // Python CLI upgrade tracking\n changeset_history?: Array<{\n name: string;\n applied_at: string;\n action: 'applied' | 'reverted';\n }>; // Changeset application tracking\n\n constructor(data: ManifestData) {\n this.name = data.name;\n this.version = data.version;\n this.description = data.description;\n this.author = data.author;\n this.created = data.created ?? new Date().toISOString();\n this.modified = data.modified ?? new Date().toISOString();\n this.specVersion = data.specVersion;\n // Python CLI compatibility fields\n this.layers = (data as any).layers;\n this.statistics = (data as any).statistics;\n this.cross_references = (data as any).cross_references;\n this.conventions = (data as any).conventions;\n this.upgrade_history = (data as any).upgrade_history;\n this.changeset_history = (data as any).changeset_history || [];\n }\n\n /**\n * Update the modified timestamp to current time\n */\n updateModified(): void {\n this.modified = new Date().toISOString();\n }\n\n /**\n * Serialize to JSON representation\n */\n toJSON(): ManifestData {\n const result: any = {\n name: this.name,\n version: this.version,\n created: this.created,\n modified: this.modified,\n };\n\n if (this.description) {\n result.description = this.description;\n }\n\n if (this.author) {\n result.author = this.author;\n }\n\n if (this.specVersion) {\n result.specVersion = this.specVersion;\n }\n\n // Include Python CLI compatibility fields\n if (this.layers) {\n result.layers = this.layers;\n }\n\n if (this.statistics) {\n result.statistics = this.statistics;\n }\n\n if (this.cross_references) {\n result.cross_references = this.cross_references;\n }\n\n if (this.conventions) {\n result.conventions = this.conventions;\n }\n\n if (this.upgrade_history) {\n result.upgrade_history = this.upgrade_history;\n }\n\n if (this.changeset_history && this.changeset_history.length > 0) {\n result.changeset_history = this.changeset_history;\n }\n\n return result;\n }\n\n /**\n * Create Manifest from JSON string\n */\n static fromJSON(json: string): Manifest {\n const data = JSON.parse(json) as ManifestData;\n return new Manifest(data);\n }\n\n /**\n * String representation\n */\n toString(): string {\n return `Manifest(${this.name} v${this.version})`;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAKM,MAAO,SAAQ;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EACA;EAOA;EAIA;;EACA;;EACA;;EAMA,YAAY,MAAkB;AAC5B,SAAK,OAAO,KAAK,MACjB,KAAK,UAAU,KAAK,SACpB,KAAK,cAAc,KAAK,aACxB,KAAK,SAAS,KAAK,QACnB,KAAK,UAAU,KAAK,YAAW,oBAAI,KAAI,GAAG,YAAW,GACrD,KAAK,WAAW,KAAK,aAAY,oBAAI,KAAI,GAAG,YAAW,GACvD,KAAK,cAAc,KAAK,aAExB,KAAK,SAAU,KAAa,QAC5B,KAAK,aAAc,KAAa,YAChC,KAAK,mBAAoB,KAAa,kBACtC,KAAK,cAAe,KAAa,aACjC,KAAK,kBAAmB,KAAa,iBACrC,KAAK,oBAAqB,KAAa,qBAAqB,CAAA;EAC9D;;;;EAKA,iBAAc;AACZ,SAAK,YAAW,oBAAI,KAAI,GAAG,YAAW;EACxC;;;;EAKA,SAAM;AACJ,UAAM,SAAc;MAClB,MAAM,KAAK;MACX,SAAS,KAAK;MACd,SAAS,KAAK;MACd,UAAU,KAAK;;AAGjB,WAAI,KAAK,gBACP,OAAO,cAAc,KAAK,cAGxB,KAAK,WACP,OAAO,SAAS,KAAK,SAGnB,KAAK,gBACP,OAAO,cAAc,KAAK,cAIxB,KAAK,WACP,OAAO,SAAS,KAAK,SAGnB,KAAK,eACP,OAAO,aAAa,KAAK,aAGvB,KAAK,qBACP,OAAO,mBAAmB,KAAK,mBAG7B,KAAK,gBACP,OAAO,cAAc,KAAK,cAGxB,KAAK,oBACP,OAAO,kBAAkB,KAAK,kBAG5B,KAAK,qBAAqB,KAAK,kBAAkB,SAAS,MAC5D,OAAO,oBAAoB,KAAK,oBAG3B;EACT;;;;EAKA,OAAO,SAAS,MAAY;AAC1B,UAAM,OAAO,KAAK,MAAM,IAAI;AAC5B,WAAO,IAAI,SAAS,IAAI;EAC1B;;;;EAKA,WAAQ;AACN,WAAO,YAAY,KAAK,IAAI,KAAK,KAAK,OAAO;EAC/C;;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
class MigrationRegistry {
|
|
2
|
+
migrations = [];
|
|
3
|
+
constructor() {
|
|
4
|
+
this.registerMigrations();
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Register all available migrations
|
|
8
|
+
*/
|
|
9
|
+
registerMigrations() {
|
|
10
|
+
this.migrations.push({
|
|
11
|
+
fromVersion: "0.5.0",
|
|
12
|
+
toVersion: "0.6.0",
|
|
13
|
+
description: "Relationship Taxonomy (Spec v0.6.0)",
|
|
14
|
+
apply: async () => ({
|
|
15
|
+
migrationsApplied: 1,
|
|
16
|
+
filesModified: 0,
|
|
17
|
+
description: "Spec version updated to 0.6.0 (Relationship Taxonomy now available)"
|
|
18
|
+
})
|
|
19
|
+
}), this.migrations.push({
|
|
20
|
+
fromVersion: "0.6.0",
|
|
21
|
+
toVersion: "0.7.0",
|
|
22
|
+
description: "Layer Schema Relationship Metadata (Spec v0.7.0)",
|
|
23
|
+
apply: async () => ({
|
|
24
|
+
migrationsApplied: 1,
|
|
25
|
+
filesModified: 0,
|
|
26
|
+
description: "Spec version updated to 0.7.0 (Layer schemas now include relationship metadata sections)"
|
|
27
|
+
})
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get the latest available specification version
|
|
32
|
+
*/
|
|
33
|
+
getLatestVersion() {
|
|
34
|
+
return this.migrations.length === 0 ? "0.7.0" : this.migrations.map((m) => m.toVersion).sort().reverse()[0];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the sequence of migrations needed from one version to another
|
|
38
|
+
*/
|
|
39
|
+
getMigrationPath(fromVersion, toVersion) {
|
|
40
|
+
const targetVersion = toVersion || this.getLatestVersion();
|
|
41
|
+
if (this.compareVersions(fromVersion, targetVersion) >= 0)
|
|
42
|
+
return [];
|
|
43
|
+
const path = [];
|
|
44
|
+
let current = fromVersion;
|
|
45
|
+
const sortedMigrations = [...this.migrations].sort((a, b) => this.compareVersions(a.fromVersion, b.fromVersion));
|
|
46
|
+
for (const migration of sortedMigrations)
|
|
47
|
+
this.compareVersions(current, migration.fromVersion) >= 0 && this.compareVersions(current, migration.toVersion) < 0 && this.compareVersions(migration.toVersion, targetVersion) <= 0 && (path.push(migration), current = migration.toVersion);
|
|
48
|
+
return path;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check if a model requires migration
|
|
52
|
+
*/
|
|
53
|
+
requiresMigration(currentVersion) {
|
|
54
|
+
return this.getMigrationPath(currentVersion).length > 0;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Apply all migrations in sequence
|
|
58
|
+
*/
|
|
59
|
+
async applyMigrations(model, options) {
|
|
60
|
+
const path = this.getMigrationPath(options.fromVersion, options.toVersion), targetVersion = options.toVersion || this.getLatestVersion();
|
|
61
|
+
if (path.length === 0)
|
|
62
|
+
return {
|
|
63
|
+
applied: [],
|
|
64
|
+
currentVersion: options.fromVersion,
|
|
65
|
+
targetVersion,
|
|
66
|
+
totalChanges: 0
|
|
67
|
+
};
|
|
68
|
+
const results = {
|
|
69
|
+
applied: [],
|
|
70
|
+
currentVersion: options.fromVersion,
|
|
71
|
+
targetVersion,
|
|
72
|
+
totalChanges: 0
|
|
73
|
+
};
|
|
74
|
+
for (const migration of path)
|
|
75
|
+
if (options.dryRun)
|
|
76
|
+
results.applied.push({
|
|
77
|
+
from: migration.fromVersion,
|
|
78
|
+
to: migration.toVersion,
|
|
79
|
+
description: migration.description,
|
|
80
|
+
dryRun: !0
|
|
81
|
+
});
|
|
82
|
+
else
|
|
83
|
+
try {
|
|
84
|
+
const result = await migration.apply(model);
|
|
85
|
+
results.applied.push({
|
|
86
|
+
from: migration.fromVersion,
|
|
87
|
+
to: migration.toVersion,
|
|
88
|
+
description: migration.description,
|
|
89
|
+
changes: result
|
|
90
|
+
}), results.totalChanges += result.migrationsApplied, model.manifest.specVersion = migration.toVersion;
|
|
91
|
+
} catch (error) {
|
|
92
|
+
throw new Error(`Migration ${migration.fromVersion} \u2192 ${migration.toVersion} failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
93
|
+
}
|
|
94
|
+
return results;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Get a summary of migrations that would be applied
|
|
98
|
+
*/
|
|
99
|
+
getMigrationSummary(fromVersion, toVersion) {
|
|
100
|
+
const path = this.getMigrationPath(fromVersion, toVersion), targetVersion = toVersion || this.getLatestVersion();
|
|
101
|
+
return {
|
|
102
|
+
currentVersion: fromVersion,
|
|
103
|
+
targetVersion,
|
|
104
|
+
migrationsNeeded: path.length,
|
|
105
|
+
migrations: path.map((m) => ({
|
|
106
|
+
from: m.fromVersion,
|
|
107
|
+
to: m.toVersion,
|
|
108
|
+
description: m.description
|
|
109
|
+
}))
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Compare two version strings
|
|
114
|
+
* Returns: -1 if a < b, 0 if a == b, 1 if a > b
|
|
115
|
+
*/
|
|
116
|
+
compareVersions(a, b) {
|
|
117
|
+
const aParts = a.split(".").map(Number), bParts = b.split(".").map(Number), maxLength = Math.max(aParts.length, bParts.length);
|
|
118
|
+
for (let i = 0; i < maxLength; i++) {
|
|
119
|
+
const aPart = aParts[i] || 0, bPart = bParts[i] || 0;
|
|
120
|
+
if (aPart < bPart)
|
|
121
|
+
return -1;
|
|
122
|
+
if (aPart > bPart)
|
|
123
|
+
return 1;
|
|
124
|
+
}
|
|
125
|
+
return 0;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
export {
|
|
129
|
+
MigrationRegistry
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=migration-registry.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/core/migration-registry.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Migration Registry - Manages version-based model migrations\n *\n * Handles sequential migrations from one spec version to another,\n * supporting the evolution of the architecture model specification.\n */\n\nimport type { Model } from './model.js';\n\n/**\n * Represents a single version migration\n */\nexport interface Migration {\n fromVersion: string;\n toVersion: string;\n description: string;\n apply: (model: Model) => Promise<MigrationResult>;\n}\n\n/**\n * Result of applying a migration\n */\nexport interface MigrationResult {\n migrationsApplied: number;\n filesModified: number;\n description: string;\n error?: string;\n details?: Record<string, unknown>;\n}\n\n/**\n * Migration Registry managing all available migrations\n */\nexport class MigrationRegistry {\n private migrations: Migration[] = [];\n\n constructor() {\n this.registerMigrations();\n }\n\n /**\n * Register all available migrations\n */\n private registerMigrations(): void {\n // Migration from v0.5.0 to v0.6.0: Relationship Taxonomy\n this.migrations.push({\n fromVersion: '0.5.0',\n toVersion: '0.6.0',\n description: 'Relationship Taxonomy (Spec v0.6.0)',\n apply: async () => {\n // This migration is opt-in - the new relationship taxonomy\n // is fully backward compatible with existing models\n return {\n migrationsApplied: 1,\n filesModified: 0,\n description: 'Spec version updated to 0.6.0 (Relationship Taxonomy now available)',\n };\n },\n });\n\n // Migration from v0.6.0 to v0.7.0: Layer Schema Relationship Metadata\n this.migrations.push({\n fromVersion: '0.6.0',\n toVersion: '0.7.0',\n description: 'Layer Schema Relationship Metadata (Spec v0.7.0)',\n apply: async () => {\n // This migration updates layer schemas with relationship metadata sections\n // - All 12 layer schemas now include layerMetadata, intraLayerRelationships, crossLayerRelationships\n // - Deprecates link-registry.json (will be removed in v0.8.0)\n // - Terminology change: \"cross-layer links\" \u2192 \"cross-layer relationships\"\n // Fully backward compatible - existing models continue to work\n return {\n migrationsApplied: 1,\n filesModified: 0,\n description: 'Spec version updated to 0.7.0 (Layer schemas now include relationship metadata sections)',\n };\n },\n });\n }\n\n /**\n * Get the latest available specification version\n */\n getLatestVersion(): string {\n if (this.migrations.length === 0) {\n return '0.7.0';\n }\n\n // Return the highest toVersion from all migrations\n const versions = this.migrations.map((m) => m.toVersion);\n return versions.sort().reverse()[0];\n }\n\n /**\n * Get the sequence of migrations needed from one version to another\n */\n getMigrationPath(fromVersion: string, toVersion?: string): Migration[] {\n const targetVersion = toVersion || this.getLatestVersion();\n\n if (this.compareVersions(fromVersion, targetVersion) >= 0) {\n return [];\n }\n\n const path: Migration[] = [];\n let current = fromVersion;\n\n // Sort migrations by fromVersion\n const sortedMigrations = [...this.migrations].sort((a, b) =>\n this.compareVersions(a.fromVersion, b.fromVersion)\n );\n\n for (const migration of sortedMigrations) {\n // Check if this migration is in our path\n if (\n this.compareVersions(current, migration.fromVersion) >= 0 &&\n this.compareVersions(current, migration.toVersion) < 0 &&\n this.compareVersions(migration.toVersion, targetVersion) <= 0\n ) {\n path.push(migration);\n current = migration.toVersion;\n }\n }\n\n return path;\n }\n\n /**\n * Check if a model requires migration\n */\n requiresMigration(currentVersion: string): boolean {\n const path = this.getMigrationPath(currentVersion);\n return path.length > 0;\n }\n\n /**\n * Apply all migrations in sequence\n */\n async applyMigrations(\n model: Model,\n options: {\n fromVersion: string;\n toVersion?: string;\n dryRun?: boolean;\n validate?: boolean;\n }\n ): Promise<ApplyMigrationsResult> {\n const path = this.getMigrationPath(options.fromVersion, options.toVersion);\n const targetVersion = options.toVersion || this.getLatestVersion();\n\n if (path.length === 0) {\n return {\n applied: [],\n currentVersion: options.fromVersion,\n targetVersion,\n totalChanges: 0,\n };\n }\n\n const results: ApplyMigrationsResult = {\n applied: [],\n currentVersion: options.fromVersion,\n targetVersion,\n totalChanges: 0,\n };\n\n for (const migration of path) {\n if (!options.dryRun) {\n try {\n const result = await migration.apply(model);\n\n results.applied.push({\n from: migration.fromVersion,\n to: migration.toVersion,\n description: migration.description,\n changes: result,\n });\n\n results.totalChanges += result.migrationsApplied;\n\n // Update model's spec version\n model.manifest.specVersion = migration.toVersion;\n } catch (error) {\n throw new Error(\n `Migration ${migration.fromVersion} \u2192 ${migration.toVersion} failed: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n } else {\n // Dry run - just record what would happen\n results.applied.push({\n from: migration.fromVersion,\n to: migration.toVersion,\n description: migration.description,\n dryRun: true,\n });\n }\n }\n\n return results;\n }\n\n /**\n * Get a summary of migrations that would be applied\n */\n getMigrationSummary(\n fromVersion: string,\n toVersion?: string\n ): {\n currentVersion: string;\n targetVersion: string;\n migrationsNeeded: number;\n migrations: Array<{\n from: string;\n to: string;\n description: string;\n }>;\n } {\n const path = this.getMigrationPath(fromVersion, toVersion);\n const targetVersion = toVersion || this.getLatestVersion();\n\n return {\n currentVersion: fromVersion,\n targetVersion,\n migrationsNeeded: path.length,\n migrations: path.map((m) => ({\n from: m.fromVersion,\n to: m.toVersion,\n description: m.description,\n })),\n };\n }\n\n /**\n * Compare two version strings\n * Returns: -1 if a < b, 0 if a == b, 1 if a > b\n */\n private compareVersions(a: string, b: string): number {\n const aParts = a.split('.').map(Number);\n const bParts = b.split('.').map(Number);\n\n const maxLength = Math.max(aParts.length, bParts.length);\n\n for (let i = 0; i < maxLength; i++) {\n const aPart = aParts[i] || 0;\n const bPart = bParts[i] || 0;\n\n if (aPart < bPart) return -1;\n if (aPart > bPart) return 1;\n }\n\n return 0;\n }\n}\n\n/**\n * Result of applying multiple migrations\n */\nexport interface ApplyMigrationsResult {\n applied: Array<{\n from: string;\n to: string;\n description: string;\n changes?: MigrationResult;\n dryRun?: boolean;\n }>;\n currentVersion: string;\n targetVersion: string;\n totalChanges: number;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|