@lvce-editor/file-system-worker 5.10.0 → 5.11.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/fileSystemWorkerMain.js +178 -56
- package/package.json +1 -1
|
@@ -324,7 +324,6 @@ const walkValue = (value, transferrables, isTransferrable) => {
|
|
|
324
324
|
for (const property of Object.values(value)) {
|
|
325
325
|
walkValue(property, transferrables, isTransferrable);
|
|
326
326
|
}
|
|
327
|
-
return;
|
|
328
327
|
}
|
|
329
328
|
};
|
|
330
329
|
const getTransferrables = value => {
|
|
@@ -478,7 +477,14 @@ class IpcError extends VError {
|
|
|
478
477
|
const cause = new Error(message);
|
|
479
478
|
// @ts-ignore
|
|
480
479
|
cause.code = code;
|
|
481
|
-
|
|
480
|
+
if (stack) {
|
|
481
|
+
Object.defineProperty(cause, 'stack', {
|
|
482
|
+
configurable: true,
|
|
483
|
+
enumerable: false,
|
|
484
|
+
value: stack,
|
|
485
|
+
writable: true
|
|
486
|
+
});
|
|
487
|
+
}
|
|
482
488
|
super(cause, betterMessage);
|
|
483
489
|
} else {
|
|
484
490
|
super(betterMessage);
|
|
@@ -828,7 +834,10 @@ const constructError = (message, type, name) => {
|
|
|
828
834
|
if (ErrorConstructor === Error) {
|
|
829
835
|
const error = new Error(message);
|
|
830
836
|
if (name && name !== 'VError') {
|
|
831
|
-
error
|
|
837
|
+
Object.defineProperty(error, 'name', {
|
|
838
|
+
configurable: true,
|
|
839
|
+
value: name
|
|
840
|
+
});
|
|
832
841
|
}
|
|
833
842
|
return error;
|
|
834
843
|
}
|
|
@@ -845,8 +854,10 @@ const getCurrentStack = () => {
|
|
|
845
854
|
const currentStack = joinLines(splitLines(new Error().stack || '').slice(stackLinesToSkip));
|
|
846
855
|
return currentStack;
|
|
847
856
|
};
|
|
848
|
-
const getNewLineIndex = (string, startIndex
|
|
849
|
-
|
|
857
|
+
const getNewLineIndex = (string, startIndex) => {
|
|
858
|
+
{
|
|
859
|
+
return string.indexOf(NewLine);
|
|
860
|
+
}
|
|
850
861
|
};
|
|
851
862
|
const getParentStack = error => {
|
|
852
863
|
let parentStack = error.stack || error.data || error.message || '';
|
|
@@ -857,55 +868,91 @@ const getParentStack = error => {
|
|
|
857
868
|
};
|
|
858
869
|
const MethodNotFound = -32601;
|
|
859
870
|
const Custom = -32001;
|
|
871
|
+
const setStack = (error, stack) => {
|
|
872
|
+
const descriptor = Object.getOwnPropertyDescriptor(error, 'stack');
|
|
873
|
+
if (descriptor) {
|
|
874
|
+
if (!descriptor.configurable && !descriptor.writable) {
|
|
875
|
+
return;
|
|
876
|
+
}
|
|
877
|
+
if (!descriptor.configurable && descriptor.writable) {
|
|
878
|
+
error.stack = stack;
|
|
879
|
+
return;
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
Object.defineProperty(error, 'stack', {
|
|
883
|
+
configurable: true,
|
|
884
|
+
value: stack,
|
|
885
|
+
writable: true
|
|
886
|
+
});
|
|
887
|
+
};
|
|
888
|
+
const restoreExistingError = (error, currentStack) => {
|
|
889
|
+
if (typeof error.stack === 'string') {
|
|
890
|
+
setStack(error, `${error.stack}${NewLine}${currentStack}`);
|
|
891
|
+
}
|
|
892
|
+
return error;
|
|
893
|
+
};
|
|
894
|
+
const restoreMethodNotFoundError = (error, currentStack) => {
|
|
895
|
+
const restoredError = new JsonRpcError(error.message);
|
|
896
|
+
const parentStack = getParentStack(error);
|
|
897
|
+
setStack(restoredError, `${parentStack}${NewLine}${currentStack}`);
|
|
898
|
+
return restoredError;
|
|
899
|
+
};
|
|
900
|
+
const restoreStackFromData = (restoredError, error, currentStack) => {
|
|
901
|
+
if (error.data.stack && error.data.type && error.message) {
|
|
902
|
+
setStack(restoredError, `${error.data.type}: ${error.message}${NewLine}${error.data.stack}${NewLine}${currentStack}`);
|
|
903
|
+
return;
|
|
904
|
+
}
|
|
905
|
+
if (error.data.stack) {
|
|
906
|
+
setStack(restoredError, error.data.stack);
|
|
907
|
+
}
|
|
908
|
+
};
|
|
909
|
+
const applyDataProperties = (restoredError, error) => {
|
|
910
|
+
restoreStackFromData(restoredError, error, getCurrentStack());
|
|
911
|
+
if (error.data.codeFrame) {
|
|
912
|
+
// @ts-ignore
|
|
913
|
+
restoredError.codeFrame = error.data.codeFrame;
|
|
914
|
+
}
|
|
915
|
+
if (error.data.code) {
|
|
916
|
+
// @ts-ignore
|
|
917
|
+
restoredError.code = error.data.code;
|
|
918
|
+
}
|
|
919
|
+
if (error.data.type) {
|
|
920
|
+
// @ts-ignore
|
|
921
|
+
restoredError.name = error.data.type;
|
|
922
|
+
}
|
|
923
|
+
};
|
|
924
|
+
const applyDirectProperties = (restoredError, error) => {
|
|
925
|
+
if (error.stack) {
|
|
926
|
+
const lowerStack = restoredError.stack || '';
|
|
927
|
+
const indexNewLine = getNewLineIndex(lowerStack);
|
|
928
|
+
const parentStack = getParentStack(error);
|
|
929
|
+
// @ts-ignore
|
|
930
|
+
setStack(restoredError, `${parentStack}${lowerStack.slice(indexNewLine)}`);
|
|
931
|
+
}
|
|
932
|
+
if (error.codeFrame) {
|
|
933
|
+
// @ts-ignore
|
|
934
|
+
restoredError.codeFrame = error.codeFrame;
|
|
935
|
+
}
|
|
936
|
+
};
|
|
937
|
+
const restoreMessageError = (error, _currentStack) => {
|
|
938
|
+
const restoredError = constructError(error.message, error.type, error.name);
|
|
939
|
+
if (error.data) {
|
|
940
|
+
applyDataProperties(restoredError, error);
|
|
941
|
+
} else {
|
|
942
|
+
applyDirectProperties(restoredError, error);
|
|
943
|
+
}
|
|
944
|
+
return restoredError;
|
|
945
|
+
};
|
|
860
946
|
const restoreJsonRpcError = error => {
|
|
861
947
|
const currentStack = getCurrentStack();
|
|
862
948
|
if (error && error instanceof Error) {
|
|
863
|
-
|
|
864
|
-
error.stack = error.stack + NewLine + currentStack;
|
|
865
|
-
}
|
|
866
|
-
return error;
|
|
949
|
+
return restoreExistingError(error, currentStack);
|
|
867
950
|
}
|
|
868
951
|
if (error && error.code && error.code === MethodNotFound) {
|
|
869
|
-
|
|
870
|
-
const parentStack = getParentStack(error);
|
|
871
|
-
restoredError.stack = parentStack + NewLine + currentStack;
|
|
872
|
-
return restoredError;
|
|
952
|
+
return restoreMethodNotFoundError(error, currentStack);
|
|
873
953
|
}
|
|
874
954
|
if (error && error.message) {
|
|
875
|
-
|
|
876
|
-
if (error.data) {
|
|
877
|
-
if (error.data.stack && error.data.type && error.message) {
|
|
878
|
-
restoredError.stack = error.data.type + ': ' + error.message + NewLine + error.data.stack + NewLine + currentStack;
|
|
879
|
-
} else if (error.data.stack) {
|
|
880
|
-
restoredError.stack = error.data.stack;
|
|
881
|
-
}
|
|
882
|
-
if (error.data.codeFrame) {
|
|
883
|
-
// @ts-ignore
|
|
884
|
-
restoredError.codeFrame = error.data.codeFrame;
|
|
885
|
-
}
|
|
886
|
-
if (error.data.code) {
|
|
887
|
-
// @ts-ignore
|
|
888
|
-
restoredError.code = error.data.code;
|
|
889
|
-
}
|
|
890
|
-
if (error.data.type) {
|
|
891
|
-
// @ts-ignore
|
|
892
|
-
restoredError.name = error.data.type;
|
|
893
|
-
}
|
|
894
|
-
} else {
|
|
895
|
-
if (error.stack) {
|
|
896
|
-
const lowerStack = restoredError.stack || '';
|
|
897
|
-
// @ts-ignore
|
|
898
|
-
const indexNewLine = getNewLineIndex(lowerStack);
|
|
899
|
-
const parentStack = getParentStack(error);
|
|
900
|
-
// @ts-ignore
|
|
901
|
-
restoredError.stack = parentStack + lowerStack.slice(indexNewLine);
|
|
902
|
-
}
|
|
903
|
-
if (error.codeFrame) {
|
|
904
|
-
// @ts-ignore
|
|
905
|
-
restoredError.codeFrame = error.codeFrame;
|
|
906
|
-
}
|
|
907
|
-
}
|
|
908
|
-
return restoredError;
|
|
955
|
+
return restoreMessageError(error);
|
|
909
956
|
}
|
|
910
957
|
if (typeof error === 'string') {
|
|
911
958
|
return new Error(`JsonRpc Error: ${error}`);
|
|
@@ -1312,28 +1359,72 @@ const create$3 = async ({
|
|
|
1312
1359
|
}) => {
|
|
1313
1360
|
// TODO create a commandMap per rpc instance
|
|
1314
1361
|
register$1(commandMap);
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1362
|
+
let rawIpc;
|
|
1363
|
+
try {
|
|
1364
|
+
rawIpc = await IpcParentWithWebSocket$1.create({
|
|
1365
|
+
webSocket
|
|
1366
|
+
});
|
|
1367
|
+
} catch (error) {
|
|
1368
|
+
throw new VError(error, 'Failed to create rpc connection');
|
|
1369
|
+
}
|
|
1318
1370
|
const ipc = IpcParentWithWebSocket$1.wrap(rawIpc);
|
|
1319
1371
|
handleIpc(ipc);
|
|
1320
1372
|
const rpc = createRpc(ipc);
|
|
1321
1373
|
return rpc;
|
|
1322
1374
|
};
|
|
1323
1375
|
|
|
1376
|
+
const reconnectDelay = 2000;
|
|
1377
|
+
const waitForReconnect = async () => {
|
|
1378
|
+
await new Promise(resolve => {
|
|
1379
|
+
setTimeout(resolve, reconnectDelay);
|
|
1380
|
+
});
|
|
1381
|
+
};
|
|
1382
|
+
const connect = async ({
|
|
1383
|
+
commandMap,
|
|
1384
|
+
wsUrl
|
|
1385
|
+
}) => {
|
|
1386
|
+
const webSocket = new WebSocket(wsUrl);
|
|
1387
|
+
try {
|
|
1388
|
+
const rpc = await create$3({
|
|
1389
|
+
commandMap,
|
|
1390
|
+
webSocket
|
|
1391
|
+
});
|
|
1392
|
+
return {
|
|
1393
|
+
rpc,
|
|
1394
|
+
webSocket
|
|
1395
|
+
};
|
|
1396
|
+
} catch (error) {
|
|
1397
|
+
webSocket.close();
|
|
1398
|
+
throw error;
|
|
1399
|
+
}
|
|
1400
|
+
};
|
|
1324
1401
|
const create$2 = async ({
|
|
1325
1402
|
commandMap,
|
|
1403
|
+
onClose,
|
|
1326
1404
|
type
|
|
1327
1405
|
}) => {
|
|
1328
1406
|
const host = getHost();
|
|
1329
1407
|
const protocol = getProtocol();
|
|
1330
1408
|
const wsUrl = getWebSocketUrl(type, host, protocol);
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1409
|
+
let connection;
|
|
1410
|
+
try {
|
|
1411
|
+
connection = await connect({
|
|
1412
|
+
commandMap,
|
|
1413
|
+
wsUrl
|
|
1414
|
+
});
|
|
1415
|
+
} catch {
|
|
1416
|
+
await waitForReconnect();
|
|
1417
|
+
connection = await connect({
|
|
1418
|
+
commandMap,
|
|
1419
|
+
wsUrl
|
|
1420
|
+
});
|
|
1421
|
+
}
|
|
1422
|
+
if (onClose) {
|
|
1423
|
+
connection.webSocket.addEventListener('close', onClose, {
|
|
1424
|
+
once: true
|
|
1425
|
+
});
|
|
1426
|
+
}
|
|
1427
|
+
return connection.rpc;
|
|
1337
1428
|
};
|
|
1338
1429
|
|
|
1339
1430
|
const create$1 = async ({
|
|
@@ -1672,6 +1763,7 @@ const Http = 'http:';
|
|
|
1672
1763
|
const Memory = 'memfs:';
|
|
1673
1764
|
const Https = 'https:';
|
|
1674
1765
|
const File$2 = 'file:';
|
|
1766
|
+
const Fetch$1 = 'fetch:';
|
|
1675
1767
|
|
|
1676
1768
|
const watchCallbacks = Object.create(null);
|
|
1677
1769
|
const registerWatchCallback = (id, rpcId, commandId, uri) => {
|
|
@@ -1855,6 +1947,10 @@ const FileSystemMemory = {
|
|
|
1855
1947
|
writeFile: writeFile$1
|
|
1856
1948
|
};
|
|
1857
1949
|
|
|
1950
|
+
const isFetch = uri => {
|
|
1951
|
+
return uri.startsWith(Fetch$1);
|
|
1952
|
+
};
|
|
1953
|
+
|
|
1858
1954
|
const isHttp = uri => {
|
|
1859
1955
|
return uri.startsWith(Http) || uri.startsWith(Https);
|
|
1860
1956
|
};
|
|
@@ -1870,6 +1966,9 @@ const remove = async dirent => {
|
|
|
1870
1966
|
return remove$2(dirent);
|
|
1871
1967
|
};
|
|
1872
1968
|
const readFile = async uri => {
|
|
1969
|
+
if (isFetch(uri)) {
|
|
1970
|
+
return invoke$2('FileSystem.readFile', uri);
|
|
1971
|
+
}
|
|
1873
1972
|
if (isHttp(uri)) {
|
|
1874
1973
|
return readFile$3(uri);
|
|
1875
1974
|
}
|
|
@@ -1885,6 +1984,9 @@ const appendFile = async (uri, text) => {
|
|
|
1885
1984
|
return appendFile$1(uri, text);
|
|
1886
1985
|
};
|
|
1887
1986
|
const readDirWithFileTypes = async uri => {
|
|
1987
|
+
if (isFetch(uri)) {
|
|
1988
|
+
return invoke$2('FileSystem.readDirWithFileTypes', uri);
|
|
1989
|
+
}
|
|
1888
1990
|
if (isMemory(uri)) {
|
|
1889
1991
|
return invoke$2('FileSystem.readDirWithFileTypes', uri);
|
|
1890
1992
|
}
|
|
@@ -1931,6 +2033,9 @@ const stat = async dirent => {
|
|
|
1931
2033
|
return stat$2(dirent);
|
|
1932
2034
|
};
|
|
1933
2035
|
const exists = async uri => {
|
|
2036
|
+
if (isFetch(uri)) {
|
|
2037
|
+
return invoke$2('FileSystem.exists', uri);
|
|
2038
|
+
}
|
|
1934
2039
|
if (isHttp(uri)) {
|
|
1935
2040
|
return exists$3(uri);
|
|
1936
2041
|
}
|
|
@@ -2072,8 +2177,25 @@ const createFileSystemProcessRpc = async platform => {
|
|
|
2072
2177
|
return create();
|
|
2073
2178
|
};
|
|
2074
2179
|
|
|
2180
|
+
const throwUnavailableError = () => {
|
|
2181
|
+
throw new Error('Disk file system is not available in web');
|
|
2182
|
+
};
|
|
2183
|
+
const createUnavailableFileSystemProcessRpc = () => {
|
|
2184
|
+
return {
|
|
2185
|
+
dispose: async () => {},
|
|
2186
|
+
invoke: async () => {
|
|
2187
|
+
return throwUnavailableError();
|
|
2188
|
+
},
|
|
2189
|
+
invokeAndTransfer: async () => {
|
|
2190
|
+
return throwUnavailableError();
|
|
2191
|
+
},
|
|
2192
|
+
send: throwUnavailableError
|
|
2193
|
+
};
|
|
2194
|
+
};
|
|
2195
|
+
|
|
2075
2196
|
const initializeFileSystemProcess = async platform => {
|
|
2076
2197
|
if (platform === Web) {
|
|
2198
|
+
set(createUnavailableFileSystemProcessRpc());
|
|
2077
2199
|
return;
|
|
2078
2200
|
}
|
|
2079
2201
|
const rpc = await createFileSystemProcessRpc(platform);
|