@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,291 @@
|
|
|
1
|
+
let _sdk;
|
|
2
|
+
async function getSdk() {
|
|
3
|
+
if (!_sdk) {
|
|
4
|
+
const mod = await import("@eventcatalog/sdk");
|
|
5
|
+
_sdk = mod.default;
|
|
6
|
+
}
|
|
7
|
+
return _sdk;
|
|
8
|
+
}
|
|
9
|
+
const MESSAGE_SDK_METHODS = {
|
|
10
|
+
events: "getEvents",
|
|
11
|
+
commands: "getCommands",
|
|
12
|
+
queries: "getQueries",
|
|
13
|
+
containers: "getDataStores",
|
|
14
|
+
};
|
|
15
|
+
export { isCatalogPath } from "./types.js";
|
|
16
|
+
async function validateCatalogDir(catalogDir) {
|
|
17
|
+
try {
|
|
18
|
+
const { statSync } = await import("node:fs");
|
|
19
|
+
if (!statSync(catalogDir).isDirectory()) {
|
|
20
|
+
return {
|
|
21
|
+
message: `Catalog directory not found: "${catalogDir}"`,
|
|
22
|
+
line: 1,
|
|
23
|
+
column: 1,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return {
|
|
30
|
+
message: `Catalog directory not found: "${catalogDir}"`,
|
|
31
|
+
line: 1,
|
|
32
|
+
column: 1,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// ─── TTL cache ───────────────────────────────────────────
|
|
37
|
+
// Catalogs can be large. We cache SDK results for a short TTL so that
|
|
38
|
+
// multiple import lines pointing at the same catalog (or rapid completion
|
|
39
|
+
// keystrokes) don't each trigger a full filesystem scan.
|
|
40
|
+
const CACHE_TTL_MS = 5_000; // 5 seconds
|
|
41
|
+
const CACHE_MAX_SIZE = 50; // max entries per cache map
|
|
42
|
+
const resourceCache = new Map();
|
|
43
|
+
const channelCache = new Map();
|
|
44
|
+
const serviceCache = new Map();
|
|
45
|
+
function getCached(cache, key) {
|
|
46
|
+
const entry = cache.get(key);
|
|
47
|
+
if (!entry)
|
|
48
|
+
return undefined;
|
|
49
|
+
if (Date.now() - entry.ts > CACHE_TTL_MS) {
|
|
50
|
+
cache.delete(key);
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
return entry.data;
|
|
54
|
+
}
|
|
55
|
+
function setCached(cache, key, data) {
|
|
56
|
+
if (cache.size >= CACHE_MAX_SIZE) {
|
|
57
|
+
// Evict oldest entry
|
|
58
|
+
let oldestKey;
|
|
59
|
+
let oldestTs = Infinity;
|
|
60
|
+
for (const [k, v] of cache) {
|
|
61
|
+
if (v.ts < oldestTs) {
|
|
62
|
+
oldestTs = v.ts;
|
|
63
|
+
oldestKey = k;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (oldestKey)
|
|
67
|
+
cache.delete(oldestKey);
|
|
68
|
+
}
|
|
69
|
+
cache.set(key, { data, ts: Date.now() });
|
|
70
|
+
}
|
|
71
|
+
/** Clear all catalog caches. Useful when the catalog directory changes. */
|
|
72
|
+
export function clearCatalogCache() {
|
|
73
|
+
resourceCache.clear();
|
|
74
|
+
channelCache.clear();
|
|
75
|
+
serviceCache.clear();
|
|
76
|
+
}
|
|
77
|
+
// ─── Public API ──────────────────────────────────────────
|
|
78
|
+
/**
|
|
79
|
+
* Scan an EventCatalog directory and return all resources of a given type as SpecMessages.
|
|
80
|
+
* Works for events, commands, and queries.
|
|
81
|
+
* Results are cached for CACHE_TTL_MS to avoid redundant filesystem scans.
|
|
82
|
+
*/
|
|
83
|
+
export async function parseCatalogResources(catalogDir, resourceType) {
|
|
84
|
+
const cacheKey = `${catalogDir}::${resourceType}`;
|
|
85
|
+
const cached = getCached(resourceCache, cacheKey);
|
|
86
|
+
if (cached)
|
|
87
|
+
return cached;
|
|
88
|
+
const errors = [];
|
|
89
|
+
const dirError = await validateCatalogDir(catalogDir);
|
|
90
|
+
if (dirError)
|
|
91
|
+
return { messages: new Map(), errors: [dirError] };
|
|
92
|
+
const sdkMethodName = MESSAGE_SDK_METHODS[resourceType];
|
|
93
|
+
if (!sdkMethodName) {
|
|
94
|
+
errors.push({
|
|
95
|
+
message: `Catalog imports do not support resource type "${resourceType}" yet.`,
|
|
96
|
+
line: 1,
|
|
97
|
+
column: 1,
|
|
98
|
+
});
|
|
99
|
+
return { messages: new Map(), errors };
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const sdkFactory = await getSdk();
|
|
103
|
+
const catalog = sdkFactory(catalogDir);
|
|
104
|
+
const resources = await catalog[sdkMethodName]({
|
|
105
|
+
latestOnly: true,
|
|
106
|
+
});
|
|
107
|
+
const messages = new Map();
|
|
108
|
+
for (const resource of resources) {
|
|
109
|
+
if (!resource.id)
|
|
110
|
+
continue;
|
|
111
|
+
messages.set(resource.id, {
|
|
112
|
+
name: resource.id,
|
|
113
|
+
displayName: resource.name !== resource.id ? resource.name : undefined,
|
|
114
|
+
version: resource.version,
|
|
115
|
+
summary: resource.summary,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
const result = { messages, errors };
|
|
119
|
+
setCached(resourceCache, cacheKey, result);
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
errors.push({
|
|
124
|
+
message: `Failed to read catalog at "${catalogDir}": ${String(err)}`,
|
|
125
|
+
line: 1,
|
|
126
|
+
column: 1,
|
|
127
|
+
});
|
|
128
|
+
return { messages: new Map(), errors };
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Scan an EventCatalog directory and return all channels as SpecChannels.
|
|
133
|
+
* Results are cached for CACHE_TTL_MS to avoid redundant filesystem scans.
|
|
134
|
+
*/
|
|
135
|
+
export async function parseCatalogChannels(catalogDir) {
|
|
136
|
+
const cached = getCached(channelCache, catalogDir);
|
|
137
|
+
if (cached)
|
|
138
|
+
return cached;
|
|
139
|
+
const errors = [];
|
|
140
|
+
const dirError = await validateCatalogDir(catalogDir);
|
|
141
|
+
if (dirError)
|
|
142
|
+
return { channels: new Map(), errors: [dirError] };
|
|
143
|
+
try {
|
|
144
|
+
const sdkFactory = await getSdk();
|
|
145
|
+
const catalog = sdkFactory(catalogDir);
|
|
146
|
+
const rawChannels = await catalog.getChannels({
|
|
147
|
+
latestOnly: true,
|
|
148
|
+
});
|
|
149
|
+
const channels = new Map();
|
|
150
|
+
for (const ch of rawChannels) {
|
|
151
|
+
if (!ch.id)
|
|
152
|
+
continue;
|
|
153
|
+
channels.set(ch.id, {
|
|
154
|
+
name: ch.id,
|
|
155
|
+
displayName: ch.name !== ch.id ? ch.name : undefined,
|
|
156
|
+
version: ch.version,
|
|
157
|
+
summary: ch.summary,
|
|
158
|
+
address: ch.address,
|
|
159
|
+
protocol: Array.isArray(ch.protocols) ? ch.protocols[0] : undefined,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
const result = { channels, errors };
|
|
163
|
+
setCached(channelCache, catalogDir, result);
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
errors.push({
|
|
168
|
+
message: `Failed to read catalog channels at "${catalogDir}": ${String(err)}`,
|
|
169
|
+
line: 1,
|
|
170
|
+
column: 1,
|
|
171
|
+
});
|
|
172
|
+
return { channels: new Map(), errors };
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
async function buildMessageInfoMap(catalog) {
|
|
176
|
+
const infoMap = new Map();
|
|
177
|
+
const safe = (p) => p.then((r) => (Array.isArray(r) ? r : [])).catch(() => []);
|
|
178
|
+
const [events, commands, queries] = await Promise.all([
|
|
179
|
+
safe(catalog.getEvents({ latestOnly: true })),
|
|
180
|
+
safe(catalog.getCommands({ latestOnly: true })),
|
|
181
|
+
safe(catalog.getQueries({ latestOnly: true })),
|
|
182
|
+
]);
|
|
183
|
+
for (const e of events)
|
|
184
|
+
if (e.id)
|
|
185
|
+
infoMap.set(e.id, {
|
|
186
|
+
type: "event",
|
|
187
|
+
summary: e.summary,
|
|
188
|
+
version: e.version,
|
|
189
|
+
});
|
|
190
|
+
for (const c of commands)
|
|
191
|
+
if (c.id)
|
|
192
|
+
infoMap.set(c.id, {
|
|
193
|
+
type: "command",
|
|
194
|
+
summary: c.summary,
|
|
195
|
+
version: c.version,
|
|
196
|
+
});
|
|
197
|
+
for (const q of queries)
|
|
198
|
+
if (q.id)
|
|
199
|
+
infoMap.set(q.id, {
|
|
200
|
+
type: "query",
|
|
201
|
+
summary: q.summary,
|
|
202
|
+
version: q.version,
|
|
203
|
+
});
|
|
204
|
+
return infoMap;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Scan an EventCatalog directory and return services as SpecServices.
|
|
208
|
+
* Each service includes its sends/receives operations so a full service block can be generated.
|
|
209
|
+
* Results are cached for CACHE_TTL_MS to avoid redundant filesystem scans.
|
|
210
|
+
*/
|
|
211
|
+
export async function parseCatalogServices(catalogDir) {
|
|
212
|
+
const cached = getCached(serviceCache, catalogDir);
|
|
213
|
+
if (cached)
|
|
214
|
+
return cached;
|
|
215
|
+
const errors = [];
|
|
216
|
+
const dirError = await validateCatalogDir(catalogDir);
|
|
217
|
+
if (dirError)
|
|
218
|
+
return { services: new Map(), errors: [dirError] };
|
|
219
|
+
try {
|
|
220
|
+
const sdkFactory = await getSdk();
|
|
221
|
+
const catalog = sdkFactory(catalogDir);
|
|
222
|
+
// Build an info map once by scanning all message collections
|
|
223
|
+
const messageInfoMap = await buildMessageInfoMap(catalog);
|
|
224
|
+
const rawServices = await catalog.getServices({
|
|
225
|
+
latestOnly: true,
|
|
226
|
+
});
|
|
227
|
+
const services = new Map();
|
|
228
|
+
for (const svc of rawServices) {
|
|
229
|
+
if (!svc.id)
|
|
230
|
+
continue;
|
|
231
|
+
const operations = [];
|
|
232
|
+
const messages = [];
|
|
233
|
+
// Process sends pointers
|
|
234
|
+
if (Array.isArray(svc.sends)) {
|
|
235
|
+
for (const pointer of svc.sends) {
|
|
236
|
+
const info = messageInfoMap.get(pointer.id);
|
|
237
|
+
const msgType = info?.type || "event";
|
|
238
|
+
operations.push({
|
|
239
|
+
action: "send",
|
|
240
|
+
channelName: "",
|
|
241
|
+
messageName: pointer.id,
|
|
242
|
+
messageType: msgType,
|
|
243
|
+
});
|
|
244
|
+
messages.push({
|
|
245
|
+
name: pointer.id,
|
|
246
|
+
version: pointer.version || info?.version,
|
|
247
|
+
summary: info?.summary,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Process receives pointers
|
|
252
|
+
if (Array.isArray(svc.receives)) {
|
|
253
|
+
for (const pointer of svc.receives) {
|
|
254
|
+
const info = messageInfoMap.get(pointer.id);
|
|
255
|
+
const msgType = info?.type || "event";
|
|
256
|
+
operations.push({
|
|
257
|
+
action: "receive",
|
|
258
|
+
channelName: "",
|
|
259
|
+
messageName: pointer.id,
|
|
260
|
+
messageType: msgType,
|
|
261
|
+
});
|
|
262
|
+
messages.push({
|
|
263
|
+
name: pointer.id,
|
|
264
|
+
version: pointer.version || info?.version,
|
|
265
|
+
summary: info?.summary,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
services.set(svc.id, {
|
|
270
|
+
name: svc.id,
|
|
271
|
+
version: svc.version,
|
|
272
|
+
summary: svc.summary,
|
|
273
|
+
operations,
|
|
274
|
+
channels: [],
|
|
275
|
+
messages,
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
const result = { services, errors };
|
|
279
|
+
setCached(serviceCache, catalogDir, result);
|
|
280
|
+
return result;
|
|
281
|
+
}
|
|
282
|
+
catch (err) {
|
|
283
|
+
errors.push({
|
|
284
|
+
message: `Failed to read catalog services at "${catalogDir}": ${String(err)}`,
|
|
285
|
+
line: 1,
|
|
286
|
+
column: 1,
|
|
287
|
+
});
|
|
288
|
+
return { services: new Map(), errors };
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/resolvers/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
export type { SpecMessage, SpecChannel, SpecOperation, SpecService, ResourceType, ResolveError, SpecResolveResult, FetchFn, } from "./types.js";
|
|
2
|
-
export { parseSpec, extractMessages, extractChannels, extractService, messageToEc, channelToEc, serviceToEc,
|
|
2
|
+
export { parseSpec, extractMessages, extractChannels, extractService, messageToEc, channelToEc, serviceToEc, escapeEc, } from "./asyncapi.js";
|
|
3
|
+
export { parseOpenApiSpec, extractOpenApiService, openApiServiceToEc, openApiMessageToEc, } from "./openapi.js";
|
|
4
|
+
export type { ParsedOpenApiSpec } from "./openapi.js";
|
|
5
|
+
export { resolveSpecImports, resolveSpecImportsAsync, detectSpecType, isSpecFile, } from "./resolve.js";
|
|
6
|
+
export { parseCatalogResources, parseCatalogServices, clearCatalogCache, } from "./catalog.js";
|
|
7
|
+
export { isCatalogPath } from "./types.js";
|
|
8
|
+
/** @deprecated Use `resolveSpecImports` / `resolveSpecImportsAsync` instead. These aliases now handle both AsyncAPI and OpenAPI specs. */
|
|
9
|
+
export { resolveSpecImports as resolveAsyncApiImports, resolveSpecImportsAsync as resolveAsyncApiImportsAsync, } from "./resolve.js";
|
|
3
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolvers/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,cAAc,EACd,WAAW,EACX,WAAW,EACX,WAAW,EACX,cAAc,IAAI,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolvers/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,OAAO,GACR,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,cAAc,EACd,WAAW,EACX,WAAW,EACX,WAAW,EACX,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,0IAA0I;AAC1I,OAAO,EACL,kBAAkB,IAAI,sBAAsB,EAC5C,uBAAuB,IAAI,2BAA2B,GACvD,MAAM,cAAc,CAAC"}
|
package/dist/resolvers/index.js
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
export { parseSpec, extractMessages, extractChannels, extractService, messageToEc, channelToEc, serviceToEc,
|
|
1
|
+
export { parseSpec, extractMessages, extractChannels, extractService, messageToEc, channelToEc, serviceToEc, escapeEc, } from "./asyncapi.js";
|
|
2
|
+
export { parseOpenApiSpec, extractOpenApiService, openApiServiceToEc, openApiMessageToEc, } from "./openapi.js";
|
|
3
|
+
export { resolveSpecImports, resolveSpecImportsAsync, detectSpecType, isSpecFile, } from "./resolve.js";
|
|
4
|
+
export { parseCatalogResources, parseCatalogServices, clearCatalogCache, } from "./catalog.js";
|
|
5
|
+
export { isCatalogPath } from "./types.js";
|
|
6
|
+
/** @deprecated Use `resolveSpecImports` / `resolveSpecImportsAsync` instead. These aliases now handle both AsyncAPI and OpenAPI specs. */
|
|
7
|
+
export { resolveSpecImports as resolveAsyncApiImports, resolveSpecImportsAsync as resolveAsyncApiImportsAsync, } from "./resolve.js";
|
|
2
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolvers/index.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,cAAc,EACd,WAAW,EACX,WAAW,EACX,WAAW,EACX,cAAc,IAAI,sBAAsB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolvers/index.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,cAAc,EACd,WAAW,EACX,WAAW,EACX,WAAW,EACX,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,UAAU,GACX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,0IAA0I;AAC1I,OAAO,EACL,kBAAkB,IAAI,sBAAsB,EAC5C,uBAAuB,IAAI,2BAA2B,GACvD,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { SpecMessage, SpecService, ResolveError } from "./types.js";
|
|
2
|
+
export interface ParsedOpenApiSpec {
|
|
3
|
+
messages: Map<string, SpecMessage & {
|
|
4
|
+
messageType: "command" | "query";
|
|
5
|
+
}>;
|
|
6
|
+
info?: {
|
|
7
|
+
title?: string;
|
|
8
|
+
version?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
};
|
|
11
|
+
errors: ResolveError[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Derive a PascalCase operation name from an HTTP method and path.
|
|
15
|
+
* e.g. GET /orders/{id}/items -> GetOrdersIdItems
|
|
16
|
+
*/
|
|
17
|
+
export declare function operationNameFromPath(method: string, path: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Parse an OpenAPI v3.0 or v3.1 document and extract operations as messages.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseOpenApiSpec(content: string): ParsedOpenApiSpec;
|
|
22
|
+
/**
|
|
23
|
+
* Extract a full service definition from an OpenAPI spec.
|
|
24
|
+
* All operations are "receives" (the service receives HTTP requests).
|
|
25
|
+
* No channels are generated for OpenAPI specs.
|
|
26
|
+
*/
|
|
27
|
+
export declare function extractOpenApiService(content: string, serviceName?: string): {
|
|
28
|
+
service: SpecService;
|
|
29
|
+
errors: ResolveError[];
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Convert an OpenAPI SpecService to a full .ec definition string.
|
|
33
|
+
* Generates standalone command/query definitions with summaries,
|
|
34
|
+
* followed by the service block with receives statements.
|
|
35
|
+
*/
|
|
36
|
+
export declare function openApiServiceToEc(service: SpecService): string;
|
|
37
|
+
/**
|
|
38
|
+
* Convert an OpenAPI message to an .ec definition string.
|
|
39
|
+
* Uses the message's messageType to determine whether it's a command or query.
|
|
40
|
+
*/
|
|
41
|
+
export declare function openApiMessageToEc(msg: SpecMessage & {
|
|
42
|
+
messageType: "command" | "query";
|
|
43
|
+
}): string;
|
|
44
|
+
//# sourceMappingURL=openapi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/resolvers/openapi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EAEX,WAAW,EACX,YAAY,EACb,MAAM,YAAY,CAAC;AAQpB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,GAAG;QAAE,WAAW,EAAE,SAAS,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IAC1E,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAc1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,CAkGnE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,YAAY,EAAE,CAAA;CAAE,CA+ClD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CA2B/D;AAgBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,WAAW,GAAG;IAAE,WAAW,EAAE,SAAS,GAAG,OAAO,CAAA;CAAE,GACtD,MAAM,CAMR"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import yaml from "js-yaml";
|
|
2
|
+
import { ecBlock, escapeEc, sanitizeServiceName, serviceToEc, } from "./asyncapi.js";
|
|
3
|
+
/**
|
|
4
|
+
* Derive a PascalCase operation name from an HTTP method and path.
|
|
5
|
+
* e.g. GET /orders/{id}/items -> GetOrdersIdItems
|
|
6
|
+
*/
|
|
7
|
+
export function operationNameFromPath(method, path) {
|
|
8
|
+
const parts = path
|
|
9
|
+
.split("/")
|
|
10
|
+
.filter(Boolean)
|
|
11
|
+
.map((segment) => {
|
|
12
|
+
// Strip braces from path params
|
|
13
|
+
const clean = segment.replace(/[{}]/g, "");
|
|
14
|
+
// PascalCase each segment
|
|
15
|
+
return clean.charAt(0).toUpperCase() + clean.slice(1);
|
|
16
|
+
});
|
|
17
|
+
const methodPart = method.charAt(0).toUpperCase() + method.slice(1).toLowerCase();
|
|
18
|
+
return methodPart + parts.join("");
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse an OpenAPI v3.0 or v3.1 document and extract operations as messages.
|
|
22
|
+
*/
|
|
23
|
+
export function parseOpenApiSpec(content) {
|
|
24
|
+
let doc;
|
|
25
|
+
try {
|
|
26
|
+
// Try JSON first for .json files
|
|
27
|
+
try {
|
|
28
|
+
doc = JSON.parse(content);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
doc = yaml.load(content);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
return {
|
|
36
|
+
messages: new Map(),
|
|
37
|
+
errors: [
|
|
38
|
+
{
|
|
39
|
+
message: `Failed to parse OpenAPI spec: ${String(e)}`,
|
|
40
|
+
line: 1,
|
|
41
|
+
column: 1,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (!doc || typeof doc !== "object") {
|
|
47
|
+
return {
|
|
48
|
+
messages: new Map(),
|
|
49
|
+
errors: [
|
|
50
|
+
{ message: "OpenAPI file is empty or invalid", line: 1, column: 1 },
|
|
51
|
+
],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const openApiVersion = String(doc.openapi || "");
|
|
55
|
+
if (!openApiVersion.startsWith("3.0") && !openApiVersion.startsWith("3.1")) {
|
|
56
|
+
return {
|
|
57
|
+
messages: new Map(),
|
|
58
|
+
errors: [
|
|
59
|
+
{
|
|
60
|
+
message: `Unsupported OpenAPI version: "${openApiVersion}". Only 3.0.x and 3.1.x are supported.`,
|
|
61
|
+
line: 1,
|
|
62
|
+
column: 1,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const messages = new Map();
|
|
68
|
+
const paths = doc.paths || {};
|
|
69
|
+
const specVersion = doc.info?.version;
|
|
70
|
+
for (const [path, pathItem] of Object.entries(paths)) {
|
|
71
|
+
if (!pathItem || typeof pathItem !== "object")
|
|
72
|
+
continue;
|
|
73
|
+
for (const method of ["get", "post", "put", "patch", "delete"]) {
|
|
74
|
+
const op = pathItem[method];
|
|
75
|
+
if (!op)
|
|
76
|
+
continue;
|
|
77
|
+
const name = op.operationId || operationNameFromPath(method, path);
|
|
78
|
+
const overrideType = op["x-eventcatalog-message-type"];
|
|
79
|
+
const messageType = overrideType === "command" || overrideType === "query"
|
|
80
|
+
? overrideType
|
|
81
|
+
: method === "get"
|
|
82
|
+
? "query"
|
|
83
|
+
: "command";
|
|
84
|
+
// Extract response status codes
|
|
85
|
+
const statusCodes = op.responses
|
|
86
|
+
? Object.keys(op.responses)
|
|
87
|
+
.map(Number)
|
|
88
|
+
.filter((c) => !isNaN(c))
|
|
89
|
+
: [];
|
|
90
|
+
messages.set(name, {
|
|
91
|
+
name,
|
|
92
|
+
summary: op.summary,
|
|
93
|
+
description: op.description,
|
|
94
|
+
version: specVersion,
|
|
95
|
+
messageType,
|
|
96
|
+
method: method.toUpperCase(),
|
|
97
|
+
path,
|
|
98
|
+
...(statusCodes.length > 0 ? { statusCodes } : {}),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const info = doc.info
|
|
103
|
+
? {
|
|
104
|
+
title: doc.info.title,
|
|
105
|
+
version: doc.info.version,
|
|
106
|
+
description: doc.info.description,
|
|
107
|
+
}
|
|
108
|
+
: undefined;
|
|
109
|
+
return { messages, info, errors: [] };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Extract a full service definition from an OpenAPI spec.
|
|
113
|
+
* All operations are "receives" (the service receives HTTP requests).
|
|
114
|
+
* No channels are generated for OpenAPI specs.
|
|
115
|
+
*/
|
|
116
|
+
export function extractOpenApiService(content, serviceName) {
|
|
117
|
+
const emptyService = (name) => ({
|
|
118
|
+
name,
|
|
119
|
+
operations: [],
|
|
120
|
+
channels: [],
|
|
121
|
+
messages: [],
|
|
122
|
+
});
|
|
123
|
+
const parsed = parseOpenApiSpec(content);
|
|
124
|
+
if (parsed.errors.length > 0) {
|
|
125
|
+
return {
|
|
126
|
+
service: emptyService(serviceName || "UnknownService"),
|
|
127
|
+
errors: parsed.errors,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
const name = serviceName || sanitizeServiceName(parsed.info?.title) || "UnknownService";
|
|
131
|
+
const version = parsed.info?.version;
|
|
132
|
+
const summary = parsed.info?.description?.trim().split("\n")[0];
|
|
133
|
+
const operations = [];
|
|
134
|
+
const messages = [];
|
|
135
|
+
for (const msg of parsed.messages.values()) {
|
|
136
|
+
operations.push({
|
|
137
|
+
action: "receive",
|
|
138
|
+
channelName: "",
|
|
139
|
+
messageName: msg.name,
|
|
140
|
+
messageType: msg.messageType,
|
|
141
|
+
summary: msg.summary,
|
|
142
|
+
});
|
|
143
|
+
messages.push({
|
|
144
|
+
name: msg.name,
|
|
145
|
+
summary: msg.summary,
|
|
146
|
+
description: msg.description,
|
|
147
|
+
version: msg.version,
|
|
148
|
+
method: msg.method,
|
|
149
|
+
path: msg.path,
|
|
150
|
+
statusCodes: msg.statusCodes,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
service: { name, version, summary, operations, channels: [], messages },
|
|
155
|
+
errors: [],
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Convert an OpenAPI SpecService to a full .ec definition string.
|
|
160
|
+
* Generates standalone command/query definitions with summaries,
|
|
161
|
+
* followed by the service block with receives statements.
|
|
162
|
+
*/
|
|
163
|
+
export function openApiServiceToEc(service) {
|
|
164
|
+
const parts = [];
|
|
165
|
+
// Build a map of messageName -> messageType from operations
|
|
166
|
+
const messageTypeMap = new Map();
|
|
167
|
+
for (const op of service.operations) {
|
|
168
|
+
if (op.messageType === "command" || op.messageType === "query") {
|
|
169
|
+
messageTypeMap.set(op.messageName, op.messageType);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
// Generate standalone message definitions with summaries
|
|
173
|
+
for (const msg of service.messages) {
|
|
174
|
+
const msgType = messageTypeMap.get(msg.name) || "command";
|
|
175
|
+
parts.push(ecBlock(msgType, msg.name, [
|
|
176
|
+
msg.version && `version ${msg.version}`,
|
|
177
|
+
msg.summary && `summary "${escapeEc(msg.summary)}"`,
|
|
178
|
+
apiAnnotation(msg),
|
|
179
|
+
]));
|
|
180
|
+
}
|
|
181
|
+
// Generate the service block
|
|
182
|
+
parts.push(serviceToEc(service));
|
|
183
|
+
return parts.join("\n\n");
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Build an @api annotation string from method, path, and statusCodes.
|
|
187
|
+
*/
|
|
188
|
+
function apiAnnotation(msg) {
|
|
189
|
+
if (!msg.method && !msg.path)
|
|
190
|
+
return false;
|
|
191
|
+
const args = [];
|
|
192
|
+
if (msg.method)
|
|
193
|
+
args.push(`method: "${msg.method}"`);
|
|
194
|
+
if (msg.path)
|
|
195
|
+
args.push(`path: "${escapeEc(msg.path)}"`);
|
|
196
|
+
if (msg.statusCodes && msg.statusCodes.length > 0) {
|
|
197
|
+
args.push(`statusCodes: "${msg.statusCodes.join(",")}"`);
|
|
198
|
+
}
|
|
199
|
+
return `@api(${args.join(", ")})`;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Convert an OpenAPI message to an .ec definition string.
|
|
203
|
+
* Uses the message's messageType to determine whether it's a command or query.
|
|
204
|
+
*/
|
|
205
|
+
export function openApiMessageToEc(msg) {
|
|
206
|
+
return ecBlock(msg.messageType, msg.name, [
|
|
207
|
+
msg.version && `version ${msg.version}`,
|
|
208
|
+
msg.summary && `summary "${escapeEc(msg.summary)}"`,
|
|
209
|
+
apiAnnotation(msg),
|
|
210
|
+
]);
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=openapi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/resolvers/openapi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type SpecResolveResult, type FetchFn } from "./types.js";
|
|
2
|
+
type SpecType = "asyncapi" | "openapi" | "unknown";
|
|
3
|
+
/**
|
|
4
|
+
* Detect whether a spec document is AsyncAPI or OpenAPI based on its content.
|
|
5
|
+
*/
|
|
6
|
+
export declare function detectSpecType(content: string): SpecType;
|
|
7
|
+
export declare function isSpecFile(filename: string): boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Resolve all spec imports in a set of files (sync, local files only).
|
|
10
|
+
* Scans .ec files for `import <type> { ... } from "*.yml"` and
|
|
11
|
+
* `import ServiceName from "*.yml"` statements, auto-detects whether
|
|
12
|
+
* each spec is AsyncAPI or OpenAPI, and replaces the imports with
|
|
13
|
+
* synthesized .ec definitions.
|
|
14
|
+
* Spec files (YAML/JSON) are excluded from the output.
|
|
15
|
+
* URL imports are left untouched - use resolveSpecImportsAsync for those.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveSpecImports(files: Record<string, string>): SpecResolveResult;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve all spec imports including remote URLs (async).
|
|
20
|
+
* Fetches remote specs via the provided fetchFn, then resolves all imports.
|
|
21
|
+
* Auto-detects AsyncAPI vs OpenAPI from file content.
|
|
22
|
+
* For local file imports, looks them up in the files map.
|
|
23
|
+
* When basePath is provided, also resolves catalog directory imports
|
|
24
|
+
* (e.g., `import events { OrderCreated } from "./my-catalog"`).
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveSpecImportsAsync(files: Record<string, string>, fetchFn: FetchFn, basePath?: string): Promise<SpecResolveResult>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/resolvers/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,iBAAiB,EACtB,KAAK,OAAO,EACb,MAAM,YAAY,CAAC;AAoCpB,KAAK,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAexD;AA0SD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMpD;AAsGD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,iBAAiB,CAoBnB;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAoH5B"}
|