@lvce-editor/extension-detail-view 7.15.0 → 7.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.
@@ -783,17 +783,14 @@ const diffTrees = (oldTree, newTree, patches, path) => {
783
783
  };
784
784
 
785
785
  const removeTrailingNavigationPatches = patches => {
786
- // Find the last non-navigation patch
787
- let lastNonNavigationIndex = -1;
788
- for (let i = patches.length - 1; i >= 0; i--) {
789
- const patch = patches[i];
786
+ while (patches.length > 0) {
787
+ const patch = patches.at(-1);
790
788
  if (patch.type !== NavigateChild && patch.type !== NavigateParent && patch.type !== NavigateSibling) {
791
- lastNonNavigationIndex = i;
792
789
  break;
793
790
  }
791
+ patches.pop();
794
792
  }
795
- // Return patches up to and including the last non-navigation patch
796
- return lastNonNavigationIndex === -1 ? [] : patches.slice(0, lastNonNavigationIndex + 1);
793
+ return patches;
797
794
  };
798
795
 
799
796
  const diffTree = (oldNodes, newNodes) => {
@@ -2065,7 +2062,7 @@ const execute = (command, ...args) => {
2065
2062
 
2066
2063
  const Two$1 = '2.0';
2067
2064
  const callbacks = Object.create(null);
2068
- const get$3 = id => {
2065
+ const get$4 = id => {
2069
2066
  return callbacks[id];
2070
2067
  };
2071
2068
  const remove$1 = id => {
@@ -2116,7 +2113,10 @@ const constructError = (message, type, name) => {
2116
2113
  if (ErrorConstructor === Error) {
2117
2114
  const error = new Error(message);
2118
2115
  if (name && name !== 'VError') {
2119
- error.name = name;
2116
+ Object.defineProperty(error, 'name', {
2117
+ configurable: true,
2118
+ value: name
2119
+ });
2120
2120
  }
2121
2121
  return error;
2122
2122
  }
@@ -2147,31 +2147,45 @@ const getParentStack = error => {
2147
2147
  };
2148
2148
  const MethodNotFound = -32601;
2149
2149
  const Custom = -32001;
2150
+ const setStack = (error, stack) => {
2151
+ const descriptor = Object.getOwnPropertyDescriptor(error, 'stack');
2152
+ if (descriptor) {
2153
+ if (!descriptor.configurable && !descriptor.writable) {
2154
+ return;
2155
+ }
2156
+ if (!descriptor.configurable && descriptor.writable) {
2157
+ error.stack = stack;
2158
+ return;
2159
+ }
2160
+ }
2161
+ Object.defineProperty(error, 'stack', {
2162
+ configurable: true,
2163
+ value: stack,
2164
+ writable: true
2165
+ });
2166
+ };
2150
2167
  const restoreExistingError = (error, currentStack) => {
2151
2168
  if (typeof error.stack === 'string') {
2152
- error.stack = error.stack + NewLine + currentStack;
2169
+ setStack(error, `${error.stack}${NewLine}${currentStack}`);
2153
2170
  }
2154
2171
  return error;
2155
2172
  };
2156
2173
  const restoreMethodNotFoundError = (error, currentStack) => {
2157
2174
  const restoredError = new JsonRpcError(error.message);
2158
2175
  const parentStack = getParentStack(error);
2159
- restoredError.stack = parentStack + NewLine + currentStack;
2176
+ setStack(restoredError, `${parentStack}${NewLine}${currentStack}`);
2160
2177
  return restoredError;
2161
2178
  };
2162
2179
  const restoreStackFromData = (restoredError, error, currentStack) => {
2163
2180
  if (error.data.stack && error.data.type && error.message) {
2164
- restoredError.stack = error.data.type + ': ' + error.message + NewLine + error.data.stack + NewLine + currentStack;
2181
+ setStack(restoredError, `${error.data.type}: ${error.message}${NewLine}${error.data.stack}${NewLine}${currentStack}`);
2165
2182
  return;
2166
2183
  }
2167
2184
  if (error.data.stack) {
2168
- restoredError.stack = error.data.stack;
2185
+ setStack(restoredError, error.data.stack);
2169
2186
  }
2170
2187
  };
2171
2188
  const applyDataProperties = (restoredError, error) => {
2172
- if (!error.data) {
2173
- return;
2174
- }
2175
2189
  restoreStackFromData(restoredError, error, getCurrentStack());
2176
2190
  if (error.data.codeFrame) {
2177
2191
  // @ts-ignore
@@ -2192,7 +2206,7 @@ const applyDirectProperties = (restoredError, error) => {
2192
2206
  const indexNewLine = getNewLineIndex(lowerStack);
2193
2207
  const parentStack = getParentStack(error);
2194
2208
  // @ts-ignore
2195
- restoredError.stack = parentStack + lowerStack.slice(indexNewLine);
2209
+ setStack(restoredError, `${parentStack}${lowerStack.slice(indexNewLine)}`);
2196
2210
  }
2197
2211
  if (error.codeFrame) {
2198
2212
  // @ts-ignore
@@ -2238,7 +2252,7 @@ const warn = (...args) => {
2238
2252
  console.warn(...args);
2239
2253
  };
2240
2254
  const resolve = (id, response) => {
2241
- const fn = get$3(id);
2255
+ const fn = get$4(id);
2242
2256
  if (!fn) {
2243
2257
  console.log(response);
2244
2258
  warn(`callback ${id} may already be disposed`);
@@ -2630,10 +2644,10 @@ const createMockRpc = ({
2630
2644
  };
2631
2645
 
2632
2646
  const rpcs = Object.create(null);
2633
- const set$b = (id, rpc) => {
2647
+ const set$c = (id, rpc) => {
2634
2648
  rpcs[id] = rpc;
2635
2649
  };
2636
- const get$2 = id => {
2650
+ const get$3 = id => {
2637
2651
  return rpcs[id];
2638
2652
  };
2639
2653
  const remove = id => {
@@ -2644,18 +2658,18 @@ const remove = id => {
2644
2658
  const create$2 = rpcId => {
2645
2659
  return {
2646
2660
  async dispose() {
2647
- const rpc = get$2(rpcId);
2661
+ const rpc = get$3(rpcId);
2648
2662
  await rpc.dispose();
2649
2663
  },
2650
2664
  // @ts-ignore
2651
2665
  invoke(method, ...params) {
2652
- const rpc = get$2(rpcId);
2666
+ const rpc = get$3(rpcId);
2653
2667
  // @ts-ignore
2654
2668
  return rpc.invoke(method, ...params);
2655
2669
  },
2656
2670
  // @ts-ignore
2657
2671
  invokeAndTransfer(method, ...params) {
2658
- const rpc = get$2(rpcId);
2672
+ const rpc = get$3(rpcId);
2659
2673
  // @ts-ignore
2660
2674
  return rpc.invokeAndTransfer(method, ...params);
2661
2675
  },
@@ -2663,7 +2677,7 @@ const create$2 = rpcId => {
2663
2677
  const mockRpc = createMockRpc({
2664
2678
  commandMap
2665
2679
  });
2666
- set$b(rpcId, mockRpc);
2680
+ set$c(rpcId, mockRpc);
2667
2681
  // @ts-ignore
2668
2682
  mockRpc[Symbol.dispose] = () => {
2669
2683
  remove(rpcId);
@@ -2672,14 +2686,14 @@ const create$2 = rpcId => {
2672
2686
  return mockRpc;
2673
2687
  },
2674
2688
  set(rpc) {
2675
- set$b(rpcId, rpc);
2689
+ set$c(rpcId, rpc);
2676
2690
  }
2677
2691
  };
2678
2692
  };
2679
2693
 
2680
2694
  const {
2681
2695
  invoke: invoke$6,
2682
- set: set$a
2696
+ set: set$b
2683
2697
  } = create$2(ClipBoardWorker);
2684
2698
  const writeText$1 = async text => {
2685
2699
  return invoke$6('ClipBoard.writeText', text);
@@ -2690,7 +2704,7 @@ const writeImage = async image => {
2690
2704
 
2691
2705
  const {
2692
2706
  invoke: invoke$5,
2693
- set: set$9
2707
+ set: set$a
2694
2708
  } = create$2(ExtensionHostWorker);
2695
2709
  const getRuntimeStatus$2 = async extensionId => {
2696
2710
  // @ts-ignore
@@ -2701,12 +2715,12 @@ const ExtensionHost = {
2701
2715
  __proto__: null,
2702
2716
  getRuntimeStatus: getRuntimeStatus$2,
2703
2717
  invoke: invoke$5,
2704
- set: set$9
2718
+ set: set$a
2705
2719
  };
2706
2720
 
2707
2721
  const {
2708
2722
  invoke: invoke$4,
2709
- set: set$8
2723
+ set: set$9
2710
2724
  } = create$2(ExtensionManagementWorker);
2711
2725
  const enable2 = (id, platform) => {
2712
2726
  return invoke$4(`Extensions.enable2`, id, platform);
@@ -2720,7 +2734,7 @@ const getLanguages = (platform, assetDir) => {
2720
2734
 
2721
2735
  const {
2722
2736
  invoke: invoke$3,
2723
- set: set$7
2737
+ set: set$8
2724
2738
  } = create$2(FileSystemWorker$1);
2725
2739
  const readFile$2 = async uri => {
2726
2740
  return invoke$3('FileSystem.readFile', uri);
@@ -2734,12 +2748,12 @@ const FileSystemWorker = {
2734
2748
  exists: exists$1,
2735
2749
  invoke: invoke$3,
2736
2750
  readFile: readFile$2,
2737
- set: set$7
2751
+ set: set$8
2738
2752
  };
2739
2753
 
2740
2754
  const {
2741
2755
  invoke: invoke$2,
2742
- set: set$6
2756
+ set: set$7
2743
2757
  } = create$2(MarkdownWorker$1);
2744
2758
  const getVirtualDom$1 = async html => {
2745
2759
  // @ts-ignore
@@ -2755,13 +2769,13 @@ const MarkdownWorker = {
2755
2769
  getVirtualDom: getVirtualDom$1,
2756
2770
  invoke: invoke$2,
2757
2771
  render: render$1,
2758
- set: set$6
2772
+ set: set$7
2759
2773
  };
2760
2774
 
2761
2775
  const {
2762
2776
  invoke: invoke$1,
2763
2777
  invokeAndTransfer,
2764
- set: set$5
2778
+ set: set$6
2765
2779
  } = create$2(RendererWorker);
2766
2780
  const showContextMenu2 = async (uid, menuId, x, y, args) => {
2767
2781
  number(uid);
@@ -2830,7 +2844,7 @@ const getAllPreferences = async () => {
2830
2844
 
2831
2845
  const {
2832
2846
  getRuntimeStatus: getRuntimeStatus$1,
2833
- set: set$4
2847
+ set: set$5
2834
2848
  } = ExtensionHost;
2835
2849
 
2836
2850
  const getRuntimeStatus = async extensionId => {
@@ -3084,7 +3098,7 @@ const getScrollToTopVirtualDom = scrollToTopButtonEnabled => {
3084
3098
  const {
3085
3099
  getVirtualDom,
3086
3100
  render,
3087
- set: set$3
3101
+ set: set$4
3088
3102
  } = MarkdownWorker;
3089
3103
 
3090
3104
  const addScrollToTopVirtualDom = dom => {
@@ -3202,20 +3216,20 @@ const getCache = (cacheName, bucketName) => {
3202
3216
  };
3203
3217
 
3204
3218
  // TODO pass application name from renderer worker to not hardcode it
3205
- const cacheName = 'lvce-editor/markdown-cache';
3219
+ const cacheName$1 = 'lvce-editor/markdown-cache';
3206
3220
  const has = async (key, bucketName) => {
3207
- const cache = await getCache(cacheName, bucketName);
3221
+ const cache = await getCache(cacheName$1, bucketName);
3208
3222
  const response = await cache.match(key);
3209
3223
  return Boolean(response);
3210
3224
  };
3211
- const get$1 = async (key, bucketName) => {
3212
- const cache = await getCache(cacheName, bucketName);
3225
+ const get$2 = async (key, bucketName) => {
3226
+ const cache = await getCache(cacheName$1, bucketName);
3213
3227
  const response = await cache.match(key);
3214
3228
  const text = await response?.text();
3215
3229
  return text || '';
3216
3230
  };
3217
- const set$2 = async (key, bucketName, value) => {
3218
- const cache = await getCache(cacheName, bucketName);
3231
+ const set$3 = async (key, bucketName, value) => {
3232
+ const cache = await getCache(cacheName$1, bucketName);
3219
3233
  await cache.put(key, new Response(value, {
3220
3234
  headers: {
3221
3235
  'Content-Length': `${value.length}`,
@@ -3229,11 +3243,11 @@ const renderMarkdownCached = async (markdown, options) => {
3229
3243
  const bucketName = `markdown-cache`;
3230
3244
  const hasItem = await has(cacheKey, bucketName);
3231
3245
  if (hasItem) {
3232
- const value = await get$1(cacheKey, bucketName);
3246
+ const value = await get$2(cacheKey, bucketName);
3233
3247
  return value; // TODO validate if it's valid
3234
3248
  }
3235
3249
  const html = await render(markdown, options);
3236
- await set$2(cacheKey, bucketName, html);
3250
+ await set$3(cacheKey, bucketName, html);
3237
3251
  return html;
3238
3252
  };
3239
3253
 
@@ -3723,7 +3737,7 @@ const {
3723
3737
  exists,
3724
3738
  invoke,
3725
3739
  readFile: readFile$1,
3726
- set: set$1
3740
+ set: set$2
3727
3741
  } = FileSystemWorker;
3728
3742
  const readFileAsBlob = async uri => {
3729
3743
  // TODO maybe readAsObjectUrl?
@@ -3773,10 +3787,10 @@ const copyReadmeLink = async (state, href) => {
3773
3787
 
3774
3788
  const {
3775
3789
  dispose: dispose$1,
3776
- get,
3790
+ get: get$1,
3777
3791
  getCommandIds,
3778
3792
  registerCommands,
3779
- set,
3793
+ set: set$1,
3780
3794
  wrapCommand,
3781
3795
  wrapGetter
3782
3796
  } = create$1();
@@ -3857,7 +3871,7 @@ const create = (uid, uri, x, y, width, height, platform, assetDir) => {
3857
3871
  webViews: [],
3858
3872
  width
3859
3873
  };
3860
- set(uid, state, state);
3874
+ set$1(uid, state, state);
3861
3875
  };
3862
3876
 
3863
3877
  const isEqual$3 = (oldState, newState) => {
@@ -3893,7 +3907,7 @@ const diff2 = uid => {
3893
3907
  const {
3894
3908
  newState,
3895
3909
  oldState
3896
- } = get(uid);
3910
+ } = get$1(uid);
3897
3911
  const diffResult = [];
3898
3912
  for (let i = 0; i < modules.length; i++) {
3899
3913
  const fn = modules[i];
@@ -4229,7 +4243,7 @@ const getExtension$1 = async (id, platform) => {
4229
4243
 
4230
4244
  const getExtensionNew = async id => {
4231
4245
  try {
4232
- const rpc = get$2(ExtensionManagementWorker);
4246
+ const rpc = get$3(ExtensionManagementWorker);
4233
4247
  const extension = await rpc.invoke('Extensions.getExtension', id);
4234
4248
  if (extension) {
4235
4249
  return extension;
@@ -5727,16 +5741,68 @@ class GithubReleasesError extends Error {
5727
5741
  }
5728
5742
  }
5729
5743
 
5744
+ const bucketName = 'changelog-cache';
5745
+ const cacheName = 'lvce-editor/changelog-cache';
5746
+ const cachedAtHeader = 'X-Lvce-Editor-Cached-At';
5747
+ const maxAge = 60 * 60 * 1000;
5748
+ const getCacheKey = uri => {
5749
+ return `https://-/changelog/${encodeURIComponent(uri)}`;
5750
+ };
5751
+ const isFresh = (cachedAt, now) => {
5752
+ return Number.isFinite(cachedAt) && now - cachedAt <= maxAge;
5753
+ };
5754
+ const get = async (uri, now = Date.now(), getCacheFunction = getCache) => {
5755
+ try {
5756
+ const cache = await getCacheFunction(cacheName, bucketName);
5757
+ const response = await cache.match(getCacheKey(uri));
5758
+ if (!response) {
5759
+ return undefined;
5760
+ }
5761
+ const cachedAt = Number(response.headers.get(cachedAtHeader));
5762
+ if (!isFresh(cachedAt, now)) {
5763
+ return undefined;
5764
+ }
5765
+ return response.text();
5766
+ } catch {
5767
+ return undefined;
5768
+ }
5769
+ };
5770
+ const set = async (uri, value, now = Date.now(), getCacheFunction = getCache) => {
5771
+ try {
5772
+ const cache = await getCacheFunction(cacheName, bucketName);
5773
+ await cache.put(getCacheKey(uri), new Response(value, {
5774
+ headers: {
5775
+ [cachedAtHeader]: `${now}`,
5776
+ 'Content-Length': `${value.length}`,
5777
+ 'Content-Type': 'application/markdown'
5778
+ }
5779
+ }));
5780
+ } catch {
5781
+ return;
5782
+ }
5783
+ };
5784
+
5785
+ const ChangelogCache = {
5786
+ __proto__: null,
5787
+ get,
5788
+ set
5789
+ };
5790
+
5730
5791
  const error = async error => {
5731
5792
  // TODO send message to error worker or log worker
5732
5793
  // @ts-ignore
5733
5794
  console.error(error);
5734
5795
  };
5735
5796
 
5736
- const loadChangelogContent = async path => {
5797
+ const loadChangelogContent = async (path, cache = ChangelogCache) => {
5737
5798
  try {
5738
5799
  const changelogUrl = join(path, 'CHANGELOG.md');
5800
+ const cachedContent = await cache.get(changelogUrl);
5801
+ if (cachedContent !== undefined) {
5802
+ return cachedContent;
5803
+ }
5739
5804
  const changelogContent = await readFile(changelogUrl);
5805
+ await cache.set(changelogUrl, changelogContent);
5740
5806
  return changelogContent;
5741
5807
  } catch (error$1) {
5742
5808
  if (isEnoentError(error$1)) {
@@ -6089,7 +6155,7 @@ const createRpc = async () => {
6089
6155
  };
6090
6156
  const initializeClipBoardWorker = async () => {
6091
6157
  const rpc = await createRpc();
6092
- set$a(rpc);
6158
+ set$b(rpc);
6093
6159
  };
6094
6160
 
6095
6161
  const sendMessagePortToExtensionHostWorker = async port => {
@@ -6110,7 +6176,7 @@ const createExtensionHostWorkerRpc = async () => {
6110
6176
 
6111
6177
  const initializeExtensionHostWorker = async () => {
6112
6178
  const rpc = await createExtensionHostWorkerRpc();
6113
- set$4(rpc);
6179
+ set$5(rpc);
6114
6180
  };
6115
6181
 
6116
6182
  const createExtensionManagementWorkerRpc = async () => {
@@ -6128,7 +6194,7 @@ const createExtensionManagementWorkerRpc = async () => {
6128
6194
  const initializeExtensionManagementWorker = async () => {
6129
6195
  try {
6130
6196
  const rpc = await createExtensionManagementWorkerRpc();
6131
- set$8(rpc);
6197
+ set$9(rpc);
6132
6198
  } catch {
6133
6199
  // ignore
6134
6200
  }
@@ -6152,7 +6218,7 @@ const createFileSystemWorkerRpc = async () => {
6152
6218
 
6153
6219
  const initializeFileSystemWorker = async () => {
6154
6220
  const rpc = await createFileSystemWorkerRpc();
6155
- set$1(rpc);
6221
+ set$2(rpc);
6156
6222
  };
6157
6223
 
6158
6224
  const sendMessagePortToMarkdownWorker = async port => {
@@ -6169,7 +6235,7 @@ const createMarkdownWorkerRpc = async () => {
6169
6235
 
6170
6236
  const initializeMarkdownWorker = async () => {
6171
6237
  const rpc = await createMarkdownWorkerRpc();
6172
- set$3(rpc);
6238
+ set$4(rpc);
6173
6239
  };
6174
6240
 
6175
6241
  const initialize = async () => {
@@ -6921,8 +6987,8 @@ const render2 = (uid, diffResult) => {
6921
6987
  const {
6922
6988
  newState,
6923
6989
  oldState
6924
- } = get(uid);
6925
- set(uid, newState, newState);
6990
+ } = get$1(uid);
6991
+ set$1(uid, newState, newState);
6926
6992
  const commands = applyRender(oldState, newState, diffResult);
6927
6993
  return commands;
6928
6994
  };
@@ -7104,7 +7170,7 @@ const listen = async () => {
7104
7170
  const rpc = await create$3({
7105
7171
  commandMap: commandMap
7106
7172
  });
7107
- set$5(rpc);
7173
+ set$6(rpc);
7108
7174
  };
7109
7175
 
7110
7176
  const main = async () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-detail-view",
3
- "version": "7.15.0",
3
+ "version": "7.17.0",
4
4
  "description": "Extension Detail View Worker",
5
5
  "repository": {
6
6
  "type": "git",