cspell-lib 9.8.0 → 10.0.1

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.
@@ -2,8 +2,7 @@
2
2
  * Handles loading of `.pnp.js` and `.pnp.js` files.
3
3
  */
4
4
  import { fileURLToPath } from 'node:url';
5
- import clearModule from 'clear-module';
6
- import importFresh from 'import-fresh';
5
+ import createImportFresh from 'import-fresh';
7
6
  import { findUp } from '../../util/findUp.js';
8
7
  import { toFileUrl } from '../../util/url.js';
9
8
  import { UnsupportedPnpFile } from './ImportError.js';
@@ -11,7 +10,7 @@ const defaultPnpFiles = ['.pnp.cjs', '.pnp.js'];
11
10
  const supportedSchemas = new Set(['file:']);
12
11
  const cachedRequests = new Map();
13
12
  let lock = undefined;
14
- const cachedPnpImportsSync = new Map();
13
+ const cachedPnpImports = new Map();
15
14
  const cachedRequestsSync = new Map();
16
15
  export class PnpLoader {
17
16
  pnpFiles;
@@ -59,28 +58,29 @@ export class PnpLoader {
59
58
  export function pnpLoader(pnpFiles) {
60
59
  return new PnpLoader(pnpFiles);
61
60
  }
62
- /**
63
- * @param urlDirectory - directory to start at.
64
- */
65
61
  async function findPnpAndLoad(urlDirectory, pnpFiles) {
66
62
  const found = await findUp(pnpFiles, { cwd: fileURLToPath(urlDirectory) });
67
63
  return loadPnpIfNeeded(found);
68
64
  }
69
- function loadPnpIfNeeded(found) {
65
+ async function loadPnpIfNeeded(found) {
70
66
  if (!found)
71
67
  return undefined;
72
- const c = cachedPnpImportsSync.get(found);
73
- if (c || cachedPnpImportsSync.has(found))
74
- return c;
68
+ const cached = cachedPnpImports.get(found);
69
+ if (cached)
70
+ return cached;
75
71
  const r = loadPnp(found);
76
- cachedPnpImportsSync.set(found, r);
72
+ cachedPnpImports.set(found, r);
73
+ // If loading fails, remove from cache so subsequent calls can retry.
74
+ r.catch(() => cachedPnpImports.delete(found));
77
75
  return r;
78
76
  }
79
- function loadPnp(pnpFile) {
80
- const pnp = importFresh(pnpFile);
81
- if (pnp.setup) {
77
+ async function loadPnp(pnpFile) {
78
+ const pnpFileUrl = toFileUrl(pnpFile);
79
+ const importFresh = createImportFresh(pnpFileUrl);
80
+ const { default: pnp } = await importFresh(pnpFileUrl.href);
81
+ if (pnp?.setup) {
82
82
  pnp.setup();
83
- return toFileUrl(pnpFile);
83
+ return pnpFileUrl;
84
84
  }
85
85
  throw new UnsupportedPnpFile(`Unsupported pnp file: "${pnpFile}"`);
86
86
  }
@@ -94,11 +94,9 @@ export function clearPnPGlobalCache() {
94
94
  }
95
95
  async function _cleanCache() {
96
96
  await Promise.all([...cachedRequests.values()].map(rejectToUndefined));
97
- const modules = [...cachedPnpImportsSync.values()];
98
- modules.forEach((r) => r && clearModule.single(fileURLToPath(r)));
97
+ cachedPnpImports.clear();
99
98
  cachedRequests.clear();
100
99
  cachedRequestsSync.clear();
101
- cachedPnpImportsSync.clear();
102
100
  return undefined;
103
101
  }
104
102
  function rejectToUndefined(p) {
@@ -12,16 +12,18 @@ export class SubstitutionTransformer {
12
12
  if (!this.#trie)
13
13
  return text;
14
14
  const transformed = this.transformString(text.text);
15
+ const rawText = text.rawText ?? text.text;
15
16
  const result = {
16
17
  ...text,
17
18
  text: transformed.text,
18
19
  map: mergeSourceMaps(text.map, transformed.map),
20
+ rawText,
19
21
  };
20
22
  return result;
21
23
  }
22
24
  transformString(text) {
23
25
  if (!this.#trie) {
24
- return { text, range: [0, text.length] };
26
+ return { text, range: [0, text.length], rawText: text };
25
27
  }
26
28
  const map = [0, 0];
27
29
  let repText = '';
@@ -36,7 +38,7 @@ export class SubstitutionTransformer {
36
38
  lastEnd = edit.range[1];
37
39
  }
38
40
  if (lastEnd === 0) {
39
- return { text, range: [0, text.length] };
41
+ return { text, range: [0, text.length], rawText: text };
40
42
  }
41
43
  if (lastEnd < text.length) {
42
44
  repText += text.slice(lastEnd);
@@ -46,6 +48,7 @@ export class SubstitutionTransformer {
46
48
  text: repText,
47
49
  range: [0, text.length],
48
50
  map: mapOffsetPairsToSourceMap(map),
51
+ rawText: text,
49
52
  };
50
53
  return result;
51
54
  }
@@ -95,14 +95,15 @@ function genResult(text, issues, includeRanges) {
95
95
  const issue = issues[i];
96
96
  const endPos = issue.offset;
97
97
  const text = span.text.slice(0, endPos - span.startPos);
98
- const endPosError = issue.offset + issue.text.length;
98
+ const endPosError = issue.offset + (issue.length ?? issue.text.length);
99
+ const issueText = span.text.slice(endPos - span.startPos, endPosError - span.startPos);
99
100
  yield { ...span, text, endPos };
100
101
  yield {
101
102
  ...span,
102
103
  isError: true,
103
104
  startPos: issue.offset,
104
105
  endPos: endPosError,
105
- text: issue.text,
106
+ text: issueText,
106
107
  };
107
108
  span.text = span.text.slice(endPosError - span.startPos);
108
109
  span.startPos = endPosError;
@@ -366,7 +366,15 @@ export function textValidatorFactory(dict, options) {
366
366
  const { text, offset, isFlagged, isFound, suggestionsEx, hasPreferredSuggestions, hasSimpleSuggestions } = vr;
367
367
  const r = mapRangeBackToOriginalPos([offset, offset + text.length], map);
368
368
  const range = [r[0] + srcOffset, r[1] + srcOffset];
369
- return { text, range, isFlagged, isFound, suggestionsEx, hasPreferredSuggestions, hasSimpleSuggestions };
369
+ return {
370
+ text,
371
+ range,
372
+ isFlagged,
373
+ isFound,
374
+ suggestionsEx,
375
+ hasPreferredSuggestions,
376
+ hasSimpleSuggestions,
377
+ };
370
378
  }
371
379
  return [...lineValidatorFn(lineSegment)].map(mapBackToOriginSimple);
372
380
  }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public",
5
5
  "provenance": true
6
6
  },
7
- "version": "9.8.0",
7
+ "version": "10.0.1",
8
8
  "description": "A library of useful functions used across various cspell tools.",
9
9
  "type": "module",
10
10
  "sideEffects": false,
@@ -75,36 +75,35 @@
75
75
  },
76
76
  "homepage": "https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell-lib#readme",
77
77
  "dependencies": {
78
- "@cspell/cspell-bundled-dicts": "9.8.0",
79
- "@cspell/cspell-performance-monitor": "9.8.0",
80
- "@cspell/cspell-pipe": "9.8.0",
81
- "@cspell/cspell-resolver": "9.8.0",
82
- "@cspell/cspell-types": "9.8.0",
83
- "@cspell/dynamic-import": "9.8.0",
84
- "@cspell/filetypes": "9.8.0",
85
- "@cspell/rpc": "9.8.0",
86
- "@cspell/strong-weak-map": "9.8.0",
87
- "@cspell/url": "9.8.0",
88
- "clear-module": "^4.1.2",
89
- "cspell-config-lib": "9.8.0",
90
- "cspell-dictionary": "9.8.0",
91
- "cspell-glob": "9.8.0",
92
- "cspell-grammar": "9.8.0",
93
- "cspell-io": "9.8.0",
94
- "cspell-trie-lib": "9.8.0",
78
+ "@cspell/cspell-bundled-dicts": "10.0.1",
79
+ "@cspell/cspell-performance-monitor": "10.0.1",
80
+ "@cspell/cspell-pipe": "10.0.1",
81
+ "@cspell/cspell-resolver": "10.0.1",
82
+ "@cspell/cspell-types": "10.0.1",
83
+ "@cspell/dynamic-import": "10.0.1",
84
+ "@cspell/filetypes": "10.0.1",
85
+ "@cspell/rpc": "10.0.1",
86
+ "@cspell/strong-weak-map": "10.0.1",
87
+ "@cspell/url": "10.0.1",
88
+ "cspell-config-lib": "10.0.1",
89
+ "cspell-dictionary": "10.0.1",
90
+ "cspell-glob": "10.0.1",
91
+ "cspell-grammar": "10.0.1",
92
+ "cspell-io": "10.0.1",
93
+ "cspell-trie-lib": "10.0.1",
95
94
  "env-paths": "^4.0.0",
96
95
  "gensequence": "^8.0.8",
97
- "import-fresh": "^3.3.1",
96
+ "import-fresh": "^4.0.0",
98
97
  "resolve-from": "^5.0.0",
99
98
  "vscode-languageserver-textdocument": "^1.0.12",
100
99
  "vscode-uri": "^3.1.0",
101
100
  "xdg-basedir": "^5.1.0"
102
101
  },
103
102
  "engines": {
104
- "node": ">=20"
103
+ "node": ">=22.18.0"
105
104
  },
106
105
  "devDependencies": {
107
- "@cspell/cspell-tools": "9.8.0",
106
+ "@cspell/cspell-tools": "10.0.1",
108
107
  "@cspell/dict-cpp": "^7.0.2",
109
108
  "@cspell/dict-csharp": "^4.0.8",
110
109
  "@cspell/dict-css": "^4.1.1",
@@ -116,12 +115,12 @@
116
115
  "@cspell/dict-python": "^4.2.26",
117
116
  "@cspell/dictionary-bundler-plugin": "",
118
117
  "@types/configstore": "^6.0.2",
119
- "comment-json": "^4.6.2",
118
+ "comment-json": "^5.0.0",
120
119
  "configstore": "^8.0.0",
121
120
  "cspell-dict-nl-nl": "^1.1.2",
122
121
  "leaked-handles": "^5.2.0",
123
- "lorem-ipsum": "^2.0.8",
122
+ "lorem-ipsum": "^2.0.10",
124
123
  "perf-insight": "^2.0.1"
125
124
  },
126
- "gitHead": "c822013ce676dffb5fa5544567c25a3ae666718f"
125
+ "gitHead": "0f43abf29e5da0ecbcb08214055cdc1e3267c3ea"
127
126
  }