@lvce-editor/extension-host-worker 8.15.0 → 8.17.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.
Files changed (63) hide show
  1. package/dist/extension-api/index.js +1360 -0
  2. package/dist/extension-api/parts/Activation/Activation.js +13 -0
  3. package/dist/extension-api/parts/AssertCompletionProvider/AssertCompletionProvider.js +25 -0
  4. package/dist/extension-api/parts/AssertFormattingProvider/AssertFormattingProvider.js +22 -0
  5. package/dist/extension-api/parts/AssertStatusBarItemProvider/AssertStatusBarItemProvider.js +19 -0
  6. package/dist/extension-api/parts/Command/Command.js +0 -0
  7. package/dist/extension-api/parts/CommandCallback/CommandCallback.js +0 -0
  8. package/dist/extension-api/parts/CommandMap/CommandMap.js +14 -0
  9. package/dist/extension-api/parts/CommandRegistry/CommandRegistry.js +53 -0
  10. package/dist/extension-api/parts/CommandRegistrySnapshot/CommandRegistrySnapshot.js +0 -0
  11. package/dist/extension-api/parts/Completion/Completion.js +11 -0
  12. package/dist/extension-api/parts/CompletionItem/CompletionItem.js +0 -0
  13. package/dist/extension-api/parts/CompletionProvider/CompletionProvider.js +0 -0
  14. package/dist/extension-api/parts/CompletionProviderRegistry/CompletionProviderRegistry.js +78 -0
  15. package/dist/extension-api/parts/CompletionProviderRegistrySnapshot/CompletionProviderRegistrySnapshot.js +0 -0
  16. package/dist/extension-api/parts/CompletionProviderState/CompletionProviderState.js +10 -0
  17. package/dist/extension-api/parts/CompletionTextDocument/CompletionTextDocument.js +0 -0
  18. package/dist/extension-api/parts/Disposable/Disposable.js +0 -0
  19. package/dist/extension-api/parts/ExecuteCommand/ExecuteCommand.js +7 -0
  20. package/dist/extension-api/parts/ExecuteCompletionProvider/ExecuteCompletionProvider.js +5 -0
  21. package/dist/extension-api/parts/ExecuteFormattingProvider/ExecuteFormattingProvider.js +4 -0
  22. package/dist/extension-api/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.js +17 -0
  23. package/dist/extension-api/parts/ExtensionApiError/ExtensionApiError.js +9 -0
  24. package/dist/extension-api/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.js +15 -0
  25. package/dist/extension-api/parts/ExtensionApiWorkerHandleMessagePort/ExtensionApiWorkerHandleMessagePort.js +21 -0
  26. package/dist/extension-api/parts/ExtensionApiWorkerListen/ExtensionApiWorkerListen.js +11 -0
  27. package/dist/extension-api/parts/Formatting/Formatting.js +10 -0
  28. package/dist/extension-api/parts/FormattingEdit/FormattingEdit.js +0 -0
  29. package/dist/extension-api/parts/FormattingProvider/FormattingProvider.js +0 -0
  30. package/dist/extension-api/parts/FormattingProviderRegistry/FormattingProviderRegistry.js +42 -0
  31. package/dist/extension-api/parts/FormattingProviderRegistrySnapshot/FormattingProviderRegistrySnapshot.js +0 -0
  32. package/dist/extension-api/parts/FormattingProviderState/FormattingProviderState.js +10 -0
  33. package/dist/extension-api/parts/FormattingTextDocument/FormattingTextDocument.js +0 -0
  34. package/dist/extension-api/parts/GetCompletionProviderRegistrySnapshot/GetCompletionProviderRegistrySnapshot.js +4 -0
  35. package/dist/extension-api/parts/GetFormattingProviderRegistrySnapshot/GetFormattingProviderRegistrySnapshot.js +4 -0
  36. package/dist/extension-api/parts/GetStatusBarItemProviderRegistrySnapshot/GetStatusBarItemProviderRegistrySnapshot.js +4 -0
  37. package/dist/extension-api/parts/GetStatusBarItems/GetStatusBarItems.js +4 -0
  38. package/dist/extension-api/parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.js +17 -0
  39. package/dist/extension-api/parts/NotifyStatusBarChange/NotifyStatusBarChange.js +7 -0
  40. package/dist/extension-api/parts/ProviderRegistry/ProviderRegistry.js +95 -0
  41. package/dist/extension-api/parts/QuickPick/QuickPick.js +7 -0
  42. package/dist/extension-api/parts/QuickPickItem/QuickPickItem.js +0 -0
  43. package/dist/extension-api/parts/RegisterCompletionProvider/RegisterCompletionProvider.js +4 -0
  44. package/dist/extension-api/parts/RegisterFormattingProvider/RegisterFormattingProvider.js +4 -0
  45. package/dist/extension-api/parts/RegisterStatusBarItemProvider/RegisterStatusBarItemProvider.js +4 -0
  46. package/dist/extension-api/parts/RegisteredCommand/RegisteredCommand.js +0 -0
  47. package/dist/extension-api/parts/RegisteredCompletionProvider/RegisteredCompletionProvider.js +0 -0
  48. package/dist/extension-api/parts/RegisteredFormattingProvider/RegisteredFormattingProvider.js +0 -0
  49. package/dist/extension-api/parts/RegisteredStatusBarItemProvider/RegisteredStatusBarItemProvider.js +0 -0
  50. package/dist/extension-api/parts/ResetCompletionProviderRegistry/ResetCompletionProviderRegistry.js +4 -0
  51. package/dist/extension-api/parts/ResetFormattingProviderRegistry/ResetFormattingProviderRegistry.js +4 -0
  52. package/dist/extension-api/parts/ResetStatusBarItemProviderRegistry/ResetStatusBarItemProviderRegistry.js +4 -0
  53. package/dist/extension-api/parts/Rpc/Rpc.js +14 -0
  54. package/dist/extension-api/parts/ShowQuickPickOptions/ShowQuickPickOptions.js +0 -0
  55. package/dist/extension-api/parts/StatusBar/StatusBar.js +8 -0
  56. package/dist/extension-api/parts/StatusBarItem/StatusBarItem.js +0 -0
  57. package/dist/extension-api/parts/StatusBarItemProvider/StatusBarItemProvider.js +0 -0
  58. package/dist/extension-api/parts/StatusBarItemProviderHandle/StatusBarItemProviderHandle.js +0 -0
  59. package/dist/extension-api/parts/StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.js +52 -0
  60. package/dist/extension-api/parts/StatusBarItemProviderRegistrySnapshot/StatusBarItemProviderRegistrySnapshot.js +0 -0
  61. package/dist/extension-api/parts/StatusBarItemProviderState/StatusBarItemProviderState.js +10 -0
  62. package/dist/extensionHostWorkerMain.js +1308 -1200
  63. package/package.json +1 -1
@@ -0,0 +1,1360 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
5
+ };
6
+
7
+ // packages/extension-api/node_modules/@lvce-editor/verror/dist/index.js
8
+ var normalizeLine = (line) => {
9
+ if (line.startsWith("Error: ")) {
10
+ return line.slice("Error: ".length);
11
+ }
12
+ if (line.startsWith("VError: ")) {
13
+ return line.slice("VError: ".length);
14
+ }
15
+ return line;
16
+ };
17
+ var getCombinedMessage = (error, message) => {
18
+ const stringifiedError = normalizeLine(`${error}`);
19
+ if (message) {
20
+ return `${message}: ${stringifiedError}`;
21
+ }
22
+ return stringifiedError;
23
+ };
24
+ var NewLine = "\n";
25
+ var getNewLineIndex = (string2, startIndex = void 0) => {
26
+ return string2.indexOf(NewLine, startIndex);
27
+ };
28
+ var mergeStacks = (parent, child) => {
29
+ if (!child) {
30
+ return parent;
31
+ }
32
+ const parentNewLineIndex = getNewLineIndex(parent);
33
+ const childNewLineIndex = getNewLineIndex(child);
34
+ if (childNewLineIndex === -1) {
35
+ return parent;
36
+ }
37
+ const parentFirstLine = parent.slice(0, parentNewLineIndex);
38
+ const childRest = child.slice(childNewLineIndex);
39
+ const childFirstLine = normalizeLine(child.slice(0, childNewLineIndex));
40
+ if (parentFirstLine.includes(childFirstLine)) {
41
+ return parentFirstLine + childRest;
42
+ }
43
+ return child;
44
+ };
45
+ var VError = class extends Error {
46
+ constructor(error, message) {
47
+ const combinedMessage = getCombinedMessage(error, message);
48
+ super(combinedMessage);
49
+ this.name = "VError";
50
+ if (error instanceof Error) {
51
+ this.stack = mergeStacks(this.stack, error.stack);
52
+ }
53
+ if (error.codeFrame) {
54
+ this.codeFrame = error.codeFrame;
55
+ }
56
+ if (error.code) {
57
+ this.code = error.code;
58
+ }
59
+ }
60
+ };
61
+
62
+ // packages/extension-api/node_modules/@lvce-editor/ipc/dist/index.js
63
+ var isMessagePort = (value) => {
64
+ return value && value instanceof MessagePort;
65
+ };
66
+ var isMessagePortMain = (value) => {
67
+ return value && value.constructor && value.constructor.name === "MessagePortMain";
68
+ };
69
+ var isOffscreenCanvas = (value) => {
70
+ return typeof OffscreenCanvas !== "undefined" && value instanceof OffscreenCanvas;
71
+ };
72
+ var isInstanceOf = (value, constructorName) => {
73
+ return value?.constructor?.name === constructorName;
74
+ };
75
+ var isSocket = (value) => {
76
+ return isInstanceOf(value, "Socket");
77
+ };
78
+ var transferrables = [isMessagePort, isMessagePortMain, isOffscreenCanvas, isSocket];
79
+ var isTransferrable = (value) => {
80
+ for (const fn of transferrables) {
81
+ if (fn(value)) {
82
+ return true;
83
+ }
84
+ }
85
+ return false;
86
+ };
87
+ var walkValue = (value, transferrables2, isTransferrable2) => {
88
+ if (!value) {
89
+ return;
90
+ }
91
+ if (isTransferrable2(value)) {
92
+ transferrables2.push(value);
93
+ return;
94
+ }
95
+ if (Array.isArray(value)) {
96
+ for (const item of value) {
97
+ walkValue(item, transferrables2, isTransferrable2);
98
+ }
99
+ return;
100
+ }
101
+ if (typeof value === "object") {
102
+ for (const property of Object.values(value)) {
103
+ walkValue(property, transferrables2, isTransferrable2);
104
+ }
105
+ return;
106
+ }
107
+ };
108
+ var getTransferrables = (value) => {
109
+ const transferrables2 = [];
110
+ walkValue(value, transferrables2, isTransferrable);
111
+ return transferrables2;
112
+ };
113
+ var attachEvents = (that) => {
114
+ const handleMessage2 = (...args) => {
115
+ const data = that.getData(...args);
116
+ that.dispatchEvent(new MessageEvent("message", {
117
+ data
118
+ }));
119
+ };
120
+ that.onMessage(handleMessage2);
121
+ const handleClose = (event) => {
122
+ that.dispatchEvent(new Event("close"));
123
+ };
124
+ that.onClose(handleClose);
125
+ };
126
+ var Ipc = class extends EventTarget {
127
+ constructor(rawIpc) {
128
+ super();
129
+ this._rawIpc = rawIpc;
130
+ attachEvents(this);
131
+ }
132
+ };
133
+ var E_INCOMPATIBLE_NATIVE_MODULE = "E_INCOMPATIBLE_NATIVE_MODULE";
134
+ var E_MODULES_NOT_SUPPORTED_IN_ELECTRON = "E_MODULES_NOT_SUPPORTED_IN_ELECTRON";
135
+ var ERR_MODULE_NOT_FOUND = "ERR_MODULE_NOT_FOUND";
136
+ var NewLine2 = "\n";
137
+ var joinLines = (lines) => {
138
+ return lines.join(NewLine2);
139
+ };
140
+ var RE_AT = /^\s+at/;
141
+ var RE_AT_PROMISE_INDEX = /^\s*at async Promise.all \(index \d+\)$/;
142
+ var isNormalStackLine = (line) => {
143
+ return RE_AT.test(line) && !RE_AT_PROMISE_INDEX.test(line);
144
+ };
145
+ var getDetails = (lines) => {
146
+ const index = lines.findIndex(isNormalStackLine);
147
+ if (index === -1) {
148
+ return {
149
+ actualMessage: joinLines(lines),
150
+ rest: []
151
+ };
152
+ }
153
+ let lastIndex = index - 1;
154
+ while (++lastIndex < lines.length) {
155
+ if (!isNormalStackLine(lines[lastIndex])) {
156
+ break;
157
+ }
158
+ }
159
+ return {
160
+ actualMessage: lines[index - 1],
161
+ rest: lines.slice(index, lastIndex)
162
+ };
163
+ };
164
+ var splitLines = (lines) => {
165
+ return lines.split(NewLine2);
166
+ };
167
+ var RE_MESSAGE_CODE_BLOCK_START = /^Error: The module '.*'$/;
168
+ var RE_MESSAGE_CODE_BLOCK_END = /^\s* at/;
169
+ var isMessageCodeBlockStartIndex = (line) => {
170
+ return RE_MESSAGE_CODE_BLOCK_START.test(line);
171
+ };
172
+ var isMessageCodeBlockEndIndex = (line) => {
173
+ return RE_MESSAGE_CODE_BLOCK_END.test(line);
174
+ };
175
+ var getMessageCodeBlock = (stderr) => {
176
+ const lines = splitLines(stderr);
177
+ const startIndex = lines.findIndex(isMessageCodeBlockStartIndex);
178
+ const endIndex = startIndex + lines.slice(startIndex).findIndex(isMessageCodeBlockEndIndex, startIndex);
179
+ const relevantLines = lines.slice(startIndex, endIndex);
180
+ const relevantMessage = relevantLines.join(" ").slice("Error: ".length);
181
+ return relevantMessage;
182
+ };
183
+ var isModuleNotFoundMessage = (line) => {
184
+ return line.includes("[ERR_MODULE_NOT_FOUND]");
185
+ };
186
+ var getModuleNotFoundError = (stderr) => {
187
+ const lines = splitLines(stderr);
188
+ const messageIndex = lines.findIndex(isModuleNotFoundMessage);
189
+ const message = lines[messageIndex];
190
+ return {
191
+ code: ERR_MODULE_NOT_FOUND,
192
+ message
193
+ };
194
+ };
195
+ var isModuleNotFoundError = (stderr) => {
196
+ if (!stderr) {
197
+ return false;
198
+ }
199
+ return stderr.includes("ERR_MODULE_NOT_FOUND");
200
+ };
201
+ var isModulesSyntaxError = (stderr) => {
202
+ if (!stderr) {
203
+ return false;
204
+ }
205
+ return stderr.includes("SyntaxError: Cannot use import statement outside a module");
206
+ };
207
+ var RE_NATIVE_MODULE_ERROR = /^innerError Error: Cannot find module '.*.node'/;
208
+ var RE_NATIVE_MODULE_ERROR_2 = /was compiled against a different Node.js version/;
209
+ var isUnhelpfulNativeModuleError = (stderr) => {
210
+ return RE_NATIVE_MODULE_ERROR.test(stderr) && RE_NATIVE_MODULE_ERROR_2.test(stderr);
211
+ };
212
+ var getNativeModuleErrorMessage = (stderr) => {
213
+ const message = getMessageCodeBlock(stderr);
214
+ return {
215
+ code: E_INCOMPATIBLE_NATIVE_MODULE,
216
+ message: `Incompatible native node module: ${message}`
217
+ };
218
+ };
219
+ var getModuleSyntaxError = () => {
220
+ return {
221
+ code: E_MODULES_NOT_SUPPORTED_IN_ELECTRON,
222
+ message: `ES Modules are not supported in electron`
223
+ };
224
+ };
225
+ var getHelpfulChildProcessError = (stdout, stderr) => {
226
+ if (isUnhelpfulNativeModuleError(stderr)) {
227
+ return getNativeModuleErrorMessage(stderr);
228
+ }
229
+ if (isModulesSyntaxError(stderr)) {
230
+ return getModuleSyntaxError();
231
+ }
232
+ if (isModuleNotFoundError(stderr)) {
233
+ return getModuleNotFoundError(stderr);
234
+ }
235
+ const lines = splitLines(stderr);
236
+ const {
237
+ actualMessage,
238
+ rest
239
+ } = getDetails(lines);
240
+ return {
241
+ code: "",
242
+ message: actualMessage,
243
+ stack: rest
244
+ };
245
+ };
246
+ var IpcError = class extends VError {
247
+ // @ts-ignore
248
+ constructor(betterMessage, stdout = "", stderr = "") {
249
+ if (stdout || stderr) {
250
+ const {
251
+ code,
252
+ message,
253
+ stack
254
+ } = getHelpfulChildProcessError(stdout, stderr);
255
+ const cause = new Error(message);
256
+ cause.code = code;
257
+ cause.stack = stack;
258
+ super(cause, betterMessage);
259
+ } else {
260
+ super(betterMessage);
261
+ }
262
+ this.name = "IpcError";
263
+ this.stdout = stdout;
264
+ this.stderr = stderr;
265
+ }
266
+ };
267
+ var readyMessage = "ready";
268
+ var getData$2 = (event) => {
269
+ return event.data;
270
+ };
271
+ var listen$7 = () => {
272
+ if (typeof WorkerGlobalScope === "undefined") {
273
+ throw new TypeError("module is not in web worker scope");
274
+ }
275
+ return globalThis;
276
+ };
277
+ var signal$8 = (global) => {
278
+ global.postMessage(readyMessage);
279
+ };
280
+ var IpcChildWithModuleWorker = class extends Ipc {
281
+ getData(event) {
282
+ return getData$2(event);
283
+ }
284
+ send(message) {
285
+ this._rawIpc.postMessage(message);
286
+ }
287
+ sendAndTransfer(message) {
288
+ const transfer = getTransferrables(message);
289
+ this._rawIpc.postMessage(message, transfer);
290
+ }
291
+ dispose() {
292
+ }
293
+ onClose(callback) {
294
+ }
295
+ onMessage(callback) {
296
+ this._rawIpc.addEventListener("message", callback);
297
+ }
298
+ };
299
+ var wrap$f = (global) => {
300
+ return new IpcChildWithModuleWorker(global);
301
+ };
302
+ var waitForFirstMessage = async (port) => {
303
+ const {
304
+ promise,
305
+ resolve: resolve2
306
+ } = Promise.withResolvers();
307
+ port.addEventListener("message", resolve2, {
308
+ once: true
309
+ });
310
+ const event = await promise;
311
+ return event.data;
312
+ };
313
+ var listen$6 = async () => {
314
+ const parentIpcRaw = listen$7();
315
+ signal$8(parentIpcRaw);
316
+ const parentIpc = wrap$f(parentIpcRaw);
317
+ const firstMessage = await waitForFirstMessage(parentIpc);
318
+ if (firstMessage.method !== "initialize") {
319
+ throw new IpcError("unexpected first message");
320
+ }
321
+ const type = firstMessage.params[0];
322
+ if (type === "message-port") {
323
+ parentIpc.send({
324
+ id: firstMessage.id,
325
+ jsonrpc: "2.0",
326
+ result: null
327
+ });
328
+ parentIpc.dispose();
329
+ const port = firstMessage.params[1];
330
+ return port;
331
+ }
332
+ return globalThis;
333
+ };
334
+ var IpcChildWithModuleWorkerAndMessagePort = class extends Ipc {
335
+ getData(event) {
336
+ return getData$2(event);
337
+ }
338
+ send(message) {
339
+ this._rawIpc.postMessage(message);
340
+ }
341
+ sendAndTransfer(message) {
342
+ const transfer = getTransferrables(message);
343
+ this._rawIpc.postMessage(message, transfer);
344
+ }
345
+ dispose() {
346
+ if (this._rawIpc.close) {
347
+ this._rawIpc.close();
348
+ }
349
+ }
350
+ onClose(callback) {
351
+ }
352
+ onMessage(callback) {
353
+ this._rawIpc.addEventListener("message", callback);
354
+ this._rawIpc.start();
355
+ }
356
+ };
357
+ var wrap$e = (port) => {
358
+ return new IpcChildWithModuleWorkerAndMessagePort(port);
359
+ };
360
+ var IpcChildWithModuleWorkerAndMessagePort$1 = {
361
+ __proto__: null,
362
+ listen: listen$6,
363
+ wrap: wrap$e
364
+ };
365
+ var addListener = (emitter, type, callback) => {
366
+ if ("addEventListener" in emitter) {
367
+ emitter.addEventListener(type, callback);
368
+ } else {
369
+ emitter.on(type, callback);
370
+ }
371
+ };
372
+ var removeListener = (emitter, type, callback) => {
373
+ if ("removeEventListener" in emitter) {
374
+ emitter.removeEventListener(type, callback);
375
+ } else {
376
+ emitter.off(type, callback);
377
+ }
378
+ };
379
+ var getFirstEvent = (eventEmitter, eventMap) => {
380
+ const {
381
+ promise,
382
+ resolve: resolve2
383
+ } = Promise.withResolvers();
384
+ const listenerMap = /* @__PURE__ */ Object.create(null);
385
+ const cleanup = (value) => {
386
+ for (const event of Object.keys(eventMap)) {
387
+ removeListener(eventEmitter, event, listenerMap[event]);
388
+ }
389
+ resolve2(value);
390
+ };
391
+ for (const [event, type] of Object.entries(eventMap)) {
392
+ const listener = (event2) => {
393
+ cleanup({
394
+ event: event2,
395
+ type
396
+ });
397
+ };
398
+ addListener(eventEmitter, event, listener);
399
+ listenerMap[event] = listener;
400
+ }
401
+ return promise;
402
+ };
403
+ var Message$1 = 3;
404
+ var create$5 = async ({
405
+ isMessagePortOpen,
406
+ messagePort
407
+ }) => {
408
+ if (!isMessagePort(messagePort)) {
409
+ throw new IpcError("port must be of type MessagePort");
410
+ }
411
+ if (isMessagePortOpen) {
412
+ return messagePort;
413
+ }
414
+ const eventPromise = getFirstEvent(messagePort, {
415
+ message: Message$1
416
+ });
417
+ messagePort.start();
418
+ const {
419
+ event,
420
+ type
421
+ } = await eventPromise;
422
+ if (type !== Message$1) {
423
+ throw new IpcError("Failed to wait for ipc message");
424
+ }
425
+ if (event.data !== readyMessage) {
426
+ throw new IpcError("unexpected first message");
427
+ }
428
+ return messagePort;
429
+ };
430
+ var signal$1 = (messagePort) => {
431
+ messagePort.start();
432
+ };
433
+ var IpcParentWithMessagePort = class extends Ipc {
434
+ getData = getData$2;
435
+ send(message) {
436
+ this._rawIpc.postMessage(message);
437
+ }
438
+ sendAndTransfer(message) {
439
+ const transfer = getTransferrables(message);
440
+ this._rawIpc.postMessage(message, transfer);
441
+ }
442
+ dispose() {
443
+ this._rawIpc.close();
444
+ }
445
+ onMessage(callback) {
446
+ this._rawIpc.addEventListener("message", callback);
447
+ }
448
+ onClose(callback) {
449
+ }
450
+ };
451
+ var wrap$5 = (messagePort) => {
452
+ return new IpcParentWithMessagePort(messagePort);
453
+ };
454
+ var IpcParentWithMessagePort$1 = {
455
+ __proto__: null,
456
+ create: create$5,
457
+ signal: signal$1,
458
+ wrap: wrap$5
459
+ };
460
+
461
+ // packages/extension-api/node_modules/@lvce-editor/command/dist/index.js
462
+ var CommandNotFoundError = class extends Error {
463
+ constructor(command) {
464
+ super(`Command not found ${command}`);
465
+ this.name = "CommandNotFoundError";
466
+ }
467
+ };
468
+ var commands = /* @__PURE__ */ Object.create(null);
469
+ var register = (commandMap5) => {
470
+ Object.assign(commands, commandMap5);
471
+ };
472
+ var getCommand = (key) => {
473
+ return commands[key];
474
+ };
475
+ var execute = (command, ...args) => {
476
+ const fn = getCommand(command);
477
+ if (!fn) {
478
+ throw new CommandNotFoundError(command);
479
+ }
480
+ return fn(...args);
481
+ };
482
+
483
+ // packages/extension-api/node_modules/@lvce-editor/json-rpc/dist/index.js
484
+ var Two = "2.0";
485
+ var callbacks = /* @__PURE__ */ Object.create(null);
486
+ var get = (id2) => {
487
+ return callbacks[id2];
488
+ };
489
+ var remove = (id2) => {
490
+ delete callbacks[id2];
491
+ };
492
+ var JsonRpcError = class extends Error {
493
+ constructor(message) {
494
+ super(message);
495
+ this.name = "JsonRpcError";
496
+ }
497
+ };
498
+ var NewLine3 = "\n";
499
+ var DomException = "DOMException";
500
+ var ReferenceError$1 = "ReferenceError";
501
+ var SyntaxError$1 = "SyntaxError";
502
+ var TypeError$1 = "TypeError";
503
+ var getErrorConstructor = (message, type) => {
504
+ if (type) {
505
+ switch (type) {
506
+ case DomException:
507
+ return DOMException;
508
+ case ReferenceError$1:
509
+ return ReferenceError;
510
+ case SyntaxError$1:
511
+ return SyntaxError;
512
+ case TypeError$1:
513
+ return TypeError;
514
+ default:
515
+ return Error;
516
+ }
517
+ }
518
+ if (message.startsWith("TypeError: ")) {
519
+ return TypeError;
520
+ }
521
+ if (message.startsWith("SyntaxError: ")) {
522
+ return SyntaxError;
523
+ }
524
+ if (message.startsWith("ReferenceError: ")) {
525
+ return ReferenceError;
526
+ }
527
+ return Error;
528
+ };
529
+ var constructError = (message, type, name) => {
530
+ const ErrorConstructor = getErrorConstructor(message, type);
531
+ if (ErrorConstructor === DOMException && name) {
532
+ return new ErrorConstructor(message, name);
533
+ }
534
+ if (ErrorConstructor === Error) {
535
+ const error = new Error(message);
536
+ if (name && name !== "VError") {
537
+ error.name = name;
538
+ }
539
+ return error;
540
+ }
541
+ return new ErrorConstructor(message);
542
+ };
543
+ var joinLines2 = (lines) => {
544
+ return lines.join(NewLine3);
545
+ };
546
+ var splitLines2 = (lines) => {
547
+ return lines.split(NewLine3);
548
+ };
549
+ var getCurrentStack = () => {
550
+ const stackLinesToSkip = 3;
551
+ const currentStack = joinLines2(splitLines2(new Error().stack || "").slice(stackLinesToSkip));
552
+ return currentStack;
553
+ };
554
+ var getNewLineIndex2 = (string2, startIndex = void 0) => {
555
+ return string2.indexOf(NewLine3, startIndex);
556
+ };
557
+ var getParentStack = (error) => {
558
+ let parentStack = error.stack || error.data || error.message || "";
559
+ if (parentStack.startsWith(" at")) {
560
+ parentStack = error.message + NewLine3 + parentStack;
561
+ }
562
+ return parentStack;
563
+ };
564
+ var MethodNotFound = -32601;
565
+ var Custom = -32001;
566
+ var restoreJsonRpcError = (error) => {
567
+ const currentStack = getCurrentStack();
568
+ if (error && error instanceof Error) {
569
+ if (typeof error.stack === "string") {
570
+ error.stack = error.stack + NewLine3 + currentStack;
571
+ }
572
+ return error;
573
+ }
574
+ if (error && error.code && error.code === MethodNotFound) {
575
+ const restoredError = new JsonRpcError(error.message);
576
+ const parentStack = getParentStack(error);
577
+ restoredError.stack = parentStack + NewLine3 + currentStack;
578
+ return restoredError;
579
+ }
580
+ if (error && error.message) {
581
+ const restoredError = constructError(error.message, error.type, error.name);
582
+ if (error.data) {
583
+ if (error.data.stack && error.data.type && error.message) {
584
+ restoredError.stack = error.data.type + ": " + error.message + NewLine3 + error.data.stack + NewLine3 + currentStack;
585
+ } else if (error.data.stack) {
586
+ restoredError.stack = error.data.stack;
587
+ }
588
+ if (error.data.codeFrame) {
589
+ restoredError.codeFrame = error.data.codeFrame;
590
+ }
591
+ if (error.data.code) {
592
+ restoredError.code = error.data.code;
593
+ }
594
+ if (error.data.type) {
595
+ restoredError.name = error.data.type;
596
+ }
597
+ } else {
598
+ if (error.stack) {
599
+ const lowerStack = restoredError.stack || "";
600
+ const indexNewLine = getNewLineIndex2(lowerStack);
601
+ const parentStack = getParentStack(error);
602
+ restoredError.stack = parentStack + lowerStack.slice(indexNewLine);
603
+ }
604
+ if (error.codeFrame) {
605
+ restoredError.codeFrame = error.codeFrame;
606
+ }
607
+ }
608
+ return restoredError;
609
+ }
610
+ if (typeof error === "string") {
611
+ return new Error(`JsonRpc Error: ${error}`);
612
+ }
613
+ return new Error(`JsonRpc Error: ${error}`);
614
+ };
615
+ var unwrapJsonRpcResult = (responseMessage) => {
616
+ if ("error" in responseMessage) {
617
+ const restoredError = restoreJsonRpcError(responseMessage.error);
618
+ throw restoredError;
619
+ }
620
+ if ("result" in responseMessage) {
621
+ return responseMessage.result;
622
+ }
623
+ throw new JsonRpcError("unexpected response message");
624
+ };
625
+ var warn = (...args) => {
626
+ console.warn(...args);
627
+ };
628
+ var resolve = (id2, response) => {
629
+ const fn = get(id2);
630
+ if (!fn) {
631
+ console.log(response);
632
+ warn(`callback ${id2} may already be disposed`);
633
+ return;
634
+ }
635
+ fn(response);
636
+ remove(id2);
637
+ };
638
+ var E_COMMAND_NOT_FOUND = "E_COMMAND_NOT_FOUND";
639
+ var getErrorType = (prettyError) => {
640
+ if (prettyError && prettyError.type) {
641
+ return prettyError.type;
642
+ }
643
+ if (prettyError && prettyError.constructor && prettyError.constructor.name) {
644
+ return prettyError.constructor.name;
645
+ }
646
+ return void 0;
647
+ };
648
+ var isAlreadyStack = (line) => {
649
+ return line.trim().startsWith("at ");
650
+ };
651
+ var getStack = (prettyError) => {
652
+ const stackString = prettyError.stack || "";
653
+ const newLineIndex = stackString.indexOf("\n");
654
+ if (newLineIndex !== -1 && !isAlreadyStack(stackString.slice(0, newLineIndex))) {
655
+ return stackString.slice(newLineIndex + 1);
656
+ }
657
+ return stackString;
658
+ };
659
+ var getErrorProperty = (error, prettyError) => {
660
+ if (error && error.code === E_COMMAND_NOT_FOUND) {
661
+ return {
662
+ code: MethodNotFound,
663
+ data: error.stack,
664
+ message: error.message
665
+ };
666
+ }
667
+ return {
668
+ code: Custom,
669
+ data: {
670
+ code: prettyError.code,
671
+ codeFrame: prettyError.codeFrame,
672
+ name: prettyError.name,
673
+ stack: getStack(prettyError),
674
+ type: getErrorType(prettyError)
675
+ },
676
+ message: prettyError.message
677
+ };
678
+ };
679
+ var create$1 = (id2, error) => {
680
+ return {
681
+ error,
682
+ id: id2,
683
+ jsonrpc: Two
684
+ };
685
+ };
686
+ var getErrorResponse = (id2, error, preparePrettyError2, logError2) => {
687
+ const prettyError = preparePrettyError2(error);
688
+ logError2(error, prettyError);
689
+ const errorProperty = getErrorProperty(error, prettyError);
690
+ return create$1(id2, errorProperty);
691
+ };
692
+ var create = (message, result) => {
693
+ return {
694
+ id: message.id,
695
+ jsonrpc: Two,
696
+ result: result ?? null
697
+ };
698
+ };
699
+ var getSuccessResponse = (message, result) => {
700
+ const resultProperty = result ?? null;
701
+ return create(message, resultProperty);
702
+ };
703
+ var getErrorResponseSimple = (id2, error) => {
704
+ return {
705
+ error: {
706
+ code: Custom,
707
+ data: error,
708
+ // @ts-ignore
709
+ message: error.message
710
+ },
711
+ id: id2,
712
+ jsonrpc: Two
713
+ };
714
+ };
715
+ var getResponse = async (message, ipc, execute2, preparePrettyError2, logError2, requiresSocket2) => {
716
+ try {
717
+ const result = requiresSocket2(message.method) ? await execute2(message.method, ipc, ...message.params) : await execute2(message.method, ...message.params);
718
+ return getSuccessResponse(message, result);
719
+ } catch (error) {
720
+ if (ipc.canUseSimpleErrorResponse) {
721
+ return getErrorResponseSimple(message.id, error);
722
+ }
723
+ return getErrorResponse(message.id, error, preparePrettyError2, logError2);
724
+ }
725
+ };
726
+ var defaultPreparePrettyError = (error) => {
727
+ return error;
728
+ };
729
+ var defaultLogError = () => {
730
+ };
731
+ var defaultRequiresSocket = () => {
732
+ return false;
733
+ };
734
+ var defaultResolve = resolve;
735
+ var normalizeParams = (args) => {
736
+ if (args.length === 1) {
737
+ const options = args[0];
738
+ return {
739
+ execute: options.execute,
740
+ ipc: options.ipc,
741
+ logError: options.logError || defaultLogError,
742
+ message: options.message,
743
+ preparePrettyError: options.preparePrettyError || defaultPreparePrettyError,
744
+ requiresSocket: options.requiresSocket || defaultRequiresSocket,
745
+ resolve: options.resolve || defaultResolve
746
+ };
747
+ }
748
+ return {
749
+ execute: args[2],
750
+ ipc: args[0],
751
+ logError: args[5],
752
+ message: args[1],
753
+ preparePrettyError: args[4],
754
+ requiresSocket: args[6],
755
+ resolve: args[3]
756
+ };
757
+ };
758
+ var handleJsonRpcMessage = async (...args) => {
759
+ const options = normalizeParams(args);
760
+ const {
761
+ execute: execute2,
762
+ ipc,
763
+ logError: logError2,
764
+ message,
765
+ preparePrettyError: preparePrettyError2,
766
+ requiresSocket: requiresSocket2,
767
+ resolve: resolve2
768
+ } = options;
769
+ if ("id" in message) {
770
+ if ("method" in message) {
771
+ const response = await getResponse(message, ipc, execute2, preparePrettyError2, logError2, requiresSocket2);
772
+ try {
773
+ ipc.send(response);
774
+ } catch (error) {
775
+ const errorResponse = getErrorResponse(message.id, error, preparePrettyError2, logError2);
776
+ ipc.send(errorResponse);
777
+ }
778
+ return;
779
+ }
780
+ resolve2(message.id, message);
781
+ return;
782
+ }
783
+ if ("method" in message) {
784
+ await getResponse(message, ipc, execute2, preparePrettyError2, logError2, requiresSocket2);
785
+ return;
786
+ }
787
+ throw new JsonRpcError("unexpected message");
788
+ };
789
+
790
+ // packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/JsonRpcVersion/JsonRpcVersion.js
791
+ var Two2 = "2.0";
792
+
793
+ // packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/JsonRpcEvent/JsonRpcEvent.js
794
+ var create2 = (method, params) => {
795
+ return {
796
+ jsonrpc: Two2,
797
+ method,
798
+ params
799
+ };
800
+ };
801
+
802
+ // packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/JsonRpcRequest/JsonRpcRequest.js
803
+ var create3 = (id2, method, params) => {
804
+ const message = {
805
+ id: id2,
806
+ jsonrpc: Two2,
807
+ method,
808
+ params
809
+ };
810
+ return message;
811
+ };
812
+
813
+ // packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/Id/Id.js
814
+ var id = 0;
815
+ var create4 = () => {
816
+ return ++id;
817
+ };
818
+
819
+ // packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/RegisterPromise/RegisterPromise.js
820
+ var registerPromise = (map) => {
821
+ const id2 = create4();
822
+ const { promise, resolve: resolve2 } = Promise.withResolvers();
823
+ map[id2] = resolve2;
824
+ return { id: id2, promise };
825
+ };
826
+
827
+ // packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/CreateRpc/CreateRpc.js
828
+ var invokeHelper = async (callbacks2, ipc, method, params, useSendAndTransfer) => {
829
+ const { id: id2, promise } = registerPromise(callbacks2);
830
+ const message = create3(id2, method, params);
831
+ if (useSendAndTransfer && ipc.sendAndTransfer) {
832
+ ipc.sendAndTransfer(message);
833
+ } else {
834
+ ipc.send(message);
835
+ }
836
+ const responseMessage = await promise;
837
+ return unwrapJsonRpcResult(responseMessage);
838
+ };
839
+ var createRpc = (ipc) => {
840
+ const callbacks2 = /* @__PURE__ */ Object.create(null);
841
+ ipc._resolve = (id2, response) => {
842
+ const fn = callbacks2[id2];
843
+ if (!fn) {
844
+ console.warn(`callback ${id2} may already be disposed`);
845
+ return;
846
+ }
847
+ fn(response);
848
+ delete callbacks2[id2];
849
+ };
850
+ const rpc2 = {
851
+ async dispose() {
852
+ await ipc?.dispose();
853
+ },
854
+ invoke(method, ...params) {
855
+ return invokeHelper(callbacks2, ipc, method, params, false);
856
+ },
857
+ invokeAndTransfer(method, ...params) {
858
+ return invokeHelper(callbacks2, ipc, method, params, true);
859
+ },
860
+ // @ts-ignore
861
+ ipc,
862
+ /**
863
+ * @deprecated
864
+ */
865
+ send(method, ...params) {
866
+ const message = create2(method, params);
867
+ ipc.send(message);
868
+ }
869
+ };
870
+ return rpc2;
871
+ };
872
+
873
+ // packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/HandleMessage/HandleMessage.js
874
+ var requiresSocket = () => {
875
+ return false;
876
+ };
877
+ var preparePrettyError = (error) => {
878
+ return error;
879
+ };
880
+ var logError = () => {
881
+ };
882
+ var handleMessage = (event) => {
883
+ const actualRequiresSocket = event?.target?.requiresSocket || requiresSocket;
884
+ const actualExecute = event?.target?.execute || execute;
885
+ return handleJsonRpcMessage(event.target, event.data, actualExecute, event.target._resolve, preparePrettyError, logError, actualRequiresSocket);
886
+ };
887
+
888
+ // packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/HandleIpc/HandleIpc.js
889
+ var handleIpc = (ipc) => {
890
+ if ("addEventListener" in ipc) {
891
+ ipc.addEventListener("message", handleMessage);
892
+ } else if ("on" in ipc) {
893
+ ipc.on("message", handleMessage);
894
+ }
895
+ };
896
+
897
+ // packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/IpcChildNode/IpcChildNode.js
898
+ var listen = async (module, options) => {
899
+ const rawIpc = await module.listen(options);
900
+ if (module.signal) {
901
+ module.signal(rawIpc);
902
+ }
903
+ const ipc = module.wrap(rawIpc);
904
+ return ipc;
905
+ };
906
+
907
+ // packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/PlainMessagePortRpc/PlainMessagePortRpc.js
908
+ var PlainMessagePortRpc_exports = {};
909
+ __export(PlainMessagePortRpc_exports, {
910
+ create: () => create5
911
+ });
912
+ var create5 = async ({ commandMap: commandMap5, isMessagePortOpen = true, messagePort }) => {
913
+ register(commandMap5);
914
+ const rawIpc = await IpcParentWithMessagePort$1.create({
915
+ isMessagePortOpen,
916
+ messagePort
917
+ });
918
+ const ipc = IpcParentWithMessagePort$1.wrap(rawIpc);
919
+ handleIpc(ipc);
920
+ const rpc2 = createRpc(ipc);
921
+ messagePort.start();
922
+ return rpc2;
923
+ };
924
+
925
+ // packages/extension-api/node_modules/@lvce-editor/rpc/dist/parts/WebWorkerRpcClient/WebWorkerRpcClient.js
926
+ var WebWorkerRpcClient_exports = {};
927
+ __export(WebWorkerRpcClient_exports, {
928
+ create: () => create6
929
+ });
930
+ var create6 = async ({ commandMap: commandMap5 }) => {
931
+ register(commandMap5);
932
+ const ipc = await listen(IpcChildWithModuleWorkerAndMessagePort$1);
933
+ handleIpc(ipc);
934
+ const rpc2 = createRpc(ipc);
935
+ return rpc2;
936
+ };
937
+
938
+ // packages/extension-api/src/parts/ExtensionApiError/ExtensionApiError.ts
939
+ var ExtensionApiError = class extends Error {
940
+ constructor(message) {
941
+ super(message);
942
+ this.name = "ExtensionApiError";
943
+ }
944
+ };
945
+
946
+ // packages/extension-api/src/parts/CommandRegistry/CommandRegistry.ts
947
+ var commands2 = /* @__PURE__ */ Object.create(null);
948
+ var assertCommand = (command) => {
949
+ if (!command) {
950
+ throw new ExtensionApiError("command is not defined");
951
+ }
952
+ if (typeof command.id !== "string" || command.id.length === 0) {
953
+ throw new ExtensionApiError("command is missing id");
954
+ }
955
+ if (typeof command.execute !== "function") {
956
+ throw new ExtensionApiError(`command ${command.id} is missing execute function`);
957
+ }
958
+ if (command.id in commands2) {
959
+ throw new ExtensionApiError(`command ${command.id} is already registered`);
960
+ }
961
+ };
962
+ var registerCommand = (command) => {
963
+ assertCommand(command);
964
+ commands2[command.id] = {
965
+ execute(...args) {
966
+ return command.execute(...args);
967
+ },
968
+ id: command.id
969
+ };
970
+ return {
971
+ dispose() {
972
+ delete commands2[command.id];
973
+ }
974
+ };
975
+ };
976
+ var getCommandRegistrySnapshot = () => {
977
+ return {
978
+ commands: Object.values(commands2)
979
+ };
980
+ };
981
+ var executeCommand = async (id2, ...args) => {
982
+ const command = commands2[id2];
983
+ if (!command) {
984
+ throw new ExtensionApiError(`command ${id2} not found`);
985
+ }
986
+ return command.execute(...args);
987
+ };
988
+
989
+ // packages/extension-api/src/parts/ProviderRegistry/ProviderRegistry.ts
990
+ var getProviderMethod = (provider, methodName) => {
991
+ const method = provider[methodName];
992
+ if (typeof method !== "function") {
993
+ return void 0;
994
+ }
995
+ return method;
996
+ };
997
+ var assertProviderMethod = (provider, providerName, providerId, methodName) => {
998
+ if (typeof provider[methodName] !== "function") {
999
+ throw new ExtensionApiError(`${providerName} ${providerId} is missing ${methodName} function`);
1000
+ }
1001
+ };
1002
+ var assertOptionalProviderMethod = (provider, providerName, providerId, methodName) => {
1003
+ if (provider[methodName] !== void 0 && typeof provider[methodName] !== "function") {
1004
+ throw new ExtensionApiError(`${providerName} ${providerId} has invalid ${methodName} function`);
1005
+ }
1006
+ };
1007
+ var createProviderRegistry = ({
1008
+ mapProvider,
1009
+ optionalMethods = [],
1010
+ providerName,
1011
+ requiredMethods,
1012
+ requireLanguageId = false
1013
+ }) => {
1014
+ const providers = /* @__PURE__ */ Object.create(null);
1015
+ const hasProvider = (id2) => {
1016
+ return id2 in providers;
1017
+ };
1018
+ const registerProvider = (provider) => {
1019
+ if (!provider) {
1020
+ throw new ExtensionApiError(`${providerName} is not defined`);
1021
+ }
1022
+ const providerRecord = provider;
1023
+ const { id: id2 } = providerRecord;
1024
+ if (typeof id2 !== "string" || id2.length === 0) {
1025
+ throw new ExtensionApiError(`${providerName} is missing id`);
1026
+ }
1027
+ if (requireLanguageId && (typeof providerRecord.languageId !== "string" || providerRecord.languageId.length === 0)) {
1028
+ throw new ExtensionApiError(`${providerName} ${id2} is missing languageId`);
1029
+ }
1030
+ for (const methodName of requiredMethods) {
1031
+ assertProviderMethod(providerRecord, providerName, id2, methodName);
1032
+ }
1033
+ for (const methodName of optionalMethods) {
1034
+ assertOptionalProviderMethod(providerRecord, providerName, id2, methodName);
1035
+ }
1036
+ if (hasProvider(id2)) {
1037
+ throw new ExtensionApiError(`${providerName} ${id2} is already registered`);
1038
+ }
1039
+ const registeredProvider = mapProvider(provider);
1040
+ providers[registeredProvider.id] = registeredProvider;
1041
+ return registeredProvider;
1042
+ };
1043
+ const deleteProvider = (id2) => {
1044
+ delete providers[id2];
1045
+ };
1046
+ const getProviders = () => {
1047
+ return Object.values(providers);
1048
+ };
1049
+ const getProviderByLanguageId = (languageId) => {
1050
+ return getProviders().find((provider) => {
1051
+ return "languageId" in provider && provider.languageId === languageId;
1052
+ });
1053
+ };
1054
+ const reset = () => {
1055
+ for (const id2 of Object.keys(providers)) {
1056
+ delete providers[id2];
1057
+ }
1058
+ };
1059
+ const executeProviderByLanguageId = async (languageId, methodName, args, validateResult) => {
1060
+ const provider = getProviderByLanguageId(languageId);
1061
+ if (!provider) {
1062
+ throw new ExtensionApiError(`No ${providerName} found for ${languageId}`);
1063
+ }
1064
+ const method = getProviderMethod(provider, methodName);
1065
+ if (!method) {
1066
+ throw new ExtensionApiError(`${providerName} ${provider.id} is missing ${methodName} function`);
1067
+ }
1068
+ const result = await method(...args);
1069
+ return validateResult ? validateResult(result) : result;
1070
+ };
1071
+ return {
1072
+ deleteProvider,
1073
+ executeProviderByLanguageId,
1074
+ getProviderByLanguageId,
1075
+ getProviders,
1076
+ hasProvider,
1077
+ registerProvider,
1078
+ reset
1079
+ };
1080
+ };
1081
+
1082
+ // packages/extension-api/src/parts/CompletionProviderRegistry/CompletionProviderRegistry.ts
1083
+ var getType = (value) => {
1084
+ if (value === null) {
1085
+ return "null";
1086
+ }
1087
+ if (typeof value === "string") {
1088
+ return JSON.stringify(value);
1089
+ }
1090
+ return typeof value;
1091
+ };
1092
+ var validateCompletionResult = (completion) => {
1093
+ if (!Array.isArray(completion)) {
1094
+ throw new ExtensionApiError(`invalid completion result: completion must be of type array but is ${getType(completion)}`);
1095
+ }
1096
+ for (const item of completion) {
1097
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
1098
+ throw new ExtensionApiError(`invalid completion result: expected completion item to be of type object but was of type ${getType(item)}`);
1099
+ }
1100
+ }
1101
+ return completion;
1102
+ };
1103
+ var registry = createProviderRegistry({
1104
+ mapProvider(provider) {
1105
+ return {
1106
+ id: provider.id,
1107
+ languageId: provider.languageId,
1108
+ provideCompletions(textDocument, offset, ...args) {
1109
+ return provider.provideCompletions(textDocument, offset, ...args);
1110
+ },
1111
+ resolveCompletionItem: provider.resolveCompletionItem ? (textDocument, offset, name, completionItem, ...args) => provider.resolveCompletionItem?.(textDocument, offset, name, completionItem, ...args) : void 0
1112
+ };
1113
+ },
1114
+ optionalMethods: ["resolveCompletionItem"],
1115
+ providerName: "completion provider",
1116
+ requiredMethods: ["provideCompletions"],
1117
+ requireLanguageId: true
1118
+ });
1119
+ var hasCompletionProvider = registry.hasProvider;
1120
+ var registerCompletionProvider = (provider) => {
1121
+ const registeredProvider = registry.registerProvider(provider);
1122
+ return {
1123
+ dispose() {
1124
+ registry.deleteProvider(registeredProvider.id);
1125
+ }
1126
+ };
1127
+ };
1128
+ var executeCompletionProvider = async (textDocument, offset, ...args) => {
1129
+ return registry.executeProviderByLanguageId(
1130
+ textDocument.languageId,
1131
+ "provideCompletions",
1132
+ [textDocument, offset, ...args],
1133
+ validateCompletionResult
1134
+ );
1135
+ };
1136
+ var executeResolveCompletionItemProvider = async (textDocument, offset, name, completionItem, ...args) => {
1137
+ const provider = registry.getProviderByLanguageId(textDocument.languageId);
1138
+ if (!provider) {
1139
+ throw new ExtensionApiError(`No completion provider found for ${textDocument.languageId}`);
1140
+ }
1141
+ return provider.resolveCompletionItem?.(textDocument, offset, name, completionItem, ...args);
1142
+ };
1143
+ var getCompletionProviders = registry.getProviders;
1144
+ var getCompletionProviderRegistrySnapshot = () => {
1145
+ return {
1146
+ providers: registry.getProviders()
1147
+ };
1148
+ };
1149
+ var resetCompletionProviderRegistry = registry.reset;
1150
+
1151
+ // packages/extension-api/src/parts/FormattingProviderRegistry/FormattingProviderRegistry.ts
1152
+ var registry2 = createProviderRegistry({
1153
+ mapProvider(provider) {
1154
+ return {
1155
+ format(textDocument, ...args) {
1156
+ return provider.format(textDocument, ...args);
1157
+ },
1158
+ id: provider.id,
1159
+ languageId: provider.languageId
1160
+ };
1161
+ },
1162
+ providerName: "formatting provider",
1163
+ requiredMethods: ["format"],
1164
+ requireLanguageId: true
1165
+ });
1166
+ var hasFormattingProvider = registry2.hasProvider;
1167
+ var registerFormattingProvider = (provider) => {
1168
+ const registeredProvider = registry2.registerProvider(provider);
1169
+ return {
1170
+ dispose() {
1171
+ registry2.deleteProvider(registeredProvider.id);
1172
+ }
1173
+ };
1174
+ };
1175
+ var executeFormattingProvider = async (textDocument, ...args) => {
1176
+ return registry2.executeProviderByLanguageId(textDocument.languageId, "format", [textDocument, ...args]);
1177
+ };
1178
+ var getFormattingProviders = registry2.getProviders;
1179
+ var getFormattingProviderRegistrySnapshot = () => {
1180
+ return {
1181
+ providers: registry2.getProviders()
1182
+ };
1183
+ };
1184
+ var resetFormattingProviderRegistry = registry2.reset;
1185
+
1186
+ // packages/extension-api/src/parts/Rpc/Rpc.ts
1187
+ var rpc;
1188
+ var set = (value) => {
1189
+ rpc = value;
1190
+ };
1191
+ var invoke = async (method, ...params) => {
1192
+ if (!rpc) {
1193
+ return void 0;
1194
+ }
1195
+ return rpc.invoke(method, ...params);
1196
+ };
1197
+
1198
+ // packages/extension-api/src/parts/NotifyStatusBarChange/NotifyStatusBarChange.ts
1199
+ var notifyStatusBarChange = async (id2) => {
1200
+ await invoke("StatusBar.handleChange", id2);
1201
+ };
1202
+
1203
+ // packages/extension-api/src/parts/StatusBarItemProviderRegistry/StatusBarItemProviderRegistry.ts
1204
+ var registry3 = createProviderRegistry({
1205
+ mapProvider(provider) {
1206
+ return {
1207
+ getStatusBarItem() {
1208
+ return provider.getStatusBarItem();
1209
+ },
1210
+ id: provider.id
1211
+ };
1212
+ },
1213
+ providerName: "status bar item provider",
1214
+ requiredMethods: ["getStatusBarItem"]
1215
+ });
1216
+ var getStatusBarItem = (provider) => {
1217
+ return provider.getStatusBarItem();
1218
+ };
1219
+ var isStatusBarItem = (item) => {
1220
+ return item !== void 0;
1221
+ };
1222
+ var hasStatusBarItemProvider = registry3.hasProvider;
1223
+ var registerStatusBarItemProvider = (provider) => {
1224
+ const registeredProvider = registry3.registerProvider(provider);
1225
+ void notifyStatusBarChange(registeredProvider.id);
1226
+ return {
1227
+ dispose() {
1228
+ registry3.deleteProvider(registeredProvider.id);
1229
+ void notifyStatusBarChange(registeredProvider.id);
1230
+ },
1231
+ async refresh() {
1232
+ await notifyStatusBarChange(registeredProvider.id);
1233
+ }
1234
+ };
1235
+ };
1236
+ var getStatusBarItemProviders = registry3.getProviders;
1237
+ var getStatusBarItems = () => {
1238
+ return registry3.getProviders().map(getStatusBarItem).filter(isStatusBarItem);
1239
+ };
1240
+ var getStatusBarItemProviderRegistrySnapshot = () => {
1241
+ return {
1242
+ providers: registry3.getProviders()
1243
+ };
1244
+ };
1245
+ var resetStatusBarItemProviderRegistry = registry3.reset;
1246
+
1247
+ // packages/extension-api/src/parts/ExtensionApiCommandMap/ExtensionApiCommandMap.ts
1248
+ var commandMap = {
1249
+ "ExtensionApi.executeCommand": executeCommand,
1250
+ "ExtensionApi.executeCompletionProvider": executeCompletionProvider,
1251
+ "ExtensionApi.executeFormattingProvider": executeFormattingProvider,
1252
+ "ExtensionApi.executeResolveCompletionItemProvider": executeResolveCompletionItemProvider,
1253
+ "ExtensionApi.getCommandRegistrySnapshot": getCommandRegistrySnapshot,
1254
+ "ExtensionApi.getCompletionProviderRegistrySnapshot": getCompletionProviderRegistrySnapshot,
1255
+ "ExtensionApi.getFormattingProviderRegistrySnapshot": getFormattingProviderRegistrySnapshot,
1256
+ "ExtensionApi.getStatusBarItems": getStatusBarItems
1257
+ };
1258
+
1259
+ // packages/extension-api/src/parts/ExtensionApiWorkerHandleMessagePort/ExtensionApiWorkerHandleMessagePort.ts
1260
+ var commandMap2 = {
1261
+ ...commandMap,
1262
+ async initialize(type, port) {
1263
+ if (type !== "message-port") {
1264
+ throw new Error(`unsupported initialize type ${type}`);
1265
+ }
1266
+ await handleExtensionManagementMessagePort(port);
1267
+ }
1268
+ };
1269
+ var handleExtensionManagementMessagePort = async (port) => {
1270
+ await PlainMessagePortRpc_exports.create({
1271
+ commandMap: commandMap2,
1272
+ isMessagePortOpen: true,
1273
+ messagePort: port
1274
+ });
1275
+ };
1276
+
1277
+ // packages/extension-api/src/parts/ExtensionApiWorkerCommandMap/ExtensionApiWorkerCommandMap.ts
1278
+ var commandMap3 = {
1279
+ ...commandMap,
1280
+ "HandleMessagePort.handleExtensionManagementMessagePort": handleExtensionManagementMessagePort,
1281
+ async initialize(type, port) {
1282
+ if (type !== "message-port") {
1283
+ throw new Error(`unsupported initialize type ${type}`);
1284
+ }
1285
+ await handleExtensionManagementMessagePort(port);
1286
+ }
1287
+ };
1288
+
1289
+ // packages/extension-api/src/parts/ExtensionApiWorkerListen/ExtensionApiWorkerListen.ts
1290
+ var listen2 = async () => {
1291
+ const rpc2 = WebWorkerRpcClient_exports.create({
1292
+ commandMap: commandMap3
1293
+ });
1294
+ return rpc2;
1295
+ };
1296
+
1297
+ // packages/extension-api/src/parts/Activation/Activation.ts
1298
+ var rpcPromise;
1299
+ var activate = async () => {
1300
+ if (!rpcPromise) {
1301
+ rpcPromise = listen2();
1302
+ }
1303
+ const rpc2 = await rpcPromise;
1304
+ set(rpc2);
1305
+ };
1306
+
1307
+ // packages/extension-api/src/parts/ExecuteCommand/ExecuteCommand.ts
1308
+ var executeCommand2 = async (id2, ...args) => {
1309
+ return invoke("Extensions.executeCommand", id2, ...args);
1310
+ };
1311
+
1312
+ // packages/extension-api/src/parts/QuickPick/QuickPick.ts
1313
+ var showQuickPick = async (options) => {
1314
+ return invoke("ExtensionHostQuickPick.showQuickPick", options);
1315
+ };
1316
+
1317
+ // packages/extension-api/src/parts/CommandMap/CommandMap.ts
1318
+ var commandMap4 = {
1319
+ ...commandMap,
1320
+ async initialize(type, port) {
1321
+ if (type !== "message-port") {
1322
+ throw new Error(`unsupported initialize type ${type}`);
1323
+ }
1324
+ await handleExtensionManagementMessagePort(port);
1325
+ }
1326
+ };
1327
+
1328
+ // packages/extension-api/src/parts/HandleExtensionManagementMessagePort/HandleExtensionManagementMessagePort.ts
1329
+ var handleExtensionManagementMessagePort2 = async ({
1330
+ commandMap: commandMap5,
1331
+ createMessagePortRpcClient,
1332
+ port
1333
+ }) => {
1334
+ await createMessagePortRpcClient({
1335
+ commandMap: {
1336
+ ...commandMap4,
1337
+ ...commandMap5
1338
+ },
1339
+ messagePort: port
1340
+ });
1341
+ };
1342
+ export {
1343
+ activate,
1344
+ executeCommand2 as executeCommand,
1345
+ executeCompletionProvider,
1346
+ executeFormattingProvider,
1347
+ executeResolveCompletionItemProvider,
1348
+ getCompletionProviderRegistrySnapshot,
1349
+ getFormattingProviderRegistrySnapshot,
1350
+ getStatusBarItemProviderRegistrySnapshot,
1351
+ handleExtensionManagementMessagePort2 as handleExtensionManagementMessagePort,
1352
+ registerCommand,
1353
+ registerCompletionProvider,
1354
+ registerFormattingProvider,
1355
+ registerStatusBarItemProvider,
1356
+ resetCompletionProviderRegistry,
1357
+ resetFormattingProviderRegistry,
1358
+ resetStatusBarItemProviderRegistry,
1359
+ showQuickPick
1360
+ };