@eventcatalog/language-server 0.5.0 → 0.6.1
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/browser.d.ts +22 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +20 -0
- package/dist/browser.js.map +1 -0
- package/dist/compiler.js +1 -1
- package/dist/compiler.js.map +1 -1
- package/dist/completion-data.d.ts +15 -0
- package/dist/completion-data.d.ts.map +1 -0
- package/dist/completion-data.js +453 -0
- package/dist/completion-data.js.map +1 -0
- package/dist/completion-utils.d.ts +29 -0
- package/dist/completion-utils.d.ts.map +1 -0
- package/dist/completion-utils.js +128 -0
- package/dist/completion-utils.js.map +1 -0
- package/dist/ec-completion-provider.d.ts +22 -1
- package/dist/ec-completion-provider.d.ts.map +1 -1
- package/dist/ec-completion-provider.js +461 -150
- package/dist/ec-completion-provider.js.map +1 -1
- package/dist/ec-definition-provider.d.ts +14 -0
- package/dist/ec-definition-provider.d.ts.map +1 -0
- package/dist/ec-definition-provider.js +123 -0
- package/dist/ec-definition-provider.js.map +1 -0
- package/dist/ec-formatter-provider.d.ts +10 -0
- package/dist/ec-formatter-provider.d.ts.map +1 -0
- package/dist/ec-formatter-provider.js +28 -0
- package/dist/ec-formatter-provider.js.map +1 -0
- package/dist/ec-hover-provider.d.ts +10 -0
- package/dist/ec-hover-provider.d.ts.map +1 -0
- package/dist/ec-hover-provider.js +41 -0
- package/dist/ec-hover-provider.js.map +1 -0
- package/dist/ec-module.d.ts +0 -6
- package/dist/ec-module.d.ts.map +1 -1
- package/dist/ec-module.js +0 -10
- package/dist/ec-module.js.map +1 -1
- package/dist/ec-resource-index.d.ts +64 -0
- package/dist/ec-resource-index.d.ts.map +1 -0
- package/dist/ec-resource-index.js +281 -0
- package/dist/ec-resource-index.js.map +1 -0
- package/dist/ec-validator.d.ts.map +1 -1
- package/dist/ec-validator.js +22 -87
- package/dist/ec-validator.js.map +1 -1
- package/dist/generated/ast.d.ts +2 -2
- package/dist/generated/ast.d.ts.map +1 -1
- package/dist/generated/ast.js +1 -1
- package/dist/generated/ast.js.map +1 -1
- package/dist/generated/grammar.d.ts.map +1 -1
- package/dist/generated/grammar.js +103 -53
- package/dist/generated/grammar.js.map +1 -1
- package/dist/graph.d.ts.map +1 -1
- package/dist/graph.js +83 -35
- package/dist/graph.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/main.js +16 -1
- package/dist/main.js.map +1 -1
- package/dist/resolvers/asyncapi.d.ts +10 -16
- package/dist/resolvers/asyncapi.d.ts.map +1 -1
- package/dist/resolvers/asyncapi.js +60 -235
- package/dist/resolvers/asyncapi.js.map +1 -1
- package/dist/resolvers/catalog.d.ts +34 -0
- package/dist/resolvers/catalog.d.ts.map +1 -0
- package/dist/resolvers/catalog.js +291 -0
- package/dist/resolvers/catalog.js.map +1 -0
- package/dist/resolvers/index.d.ts +8 -1
- package/dist/resolvers/index.d.ts.map +1 -1
- package/dist/resolvers/index.js +7 -1
- package/dist/resolvers/index.js.map +1 -1
- package/dist/resolvers/openapi.d.ts +44 -0
- package/dist/resolvers/openapi.d.ts.map +1 -0
- package/dist/resolvers/openapi.js +212 -0
- package/dist/resolvers/openapi.js.map +1 -0
- package/dist/resolvers/resolve.d.ts +28 -0
- package/dist/resolvers/resolve.d.ts.map +1 -0
- package/dist/resolvers/resolve.js +485 -0
- package/dist/resolvers/resolve.js.map +1 -0
- package/dist/resolvers/types.d.ts +17 -1
- package/dist/resolvers/types.d.ts.map +1 -1
- package/dist/resolvers/types.js +11 -1
- package/dist/resolvers/types.js.map +1 -1
- package/package.json +7 -2
- package/specification/03-event.md +1 -0
- package/specification/04-command.md +4 -1
- package/specification/05-query.md +4 -1
- package/specification/06-channel.md +24 -4
- package/specification/16-annotations.md +52 -0
- package/syntaxes/ec.tmLanguage.json +1 -1
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
import yaml from "js-yaml";
|
|
2
|
+
import { isCatalogPath, } from "./types.js";
|
|
3
|
+
import { parseSpec, extractService, messageToEc, channelToEc, containerToEc, serviceToEc, } from "./asyncapi.js";
|
|
4
|
+
import { parseOpenApiSpec, extractOpenApiService, openApiServiceToEc, openApiMessageToEc, } from "./openapi.js";
|
|
5
|
+
// Matches: import events { OrderCreated } from "./spec.yml"
|
|
6
|
+
// Matches: import channels { orderEvents } from "./spec.yml"
|
|
7
|
+
// Matches: import events { OrderCreated } from "https://example.com/spec.yml"
|
|
8
|
+
// Also matches .json files for OpenAPI specs
|
|
9
|
+
const SPEC_IMPORT_RE = /^\s*import\s+(events|commands|queries|channels)\s*\{([^}]*)\}\s*from\s*"([^"]+\.(?:ya?ml|json))"\s*(?:\/\/.*)?$/gm;
|
|
10
|
+
// Matches: import OrderService from "./spec.yml"
|
|
11
|
+
// A bare identifier (no braces, no resource type keyword) imports a full service
|
|
12
|
+
// Also matches .json files for OpenAPI specs
|
|
13
|
+
const SERVICE_IMPORT_RE = /^\s*import\s+([A-Z][a-zA-Z0-9_]*)\s+from\s*"([^"]+\.(?:ya?ml|json))"\s*(?:\/\/.*)?$/gm;
|
|
14
|
+
// Matches: import events { OrderCreated } from "./my-catalog"
|
|
15
|
+
// Matches: import services { OrderService } from "./my-catalog"
|
|
16
|
+
// Matches: import containers { PaymentsDB } from "./my-catalog"
|
|
17
|
+
// Catches any typed import whose path is NOT a spec file and NOT a URL (i.e., a directory path).
|
|
18
|
+
// Uses the same shape as SPEC_IMPORT_RE but with a generic path capture.
|
|
19
|
+
const CATALOG_IMPORT_RE = /^\s*import\s+(events|commands|queries|channels|services|containers)\s*\{([^}]*)\}\s*from\s*"([^"]+)"\s*(?:\/\/.*)?$/gm;
|
|
20
|
+
/**
|
|
21
|
+
* Detect whether a spec document is AsyncAPI or OpenAPI based on its content.
|
|
22
|
+
*/
|
|
23
|
+
export function detectSpecType(content) {
|
|
24
|
+
try {
|
|
25
|
+
let doc;
|
|
26
|
+
try {
|
|
27
|
+
doc = JSON.parse(content);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
doc = yaml.load(content);
|
|
31
|
+
}
|
|
32
|
+
if (!doc || typeof doc !== "object")
|
|
33
|
+
return "unknown";
|
|
34
|
+
if (doc.asyncapi)
|
|
35
|
+
return "asyncapi";
|
|
36
|
+
if (doc.openapi)
|
|
37
|
+
return "openapi";
|
|
38
|
+
return "unknown";
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return "unknown";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function findImports(source) {
|
|
45
|
+
const imports = [];
|
|
46
|
+
SPEC_IMPORT_RE.lastIndex = 0;
|
|
47
|
+
let match;
|
|
48
|
+
while ((match = SPEC_IMPORT_RE.exec(source)) !== null) {
|
|
49
|
+
imports.push({
|
|
50
|
+
full: match[0],
|
|
51
|
+
resourceType: match[1],
|
|
52
|
+
importNames: match[2]
|
|
53
|
+
.split(",")
|
|
54
|
+
.map((s) => s.trim())
|
|
55
|
+
.filter(Boolean),
|
|
56
|
+
specPath: match[3],
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return imports;
|
|
60
|
+
}
|
|
61
|
+
function findServiceImports(source) {
|
|
62
|
+
const imports = [];
|
|
63
|
+
SERVICE_IMPORT_RE.lastIndex = 0;
|
|
64
|
+
let match;
|
|
65
|
+
while ((match = SERVICE_IMPORT_RE.exec(source)) !== null) {
|
|
66
|
+
imports.push({
|
|
67
|
+
full: match[0],
|
|
68
|
+
serviceName: match[1],
|
|
69
|
+
specPath: match[2],
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return imports;
|
|
73
|
+
}
|
|
74
|
+
function findCatalogImports(source) {
|
|
75
|
+
const imports = [];
|
|
76
|
+
CATALOG_IMPORT_RE.lastIndex = 0;
|
|
77
|
+
let match;
|
|
78
|
+
while ((match = CATALOG_IMPORT_RE.exec(source)) !== null) {
|
|
79
|
+
const specPath = match[3];
|
|
80
|
+
// Only keep matches that are catalog paths (not spec files, not URLs)
|
|
81
|
+
if (!isCatalogPath(specPath))
|
|
82
|
+
continue;
|
|
83
|
+
imports.push({
|
|
84
|
+
full: match[0],
|
|
85
|
+
resourceType: match[1],
|
|
86
|
+
importNames: match[2]
|
|
87
|
+
.split(",")
|
|
88
|
+
.map((s) => s.trim())
|
|
89
|
+
.filter(Boolean),
|
|
90
|
+
specPath,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return imports;
|
|
94
|
+
}
|
|
95
|
+
async function resolveCatalogImportToEc(imp, basePath, importingFile) {
|
|
96
|
+
// Dynamic imports to avoid pulling Node.js/SDK deps into browser builds
|
|
97
|
+
const { resolve, dirname, isAbsolute } = await import("node:path");
|
|
98
|
+
// Resolve relative paths against the importing file's directory when available,
|
|
99
|
+
// falling back to basePath for absolute paths or when the file is unknown.
|
|
100
|
+
let catalogDir;
|
|
101
|
+
if (importingFile && !isAbsolute(imp.specPath)) {
|
|
102
|
+
const fileDir = resolve(basePath, dirname(importingFile));
|
|
103
|
+
catalogDir = resolve(fileDir, imp.specPath);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
catalogDir = resolve(basePath, imp.specPath);
|
|
107
|
+
}
|
|
108
|
+
// Service imports use a different code path
|
|
109
|
+
if (imp.resourceType === "services") {
|
|
110
|
+
const { parseCatalogServices } = await import("./catalog.js");
|
|
111
|
+
const { services, errors } = await parseCatalogServices(catalogDir);
|
|
112
|
+
const ecDefs = imp.importNames.map((name) => {
|
|
113
|
+
const svc = services.get(name);
|
|
114
|
+
if (!svc) {
|
|
115
|
+
errors.push({
|
|
116
|
+
message: `Service "${name}" not found in catalog "${imp.specPath}". Available: ${[...services.keys()].join(", ") || "(none)"}`,
|
|
117
|
+
line: 1,
|
|
118
|
+
column: 1,
|
|
119
|
+
});
|
|
120
|
+
return `// ERROR: Service "${name}" not found in catalog ${imp.specPath}`;
|
|
121
|
+
}
|
|
122
|
+
return serviceToEc(svc);
|
|
123
|
+
});
|
|
124
|
+
return { ec: ecDefs.join("\n\n"), errors };
|
|
125
|
+
}
|
|
126
|
+
// Channel imports use a dedicated resolver to capture address/protocol
|
|
127
|
+
if (imp.resourceType === "channels") {
|
|
128
|
+
const { parseCatalogChannels } = await import("./catalog.js");
|
|
129
|
+
const { channels, errors } = await parseCatalogChannels(catalogDir);
|
|
130
|
+
const ecDefs = imp.importNames.map((name) => {
|
|
131
|
+
const ch = channels.get(name);
|
|
132
|
+
if (!ch) {
|
|
133
|
+
errors.push({
|
|
134
|
+
message: `Channel "${name}" not found in catalog "${imp.specPath}". Available: ${[...channels.keys()].join(", ") || "(none)"}`,
|
|
135
|
+
line: 1,
|
|
136
|
+
column: 1,
|
|
137
|
+
});
|
|
138
|
+
return `// ERROR: Channel "${name}" not found in catalog ${imp.specPath}`;
|
|
139
|
+
}
|
|
140
|
+
return channelToEc(ch);
|
|
141
|
+
});
|
|
142
|
+
return { ec: ecDefs.join("\n\n"), errors };
|
|
143
|
+
}
|
|
144
|
+
const { parseCatalogResources } = await import("./catalog.js");
|
|
145
|
+
const { messages, errors } = await parseCatalogResources(catalogDir, imp.resourceType);
|
|
146
|
+
const ecDefs = imp.importNames.map((name) => {
|
|
147
|
+
const msg = messages.get(name);
|
|
148
|
+
if (!msg) {
|
|
149
|
+
errors.push({
|
|
150
|
+
message: `"${name}" not found in catalog "${imp.specPath}". Available: ${[...messages.keys()].join(", ") || "(none)"}`,
|
|
151
|
+
line: 1,
|
|
152
|
+
column: 1,
|
|
153
|
+
});
|
|
154
|
+
return `// ERROR: "${name}" not found in catalog ${imp.specPath}`;
|
|
155
|
+
}
|
|
156
|
+
return imp.resourceType === "containers"
|
|
157
|
+
? containerToEc(msg)
|
|
158
|
+
: messageToEc(msg, imp.resourceType);
|
|
159
|
+
});
|
|
160
|
+
return { ec: ecDefs.join("\n\n"), errors };
|
|
161
|
+
}
|
|
162
|
+
function resolveAsyncApiImportToEc(imp, specContent, cachedParsedSpecs) {
|
|
163
|
+
const errors = [];
|
|
164
|
+
const cacheKey = normalizeSpecKey(imp.specPath);
|
|
165
|
+
if (!cachedParsedSpecs.has(cacheKey)) {
|
|
166
|
+
const parsed = parseSpec(specContent);
|
|
167
|
+
cachedParsedSpecs.set(cacheKey, parsed);
|
|
168
|
+
errors.push(...parsed.errors);
|
|
169
|
+
}
|
|
170
|
+
const parsed = cachedParsedSpecs.get(cacheKey);
|
|
171
|
+
const isChannelImport = imp.resourceType === "channels";
|
|
172
|
+
const catalog = isChannelImport ? parsed.channels : parsed.messages;
|
|
173
|
+
const typeName = isChannelImport ? "Channel" : "Message";
|
|
174
|
+
const ecDefs = imp.importNames.map((name) => {
|
|
175
|
+
const resource = catalog.get(name);
|
|
176
|
+
if (!resource) {
|
|
177
|
+
errors.push({
|
|
178
|
+
message: `${typeName} "${name}" not found in AsyncAPI spec "${imp.specPath}". Available: ${[...catalog.keys()].join(", ") || "(none)"}`,
|
|
179
|
+
line: 1,
|
|
180
|
+
column: 1,
|
|
181
|
+
});
|
|
182
|
+
return `// ERROR: "${name}" not found in ${imp.specPath}`;
|
|
183
|
+
}
|
|
184
|
+
return isChannelImport
|
|
185
|
+
? channelToEc(resource)
|
|
186
|
+
: messageToEc(resource, imp.resourceType);
|
|
187
|
+
});
|
|
188
|
+
return { ec: ecDefs.join("\n\n"), errors };
|
|
189
|
+
}
|
|
190
|
+
function resolveOpenApiImportToEc(imp, specContent, cachedParsedSpecs) {
|
|
191
|
+
const errors = [];
|
|
192
|
+
// OpenAPI does not support event or channel imports
|
|
193
|
+
if (imp.resourceType === "events") {
|
|
194
|
+
errors.push({
|
|
195
|
+
message: `OpenAPI specs contain commands and queries, not events. Use "import commands" or "import queries" instead for "${imp.specPath}".`,
|
|
196
|
+
line: 1,
|
|
197
|
+
column: 1,
|
|
198
|
+
});
|
|
199
|
+
return {
|
|
200
|
+
ec: `// ERROR: OpenAPI specs do not contain events`,
|
|
201
|
+
errors,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
if (imp.resourceType === "channels") {
|
|
205
|
+
errors.push({
|
|
206
|
+
message: `OpenAPI specs do not contain channels for "${imp.specPath}".`,
|
|
207
|
+
line: 1,
|
|
208
|
+
column: 1,
|
|
209
|
+
});
|
|
210
|
+
return {
|
|
211
|
+
ec: `// ERROR: OpenAPI specs do not contain channels`,
|
|
212
|
+
errors,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const cacheKey = normalizeSpecKey(imp.specPath);
|
|
216
|
+
if (!cachedParsedSpecs.has(cacheKey)) {
|
|
217
|
+
const parsed = parseOpenApiSpec(specContent);
|
|
218
|
+
cachedParsedSpecs.set(cacheKey, parsed);
|
|
219
|
+
errors.push(...parsed.errors);
|
|
220
|
+
}
|
|
221
|
+
const parsed = cachedParsedSpecs.get(cacheKey);
|
|
222
|
+
// Map the import keyword to the expected message type
|
|
223
|
+
const expectedType = imp.resourceType === "commands" ? "command" : "query";
|
|
224
|
+
const ecDefs = imp.importNames.map((name) => {
|
|
225
|
+
const msg = parsed.messages.get(name);
|
|
226
|
+
if (!msg) {
|
|
227
|
+
errors.push({
|
|
228
|
+
message: `Message "${name}" not found in OpenAPI spec "${imp.specPath}". Available: ${[...parsed.messages.keys()].join(", ") || "(none)"}`,
|
|
229
|
+
line: 1,
|
|
230
|
+
column: 1,
|
|
231
|
+
});
|
|
232
|
+
return `// ERROR: "${name}" not found in ${imp.specPath}`;
|
|
233
|
+
}
|
|
234
|
+
// Enforce that the message type matches the import keyword
|
|
235
|
+
if (msg.messageType !== expectedType) {
|
|
236
|
+
errors.push({
|
|
237
|
+
message: `"${name}" is a ${msg.messageType} but was imported as "${imp.resourceType}" in "${imp.specPath}". Use "import ${msg.messageType === "command" ? "commands" : "queries"} { ${name} }" instead.`,
|
|
238
|
+
line: 1,
|
|
239
|
+
column: 1,
|
|
240
|
+
});
|
|
241
|
+
return `// ERROR: "${name}" is a ${msg.messageType}, not a ${expectedType}`;
|
|
242
|
+
}
|
|
243
|
+
return openApiMessageToEc(msg);
|
|
244
|
+
});
|
|
245
|
+
return { ec: ecDefs.join("\n\n"), errors };
|
|
246
|
+
}
|
|
247
|
+
function resolveServiceImportToEc(imp, specContent, specType) {
|
|
248
|
+
if (specType === "openapi") {
|
|
249
|
+
const { service, errors } = extractOpenApiService(specContent, imp.serviceName);
|
|
250
|
+
return { ec: openApiServiceToEc(service), errors };
|
|
251
|
+
}
|
|
252
|
+
// Default to AsyncAPI
|
|
253
|
+
const { service, errors } = extractService(specContent, imp.serviceName);
|
|
254
|
+
return { ec: serviceToEc(service), errors };
|
|
255
|
+
}
|
|
256
|
+
function isUrl(path) {
|
|
257
|
+
return path.startsWith("https://") || path.startsWith("http://");
|
|
258
|
+
}
|
|
259
|
+
function normalizeSpecKey(specPath) {
|
|
260
|
+
return isUrl(specPath) ? specPath : specPath.replace(/^\.\//, "");
|
|
261
|
+
}
|
|
262
|
+
function lookupLocalSpec(specPath, files) {
|
|
263
|
+
const normalizedPath = specPath.replace(/^\.\//, "");
|
|
264
|
+
return (files[specPath] ?? files[normalizedPath] ?? files[`./${normalizedPath}`]);
|
|
265
|
+
}
|
|
266
|
+
export function isSpecFile(filename) {
|
|
267
|
+
return (filename.endsWith(".yml") ||
|
|
268
|
+
filename.endsWith(".yaml") ||
|
|
269
|
+
filename.endsWith(".json"));
|
|
270
|
+
}
|
|
271
|
+
const SKIP = Symbol("skip");
|
|
272
|
+
/**
|
|
273
|
+
* Core resolution logic shared by sync and async resolvers.
|
|
274
|
+
* Given a spec content lookup function, resolves all imports in .ec files.
|
|
275
|
+
* Auto-detects whether each spec is AsyncAPI or OpenAPI.
|
|
276
|
+
* Return `SKIP` from the callback to leave an import untouched;
|
|
277
|
+
* return `undefined` to replace it with an error comment.
|
|
278
|
+
*/
|
|
279
|
+
function resolveFileImports(files, getSpecContent) {
|
|
280
|
+
const errors = [];
|
|
281
|
+
const newFiles = {};
|
|
282
|
+
const cachedAsyncApiSpecs = new Map();
|
|
283
|
+
const cachedOpenApiSpecs = new Map();
|
|
284
|
+
const specTypeCache = new Map();
|
|
285
|
+
function getSpecType(specPath, content) {
|
|
286
|
+
const cacheKey = normalizeSpecKey(specPath);
|
|
287
|
+
if (!specTypeCache.has(cacheKey)) {
|
|
288
|
+
specTypeCache.set(cacheKey, detectSpecType(content));
|
|
289
|
+
}
|
|
290
|
+
return specTypeCache.get(cacheKey);
|
|
291
|
+
}
|
|
292
|
+
for (const [filename, source] of Object.entries(files)) {
|
|
293
|
+
if (isSpecFile(filename))
|
|
294
|
+
continue;
|
|
295
|
+
const imports = findImports(source);
|
|
296
|
+
const serviceImports = findServiceImports(source);
|
|
297
|
+
if (imports.length === 0 && serviceImports.length === 0) {
|
|
298
|
+
newFiles[filename] = source;
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
let result = source;
|
|
302
|
+
// Resolve resource imports (import events { ... } from "spec.yml")
|
|
303
|
+
for (const imp of imports) {
|
|
304
|
+
const specContent = getSpecContent(imp.specPath);
|
|
305
|
+
if (specContent === SKIP)
|
|
306
|
+
continue;
|
|
307
|
+
if (!specContent) {
|
|
308
|
+
result = result.replace(imp.full, `// ERROR: Spec file not available: ${imp.specPath}`);
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
const specType = getSpecType(imp.specPath, specContent);
|
|
312
|
+
let resolution;
|
|
313
|
+
if (specType === "openapi") {
|
|
314
|
+
resolution = resolveOpenApiImportToEc(imp, specContent, cachedOpenApiSpecs);
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
resolution = resolveAsyncApiImportToEc(imp, specContent, cachedAsyncApiSpecs);
|
|
318
|
+
}
|
|
319
|
+
errors.push(...resolution.errors);
|
|
320
|
+
result = result.replace(imp.full, resolution.ec);
|
|
321
|
+
}
|
|
322
|
+
// Resolve service imports (import ServiceName from "spec.yml")
|
|
323
|
+
for (const imp of serviceImports) {
|
|
324
|
+
const specContent = getSpecContent(imp.specPath);
|
|
325
|
+
if (specContent === SKIP)
|
|
326
|
+
continue;
|
|
327
|
+
if (!specContent) {
|
|
328
|
+
result = result.replace(imp.full, `// ERROR: Spec file not available: ${imp.specPath}`);
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
const specType = getSpecType(imp.specPath, specContent);
|
|
332
|
+
const resolution = resolveServiceImportToEc(imp, specContent, specType);
|
|
333
|
+
errors.push(...resolution.errors);
|
|
334
|
+
result = result.replace(imp.full, resolution.ec);
|
|
335
|
+
}
|
|
336
|
+
newFiles[filename] = result;
|
|
337
|
+
}
|
|
338
|
+
return { files: newFiles, errors };
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Resolve all spec imports in a set of files (sync, local files only).
|
|
342
|
+
* Scans .ec files for `import <type> { ... } from "*.yml"` and
|
|
343
|
+
* `import ServiceName from "*.yml"` statements, auto-detects whether
|
|
344
|
+
* each spec is AsyncAPI or OpenAPI, and replaces the imports with
|
|
345
|
+
* synthesized .ec definitions.
|
|
346
|
+
* Spec files (YAML/JSON) are excluded from the output.
|
|
347
|
+
* URL imports are left untouched - use resolveSpecImportsAsync for those.
|
|
348
|
+
*/
|
|
349
|
+
export function resolveSpecImports(files) {
|
|
350
|
+
const notFoundErrors = [];
|
|
351
|
+
const result = resolveFileImports(files, (specPath) => {
|
|
352
|
+
if (isUrl(specPath))
|
|
353
|
+
return SKIP;
|
|
354
|
+
const content = lookupLocalSpec(specPath, files);
|
|
355
|
+
if (!content) {
|
|
356
|
+
notFoundErrors.push({
|
|
357
|
+
message: `Spec file not found: "${specPath}"`,
|
|
358
|
+
line: 1,
|
|
359
|
+
column: 1,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
return content;
|
|
363
|
+
});
|
|
364
|
+
return {
|
|
365
|
+
files: result.files,
|
|
366
|
+
errors: [...notFoundErrors, ...result.errors],
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Resolve all spec imports including remote URLs (async).
|
|
371
|
+
* Fetches remote specs via the provided fetchFn, then resolves all imports.
|
|
372
|
+
* Auto-detects AsyncAPI vs OpenAPI from file content.
|
|
373
|
+
* For local file imports, looks them up in the files map.
|
|
374
|
+
* When basePath is provided, also resolves catalog directory imports
|
|
375
|
+
* (e.g., `import events { OrderCreated } from "./my-catalog"`).
|
|
376
|
+
*/
|
|
377
|
+
export async function resolveSpecImportsAsync(files, fetchFn, basePath) {
|
|
378
|
+
// Collect all unique remote URLs that need fetching
|
|
379
|
+
const urlsToFetch = new Set();
|
|
380
|
+
for (const [filename, source] of Object.entries(files)) {
|
|
381
|
+
if (isSpecFile(filename))
|
|
382
|
+
continue;
|
|
383
|
+
for (const imp of findImports(source)) {
|
|
384
|
+
if (isUrl(imp.specPath))
|
|
385
|
+
urlsToFetch.add(imp.specPath);
|
|
386
|
+
}
|
|
387
|
+
for (const imp of findServiceImports(source)) {
|
|
388
|
+
if (isUrl(imp.specPath))
|
|
389
|
+
urlsToFetch.add(imp.specPath);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
// Fetch all remote specs in parallel
|
|
393
|
+
const fetchErrors = [];
|
|
394
|
+
const fetchedSpecs = new Map();
|
|
395
|
+
await Promise.all([...urlsToFetch].map(async (url) => {
|
|
396
|
+
try {
|
|
397
|
+
fetchedSpecs.set(url, await fetchFn(url));
|
|
398
|
+
}
|
|
399
|
+
catch (err) {
|
|
400
|
+
fetchErrors.push({
|
|
401
|
+
message: `Failed to fetch spec "${url}": ${String(err)}`,
|
|
402
|
+
line: 1,
|
|
403
|
+
column: 1,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
}));
|
|
407
|
+
const notFoundErrors = [];
|
|
408
|
+
const result = resolveFileImports(files, (specPath) => {
|
|
409
|
+
if (isUrl(specPath))
|
|
410
|
+
return fetchedSpecs.get(specPath);
|
|
411
|
+
const content = lookupLocalSpec(specPath, files);
|
|
412
|
+
if (!content) {
|
|
413
|
+
notFoundErrors.push({
|
|
414
|
+
message: `Spec file not found: "${specPath}"`,
|
|
415
|
+
line: 1,
|
|
416
|
+
column: 1,
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
return content;
|
|
420
|
+
});
|
|
421
|
+
// Resolve catalog directory imports (import events { ... } from "./my-catalog")
|
|
422
|
+
// Only when basePath is provided (Node.js/VSCode context, not browser)
|
|
423
|
+
if (basePath) {
|
|
424
|
+
const catalogErrors = [];
|
|
425
|
+
// Collect files that have catalog imports so we can resolve them in parallel.
|
|
426
|
+
// The TTL cache in catalog.ts ensures that multiple imports pointing at
|
|
427
|
+
// the same catalog directory only trigger one SDK scan.
|
|
428
|
+
const filesToResolve = [];
|
|
429
|
+
for (const [filename, source] of Object.entries(result.files)) {
|
|
430
|
+
const catalogImports = findCatalogImports(source);
|
|
431
|
+
if (catalogImports.length > 0) {
|
|
432
|
+
filesToResolve.push({ filename, imports: catalogImports });
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
// Resolve all files and their imports in parallel.
|
|
436
|
+
// Imports within a file are also resolved concurrently since they may
|
|
437
|
+
// point at different catalog directories.
|
|
438
|
+
const catalogResolutions = new Map();
|
|
439
|
+
await Promise.all(filesToResolve.map(async ({ filename, imports }) => {
|
|
440
|
+
const resolutions = await Promise.all(imports.map(async (imp) => {
|
|
441
|
+
try {
|
|
442
|
+
return await resolveCatalogImportToEc(imp, basePath, filename);
|
|
443
|
+
}
|
|
444
|
+
catch (err) {
|
|
445
|
+
return {
|
|
446
|
+
ec: `// ERROR: Failed to resolve catalog "${imp.specPath}": ${String(err)}`,
|
|
447
|
+
errors: [
|
|
448
|
+
{
|
|
449
|
+
message: `Failed to resolve catalog "${imp.specPath}": ${String(err)}`,
|
|
450
|
+
line: 1,
|
|
451
|
+
column: 1,
|
|
452
|
+
},
|
|
453
|
+
],
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
}));
|
|
457
|
+
let resolved = result.files[filename];
|
|
458
|
+
for (let i = 0; i < imports.length; i++) {
|
|
459
|
+
catalogErrors.push(...resolutions[i].errors);
|
|
460
|
+
resolved = resolved.replace(imports[i].full, resolutions[i].ec);
|
|
461
|
+
}
|
|
462
|
+
catalogResolutions.set(filename, resolved);
|
|
463
|
+
}));
|
|
464
|
+
// Build output preserving the original file order from result.files
|
|
465
|
+
const resolvedFiles = {};
|
|
466
|
+
for (const filename of Object.keys(result.files)) {
|
|
467
|
+
resolvedFiles[filename] =
|
|
468
|
+
catalogResolutions.get(filename) ?? result.files[filename];
|
|
469
|
+
}
|
|
470
|
+
return {
|
|
471
|
+
files: resolvedFiles,
|
|
472
|
+
errors: [
|
|
473
|
+
...fetchErrors,
|
|
474
|
+
...notFoundErrors,
|
|
475
|
+
...result.errors,
|
|
476
|
+
...catalogErrors,
|
|
477
|
+
],
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
return {
|
|
481
|
+
files: result.files,
|
|
482
|
+
errors: [...fetchErrors, ...notFoundErrors, ...result.errors],
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/resolvers/resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,22 @@
|
|
|
1
|
-
export type ResourceType = "events" | "commands" | "queries" | "channels";
|
|
1
|
+
export type ResourceType = "events" | "commands" | "queries" | "channels" | "services" | "containers";
|
|
2
2
|
export interface SpecMessage {
|
|
3
3
|
name: string;
|
|
4
|
+
/** Human-readable display name (from catalog `name` field) */
|
|
5
|
+
displayName?: string;
|
|
4
6
|
summary?: string;
|
|
5
7
|
description?: string;
|
|
6
8
|
version?: string;
|
|
9
|
+
/** HTTP method (from OpenAPI) */
|
|
10
|
+
method?: string;
|
|
11
|
+
/** API path (from OpenAPI) */
|
|
12
|
+
path?: string;
|
|
13
|
+
/** HTTP status codes (from OpenAPI) */
|
|
14
|
+
statusCodes?: number[];
|
|
7
15
|
}
|
|
8
16
|
export interface SpecChannel {
|
|
9
17
|
name: string;
|
|
18
|
+
/** Human-readable display name (from catalog `name` field) */
|
|
19
|
+
displayName?: string;
|
|
10
20
|
address?: string;
|
|
11
21
|
protocol?: string;
|
|
12
22
|
summary?: string;
|
|
@@ -16,6 +26,7 @@ export interface SpecOperation {
|
|
|
16
26
|
action: "send" | "receive";
|
|
17
27
|
channelName: string;
|
|
18
28
|
messageName: string;
|
|
29
|
+
messageType?: "event" | "command" | "query";
|
|
19
30
|
summary?: string;
|
|
20
31
|
}
|
|
21
32
|
export interface SpecService {
|
|
@@ -40,4 +51,9 @@ export interface SpecResolveResult {
|
|
|
40
51
|
* Allows callers to provide their own fetch implementation (browser fetch, node-fetch, etc.)
|
|
41
52
|
*/
|
|
42
53
|
export type FetchFn = (url: string) => Promise<string>;
|
|
54
|
+
/**
|
|
55
|
+
* Check whether a path looks like a catalog directory (not a spec file, not a URL).
|
|
56
|
+
* Browser-safe — no Node.js dependencies.
|
|
57
|
+
*/
|
|
58
|
+
export declare function isCatalogPath(specPath: string): boolean;
|
|
43
59
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resolvers/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/resolvers/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,UAAU,GACV,SAAS,GACT,UAAU,GACV,UAAU,GACV,YAAY,CAAC;AAEjB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKvD"}
|
package/dist/resolvers/types.js
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Check whether a path looks like a catalog directory (not a spec file, not a URL).
|
|
3
|
+
* Browser-safe — no Node.js dependencies.
|
|
4
|
+
*/
|
|
5
|
+
export function isCatalogPath(specPath) {
|
|
6
|
+
if (specPath.startsWith("http://") || specPath.startsWith("https://"))
|
|
7
|
+
return false;
|
|
8
|
+
if (/\.(?:ya?ml|json)$/i.test(specPath))
|
|
9
|
+
return false;
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
2
12
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/resolvers/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/resolvers/types.ts"],"names":[],"mappings":"AAmEA;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,IAAI,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eventcatalog/language-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
"types": "./dist/index.d.ts",
|
|
10
10
|
"import": "./dist/index.js"
|
|
11
11
|
},
|
|
12
|
+
"./browser": {
|
|
13
|
+
"types": "./dist/browser.d.ts",
|
|
14
|
+
"import": "./dist/browser.js"
|
|
15
|
+
},
|
|
12
16
|
"./language-server": {
|
|
13
17
|
"import": "./dist/main.js"
|
|
14
18
|
}
|
|
@@ -34,7 +38,8 @@
|
|
|
34
38
|
"vscode-languageclient": "^9.0.1",
|
|
35
39
|
"vscode-languageserver": "^9.0.1",
|
|
36
40
|
"vscode-languageserver-textdocument": "^1.0.12",
|
|
37
|
-
"vscode-uri": "^3.0.8"
|
|
41
|
+
"vscode-uri": "^3.0.8",
|
|
42
|
+
"@eventcatalog/sdk": "2.15.1"
|
|
38
43
|
},
|
|
39
44
|
"devDependencies": {
|
|
40
45
|
"@astrojs/starlight": "^0.32.0",
|