@lvce-editor/extension-detail-view 3.40.0 → 3.42.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/extensionDetailViewWorkerMain.js +285 -189
- package/package.json +1 -1
|
@@ -729,7 +729,19 @@ const create$7 = rpcId => {
|
|
|
729
729
|
};
|
|
730
730
|
};
|
|
731
731
|
const RendererWorker$1 = 1;
|
|
732
|
+
const FileSystemWorker$1 = 209;
|
|
732
733
|
const MarkdownWorker$1 = 300;
|
|
734
|
+
const {
|
|
735
|
+
invoke: invoke$7,
|
|
736
|
+
set: set$7} = create$7(FileSystemWorker$1);
|
|
737
|
+
const readFile$1$1 = async uri => {
|
|
738
|
+
return invoke$7('FileSystem.readFile', uri);
|
|
739
|
+
};
|
|
740
|
+
const FileSystemWorker = {
|
|
741
|
+
__proto__: null,
|
|
742
|
+
invoke: invoke$7,
|
|
743
|
+
readFile: readFile$1$1,
|
|
744
|
+
set: set$7};
|
|
733
745
|
const {
|
|
734
746
|
invoke: invoke$5,
|
|
735
747
|
set: set$5} = create$7(MarkdownWorker$1);
|
|
@@ -760,16 +772,14 @@ const sendMessagePortToMarkdownWorker$2 = async (port, rpcId) => {
|
|
|
760
772
|
// @ts-ignore
|
|
761
773
|
await invokeAndTransfer$3('SendMessagePortToExtensionHostWorker.sendMessagePortToMarkdownWorker', port, command, rpcId);
|
|
762
774
|
};
|
|
763
|
-
const
|
|
764
|
-
|
|
775
|
+
const sendMessagePortToFileSystemWorker$2 = async (port, rpcId) => {
|
|
776
|
+
const command = 'FileSystem.handleMessagePort';
|
|
777
|
+
// @ts-ignore
|
|
778
|
+
await invokeAndTransfer$3('SendMessagePortToExtensionHostWorker.sendMessagePortToFileSystemWorker', port, command, rpcId);
|
|
765
779
|
};
|
|
766
780
|
const getAllExtensions$2 = async () => {
|
|
767
781
|
return invoke$3('ExtensionManagement.getAllExtensions');
|
|
768
782
|
};
|
|
769
|
-
const getFolderSize$2 = async uri => {
|
|
770
|
-
// @ts-ignore
|
|
771
|
-
return await invoke$3('FileSystem.getFolderSize', uri);
|
|
772
|
-
};
|
|
773
783
|
const getExtension$3 = async id => {
|
|
774
784
|
// @ts-ignore
|
|
775
785
|
return invoke$3('ExtensionManagement.getExtension', id);
|
|
@@ -785,16 +795,15 @@ const RendererWorker = {
|
|
|
785
795
|
__proto__: null,
|
|
786
796
|
getAllExtensions: getAllExtensions$2,
|
|
787
797
|
getExtension: getExtension$3,
|
|
788
|
-
getFolderSize: getFolderSize$2,
|
|
789
798
|
openNativeFolder: openNativeFolder$1,
|
|
790
|
-
|
|
799
|
+
sendMessagePortToFileSystemWorker: sendMessagePortToFileSystemWorker$2,
|
|
791
800
|
sendMessagePortToMarkdownWorker: sendMessagePortToMarkdownWorker$2,
|
|
792
801
|
set: set$3$1,
|
|
793
802
|
setColorTheme: setColorTheme$2,
|
|
794
803
|
uninstallExtension: uninstallExtension$1};
|
|
795
804
|
|
|
796
805
|
const {
|
|
797
|
-
set: set$
|
|
806
|
+
set: set$4,
|
|
798
807
|
getVirtualDom,
|
|
799
808
|
render
|
|
800
809
|
} = MarkdownWorker;
|
|
@@ -1531,7 +1540,7 @@ const create$4 = (method, params) => {
|
|
|
1531
1540
|
};
|
|
1532
1541
|
};
|
|
1533
1542
|
const callbacks = Object.create(null);
|
|
1534
|
-
const set$
|
|
1543
|
+
const set$3 = (id, fn) => {
|
|
1535
1544
|
callbacks[id] = fn;
|
|
1536
1545
|
};
|
|
1537
1546
|
const get$1 = id => {
|
|
@@ -1550,7 +1559,7 @@ const registerPromise = () => {
|
|
|
1550
1559
|
resolve,
|
|
1551
1560
|
promise
|
|
1552
1561
|
} = Promise.withResolvers();
|
|
1553
|
-
set$
|
|
1562
|
+
set$3(id, resolve);
|
|
1554
1563
|
return {
|
|
1555
1564
|
id,
|
|
1556
1565
|
promise
|
|
@@ -1894,7 +1903,7 @@ const send = (transport, method, ...params) => {
|
|
|
1894
1903
|
const message = create$4(method, params);
|
|
1895
1904
|
transport.send(message);
|
|
1896
1905
|
};
|
|
1897
|
-
const invoke = (ipc, method, ...params) => {
|
|
1906
|
+
const invoke$1 = (ipc, method, ...params) => {
|
|
1898
1907
|
return invokeHelper(ipc, method, params, false);
|
|
1899
1908
|
};
|
|
1900
1909
|
const invokeAndTransfer = (ipc, method, ...params) => {
|
|
@@ -1927,7 +1936,7 @@ const createRpc = ipc => {
|
|
|
1927
1936
|
send(ipc, method, ...params);
|
|
1928
1937
|
},
|
|
1929
1938
|
invoke(method, ...params) {
|
|
1930
|
-
return invoke(ipc, method, ...params);
|
|
1939
|
+
return invoke$1(ipc, method, ...params);
|
|
1931
1940
|
},
|
|
1932
1941
|
invokeAndTransfer(method, ...params) {
|
|
1933
1942
|
return invokeAndTransfer(ipc, method, ...params);
|
|
@@ -2085,7 +2094,7 @@ const copyImage = state => {
|
|
|
2085
2094
|
|
|
2086
2095
|
const {
|
|
2087
2096
|
get,
|
|
2088
|
-
set: set$
|
|
2097
|
+
set: set$2,
|
|
2089
2098
|
dispose: dispose$1,
|
|
2090
2099
|
wrapCommand
|
|
2091
2100
|
} = create$1();
|
|
@@ -2136,9 +2145,10 @@ const create = (uid, uri, x, y, width, height, platform, assetDir) => {
|
|
|
2136
2145
|
themesMarkdownDom: [],
|
|
2137
2146
|
uri,
|
|
2138
2147
|
webViews: [],
|
|
2139
|
-
width
|
|
2148
|
+
width,
|
|
2149
|
+
readmeUrl: ''
|
|
2140
2150
|
};
|
|
2141
|
-
set$
|
|
2151
|
+
set$2(uid, state, state);
|
|
2142
2152
|
};
|
|
2143
2153
|
|
|
2144
2154
|
const isEqual$2 = (oldState, newState) => {
|
|
@@ -2153,7 +2163,7 @@ const User = 1;
|
|
|
2153
2163
|
const Script = 2;
|
|
2154
2164
|
|
|
2155
2165
|
const isEqual = (oldState, newState) => {
|
|
2156
|
-
return newState.scrollSource ===
|
|
2166
|
+
return newState.scrollSource === User || oldState.readmeScrollTop === newState.readmeScrollTop;
|
|
2157
2167
|
};
|
|
2158
2168
|
|
|
2159
2169
|
const RenderFocus = 2;
|
|
@@ -2182,7 +2192,7 @@ const dispose = uid => {
|
|
|
2182
2192
|
dispose$1(uid);
|
|
2183
2193
|
};
|
|
2184
2194
|
|
|
2185
|
-
const commandIds = ['copyImage', 'getMenuEntries', 'handleClickCategory', 'handleClickDisable', 'handleClickScrollToTop', '
|
|
2195
|
+
const commandIds = ['copyImage', 'getMenuEntries', 'handleClickCategory', 'handleClickDisable', 'handleClickScrollToTop', 'handleClickSetColorTheme', 'handleClickSettings', 'handleClickSize', 'handleClickUninstall', 'handleFeaturesClick', 'handleIconError', 'handleScroll', 'handleTabsClick', 'handleWheel', 'renderEventListeners', 'resize', 'saveState', 'selectTab', 'terminate'];
|
|
2186
2196
|
|
|
2187
2197
|
const getCommandIds = () => {
|
|
2188
2198
|
return commandIds;
|
|
@@ -2291,13 +2301,12 @@ const handleClickScrollToTop = state => {
|
|
|
2291
2301
|
const {
|
|
2292
2302
|
getAllExtensions: getAllExtensions$1,
|
|
2293
2303
|
getExtension: getExtension$2,
|
|
2294
|
-
getFolderSize: getFolderSize$1,
|
|
2295
2304
|
openNativeFolder,
|
|
2296
|
-
|
|
2297
|
-
set,
|
|
2305
|
+
set: set$1,
|
|
2298
2306
|
setColorTheme: setColorTheme$1,
|
|
2299
2307
|
uninstallExtension,
|
|
2300
|
-
sendMessagePortToMarkdownWorker: sendMessagePortToMarkdownWorker$1
|
|
2308
|
+
sendMessagePortToMarkdownWorker: sendMessagePortToMarkdownWorker$1,
|
|
2309
|
+
sendMessagePortToFileSystemWorker: sendMessagePortToFileSystemWorker$1
|
|
2301
2310
|
} = RendererWorker;
|
|
2302
2311
|
|
|
2303
2312
|
const setColorTheme = id => {
|
|
@@ -2367,15 +2376,21 @@ const handleIconError = state => {
|
|
|
2367
2376
|
};
|
|
2368
2377
|
};
|
|
2369
2378
|
|
|
2370
|
-
const handleScroll = (state, scrollTop) => {
|
|
2379
|
+
const handleScroll = (state, scrollTop, scrollSource = Script) => {
|
|
2371
2380
|
const newScrollTop = Math.max(0, scrollTop);
|
|
2372
2381
|
return {
|
|
2373
2382
|
...state,
|
|
2374
2383
|
readmeScrollTop: newScrollTop,
|
|
2375
|
-
scrollSource
|
|
2384
|
+
scrollSource
|
|
2376
2385
|
};
|
|
2377
2386
|
};
|
|
2378
2387
|
|
|
2388
|
+
const {
|
|
2389
|
+
set,
|
|
2390
|
+
readFile: readFile$1,
|
|
2391
|
+
invoke
|
|
2392
|
+
} = FileSystemWorker;
|
|
2393
|
+
|
|
2379
2394
|
const readFile = async uri => {
|
|
2380
2395
|
return readFile$1(uri);
|
|
2381
2396
|
};
|
|
@@ -2409,17 +2424,25 @@ const loadChangelogContent = async path => {
|
|
|
2409
2424
|
const selectTabChangelog = async state => {
|
|
2410
2425
|
const {
|
|
2411
2426
|
extension,
|
|
2412
|
-
baseUrl
|
|
2427
|
+
baseUrl,
|
|
2428
|
+
tabs
|
|
2413
2429
|
} = state;
|
|
2414
2430
|
const changelogContent = await loadChangelogContent(extension.path); // TODO use uri
|
|
2415
2431
|
const changelogMarkdownHtml = await renderMarkdown(changelogContent, {
|
|
2416
2432
|
baseUrl
|
|
2417
2433
|
});
|
|
2418
2434
|
const changelogDom = await getMarkdownVirtualDom(changelogMarkdownHtml);
|
|
2435
|
+
const newTabs = tabs.map(tab => {
|
|
2436
|
+
return {
|
|
2437
|
+
...tab,
|
|
2438
|
+
selected: tab.name === Changelog
|
|
2439
|
+
};
|
|
2440
|
+
});
|
|
2419
2441
|
return {
|
|
2420
2442
|
...state,
|
|
2421
2443
|
selectedTab: Changelog,
|
|
2422
|
-
changelogVirtualDom: changelogDom
|
|
2444
|
+
changelogVirtualDom: changelogDom,
|
|
2445
|
+
tabs: newTabs
|
|
2423
2446
|
};
|
|
2424
2447
|
};
|
|
2425
2448
|
|
|
@@ -2427,9 +2450,8 @@ const selectTabDefault = async state => {
|
|
|
2427
2450
|
return state;
|
|
2428
2451
|
};
|
|
2429
2452
|
|
|
2430
|
-
const loadReadmeContent = async
|
|
2453
|
+
const loadReadmeContent = async readmeUrl => {
|
|
2431
2454
|
try {
|
|
2432
|
-
const readmeUrl = join(path, 'README.md');
|
|
2433
2455
|
const readmeContent = await readFile(readmeUrl);
|
|
2434
2456
|
return readmeContent;
|
|
2435
2457
|
} catch (error) {
|
|
@@ -2445,18 +2467,26 @@ const loadReadmeContent = async path => {
|
|
|
2445
2467
|
|
|
2446
2468
|
const selectTabDetails = async state => {
|
|
2447
2469
|
const {
|
|
2448
|
-
|
|
2449
|
-
|
|
2470
|
+
baseUrl,
|
|
2471
|
+
readmeUrl,
|
|
2472
|
+
tabs
|
|
2450
2473
|
} = state;
|
|
2451
|
-
const readmeContent = await loadReadmeContent(
|
|
2474
|
+
const readmeContent = await loadReadmeContent(readmeUrl);
|
|
2452
2475
|
const readmeHtml = await renderMarkdown(readmeContent, {
|
|
2453
2476
|
baseUrl
|
|
2454
2477
|
});
|
|
2455
2478
|
const detailsDom = await getMarkdownVirtualDom(readmeHtml);
|
|
2479
|
+
const newTabs = tabs.map(tab => {
|
|
2480
|
+
return {
|
|
2481
|
+
...tab,
|
|
2482
|
+
selected: tab.name === Details
|
|
2483
|
+
};
|
|
2484
|
+
});
|
|
2456
2485
|
return {
|
|
2457
2486
|
...state,
|
|
2458
2487
|
selectedTab: Details,
|
|
2459
|
-
detailsVirtualDom: detailsDom
|
|
2488
|
+
detailsVirtualDom: detailsDom,
|
|
2489
|
+
tabs: newTabs
|
|
2460
2490
|
};
|
|
2461
2491
|
};
|
|
2462
2492
|
|
|
@@ -2465,7 +2495,8 @@ const selectTabFeatures = async state => {
|
|
|
2465
2495
|
extension,
|
|
2466
2496
|
baseUrl,
|
|
2467
2497
|
selectedFeature,
|
|
2468
|
-
features
|
|
2498
|
+
features,
|
|
2499
|
+
tabs
|
|
2469
2500
|
} = state;
|
|
2470
2501
|
if (features.length === 0) {
|
|
2471
2502
|
return state;
|
|
@@ -2473,10 +2504,17 @@ const selectTabFeatures = async state => {
|
|
|
2473
2504
|
const actualSelectedFeature = selectedFeature || Theme;
|
|
2474
2505
|
const fn = getFeatureDetailsHandler(actualSelectedFeature);
|
|
2475
2506
|
const partialNewState = await fn(extension, baseUrl);
|
|
2507
|
+
const newTabs = tabs.map(tab => {
|
|
2508
|
+
return {
|
|
2509
|
+
...tab,
|
|
2510
|
+
selected: tab.name === Features
|
|
2511
|
+
};
|
|
2512
|
+
});
|
|
2476
2513
|
return {
|
|
2477
2514
|
...state,
|
|
2478
2515
|
selectedTab: Features,
|
|
2479
2516
|
selectedFeature: features[0].id || '',
|
|
2517
|
+
tabs: newTabs,
|
|
2480
2518
|
...partialNewState
|
|
2481
2519
|
};
|
|
2482
2520
|
};
|
|
@@ -2503,6 +2541,27 @@ const handleTabsClick = (state, name) => {
|
|
|
2503
2541
|
return selectTab(state, name);
|
|
2504
2542
|
};
|
|
2505
2543
|
|
|
2544
|
+
const sendMessagePortToFileSystemWorker = async port => {
|
|
2545
|
+
await sendMessagePortToFileSystemWorker$1(port, 0);
|
|
2546
|
+
};
|
|
2547
|
+
|
|
2548
|
+
const createFileSystemWorkerRpc = async () => {
|
|
2549
|
+
try {
|
|
2550
|
+
const rpc = await TransferMessagePortRpcParent.create({
|
|
2551
|
+
commandMap: {},
|
|
2552
|
+
send: sendMessagePortToFileSystemWorker
|
|
2553
|
+
});
|
|
2554
|
+
return rpc;
|
|
2555
|
+
} catch (error) {
|
|
2556
|
+
throw new VError(error, `Failed to create file system worker rpc`);
|
|
2557
|
+
}
|
|
2558
|
+
};
|
|
2559
|
+
|
|
2560
|
+
const initializeFileSystemWorker = async () => {
|
|
2561
|
+
const rpc = await createFileSystemWorkerRpc();
|
|
2562
|
+
set(rpc);
|
|
2563
|
+
};
|
|
2564
|
+
|
|
2506
2565
|
const sendMessagePortToMarkdownWorker = async port => {
|
|
2507
2566
|
await sendMessagePortToMarkdownWorker$1(port, 0);
|
|
2508
2567
|
};
|
|
@@ -2521,12 +2580,16 @@ const createMarkdownWorkerRpc = async () => {
|
|
|
2521
2580
|
|
|
2522
2581
|
const initializeMarkdownWorker = async () => {
|
|
2523
2582
|
const rpc = await createMarkdownWorkerRpc();
|
|
2524
|
-
set$
|
|
2583
|
+
set$4(rpc);
|
|
2525
2584
|
};
|
|
2526
2585
|
|
|
2527
2586
|
const initialize = async () => {
|
|
2528
|
-
await initializeMarkdownWorker();
|
|
2529
|
-
|
|
2587
|
+
await Promise.all([initializeMarkdownWorker(), initializeFileSystemWorker()]);
|
|
2588
|
+
};
|
|
2589
|
+
|
|
2590
|
+
const existsFile = async uri => {
|
|
2591
|
+
// TODO ask file system worker
|
|
2592
|
+
return true;
|
|
2530
2593
|
};
|
|
2531
2594
|
|
|
2532
2595
|
const Web = 1;
|
|
@@ -2584,6 +2647,150 @@ const getBaseUrl = (extensionPath, platform) => {
|
|
|
2584
2647
|
}
|
|
2585
2648
|
};
|
|
2586
2649
|
|
|
2650
|
+
const getExtensionDetailButtons = (hasColorTheme, isBuiltin) => {
|
|
2651
|
+
const allActions = [{
|
|
2652
|
+
label: setColorTheme$3(),
|
|
2653
|
+
onClick: HandleClickSetColorTheme,
|
|
2654
|
+
enabled: hasColorTheme,
|
|
2655
|
+
name: SetColorTheme
|
|
2656
|
+
}, {
|
|
2657
|
+
label: disable(),
|
|
2658
|
+
onClick: HandleClickDisable,
|
|
2659
|
+
enabled: true,
|
|
2660
|
+
name: Disable
|
|
2661
|
+
}, {
|
|
2662
|
+
label: uninstall(),
|
|
2663
|
+
onClick: HandleClickUninstall,
|
|
2664
|
+
enabled: !isBuiltin,
|
|
2665
|
+
name: Uninstall
|
|
2666
|
+
}];
|
|
2667
|
+
return allActions;
|
|
2668
|
+
};
|
|
2669
|
+
|
|
2670
|
+
const getExtensionIdFromUri = uri => {
|
|
2671
|
+
const id = uri.slice('extension-detail://'.length);
|
|
2672
|
+
return id;
|
|
2673
|
+
};
|
|
2674
|
+
|
|
2675
|
+
const getTabs = (selectedTab, hasReadme, hasFeatures, hasChangelog) => {
|
|
2676
|
+
const tabs = [{
|
|
2677
|
+
label: details(),
|
|
2678
|
+
name: Details,
|
|
2679
|
+
selected: selectedTab === Details,
|
|
2680
|
+
enabled: hasReadme
|
|
2681
|
+
}, {
|
|
2682
|
+
label: features$1(),
|
|
2683
|
+
name: Features,
|
|
2684
|
+
selected: selectedTab === Features,
|
|
2685
|
+
enabled: hasFeatures
|
|
2686
|
+
}, {
|
|
2687
|
+
label: changelog(),
|
|
2688
|
+
name: Changelog,
|
|
2689
|
+
selected: selectedTab === Changelog,
|
|
2690
|
+
enabled: hasChangelog
|
|
2691
|
+
}];
|
|
2692
|
+
return tabs;
|
|
2693
|
+
};
|
|
2694
|
+
|
|
2695
|
+
const Small = 1;
|
|
2696
|
+
const Normal = 2;
|
|
2697
|
+
const Large = 3;
|
|
2698
|
+
|
|
2699
|
+
const getViewletSize = width => {
|
|
2700
|
+
if (width < 180) {
|
|
2701
|
+
return Small;
|
|
2702
|
+
}
|
|
2703
|
+
if (width < 768) {
|
|
2704
|
+
return Normal;
|
|
2705
|
+
}
|
|
2706
|
+
return Large;
|
|
2707
|
+
};
|
|
2708
|
+
|
|
2709
|
+
const isLanguageBasicsExtension = extension => {
|
|
2710
|
+
return extension.name && extension.name.startsWith('Language Basics');
|
|
2711
|
+
};
|
|
2712
|
+
|
|
2713
|
+
const isThemeExtension = extension => {
|
|
2714
|
+
return extension.name && extension.name.endsWith(' Theme');
|
|
2715
|
+
};
|
|
2716
|
+
|
|
2717
|
+
const getIcon = (extension, platform, assetDir) => {
|
|
2718
|
+
if (!extension) {
|
|
2719
|
+
return extensionDefaultIcon(assetDir);
|
|
2720
|
+
}
|
|
2721
|
+
if (!extension.path || !extension.icon) {
|
|
2722
|
+
if (isLanguageBasicsExtension(extension)) {
|
|
2723
|
+
return extensionLanguageBasics(assetDir);
|
|
2724
|
+
}
|
|
2725
|
+
if (isThemeExtension(extension)) {
|
|
2726
|
+
return extensionTheme(assetDir);
|
|
2727
|
+
}
|
|
2728
|
+
return extensionDefaultIcon(assetDir);
|
|
2729
|
+
}
|
|
2730
|
+
if (platform === Remote || platform === Electron) {
|
|
2731
|
+
if (extension.builtin) {
|
|
2732
|
+
return `${assetDir}/extensions/${extension.id}/${extension.icon}`;
|
|
2733
|
+
}
|
|
2734
|
+
return `/remote/${extension.path}/${extension.icon}`; // TODO support windows paths
|
|
2735
|
+
}
|
|
2736
|
+
return '';
|
|
2737
|
+
};
|
|
2738
|
+
|
|
2739
|
+
const getDescription = extension => {
|
|
2740
|
+
if (!extension || !extension.description) {
|
|
2741
|
+
return 'n/a';
|
|
2742
|
+
}
|
|
2743
|
+
return extension.description;
|
|
2744
|
+
};
|
|
2745
|
+
|
|
2746
|
+
const getName = extension => {
|
|
2747
|
+
if (extension && extension.name) {
|
|
2748
|
+
return extension.name;
|
|
2749
|
+
}
|
|
2750
|
+
if (extension && extension.id) {
|
|
2751
|
+
return extension.id;
|
|
2752
|
+
}
|
|
2753
|
+
return 'n/a';
|
|
2754
|
+
};
|
|
2755
|
+
|
|
2756
|
+
const getBadge = (builtin, badgeEnabled) => {
|
|
2757
|
+
if (builtin && badgeEnabled) {
|
|
2758
|
+
return 'builtin';
|
|
2759
|
+
}
|
|
2760
|
+
return '';
|
|
2761
|
+
};
|
|
2762
|
+
|
|
2763
|
+
const hasColorThemes = extension => {
|
|
2764
|
+
return Boolean(extension && extension.colorThemes && extension.colorThemes.length > 0);
|
|
2765
|
+
};
|
|
2766
|
+
|
|
2767
|
+
const loadHeaderContent = (state, platform, extension) => {
|
|
2768
|
+
const {
|
|
2769
|
+
assetDir,
|
|
2770
|
+
builtinExtensionsBadgeEnabled
|
|
2771
|
+
} = state;
|
|
2772
|
+
const iconSrc = getIcon(extension, platform, assetDir);
|
|
2773
|
+
const description = getDescription(extension);
|
|
2774
|
+
const name = getName(extension);
|
|
2775
|
+
const extensionUri = extension.uri || extension.path;
|
|
2776
|
+
const extensionId = extension?.id || 'n/a';
|
|
2777
|
+
const extensionVersion = extension?.version || 'n/a';
|
|
2778
|
+
const hasColorTheme = hasColorThemes(extension);
|
|
2779
|
+
const isBuiltin = extension?.builtin;
|
|
2780
|
+
const badge = getBadge(isBuiltin, builtinExtensionsBadgeEnabled);
|
|
2781
|
+
return {
|
|
2782
|
+
badge,
|
|
2783
|
+
description,
|
|
2784
|
+
extension,
|
|
2785
|
+
extensionId,
|
|
2786
|
+
extensionUri,
|
|
2787
|
+
extensionVersion,
|
|
2788
|
+
hasColorTheme,
|
|
2789
|
+
iconSrc,
|
|
2790
|
+
name
|
|
2791
|
+
};
|
|
2792
|
+
};
|
|
2793
|
+
|
|
2587
2794
|
const getCategories = () => {
|
|
2588
2795
|
// TODO
|
|
2589
2796
|
return [{
|
|
@@ -2685,37 +2892,22 @@ const getDisplaySize = size => {
|
|
|
2685
2892
|
});
|
|
2686
2893
|
};
|
|
2687
2894
|
|
|
2688
|
-
const
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
name: SetColorTheme
|
|
2694
|
-
}, {
|
|
2695
|
-
label: disable(),
|
|
2696
|
-
onClick: HandleClickDisable,
|
|
2697
|
-
enabled: true,
|
|
2698
|
-
name: Disable
|
|
2699
|
-
}, {
|
|
2700
|
-
label: uninstall(),
|
|
2701
|
-
onClick: HandleClickUninstall,
|
|
2702
|
-
enabled: !isBuiltin,
|
|
2703
|
-
name: Uninstall
|
|
2704
|
-
}];
|
|
2705
|
-
return allActions;
|
|
2706
|
-
};
|
|
2707
|
-
|
|
2708
|
-
const getExtensionIdFromUri = uri => {
|
|
2709
|
-
const id = uri.slice('extension-detail://'.length);
|
|
2710
|
-
return id;
|
|
2895
|
+
const supportsFileSize = uri => {
|
|
2896
|
+
if (uri.startsWith('http:') || uri.startsWith('https://')) {
|
|
2897
|
+
return false;
|
|
2898
|
+
}
|
|
2899
|
+
return true;
|
|
2711
2900
|
};
|
|
2712
|
-
|
|
2713
2901
|
const getFolderSize = async uri => {
|
|
2714
2902
|
if (!uri) {
|
|
2715
2903
|
throw new VError(`uri is required`);
|
|
2716
2904
|
}
|
|
2905
|
+
if (!supportsFileSize(uri)) {
|
|
2906
|
+
return 0;
|
|
2907
|
+
}
|
|
2717
2908
|
try {
|
|
2718
|
-
|
|
2909
|
+
// @ts-ignore
|
|
2910
|
+
return await invoke('FileSystem.getFolderSize', uri);
|
|
2719
2911
|
} catch {
|
|
2720
2912
|
return 0;
|
|
2721
2913
|
}
|
|
@@ -2778,122 +2970,20 @@ const getResources = isBuiltin => {
|
|
|
2778
2970
|
}];
|
|
2779
2971
|
};
|
|
2780
2972
|
|
|
2781
|
-
const
|
|
2782
|
-
const
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
label: features$1(),
|
|
2789
|
-
name: Features,
|
|
2790
|
-
selected: selectedTab === Features,
|
|
2791
|
-
enabled: hasFeatures
|
|
2792
|
-
}, {
|
|
2793
|
-
label: changelog(),
|
|
2794
|
-
name: Changelog,
|
|
2795
|
-
selected: selectedTab === Changelog,
|
|
2796
|
-
enabled: hasChangelog
|
|
2797
|
-
}];
|
|
2798
|
-
return tabs;
|
|
2799
|
-
};
|
|
2800
|
-
|
|
2801
|
-
const Small = 1;
|
|
2802
|
-
const Normal = 2;
|
|
2803
|
-
const Large = 3;
|
|
2804
|
-
|
|
2805
|
-
const getViewletSize = width => {
|
|
2806
|
-
if (width < 180) {
|
|
2807
|
-
return Small;
|
|
2808
|
-
}
|
|
2809
|
-
if (width < 768) {
|
|
2810
|
-
return Normal;
|
|
2811
|
-
}
|
|
2812
|
-
return Large;
|
|
2813
|
-
};
|
|
2814
|
-
|
|
2815
|
-
const isLanguageBasicsExtension = extension => {
|
|
2816
|
-
return extension.name && extension.name.startsWith('Language Basics');
|
|
2817
|
-
};
|
|
2818
|
-
|
|
2819
|
-
const isThemeExtension = extension => {
|
|
2820
|
-
return extension.name && extension.name.endsWith(' Theme');
|
|
2821
|
-
};
|
|
2822
|
-
|
|
2823
|
-
const getIcon = (extension, platform, assetDir) => {
|
|
2824
|
-
if (!extension) {
|
|
2825
|
-
return extensionDefaultIcon(assetDir);
|
|
2826
|
-
}
|
|
2827
|
-
if (!extension.path || !extension.icon) {
|
|
2828
|
-
if (isLanguageBasicsExtension(extension)) {
|
|
2829
|
-
return extensionLanguageBasics(assetDir);
|
|
2830
|
-
}
|
|
2831
|
-
if (isThemeExtension(extension)) {
|
|
2832
|
-
return extensionTheme(assetDir);
|
|
2833
|
-
}
|
|
2834
|
-
return extensionDefaultIcon(assetDir);
|
|
2835
|
-
}
|
|
2836
|
-
if (platform === Remote || platform === Electron) {
|
|
2837
|
-
if (extension.builtin) {
|
|
2838
|
-
return `${assetDir}/extensions/${extension.id}/${extension.icon}`;
|
|
2839
|
-
}
|
|
2840
|
-
return `/remote/${extension.path}/${extension.icon}`; // TODO support windows paths
|
|
2841
|
-
}
|
|
2842
|
-
return '';
|
|
2843
|
-
};
|
|
2844
|
-
|
|
2845
|
-
const getDescription = extension => {
|
|
2846
|
-
if (!extension || !extension.description) {
|
|
2847
|
-
return 'n/a';
|
|
2848
|
-
}
|
|
2849
|
-
return extension.description;
|
|
2850
|
-
};
|
|
2851
|
-
|
|
2852
|
-
const getName = extension => {
|
|
2853
|
-
if (extension && extension.name) {
|
|
2854
|
-
return extension.name;
|
|
2855
|
-
}
|
|
2856
|
-
if (extension && extension.id) {
|
|
2857
|
-
return extension.id;
|
|
2858
|
-
}
|
|
2859
|
-
return 'n/a';
|
|
2860
|
-
};
|
|
2861
|
-
|
|
2862
|
-
const getBadge = (builtin, badgeEnabled) => {
|
|
2863
|
-
if (builtin && badgeEnabled) {
|
|
2864
|
-
return 'builtin';
|
|
2865
|
-
}
|
|
2866
|
-
return '';
|
|
2867
|
-
};
|
|
2868
|
-
|
|
2869
|
-
const hasColorThemes = extension => {
|
|
2870
|
-
return Boolean(extension && extension.colorThemes && extension.colorThemes.length > 0);
|
|
2871
|
-
};
|
|
2872
|
-
|
|
2873
|
-
const loadHeaderContent = (state, platform, extension) => {
|
|
2874
|
-
const {
|
|
2875
|
-
assetDir,
|
|
2876
|
-
builtinExtensionsBadgeEnabled
|
|
2877
|
-
} = state;
|
|
2878
|
-
const iconSrc = getIcon(extension, platform, assetDir);
|
|
2879
|
-
const description = getDescription(extension);
|
|
2880
|
-
const name = getName(extension);
|
|
2881
|
-
const extensionUri = extension.uri || extension.path;
|
|
2882
|
-
const extensionId = extension?.id || 'n/a';
|
|
2883
|
-
const extensionVersion = extension?.version || 'n/a';
|
|
2884
|
-
const hasColorTheme = hasColorThemes(extension);
|
|
2885
|
-
const isBuiltin = extension?.builtin;
|
|
2886
|
-
const badge = getBadge(isBuiltin, builtinExtensionsBadgeEnabled);
|
|
2973
|
+
const loadSideBarContent = async (extensionId, extensionVersion, extensionUri, isBuiltin) => {
|
|
2974
|
+
const folderSize = await getFolderSize(extensionUri);
|
|
2975
|
+
const displaySize = getDisplaySize(folderSize);
|
|
2976
|
+
const installationEntries = getInstallationEntries(displaySize, extensionId, extensionVersion, extensionUri);
|
|
2977
|
+
const marketplaceEntries = getMarketplaceEntries(isBuiltin);
|
|
2978
|
+
const categories = getCategories();
|
|
2979
|
+
const resources = getResources(isBuiltin);
|
|
2887
2980
|
return {
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
2894
|
-
hasColorTheme,
|
|
2895
|
-
iconSrc,
|
|
2896
|
-
name
|
|
2981
|
+
installationEntries,
|
|
2982
|
+
marketplaceEntries,
|
|
2983
|
+
displaySize,
|
|
2984
|
+
categories,
|
|
2985
|
+
resources,
|
|
2986
|
+
folderSize
|
|
2897
2987
|
};
|
|
2898
2988
|
};
|
|
2899
2989
|
|
|
@@ -2959,7 +3049,11 @@ const loadContent = async (state, platform, savedState) => {
|
|
|
2959
3049
|
iconSrc,
|
|
2960
3050
|
name
|
|
2961
3051
|
} = headerData;
|
|
2962
|
-
const
|
|
3052
|
+
const readmeUrl = join(extension.path, 'README.md');
|
|
3053
|
+
join(extension.path, 'CHANGELOG.md');
|
|
3054
|
+
const hasReadme = await existsFile();
|
|
3055
|
+
const hasChangelog = await existsFile();
|
|
3056
|
+
const readmeContent = await loadReadmeContent(readmeUrl);
|
|
2963
3057
|
const baseUrl = getBaseUrl(extension.path, platform);
|
|
2964
3058
|
const readmeHtml = await renderMarkdown(readmeContent, {
|
|
2965
3059
|
baseUrl
|
|
@@ -2979,17 +3073,17 @@ const loadContent = async (state, platform, savedState) => {
|
|
|
2979
3073
|
} = restoreState(savedState);
|
|
2980
3074
|
const features = getFeatures(selectedFeature || Theme, extension);
|
|
2981
3075
|
const hasFeatures = features.length > 0;
|
|
2982
|
-
const hasReadme = true; // TODO
|
|
2983
|
-
const hasChangelog = true; // TODO
|
|
2984
3076
|
const tabs = getTabs(selectedTab, hasReadme, hasFeatures, hasChangelog);
|
|
2985
3077
|
const enabledTabs = tabs.filter(tab => tab.enabled);
|
|
2986
|
-
const folderSize = await getFolderSize(extensionUri);
|
|
2987
|
-
const displaySize = getDisplaySize(folderSize);
|
|
2988
|
-
const installationEntries = getInstallationEntries(displaySize, extensionId, extensionVersion, extensionUri);
|
|
2989
|
-
const marketplaceEntries = getMarketplaceEntries(isBuiltin);
|
|
2990
|
-
const categories = getCategories();
|
|
2991
|
-
const resources = getResources(isBuiltin);
|
|
2992
3078
|
const sizeValue = getViewletSize(width || 0);
|
|
3079
|
+
const {
|
|
3080
|
+
installationEntries,
|
|
3081
|
+
marketplaceEntries,
|
|
3082
|
+
displaySize,
|
|
3083
|
+
categories,
|
|
3084
|
+
resources,
|
|
3085
|
+
folderSize
|
|
3086
|
+
} = await loadSideBarContent(extensionId, extensionVersion, extensionUri, isBuiltin);
|
|
2993
3087
|
return {
|
|
2994
3088
|
...state,
|
|
2995
3089
|
badge,
|
|
@@ -3010,10 +3104,11 @@ const loadContent = async (state, platform, savedState) => {
|
|
|
3010
3104
|
iconSrc,
|
|
3011
3105
|
name,
|
|
3012
3106
|
readmeScrollTop,
|
|
3107
|
+
readmeUrl,
|
|
3013
3108
|
resources,
|
|
3109
|
+
scrollSource: Script,
|
|
3014
3110
|
scrollToTopButtonEnabled: true,
|
|
3015
3111
|
secondEntries: marketplaceEntries,
|
|
3016
|
-
scrollSource: Script,
|
|
3017
3112
|
selectedTab,
|
|
3018
3113
|
sizeOnDisk: size,
|
|
3019
3114
|
sizeValue,
|
|
@@ -3481,7 +3576,7 @@ const render2 = (uid, diffResult) => {
|
|
|
3481
3576
|
oldState,
|
|
3482
3577
|
newState
|
|
3483
3578
|
} = get(uid);
|
|
3484
|
-
set$
|
|
3579
|
+
set$2(uid, newState, newState);
|
|
3485
3580
|
const commands = applyRender(oldState, newState, diffResult);
|
|
3486
3581
|
return commands;
|
|
3487
3582
|
};
|
|
@@ -3498,7 +3593,8 @@ const renderEventListeners = () => {
|
|
|
3498
3593
|
params: ['handleReadmeContextMenu', 'event.clientX', 'event.clientY', 'event.target.href', 'event.target.src']
|
|
3499
3594
|
}, {
|
|
3500
3595
|
name: HandleReadmeScroll,
|
|
3501
|
-
|
|
3596
|
+
// @ts-ignore
|
|
3597
|
+
params: ['handleScroll', 'event.target.scrollTop', User],
|
|
3502
3598
|
passive: true
|
|
3503
3599
|
}, {
|
|
3504
3600
|
name: HandleTabsClick,
|
|
@@ -3587,7 +3683,7 @@ const listen = async () => {
|
|
|
3587
3683
|
const rpc = await WebWorkerRpcClient.create({
|
|
3588
3684
|
commandMap: commandMap
|
|
3589
3685
|
});
|
|
3590
|
-
set(rpc);
|
|
3686
|
+
set$1(rpc);
|
|
3591
3687
|
};
|
|
3592
3688
|
|
|
3593
3689
|
const main = async () => {
|