@domainlang/language 0.1.20 → 0.1.82
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/out/domain-lang-module.d.ts +0 -2
- package/out/domain-lang-module.js +3 -11
- package/out/domain-lang-module.js.map +1 -1
- package/out/generated/ast.d.ts +19 -8
- package/out/generated/ast.js +10 -1
- package/out/generated/ast.js.map +1 -1
- package/out/generated/grammar.d.ts +1 -1
- package/out/generated/grammar.js +123 -28
- package/out/generated/grammar.js.map +1 -1
- package/out/generated/module.d.ts +1 -1
- package/out/generated/module.js +1 -1
- package/out/index.d.ts +0 -3
- package/out/index.js +0 -5
- package/out/index.js.map +1 -1
- package/out/lsp/hover/domain-lang-hover.js +4 -0
- package/out/lsp/hover/domain-lang-hover.js.map +1 -1
- package/out/sdk/index.d.ts +1 -1
- package/out/sdk/loader-node.d.ts +3 -7
- package/out/sdk/loader-node.js +9 -24
- package/out/sdk/loader-node.js.map +1 -1
- package/out/sdk/types.d.ts +21 -0
- package/out/services/dependency-analyzer.d.ts +39 -3
- package/out/services/dependency-analyzer.js +47 -22
- package/out/services/dependency-analyzer.js.map +1 -1
- package/out/services/dependency-resolver.d.ts +45 -68
- package/out/services/dependency-resolver.js +43 -243
- package/out/services/dependency-resolver.js.map +1 -1
- package/out/services/git-url-resolver.browser.d.ts +12 -4
- package/out/services/git-url-resolver.browser.js +1 -5
- package/out/services/git-url-resolver.browser.js.map +1 -1
- package/out/services/git-url-resolver.d.ts +56 -22
- package/out/services/git-url-resolver.js +36 -70
- package/out/services/git-url-resolver.js.map +1 -1
- package/out/services/governance-validator.d.ts +37 -1
- package/out/services/governance-validator.js +10 -4
- package/out/services/governance-validator.js.map +1 -1
- package/out/services/import-resolver.d.ts +6 -65
- package/out/services/import-resolver.js +5 -223
- package/out/services/import-resolver.js.map +1 -1
- package/out/services/performance-optimizer.d.ts +1 -1
- package/out/services/workspace-manager.d.ts +10 -57
- package/out/services/workspace-manager.js +21 -187
- package/out/services/workspace-manager.js.map +1 -1
- package/out/syntaxes/domain-lang.monarch.js +1 -1
- package/out/syntaxes/domain-lang.monarch.js.map +1 -1
- package/out/utils/import-utils.d.ts +12 -4
- package/out/utils/import-utils.js +135 -35
- package/out/utils/import-utils.js.map +1 -1
- package/out/validation/constants.d.ts +0 -103
- package/out/validation/constants.js +1 -140
- package/out/validation/constants.js.map +1 -1
- package/out/validation/domain.js +1 -46
- package/out/validation/domain.js.map +1 -1
- package/out/validation/import.d.ts +22 -46
- package/out/validation/import.js +85 -187
- package/out/validation/import.js.map +1 -1
- package/out/validation/maps.js +6 -10
- package/out/validation/maps.js.map +1 -1
- package/out/validation/metadata.js +1 -5
- package/out/validation/metadata.js.map +1 -1
- package/package.json +6 -8
- package/src/domain-lang-module.ts +6 -18
- package/src/domain-lang.langium +12 -7
- package/src/generated/ast.ts +20 -7
- package/src/generated/grammar.ts +123 -28
- package/src/generated/module.ts +1 -1
- package/src/index.ts +0 -7
- package/src/lsp/hover/domain-lang-hover.ts +2 -0
- package/src/sdk/index.ts +2 -0
- package/src/sdk/loader-node.ts +9 -29
- package/src/sdk/types.ts +23 -0
- package/src/services/dependency-analyzer.ts +84 -24
- package/src/services/dependency-resolver.ts +84 -301
- package/src/services/git-url-resolver.browser.ts +14 -9
- package/src/services/git-url-resolver.ts +93 -86
- package/src/services/governance-validator.ts +47 -5
- package/src/services/import-resolver.ts +8 -270
- package/src/services/performance-optimizer.ts +1 -1
- package/src/services/workspace-manager.ts +46 -237
- package/src/syntaxes/domain-lang.monarch.ts +1 -1
- package/src/utils/import-utils.ts +160 -38
- package/src/validation/constants.ts +1 -181
- package/src/validation/domain.ts +1 -54
- package/src/validation/import.ts +104 -228
- package/src/validation/maps.ts +6 -10
- package/src/validation/metadata.ts +1 -5
- package/out/lsp/domain-lang-code-actions.d.ts +0 -55
- package/out/lsp/domain-lang-code-actions.js +0 -143
- package/out/lsp/domain-lang-code-actions.js.map +0 -1
- package/out/lsp/domain-lang-workspace-manager.d.ts +0 -21
- package/out/lsp/domain-lang-workspace-manager.js +0 -93
- package/out/lsp/domain-lang-workspace-manager.js.map +0 -1
- package/out/lsp/manifest-diagnostics.d.ts +0 -82
- package/out/lsp/manifest-diagnostics.js +0 -230
- package/out/lsp/manifest-diagnostics.js.map +0 -1
- package/out/services/semver.d.ts +0 -98
- package/out/services/semver.js +0 -195
- package/out/services/semver.js.map +0 -1
- package/out/services/types.d.ts +0 -340
- package/out/services/types.js +0 -46
- package/out/services/types.js.map +0 -1
- package/out/validation/manifest.d.ts +0 -144
- package/out/validation/manifest.js +0 -327
- package/out/validation/manifest.js.map +0 -1
- package/src/lsp/domain-lang-code-actions.ts +0 -189
- package/src/lsp/domain-lang-workspace-manager.ts +0 -104
- package/src/lsp/manifest-diagnostics.ts +0 -290
- package/src/services/semver.ts +0 -213
- package/src/services/types.ts +0 -415
- package/src/validation/manifest.ts +0 -439
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { DefaultWorkspaceManager, type FileSystemNode, type LangiumDocument, type LangiumSharedCoreServices, type WorkspaceFolder } from 'langium';
|
|
2
|
-
import type { CancellationToken } from 'vscode-languageserver-protocol';
|
|
3
|
-
/**
|
|
4
|
-
* Langium WorkspaceManager override implementing manifest-centric import loading per PRS-010.
|
|
5
|
-
*
|
|
6
|
-
* Behavior:
|
|
7
|
-
* - Skips pre-loading *.dlang during workspace scan (only entry graph is loaded when manifest exists).
|
|
8
|
-
* - Mode A (with manifest): find nearest model.yaml in folder, load entry (default index.dlang) and its import graph.
|
|
9
|
-
* - Mode B (no manifest): no pre-loading; imports resolved on-demand when a document is opened.
|
|
10
|
-
* - Never performs network fetches; relies on cached dependencies/lock files. Missing cache produces diagnostics upstream.
|
|
11
|
-
*/
|
|
12
|
-
export declare class DomainLangWorkspaceManager extends DefaultWorkspaceManager {
|
|
13
|
-
constructor(services: LangiumSharedCoreServices);
|
|
14
|
-
shouldIncludeEntry(entry: FileSystemNode): boolean;
|
|
15
|
-
initializeWorkspace(folders: WorkspaceFolder[], cancelToken?: CancellationToken): Promise<void>;
|
|
16
|
-
protected loadAdditionalDocuments(folders: WorkspaceFolder[], collector: (document: LangiumDocument) => void): Promise<void>;
|
|
17
|
-
private findManifestInFolders;
|
|
18
|
-
private findNearestManifest;
|
|
19
|
-
private readEntryFromManifest;
|
|
20
|
-
private pathExists;
|
|
21
|
-
}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import YAML from 'yaml';
|
|
3
|
-
import { DefaultWorkspaceManager, URI, UriUtils } from 'langium';
|
|
4
|
-
import { ensureImportGraphFromDocument } from '../utils/import-utils.js';
|
|
5
|
-
/**
|
|
6
|
-
* Langium WorkspaceManager override implementing manifest-centric import loading per PRS-010.
|
|
7
|
-
*
|
|
8
|
-
* Behavior:
|
|
9
|
-
* - Skips pre-loading *.dlang during workspace scan (only entry graph is loaded when manifest exists).
|
|
10
|
-
* - Mode A (with manifest): find nearest model.yaml in folder, load entry (default index.dlang) and its import graph.
|
|
11
|
-
* - Mode B (no manifest): no pre-loading; imports resolved on-demand when a document is opened.
|
|
12
|
-
* - Never performs network fetches; relies on cached dependencies/lock files. Missing cache produces diagnostics upstream.
|
|
13
|
-
*/
|
|
14
|
-
export class DomainLangWorkspaceManager extends DefaultWorkspaceManager {
|
|
15
|
-
constructor(services) {
|
|
16
|
-
super(services);
|
|
17
|
-
}
|
|
18
|
-
shouldIncludeEntry(entry) {
|
|
19
|
-
// Prevent auto-including .dlang files; we'll load via entry/import graph
|
|
20
|
-
const name = UriUtils.basename(entry.uri);
|
|
21
|
-
if (name.toLowerCase().endsWith('.dlang')) {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
return super.shouldIncludeEntry(entry);
|
|
25
|
-
}
|
|
26
|
-
async initializeWorkspace(folders, cancelToken) {
|
|
27
|
-
await super.initializeWorkspace(folders, cancelToken);
|
|
28
|
-
}
|
|
29
|
-
async loadAdditionalDocuments(folders, collector) {
|
|
30
|
-
const manifestInfo = await this.findManifestInFolders(folders);
|
|
31
|
-
if (!manifestInfo) {
|
|
32
|
-
return; // Mode B: no manifest
|
|
33
|
-
}
|
|
34
|
-
const entryUri = URI.file(manifestInfo.entryPath);
|
|
35
|
-
const entryDoc = await this.langiumDocuments.getOrCreateDocument(entryUri);
|
|
36
|
-
collector(entryDoc);
|
|
37
|
-
const uris = await ensureImportGraphFromDocument(entryDoc, this.langiumDocuments);
|
|
38
|
-
for (const uriString of uris) {
|
|
39
|
-
const uri = URI.parse(uriString);
|
|
40
|
-
const doc = await this.langiumDocuments.getOrCreateDocument(uri);
|
|
41
|
-
collector(doc);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
async findManifestInFolders(folders) {
|
|
45
|
-
for (const folder of folders) {
|
|
46
|
-
const manifestPath = await this.findNearestManifest(folder.uri);
|
|
47
|
-
if (manifestPath) {
|
|
48
|
-
const entry = await this.readEntryFromManifest(manifestPath) ?? 'index.dlang';
|
|
49
|
-
const entryPath = path.resolve(path.dirname(manifestPath), entry);
|
|
50
|
-
return { manifestPath, entryPath };
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return undefined;
|
|
54
|
-
}
|
|
55
|
-
async findNearestManifest(startUri) {
|
|
56
|
-
let current = path.resolve(URI.parse(startUri).fsPath);
|
|
57
|
-
const { root } = path.parse(current);
|
|
58
|
-
while (true) {
|
|
59
|
-
const candidate = path.join(current, 'model.yaml');
|
|
60
|
-
if (await this.pathExists(candidate)) {
|
|
61
|
-
return candidate;
|
|
62
|
-
}
|
|
63
|
-
if (current === root) {
|
|
64
|
-
return undefined;
|
|
65
|
-
}
|
|
66
|
-
const parent = path.dirname(current);
|
|
67
|
-
if (parent === current) {
|
|
68
|
-
return undefined;
|
|
69
|
-
}
|
|
70
|
-
current = parent;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
async readEntryFromManifest(manifestPath) {
|
|
74
|
-
try {
|
|
75
|
-
const content = await this.fileSystemProvider.readFile(URI.file(manifestPath));
|
|
76
|
-
const manifest = (YAML.parse(content) ?? {});
|
|
77
|
-
return manifest.model?.entry;
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
return undefined;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
async pathExists(target) {
|
|
84
|
-
try {
|
|
85
|
-
await this.fileSystemProvider.stat(URI.file(target));
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
return false;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
//# sourceMappingURL=domain-lang-workspace-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"domain-lang-workspace-manager.js","sourceRoot":"","sources":["../../src/lsp/domain-lang-workspace-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manifest Diagnostics Service for DomainLang.
|
|
3
|
-
*
|
|
4
|
-
* Provides LSP diagnostics for model.yaml files by integrating the ManifestValidator
|
|
5
|
-
* with the VS Code language server protocol.
|
|
6
|
-
*
|
|
7
|
-
* This service:
|
|
8
|
-
* - Validates model.yaml files using ManifestValidator
|
|
9
|
-
* - Converts ManifestDiagnostic to LSP Diagnostic format
|
|
10
|
-
* - Sends diagnostics to the LSP connection
|
|
11
|
-
*
|
|
12
|
-
* @module
|
|
13
|
-
*/
|
|
14
|
-
import type { Connection } from 'vscode-languageserver';
|
|
15
|
-
import { Diagnostic } from 'vscode-languageserver-types';
|
|
16
|
-
/**
|
|
17
|
-
* Service for validating model.yaml and sending diagnostics via LSP.
|
|
18
|
-
*/
|
|
19
|
-
export declare class ManifestDiagnosticsService {
|
|
20
|
-
private readonly validator;
|
|
21
|
-
private connection;
|
|
22
|
-
/**
|
|
23
|
-
* Sets the LSP connection for sending diagnostics.
|
|
24
|
-
* Must be called before validateAndSendDiagnostics.
|
|
25
|
-
*/
|
|
26
|
-
setConnection(connection: Connection): void;
|
|
27
|
-
/**
|
|
28
|
-
* Validates a model.yaml file and sends diagnostics to the LSP connection.
|
|
29
|
-
*
|
|
30
|
-
* @param manifestUri - URI of the model.yaml file
|
|
31
|
-
* @param content - Raw YAML content of the file
|
|
32
|
-
* @param options - Validation options
|
|
33
|
-
*/
|
|
34
|
-
validateAndSendDiagnostics(manifestUri: string, content: string, options?: {
|
|
35
|
-
requirePublishable?: boolean;
|
|
36
|
-
}): Promise<void>;
|
|
37
|
-
/**
|
|
38
|
-
* Validates manifest content and returns LSP diagnostics.
|
|
39
|
-
*
|
|
40
|
-
* @param content - Raw YAML content
|
|
41
|
-
* @param options - Validation options
|
|
42
|
-
* @returns Array of LSP diagnostics
|
|
43
|
-
*/
|
|
44
|
-
validate(content: string, options?: {
|
|
45
|
-
requirePublishable?: boolean;
|
|
46
|
-
}): Diagnostic[];
|
|
47
|
-
/**
|
|
48
|
-
* Converts a YAML error to an LSP Range.
|
|
49
|
-
*/
|
|
50
|
-
private yamlErrorToRange;
|
|
51
|
-
/**
|
|
52
|
-
* Clears diagnostics for a manifest file.
|
|
53
|
-
* Call this when the file is closed or deleted.
|
|
54
|
-
*/
|
|
55
|
-
clearDiagnostics(manifestUri: string): Promise<void>;
|
|
56
|
-
/**
|
|
57
|
-
* Converts a ManifestDiagnostic to an LSP Diagnostic.
|
|
58
|
-
*/
|
|
59
|
-
private toVSCodeDiagnostic;
|
|
60
|
-
/**
|
|
61
|
-
* Converts ManifestSeverity to LSP DiagnosticSeverity.
|
|
62
|
-
*/
|
|
63
|
-
private toVSCodeSeverity;
|
|
64
|
-
/**
|
|
65
|
-
* Finds the source range for a YAML path like "dependencies.core.version".
|
|
66
|
-
* Returns a fallback range at start of file if path not found.
|
|
67
|
-
*/
|
|
68
|
-
private findRangeForPath;
|
|
69
|
-
/**
|
|
70
|
-
* Converts byte offsets to a VS Code Range using line/column calculation.
|
|
71
|
-
*/
|
|
72
|
-
private offsetsToRange;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Gets or creates the manifest diagnostics service singleton.
|
|
76
|
-
*/
|
|
77
|
-
export declare function getManifestDiagnosticsService(): ManifestDiagnosticsService;
|
|
78
|
-
/**
|
|
79
|
-
* Helper to validate a manifest URI with the given content.
|
|
80
|
-
* Convenience function for use in file watchers.
|
|
81
|
-
*/
|
|
82
|
-
export declare function validateManifestFile(connection: Connection, manifestUri: string, content: string): Promise<void>;
|
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Manifest Diagnostics Service for DomainLang.
|
|
3
|
-
*
|
|
4
|
-
* Provides LSP diagnostics for model.yaml files by integrating the ManifestValidator
|
|
5
|
-
* with the VS Code language server protocol.
|
|
6
|
-
*
|
|
7
|
-
* This service:
|
|
8
|
-
* - Validates model.yaml files using ManifestValidator
|
|
9
|
-
* - Converts ManifestDiagnostic to LSP Diagnostic format
|
|
10
|
-
* - Sends diagnostics to the LSP connection
|
|
11
|
-
*
|
|
12
|
-
* @module
|
|
13
|
-
*/
|
|
14
|
-
import { DiagnosticSeverity, Position, Range } from 'vscode-languageserver-types';
|
|
15
|
-
import YAML, { isMap, isPair, isScalar } from 'yaml';
|
|
16
|
-
import { ManifestValidator } from '../validation/manifest.js';
|
|
17
|
-
/**
|
|
18
|
-
* Service for validating model.yaml and sending diagnostics via LSP.
|
|
19
|
-
*/
|
|
20
|
-
export class ManifestDiagnosticsService {
|
|
21
|
-
constructor() {
|
|
22
|
-
this.validator = new ManifestValidator();
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Sets the LSP connection for sending diagnostics.
|
|
26
|
-
* Must be called before validateAndSendDiagnostics.
|
|
27
|
-
*/
|
|
28
|
-
setConnection(connection) {
|
|
29
|
-
this.connection = connection;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Validates a model.yaml file and sends diagnostics to the LSP connection.
|
|
33
|
-
*
|
|
34
|
-
* @param manifestUri - URI of the model.yaml file
|
|
35
|
-
* @param content - Raw YAML content of the file
|
|
36
|
-
* @param options - Validation options
|
|
37
|
-
*/
|
|
38
|
-
async validateAndSendDiagnostics(manifestUri, content, options) {
|
|
39
|
-
if (!this.connection) {
|
|
40
|
-
return; // No connection, skip diagnostics
|
|
41
|
-
}
|
|
42
|
-
const diagnostics = this.validate(content, options);
|
|
43
|
-
await this.connection.sendDiagnostics({
|
|
44
|
-
uri: manifestUri,
|
|
45
|
-
diagnostics
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Validates manifest content and returns LSP diagnostics.
|
|
50
|
-
*
|
|
51
|
-
* @param content - Raw YAML content
|
|
52
|
-
* @param options - Validation options
|
|
53
|
-
* @returns Array of LSP diagnostics
|
|
54
|
-
*/
|
|
55
|
-
validate(content, options) {
|
|
56
|
-
// Parse YAML to get both the manifest object and source map
|
|
57
|
-
let yamlDoc;
|
|
58
|
-
let manifest;
|
|
59
|
-
try {
|
|
60
|
-
yamlDoc = YAML.parseDocument(content);
|
|
61
|
-
// Check for YAML parse errors (they're in the errors array, not thrown)
|
|
62
|
-
if (yamlDoc.errors && yamlDoc.errors.length > 0) {
|
|
63
|
-
return yamlDoc.errors.map(err => ({
|
|
64
|
-
severity: DiagnosticSeverity.Error,
|
|
65
|
-
range: this.yamlErrorToRange(err, content),
|
|
66
|
-
message: `YAML parse error: ${err.message}`,
|
|
67
|
-
source: 'domainlang'
|
|
68
|
-
}));
|
|
69
|
-
}
|
|
70
|
-
manifest = (yamlDoc.toJSON() ?? {});
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
// Fallback for unexpected errors
|
|
74
|
-
const message = error instanceof Error ? error.message : 'Invalid YAML syntax';
|
|
75
|
-
return [{
|
|
76
|
-
severity: DiagnosticSeverity.Error,
|
|
77
|
-
range: Range.create(Position.create(0, 0), Position.create(0, 1)),
|
|
78
|
-
message: `YAML parse error: ${message}`,
|
|
79
|
-
source: 'domainlang'
|
|
80
|
-
}];
|
|
81
|
-
}
|
|
82
|
-
// Run manifest validation
|
|
83
|
-
const result = this.validator.validate(manifest, options);
|
|
84
|
-
// Convert to LSP diagnostics with source locations
|
|
85
|
-
return result.diagnostics.map(diag => this.toVSCodeDiagnostic(diag, yamlDoc));
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Converts a YAML error to an LSP Range.
|
|
89
|
-
*/
|
|
90
|
-
yamlErrorToRange(err, _content) {
|
|
91
|
-
if (err.linePos && err.linePos.length >= 1) {
|
|
92
|
-
const startPos = err.linePos[0];
|
|
93
|
-
const startLine = startPos.line - 1; // YAML uses 1-based lines
|
|
94
|
-
const startCol = startPos.col - 1; // YAML uses 1-based columns
|
|
95
|
-
const endPos = err.linePos.length >= 2 ? err.linePos[1] : undefined;
|
|
96
|
-
const endLine = endPos ? endPos.line - 1 : startLine;
|
|
97
|
-
const endCol = endPos ? endPos.col - 1 : startCol + 1;
|
|
98
|
-
return Range.create(Position.create(startLine, startCol), Position.create(endLine, endCol));
|
|
99
|
-
}
|
|
100
|
-
return Range.create(Position.create(0, 0), Position.create(0, 1));
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Clears diagnostics for a manifest file.
|
|
104
|
-
* Call this when the file is closed or deleted.
|
|
105
|
-
*/
|
|
106
|
-
async clearDiagnostics(manifestUri) {
|
|
107
|
-
if (!this.connection) {
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
await this.connection.sendDiagnostics({
|
|
111
|
-
uri: manifestUri,
|
|
112
|
-
diagnostics: []
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Converts a ManifestDiagnostic to an LSP Diagnostic.
|
|
117
|
-
*/
|
|
118
|
-
toVSCodeDiagnostic(diag, yamlDoc) {
|
|
119
|
-
const range = this.findRangeForPath(diag.path, yamlDoc);
|
|
120
|
-
let message = diag.message;
|
|
121
|
-
if (diag.hint) {
|
|
122
|
-
message += `\nHint: ${diag.hint}`;
|
|
123
|
-
}
|
|
124
|
-
return {
|
|
125
|
-
severity: this.toVSCodeSeverity(diag.severity),
|
|
126
|
-
range,
|
|
127
|
-
message,
|
|
128
|
-
source: 'domainlang',
|
|
129
|
-
code: diag.code
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Converts ManifestSeverity to LSP DiagnosticSeverity.
|
|
134
|
-
*/
|
|
135
|
-
toVSCodeSeverity(severity) {
|
|
136
|
-
switch (severity) {
|
|
137
|
-
case 'error':
|
|
138
|
-
return DiagnosticSeverity.Error;
|
|
139
|
-
case 'warning':
|
|
140
|
-
return DiagnosticSeverity.Warning;
|
|
141
|
-
case 'info':
|
|
142
|
-
return DiagnosticSeverity.Information;
|
|
143
|
-
default:
|
|
144
|
-
return DiagnosticSeverity.Warning;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Finds the source range for a YAML path like "dependencies.core.version".
|
|
149
|
-
* Returns a fallback range at start of file if path not found.
|
|
150
|
-
*/
|
|
151
|
-
findRangeForPath(path, yamlDoc) {
|
|
152
|
-
const fallback = Range.create(Position.create(0, 0), Position.create(0, 1));
|
|
153
|
-
if (!yamlDoc.contents || !isMap(yamlDoc.contents)) {
|
|
154
|
-
return fallback;
|
|
155
|
-
}
|
|
156
|
-
const parts = path.split('.');
|
|
157
|
-
let currentNode = yamlDoc.contents;
|
|
158
|
-
for (const part of parts) {
|
|
159
|
-
if (!isMap(currentNode)) {
|
|
160
|
-
return fallback;
|
|
161
|
-
}
|
|
162
|
-
const mapNode = currentNode;
|
|
163
|
-
const item = mapNode.items.find((pair) => isPair(pair) && isScalar(pair.key) && String(pair.key.value) === part);
|
|
164
|
-
if (!item) {
|
|
165
|
-
return fallback;
|
|
166
|
-
}
|
|
167
|
-
// If this is the last part, return the range of the key
|
|
168
|
-
if (part === parts[parts.length - 1]) {
|
|
169
|
-
const keyNode = item.key;
|
|
170
|
-
if (isScalar(keyNode) && keyNode.range) {
|
|
171
|
-
const [start, end] = keyNode.range;
|
|
172
|
-
return this.offsetsToRange(start, end, yamlDoc.toString());
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
currentNode = item.value;
|
|
176
|
-
}
|
|
177
|
-
return fallback;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Converts byte offsets to a VS Code Range using line/column calculation.
|
|
181
|
-
*/
|
|
182
|
-
offsetsToRange(startOffset, endOffset, content) {
|
|
183
|
-
const lines = content.split('\n');
|
|
184
|
-
let currentOffset = 0;
|
|
185
|
-
let startLine = 0;
|
|
186
|
-
let startCol = 0;
|
|
187
|
-
let endLine = 0;
|
|
188
|
-
let endCol = 0;
|
|
189
|
-
let foundStart = false;
|
|
190
|
-
let foundEnd = false;
|
|
191
|
-
for (let lineNum = 0; lineNum < lines.length && !foundEnd; lineNum++) {
|
|
192
|
-
const lineLength = lines[lineNum].length + 1; // +1 for newline
|
|
193
|
-
if (!foundStart && currentOffset + lineLength > startOffset) {
|
|
194
|
-
startLine = lineNum;
|
|
195
|
-
startCol = startOffset - currentOffset;
|
|
196
|
-
foundStart = true;
|
|
197
|
-
}
|
|
198
|
-
if (!foundEnd && currentOffset + lineLength >= endOffset) {
|
|
199
|
-
endLine = lineNum;
|
|
200
|
-
endCol = endOffset - currentOffset;
|
|
201
|
-
foundEnd = true;
|
|
202
|
-
}
|
|
203
|
-
currentOffset += lineLength;
|
|
204
|
-
}
|
|
205
|
-
return Range.create(Position.create(startLine, startCol), Position.create(endLine, endCol));
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* Singleton instance for use across the language server.
|
|
210
|
-
*/
|
|
211
|
-
let manifestDiagnosticsService;
|
|
212
|
-
/**
|
|
213
|
-
* Gets or creates the manifest diagnostics service singleton.
|
|
214
|
-
*/
|
|
215
|
-
export function getManifestDiagnosticsService() {
|
|
216
|
-
if (!manifestDiagnosticsService) {
|
|
217
|
-
manifestDiagnosticsService = new ManifestDiagnosticsService();
|
|
218
|
-
}
|
|
219
|
-
return manifestDiagnosticsService;
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Helper to validate a manifest URI with the given content.
|
|
223
|
-
* Convenience function for use in file watchers.
|
|
224
|
-
*/
|
|
225
|
-
export async function validateManifestFile(connection, manifestUri, content) {
|
|
226
|
-
const service = getManifestDiagnosticsService();
|
|
227
|
-
service.setConnection(connection);
|
|
228
|
-
await service.validateAndSendDiagnostics(manifestUri, content);
|
|
229
|
-
}
|
|
230
|
-
//# sourceMappingURL=manifest-diagnostics.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-diagnostics.js","sourceRoot":"","sources":["../../src/lsp/manifest-diagnostics.ts"],"names":[],"mappings":"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"}
|
package/out/services/semver.d.ts
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Semantic Versioning Utilities
|
|
3
|
-
*
|
|
4
|
-
* Centralized SemVer parsing, comparison, and validation for the dependency system.
|
|
5
|
-
* All version-related logic should use these utilities to ensure consistency.
|
|
6
|
-
*
|
|
7
|
-
* Supported formats:
|
|
8
|
-
* - "1.0.0" or "v1.0.0" (tags)
|
|
9
|
-
* - "1.0.0-alpha.1" (pre-release)
|
|
10
|
-
* - "main", "develop" (branches)
|
|
11
|
-
* - "abc123def" (commit SHAs, 7-40 hex chars)
|
|
12
|
-
*/
|
|
13
|
-
import type { SemVer, RefType, ParsedRef } from './types.js';
|
|
14
|
-
/**
|
|
15
|
-
* Parses a version string into SemVer components.
|
|
16
|
-
* Returns undefined if not a valid SemVer.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* parseSemVer("v1.2.3") // { major: 1, minor: 2, patch: 3, original: "v1.2.3" }
|
|
20
|
-
* parseSemVer("1.0.0-alpha") // { major: 1, minor: 0, patch: 0, prerelease: "alpha", ... }
|
|
21
|
-
* parseSemVer("main") // undefined (not SemVer)
|
|
22
|
-
*/
|
|
23
|
-
export declare function parseSemVer(version: string): SemVer | undefined;
|
|
24
|
-
/**
|
|
25
|
-
* Detects the type of a git ref based on its format.
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* detectRefType("v1.0.0") // 'tag'
|
|
29
|
-
* detectRefType("1.2.3") // 'tag'
|
|
30
|
-
* detectRefType("main") // 'branch'
|
|
31
|
-
* detectRefType("abc123def") // 'commit'
|
|
32
|
-
*/
|
|
33
|
-
export declare function detectRefType(ref: string): RefType;
|
|
34
|
-
/**
|
|
35
|
-
* Parses a ref string into a structured ParsedRef with type and optional SemVer.
|
|
36
|
-
*/
|
|
37
|
-
export declare function parseRef(ref: string): ParsedRef;
|
|
38
|
-
/**
|
|
39
|
-
* Compares two SemVer versions.
|
|
40
|
-
* Returns: negative if a < b, positive if a > b, zero if equal.
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* compareSemVer(parse("1.0.0"), parse("2.0.0")) // negative (a < b)
|
|
44
|
-
* compareSemVer(parse("1.5.0"), parse("1.2.0")) // positive (a > b)
|
|
45
|
-
* compareSemVer(parse("1.0.0-alpha"), parse("1.0.0")) // negative (prerelease < release)
|
|
46
|
-
*/
|
|
47
|
-
export declare function compareSemVer(a: SemVer, b: SemVer): number;
|
|
48
|
-
/**
|
|
49
|
-
* Picks the latest from a list of SemVer refs.
|
|
50
|
-
* Returns the ref string (with original 'v' prefix if present).
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* pickLatestSemVer(["v1.0.0", "v1.5.0", "v1.2.0"]) // "v1.5.0"
|
|
54
|
-
*/
|
|
55
|
-
export declare function pickLatestSemVer(refs: string[]): string | undefined;
|
|
56
|
-
/**
|
|
57
|
-
* Sorts version strings in descending order (newest first).
|
|
58
|
-
* Non-SemVer refs are sorted lexicographically at the end.
|
|
59
|
-
*
|
|
60
|
-
* @example
|
|
61
|
-
* sortVersionsDescending(["v1.0.0", "v2.0.0", "v1.5.0"]) // ["v2.0.0", "v1.5.0", "v1.0.0"]
|
|
62
|
-
*/
|
|
63
|
-
export declare function sortVersionsDescending(versions: string[]): string[];
|
|
64
|
-
/**
|
|
65
|
-
* Checks if a version/ref is a pre-release.
|
|
66
|
-
*
|
|
67
|
-
* Pre-release identifiers: alpha, beta, rc, pre, dev, snapshot
|
|
68
|
-
*
|
|
69
|
-
* @example
|
|
70
|
-
* isPreRelease("v1.0.0") // false
|
|
71
|
-
* isPreRelease("v1.0.0-alpha") // true
|
|
72
|
-
* isPreRelease("v1.0.0-rc.1") // true
|
|
73
|
-
*/
|
|
74
|
-
export declare function isPreRelease(ref: string): boolean;
|
|
75
|
-
/**
|
|
76
|
-
* Checks if two SemVer versions are compatible (same major version).
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
* areSameMajor(parse("1.0.0"), parse("1.5.0")) // true
|
|
80
|
-
* areSameMajor(parse("1.0.0"), parse("2.0.0")) // false
|
|
81
|
-
*/
|
|
82
|
-
export declare function areSameMajor(a: SemVer, b: SemVer): boolean;
|
|
83
|
-
/**
|
|
84
|
-
* Gets the major version number from a ref string.
|
|
85
|
-
* Returns undefined if not a valid SemVer.
|
|
86
|
-
*/
|
|
87
|
-
export declare function getMajorVersion(ref: string): number | undefined;
|
|
88
|
-
/**
|
|
89
|
-
* Filters refs to only stable versions (excludes pre-releases).
|
|
90
|
-
*
|
|
91
|
-
* @example
|
|
92
|
-
* filterStableVersions(["v1.0.0", "v1.1.0-alpha", "v1.2.0"]) // ["v1.0.0", "v1.2.0"]
|
|
93
|
-
*/
|
|
94
|
-
export declare function filterStableVersions(refs: string[]): string[];
|
|
95
|
-
/**
|
|
96
|
-
* Filters refs to only SemVer tags (excludes branches and commits).
|
|
97
|
-
*/
|
|
98
|
-
export declare function filterSemVerTags(refs: string[]): string[];
|