@mnemonik/shared 7.154.2 → 7.155.2

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.
Files changed (52) hide show
  1. package/dist/ast/grammars.d.ts +4 -2
  2. package/dist/ast/grammars.d.ts.map +1 -1
  3. package/dist/ast/grammars.js +45 -3
  4. package/dist/ast/grammars.js.map +1 -1
  5. package/dist/codeScanner.d.ts +26 -329
  6. package/dist/codeScanner.d.ts.map +1 -1
  7. package/dist/codeScanner.js +65 -1141
  8. package/dist/codeScanner.js.map +1 -1
  9. package/dist/fileSelection.d.ts +451 -0
  10. package/dist/fileSelection.d.ts.map +1 -0
  11. package/dist/fileSelection.js +1256 -0
  12. package/dist/fileSelection.js.map +1 -0
  13. package/dist/hookTrace.d.ts +40 -0
  14. package/dist/hookTrace.d.ts.map +1 -1
  15. package/dist/hookTrace.js +126 -0
  16. package/dist/hookTrace.js.map +1 -1
  17. package/dist/index.d.ts +3 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/runtimeAssets.d.ts +12 -0
  22. package/dist/runtimeAssets.d.ts.map +1 -0
  23. package/dist/runtimeAssets.js +43 -0
  24. package/dist/runtimeAssets.js.map +1 -0
  25. package/dist/runtimeReader.d.ts +15 -2
  26. package/dist/runtimeReader.d.ts.map +1 -1
  27. package/dist/runtimeReader.js +110 -21
  28. package/dist/runtimeReader.js.map +1 -1
  29. package/dist/sourceRedaction.d.ts +45 -1
  30. package/dist/sourceRedaction.d.ts.map +1 -1
  31. package/dist/sourceRedaction.js +62 -22
  32. package/dist/sourceRedaction.js.map +1 -1
  33. package/dist/sourceRedactionPool.d.ts +198 -0
  34. package/dist/sourceRedactionPool.d.ts.map +1 -0
  35. package/dist/sourceRedactionPool.js +756 -0
  36. package/dist/sourceRedactionPool.js.map +1 -0
  37. package/dist/vueSource.d.ts +0 -2
  38. package/dist/vueSource.d.ts.map +1 -1
  39. package/dist/vueSource.js +8 -19
  40. package/dist/vueSource.js.map +1 -1
  41. package/package.json +6 -2
  42. package/src/ast/grammars.ts +52 -7
  43. package/src/codeScanner.ts +121 -1321
  44. package/src/fileSelection.ts +1440 -0
  45. package/src/hookTrace.ts +143 -0
  46. package/src/index.ts +31 -2
  47. package/src/runtimeAssets.ts +49 -0
  48. package/src/runtimeReader.ts +120 -28
  49. package/src/sourceRedaction.ts +85 -20
  50. package/src/sourceRedactionPool.ts +877 -0
  51. package/src/vueSource.ts +8 -23
  52. package/tests/runtimeVerify.test.ts +166 -0
@@ -26,6 +26,61 @@ export const versionName = (v) => {
26
26
  throw new RuntimeError('permission');
27
27
  return v;
28
28
  };
29
+ /**
30
+ * Filesystem operations one runtime verification keeps in flight. Each file
31
+ * costs a few round trips (lstat, open, read, close); awaited one at a time, a
32
+ * 2,000-file hook runtime took 6.6 s to verify (26 Oct 2026). Every check is
33
+ * still made, for every file.
34
+ */
35
+ export const VERIFY_CONCURRENCY = 16;
36
+ /** Runs `work` with at most `limit` calls in flight; nested calls must not share a limiter. */
37
+ function limiter(limit) {
38
+ let active = 0;
39
+ const waiting = [];
40
+ return async (work) => {
41
+ if (active >= limit)
42
+ await new Promise((release) => waiting.push(release));
43
+ active += 1;
44
+ try {
45
+ return await work();
46
+ }
47
+ finally {
48
+ active -= 1;
49
+ waiting.shift()?.();
50
+ }
51
+ };
52
+ }
53
+ /**
54
+ * A runtime file's bytes, read from the file that was opened: it must be a
55
+ * regular file (not followed through a link), this user's, with exactly the
56
+ * mode its manifest entry implies. POSIX only.
57
+ */
58
+ async function ownedFileBytes(path, mode) {
59
+ const fd = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW).catch((error) => {
60
+ // O_NOFOLLOW refuses a link with ELOOP: a link is not an owned file.
61
+ throw error.code === 'ELOOP'
62
+ ? new RuntimeError('permission')
63
+ : error;
64
+ });
65
+ try {
66
+ const stat = await fd.stat();
67
+ if (!stat.isFile() || stat.uid !== process.getuid?.() || (stat.mode & 0o777) !== mode)
68
+ throw new RuntimeError('permission');
69
+ return await fd.readFile();
70
+ }
71
+ finally {
72
+ await fd.close();
73
+ }
74
+ }
75
+ /**
76
+ * Waits for every promise, then throws the first rejection in order: nothing a
77
+ * failed verification started is still running when it reports.
78
+ */
79
+ async function settleAll(work) {
80
+ const failed = (await Promise.allSettled(work)).find((result) => result.status === 'rejected');
81
+ if (failed)
82
+ throw failed.reason;
83
+ }
29
84
  const statIdentity = (stat) => [stat.dev, stat.ino, stat.mode, stat.uid, stat.size, stat.mtimeMs, stat.ctimeMs].join(':');
30
85
  /** Only stdlib and the accepted bootstrap's signer adapter may load before verifyRuntime returns. */
31
86
  export class RuntimeReader {
@@ -157,12 +212,25 @@ export class RuntimeReader {
157
212
  : 'acl_unavailable');
158
213
  }
159
214
  }
160
- async inspect(path, directory = false, allowMissing = false, replacing = false) {
215
+ /**
216
+ * `proven` (one verification's own set, POSIX only) holds directories this
217
+ * verification has already inspected in full: their components are not
218
+ * inspected again for every file beneath them, and directories proven here
219
+ * are added to it.
220
+ */
221
+ async inspect(path, directory = false, allowMissing = false, replacing = false, proven) {
161
222
  const absolute = this.guardedPath(path);
162
223
  const windowsPaths = [];
163
- let part = parse(absolute).root;
164
- for (const name of absolute.slice(part.length).split(sep)) {
224
+ const remembered = process.platform === 'win32' ? undefined : proven;
225
+ const checkedDirectories = [];
226
+ // Directories proven by this verification are skipped; when the parent is
227
+ // proven, so is every directory above it.
228
+ const parent = dirname(absolute);
229
+ let part = remembered?.has(parent) ? parent : parse(absolute).root;
230
+ for (const name of absolute.slice(part.length).split(sep).filter(Boolean)) {
165
231
  part = join(part, name);
232
+ if (part !== absolute && remembered?.has(part))
233
+ continue;
166
234
  const stat = await lstat(part).catch((e) => {
167
235
  if (allowMissing && missing(e))
168
236
  return null;
@@ -212,7 +280,12 @@ export class RuntimeReader {
212
280
  }
213
281
  else if (stat.uid !== process.getuid?.() || (stat.mode & 0o077) !== 0)
214
282
  throw new RuntimeError('permission');
283
+ if (stat.isDirectory())
284
+ checkedDirectories.push(part);
215
285
  }
286
+ if (remembered)
287
+ for (const checked of checkedDirectories)
288
+ remembered.add(checked);
216
289
  await this.audit(windowsPaths);
217
290
  for (const part of windowsPaths) {
218
291
  const verdict = this.windowsAudit.get(part)?.verdict;
@@ -235,8 +308,8 @@ export class RuntimeReader {
235
308
  this.windowsAudit.delete(absolute);
236
309
  this.windowsStats.delete(absolute);
237
310
  }
238
- async bytes(path) {
239
- await this.inspect(path);
311
+ async bytes(path, proven) {
312
+ await this.inspect(path, false, false, false, proven);
240
313
  const fd = await open(path, constants.O_RDONLY | (process.platform === 'win32' ? 0 : constants.O_NOFOLLOW));
241
314
  try {
242
315
  return await fd.readFile();
@@ -327,42 +400,58 @@ export class RuntimeReader {
327
400
  throw new RuntimeError('unsigned');
328
401
  if (process.platform === 'win32')
329
402
  await this.audit(Object.keys(m.files).map((name) => join(directory, safePath(name))));
403
+ // Every directory and file is inspected (type, owner, private mode) and
404
+ // every file is read and hashed, as before; up to VERIFY_CONCURRENCY at a
405
+ // time, and each directory's own components only once.
330
406
  const actual = [];
407
+ const proven = new Set();
408
+ // Windows keeps one at a time: its ACL audit shares caches across calls.
409
+ const limit = limiter(process.platform === 'win32' ? 1 : VERIFY_CONCURRENCY);
331
410
  const walk = async (dir, prefix = '') => {
332
- await this.inspect(dir, true);
333
- for (const name of await readdir(dir)) {
334
- const key = prefix + name;
335
- if (!prefix && name === 'manifest.json')
336
- continue;
337
- const path = join(dir, name);
338
- if ((await lstat(path)).isDirectory())
411
+ const entries = await limit(async () => {
412
+ await this.inspect(dir, true, false, false, proven);
413
+ return readdir(dir, { withFileTypes: true });
414
+ });
415
+ await settleAll(entries.map(async (entry) => {
416
+ const key = prefix + entry.name;
417
+ if (!prefix && entry.name === 'manifest.json')
418
+ return;
419
+ const path = join(dir, entry.name);
420
+ if (entry.isDirectory())
339
421
  await walk(path, key + '/');
340
422
  else {
341
- await this.inspect(path);
423
+ // POSIX: a link or anything else that is not a regular file is
424
+ // refused here, and every listed file's type, owner and exact mode
425
+ // are checked on the file itself when it is read below. Windows
426
+ // inspects each file for its ACL audit.
427
+ if (process.platform === 'win32')
428
+ await limit(() => this.inspect(path, false, false, false, proven));
429
+ else if (!entry.isFile())
430
+ throw new RuntimeError('permission');
342
431
  actual.push(key);
343
432
  }
344
- }
433
+ }));
345
434
  };
346
435
  await walk(directory);
347
436
  if (actual.sort().join('\n') !== Object.keys(m.files).sort().join('\n'))
348
437
  throw new RuntimeError('digest_mismatch');
349
- let total = 0;
350
- for (const [name, expected] of Object.entries(m.files)) {
438
+ for (const expected of Object.values(m.files))
351
439
  if (!expected ||
352
440
  !/^[a-f0-9]{64}$/.test(expected.sha256) ||
353
441
  !Number.isSafeInteger(expected.size) ||
354
442
  expected.size < 0 ||
355
443
  typeof expected.executable !== 'boolean')
356
444
  throw new RuntimeError('digest_mismatch');
445
+ let total = 0;
446
+ await settleAll(Object.entries(m.files).map(([name, expected]) => limit(async () => {
357
447
  const path = join(directory, safePath(name));
358
- const contents = await this.bytes(path);
448
+ const contents = process.platform === 'win32'
449
+ ? await this.bytes(path, proven)
450
+ : await ownedFileBytes(path, expected.executable ? 0o700 : 0o600);
359
451
  if (hash(contents) !== expected.sha256 || contents.length !== expected.size)
360
452
  throw new RuntimeError('digest_mismatch');
361
- if (process.platform !== 'win32' &&
362
- ((await lstat(path)).mode & 0o777) !== (expected.executable ? 0o700 : 0o600))
363
- throw new RuntimeError('permission');
364
453
  total += contents.length;
365
- }
454
+ })));
366
455
  if (total !== m.totalSize)
367
456
  throw new RuntimeError('digest_mismatch');
368
457
  if (m.signer) {
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeReader.js","sourceRoot":"","sources":["../src/runtimeReader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtimeReader.js","sourceRoot":"","sources":["../src/runtimeReader.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,47 @@
1
+ /**
2
+ * The largest source redacted with its syntax tree: the scanner's own file
3
+ * ceiling (MAX_SCANNED_FILE_BYTES, 10 MB; repeated here because codeScanner.ts
4
+ * imports this module). It was 2 MiB, sized from "the largest file in this
5
+ * repository", and above it every file took the text fallback: PowerShell,
6
+ * CMake, Groovy, Nix, Terraform and the bundled languages were stamped
7
+ * "source-fidelity-unavailable", so connected code refused every such file
8
+ * over 2 MiB, and other languages could keep structural [REDACTED] the
9
+ * extractors refuse (streams F1/F2, 25 October 2026). Memory for a large
10
+ * parse is bounded by running it in a child process sized from the file
11
+ * (installSourceRedactor below; sourceRedactionPool.ts), not by refusing it.
12
+ */
13
+ export declare const MAX_SOURCE_REDACTION_BYTES: number;
14
+ /**
15
+ * Where a process sends source it should not parse in its own memory: the
16
+ * server sends Swift and every file of a megabyte or more to a Liftoff-only
17
+ * child sized from the file; the scanner sends large files to its own
18
+ * child. Unset (tests, small tools), everything is redacted in process.
19
+ */
20
+ export interface SourceRedactionOptions {
21
+ /** 'interactive' when an agent is waiting on this file (file_push). */
22
+ priority?: 'interactive' | 'background';
23
+ }
24
+ export interface SourceRedactor {
25
+ routes(filePath: string, bytes: number): boolean;
26
+ redact(text: string, filePath: string, options?: SourceRedactionOptions): Promise<string>;
27
+ }
28
+ export declare function installSourceRedactor(redactor: SourceRedactor | null): void;
1
29
  /** Source syntax stays executable; unsupported or incomplete input uses the conservative scrubber. */
2
- export declare function scrubSourceSecrets(text: string, filePath: string): Promise<string>;
30
+ export declare function scrubSourceSecrets(text: string, filePath: string, options?: SourceRedactionOptions): Promise<string>;
31
+ /** The redaction itself, in this process. The out-of-process worker calls this. */
32
+ export declare function scrubSourceSecretsInProcess(text: string, filePath: string): Promise<string>;
33
+ /** Sanitize parser-owned payload spans; no SFC boundary is inferred from text matching. */
34
+ /**
35
+ * Apply replacement spans to `text` in one pass, or null when two overlap
36
+ * (or a span is malformed).
37
+ * The result equals applying them one at a time from the last start to the
38
+ * first (spans that start together: the one added later lands first), which
39
+ * is what the Vue scrubber did with a slice-and-concatenate per edit; that
40
+ * copied the whole file for every edit, about 40 s for a 1 MB component.
41
+ */
42
+ export declare function applySpanEdits(text: string, edits: ReadonlyArray<{
43
+ start: number;
44
+ end: number;
45
+ clean: string;
46
+ }>): string | null;
3
47
  //# sourceMappingURL=sourceRedaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sourceRedaction.d.ts","sourceRoot":"","sources":["../src/sourceRedaction.ts"],"names":[],"mappings":"AAiBA,sGAAsG;AACtG,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuLxF"}
1
+ {"version":3,"file":"sourceRedaction.d.ts","sourceRoot":"","sources":["../src/sourceRedaction.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,QAAmB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC;CACzC;AACD,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACjD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3F;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAE3E;AAED,sGAAsG;AACtG,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED,mFAAmF;AACnF,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuLjG;AAimDD,2FAA2F;AAC3F;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAClE,MAAM,GAAG,IAAI,CAaf"}
@@ -2,14 +2,36 @@ import { parseVueSource, walkVueTemplate, VUE_FIDELITY_MARKER } from './vueSourc
2
2
  import { basename, extname } from 'node:path';
3
3
  import { Parser } from 'web-tree-sitter';
4
4
  import { loadGrammar, objcppSyntaxIssue } from './ast/grammars.js';
5
- import { MAX_AST_PARSE_BYTES } from './ast/astChunker.js';
6
5
  import { commandLineCredentialRanges, redactCredentials } from './redactCredentials.js';
7
6
  import { redactHighEntropyTokens, redactSecretValue, scrubSecrets, SECRET_LABEL_RE, } from './secretPatterns.js';
8
7
  function scrubPayload(text) {
9
8
  return redactCredentials(scrubSecrets(text), { commandLineOnly: true }).text;
10
9
  }
10
+ /**
11
+ * The largest source redacted with its syntax tree: the scanner's own file
12
+ * ceiling (MAX_SCANNED_FILE_BYTES, 10 MB; repeated here because codeScanner.ts
13
+ * imports this module). It was 2 MiB, sized from "the largest file in this
14
+ * repository", and above it every file took the text fallback: PowerShell,
15
+ * CMake, Groovy, Nix, Terraform and the bundled languages were stamped
16
+ * "source-fidelity-unavailable", so connected code refused every such file
17
+ * over 2 MiB, and other languages could keep structural [REDACTED] the
18
+ * extractors refuse (streams F1/F2, 25 October 2026). Memory for a large
19
+ * parse is bounded by running it in a child process sized from the file
20
+ * (installSourceRedactor below; sourceRedactionPool.ts), not by refusing it.
21
+ */
22
+ export const MAX_SOURCE_REDACTION_BYTES = 10 * 1024 * 1024;
23
+ let outOfProcess = null;
24
+ export function installSourceRedactor(redactor) {
25
+ outOfProcess = redactor;
26
+ }
11
27
  /** Source syntax stays executable; unsupported or incomplete input uses the conservative scrubber. */
12
- export async function scrubSourceSecrets(text, filePath) {
28
+ export async function scrubSourceSecrets(text, filePath, options) {
29
+ if (outOfProcess && text && outOfProcess.routes(filePath, Buffer.byteLength(text, 'utf8')))
30
+ return outOfProcess.redact(text, filePath, options);
31
+ return scrubSourceSecretsInProcess(text, filePath);
32
+ }
33
+ /** The redaction itself, in this process. The out-of-process worker calls this. */
34
+ export async function scrubSourceSecretsInProcess(text, filePath) {
13
35
  const extension = extname(filePath).toLowerCase();
14
36
  if (extension === '.vue')
15
37
  return scrubVueSource(text);
@@ -127,7 +149,7 @@ export async function scrubSourceSecrets(text, filePath) {
127
149
  ? marker + clean
128
150
  : clean;
129
151
  };
130
- if (!text || !language || Buffer.byteLength(text, 'utf8') > MAX_AST_PARSE_BYTES) {
152
+ if (!text || !language || Buffer.byteLength(text, 'utf8') > MAX_SOURCE_REDACTION_BYTES) {
131
153
  return fallback();
132
154
  }
133
155
  let parser;
@@ -1654,6 +1676,29 @@ function redactNode(node, sensitive = false) {
1654
1676
  return result + original.slice(offset - node.startIndex);
1655
1677
  }
1656
1678
  /** Sanitize parser-owned payload spans; no SFC boundary is inferred from text matching. */
1679
+ /**
1680
+ * Apply replacement spans to `text` in one pass, or null when two overlap
1681
+ * (or a span is malformed).
1682
+ * The result equals applying them one at a time from the last start to the
1683
+ * first (spans that start together: the one added later lands first), which
1684
+ * is what the Vue scrubber did with a slice-and-concatenate per edit; that
1685
+ * copied the whole file for every edit, about 40 s for a 1 MB component.
1686
+ */
1687
+ export function applySpanEdits(text, edits) {
1688
+ // Stable sort, then reversed: ascending start, and among equal starts the
1689
+ // later-added edit first, exactly as the one-at-a-time order placed them.
1690
+ const ordered = [...edits].sort((a, b) => b.start - a.start).reverse();
1691
+ const pieces = [];
1692
+ let offset = 0;
1693
+ for (const e of ordered) {
1694
+ if (e.start < offset || e.end < e.start || e.end > text.length)
1695
+ return null;
1696
+ pieces.push(text.slice(offset, e.start), e.clean);
1697
+ offset = e.end;
1698
+ }
1699
+ pieces.push(text.slice(offset));
1700
+ return pieces.join('');
1701
+ }
1657
1702
  async function scrubVueSource(text) {
1658
1703
  if (!text)
1659
1704
  return text;
@@ -1770,15 +1815,9 @@ async function scrubVueSource(text) {
1770
1815
  if (cleanTail !== tail)
1771
1816
  faithful = false;
1772
1817
  edit(gapStart, text.length, cleanTail);
1773
- edits.sort((a, b) => b.start - a.start);
1774
- let clean = text;
1775
- let boundary = text.length;
1776
- for (const e of edits) {
1777
- if (e.end > boundary)
1778
- return fallback();
1779
- clean = clean.slice(0, e.start) + e.clean + clean.slice(e.end);
1780
- boundary = e.start;
1781
- }
1818
+ const clean = applySpanEdits(text, edits);
1819
+ if (clean === null)
1820
+ return fallback();
1782
1821
  if ('reason' in (await parseVueSource(clean)))
1783
1822
  faithful = false;
1784
1823
  return faithful || clean.startsWith(VUE_FIDELITY_MARKER) ? clean : VUE_FIDELITY_MARKER + clean;
@@ -1798,31 +1837,35 @@ async function scrubSvelteSource(text) {
1798
1837
  return text;
1799
1838
  if (text.includes('mnemonik:svelte-source-fidelity-unavailable'))
1800
1839
  return fallback();
1801
- if (Buffer.byteLength(text, 'utf8') > MAX_AST_PARSE_BYTES)
1840
+ if (Buffer.byteLength(text, 'utf8') > MAX_SOURCE_REDACTION_BYTES)
1802
1841
  return fallback();
1803
1842
  let parser;
1804
1843
  try {
1805
- const deadline = performance.now() + 4_000;
1844
+ // No clock and no node count decide this file: both refused large
1845
+ // components outright (a 4 s deadline and 200,000 nodes). Memory is
1846
+ // bounded by the process the parse runs in (installSourceRedactor).
1806
1847
  const { parse } = await import('svelte/compiler');
1807
1848
  const ast = parse(text, { modern: true });
1808
1849
  const edits = [];
1809
1850
  let faithful = true;
1810
- parser = new Parser();
1851
+ // Grammars first: loading one initializes tree-sitter, and a Parser
1852
+ // constructed before that throws. In a fresh process (a redaction child,
1853
+ // or a scanner whose first file is a component) that made every Svelte
1854
+ // file take the unfaithful fallback.
1811
1855
  const js = await loadGrammar('javascript');
1812
1856
  const ts = await loadGrammar('typescript');
1813
1857
  if ('unavailable' in js || 'unavailable' in ts)
1814
1858
  return fallback();
1859
+ parser = new Parser();
1815
1860
  parser.setLanguage(js.ok.language);
1816
1861
  const activeParser = parser;
1817
1862
  const syntax = (source, expression = false, sensitive = false) => {
1818
1863
  const prefix = expression ? `const ${sensitive ? 'password' : '__mnemonik_svelte'} = (` : '';
1819
1864
  const suffix = expression ? '\n);' : '';
1820
1865
  const full = prefix + source + suffix;
1821
- const tree = activeParser.parse(full, null, {
1822
- progressCallback: () => performance.now() > deadline,
1823
- });
1866
+ const tree = activeParser.parse(full);
1824
1867
  try {
1825
- if (!tree || tree.rootNode.hasError || tree.rootNode.descendantCount > 200_000) {
1868
+ if (!tree || tree.rootNode.hasError) {
1826
1869
  faithful = false;
1827
1870
  return sensitive ? literalPayload(source, true) : scrubPayload(source);
1828
1871
  }
@@ -1866,10 +1909,7 @@ async function scrubSvelteSource(text) {
1866
1909
  const pending = [
1867
1910
  { value: ast.fragment, sensitive: false },
1868
1911
  ];
1869
- let count = 0;
1870
1912
  while (pending.length) {
1871
- if (++count > 200_000 || performance.now() > deadline)
1872
- return fallback();
1873
1913
  const entry = pending.pop();
1874
1914
  if (!entry || !entry.value || typeof entry.value !== 'object')
1875
1915
  continue;