@blokjs/lsp-server 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/completion.d.ts +11 -0
- package/dist/completion.js +269 -0
- package/dist/completion.js.map +1 -0
- package/dist/constants.d.ts +37 -0
- package/dist/constants.js +161 -0
- package/dist/constants.js.map +1 -0
- package/dist/diagnostics.d.ts +17 -0
- package/dist/diagnostics.js +466 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/hover.d.ts +12 -0
- package/dist/hover.js +118 -0
- package/dist/hover.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +130 -0
- package/dist/server.js.map +1 -0
- package/editors/emacs-lsp.el +21 -0
- package/editors/helix-languages.toml +12 -0
- package/editors/neovim.lua +59 -0
- package/editors/sublime-lsp.json +16 -0
- package/package.json +40 -0
- package/src/__tests__/completion.test.ts +184 -0
- package/src/__tests__/constants.test.ts +142 -0
- package/src/__tests__/diagnostics.test.ts +513 -0
- package/src/__tests__/hover.test.ts +227 -0
- package/src/completion.ts +308 -0
- package/src/constants.ts +194 -0
- package/src/diagnostics.ts +493 -0
- package/src/hover.ts +135 -0
- package/src/server.ts +162 -0
- package/tsconfig.json +18 -0
- package/vitest.config.ts +9 -0
|
@@ -0,0 +1,466 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateWorkflow = validateWorkflow;
|
|
4
|
+
exports.findKeyRange = findKeyRange;
|
|
5
|
+
exports.findValueRange = findValueRange;
|
|
6
|
+
exports.offsetToPosition = offsetToPosition;
|
|
7
|
+
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
8
|
+
const constants_1 = require("./constants");
|
|
9
|
+
/**
|
|
10
|
+
* Provides workflow validation diagnostics for the LSP server.
|
|
11
|
+
*
|
|
12
|
+
* Validates:
|
|
13
|
+
* - Required fields (name, version, trigger, steps, nodes)
|
|
14
|
+
* - Version format (semver)
|
|
15
|
+
* - Trigger configuration (type-specific validation)
|
|
16
|
+
* - Step structure (name, node, type)
|
|
17
|
+
* - Node configuration references
|
|
18
|
+
* - Unused nodes
|
|
19
|
+
* - Runtime field validation
|
|
20
|
+
*/
|
|
21
|
+
function validateWorkflow(text) {
|
|
22
|
+
const diagnostics = [];
|
|
23
|
+
let workflow;
|
|
24
|
+
try {
|
|
25
|
+
workflow = JSON.parse(text);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
diagnostics.push({
|
|
29
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
30
|
+
range: createRange(0, 0, 0, 1),
|
|
31
|
+
message: "Invalid JSON: failed to parse workflow file",
|
|
32
|
+
source: "blok",
|
|
33
|
+
});
|
|
34
|
+
return diagnostics;
|
|
35
|
+
}
|
|
36
|
+
if (typeof workflow !== "object" || workflow === null || Array.isArray(workflow)) {
|
|
37
|
+
diagnostics.push({
|
|
38
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
39
|
+
range: createRange(0, 0, 0, 1),
|
|
40
|
+
message: "Workflow must be a JSON object",
|
|
41
|
+
source: "blok",
|
|
42
|
+
});
|
|
43
|
+
return diagnostics;
|
|
44
|
+
}
|
|
45
|
+
validateRequiredFields(text, workflow, diagnostics);
|
|
46
|
+
validateVersion(text, workflow, diagnostics);
|
|
47
|
+
validateTrigger(text, workflow, diagnostics);
|
|
48
|
+
validateSteps(text, workflow, diagnostics);
|
|
49
|
+
validateNodeReferences(text, workflow, diagnostics);
|
|
50
|
+
return diagnostics;
|
|
51
|
+
}
|
|
52
|
+
function validateRequiredFields(text, workflow, diagnostics) {
|
|
53
|
+
const required = [
|
|
54
|
+
{ key: "name", label: "name" },
|
|
55
|
+
{ key: "version", label: "version" },
|
|
56
|
+
{ key: "trigger", label: "trigger" },
|
|
57
|
+
{ key: "steps", label: "steps" },
|
|
58
|
+
{ key: "nodes", label: "nodes" },
|
|
59
|
+
];
|
|
60
|
+
for (const { key, label } of required) {
|
|
61
|
+
if (workflow[key] === undefined) {
|
|
62
|
+
diagnostics.push({
|
|
63
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
64
|
+
range: createRange(0, 0, 0, 1),
|
|
65
|
+
message: `Missing required field: "${label}"`,
|
|
66
|
+
source: "blok",
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (typeof workflow.name === "string" && workflow.name.length === 0) {
|
|
71
|
+
const range = findKeyRange(text, "name");
|
|
72
|
+
diagnostics.push({
|
|
73
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
74
|
+
range,
|
|
75
|
+
message: "Workflow name cannot be empty",
|
|
76
|
+
source: "blok",
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function validateVersion(text, workflow, diagnostics) {
|
|
81
|
+
if (typeof workflow.version !== "string")
|
|
82
|
+
return;
|
|
83
|
+
const semverRegex = /^\d+\.\d+\.\d+$/;
|
|
84
|
+
if (!semverRegex.test(workflow.version)) {
|
|
85
|
+
const range = findKeyRange(text, "version");
|
|
86
|
+
diagnostics.push({
|
|
87
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Warning,
|
|
88
|
+
range,
|
|
89
|
+
message: `Invalid version format "${workflow.version}". Expected semver (e.g., 1.0.0)`,
|
|
90
|
+
source: "blok",
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function validateTrigger(text, workflow, diagnostics) {
|
|
95
|
+
if (!workflow.trigger || typeof workflow.trigger !== "object")
|
|
96
|
+
return;
|
|
97
|
+
const triggerKeys = Object.keys(workflow.trigger);
|
|
98
|
+
if (triggerKeys.length === 0) {
|
|
99
|
+
const range = findKeyRange(text, "trigger");
|
|
100
|
+
diagnostics.push({
|
|
101
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
102
|
+
range,
|
|
103
|
+
message: "Trigger must have at least one type defined",
|
|
104
|
+
source: "blok",
|
|
105
|
+
});
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (triggerKeys.length > 1) {
|
|
109
|
+
const range = findKeyRange(text, "trigger");
|
|
110
|
+
diagnostics.push({
|
|
111
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
112
|
+
range,
|
|
113
|
+
message: `Only one trigger type allowed per workflow. Found: ${triggerKeys.join(", ")}`,
|
|
114
|
+
source: "blok",
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
const triggerType = triggerKeys[0];
|
|
118
|
+
if (!constants_1.VALID_TRIGGERS.includes(triggerType)) {
|
|
119
|
+
const range = findKeyRange(text, triggerType);
|
|
120
|
+
diagnostics.push({
|
|
121
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
122
|
+
range,
|
|
123
|
+
message: `Unknown trigger type "${triggerType}". Valid types: ${constants_1.VALID_TRIGGERS.join(", ")}`,
|
|
124
|
+
source: "blok",
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
// HTTP trigger validation
|
|
128
|
+
if (triggerType === "http") {
|
|
129
|
+
const httpConfig = workflow.trigger.http;
|
|
130
|
+
if (httpConfig && typeof httpConfig === "object") {
|
|
131
|
+
if (!httpConfig.method) {
|
|
132
|
+
const range = findKeyRange(text, "http");
|
|
133
|
+
diagnostics.push({
|
|
134
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
135
|
+
range,
|
|
136
|
+
message: 'HTTP trigger requires "method" field',
|
|
137
|
+
source: "blok",
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
else if (typeof httpConfig.method === "string" &&
|
|
141
|
+
!constants_1.VALID_HTTP_METHODS.includes(httpConfig.method)) {
|
|
142
|
+
const range = findValueRange(text, "method", httpConfig.method);
|
|
143
|
+
diagnostics.push({
|
|
144
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
145
|
+
range,
|
|
146
|
+
message: `Invalid HTTP method "${httpConfig.method}". Valid: ${constants_1.VALID_HTTP_METHODS.join(", ")}`,
|
|
147
|
+
source: "blok",
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
if (!httpConfig.path) {
|
|
151
|
+
const range = findKeyRange(text, "http");
|
|
152
|
+
diagnostics.push({
|
|
153
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
154
|
+
range,
|
|
155
|
+
message: 'HTTP trigger requires "path" field',
|
|
156
|
+
source: "blok",
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// Cron trigger validation
|
|
162
|
+
if (triggerType === "cron") {
|
|
163
|
+
const cronConfig = workflow.trigger.cron;
|
|
164
|
+
if (cronConfig && typeof cronConfig === "object") {
|
|
165
|
+
if (!cronConfig.schedule) {
|
|
166
|
+
const range = findKeyRange(text, "cron");
|
|
167
|
+
diagnostics.push({
|
|
168
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
169
|
+
range,
|
|
170
|
+
message: 'Cron trigger requires "schedule" field',
|
|
171
|
+
source: "blok",
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
else if (typeof cronConfig.schedule === "string") {
|
|
175
|
+
const parts = cronConfig.schedule.trim().split(/\s+/);
|
|
176
|
+
if (parts.length < 5 || parts.length > 6) {
|
|
177
|
+
const range = findValueRange(text, "schedule", cronConfig.schedule);
|
|
178
|
+
diagnostics.push({
|
|
179
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Warning,
|
|
180
|
+
range,
|
|
181
|
+
message: "Invalid cron expression. Expected 5-6 fields (minute hour day month weekday [second])",
|
|
182
|
+
source: "blok",
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Queue trigger validation
|
|
189
|
+
if (triggerType === "queue") {
|
|
190
|
+
const queueConfig = workflow.trigger.queue;
|
|
191
|
+
if (queueConfig && typeof queueConfig === "object") {
|
|
192
|
+
if (!queueConfig.provider) {
|
|
193
|
+
const range = findKeyRange(text, "queue");
|
|
194
|
+
diagnostics.push({
|
|
195
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
196
|
+
range,
|
|
197
|
+
message: 'Queue trigger requires "provider" field',
|
|
198
|
+
source: "blok",
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
if (!queueConfig.topic) {
|
|
202
|
+
const range = findKeyRange(text, "queue");
|
|
203
|
+
diagnostics.push({
|
|
204
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
205
|
+
range,
|
|
206
|
+
message: 'Queue trigger requires "topic" field',
|
|
207
|
+
source: "blok",
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// Webhook trigger validation
|
|
213
|
+
if (triggerType === "webhook") {
|
|
214
|
+
const webhookConfig = workflow.trigger.webhook;
|
|
215
|
+
if (webhookConfig && typeof webhookConfig === "object") {
|
|
216
|
+
if (!webhookConfig.source) {
|
|
217
|
+
const range = findKeyRange(text, "webhook");
|
|
218
|
+
diagnostics.push({
|
|
219
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
220
|
+
range,
|
|
221
|
+
message: 'Webhook trigger requires "source" field',
|
|
222
|
+
source: "blok",
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
if (!webhookConfig.events || !Array.isArray(webhookConfig.events)) {
|
|
226
|
+
const range = findKeyRange(text, "webhook");
|
|
227
|
+
diagnostics.push({
|
|
228
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
229
|
+
range,
|
|
230
|
+
message: 'Webhook trigger requires "events" array',
|
|
231
|
+
source: "blok",
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Pubsub trigger validation
|
|
237
|
+
if (triggerType === "pubsub") {
|
|
238
|
+
const pubsubConfig = workflow.trigger.pubsub;
|
|
239
|
+
if (pubsubConfig && typeof pubsubConfig === "object") {
|
|
240
|
+
if (!pubsubConfig.provider) {
|
|
241
|
+
const range = findKeyRange(text, "pubsub");
|
|
242
|
+
diagnostics.push({
|
|
243
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
244
|
+
range,
|
|
245
|
+
message: 'Pub/Sub trigger requires "provider" field',
|
|
246
|
+
source: "blok",
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
if (!pubsubConfig.topic && !pubsubConfig.channel) {
|
|
250
|
+
const range = findKeyRange(text, "pubsub");
|
|
251
|
+
diagnostics.push({
|
|
252
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
253
|
+
range,
|
|
254
|
+
message: 'Pub/Sub trigger requires "topic" or "channel" field',
|
|
255
|
+
source: "blok",
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// Worker trigger validation
|
|
261
|
+
if (triggerType === "worker") {
|
|
262
|
+
const workerConfig = workflow.trigger.worker;
|
|
263
|
+
if (workerConfig && typeof workerConfig === "object") {
|
|
264
|
+
if (!workerConfig.queue) {
|
|
265
|
+
const range = findKeyRange(text, "worker");
|
|
266
|
+
diagnostics.push({
|
|
267
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
268
|
+
range,
|
|
269
|
+
message: 'Worker trigger requires "queue" field',
|
|
270
|
+
source: "blok",
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
function validateSteps(text, workflow, diagnostics) {
|
|
277
|
+
if (!Array.isArray(workflow.steps))
|
|
278
|
+
return;
|
|
279
|
+
const stepNames = new Set();
|
|
280
|
+
for (let i = 0; i < workflow.steps.length; i++) {
|
|
281
|
+
const step = workflow.steps[i];
|
|
282
|
+
if (!step || typeof step !== "object") {
|
|
283
|
+
diagnostics.push({
|
|
284
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
285
|
+
range: findArrayItemRange(text, "steps", i),
|
|
286
|
+
message: `Step ${i} must be an object`,
|
|
287
|
+
source: "blok",
|
|
288
|
+
});
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
if (!step.name || typeof step.name !== "string") {
|
|
292
|
+
diagnostics.push({
|
|
293
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
294
|
+
range: findArrayItemRange(text, "steps", i),
|
|
295
|
+
message: `Step ${i} is missing required "name" field`,
|
|
296
|
+
source: "blok",
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
if (stepNames.has(step.name)) {
|
|
301
|
+
diagnostics.push({
|
|
302
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Warning,
|
|
303
|
+
range: findValueRange(text, "name", step.name),
|
|
304
|
+
message: `Duplicate step name "${step.name}"`,
|
|
305
|
+
source: "blok",
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
stepNames.add(step.name);
|
|
309
|
+
}
|
|
310
|
+
if (!step.node || typeof step.node !== "string") {
|
|
311
|
+
diagnostics.push({
|
|
312
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
313
|
+
range: findArrayItemRange(text, "steps", i),
|
|
314
|
+
message: `Step "${step.name || i}" is missing required "node" field`,
|
|
315
|
+
source: "blok",
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
if (!step.type || typeof step.type !== "string") {
|
|
319
|
+
diagnostics.push({
|
|
320
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
321
|
+
range: findArrayItemRange(text, "steps", i),
|
|
322
|
+
message: `Step "${step.name || i}" is missing required "type" field`,
|
|
323
|
+
source: "blok",
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
else if (!constants_1.VALID_STEP_TYPES.includes(step.type)) {
|
|
327
|
+
diagnostics.push({
|
|
328
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
329
|
+
range: findValueRange(text, "type", step.type),
|
|
330
|
+
message: `Invalid step type "${step.type}". Valid: ${constants_1.VALID_STEP_TYPES.join(", ")}`,
|
|
331
|
+
source: "blok",
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
if (step.runtime &&
|
|
335
|
+
typeof step.runtime === "string" &&
|
|
336
|
+
!constants_1.VALID_RUNTIMES.includes(step.runtime)) {
|
|
337
|
+
diagnostics.push({
|
|
338
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Error,
|
|
339
|
+
range: findValueRange(text, "runtime", step.runtime),
|
|
340
|
+
message: `Invalid runtime "${step.runtime}". Valid: ${constants_1.VALID_RUNTIMES.join(", ")}`,
|
|
341
|
+
source: "blok",
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
function validateNodeReferences(text, workflow, diagnostics) {
|
|
347
|
+
if (!Array.isArray(workflow.steps) || typeof workflow.nodes !== "object" || !workflow.nodes)
|
|
348
|
+
return;
|
|
349
|
+
const referencedNodes = collectStepNames(workflow.steps);
|
|
350
|
+
const definedNodes = new Set(Object.keys(workflow.nodes));
|
|
351
|
+
// Check for steps referencing undefined nodes
|
|
352
|
+
for (const stepName of referencedNodes) {
|
|
353
|
+
if (!definedNodes.has(stepName)) {
|
|
354
|
+
const range = findValueRange(text, "name", stepName);
|
|
355
|
+
diagnostics.push({
|
|
356
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Warning,
|
|
357
|
+
range,
|
|
358
|
+
message: `Step "${stepName}" references a node that is not defined in "nodes"`,
|
|
359
|
+
source: "blok",
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
// Check for nodes with conditions and collect nested step names
|
|
364
|
+
const allReferenced = new Set(referencedNodes);
|
|
365
|
+
for (const [, nodeConfig] of Object.entries(workflow.nodes)) {
|
|
366
|
+
if (nodeConfig && typeof nodeConfig === "object") {
|
|
367
|
+
const cfg = nodeConfig;
|
|
368
|
+
if (Array.isArray(cfg.conditions)) {
|
|
369
|
+
for (const cond of cfg.conditions) {
|
|
370
|
+
if (cond && typeof cond === "object" && Array.isArray(cond.steps)) {
|
|
371
|
+
const nestedNames = collectStepNames(cond.steps);
|
|
372
|
+
for (const n of nestedNames)
|
|
373
|
+
allReferenced.add(n);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
// Check for unused nodes
|
|
380
|
+
for (const nodeName of definedNodes) {
|
|
381
|
+
if (!allReferenced.has(nodeName)) {
|
|
382
|
+
const range = findKeyRange(text, nodeName);
|
|
383
|
+
diagnostics.push({
|
|
384
|
+
severity: vscode_languageserver_1.DiagnosticSeverity.Information,
|
|
385
|
+
range,
|
|
386
|
+
message: `Node "${nodeName}" is defined but not referenced by any step`,
|
|
387
|
+
source: "blok",
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
function collectStepNames(steps) {
|
|
393
|
+
const names = new Set();
|
|
394
|
+
for (const step of steps) {
|
|
395
|
+
if (step && typeof step === "object") {
|
|
396
|
+
const s = step;
|
|
397
|
+
if (typeof s.name === "string") {
|
|
398
|
+
names.add(s.name);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
return names;
|
|
403
|
+
}
|
|
404
|
+
// --- Range helpers ---
|
|
405
|
+
function createRange(startLine, startChar, endLine, endChar) {
|
|
406
|
+
return vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(startLine, startChar), vscode_languageserver_1.Position.create(endLine, endChar));
|
|
407
|
+
}
|
|
408
|
+
function findKeyRange(text, key) {
|
|
409
|
+
const pattern = new RegExp(`"${escapeRegex(key)}"\\s*:`);
|
|
410
|
+
const match = pattern.exec(text);
|
|
411
|
+
if (match) {
|
|
412
|
+
const pos = offsetToPosition(text, match.index);
|
|
413
|
+
return createRange(pos.line, pos.character, pos.line, pos.character + match[0].length);
|
|
414
|
+
}
|
|
415
|
+
return createRange(0, 0, 0, 1);
|
|
416
|
+
}
|
|
417
|
+
function findValueRange(text, key, value) {
|
|
418
|
+
const pattern = new RegExp(`"${escapeRegex(key)}"\\s*:\\s*"${escapeRegex(value)}"`);
|
|
419
|
+
const match = pattern.exec(text);
|
|
420
|
+
if (match) {
|
|
421
|
+
const pos = offsetToPosition(text, match.index);
|
|
422
|
+
return createRange(pos.line, pos.character, pos.line, pos.character + match[0].length);
|
|
423
|
+
}
|
|
424
|
+
return findKeyRange(text, key);
|
|
425
|
+
}
|
|
426
|
+
function findArrayItemRange(text, arrayKey, index) {
|
|
427
|
+
const keyMatch = new RegExp(`"${escapeRegex(arrayKey)}"\\s*:\\s*\\[`).exec(text);
|
|
428
|
+
if (!keyMatch)
|
|
429
|
+
return createRange(0, 0, 0, 1);
|
|
430
|
+
let depth = 0;
|
|
431
|
+
let itemCount = 0;
|
|
432
|
+
const start = keyMatch.index + keyMatch[0].length;
|
|
433
|
+
for (let i = start; i < text.length; i++) {
|
|
434
|
+
if (text[i] === "{" || text[i] === "[") {
|
|
435
|
+
if (depth === 0 && itemCount === index) {
|
|
436
|
+
const pos = offsetToPosition(text, i);
|
|
437
|
+
return createRange(pos.line, pos.character, pos.line, pos.character + 1);
|
|
438
|
+
}
|
|
439
|
+
depth++;
|
|
440
|
+
}
|
|
441
|
+
else if (text[i] === "}" || text[i] === "]") {
|
|
442
|
+
depth--;
|
|
443
|
+
if (depth === 0)
|
|
444
|
+
itemCount++;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
return createRange(0, 0, 0, 1);
|
|
448
|
+
}
|
|
449
|
+
function offsetToPosition(text, offset) {
|
|
450
|
+
let line = 0;
|
|
451
|
+
let col = 0;
|
|
452
|
+
for (let i = 0; i < offset && i < text.length; i++) {
|
|
453
|
+
if (text[i] === "\n") {
|
|
454
|
+
line++;
|
|
455
|
+
col = 0;
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
col++;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
return vscode_languageserver_1.Position.create(line, col);
|
|
462
|
+
}
|
|
463
|
+
function escapeRegex(str) {
|
|
464
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
465
|
+
}
|
|
466
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
package/dist/hover.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Hover } from "vscode-languageserver";
|
|
2
|
+
/**
|
|
3
|
+
* Provides hover documentation for Blok workflow JSON files via LSP.
|
|
4
|
+
*
|
|
5
|
+
* Shows contextual documentation when hovering over:
|
|
6
|
+
* - Trigger type keys (http, grpc, cron, queue, etc.)
|
|
7
|
+
* - Workflow fields (name, version, steps, nodes, etc.)
|
|
8
|
+
* - Node configuration fields (inputs, conditions, set_var)
|
|
9
|
+
* - Step fields (node, type, runtime)
|
|
10
|
+
* - HTTP method values, runtime type values, node packages
|
|
11
|
+
*/
|
|
12
|
+
export declare function getHover(text: string, line: number, character: number): Hover | null;
|
package/dist/hover.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getHover = getHover;
|
|
4
|
+
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
5
|
+
const constants_1 = require("./constants");
|
|
6
|
+
/**
|
|
7
|
+
* Provides hover documentation for Blok workflow JSON files via LSP.
|
|
8
|
+
*
|
|
9
|
+
* Shows contextual documentation when hovering over:
|
|
10
|
+
* - Trigger type keys (http, grpc, cron, queue, etc.)
|
|
11
|
+
* - Workflow fields (name, version, steps, nodes, etc.)
|
|
12
|
+
* - Node configuration fields (inputs, conditions, set_var)
|
|
13
|
+
* - Step fields (node, type, runtime)
|
|
14
|
+
* - HTTP method values, runtime type values, node packages
|
|
15
|
+
*/
|
|
16
|
+
function getHover(text, line, character) {
|
|
17
|
+
const lines = text.split("\n");
|
|
18
|
+
if (line >= lines.length)
|
|
19
|
+
return null;
|
|
20
|
+
const lineText = lines[line];
|
|
21
|
+
// Find the quoted word at the cursor position
|
|
22
|
+
const wordInfo = findQuotedWordAt(lineText, character);
|
|
23
|
+
if (!wordInfo)
|
|
24
|
+
return null;
|
|
25
|
+
const { word, startChar, endChar } = wordInfo;
|
|
26
|
+
const range = vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(line, startChar), vscode_languageserver_1.Position.create(line, endChar));
|
|
27
|
+
// Check if it's a key (followed by colon)
|
|
28
|
+
const afterWord = lineText.substring(endChar).trimStart();
|
|
29
|
+
const isKey = afterWord.startsWith(":");
|
|
30
|
+
if (isKey) {
|
|
31
|
+
// Trigger type documentation
|
|
32
|
+
if (constants_1.TRIGGER_DOCS[word]) {
|
|
33
|
+
return createDocHover(constants_1.TRIGGER_DOCS[word], range);
|
|
34
|
+
}
|
|
35
|
+
// Field documentation
|
|
36
|
+
if (constants_1.FIELD_DOCS[word]) {
|
|
37
|
+
return createDocHover(constants_1.FIELD_DOCS[word], range);
|
|
38
|
+
}
|
|
39
|
+
// Step field documentation
|
|
40
|
+
if (constants_1.STEP_FIELD_DOCS[word]) {
|
|
41
|
+
return createDocHover(constants_1.STEP_FIELD_DOCS[word], range);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Value-based hover
|
|
45
|
+
if (!isKey) {
|
|
46
|
+
// HTTP methods
|
|
47
|
+
if (["GET", "POST", "PUT", "DELETE", "PATCH", "ANY"].includes(word)) {
|
|
48
|
+
return {
|
|
49
|
+
contents: {
|
|
50
|
+
kind: vscode_languageserver_1.MarkupKind.Markdown,
|
|
51
|
+
value: `**HTTP Method: ${word}**\n\nHTTP request method that will trigger this workflow.`,
|
|
52
|
+
},
|
|
53
|
+
range,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// Runtime type values (runtime.go, runtime.python3, etc.)
|
|
57
|
+
if (word.startsWith("runtime.")) {
|
|
58
|
+
const lang = word.replace("runtime.", "");
|
|
59
|
+
return {
|
|
60
|
+
contents: {
|
|
61
|
+
kind: vscode_languageserver_1.MarkupKind.Markdown,
|
|
62
|
+
value: `**Runtime Type: ${lang}**\n\nExecutes this node using the ${lang} runtime adapter. The node code must be written in ${lang} and served via the Blok runtime protocol (HTTP/gRPC).`,
|
|
63
|
+
},
|
|
64
|
+
range,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Common node packages
|
|
68
|
+
if (word === "@blok/api-call") {
|
|
69
|
+
return {
|
|
70
|
+
contents: {
|
|
71
|
+
kind: vscode_languageserver_1.MarkupKind.Markdown,
|
|
72
|
+
value: "**@blok/api-call**\n\nMakes HTTP API calls to external services.\n\n**Inputs:** `url`, `method`, `headers`, `body`, `responseType`",
|
|
73
|
+
},
|
|
74
|
+
range,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
if (word === "@blok/if-else") {
|
|
78
|
+
return {
|
|
79
|
+
contents: {
|
|
80
|
+
kind: vscode_languageserver_1.MarkupKind.Markdown,
|
|
81
|
+
value: "**@blok/if-else**\n\nConditional branching node. Evaluates JavaScript conditions against the workflow context.\n\nConfigure conditions in the `nodes` section using the `conditions` array.",
|
|
82
|
+
},
|
|
83
|
+
range,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
function findQuotedWordAt(line, character) {
|
|
90
|
+
// Find all quoted strings in the line and check if cursor is inside one
|
|
91
|
+
const regex = /"([^"]*)"/g;
|
|
92
|
+
for (const match of line.matchAll(regex)) {
|
|
93
|
+
const start = match.index; // position of opening quote
|
|
94
|
+
const end = match.index + match[0].length; // position after closing quote
|
|
95
|
+
if (character >= start && character <= end) {
|
|
96
|
+
return {
|
|
97
|
+
word: match[1],
|
|
98
|
+
startChar: start,
|
|
99
|
+
endChar: end,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
function createDocHover(doc, range) {
|
|
106
|
+
let value = `**${doc.title}**\n\n${doc.description}\n\n`;
|
|
107
|
+
if (doc.example) {
|
|
108
|
+
value += "```json\n" + doc.example + "\n```";
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
contents: {
|
|
112
|
+
kind: vscode_languageserver_1.MarkupKind.Markdown,
|
|
113
|
+
value,
|
|
114
|
+
},
|
|
115
|
+
range,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=hover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover.js","sourceRoot":"","sources":["../src/hover.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED