coc-vscode-loader 1.2.4 → 1.2.6

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/lib/index.js CHANGED
@@ -39,7 +39,7 @@ var require_package = __commonJS({
39
39
  "package.json"(exports2, module2) {
40
40
  module2.exports = {
41
41
  name: "coc-vscode-loader",
42
- version: "1.2.4",
42
+ version: "1.2.6",
43
43
  description: "Run VS Code extensions seamlessly in coc.nvim",
44
44
  main: "lib/index.js",
45
45
  keywords: [
@@ -60,8 +60,7 @@ var require_package = __commonJS({
60
60
  homepage: "https://www.npmjs.com/package/coc-vscode-loader",
61
61
  files: [
62
62
  "lib/",
63
- "converter/src/",
64
- "converter/package.json",
63
+ "converter/",
65
64
  "assets/"
66
65
  ],
67
66
  license: "MIT",
@@ -73,10 +72,14 @@ var require_package = __commonJS({
73
72
  build: "npm run bundle-converter && node esbuild.mjs",
74
73
  prepare: "npm run bundle-converter && node esbuild.mjs"
75
74
  },
75
+ dependencies: {
76
+ commander: "^15.0.0",
77
+ "ts-morph": "^28.0.0",
78
+ typescript: "^6.0.3"
79
+ },
76
80
  devDependencies: {
77
81
  "coc.nvim": "^0.0.83-next.18",
78
- esbuild: "^0.28.1",
79
- typescript: "^6.0.3"
82
+ esbuild: "^0.28.1"
80
83
  },
81
84
  activationEvents: [
82
85
  "onCommand:loader.open",
@@ -177,7 +180,7 @@ async function fetchRegistryJSON(url) {
177
180
  } catch {
178
181
  }
179
182
  return new Promise((resolve2, reject) => {
180
- (0, import_child_process.execFile)("curl", ["-sL", url], { encoding: "utf-8", maxBuffer: 5 * 1024 * 1024 }, (err, stdout) => {
183
+ (0, import_child_process.execFile)("curl", ["-sL", "--compressed", url], { encoding: "utf-8", maxBuffer: 20 * 1024 * 1024 }, (err, stdout) => {
181
184
  if (err) reject(new Error(`curl failed: ${err.message}`));
182
185
  else {
183
186
  try {
@@ -236,6 +239,7 @@ var os2 = __toESM(require("os"));
236
239
  function isInstalled(name) {
237
240
  return fs2.existsSync(path2.join(os2.homedir(), ".config", "coc", "extensions", "node_modules", `coc-${name}`));
238
241
  }
242
+ var PAGE_SIZE = 50;
239
243
  function createInitialState() {
240
244
  const packages = getAllPackages().map((info) => {
241
245
  const installed = isInstalled(info.name);
@@ -265,7 +269,7 @@ function createInitialState() {
265
269
  marked: false
266
270
  };
267
271
  });
268
- return { packages, searchQuery: "", showHelp: false, activePill: null, dirty: false, viewFilter: "all", sortBy: "default" };
272
+ return { packages, searchQuery: "", showHelp: false, activePill: null, dirty: false, viewFilter: "all", sortBy: "default", currentPage: 0 };
269
273
  }
270
274
  var StateManager = class {
271
275
  constructor(initial) {
@@ -336,21 +340,25 @@ var StateManager = class {
336
340
  setViewFilter(filter) {
337
341
  this.mutate((s) => {
338
342
  s.viewFilter = filter;
343
+ s.currentPage = 0;
339
344
  });
340
345
  }
341
346
  cycleViewFilter() {
342
347
  this.mutate((s) => {
343
348
  s.viewFilter = s.viewFilter === "all" ? "installed" : s.viewFilter === "installed" ? "not-installed" : "all";
349
+ s.currentPage = 0;
344
350
  });
345
351
  }
346
352
  setSortBy(sortBy) {
347
353
  this.mutate((s) => {
348
354
  s.sortBy = sortBy;
355
+ s.currentPage = 0;
349
356
  });
350
357
  }
351
358
  cycleSortBy() {
352
359
  this.mutate((s) => {
353
360
  s.sortBy = s.sortBy === "default" ? "name" : s.sortBy === "name" ? "status" : s.sortBy === "status" ? "type" : "default";
361
+ s.currentPage = 0;
354
362
  });
355
363
  }
356
364
  setStatusMessage(msg) {
@@ -371,6 +379,12 @@ var StateManager = class {
371
379
  setSearchQuery(query) {
372
380
  this.mutate((s) => {
373
381
  s.searchQuery = query;
382
+ s.currentPage = 0;
383
+ });
384
+ }
385
+ setPage(n) {
386
+ this.mutate((s) => {
387
+ s.currentPage = n;
374
388
  });
375
389
  }
376
390
  getFilteredPackages() {
@@ -1025,8 +1039,9 @@ var HELP_TEXT = [
1025
1039
  " x Toggle mark",
1026
1040
  " f Cycle filter: all \u2192 installed \u2192 not-installed",
1027
1041
  " s Cycle sort: default \u2192 name \u2192 status \u2192 type",
1028
- " gg Jump to first package",
1029
- " G Jump to last package",
1042
+ " [/] Previous/next page",
1043
+ " gg Jump to first page",
1044
+ " G Jump to last page",
1030
1045
  " <Enter> Toggle expand/collapse details",
1031
1046
  " / Search filter",
1032
1047
  " q Close window",
@@ -1065,10 +1080,14 @@ var TUI = class {
1065
1080
  x: "x",
1066
1081
  D: "D",
1067
1082
  gg: "gg",
1068
- G: "G"
1083
+ G: "G",
1084
+ "[": "pageup",
1085
+ "]": "pagedown"
1069
1086
  };
1070
1087
  this.rendering = false;
1071
1088
  this.pendingRender = false;
1089
+ this.lastPage = -1;
1090
+ this.scrollToFirst = false;
1072
1091
  this.state = state;
1073
1092
  }
1074
1093
  async open() {
@@ -1216,16 +1235,29 @@ var TUI = class {
1216
1235
  return;
1217
1236
  }
1218
1237
  if (id === "gg") {
1219
- const firstLine = Math.min(...this.pkgLineMap.keys());
1220
- if (isFinite(firstLine)) {
1221
- await import_coc2.workspace.nvim.call("nvim_win_set_cursor", [this.winid, [firstLine + 1, 0]]);
1222
- }
1238
+ this.state.setPage(0);
1239
+ this.scrollToFirst = true;
1223
1240
  return;
1224
1241
  }
1225
1242
  if (id === "G") {
1226
- const lastLine = Math.max(...this.pkgLineMap.keys());
1227
- if (isFinite(lastLine)) {
1228
- await import_coc2.workspace.nvim.call("nvim_win_set_cursor", [this.winid, [lastLine + 1, 0]]);
1243
+ const filtered = this.state.getFilteredPackages();
1244
+ const totalPages = Math.ceil(filtered.length / PAGE_SIZE) || 1;
1245
+ this.state.setPage(totalPages - 1);
1246
+ return;
1247
+ }
1248
+ if (id === "pagedown") {
1249
+ const filtered = this.state.getFilteredPackages();
1250
+ const totalPages = Math.ceil(filtered.length / PAGE_SIZE) || 1;
1251
+ const s2 = this.state.getState();
1252
+ if (s2.currentPage < totalPages - 1) {
1253
+ this.state.setPage(s2.currentPage + 1);
1254
+ }
1255
+ return;
1256
+ }
1257
+ if (id === "pageup") {
1258
+ const s2 = this.state.getState();
1259
+ if (s2.currentPage > 0) {
1260
+ this.state.setPage(s2.currentPage - 1);
1229
1261
  }
1230
1262
  return;
1231
1263
  }
@@ -1322,6 +1354,8 @@ var TUI = class {
1322
1354
  ["D", "D"],
1323
1355
  ["gg", "gg"],
1324
1356
  ["G", "G"],
1357
+ ["[", "pageup"],
1358
+ ["]", "pagedown"],
1325
1359
  ["<CR>", "cr"]
1326
1360
  ];
1327
1361
  for (const [vimKey, id] of entries) {
@@ -1375,6 +1409,15 @@ var TUI = class {
1375
1409
  }], true);
1376
1410
  }
1377
1411
  await nvim.resumeNotification();
1412
+ const shouldScroll = this.scrollToFirst || state.currentPage !== this.lastPage;
1413
+ this.scrollToFirst = false;
1414
+ this.lastPage = state.currentPage;
1415
+ if (!state.showHelp && shouldScroll) {
1416
+ const firstPkgLine = Math.min(...result.pkgLineMap.keys());
1417
+ if (isFinite(firstPkgLine)) {
1418
+ await nvim.call("nvim_win_set_cursor", [this.winid, [firstPkgLine + 1, 0]]);
1419
+ }
1420
+ }
1378
1421
  this.pkgLineMap = result.pkgLineMap;
1379
1422
  this.logLineSet = result.logLines;
1380
1423
  } finally {
@@ -1440,26 +1483,29 @@ var TUI = class {
1440
1483
  }
1441
1484
  buf.nl();
1442
1485
  buf.nl();
1443
- const installed = filtered.filter((e) => e.status !== "not-installed");
1444
- const available = filtered.filter((e) => e.status === "not-installed");
1445
- const section = (title, entries) => {
1446
- if (entries.length === 0) return;
1447
- buf.nl(`${title}`);
1448
- for (const e of entries) {
1449
- this.renderEntry(buf, pkgLineMap, logSet, e);
1450
- }
1451
- buf.nl();
1452
- buf.nl();
1453
- };
1454
- section(`Installed (${installed.length})`, installed);
1455
- section(`Available (${available.length})`, available);
1486
+ const totalPages = Math.ceil(filtered.length / PAGE_SIZE) || 1;
1487
+ const page = Math.min(state.currentPage, totalPages - 1);
1488
+ const start = page * PAGE_SIZE;
1489
+ const pageItems = filtered.slice(start, start + PAGE_SIZE);
1490
+ const end = Math.min(start + PAGE_SIZE, filtered.length);
1491
+ if (totalPages > 1) {
1492
+ buf.append(`Page ${page + 1}/${totalPages} \xB7 ${start + 1}\u2013${end} of ${filtered.length}`, "CocConverterTotal");
1493
+ } else {
1494
+ buf.append(`${filtered.length} packages`, "CocConverterTotal");
1495
+ }
1496
+ buf.nl();
1497
+ buf.nl();
1498
+ for (const e of pageItems) {
1499
+ this.renderEntry(buf, pkgLineMap, logSet, e);
1500
+ }
1456
1501
  if (filtered.length === 0 && state.searchQuery) {
1457
1502
  buf.nl("no matching packages");
1458
1503
  }
1459
1504
  buf.nl();
1460
1505
  buf.append(" " + "\u2500".repeat(50), "Comment");
1461
1506
  buf.nl();
1462
- buf.append(` ${filtered.length} packages \xB7 ${filterLabel} \xB7 ${sortLabel} order`, "Comment");
1507
+ const pageNav = totalPages > 1 ? ` [ prev ] next` : "";
1508
+ buf.append(` ${filtered.length} packages \xB7 ${filterLabel} \xB7 ${sortLabel}${pageNav}`, "Comment");
1463
1509
  const result = buf.render(2);
1464
1510
  return { lines: result.lines, pkgLineMap, logLines: logSet, highlights: result.highlights };
1465
1511
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coc-vscode-loader",
3
- "version": "1.2.4",
3
+ "version": "1.2.6",
4
4
  "description": "Run VS Code extensions seamlessly in coc.nvim",
5
5
  "main": "lib/index.js",
6
6
  "keywords": [
@@ -21,8 +21,7 @@
21
21
  "homepage": "https://www.npmjs.com/package/coc-vscode-loader",
22
22
  "files": [
23
23
  "lib/",
24
- "converter/src/",
25
- "converter/package.json",
24
+ "converter/",
26
25
  "assets/"
27
26
  ],
28
27
  "license": "MIT",
@@ -34,10 +33,14 @@
34
33
  "build": "npm run bundle-converter && node esbuild.mjs",
35
34
  "prepare": "npm run bundle-converter && node esbuild.mjs"
36
35
  },
36
+ "dependencies": {
37
+ "commander": "^15.0.0",
38
+ "ts-morph": "^28.0.0",
39
+ "typescript": "^6.0.3"
40
+ },
37
41
  "devDependencies": {
38
42
  "coc.nvim": "^0.0.83-next.18",
39
- "esbuild": "^0.28.1",
40
- "typescript": "^6.0.3"
43
+ "esbuild": "^0.28.1"
41
44
  },
42
45
  "activationEvents": [
43
46
  "onCommand:loader.open",