@marko/language-server 0.12.10 → 0.12.11

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/index.js CHANGED
@@ -843,7 +843,7 @@ function AttrName({
843
843
  }
844
844
 
845
845
  // src/service/marko/complete/AttrValue.ts
846
- var import_path4 = __toESM(require("path"));
846
+ var import_path3 = __toESM(require("path"));
847
847
  var import_vscode_languageserver4 = require("vscode-languageserver");
848
848
 
849
849
  // src/service/marko/util/is-document-link-attr.ts
@@ -872,20 +872,20 @@ function isDocumentLinkAttr(doc, tag, attr) {
872
872
  }
873
873
 
874
874
  // src/utils/file-system.ts
875
- var import_path3 = __toESM(require("path"));
876
875
  var import_promises = __toESM(require("fs/promises"));
877
876
  var import_vscode_css_languageservice = require("vscode-css-languageservice");
877
+ var import_url = require("url");
878
878
  var file_system_default = {
879
879
  stat,
880
880
  readDirectory
881
881
  };
882
- async function stat(fileName) {
883
- const stat2 = await import_promises.default.stat(fileName).catch(() => null);
882
+ async function stat(uri) {
884
883
  let type = import_vscode_css_languageservice.FileType.Unknown;
885
- let ctime = 0;
886
- let mtime = 0;
887
- let size = 0;
888
- if (stat2) {
884
+ let ctime = -1;
885
+ let mtime = -1;
886
+ let size = -1;
887
+ try {
888
+ const stat2 = await import_promises.default.stat((0, import_url.fileURLToPath)(uri));
889
889
  if (stat2.isDirectory())
890
890
  type = import_vscode_css_languageservice.FileType.Directory;
891
891
  else if (stat2.isFile())
@@ -893,6 +893,7 @@ async function stat(fileName) {
893
893
  ctime = stat2.ctimeMs;
894
894
  mtime = stat2.mtimeMs;
895
895
  size = stat2.size;
896
+ } catch {
896
897
  }
897
898
  return {
898
899
  type,
@@ -901,20 +902,22 @@ async function stat(fileName) {
901
902
  size
902
903
  };
903
904
  }
904
- async function readDirectory(dir) {
905
- return (await Promise.all((await import_promises.default.readdir(dir).catch(() => [])).map(async (entry) => [entry, (await stat(import_path3.default.join(dir, entry))).type]))).filter(([, type]) => type !== import_vscode_css_languageservice.FileType.Unknown);
905
+ async function readDirectory(uri) {
906
+ try {
907
+ const entries = await import_promises.default.readdir((0, import_url.fileURLToPath)(uri));
908
+ const base = uri.at(-1) === "/" ? uri : `${uri}/`;
909
+ return (await Promise.all(entries.map(async (entry) => [entry, (await stat(new URL(entry, base).toString())).type]))).filter(([, type]) => type !== import_vscode_css_languageservice.FileType.Unknown);
910
+ } catch {
911
+ return [];
912
+ }
906
913
  }
907
914
 
908
915
  // src/utils/resolve-url.ts
909
916
  function resolveUrl(to, base) {
910
917
  try {
911
- const baseUrl = new URL(base, "file://");
912
- const resolved = new URL(to, baseUrl);
913
- const { origin, protocol } = baseUrl;
914
- if (resolved.origin === origin && resolved.protocol === protocol) {
915
- return resolved.pathname + resolved.search + resolved.hash;
916
- }
917
- return resolved.toString();
918
+ const url = new URL(to, base);
919
+ if (url.protocol === "file:")
920
+ return url.toString();
918
921
  } catch {
919
922
  return void 0;
920
923
  }
@@ -939,28 +942,29 @@ async function AttrValue({
939
942
  start,
940
943
  end
941
944
  });
942
- let segmentStart = rawValue.lastIndexOf("/", relativeOffset);
945
+ const segmentStart = rawValue.lastIndexOf("/", relativeOffset);
943
946
  if (segmentStart === -1)
944
- segmentStart = relativeOffset;
945
- const resolveRequest = rawValue.slice(0, segmentStart) || ".";
946
- const dir = resolveUrl(resolveRequest, document.uri);
947
- if ((dir == null ? void 0 : dir[0]) === "/") {
947
+ return;
948
+ const req = rawValue.slice(0, segmentStart);
949
+ const uri = resolveUrl(req, document.uri);
950
+ if (uri) {
948
951
  const result = [];
949
- const curDir = resolveRequest === "." ? dir : resolveUrl(".", document.uri);
950
- const curFile = curDir === dir ? import_path4.default.basename(document.uri) : void 0;
952
+ const curFile = req === "." ? import_path3.default.basename(document.uri) : void 0;
951
953
  const replaceRange = import_vscode_languageserver4.Range.create(document.positionAt(start + segmentStart + 1), document.positionAt(start + rawValue.length));
952
- for (const [entry, type] of await file_system_default.readDirectory(dir)) {
954
+ for (const [entry, type] of await file_system_default.readDirectory(uri)) {
953
955
  if (entry[0] !== "." && entry !== curFile) {
954
- const isDir = type === import_vscode_css_languageservice.FileType.Directory;
955
- const label = isDir ? `${entry}/` : entry;
956
- result.push({
957
- label,
958
- kind: isDir ? import_vscode_languageserver4.CompletionItemKind.Folder : import_vscode_languageserver4.CompletionItemKind.File,
959
- textEdit: import_vscode_languageserver4.TextEdit.replace(replaceRange, label),
960
- command: isDir ? {
956
+ result.push(type === import_vscode_css_languageservice.FileType.Directory ? {
957
+ label: `${entry}/`,
958
+ kind: import_vscode_languageserver4.CompletionItemKind.Folder,
959
+ textEdit: import_vscode_languageserver4.TextEdit.replace(replaceRange, `${entry}/`),
960
+ command: {
961
961
  title: "Suggest",
962
962
  command: "editor.action.triggerSuggest"
963
- } : void 0
963
+ }
964
+ } : {
965
+ label: entry,
966
+ kind: import_vscode_languageserver4.CompletionItemKind.File,
967
+ textEdit: import_vscode_languageserver4.TextEdit.replace(replaceRange, entry)
964
968
  });
965
969
  }
966
970
  }
@@ -1020,7 +1024,7 @@ var doValidate = (doc) => {
1020
1024
  };
1021
1025
 
1022
1026
  // src/service/marko/definition/OpenTagName.ts
1023
- var import_path5 = __toESM(require("path"));
1027
+ var import_path4 = __toESM(require("path"));
1024
1028
  var import_vscode_uri4 = require("vscode-uri");
1025
1029
  var import_vscode_languageserver8 = require("vscode-languageserver");
1026
1030
 
@@ -1081,7 +1085,7 @@ function OpenTagName2({
1081
1085
  return;
1082
1086
  }
1083
1087
  const tagEntryFile = tagDef.template || tagDef.renderer || tagDef.filePath;
1084
- if (!import_path5.default.isAbsolute(tagEntryFile)) {
1088
+ if (!import_path4.default.isAbsolute(tagEntryFile)) {
1085
1089
  return;
1086
1090
  }
1087
1091
  if (/\/marko(?:-tag)?\.json$/.test(tagEntryFile)) {
@@ -1509,15 +1513,13 @@ var StyleSheetService = {
1509
1513
  return result.length ? result : void 0;
1510
1514
  }
1511
1515
  },
1512
- findDocumentLinks(doc) {
1516
+ async findDocumentLinks(doc) {
1513
1517
  const infoByExt = getStyleSheetInfo(doc);
1514
1518
  const result = [];
1515
1519
  for (const ext in infoByExt) {
1516
1520
  const info = infoByExt[ext];
1517
1521
  const { service: service2, virtualDoc } = info;
1518
- for (const link of service2.findDocumentLinks(virtualDoc, info.parsed, {
1519
- resolveReference: resolveUrl
1520
- })) {
1522
+ for (const link of await service2.findDocumentLinks2(virtualDoc, info.parsed, { resolveReference: resolveUrl })) {
1521
1523
  const range = getSourceRange(doc, info, link.range);
1522
1524
  if (range) {
1523
1525
  result.push({