@lvce-editor/extension-search-view 2.8.0 → 2.10.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.
@@ -935,132 +935,68 @@ const RE_PARAM = /@\w+/g;
935
935
 
936
936
  // TODO test sorting and filtering
937
937
  const parseValue = value => {
938
- const parameters = Object.create(null);
938
+ let installed = false;
939
+ let enabled = false;
940
+ let disabled = false;
941
+ let builtin = false;
942
+ let sort = '';
943
+ let id = '';
944
+ let outdated = false;
939
945
  // TODO this is not very functional code (assignment)
940
946
  const replaced = value.replaceAll(RE_PARAM, (match, by, order) => {
941
947
  if (match.startsWith(Installed)) {
942
- parameters.installed = true;
948
+ installed = true;
943
949
  }
944
950
  if (match.startsWith(Enabled)) {
945
- parameters.enabled = true;
951
+ enabled = true;
946
952
  }
947
953
  if (match.startsWith(Disabled)) {
948
- parameters.disabled = true;
954
+ disabled = true;
949
955
  }
950
956
  if (match.startsWith(Builtin)) {
951
- parameters.builtin = true;
957
+ builtin = true;
952
958
  }
953
959
  if (match.startsWith(Sort)) {
954
960
  // TODO
955
- parameters.sort = 'installs';
961
+ sort = 'installs';
956
962
  }
957
963
  if (match.startsWith(Id)) {
958
964
  // TODO
959
- parameters.id = 'abc';
965
+ id = 'abc';
960
966
  }
961
967
  if (match.startsWith(Outdated)) {
962
- parameters.outdated = true;
968
+ outdated = true;
963
969
  }
964
970
  return '';
965
971
  });
966
- const isLocal = parameters.enabled || parameters.builtin || parameters.disabled || parameters.outdated || parameters.installed;
972
+ const isLocal = enabled || builtin || disabled || outdated || installed;
967
973
  return {
968
974
  query: replaced,
969
- ...parameters,
975
+ enabled,
976
+ builtin,
977
+ disabled,
978
+ outdated,
979
+ installed,
980
+ id,
981
+ sort,
970
982
  isLocal
971
983
  };
972
984
  };
973
985
 
974
- const Web = 1;
975
- const Electron = 2;
976
- const Remote = 3;
977
-
978
- const getRemoteUrl = (extension, platform, assetDir) => {
979
- if (platform === Remote || platform === Electron) {
980
- if (extension.builtin) {
981
- return `${assetDir}/extensions/${extension.id}/${extension.icon}`;
982
- }
983
- return `/remote/${extension.path}/${extension.icon}`; // TODO support windows paths
984
- }
985
- return '';
986
- };
987
-
988
- const getExtensionDefaultIcon = assetDir => {
989
- return `${assetDir}/icons/extensionDefaultIcon.png`;
990
- };
991
- const getExtensionLanguageBasicsIcon = assetDir => {
992
- return `${assetDir}/icons/language-icon.svg`;
993
- };
994
- const getExtensionThemeIcon = assetDir => {
995
- return `${assetDir}/icons/theme-icon.png`;
996
- };
997
-
998
- const isLanguageBasicsExtension = extension => {
999
- return extension.name && extension.name.startsWith('Language Basics');
1000
- };
1001
- const isThemeExtension = extension => {
1002
- return extension.name && extension.name.endsWith(' Theme');
1003
- };
1004
- const getIcon = (extension, platform, assetDir) => {
1005
- if (!extension) {
1006
- return getExtensionDefaultIcon(assetDir);
1007
- }
1008
- if (!extension.path || !extension.icon) {
1009
- if (isLanguageBasicsExtension(extension)) {
1010
- return getExtensionLanguageBasicsIcon(assetDir);
1011
- }
1012
- if (isThemeExtension(extension)) {
1013
- return getExtensionThemeIcon(assetDir);
1014
- }
1015
- return getExtensionDefaultIcon(assetDir);
1016
- }
1017
- return getRemoteUrl(extension, platform, assetDir);
1018
- };
1019
- const getName = extension => {
1020
- if (extension && extension.name) {
1021
- return extension.name;
1022
- }
1023
- if (extension && extension.id) {
1024
- return extension.id;
1025
- }
1026
- return 'n/a';
1027
- };
1028
- const getDescription = extension => {
1029
- if (!extension || !extension.description) {
1030
- return 'n/a';
1031
- }
1032
- return extension.description;
986
+ const matchesName = (extension, query) => {
987
+ const extensionNameLower = extension.name.toLowerCase();
988
+ return extensionNameLower.includes(query);
1033
989
  };
1034
- const getId = extension => {
1035
- if (!extension || !extension.id) {
1036
- return 'n/a';
1037
- }
1038
- return extension.id;
1039
- };
1040
-
1041
- const RE_PUBLISHER = /^[a-z\d-]+/;
1042
-
1043
- // TODO handle case when extension is of type number|array|null|string
1044
- const getPublisher = extension => {
1045
- if (!extension || !extension.id) {
1046
- return 'n/a';
1047
- }
1048
- // TODO handle case when id is not of type string -> should not crash application
1049
- const match = extension.id.match(RE_PUBLISHER);
1050
- if (!match) {
1051
- return 'n/a';
1052
- }
1053
- return match[0];
990
+ const matchesId = (extension, query) => {
991
+ const extensionIdLower = extension.id.toLowerCase();
992
+ return extensionIdLower.includes(query);
1054
993
  };
1055
-
1056
994
  const matchesParsedValue = (extension, parsedValue) => {
1057
- if (extension && typeof extension.name === 'string') {
1058
- const extensionNameLower = extension.name.toLowerCase();
1059
- return extensionNameLower.includes(parsedValue.query);
995
+ if (extension.name) {
996
+ return matchesName(extension, parsedValue.query);
1060
997
  }
1061
- if (extension && typeof extension.id === 'string') {
1062
- const extensionIdLower = extension.id.toLowerCase();
1063
- return extensionIdLower.includes(parsedValue.query);
998
+ if (extension.id) {
999
+ return matchesId(extension, parsedValue.query);
1064
1000
  }
1065
1001
  return false;
1066
1002
  };
@@ -1083,17 +1019,11 @@ const sortExtensions = extensions => {
1083
1019
  return toSorted(extensions, compareExtension);
1084
1020
  };
1085
1021
 
1086
- const getExtensions = async (extensions, parsedValue, platform, assetDir) => {
1022
+ const getExtensions = async (extensions, parsedValue) => {
1087
1023
  const filteredExtensions = [];
1088
1024
  for (const extension of extensions) {
1089
1025
  if (matchesParsedValue(extension, parsedValue)) {
1090
- filteredExtensions.push({
1091
- name: getName(extension),
1092
- id: getId(extension),
1093
- publisher: getPublisher(extension),
1094
- icon: getIcon(extension, platform, assetDir),
1095
- description: getDescription(extension)
1096
- });
1026
+ filteredExtensions.push(extension);
1097
1027
  }
1098
1028
  }
1099
1029
  const sortedExtensions = sortExtensions(filteredExtensions);
@@ -1103,7 +1033,7 @@ const getExtensions = async (extensions, parsedValue, platform, assetDir) => {
1103
1033
  const searchExtensions = async (extensions, value, platform, assetDir) => {
1104
1034
  try {
1105
1035
  const parsedValue = parseValue(value);
1106
- const filteredExtensions = await getExtensions(extensions, parsedValue, platform, assetDir);
1036
+ const filteredExtensions = await getExtensions(extensions, parsedValue);
1107
1037
  return filteredExtensions;
1108
1038
  } catch (error) {
1109
1039
  throw new VError(error, 'Failed to search for extensions');
@@ -1139,7 +1069,7 @@ const handleInput = async (state, value) => {
1139
1069
  placeholder: searchExtensionsInMarketPlace()
1140
1070
  };
1141
1071
  }
1142
- const listHeight = getListHeight(state.items.length, state.itemHeight, state.height);
1072
+ const listHeight = getListHeight(items.length, itemHeight, height);
1143
1073
  const total = items.length;
1144
1074
  const contentHeight = total * itemHeight;
1145
1075
  const scrollBarHeight = getScrollBarSize(height, contentHeight, minimumSliderSize);
@@ -1217,7 +1147,8 @@ const create = (id, uri, x, y, width, height, platform, assetDir) => {
1217
1147
  width,
1218
1148
  x,
1219
1149
  y,
1220
- focused: false
1150
+ focused: false,
1151
+ inputSource: 0
1221
1152
  };
1222
1153
  set$1(id, state, state);
1223
1154
  };
@@ -1228,31 +1159,31 @@ const RenderScrollBar = 5;
1228
1159
  const RenderMessage = 6;
1229
1160
 
1230
1161
  const diffType$4 = RenderItems;
1231
- const isEqual$4 = (oldState, newState) => {
1162
+ const isEqual$5 = (oldState, newState) => {
1232
1163
  return true;
1233
1164
  };
1234
1165
 
1235
1166
  const diffType$3 = RenderHeader;
1236
- const isEqual$3 = (oldState, newState) => {
1167
+ const isEqual$4 = (oldState, newState) => {
1237
1168
  return oldState.placeholder === newState.placeholder;
1238
1169
  };
1239
1170
 
1240
1171
  const diffType$2 = RenderItems;
1241
- const isEqual$2 = (oldState, newState) => {
1172
+ const isEqual$3 = (oldState, newState) => {
1242
1173
  return oldState.items === newState.items && oldState.minLineY === newState.minLineY && oldState.maxLineY === newState.maxLineY && oldState.deltaY === newState.deltaY && oldState.focusedIndex === newState.focusedIndex;
1243
1174
  };
1244
1175
 
1245
1176
  const diffType$1 = RenderMessage;
1246
- const isEqual$1 = (oldState, newState) => {
1177
+ const isEqual$2 = (oldState, newState) => {
1247
1178
  return oldState.message === newState.message;
1248
1179
  };
1249
1180
 
1250
1181
  const diffType = RenderScrollBar;
1251
- const isEqual = (oldState, newState) => {
1182
+ const isEqual$1 = (oldState, newState) => {
1252
1183
  return oldState.negativeMargin === newState.negativeMargin && oldState.deltaY === newState.deltaY && oldState.height === newState.height && oldState.finalDeltaY === newState.finalDeltaY && oldState.items.length === newState.items.length && oldState.scrollBarActive === newState.scrollBarActive;
1253
1184
  };
1254
1185
 
1255
- const modules = [isEqual$4, isEqual, isEqual$1, isEqual$3, isEqual$2];
1186
+ const modules = [isEqual$5, isEqual$1, isEqual$2, isEqual$4, isEqual$3];
1256
1187
  const numbers = [diffType$4, diffType, diffType$1, diffType$3, diffType$2];
1257
1188
 
1258
1189
  const diff = (oldState, newState) => {
@@ -1411,7 +1342,7 @@ const getActions = () => {
1411
1342
  }];
1412
1343
  };
1413
1344
 
1414
- const commandIds = ['clearSearchResults', 'closeSuggest', 'focusFirst', 'focusLast', 'focusNext', 'focusNextPage', 'focusPrevious', 'focusPreviousPage', 'handleBlur', 'handleClick', 'handleContextMenu', 'handleDisable', 'handleFocus', 'handleInput', 'handleInstall', 'handleScrollBarCaptureLost', 'handleScrollBarClick', 'handleScrollBarMove', 'handleUninstall', 'handleWheel', 'openSuggest', 'render', 'saveState', 'scrollDown', 'selectIndex', 'setDeltaY', 'toggleSuggest'];
1345
+ const commandIds = ['clearSearchResults', 'closeSuggest', 'focusFirst', 'focusLast', 'focusNext', 'focusNextPage', 'focusPrevious', 'focusPreviousPage', 'handleBlur', 'handleClick', 'handleContextMenu', 'handleDisable', 'handleFocus', 'handleInput', 'handleInstall', 'handleScrollBarCaptureLost', 'handleScrollBarClick', 'handleScrollBarMove', 'handleUninstall', 'handleWheel', 'openSuggest', 'render', 'saveState', 'scrollDown', 'selectIndex', 'setDeltaY', 'toggleSuggest', 'handleScrollBarThumbPointerMove'];
1415
1346
 
1416
1347
  const getCommandIds = () => {
1417
1348
  return commandIds;
@@ -1723,13 +1654,21 @@ const handleWheel = (state, deltaMode, deltaY) => {
1723
1654
  return setDeltaY(state, state.deltaY + deltaY);
1724
1655
  };
1725
1656
 
1726
- const getAllExtensions = async platform => {
1657
+ const Web = 1;
1658
+ const Electron = 2;
1659
+ const Remote = 3;
1660
+
1661
+ const getAllExtensions$1 = async platform => {
1727
1662
  if (platform === Web) {
1728
1663
  return [];
1729
1664
  }
1730
1665
  return invoke('ExtensionManagement.getAllExtensions');
1731
1666
  };
1732
1667
 
1668
+ const getAllExtensions = platform => {
1669
+ return getAllExtensions$1(platform);
1670
+ };
1671
+
1733
1672
  const Small = 1;
1734
1673
  const Normal = 2;
1735
1674
  const Large = 3;
@@ -1744,12 +1683,113 @@ const getViewletSize = width => {
1744
1683
  return Large;
1745
1684
  };
1746
1685
 
1686
+ const User = 1;
1687
+ const Script = 2;
1688
+
1689
+ const getRemoteUrl = (extension, platform, assetDir) => {
1690
+ if (platform === Remote || platform === Electron) {
1691
+ if (extension.builtin) {
1692
+ return `${assetDir}/extensions/${extension.id}/${extension.icon}`;
1693
+ }
1694
+ return `/remote/${extension.path}/${extension.icon}`; // TODO support windows paths
1695
+ }
1696
+ return '';
1697
+ };
1698
+
1699
+ const getExtensionDefaultIcon = assetDir => {
1700
+ return `${assetDir}/icons/extensionDefaultIcon.png`;
1701
+ };
1702
+ const getExtensionLanguageBasicsIcon = assetDir => {
1703
+ return `${assetDir}/icons/language-icon.svg`;
1704
+ };
1705
+ const getExtensionThemeIcon = assetDir => {
1706
+ return `${assetDir}/icons/theme-icon.png`;
1707
+ };
1708
+
1709
+ const isLanguageBasicsExtension = extension => {
1710
+ return extension.name && extension.name.startsWith('Language Basics');
1711
+ };
1712
+ const isThemeExtension = extension => {
1713
+ return extension.name && extension.name.endsWith(' Theme');
1714
+ };
1715
+ const getIcon = (extension, platform, assetDir) => {
1716
+ if (!extension) {
1717
+ return getExtensionDefaultIcon(assetDir);
1718
+ }
1719
+ if (!extension.path || !extension.icon) {
1720
+ if (isLanguageBasicsExtension(extension)) {
1721
+ return getExtensionLanguageBasicsIcon(assetDir);
1722
+ }
1723
+ if (isThemeExtension(extension)) {
1724
+ return getExtensionThemeIcon(assetDir);
1725
+ }
1726
+ return getExtensionDefaultIcon(assetDir);
1727
+ }
1728
+ return getRemoteUrl(extension, platform, assetDir);
1729
+ };
1730
+ const getName = extension => {
1731
+ if (extension && extension.name) {
1732
+ return extension.name;
1733
+ }
1734
+ if (extension && extension.id) {
1735
+ return extension.id;
1736
+ }
1737
+ return 'n/a';
1738
+ };
1739
+ const getDescription = extension => {
1740
+ if (!extension || !extension.description) {
1741
+ return 'n/a';
1742
+ }
1743
+ return extension.description;
1744
+ };
1745
+ const getId = extension => {
1746
+ if (!extension || !extension.id) {
1747
+ return 'n/a';
1748
+ }
1749
+ return extension.id;
1750
+ };
1751
+
1752
+ const RE_PUBLISHER = /^[a-z\d-]+/;
1753
+
1754
+ // TODO handle case when extension is of type number|array|null|string
1755
+ const getPublisher = extension => {
1756
+ if (!extension || !extension.id) {
1757
+ return 'n/a';
1758
+ }
1759
+ // TODO handle case when id is not of type string -> should not crash application
1760
+ const match = extension.id.match(RE_PUBLISHER);
1761
+ if (!match) {
1762
+ return 'n/a';
1763
+ }
1764
+ return match[0];
1765
+ };
1766
+
1767
+ const normalizeExtension$1 = (extension, platform, assetDir) => {
1768
+ return {
1769
+ id: getId(extension),
1770
+ name: getName(extension),
1771
+ description: getDescription(extension),
1772
+ uri: '',
1773
+ publisher: getPublisher(extension),
1774
+ icon: getIcon(extension, platform, assetDir)
1775
+ };
1776
+ };
1777
+
1778
+ const normalizeExtension = (extensions, platform, assetDir) => {
1779
+ const normalized = [];
1780
+ for (const extension of extensions) {
1781
+ normalized.push(normalizeExtension$1(extension, platform, assetDir));
1782
+ }
1783
+ return normalized;
1784
+ };
1785
+
1747
1786
  const getSavedValue = savedState => {
1748
1787
  if (savedState && typeof savedState === 'object' && 'searchValue' in savedState && typeof savedState.searchValue === 'string') {
1749
1788
  return savedState.searchValue;
1750
1789
  }
1751
1790
  return '';
1752
1791
  };
1792
+
1753
1793
  const restoreState = savedState => {
1754
1794
  const searchValue = getSavedValue(savedState);
1755
1795
  return {
@@ -1763,7 +1803,8 @@ const loadContent = async (uid, savedState) => {
1763
1803
  } = get$1(uid);
1764
1804
  const {
1765
1805
  width,
1766
- platform
1806
+ platform,
1807
+ assetDir
1767
1808
  } = newState;
1768
1809
  const {
1769
1810
  searchValue
@@ -1771,10 +1812,12 @@ const loadContent = async (uid, savedState) => {
1771
1812
  // TODO just get local extensions on demand (not when query string is already different)
1772
1813
  const allExtensions = await getAllExtensions(platform);
1773
1814
  const size = getViewletSize(width);
1815
+ const normalized = normalizeExtension(allExtensions, platform, assetDir);
1774
1816
  const updatedState = await handleInput({
1775
1817
  ...newState,
1776
- allExtensions,
1777
- size
1818
+ allExtensions: normalized,
1819
+ size,
1820
+ inputSource: Script
1778
1821
  }, searchValue);
1779
1822
  set$1(uid, newState, updatedState);
1780
1823
  };
@@ -1783,6 +1826,10 @@ const openSuggest = state => {
1783
1826
  return state;
1784
1827
  };
1785
1828
 
1829
+ const isEqual = (oldState, newState) => {
1830
+ return newState.inputSource === User || oldState.searchValue === newState.searchValue;
1831
+ };
1832
+
1786
1833
  const Actions = 'Actions';
1787
1834
  const ExtensionActions = 'ExtensionActions';
1788
1835
  const ExtensionActive = 'ExtensionActive';
@@ -2121,12 +2168,24 @@ const getExtensionsVirtualDom = visibleExtensions => {
2121
2168
  };
2122
2169
 
2123
2170
  const getVisibleItem = (item, setSize, itemHeight, minLineY, relative, i, focusedIndex) => {
2171
+ // TODO use normal parameters
2172
+ const {
2173
+ publisher,
2174
+ description,
2175
+ icon,
2176
+ id,
2177
+ name
2178
+ } = item;
2124
2179
  return {
2125
- ...item,
2126
2180
  setSize,
2127
2181
  posInSet: i + 1,
2128
2182
  top: (i - minLineY) * itemHeight - relative,
2129
- focused: i === focusedIndex
2183
+ focused: i === focusedIndex,
2184
+ publisher,
2185
+ description,
2186
+ icon,
2187
+ id,
2188
+ name
2130
2189
  };
2131
2190
  };
2132
2191
 
@@ -2188,38 +2247,36 @@ const renderScrollBar$1 = newState => {
2188
2247
  };
2189
2248
 
2190
2249
  const renderExtensions = {
2191
- isEqual: isEqual$2,
2250
+ isEqual: isEqual$3,
2192
2251
  apply(oldState, newState) {
2193
2252
  return renderItems(newState);
2194
2253
  }
2195
2254
  };
2196
2255
  const renderScrollBar = {
2197
- isEqual: isEqual,
2256
+ isEqual: isEqual$1,
2198
2257
  apply(oldState, newState) {
2199
2258
  return renderScrollBar$1(newState);
2200
2259
  }
2201
2260
  };
2202
2261
  const renderMessage = {
2203
- isEqual: isEqual$1,
2262
+ isEqual: isEqual$2,
2204
2263
  apply(oldState, newState) {
2205
2264
  return renderMessage$1(newState);
2206
2265
  }
2207
2266
  };
2208
2267
  const renderSearchValue = {
2209
- isEqual(oldState, newState) {
2210
- return oldState.searchValue === newState.searchValue;
2211
- },
2268
+ isEqual: isEqual,
2212
2269
  apply(oldState, newState) {
2213
2270
  return [/* method */SetSearchValue, oldState.searchValue, newState.searchValue];
2214
2271
  }
2215
2272
  };
2216
2273
  const renderHeader = {
2217
- isEqual: isEqual$3,
2274
+ isEqual: isEqual$4,
2218
2275
  apply(oldState, newState) {
2219
2276
  return renderHeader$1(newState);
2220
2277
  }
2221
2278
  };
2222
- const render = [renderScrollBar, renderMessage, renderExtensions, renderSearchValue, renderHeader];
2279
+ const render = [renderScrollBar, renderMessage, renderExtensions, renderHeader, renderSearchValue];
2223
2280
  const doRender = (oldState, newState) => {
2224
2281
  const commands = [];
2225
2282
  for (const item of render) {
@@ -2305,10 +2362,13 @@ const renderEventListeners = () => {
2305
2362
  }];
2306
2363
  };
2307
2364
 
2308
- const saveState = state => {
2365
+ const saveState = uid => {
2366
+ const {
2367
+ newState
2368
+ } = get$1(uid);
2309
2369
  const {
2310
2370
  searchValue
2311
- } = state;
2371
+ } = newState;
2312
2372
  return {
2313
2373
  searchValue
2314
2374
  };
@@ -2323,6 +2383,10 @@ const scrollDown = state => {
2323
2383
  return setDeltaY(state, newDeltaY);
2324
2384
  };
2325
2385
 
2386
+ const terminate = () => {
2387
+ globalThis.close();
2388
+ };
2389
+
2326
2390
  const toggleSuggest = state => {
2327
2391
  return state;
2328
2392
  };
@@ -2344,6 +2408,7 @@ const commandMap = {
2344
2408
  'SearchExtensions.create': create,
2345
2409
  'SearchExtensions.diff': diff,
2346
2410
  'SearchExtensions.focusFirst': wrapCommand(focusFirst),
2411
+ 'SearchExtensions.terminate': terminate,
2347
2412
  'SearchExtensions.focusIndex': wrapCommand(focusIndex),
2348
2413
  'SearchExtensions.focusLast': wrapCommand(focusLast),
2349
2414
  'SearchExtensions.focusNext': wrapCommand(focusNext),
@@ -2366,6 +2431,7 @@ const commandMap = {
2366
2431
  'SearchExtensions.handleScrollBarCaptureLost': wrapCommand(handleScrollBarCaptureLost),
2367
2432
  'SearchExtensions.handleScrollBarClick': wrapCommand(handleScrollBarClick),
2368
2433
  'SearchExtensions.handleScrollBarMove': wrapCommand(handleScrollBarMove),
2434
+ 'SearchExtensions.handleScrollBarThumbPointerMove': wrapCommand(handleScrollBarMove),
2369
2435
  'SearchExtensions.handleUninstall': wrapCommand(handleUninstall),
2370
2436
  'SearchExtensions.handleWheel': wrapCommand(handleWheel),
2371
2437
  'SearchExtensions.loadContent': loadContent,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/extension-search-view",
3
- "version": "2.8.0",
3
+ "version": "2.10.0",
4
4
  "description": "Extension Search View Worker",
5
5
  "license": "MIT",
6
6
  "author": "Lvce Editor",