@lvce-editor/extension-host-worker 5.16.0 → 5.18.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/dist/extensionHostWorkerMain.js +209 -118
- package/package.json +1 -1
|
@@ -1749,11 +1749,11 @@ const remove$3 = id => {
|
|
|
1749
1749
|
delete callbacks[id];
|
|
1750
1750
|
};
|
|
1751
1751
|
let id$1 = 0;
|
|
1752
|
-
const create$3$
|
|
1752
|
+
const create$3$2 = () => {
|
|
1753
1753
|
return ++id$1;
|
|
1754
1754
|
};
|
|
1755
1755
|
const registerPromise = () => {
|
|
1756
|
-
const id = create$3$
|
|
1756
|
+
const id = create$3$2();
|
|
1757
1757
|
const {
|
|
1758
1758
|
resolve,
|
|
1759
1759
|
promise
|
|
@@ -1838,7 +1838,8 @@ const splitLines$1 = lines => {
|
|
|
1838
1838
|
return lines.split(NewLine$1);
|
|
1839
1839
|
};
|
|
1840
1840
|
const getCurrentStack = () => {
|
|
1841
|
-
const
|
|
1841
|
+
const stackLinesToSkip = 3;
|
|
1842
|
+
const currentStack = joinLines(splitLines$1(new Error().stack || '').slice(stackLinesToSkip));
|
|
1842
1843
|
return currentStack;
|
|
1843
1844
|
};
|
|
1844
1845
|
const getNewLineIndex = (string, startIndex = undefined) => {
|
|
@@ -2098,7 +2099,7 @@ const invokeHelper = async (ipc, method, params, useSendAndTransfer) => {
|
|
|
2098
2099
|
const responseMessage = await promise;
|
|
2099
2100
|
return unwrapJsonRpcResult(responseMessage);
|
|
2100
2101
|
};
|
|
2101
|
-
const send = (transport, method, ...params) => {
|
|
2102
|
+
const send$1 = (transport, method, ...params) => {
|
|
2102
2103
|
const message = create$4$2(method, params);
|
|
2103
2104
|
transport.send(message);
|
|
2104
2105
|
};
|
|
@@ -2109,6 +2110,12 @@ const invokeAndTransfer$1 = (ipc, method, ...params) => {
|
|
|
2109
2110
|
return invokeHelper(ipc, method, params, true);
|
|
2110
2111
|
};
|
|
2111
2112
|
|
|
2113
|
+
class CommandNotFoundError extends Error {
|
|
2114
|
+
constructor(command) {
|
|
2115
|
+
super(`Command not found ${command}`);
|
|
2116
|
+
this.name = 'CommandNotFoundError';
|
|
2117
|
+
}
|
|
2118
|
+
}
|
|
2112
2119
|
const commands = Object.create(null);
|
|
2113
2120
|
const register$1 = commandMap => {
|
|
2114
2121
|
Object.assign(commands, commandMap);
|
|
@@ -2119,7 +2126,7 @@ const getCommand = key => {
|
|
|
2119
2126
|
const execute = (command, ...args) => {
|
|
2120
2127
|
const fn = getCommand(command);
|
|
2121
2128
|
if (!fn) {
|
|
2122
|
-
throw new
|
|
2129
|
+
throw new CommandNotFoundError(command);
|
|
2123
2130
|
}
|
|
2124
2131
|
return fn(...args);
|
|
2125
2132
|
};
|
|
@@ -2132,7 +2139,7 @@ const createRpc$1 = ipc => {
|
|
|
2132
2139
|
* @deprecated
|
|
2133
2140
|
*/
|
|
2134
2141
|
send(method, ...params) {
|
|
2135
|
-
send(ipc, method, ...params);
|
|
2142
|
+
send$1(ipc, method, ...params);
|
|
2136
2143
|
},
|
|
2137
2144
|
invoke(method, ...params) {
|
|
2138
2145
|
return invoke$1(ipc, method, ...params);
|
|
@@ -2176,7 +2183,7 @@ const listen$1 = async (module, options) => {
|
|
|
2176
2183
|
const ipc = module.wrap(rawIpc);
|
|
2177
2184
|
return ipc;
|
|
2178
2185
|
};
|
|
2179
|
-
const create$
|
|
2186
|
+
const create$f = async ({
|
|
2180
2187
|
commandMap,
|
|
2181
2188
|
messagePort
|
|
2182
2189
|
}) => {
|
|
@@ -2191,9 +2198,9 @@ const create$e = async ({
|
|
|
2191
2198
|
};
|
|
2192
2199
|
const MessagePortRpcClient = {
|
|
2193
2200
|
__proto__: null,
|
|
2194
|
-
create: create$
|
|
2201
|
+
create: create$f
|
|
2195
2202
|
};
|
|
2196
|
-
const create$
|
|
2203
|
+
const create$e = async ({
|
|
2197
2204
|
commandMap,
|
|
2198
2205
|
messagePort,
|
|
2199
2206
|
isMessagePortOpen
|
|
@@ -2211,7 +2218,7 @@ const create$d = async ({
|
|
|
2211
2218
|
};
|
|
2212
2219
|
const MessagePortRpcParent = {
|
|
2213
2220
|
__proto__: null,
|
|
2214
|
-
create: create$
|
|
2221
|
+
create: create$e
|
|
2215
2222
|
};
|
|
2216
2223
|
const create$5$1 = async ({
|
|
2217
2224
|
commandMap,
|
|
@@ -2242,6 +2249,24 @@ const PlainMessagePortRpcParent = {
|
|
|
2242
2249
|
__proto__: null,
|
|
2243
2250
|
create: create$4$1
|
|
2244
2251
|
};
|
|
2252
|
+
const create$3$1 = async ({
|
|
2253
|
+
commandMap,
|
|
2254
|
+
send
|
|
2255
|
+
}) => {
|
|
2256
|
+
const {
|
|
2257
|
+
port1,
|
|
2258
|
+
port2
|
|
2259
|
+
} = new MessageChannel();
|
|
2260
|
+
await send(port1);
|
|
2261
|
+
return create$5$1({
|
|
2262
|
+
commandMap,
|
|
2263
|
+
messagePort: port2
|
|
2264
|
+
});
|
|
2265
|
+
};
|
|
2266
|
+
const TransferMessagePortRpcParent = {
|
|
2267
|
+
__proto__: null,
|
|
2268
|
+
create: create$3$1
|
|
2269
|
+
};
|
|
2245
2270
|
const create$2$1 = async ({
|
|
2246
2271
|
commandMap,
|
|
2247
2272
|
webSocket
|
|
@@ -2492,6 +2517,54 @@ const createNodeRpc = async ({
|
|
|
2492
2517
|
}
|
|
2493
2518
|
};
|
|
2494
2519
|
|
|
2520
|
+
const send = async port => {
|
|
2521
|
+
await invokeAndTransfer$2('SendMessagePortToExtensionHostWorker.SendMessagePortToFileSystemWorker', port);
|
|
2522
|
+
};
|
|
2523
|
+
const launchFileSystemProcess = async () => {
|
|
2524
|
+
const rpc = await TransferMessagePortRpcParent.create({
|
|
2525
|
+
commandMap: {},
|
|
2526
|
+
send
|
|
2527
|
+
});
|
|
2528
|
+
return rpc;
|
|
2529
|
+
};
|
|
2530
|
+
|
|
2531
|
+
let fileSystemWorkerPromise;
|
|
2532
|
+
const getOrCreateRpc$1 = async () => {
|
|
2533
|
+
if (!fileSystemWorkerPromise) {
|
|
2534
|
+
fileSystemWorkerPromise = launchFileSystemProcess();
|
|
2535
|
+
}
|
|
2536
|
+
return fileSystemWorkerPromise;
|
|
2537
|
+
};
|
|
2538
|
+
const append = async (uri, content) => {
|
|
2539
|
+
const rpc = await getOrCreateRpc$1();
|
|
2540
|
+
await rpc.invoke('FileSystem.appendFile', uri, content);
|
|
2541
|
+
};
|
|
2542
|
+
|
|
2543
|
+
const providers = Object.create(null);
|
|
2544
|
+
const registerOutputChannel = provider => {
|
|
2545
|
+
providers[provider.id] = provider;
|
|
2546
|
+
const uri = `output://${provider.id}`;
|
|
2547
|
+
return {
|
|
2548
|
+
async append(text) {
|
|
2549
|
+
await append(uri, text);
|
|
2550
|
+
},
|
|
2551
|
+
getUri() {
|
|
2552
|
+
return uri;
|
|
2553
|
+
}
|
|
2554
|
+
};
|
|
2555
|
+
};
|
|
2556
|
+
const getEnabledProviders = () => {
|
|
2557
|
+
const values = Object.values(providers);
|
|
2558
|
+
const enabledProviders = [];
|
|
2559
|
+
for (const provider of values) {
|
|
2560
|
+
enabledProviders.push({
|
|
2561
|
+
id: provider.id,
|
|
2562
|
+
label: provider.label
|
|
2563
|
+
});
|
|
2564
|
+
}
|
|
2565
|
+
return enabledProviders;
|
|
2566
|
+
};
|
|
2567
|
+
|
|
2495
2568
|
const confirm = message => {
|
|
2496
2569
|
string(message);
|
|
2497
2570
|
const result = invoke$2('ConfirmPrompt.prompt', message);
|
|
@@ -3124,6 +3197,8 @@ const api = {
|
|
|
3124
3197
|
// Implementation
|
|
3125
3198
|
registerImplementationProvider: registerImplementationProvider,
|
|
3126
3199
|
executeImplementationProvider: executeImplementationProvider,
|
|
3200
|
+
// Output
|
|
3201
|
+
registerOutputChannel: registerOutputChannel,
|
|
3127
3202
|
// Prompt
|
|
3128
3203
|
confirm: confirm,
|
|
3129
3204
|
// QuickPick
|
|
@@ -3283,6 +3358,22 @@ const getExtensionId = extension => {
|
|
|
3283
3358
|
return '<unknown>';
|
|
3284
3359
|
};
|
|
3285
3360
|
|
|
3361
|
+
const isImportErrorChrome = error => {
|
|
3362
|
+
return error && error instanceof Error && error.message.startsWith('Failed to fetch dynamically imported module');
|
|
3363
|
+
};
|
|
3364
|
+
|
|
3365
|
+
const isImportErrorFirefox = error => {
|
|
3366
|
+
return error && error instanceof TypeError && error.message === 'error loading dynamically imported module';
|
|
3367
|
+
};
|
|
3368
|
+
|
|
3369
|
+
const isSyntaxError = error => {
|
|
3370
|
+
return error instanceof SyntaxError;
|
|
3371
|
+
};
|
|
3372
|
+
|
|
3373
|
+
const isImportError = error => {
|
|
3374
|
+
return isImportErrorChrome(error) || isImportErrorFirefox(error) || isSyntaxError(error);
|
|
3375
|
+
};
|
|
3376
|
+
|
|
3286
3377
|
const states = Object.create(null);
|
|
3287
3378
|
const set$5 = status => {
|
|
3288
3379
|
states[status.id] = status;
|
|
@@ -3312,110 +3403,6 @@ const sleep = duration => {
|
|
|
3312
3403
|
return promise;
|
|
3313
3404
|
};
|
|
3314
3405
|
|
|
3315
|
-
// TODO make activation timeout configurable or remove it.
|
|
3316
|
-
// some extension might do workspace indexing which could take some time
|
|
3317
|
-
const activationTimeout$1 = 10_000;
|
|
3318
|
-
const rejectAfterTimeout$1 = async (timeout, token) => {
|
|
3319
|
-
await sleep(timeout);
|
|
3320
|
-
if (isCanceled(token)) {
|
|
3321
|
-
return;
|
|
3322
|
-
}
|
|
3323
|
-
throw new Error(`Activation timeout of ${timeout}ms exceeded`);
|
|
3324
|
-
};
|
|
3325
|
-
|
|
3326
|
-
// TODO separate importing extension and activating extension for smaller functions
|
|
3327
|
-
// and better error handling
|
|
3328
|
-
const activateExtension2 = async (extensionId, extension) => {
|
|
3329
|
-
const token = create$1();
|
|
3330
|
-
try {
|
|
3331
|
-
update(extensionId, {
|
|
3332
|
-
status: Activating
|
|
3333
|
-
});
|
|
3334
|
-
const module = acquire(extensionId);
|
|
3335
|
-
await Promise.race([module.activate(extension), rejectAfterTimeout$1(activationTimeout$1, token)]);
|
|
3336
|
-
const endTime = performance.now();
|
|
3337
|
-
const status = get$6(extensionId);
|
|
3338
|
-
if (!status) {
|
|
3339
|
-
throw new Error('status expected');
|
|
3340
|
-
}
|
|
3341
|
-
const time = endTime - status.activationStartTime;
|
|
3342
|
-
update(extensionId, {
|
|
3343
|
-
status: Activated,
|
|
3344
|
-
activationStartTime: time,
|
|
3345
|
-
activationEndTime: endTime
|
|
3346
|
-
});
|
|
3347
|
-
} catch (error) {
|
|
3348
|
-
update(extensionId, {
|
|
3349
|
-
status: Error$1 // TODO maybe store error also in runtime status state
|
|
3350
|
-
});
|
|
3351
|
-
const id = getExtensionId(extension);
|
|
3352
|
-
throw new VError(error, `Failed to activate extension ${id}`);
|
|
3353
|
-
} finally {
|
|
3354
|
-
cancel(token);
|
|
3355
|
-
}
|
|
3356
|
-
};
|
|
3357
|
-
|
|
3358
|
-
const getUrlPrefix = (platform, extensionPath) => {
|
|
3359
|
-
if (extensionPath.startsWith('http://') || extensionPath.startsWith('https://')) {
|
|
3360
|
-
return extensionPath;
|
|
3361
|
-
}
|
|
3362
|
-
if (platform === Web) {
|
|
3363
|
-
return extensionPath;
|
|
3364
|
-
}
|
|
3365
|
-
if (extensionPath.startsWith('/')) {
|
|
3366
|
-
return `/remote${extensionPath}`;
|
|
3367
|
-
}
|
|
3368
|
-
return `/remote/${extensionPath}`;
|
|
3369
|
-
};
|
|
3370
|
-
|
|
3371
|
-
const handleRpcInfos = (extension, platform) => {
|
|
3372
|
-
try {
|
|
3373
|
-
if (!extension) {
|
|
3374
|
-
return;
|
|
3375
|
-
}
|
|
3376
|
-
const rpcs = extension.rpc;
|
|
3377
|
-
const urlPrefix = getUrlPrefix(platform, extension.path);
|
|
3378
|
-
if (!rpcs) {
|
|
3379
|
-
return;
|
|
3380
|
-
}
|
|
3381
|
-
if (!Array.isArray(rpcs)) {
|
|
3382
|
-
return;
|
|
3383
|
-
}
|
|
3384
|
-
for (const rpc of rpcs) {
|
|
3385
|
-
rpc.url = `${urlPrefix}/${rpc.url}`;
|
|
3386
|
-
add$1(rpc.id, rpc);
|
|
3387
|
-
}
|
|
3388
|
-
} catch (error) {
|
|
3389
|
-
console.warn(`Failed to handle extension rpcs: ${error}`);
|
|
3390
|
-
}
|
|
3391
|
-
};
|
|
3392
|
-
|
|
3393
|
-
class ContentSecurityPolicyError extends Error {
|
|
3394
|
-
constructor(violatedDirective, sourceFile, lineNumber, columnNumber) {
|
|
3395
|
-
super(`Content Security Policy Violation: ${violatedDirective}`);
|
|
3396
|
-
this.name = 'ContentSecurityPolicyError';
|
|
3397
|
-
this.stack = sourceFile ? `Content Security Policy Violation
|
|
3398
|
-
at ${sourceFile}:${lineNumber}:${columnNumber}` : `Content Security Policy Violation
|
|
3399
|
-
at <unknown>`;
|
|
3400
|
-
}
|
|
3401
|
-
}
|
|
3402
|
-
|
|
3403
|
-
const isImportErrorChrome = error => {
|
|
3404
|
-
return error && error instanceof Error && error.message.startsWith('Failed to fetch dynamically imported module');
|
|
3405
|
-
};
|
|
3406
|
-
|
|
3407
|
-
const isImportErrorFirefox = error => {
|
|
3408
|
-
return error && error instanceof TypeError && error.message === 'error loading dynamically imported module';
|
|
3409
|
-
};
|
|
3410
|
-
|
|
3411
|
-
const isSyntaxError = error => {
|
|
3412
|
-
return error instanceof SyntaxError;
|
|
3413
|
-
};
|
|
3414
|
-
|
|
3415
|
-
const isImportError = error => {
|
|
3416
|
-
return isImportErrorChrome(error) || isImportErrorFirefox(error) || isSyntaxError(error);
|
|
3417
|
-
};
|
|
3418
|
-
|
|
3419
3406
|
const NotFound = 404;
|
|
3420
3407
|
|
|
3421
3408
|
const RE_LINE_COLUMN = /(.*)(?:\(\d+:\d+\))/;
|
|
@@ -3467,6 +3454,16 @@ const parse = async (code, options) => {
|
|
|
3467
3454
|
|
|
3468
3455
|
const Module = 'module';
|
|
3469
3456
|
|
|
3457
|
+
class ContentSecurityPolicyError extends Error {
|
|
3458
|
+
constructor(violatedDirective, sourceFile, lineNumber, columnNumber) {
|
|
3459
|
+
super(`Content Security Policy Violation: ${violatedDirective}`);
|
|
3460
|
+
this.name = 'ContentSecurityPolicyError';
|
|
3461
|
+
this.stack = sourceFile ? `Content Security Policy Violation
|
|
3462
|
+
at ${sourceFile}:${lineNumber}:${columnNumber}` : `Content Security Policy Violation
|
|
3463
|
+
at <unknown>`;
|
|
3464
|
+
}
|
|
3465
|
+
}
|
|
3466
|
+
|
|
3470
3467
|
const getLineAndColumn = (text, start, end) => {
|
|
3471
3468
|
let index = -1;
|
|
3472
3469
|
let line = 0;
|
|
@@ -3724,6 +3721,83 @@ const tryToGetActualImportErrorMessage = async (url, error) => {
|
|
|
3724
3721
|
}
|
|
3725
3722
|
};
|
|
3726
3723
|
|
|
3724
|
+
// TODO make activation timeout configurable or remove it.
|
|
3725
|
+
// some extension might do workspace indexing which could take some time
|
|
3726
|
+
const activationTimeout$1 = 10_000;
|
|
3727
|
+
const rejectAfterTimeout$1 = async (timeout, token) => {
|
|
3728
|
+
await sleep(timeout);
|
|
3729
|
+
if (isCanceled(token)) {
|
|
3730
|
+
return;
|
|
3731
|
+
}
|
|
3732
|
+
throw new Error(`Activation timeout of ${timeout}ms exceeded`);
|
|
3733
|
+
};
|
|
3734
|
+
const activateExtension2 = async (extensionId, extension, absolutePath) => {
|
|
3735
|
+
const token = create$1();
|
|
3736
|
+
try {
|
|
3737
|
+
const startTime = performance.now();
|
|
3738
|
+
update(extensionId, {
|
|
3739
|
+
status: Activating,
|
|
3740
|
+
activationStartTime: startTime
|
|
3741
|
+
});
|
|
3742
|
+
const module = acquire(extensionId);
|
|
3743
|
+
await Promise.race([module.activate(extension), rejectAfterTimeout$1(activationTimeout$1, token)]);
|
|
3744
|
+
const endTime = performance.now();
|
|
3745
|
+
const time = endTime - startTime;
|
|
3746
|
+
update(extensionId, {
|
|
3747
|
+
status: Activated,
|
|
3748
|
+
activationTime: time,
|
|
3749
|
+
activationEndTime: endTime
|
|
3750
|
+
});
|
|
3751
|
+
} catch (error) {
|
|
3752
|
+
const id = getExtensionId(extension);
|
|
3753
|
+
if (isImportError(error)) {
|
|
3754
|
+
const actualErrorMessage = await tryToGetActualImportErrorMessage(absolutePath, error);
|
|
3755
|
+
throw new Error(`Failed to activate extension ${id}: ${actualErrorMessage}`);
|
|
3756
|
+
}
|
|
3757
|
+
update(extensionId, {
|
|
3758
|
+
status: Error$1 // TODO maybe store error also in runtime status state
|
|
3759
|
+
});
|
|
3760
|
+
throw new VError(error, `Failed to activate extension ${id}`);
|
|
3761
|
+
} finally {
|
|
3762
|
+
cancel(token);
|
|
3763
|
+
}
|
|
3764
|
+
};
|
|
3765
|
+
|
|
3766
|
+
const getUrlPrefix = (platform, extensionPath) => {
|
|
3767
|
+
if (extensionPath.startsWith('http://') || extensionPath.startsWith('https://')) {
|
|
3768
|
+
return extensionPath;
|
|
3769
|
+
}
|
|
3770
|
+
if (platform === Web) {
|
|
3771
|
+
return extensionPath;
|
|
3772
|
+
}
|
|
3773
|
+
if (extensionPath.startsWith('/')) {
|
|
3774
|
+
return `/remote${extensionPath}`;
|
|
3775
|
+
}
|
|
3776
|
+
return `/remote/${extensionPath}`;
|
|
3777
|
+
};
|
|
3778
|
+
|
|
3779
|
+
const handleRpcInfos = (extension, platform) => {
|
|
3780
|
+
try {
|
|
3781
|
+
if (!extension) {
|
|
3782
|
+
return;
|
|
3783
|
+
}
|
|
3784
|
+
const rpcs = extension.rpc;
|
|
3785
|
+
const urlPrefix = getUrlPrefix(platform, extension.path);
|
|
3786
|
+
if (!rpcs) {
|
|
3787
|
+
return;
|
|
3788
|
+
}
|
|
3789
|
+
if (!Array.isArray(rpcs)) {
|
|
3790
|
+
return;
|
|
3791
|
+
}
|
|
3792
|
+
for (const rpc of rpcs) {
|
|
3793
|
+
rpc.url = `${urlPrefix}/${rpc.url}`;
|
|
3794
|
+
add$1(rpc.id, rpc);
|
|
3795
|
+
}
|
|
3796
|
+
} catch (error) {
|
|
3797
|
+
console.warn(`Failed to handle extension rpcs: ${error}`);
|
|
3798
|
+
}
|
|
3799
|
+
};
|
|
3800
|
+
|
|
3727
3801
|
const importScript = async url => {
|
|
3728
3802
|
try {
|
|
3729
3803
|
return await import(url);
|
|
@@ -3775,7 +3849,10 @@ const activateExtension = async (extension, absolutePath, activationEvent) => {
|
|
|
3775
3849
|
activationStartTime: startTime,
|
|
3776
3850
|
activationTime: 0,
|
|
3777
3851
|
id: extensionId,
|
|
3778
|
-
status: Importing
|
|
3852
|
+
status: Importing,
|
|
3853
|
+
importEndTime: 0,
|
|
3854
|
+
importStartTime: 0,
|
|
3855
|
+
importTime: 0
|
|
3779
3856
|
});
|
|
3780
3857
|
const module = await importScript(absolutePath);
|
|
3781
3858
|
handleRpcInfos(extension, platform);
|
|
@@ -5211,7 +5288,10 @@ const emptyStatus = {
|
|
|
5211
5288
|
activationEvent: '',
|
|
5212
5289
|
activationStartTime: 0,
|
|
5213
5290
|
activationEndTime: 0,
|
|
5214
|
-
activationTime: 0
|
|
5291
|
+
activationTime: 0,
|
|
5292
|
+
importEndTime: 0,
|
|
5293
|
+
importStartTime: 0,
|
|
5294
|
+
importTime: 0
|
|
5215
5295
|
};
|
|
5216
5296
|
const getRuntimeStatus = extensionId => {
|
|
5217
5297
|
return get$6(extensionId) || emptyStatus;
|
|
@@ -5326,21 +5406,31 @@ const hydrate = async () => {
|
|
|
5326
5406
|
const importExtension = async (extensionId, absolutePath, activationEvent) => {
|
|
5327
5407
|
try {
|
|
5328
5408
|
string(absolutePath);
|
|
5409
|
+
const startTime = performance.now();
|
|
5329
5410
|
set$5({
|
|
5330
5411
|
activationEvent: activationEvent,
|
|
5331
5412
|
id: extensionId,
|
|
5332
5413
|
activationStartTime: performance.now(),
|
|
5333
5414
|
status: Importing,
|
|
5334
5415
|
activationEndTime: 0,
|
|
5335
|
-
activationTime: 0
|
|
5416
|
+
activationTime: 0,
|
|
5417
|
+
importStartTime: startTime,
|
|
5418
|
+
importEndTime: 0,
|
|
5419
|
+
importTime: 0
|
|
5336
5420
|
});
|
|
5337
5421
|
try {
|
|
5338
5422
|
const module = await importScript(absolutePath);
|
|
5423
|
+
const endTime = performance.now();
|
|
5424
|
+
const time = endTime - startTime;
|
|
5339
5425
|
set$6(extensionId, module);
|
|
5340
5426
|
update(extensionId, {
|
|
5341
|
-
|
|
5427
|
+
importEndTime: endTime,
|
|
5428
|
+
importTime: time
|
|
5342
5429
|
});
|
|
5343
5430
|
} catch (error) {
|
|
5431
|
+
update(extensionId, {
|
|
5432
|
+
status: Error$1 // TODO maybe store error also in runtime status state
|
|
5433
|
+
});
|
|
5344
5434
|
if (isImportError(error)) {
|
|
5345
5435
|
const actualErrorMessage = await tryToGetActualImportErrorMessage(absolutePath, error);
|
|
5346
5436
|
throw new Error(actualErrorMessage);
|
|
@@ -5934,6 +6024,7 @@ const commandMap = {
|
|
|
5934
6024
|
'IndexedDb.saveValue': saveValue,
|
|
5935
6025
|
'IndexedDb.set': set$3,
|
|
5936
6026
|
'Languages.getLanguages': getLanguages,
|
|
6027
|
+
'Output.getEnabledProviders': getEnabledProviders,
|
|
5937
6028
|
'SaveState.saveState': saveState,
|
|
5938
6029
|
'SearchFileWithFetch.searchFileWithFetch': searchFile$2,
|
|
5939
6030
|
'SearchFileWithHtml.searchFileWithHtml': searchFile$1,
|