@erode-app/core 0.6.0-beta.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/dist/adapters/adapter-factory.d.ts +3 -0
- package/dist/adapters/adapter-factory.d.ts.map +1 -0
- package/dist/adapters/adapter-factory.js +19 -0
- package/dist/adapters/adapter-factory.js.map +1 -0
- package/dist/adapters/adapter-metadata.d.ts +12 -0
- package/dist/adapters/adapter-metadata.d.ts.map +1 -0
- package/dist/adapters/adapter-metadata.js +2 -0
- package/dist/adapters/adapter-metadata.js.map +1 -0
- package/dist/adapters/architecture-adapter.d.ts +42 -0
- package/dist/adapters/architecture-adapter.d.ts.map +1 -0
- package/dist/adapters/architecture-adapter.js +2 -0
- package/dist/adapters/architecture-adapter.js.map +1 -0
- package/dist/adapters/architecture-types.d.ts +32 -0
- package/dist/adapters/architecture-types.d.ts.map +1 -0
- package/dist/adapters/architecture-types.js +2 -0
- package/dist/adapters/architecture-types.js.map +1 -0
- package/dist/adapters/base-patcher.d.ts +38 -0
- package/dist/adapters/base-patcher.d.ts.map +1 -0
- package/dist/adapters/base-patcher.js +266 -0
- package/dist/adapters/base-patcher.js.map +1 -0
- package/dist/adapters/dsl-validation.d.ts +2 -0
- package/dist/adapters/dsl-validation.d.ts.map +1 -0
- package/dist/adapters/dsl-validation.js +24 -0
- package/dist/adapters/dsl-validation.js.map +1 -0
- package/dist/adapters/likec4/adapter.d.ts +37 -0
- package/dist/adapters/likec4/adapter.d.ts.map +1 -0
- package/dist/adapters/likec4/adapter.js +302 -0
- package/dist/adapters/likec4/adapter.js.map +1 -0
- package/dist/adapters/likec4/dsl-validator.d.ts +3 -0
- package/dist/adapters/likec4/dsl-validator.d.ts.map +1 -0
- package/dist/adapters/likec4/dsl-validator.js +22 -0
- package/dist/adapters/likec4/dsl-validator.js.map +1 -0
- package/dist/adapters/likec4/index.d.ts +2 -0
- package/dist/adapters/likec4/index.d.ts.map +1 -0
- package/dist/adapters/likec4/index.js +2 -0
- package/dist/adapters/likec4/index.js.map +1 -0
- package/dist/adapters/likec4/likec4-types.d.ts +7 -0
- package/dist/adapters/likec4/likec4-types.d.ts.map +1 -0
- package/dist/adapters/likec4/likec4-types.js +2 -0
- package/dist/adapters/likec4/likec4-types.js.map +1 -0
- package/dist/adapters/likec4/metadata.d.ts +3 -0
- package/dist/adapters/likec4/metadata.d.ts.map +1 -0
- package/dist/adapters/likec4/metadata.js +30 -0
- package/dist/adapters/likec4/metadata.js.map +1 -0
- package/dist/adapters/likec4/patcher.d.ts +15 -0
- package/dist/adapters/likec4/patcher.d.ts.map +1 -0
- package/dist/adapters/likec4/patcher.js +69 -0
- package/dist/adapters/likec4/patcher.js.map +1 -0
- package/dist/adapters/likec4/version-check.d.ts +11 -0
- package/dist/adapters/likec4/version-check.d.ts.map +1 -0
- package/dist/adapters/likec4/version-check.js +75 -0
- package/dist/adapters/likec4/version-check.js.map +1 -0
- package/dist/adapters/model-patcher.d.ts +49 -0
- package/dist/adapters/model-patcher.d.ts.map +1 -0
- package/dist/adapters/model-patcher.js +15 -0
- package/dist/adapters/model-patcher.js.map +1 -0
- package/dist/adapters/structurizr/adapter.d.ts +39 -0
- package/dist/adapters/structurizr/adapter.d.ts.map +1 -0
- package/dist/adapters/structurizr/adapter.js +372 -0
- package/dist/adapters/structurizr/adapter.js.map +1 -0
- package/dist/adapters/structurizr/dsl-validator.d.ts +3 -0
- package/dist/adapters/structurizr/dsl-validator.d.ts.map +1 -0
- package/dist/adapters/structurizr/dsl-validator.js +26 -0
- package/dist/adapters/structurizr/dsl-validator.js.map +1 -0
- package/dist/adapters/structurizr/index.d.ts +2 -0
- package/dist/adapters/structurizr/index.d.ts.map +1 -0
- package/dist/adapters/structurizr/index.js +2 -0
- package/dist/adapters/structurizr/index.js.map +1 -0
- package/dist/adapters/structurizr/metadata.d.ts +3 -0
- package/dist/adapters/structurizr/metadata.d.ts.map +1 -0
- package/dist/adapters/structurizr/metadata.js +35 -0
- package/dist/adapters/structurizr/metadata.js.map +1 -0
- package/dist/adapters/structurizr/patcher.d.ts +15 -0
- package/dist/adapters/structurizr/patcher.d.ts.map +1 -0
- package/dist/adapters/structurizr/patcher.js +53 -0
- package/dist/adapters/structurizr/patcher.js.map +1 -0
- package/dist/adapters/structurizr/structurizr-cli.d.ts +2 -0
- package/dist/adapters/structurizr/structurizr-cli.d.ts.map +1 -0
- package/dist/adapters/structurizr/structurizr-cli.js +91 -0
- package/dist/adapters/structurizr/structurizr-cli.js.map +1 -0
- package/dist/adapters/structurizr/structurizr-types.d.ts +3 -0
- package/dist/adapters/structurizr/structurizr-types.d.ts.map +1 -0
- package/dist/adapters/structurizr/structurizr-types.js +2 -0
- package/dist/adapters/structurizr/structurizr-types.js.map +1 -0
- package/dist/adapters/url-utils.d.ts +3 -0
- package/dist/adapters/url-utils.d.ts.map +1 -0
- package/dist/adapters/url-utils.js +53 -0
- package/dist/adapters/url-utils.js.map +1 -0
- package/dist/analysis/analysis-types.d.ts +152 -0
- package/dist/analysis/analysis-types.d.ts.map +1 -0
- package/dist/analysis/analysis-types.js +2 -0
- package/dist/analysis/analysis-types.js.map +1 -0
- package/dist/analysis/prompt-builder.d.ts +27 -0
- package/dist/analysis/prompt-builder.d.ts.map +1 -0
- package/dist/analysis/prompt-builder.js +159 -0
- package/dist/analysis/prompt-builder.js.map +1 -0
- package/dist/analysis/prompt-variables.d.ts +72 -0
- package/dist/analysis/prompt-variables.d.ts.map +1 -0
- package/dist/analysis/prompt-variables.js +2 -0
- package/dist/analysis/prompt-variables.js.map +1 -0
- package/dist/analysis/prompts/component-selection.md +50 -0
- package/dist/analysis/prompts/dependency-extraction.md +219 -0
- package/dist/analysis/prompts/drift-analysis.md +154 -0
- package/dist/analysis/prompts/model-patch.md +29 -0
- package/dist/analysis/section-formatters.d.ts +54 -0
- package/dist/analysis/section-formatters.d.ts.map +1 -0
- package/dist/analysis/section-formatters.js +95 -0
- package/dist/analysis/section-formatters.js.map +1 -0
- package/dist/analysis/template-engine.d.ts +11 -0
- package/dist/analysis/template-engine.d.ts.map +1 -0
- package/dist/analysis/template-engine.js +64 -0
- package/dist/analysis/template-engine.js.map +1 -0
- package/dist/ci-entry.d.ts +3 -0
- package/dist/ci-entry.d.ts.map +1 -0
- package/dist/ci-entry.js +67 -0
- package/dist/ci-entry.js.map +1 -0
- package/dist/errors.d.ts +60 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +134 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/output/ci-output.d.ts +13 -0
- package/dist/output/ci-output.d.ts.map +1 -0
- package/dist/output/ci-output.js +106 -0
- package/dist/output/ci-output.js.map +1 -0
- package/dist/output/structured-output.d.ts +89 -0
- package/dist/output/structured-output.d.ts.map +1 -0
- package/dist/output/structured-output.js +2 -0
- package/dist/output/structured-output.js.map +1 -0
- package/dist/output.d.ts +73 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +304 -0
- package/dist/output.js.map +1 -0
- package/dist/pipelines/analyze.d.ts +35 -0
- package/dist/pipelines/analyze.d.ts.map +1 -0
- package/dist/pipelines/analyze.js +316 -0
- package/dist/pipelines/analyze.js.map +1 -0
- package/dist/pipelines/check.d.ts +48 -0
- package/dist/pipelines/check.d.ts.map +1 -0
- package/dist/pipelines/check.js +218 -0
- package/dist/pipelines/check.js.map +1 -0
- package/dist/pipelines/components.d.ts +8 -0
- package/dist/pipelines/components.d.ts.map +1 -0
- package/dist/pipelines/components.js +14 -0
- package/dist/pipelines/components.js.map +1 -0
- package/dist/pipelines/connections.d.ts +34 -0
- package/dist/pipelines/connections.d.ts.map +1 -0
- package/dist/pipelines/connections.js +53 -0
- package/dist/pipelines/connections.js.map +1 -0
- package/dist/pipelines/pr-creation.d.ts +30 -0
- package/dist/pipelines/pr-creation.d.ts.map +1 -0
- package/dist/pipelines/pr-creation.js +26 -0
- package/dist/pipelines/pr-creation.js.map +1 -0
- package/dist/pipelines/progress.d.ts +23 -0
- package/dist/pipelines/progress.d.ts.map +1 -0
- package/dist/pipelines/progress.js +22 -0
- package/dist/pipelines/progress.js.map +1 -0
- package/dist/pipelines/publish.d.ts +39 -0
- package/dist/pipelines/publish.d.ts.map +1 -0
- package/dist/pipelines/publish.js +125 -0
- package/dist/pipelines/publish.js.map +1 -0
- package/dist/pipelines/validate.d.ts +24 -0
- package/dist/pipelines/validate.d.ts.map +1 -0
- package/dist/pipelines/validate.js +79 -0
- package/dist/pipelines/validate.js.map +1 -0
- package/dist/platforms/bitbucket/api-client.d.ts +21 -0
- package/dist/platforms/bitbucket/api-client.d.ts.map +1 -0
- package/dist/platforms/bitbucket/api-client.js +98 -0
- package/dist/platforms/bitbucket/api-client.js.map +1 -0
- package/dist/platforms/bitbucket/index.d.ts +3 -0
- package/dist/platforms/bitbucket/index.d.ts.map +1 -0
- package/dist/platforms/bitbucket/index.js +3 -0
- package/dist/platforms/bitbucket/index.js.map +1 -0
- package/dist/platforms/bitbucket/reader.d.ts +9 -0
- package/dist/platforms/bitbucket/reader.d.ts.map +1 -0
- package/dist/platforms/bitbucket/reader.js +119 -0
- package/dist/platforms/bitbucket/reader.js.map +1 -0
- package/dist/platforms/bitbucket/writer.d.ts +15 -0
- package/dist/platforms/bitbucket/writer.d.ts.map +1 -0
- package/dist/platforms/bitbucket/writer.js +172 -0
- package/dist/platforms/bitbucket/writer.js.map +1 -0
- package/dist/platforms/github/index.d.ts +3 -0
- package/dist/platforms/github/index.d.ts.map +1 -0
- package/dist/platforms/github/index.js +3 -0
- package/dist/platforms/github/index.js.map +1 -0
- package/dist/platforms/github/reader.d.ts +9 -0
- package/dist/platforms/github/reader.d.ts.map +1 -0
- package/dist/platforms/github/reader.js +141 -0
- package/dist/platforms/github/reader.js.map +1 -0
- package/dist/platforms/github/writer.d.ts +15 -0
- package/dist/platforms/github/writer.d.ts.map +1 -0
- package/dist/platforms/github/writer.js +225 -0
- package/dist/platforms/github/writer.js.map +1 -0
- package/dist/platforms/gitlab/index.d.ts +3 -0
- package/dist/platforms/gitlab/index.d.ts.map +1 -0
- package/dist/platforms/gitlab/index.js +3 -0
- package/dist/platforms/gitlab/index.js.map +1 -0
- package/dist/platforms/gitlab/reader.d.ts +9 -0
- package/dist/platforms/gitlab/reader.d.ts.map +1 -0
- package/dist/platforms/gitlab/reader.js +136 -0
- package/dist/platforms/gitlab/reader.js.map +1 -0
- package/dist/platforms/gitlab/writer.d.ts +14 -0
- package/dist/platforms/gitlab/writer.d.ts.map +1 -0
- package/dist/platforms/gitlab/writer.js +130 -0
- package/dist/platforms/gitlab/writer.js.map +1 -0
- package/dist/platforms/platform-factory.d.ts +7 -0
- package/dist/platforms/platform-factory.d.ts.map +1 -0
- package/dist/platforms/platform-factory.js +53 -0
- package/dist/platforms/platform-factory.js.map +1 -0
- package/dist/platforms/platform-utils.d.ts +12 -0
- package/dist/platforms/platform-utils.d.ts.map +1 -0
- package/dist/platforms/platform-utils.js +48 -0
- package/dist/platforms/platform-utils.js.map +1 -0
- package/dist/platforms/source-platform.d.ts +117 -0
- package/dist/platforms/source-platform.d.ts.map +1 -0
- package/dist/platforms/source-platform.js +2 -0
- package/dist/platforms/source-platform.js.map +1 -0
- package/dist/providers/ai-provider.d.ts +23 -0
- package/dist/providers/ai-provider.d.ts.map +1 -0
- package/dist/providers/ai-provider.js +2 -0
- package/dist/providers/ai-provider.js.map +1 -0
- package/dist/providers/analysis-phase.d.ts +13 -0
- package/dist/providers/analysis-phase.d.ts.map +1 -0
- package/dist/providers/analysis-phase.js +14 -0
- package/dist/providers/analysis-phase.js.map +1 -0
- package/dist/providers/anthropic/models.d.ts +5 -0
- package/dist/providers/anthropic/models.d.ts.map +1 -0
- package/dist/providers/anthropic/models.js +5 -0
- package/dist/providers/anthropic/models.js.map +1 -0
- package/dist/providers/anthropic/provider.d.ts +12 -0
- package/dist/providers/anthropic/provider.d.ts.map +1 -0
- package/dist/providers/anthropic/provider.js +47 -0
- package/dist/providers/anthropic/provider.js.map +1 -0
- package/dist/providers/base-provider.d.ts +34 -0
- package/dist/providers/base-provider.d.ts.map +1 -0
- package/dist/providers/base-provider.js +100 -0
- package/dist/providers/base-provider.js.map +1 -0
- package/dist/providers/gemini/models.d.ts +5 -0
- package/dist/providers/gemini/models.d.ts.map +1 -0
- package/dist/providers/gemini/models.js +5 -0
- package/dist/providers/gemini/models.js.map +1 -0
- package/dist/providers/gemini/provider.d.ts +12 -0
- package/dist/providers/gemini/provider.d.ts.map +1 -0
- package/dist/providers/gemini/provider.js +42 -0
- package/dist/providers/gemini/provider.js.map +1 -0
- package/dist/providers/openai/models.d.ts +5 -0
- package/dist/providers/openai/models.d.ts.map +1 -0
- package/dist/providers/openai/models.js +5 -0
- package/dist/providers/openai/models.js.map +1 -0
- package/dist/providers/openai/provider.d.ts +12 -0
- package/dist/providers/openai/provider.d.ts.map +1 -0
- package/dist/providers/openai/provider.js +49 -0
- package/dist/providers/openai/provider.js.map +1 -0
- package/dist/providers/provider-factory.d.ts +3 -0
- package/dist/providers/provider-factory.d.ts.map +1 -0
- package/dist/providers/provider-factory.js +45 -0
- package/dist/providers/provider-factory.js.map +1 -0
- package/dist/schemas/bitbucket-api.schema.d.ts +52 -0
- package/dist/schemas/bitbucket-api.schema.d.ts.map +1 -0
- package/dist/schemas/bitbucket-api.schema.js +50 -0
- package/dist/schemas/bitbucket-api.schema.js.map +1 -0
- package/dist/schemas/common.schema.d.ts +46 -0
- package/dist/schemas/common.schema.d.ts.map +1 -0
- package/dist/schemas/common.schema.js +67 -0
- package/dist/schemas/common.schema.js.map +1 -0
- package/dist/schemas/dependency-extraction.schema.d.ts +17 -0
- package/dist/schemas/dependency-extraction.schema.d.ts.map +1 -0
- package/dist/schemas/dependency-extraction.schema.js +13 -0
- package/dist/schemas/dependency-extraction.schema.js.map +1 -0
- package/dist/schemas/drift-analysis.schema.d.ts +40 -0
- package/dist/schemas/drift-analysis.schema.d.ts.map +1 -0
- package/dist/schemas/drift-analysis.schema.js +15 -0
- package/dist/schemas/drift-analysis.schema.js.map +1 -0
- package/dist/schemas/gitlab-api.schema.d.ts +33 -0
- package/dist/schemas/gitlab-api.schema.d.ts.map +1 -0
- package/dist/schemas/gitlab-api.schema.js +33 -0
- package/dist/schemas/gitlab-api.schema.js.map +1 -0
- package/dist/schemas/likec4.schema.d.ts +26 -0
- package/dist/schemas/likec4.schema.d.ts.map +1 -0
- package/dist/schemas/likec4.schema.js +23 -0
- package/dist/schemas/likec4.schema.js.map +1 -0
- package/dist/schemas/package.schema.d.ts +5 -0
- package/dist/schemas/package.schema.d.ts.map +1 -0
- package/dist/schemas/package.schema.js +5 -0
- package/dist/schemas/package.schema.js.map +1 -0
- package/dist/schemas/source-platform.schema.d.ts +56 -0
- package/dist/schemas/source-platform.schema.d.ts.map +1 -0
- package/dist/schemas/source-platform.schema.js +49 -0
- package/dist/schemas/source-platform.schema.js.map +1 -0
- package/dist/schemas/structurizr.schema.d.ts +234 -0
- package/dist/schemas/structurizr.schema.d.ts.map +1 -0
- package/dist/schemas/structurizr.schema.js +54 -0
- package/dist/schemas/structurizr.schema.js.map +1 -0
- package/dist/skip-patterns +62 -0
- package/dist/utils/config.d.ts +156 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +267 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/error-utils.d.ts +2 -0
- package/dist/utils/error-utils.d.ts.map +1 -0
- package/dist/utils/error-utils.js +6 -0
- package/dist/utils/error-utils.js.map +1 -0
- package/dist/utils/git-diff.d.ts +35 -0
- package/dist/utils/git-diff.d.ts.map +1 -0
- package/dist/utils/git-diff.js +114 -0
- package/dist/utils/git-diff.js.map +1 -0
- package/dist/utils/model-source.d.ts +30 -0
- package/dist/utils/model-source.d.ts.map +1 -0
- package/dist/utils/model-source.js +167 -0
- package/dist/utils/model-source.js.map +1 -0
- package/dist/utils/retry.d.ts +9 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +51 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/skip-patterns.d.ts +7 -0
- package/dist/utils/skip-patterns.d.ts.map +1 -0
- package/dist/utils/skip-patterns.js +35 -0
- package/dist/utils/skip-patterns.js.map +1 -0
- package/dist/utils/validation.d.ts +4 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +37 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { LikeC4 } from 'likec4';
|
|
3
|
+
import { existsSync } from 'fs';
|
|
4
|
+
import { resolve } from 'path';
|
|
5
|
+
import { CONFIG } from '../../utils/config.js';
|
|
6
|
+
import { validate } from '../../utils/validation.js';
|
|
7
|
+
import { isRepositoryHostUrl, normalizeRepositoryUrl } from '../url-utils.js';
|
|
8
|
+
import { ErodeError, AdapterError, ErrorCode } from '../../errors.js';
|
|
9
|
+
import { LIKEC4_METADATA } from './metadata.js';
|
|
10
|
+
import { LikeC4ElementSchema, LikeC4RelationshipSchema } from '../../schemas/likec4.schema.js';
|
|
11
|
+
import { checkLikeC4Version } from './version-check.js';
|
|
12
|
+
export class LikeC4Adapter {
|
|
13
|
+
metadata = LIKEC4_METADATA;
|
|
14
|
+
model = null;
|
|
15
|
+
componentIndex = null;
|
|
16
|
+
relationships = null;
|
|
17
|
+
elementTagsMap = new Map();
|
|
18
|
+
outgoing = new Map();
|
|
19
|
+
incoming = new Map();
|
|
20
|
+
isExcluded(options) {
|
|
21
|
+
const { componentId, componentTags } = options;
|
|
22
|
+
const { excludePaths, excludeTags } = CONFIG.adapter.likec4;
|
|
23
|
+
if (excludePaths.length > 0) {
|
|
24
|
+
const matchesPath = excludePaths.some((excludePath) => componentId.startsWith(excludePath));
|
|
25
|
+
if (matchesPath) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (excludeTags.length > 0) {
|
|
30
|
+
if (componentTags && componentTags.length > 0) {
|
|
31
|
+
const matchesTag = componentTags.some((tag) => excludeTags.includes(tag));
|
|
32
|
+
if (matchesTag) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const parts = componentId.split('.');
|
|
37
|
+
for (let i = parts.length - 1; i > 0; i--) {
|
|
38
|
+
const parentId = parts.slice(0, i).join('.');
|
|
39
|
+
const parentTags = this.elementTagsMap.get(parentId);
|
|
40
|
+
if (parentTags && parentTags.length > 0) {
|
|
41
|
+
const parentMatchesTag = parentTags.some((tag) => excludeTags.includes(tag));
|
|
42
|
+
if (parentMatchesTag) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
guardVersionCompatibility(likec4Path) {
|
|
51
|
+
const result = checkLikeC4Version(likec4Path);
|
|
52
|
+
if (result.found && !result.compatible) {
|
|
53
|
+
throw new AdapterError(`Source repo LikeC4 version ${result.version ?? 'unknown'} does not meet minimum ${result.minimum}`, ErrorCode.MODEL_LOAD_FAILED, 'likec4', `Incompatible LikeC4 version: source repo has ${result.version ?? 'unknown'}, but erode needs >=${result.minimum}. Upgrade the likec4 dependency in the source repo.`, { detectedVersion: result.version, minimumVersion: result.minimum });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
isValidLikeC4Model(model) {
|
|
57
|
+
return (typeof model === 'object' &&
|
|
58
|
+
model !== null &&
|
|
59
|
+
'elements' in model &&
|
|
60
|
+
typeof model.elements === 'function' &&
|
|
61
|
+
'relationships' in model &&
|
|
62
|
+
typeof model.relationships === 'function');
|
|
63
|
+
}
|
|
64
|
+
async loadFromPath(likec4Path) {
|
|
65
|
+
const resolvedPath = resolve(likec4Path);
|
|
66
|
+
if (!existsSync(resolvedPath)) {
|
|
67
|
+
throw new ErodeError(`LikeC4 model path not found: ${resolvedPath}`, ErrorCode.IO_DIR_NOT_FOUND, `LikeC4 model directory could not be located: ${resolvedPath}`, { path: resolvedPath });
|
|
68
|
+
}
|
|
69
|
+
this.guardVersionCompatibility(resolvedPath);
|
|
70
|
+
const likec4 = await LikeC4.fromWorkspace(resolvedPath, { printErrors: false });
|
|
71
|
+
try {
|
|
72
|
+
if (likec4.hasErrors()) {
|
|
73
|
+
const errors = likec4.getErrors();
|
|
74
|
+
const messages = errors.map((e) => e.message ?? JSON.stringify(e));
|
|
75
|
+
throw new AdapterError(`LikeC4 model contains validation errors: ${messages.join('; ')}`, ErrorCode.MODEL_LOAD_FAILED, 'likec4', `LikeC4 model has errors:\n${messages.map((m) => ` - ${m}`).join('\n')}`);
|
|
76
|
+
}
|
|
77
|
+
const computedModel = await likec4.computedModel();
|
|
78
|
+
if (!this.isValidLikeC4Model(computedModel)) {
|
|
79
|
+
throw new AdapterError('Malformed LikeC4 model structure: required methods are absent', ErrorCode.MODEL_LOAD_FAILED, 'likec4', 'Could not load LikeC4 model: the model structure is invalid. It may be corrupted or incompatible.');
|
|
80
|
+
}
|
|
81
|
+
this.model = computedModel;
|
|
82
|
+
const components = this.extractComponents();
|
|
83
|
+
this.relationships = this.extractRelationships();
|
|
84
|
+
this.componentIndex = this.buildComponentIndex(components);
|
|
85
|
+
return {
|
|
86
|
+
components,
|
|
87
|
+
relationships: this.relationships,
|
|
88
|
+
componentIndex: this.componentIndex,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
await likec4.dispose();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
extractComponents() {
|
|
96
|
+
if (!this.model)
|
|
97
|
+
throw AdapterError.notLoaded('likec4');
|
|
98
|
+
const rawElements = [...this.model.elements()];
|
|
99
|
+
const elements = validate(z.array(LikeC4ElementSchema), rawElements, 'LikeC4 elements');
|
|
100
|
+
// First pass: build tags map for all elements
|
|
101
|
+
elements.forEach((el) => this.elementTagsMap.set(el.id, el.tags ?? []));
|
|
102
|
+
// Second pass: filter and map
|
|
103
|
+
return elements
|
|
104
|
+
.filter((el) => !this.isExcluded({ componentId: el.id, componentTags: el.tags ?? undefined }))
|
|
105
|
+
.map((el) => ({
|
|
106
|
+
id: el.id,
|
|
107
|
+
name: el.title ?? el.id,
|
|
108
|
+
description: typeof el.description === 'string' ? el.description : undefined,
|
|
109
|
+
repository: this.extractRepositoryUrl(el),
|
|
110
|
+
tags: el.tags ?? [],
|
|
111
|
+
type: el.kind,
|
|
112
|
+
technology: el.technology ?? undefined,
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
extractRepositoryUrl(element) {
|
|
116
|
+
const link = element.links?.find((l) => isRepositoryHostUrl(typeof l === 'string' ? l : l.url));
|
|
117
|
+
return link ? normalizeRepositoryUrl(typeof link === 'string' ? link : link.url) : undefined;
|
|
118
|
+
}
|
|
119
|
+
extractRelationships() {
|
|
120
|
+
if (!this.model)
|
|
121
|
+
throw AdapterError.notLoaded('likec4');
|
|
122
|
+
const rawRelationships = [...this.model.relationships()];
|
|
123
|
+
const relationships = validate(z.array(LikeC4RelationshipSchema), rawRelationships, 'LikeC4 relationships');
|
|
124
|
+
const result = relationships
|
|
125
|
+
.map((rel) => ({
|
|
126
|
+
source: typeof rel.source === 'string' ? rel.source : rel.source.id,
|
|
127
|
+
target: typeof rel.target === 'string' ? rel.target : rel.target.id,
|
|
128
|
+
title: rel.title ?? undefined,
|
|
129
|
+
kind: rel.kind ?? undefined,
|
|
130
|
+
}))
|
|
131
|
+
.filter((rel) => !this.isExcluded({
|
|
132
|
+
componentId: rel.source,
|
|
133
|
+
componentTags: this.elementTagsMap.get(rel.source),
|
|
134
|
+
}) &&
|
|
135
|
+
!this.isExcluded({
|
|
136
|
+
componentId: rel.target,
|
|
137
|
+
componentTags: this.elementTagsMap.get(rel.target),
|
|
138
|
+
}));
|
|
139
|
+
// Build adjacency maps for O(1) lookups
|
|
140
|
+
this.outgoing.clear();
|
|
141
|
+
this.incoming.clear();
|
|
142
|
+
for (const rel of result) {
|
|
143
|
+
const out = this.outgoing.get(rel.source) ?? [];
|
|
144
|
+
out.push(rel);
|
|
145
|
+
this.outgoing.set(rel.source, out);
|
|
146
|
+
const inc = this.incoming.get(rel.target) ?? [];
|
|
147
|
+
inc.push(rel);
|
|
148
|
+
this.incoming.set(rel.target, inc);
|
|
149
|
+
}
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
buildComponentIndex(components) {
|
|
153
|
+
return components.reduce((idx, comp) => {
|
|
154
|
+
idx.byId.set(comp.id, comp);
|
|
155
|
+
if (comp.repository)
|
|
156
|
+
idx.byRepository.set(comp.repository, comp);
|
|
157
|
+
return idx;
|
|
158
|
+
}, { byRepository: new Map(), byId: new Map() });
|
|
159
|
+
}
|
|
160
|
+
findComponentByRepository(repoUrl) {
|
|
161
|
+
if (!this.componentIndex) {
|
|
162
|
+
throw AdapterError.notLoaded('likec4');
|
|
163
|
+
}
|
|
164
|
+
const normalizedUrl = normalizeRepositoryUrl(repoUrl);
|
|
165
|
+
return this.componentIndex.byRepository.get(normalizedUrl);
|
|
166
|
+
}
|
|
167
|
+
findAllComponentsByRepository(repoUrl) {
|
|
168
|
+
if (!this.componentIndex) {
|
|
169
|
+
throw AdapterError.notLoaded('likec4');
|
|
170
|
+
}
|
|
171
|
+
const normalizedUrl = normalizeRepositoryUrl(repoUrl);
|
|
172
|
+
const components = [];
|
|
173
|
+
for (const component of this.componentIndex.byId.values()) {
|
|
174
|
+
if (component.repository === normalizedUrl) {
|
|
175
|
+
components.push(component);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return components;
|
|
179
|
+
}
|
|
180
|
+
async loadAndListComponents(likec4Path) {
|
|
181
|
+
const resolvedPath = resolve(likec4Path);
|
|
182
|
+
if (!existsSync(resolvedPath)) {
|
|
183
|
+
throw new ErodeError(`LikeC4 model path not found: ${resolvedPath}`, ErrorCode.IO_DIR_NOT_FOUND, `LikeC4 model directory could not be located: ${resolvedPath}`, { path: resolvedPath });
|
|
184
|
+
}
|
|
185
|
+
this.guardVersionCompatibility(resolvedPath);
|
|
186
|
+
const likec4 = await LikeC4.fromWorkspace(resolvedPath, { printErrors: false });
|
|
187
|
+
try {
|
|
188
|
+
if (likec4.hasErrors()) {
|
|
189
|
+
const errors = likec4.getErrors();
|
|
190
|
+
const messages = errors.map((e) => e.message ?? JSON.stringify(e));
|
|
191
|
+
throw new AdapterError(`LikeC4 model contains validation errors: ${messages.join('; ')}`, ErrorCode.MODEL_LOAD_FAILED, 'likec4', `LikeC4 model has errors:\n${messages.map((m) => ` - ${m}`).join('\n')}`);
|
|
192
|
+
}
|
|
193
|
+
const computedModel = await likec4.computedModel();
|
|
194
|
+
if (!this.isValidLikeC4Model(computedModel)) {
|
|
195
|
+
throw new AdapterError('Malformed LikeC4 model structure: required methods are absent', ErrorCode.MODEL_LOAD_FAILED, 'likec4', 'Could not load LikeC4 model: the model structure is invalid. It may be corrupted or incompatible.');
|
|
196
|
+
}
|
|
197
|
+
const components = [];
|
|
198
|
+
const model = computedModel;
|
|
199
|
+
const rawElements = [...model.elements()];
|
|
200
|
+
const validatedElements = validate(z.array(LikeC4ElementSchema), rawElements, 'LikeC4 elements');
|
|
201
|
+
for (const element of validatedElements) {
|
|
202
|
+
if (this.isExcluded({ componentId: element.id, componentTags: element.tags ?? undefined })) {
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
const component = {
|
|
206
|
+
id: element.id,
|
|
207
|
+
title: element.title ?? undefined,
|
|
208
|
+
kind: element.kind,
|
|
209
|
+
links: this.extractLinks([...(element.links ?? [])]),
|
|
210
|
+
tags: [...(element.tags ?? [])],
|
|
211
|
+
};
|
|
212
|
+
components.push(component);
|
|
213
|
+
}
|
|
214
|
+
return components;
|
|
215
|
+
}
|
|
216
|
+
finally {
|
|
217
|
+
await likec4.dispose();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
extractLinks(links) {
|
|
221
|
+
return links
|
|
222
|
+
.map((link) => (typeof link === 'string' ? link : (link.url ?? link.toString())))
|
|
223
|
+
.filter(Boolean);
|
|
224
|
+
}
|
|
225
|
+
findComponentById(id) {
|
|
226
|
+
if (!this.componentIndex) {
|
|
227
|
+
throw AdapterError.notLoaded('likec4');
|
|
228
|
+
}
|
|
229
|
+
return this.componentIndex.byId.get(id);
|
|
230
|
+
}
|
|
231
|
+
isAllowedDependency(fromId, toId) {
|
|
232
|
+
if (!this.relationships) {
|
|
233
|
+
throw AdapterError.notLoaded('likec4');
|
|
234
|
+
}
|
|
235
|
+
return (this.outgoing.get(fromId) ?? []).some((rel) => rel.target === toId);
|
|
236
|
+
}
|
|
237
|
+
getComponentDependencies(componentId) {
|
|
238
|
+
if (!this.componentIndex || !this.relationships) {
|
|
239
|
+
throw AdapterError.notLoaded('likec4');
|
|
240
|
+
}
|
|
241
|
+
const index = this.componentIndex;
|
|
242
|
+
const seen = new Set();
|
|
243
|
+
return (this.outgoing.get(componentId) ?? [])
|
|
244
|
+
.filter((rel) => {
|
|
245
|
+
if (seen.has(rel.target))
|
|
246
|
+
return false;
|
|
247
|
+
seen.add(rel.target);
|
|
248
|
+
return true;
|
|
249
|
+
})
|
|
250
|
+
.map((rel) => index.byId.get(rel.target))
|
|
251
|
+
.filter((comp) => comp != null);
|
|
252
|
+
}
|
|
253
|
+
getComponentRelationships(componentId) {
|
|
254
|
+
if (!this.componentIndex || !this.relationships) {
|
|
255
|
+
throw AdapterError.notLoaded('likec4');
|
|
256
|
+
}
|
|
257
|
+
const index = this.componentIndex;
|
|
258
|
+
return (this.outgoing.get(componentId) ?? []).flatMap((rel) => {
|
|
259
|
+
const target = index.byId.get(rel.target);
|
|
260
|
+
if (!target)
|
|
261
|
+
return [];
|
|
262
|
+
const entry = { target };
|
|
263
|
+
if (rel.kind)
|
|
264
|
+
entry.kind = rel.kind;
|
|
265
|
+
if (rel.title)
|
|
266
|
+
entry.title = rel.title;
|
|
267
|
+
return [entry];
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
getComponentDependents(componentId) {
|
|
271
|
+
if (!this.componentIndex || !this.relationships) {
|
|
272
|
+
throw AdapterError.notLoaded('likec4');
|
|
273
|
+
}
|
|
274
|
+
const index = this.componentIndex;
|
|
275
|
+
const seen = new Set();
|
|
276
|
+
return (this.incoming.get(componentId) ?? [])
|
|
277
|
+
.filter((rel) => {
|
|
278
|
+
if (seen.has(rel.source))
|
|
279
|
+
return false;
|
|
280
|
+
seen.add(rel.source);
|
|
281
|
+
return true;
|
|
282
|
+
})
|
|
283
|
+
.map((rel) => index.byId.get(rel.source))
|
|
284
|
+
.filter((comp) => comp != null);
|
|
285
|
+
}
|
|
286
|
+
getAllComponents() {
|
|
287
|
+
if (!this.componentIndex) {
|
|
288
|
+
throw AdapterError.notLoaded('likec4');
|
|
289
|
+
}
|
|
290
|
+
return Array.from(this.componentIndex.byId.values());
|
|
291
|
+
}
|
|
292
|
+
getAllRelationships() {
|
|
293
|
+
if (!this.relationships) {
|
|
294
|
+
throw AdapterError.notLoaded('likec4');
|
|
295
|
+
}
|
|
296
|
+
return this.relationships;
|
|
297
|
+
}
|
|
298
|
+
checkVersion(path) {
|
|
299
|
+
return checkLikeC4Version(path);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/likec4/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl-validator.d.ts","sourceRoot":"","sources":["../../../src/adapters/likec4/dsl-validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG/D,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,mBAAmB,CAAC,CAwB9B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { withTempWorkspaceCopy } from '../dsl-validation.js';
|
|
2
|
+
export async function validateLikeC4Dsl(workspacePath, targetFile, patchedContent) {
|
|
3
|
+
try {
|
|
4
|
+
return await withTempWorkspaceCopy(workspacePath, targetFile, patchedContent, 'erode-likec4', async (_tmpTarget, tmpDir) => {
|
|
5
|
+
const { LikeC4 } = await import('likec4');
|
|
6
|
+
const likec4 = await LikeC4.fromWorkspace(tmpDir, { printErrors: false });
|
|
7
|
+
if (likec4.hasErrors()) {
|
|
8
|
+
const errors = likec4.getErrors();
|
|
9
|
+
return {
|
|
10
|
+
valid: false,
|
|
11
|
+
errors: errors.map((e) => e.message ?? JSON.stringify(e)),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
return { valid: true };
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// SDK unavailable or workspace copy failed
|
|
19
|
+
return { valid: false, skipped: true };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=dsl-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsl-validator.js","sourceRoot":"","sources":["../../../src/adapters/likec4/dsl-validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,aAAqB,EACrB,UAAkB,EAClB,cAAsB;IAEtB,IAAI,CAAC;QACH,OAAO,MAAM,qBAAqB,CAChC,aAAa,EACb,UAAU,EACV,cAAc,EACd,cAAc,EACd,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;YAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1E,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;gBAClC,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAuB,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;iBAChF,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC,CACF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;QAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/likec4/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/likec4/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LikeC4Element, LikeC4Relationship } from '../../schemas/likec4.schema.js';
|
|
2
|
+
export type { LikeC4Element, LikeC4Relationship };
|
|
3
|
+
export interface LikeC4Model {
|
|
4
|
+
elements(): Iterable<LikeC4Element>;
|
|
5
|
+
relationships(): Iterable<LikeC4Relationship>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=likec4-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"likec4-types.d.ts","sourceRoot":"","sources":["../../../src/adapters/likec4/likec4-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAExF,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,CAAC;AAElD,MAAM,WAAW,WAAW;IAC1B,QAAQ,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC;IACpC,aAAa,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAAC;CAC/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"likec4-types.js","sourceRoot":"","sources":["../../../src/adapters/likec4/likec4-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/adapters/likec4/metadata.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,eAAO,MAAM,eAAe,EAAE,eA2B7B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ErrorCode } from '../../errors.js';
|
|
2
|
+
export const LIKEC4_METADATA = {
|
|
3
|
+
id: 'likec4',
|
|
4
|
+
displayName: 'LikeC4',
|
|
5
|
+
documentationUrl: 'https://likec4.dev/dsl/links/',
|
|
6
|
+
fileExtensions: ['.c4'],
|
|
7
|
+
pathDescription: 'Directory containing LikeC4 model files',
|
|
8
|
+
prTitleTemplate: 'chore: update LikeC4 model for {{sourceRepo}}#{{prNumber}} — {{prTitle}}',
|
|
9
|
+
errorSuggestions: {
|
|
10
|
+
[ErrorCode.MODEL_LOAD_FAILED]: [
|
|
11
|
+
'Review the LikeC4 workspace configuration',
|
|
12
|
+
'Ensure all .c4 files are syntactically correct',
|
|
13
|
+
"Execute 'npm run validate' in the LikeC4 directory",
|
|
14
|
+
],
|
|
15
|
+
},
|
|
16
|
+
noComponentHelpLines: [
|
|
17
|
+
'Include a link directive on a component in your LikeC4 model:',
|
|
18
|
+
" my_component = service 'My Service' { link {{repoUrl}} }",
|
|
19
|
+
'Multiple components can share the same URL (monorepo support).',
|
|
20
|
+
'Use "erode validate [model-path]" to verify your model.',
|
|
21
|
+
'See: https://likec4.dev/dsl/links/',
|
|
22
|
+
],
|
|
23
|
+
missingLinksHelpLines: [
|
|
24
|
+
'Include a link directive to associate components with their repositories:',
|
|
25
|
+
" my_component = service 'My Service' { link https://github.com/org/repo }",
|
|
26
|
+
'Multiple components can share the same URL (monorepo support).',
|
|
27
|
+
'See: https://likec4.dev/dsl/links/',
|
|
28
|
+
],
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/adapters/likec4/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,EAAE,EAAE,QAAQ;IACZ,WAAW,EAAE,QAAQ;IACrB,gBAAgB,EAAE,+BAA+B;IACjD,cAAc,EAAE,CAAC,KAAK,CAAC;IACvB,eAAe,EAAE,yCAAyC;IAC1D,eAAe,EAAE,0EAA0E;IAC3F,gBAAgB,EAAE;QAChB,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE;YAC7B,2CAA2C;YAC3C,gDAAgD;YAChD,oDAAoD;SACrD;KACF;IACD,oBAAoB,EAAE;QACpB,+DAA+D;QAC/D,4DAA4D;QAC5D,gEAAgE;QAChE,yDAAyD;QACzD,oCAAoC;KACrC;IACD,qBAAqB,EAAE;QACrB,2EAA2E;QAC3E,4EAA4E;QAC5E,gEAAgE;QAChE,oCAAoC;KACrC;CACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BasePatcher } from '../base-patcher.js';
|
|
2
|
+
import type { StructuredRelationship, NewComponent } from '../../analysis/analysis-types.js';
|
|
3
|
+
import type { ModelRelationship } from '../architecture-types.js';
|
|
4
|
+
import type { DslValidationResult } from '../model-patcher.js';
|
|
5
|
+
export declare class LikeC4Patcher extends BasePatcher {
|
|
6
|
+
protected readonly formatName = "LikeC4Patcher";
|
|
7
|
+
protected readonly formatId = "likec4";
|
|
8
|
+
protected readonly defaultIndent = " ";
|
|
9
|
+
protected isModelBlockLine(line: string): boolean;
|
|
10
|
+
protected generateDslLines(unique: StructuredRelationship[], existing: ModelRelationship[]): string[];
|
|
11
|
+
protected generateComponentDslLines(components: NewComponent[]): string[];
|
|
12
|
+
protected findTargetFile(modelPath: string): string | null;
|
|
13
|
+
protected validateDsl(workspace: string, file: string, content: string): Promise<DslValidationResult>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=patcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patcher.d.ts","sourceRoot":"","sources":["../../../src/adapters/likec4/patcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,qBAAa,aAAc,SAAQ,WAAW;IAC5C,SAAS,CAAC,QAAQ,CAAC,UAAU,mBAAmB;IAChD,SAAS,CAAC,QAAQ,CAAC,QAAQ,YAAY;IACvC,SAAS,CAAC,QAAQ,CAAC,aAAa,QAAQ;IAExC,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjD,SAAS,CAAC,gBAAgB,CACxB,MAAM,EAAE,sBAAsB,EAAE,EAChC,QAAQ,EAAE,iBAAiB,EAAE,GAC5B,MAAM,EAAE;IAYX,SAAS,CAAC,yBAAyB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE;IAmBzE,SAAS,CAAC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;cA4B1C,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,CAAC;CAGhC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { readFileSync, readdirSync } from 'fs';
|
|
2
|
+
import { join, resolve } from 'path';
|
|
3
|
+
import { BasePatcher } from '../base-patcher.js';
|
|
4
|
+
import { validateLikeC4Dsl } from './dsl-validator.js';
|
|
5
|
+
export class LikeC4Patcher extends BasePatcher {
|
|
6
|
+
formatName = 'LikeC4Patcher';
|
|
7
|
+
formatId = 'likec4';
|
|
8
|
+
defaultIndent = ' ';
|
|
9
|
+
isModelBlockLine(line) {
|
|
10
|
+
return line.includes('model {') || line.includes('model{');
|
|
11
|
+
}
|
|
12
|
+
generateDslLines(unique, existing) {
|
|
13
|
+
const validKinds = new Set(existing.map((r) => r.kind).filter((k) => Boolean(k)));
|
|
14
|
+
this.debugLog('Valid relationship kinds in model', [...validKinds]);
|
|
15
|
+
return unique.map((rel) => {
|
|
16
|
+
const desc = rel.description.replace(/'/g, '');
|
|
17
|
+
if (rel.kind && validKinds.has(rel.kind)) {
|
|
18
|
+
return ` ${rel.source} -[${rel.kind}]-> ${rel.target} '${desc}'`;
|
|
19
|
+
}
|
|
20
|
+
return ` ${rel.source} -> ${rel.target} '${desc}'`;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
generateComponentDslLines(components) {
|
|
24
|
+
return components.map((comp) => {
|
|
25
|
+
const lines = [];
|
|
26
|
+
const name = comp.name.replace(/'/g, '');
|
|
27
|
+
lines.push(` ${comp.id} = ${comp.kind} '${name}' {`);
|
|
28
|
+
if (comp.tags && comp.tags.length > 0) {
|
|
29
|
+
lines.push(` ${comp.tags.map((t) => `#${t}`).join(' ')}`);
|
|
30
|
+
}
|
|
31
|
+
if (comp.description) {
|
|
32
|
+
lines.push(` description '${comp.description.replace(/'/g, '')}'`);
|
|
33
|
+
}
|
|
34
|
+
if (comp.technology) {
|
|
35
|
+
lines.push(` technology '${comp.technology.replace(/'/g, '')}'`);
|
|
36
|
+
}
|
|
37
|
+
lines.push(' }');
|
|
38
|
+
return lines.join('\n');
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
findTargetFile(modelPath) {
|
|
42
|
+
const resolvedPath = resolve(modelPath);
|
|
43
|
+
const c4Files = readdirSync(resolvedPath)
|
|
44
|
+
.filter((f) => f.endsWith('.c4'))
|
|
45
|
+
.map((f) => join(resolvedPath, f));
|
|
46
|
+
if (c4Files.length === 0)
|
|
47
|
+
return null;
|
|
48
|
+
// Prefer files with model blocks and existing relationships
|
|
49
|
+
for (const file of c4Files) {
|
|
50
|
+
const content = readFileSync(file, 'utf-8');
|
|
51
|
+
if (content.includes('model {') && content.includes('->')) {
|
|
52
|
+
return file;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Fall back to any file with a model block
|
|
56
|
+
for (const file of c4Files) {
|
|
57
|
+
const content = readFileSync(file, 'utf-8');
|
|
58
|
+
if (content.includes('model {')) {
|
|
59
|
+
return file;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Last resort: first .c4 file
|
|
63
|
+
return c4Files[0] ?? null;
|
|
64
|
+
}
|
|
65
|
+
async validateDsl(workspace, file, content) {
|
|
66
|
+
return validateLikeC4Dsl(workspace, file, content);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=patcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patcher.js","sourceRoot":"","sources":["../../../src/adapters/likec4/patcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { VersionCheckResult } from '../architecture-adapter.js';
|
|
2
|
+
interface SemVer {
|
|
3
|
+
major: number;
|
|
4
|
+
minor: number;
|
|
5
|
+
patch: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function extractMinVersion(range: string): SemVer | null;
|
|
8
|
+
export declare function isVersionBelow(version: SemVer, minimum: SemVer): boolean;
|
|
9
|
+
export declare function checkLikeC4Version(likec4Path: string): VersionCheckResult;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=version-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.d.ts","sourceRoot":"","sources":["../../../src/adapters/likec4/version-check.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAIrE,UAAU,MAAM;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAwBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAIxE;AAMD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,CAgCzE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { dirname, join } from 'path';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
const MIN_LIKEC4_VERSION = { major: 1, minor: 45, patch: 0 };
|
|
5
|
+
const SourcePackageJsonSchema = z.object({
|
|
6
|
+
dependencies: z.record(z.string(), z.string()).optional(),
|
|
7
|
+
devDependencies: z.record(z.string(), z.string()).optional(),
|
|
8
|
+
});
|
|
9
|
+
function findPackageJson(startPath) {
|
|
10
|
+
let current = startPath;
|
|
11
|
+
let parent = dirname(current);
|
|
12
|
+
do {
|
|
13
|
+
const candidate = join(current, 'package.json');
|
|
14
|
+
try {
|
|
15
|
+
readFileSync(candidate, 'utf-8');
|
|
16
|
+
return candidate;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// not found, walk up
|
|
20
|
+
}
|
|
21
|
+
current = parent;
|
|
22
|
+
parent = dirname(current);
|
|
23
|
+
} while (current !== parent);
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
export function extractMinVersion(range) {
|
|
27
|
+
const match = /(\d+)\.(\d+)\.(\d+)/.exec(range);
|
|
28
|
+
if (!match?.[1] || !match[2] || !match[3])
|
|
29
|
+
return null;
|
|
30
|
+
return {
|
|
31
|
+
major: parseInt(match[1], 10),
|
|
32
|
+
minor: parseInt(match[2], 10),
|
|
33
|
+
patch: parseInt(match[3], 10),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function isVersionBelow(version, minimum) {
|
|
37
|
+
if (version.major !== minimum.major)
|
|
38
|
+
return version.major < minimum.major;
|
|
39
|
+
if (version.minor !== minimum.minor)
|
|
40
|
+
return version.minor < minimum.minor;
|
|
41
|
+
return version.patch < minimum.patch;
|
|
42
|
+
}
|
|
43
|
+
function formatVersion(v) {
|
|
44
|
+
return `${String(v.major)}.${String(v.minor)}.${String(v.patch)}`;
|
|
45
|
+
}
|
|
46
|
+
export function checkLikeC4Version(likec4Path) {
|
|
47
|
+
const minimum = formatVersion(MIN_LIKEC4_VERSION);
|
|
48
|
+
const packageJsonPath = findPackageJson(likec4Path);
|
|
49
|
+
if (!packageJsonPath) {
|
|
50
|
+
return { found: false, minimum };
|
|
51
|
+
}
|
|
52
|
+
let parsed;
|
|
53
|
+
try {
|
|
54
|
+
const content = readFileSync(packageJsonPath, 'utf-8');
|
|
55
|
+
parsed = SourcePackageJsonSchema.parse(JSON.parse(content));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return { found: false, minimum };
|
|
59
|
+
}
|
|
60
|
+
const versionRange = parsed.dependencies?.['likec4'] ?? parsed.devDependencies?.['likec4'];
|
|
61
|
+
if (!versionRange) {
|
|
62
|
+
return { found: false, minimum };
|
|
63
|
+
}
|
|
64
|
+
const version = extractMinVersion(versionRange);
|
|
65
|
+
if (!version) {
|
|
66
|
+
return { found: false, minimum };
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
found: true,
|
|
70
|
+
version: formatVersion(version),
|
|
71
|
+
compatible: !isVersionBelow(version, MIN_LIKEC4_VERSION),
|
|
72
|
+
minimum,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=version-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../../src/adapters/likec4/version-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,kBAAkB,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAW,CAAC;AAQtE,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzD,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC7D,CAAC,CAAC;AAEH,SAAS,eAAe,CAAC,SAAiB;IACxC,IAAI,OAAO,GAAG,SAAS,CAAC;IACxB,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,GAAG,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjC,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;QACD,OAAO,GAAG,MAAM,CAAC;QACjB,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC,QAAQ,OAAO,KAAK,MAAM,EAAE;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,OAAe;IAC7D,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC1E,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC1E,OAAO,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,CAAS;IAC9B,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACnD,MAAM,OAAO,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAElD,MAAM,eAAe,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACpD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,IAAI,MAA+C,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC3F,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACnC,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;QAC/B,UAAU,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,kBAAkB,CAAC;QACxD,OAAO;KACR,CAAC;AACJ,CAAC"}
|