podlite 0.0.79 → 0.0.81

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 (112) hide show
  1. package/CHANGELOG.podlite +34 -0
  2. package/esm/cli.js +79 -11
  3. package/esm/cli.js.map +1 -1
  4. package/esm/lint/config.d.ts +2 -0
  5. package/esm/lint/config.js +46 -0
  6. package/esm/lint/config.js.map +1 -1
  7. package/esm/lint/grammar/lint.js +7 -4
  8. package/esm/lint/grammar/lint.js.map +1 -1
  9. package/esm/lint/grammar/scan.d.ts +1 -1
  10. package/esm/lint/grammar/scan.js +15 -2
  11. package/esm/lint/grammar/scan.js.map +1 -1
  12. package/esm/lint/index.d.ts +11 -1
  13. package/esm/lint/index.js +30 -18
  14. package/esm/lint/index.js.map +1 -1
  15. package/esm/lint/parallel.d.ts +4 -0
  16. package/esm/lint/parallel.js +57 -0
  17. package/esm/lint/parallel.js.map +1 -0
  18. package/esm/lint/rules/abbreviated-attrs.d.ts +4 -0
  19. package/esm/lint/rules/abbreviated-attrs.js +67 -0
  20. package/esm/lint/rules/abbreviated-attrs.js.map +1 -0
  21. package/esm/lint/rules/dead-definitions.d.ts +3 -0
  22. package/esm/lint/rules/dead-definitions.js +80 -0
  23. package/esm/lint/rules/dead-definitions.js.map +1 -0
  24. package/esm/lint/rules/index.js +6 -0
  25. package/esm/lint/rules/index.js.map +1 -1
  26. package/esm/lint/rules/link-file-resolves.d.ts +3 -0
  27. package/esm/lint/rules/link-file-resolves.js +58 -0
  28. package/esm/lint/rules/link-file-resolves.js.map +1 -0
  29. package/esm/lint/rules/link-not-empty.d.ts +3 -0
  30. package/esm/lint/rules/link-not-empty.js +15 -0
  31. package/esm/lint/rules/link-not-empty.js.map +1 -0
  32. package/esm/lint/rules/link-target-resolves.js +10 -28
  33. package/esm/lint/rules/link-target-resolves.js.map +1 -1
  34. package/esm/lint/rules/link-targets.d.ts +11 -0
  35. package/esm/lint/rules/link-targets.js +42 -0
  36. package/esm/lint/rules/link-targets.js.map +1 -0
  37. package/esm/lint/rules/markdown-in-pod.d.ts +4 -0
  38. package/esm/lint/rules/markdown-in-pod.js +67 -0
  39. package/esm/lint/rules/markdown-in-pod.js.map +1 -0
  40. package/esm/lint/rules/table-column-width.js +10 -6
  41. package/esm/lint/rules/table-column-width.js.map +1 -1
  42. package/esm/lint/rules/unclosed-markup-code.d.ts +4 -0
  43. package/esm/lint/rules/unclosed-markup-code.js +105 -0
  44. package/esm/lint/rules/unclosed-markup-code.js.map +1 -0
  45. package/esm/lint/types.d.ts +2 -0
  46. package/esm/lint/types.js +3 -1
  47. package/esm/lint/types.js.map +1 -1
  48. package/esm/lint/worker.d.ts +5 -0
  49. package/esm/lint/worker.js +15 -0
  50. package/esm/lint/worker.js.map +1 -0
  51. package/esm/query.js +4 -1
  52. package/esm/query.js.map +1 -1
  53. package/esm/resolve-includes.js +56 -7
  54. package/esm/resolve-includes.js.map +1 -1
  55. package/esm/version.d.ts +1 -1
  56. package/esm/version.js +1 -1
  57. package/lib/cli.js +78 -10
  58. package/lib/cli.js.map +1 -1
  59. package/lib/lint/config.d.ts +2 -0
  60. package/lib/lint/config.js +48 -0
  61. package/lib/lint/config.js.map +1 -1
  62. package/lib/lint/grammar/lint.js +7 -4
  63. package/lib/lint/grammar/lint.js.map +1 -1
  64. package/lib/lint/grammar/scan.d.ts +1 -1
  65. package/lib/lint/grammar/scan.js +14 -1
  66. package/lib/lint/grammar/scan.js.map +1 -1
  67. package/lib/lint/index.d.ts +11 -1
  68. package/lib/lint/index.js +69 -17
  69. package/lib/lint/index.js.map +1 -1
  70. package/lib/lint/parallel.d.ts +4 -0
  71. package/lib/lint/parallel.js +95 -0
  72. package/lib/lint/parallel.js.map +1 -0
  73. package/lib/lint/rules/abbreviated-attrs.d.ts +4 -0
  74. package/lib/lint/rules/abbreviated-attrs.js +71 -0
  75. package/lib/lint/rules/abbreviated-attrs.js.map +1 -0
  76. package/lib/lint/rules/dead-definitions.d.ts +3 -0
  77. package/lib/lint/rules/dead-definitions.js +83 -0
  78. package/lib/lint/rules/dead-definitions.js.map +1 -0
  79. package/lib/lint/rules/index.js +6 -0
  80. package/lib/lint/rules/index.js.map +1 -1
  81. package/lib/lint/rules/link-file-resolves.d.ts +3 -0
  82. package/lib/lint/rules/link-file-resolves.js +61 -0
  83. package/lib/lint/rules/link-file-resolves.js.map +1 -0
  84. package/lib/lint/rules/link-not-empty.d.ts +3 -0
  85. package/lib/lint/rules/link-not-empty.js +18 -0
  86. package/lib/lint/rules/link-not-empty.js.map +1 -0
  87. package/lib/lint/rules/link-target-resolves.js +9 -27
  88. package/lib/lint/rules/link-target-resolves.js.map +1 -1
  89. package/lib/lint/rules/link-targets.d.ts +11 -0
  90. package/lib/lint/rules/link-targets.js +47 -0
  91. package/lib/lint/rules/link-targets.js.map +1 -0
  92. package/lib/lint/rules/markdown-in-pod.d.ts +4 -0
  93. package/lib/lint/rules/markdown-in-pod.js +71 -0
  94. package/lib/lint/rules/markdown-in-pod.js.map +1 -0
  95. package/lib/lint/rules/table-column-width.js +9 -5
  96. package/lib/lint/rules/table-column-width.js.map +1 -1
  97. package/lib/lint/rules/unclosed-markup-code.d.ts +4 -0
  98. package/lib/lint/rules/unclosed-markup-code.js +109 -0
  99. package/lib/lint/rules/unclosed-markup-code.js.map +1 -0
  100. package/lib/lint/types.d.ts +2 -0
  101. package/lib/lint/types.js +4 -0
  102. package/lib/lint/types.js.map +1 -1
  103. package/lib/lint/worker.d.ts +5 -0
  104. package/lib/lint/worker.js +17 -0
  105. package/lib/lint/worker.js.map +1 -0
  106. package/lib/query.js +4 -1
  107. package/lib/query.js.map +1 -1
  108. package/lib/resolve-includes.js +55 -6
  109. package/lib/resolve-includes.js.map +1 -1
  110. package/lib/version.d.ts +1 -1
  111. package/lib/version.js +1 -1
  112. package/package.json +13 -7
@@ -0,0 +1,42 @@
1
+ // Content is a bare string before the tree is processed and a node after it.
2
+ const textOf = (value) => {
3
+ if (typeof value === 'string')
4
+ return value;
5
+ if (value && typeof value === 'object' && 'value' in value && typeof value.value === 'string')
6
+ return value.value;
7
+ return '';
8
+ };
9
+ // A link without display text carries the target in its content instead of meta.
10
+ const linkTarget = (node) => {
11
+ if (typeof node.meta === 'string')
12
+ return node.meta.trim();
13
+ const content = Array.isArray(node.content) ? node.content : [];
14
+ return textOf(content[0]).trim();
15
+ };
16
+ const isLink = (node) => node.type === 'fcode' && (node.name === 'L' || node.name === 'W');
17
+ // Inline nodes carry no location, so the nearest enclosing block supplies one.
18
+ export const collectLinks = (node, at) => {
19
+ if (Array.isArray(node))
20
+ return node.flatMap(child => collectLinks(child, at));
21
+ if (!node || typeof node !== 'object')
22
+ return [];
23
+ const n = node;
24
+ const here = n.location || at;
25
+ const found = isLink(n) ? [{ target: linkTarget(n), at: here }] : [];
26
+ return [...found, ...collectLinks(n.content, here)];
27
+ };
28
+ const SCHEME = /^([a-zA-Z][a-zA-Z0-9+.-]*):(.*)$/;
29
+ // A single letter before the colon is a Windows drive, but only where something
30
+ // else says Windows: a separator, or a backslash further along. Without one,
31
+ // `a:b` is a scheme and reading it as a path would warn about a target that is
32
+ // not on this disk at all.
33
+ const DRIVE = /^[a-zA-Z]:([\\/]|[^\\]*\\)/;
34
+ // The specification separates the internal address from the external one with a
35
+ // `#`, so what is left of it is the part a filesystem can answer for.
36
+ export const readAddress = (target) => {
37
+ const matched = DRIVE.test(target) ? null : SCHEME.exec(target);
38
+ const scheme = matched ? matched[1].toLowerCase() : null;
39
+ const rest = matched ? matched[2] : target;
40
+ return { scheme, path: rest.split('#')[0].split('?')[0] };
41
+ };
42
+ //# sourceMappingURL=link-targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-targets.js","sourceRoot":"","sources":["../../../src/lint/rules/link-targets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Violation, SourceRule } from '../types';
2
+ export declare const MARKDOWN_IN_POD_RULE_ID = "markdown-in-pod";
3
+ export declare const markdownInPodRule: SourceRule;
4
+ export declare function scanMarkdownInPod(content: string): Violation[];
@@ -0,0 +1,67 @@
1
+ import { isVerbatimBlock } from '@podlite/schema';
2
+ export const MARKDOWN_IN_POD_RULE_ID = 'markdown-in-pod';
3
+ export const markdownInPodRule = {
4
+ id: MARKDOWN_IN_POD_RULE_ID,
5
+ severity: 'warning',
6
+ };
7
+ const FOREIGN = [
8
+ { test: /^\s*#{1,6}\s+\S/, says: 'a heading written with hashes is text here; write =head1 and its levels' },
9
+ {
10
+ test: /^\s*\|?[\s:|-]*-[\s:|-]*\|[\s:|-]*$/,
11
+ says: 'a row of bars and dashes is text here; a table is written as =begin table with its own separator',
12
+ },
13
+ { test: /\*\*[^*\s](?:[^*]*[^*\s])?\*\*/, says: 'a pair of asterisks is text here; bold is written as B<>' },
14
+ ];
15
+ // Talk about Markdown is legal: a line whose construct sits inside an inline
16
+ // code span is showing the markup, not using it.
17
+ const insideCode = (line) => /C<[^>]*>/.test(line) || /`[^`]+`/.test(line);
18
+ export function scanMarkdownInPod(content) {
19
+ const lines = content.split(/\r?\n/);
20
+ const open = [];
21
+ const violations = [];
22
+ let abbreviatedTable = false;
23
+ for (let i = 0; i < lines.length; i++) {
24
+ const line = lines[i];
25
+ const end = line.match(/^\s*=end\s+([\w-]+)/);
26
+ if (end) {
27
+ open.pop();
28
+ continue;
29
+ }
30
+ const begin = line.match(/^\s*=begin\s+([\w-]+)/);
31
+ if (begin) {
32
+ open.push(begin[1]);
33
+ abbreviatedTable = false;
34
+ continue;
35
+ }
36
+ // a dash separator belongs to a table written the short way too, and that
37
+ // block runs to the first blank line
38
+ if (/^\s*=(?:for\s+)?table\b/.test(line)) {
39
+ abbreviatedTable = true;
40
+ continue;
41
+ }
42
+ if (abbreviatedTable && line.trim() === '')
43
+ abbreviatedTable = false;
44
+ if (/^\s*=/.test(line))
45
+ abbreviatedTable = false;
46
+ if (open.some(isVerbatimBlock) || open.includes('data') || abbreviatedTable)
47
+ continue;
48
+ if (insideCode(line))
49
+ continue;
50
+ for (const foreign of FOREIGN) {
51
+ if (!foreign.test.test(line))
52
+ continue;
53
+ violations.push({
54
+ rule: MARKDOWN_IN_POD_RULE_ID,
55
+ severity: 'warning',
56
+ message: foreign.says,
57
+ location: {
58
+ start: { line: i + 1, column: 1, offset: 0 },
59
+ end: { line: i + 1, column: 1, offset: 0 },
60
+ },
61
+ });
62
+ break;
63
+ }
64
+ }
65
+ return violations;
66
+ }
67
+ //# sourceMappingURL=markdown-in-pod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-in-pod.js","sourceRoot":"","sources":["../../../src/lint/rules/markdown-in-pod.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { VERBATIM_BLOCKS } from '@podlite/schema';
1
+ import { isVerbatimBlock } from '@podlite/schema';
2
2
  export const TABLE_COLUMN_WIDTH_RULE_ID = 'table-column-width';
3
3
  export const tableColumnWidthRule = {
4
4
  id: TABLE_COLUMN_WIDTH_RULE_ID,
@@ -22,10 +22,14 @@ const isEdge = (char) => char === '|' || char === '+' || char === ' ';
22
22
  const collides = (line, boundary) => {
23
23
  if (boundary >= line.length)
24
24
  return false;
25
- // content standing on the boundary, or pressed against it with no space left
25
+ // content standing on the boundary is wrong however the row is written
26
26
  if (!isEdge(line[boundary]))
27
27
  return true;
28
- return boundary > 0 && !isEdge(line[boundary - 1]);
28
+ // pressed against the boundary only matters where the row draws a bar of its
29
+ // own: a row whose cells are held apart by spaces may fill its column to the
30
+ // last position, and the parser reads it correctly
31
+ const drawsBar = line[boundary] === '|' || line[boundary] === '+';
32
+ return drawsBar && boundary > 0 && !isEdge(line[boundary - 1]);
29
33
  };
30
34
  const checkTable = (lines) => {
31
35
  const separator = lines.find(l => SEPARATOR_LINE.test(l.text) && hasBar(l.text));
@@ -58,7 +62,7 @@ const checkTable = (lines) => {
58
62
  export function scanTableColumns(content) {
59
63
  const lines = content.split(/\r?\n/);
60
64
  // a table keeps its content verbatim too, and it is the one being read here
61
- const verbatim = new Set(VERBATIM_BLOCKS.filter(name => name !== 'table'));
65
+ const verbatim = (name) => name !== 'table' && isVerbatimBlock(name);
62
66
  const openBlocks = [];
63
67
  const violations = [];
64
68
  let table = null;
@@ -81,11 +85,11 @@ export function scanTableColumns(content) {
81
85
  if (begin) {
82
86
  closeTable();
83
87
  openBlocks.push(begin[1]);
84
- if (begin[1] === 'table' && !openBlocks.some(b => verbatim.has(b)))
88
+ if (begin[1] === 'table' && !openBlocks.some(verbatim))
85
89
  table = [];
86
90
  continue;
87
91
  }
88
- if (openBlocks.some(b => verbatim.has(b)))
92
+ if (openBlocks.some(verbatim))
89
93
  continue;
90
94
  if (abbreviated) {
91
95
  closeTable();
@@ -1 +1 @@
1
- {"version":3,"file":"table-column-width.js","sourceRoot":"","sources":["../../../src/lint/rules/table-column-width.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table-column-width.js","sourceRoot":"","sources":["../../../src/lint/rules/table-column-width.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Violation, SourceRule } from '../types';
2
+ export declare const UNCLOSED_MARKUP_CODE_RULE_ID = "unclosed-markup-code";
3
+ export declare const unclosedMarkupCodeRule: SourceRule;
4
+ export declare function scanUnclosedMarkupCodes(content: string): Violation[];
@@ -0,0 +1,105 @@
1
+ import { isVerbatimBlock } from '@podlite/schema';
2
+ export const UNCLOSED_MARKUP_CODE_RULE_ID = 'unclosed-markup-code';
3
+ export const unclosedMarkupCodeRule = {
4
+ id: UNCLOSED_MARKUP_CODE_RULE_ID,
5
+ severity: 'warning',
6
+ };
7
+ // The specification leaves the parser no choice: a markup code that ends at the
8
+ // end of its block rather than at its own delimiter is to be reported. The
9
+ // parser instead drops such a code and the text goes out carrying the opening
10
+ // letter, so the whole line reads as written rather than as marked up.
11
+ //
12
+ // Closure is counted the way the specification defines it: a code opened with N
13
+ // angle brackets is closed by N of them together, and one opened with a
14
+ // guillemet by the closing guillemet. Counting rather than asking the parser
15
+ // keeps the doubled forms out of the report — C<< text >> is closed, and the
16
+ // parser drops it for reasons of its own when it sits inside another code.
17
+ //
18
+ // One case stays out of reach: an outer code opened with a single bracket whose
19
+ // inner code closes with its own. The count sees that bracket and calls the
20
+ // outer one closed. Asking the parser instead catches it, but then every single
21
+ // code written inside a doubled one reads as unclosed, and correct markup gets
22
+ // reported — the worse of the two.
23
+ const OPENER = /(^|[^A-Za-z])([A-Z])(<+|«)/g;
24
+ const unclosed = (text) => {
25
+ const missing = [];
26
+ let match;
27
+ OPENER.lastIndex = 0;
28
+ while ((match = OPENER.exec(text)) !== null) {
29
+ const [whole, before, name, open] = match;
30
+ const rest = text.slice(match.index + whole.length);
31
+ const closed = open === '«' ? rest.includes('»') : rest.includes('>'.repeat(open.length));
32
+ if (!closed) {
33
+ missing.push({ name, at: match.index + before.length });
34
+ }
35
+ }
36
+ return missing;
37
+ };
38
+ export function scanUnclosedMarkupCodes(content) {
39
+ const lines = content.split(/\r?\n/);
40
+ const open = [];
41
+ const violations = [];
42
+ let chunk = null;
43
+ let inAbbreviatedVerbatim = false;
44
+ const close = () => {
45
+ if (!chunk)
46
+ return;
47
+ const at = chunk;
48
+ for (const found of unclosed(at.text)) {
49
+ const name = found.name;
50
+ const line = at.line + at.text.slice(0, found.at).split('\n').length - 1;
51
+ violations.push({
52
+ rule: UNCLOSED_MARKUP_CODE_RULE_ID,
53
+ severity: 'warning',
54
+ message: `${name}<> is closed by the end of the block, not by its own bracket; the text goes out as written`,
55
+ location: {
56
+ start: { line, column: 1, offset: 0 },
57
+ end: { line, column: 1, offset: 0 },
58
+ },
59
+ });
60
+ }
61
+ chunk = null;
62
+ };
63
+ for (let i = 0; i < lines.length; i++) {
64
+ const line = lines[i];
65
+ if (/^\s*=end\s+[\w-]+/.test(line)) {
66
+ close();
67
+ inAbbreviatedVerbatim = false;
68
+ open.pop();
69
+ continue;
70
+ }
71
+ const begin = line.match(/^\s*=begin\s+([\w-]+)/);
72
+ if (begin) {
73
+ close();
74
+ inAbbreviatedVerbatim = false;
75
+ open.push(begin[1]);
76
+ continue;
77
+ }
78
+ if (open.some(isVerbatimBlock))
79
+ continue;
80
+ // a directive starts a chunk of its own; a blank line ends the one running
81
+ if (/^\s*=/.test(line)) {
82
+ close();
83
+ const named = line.match(/^\s*=(?:for\s+)?([\w-]+)/);
84
+ // the short forms carry verbatim text just as the paired ones do
85
+ inAbbreviatedVerbatim = Boolean(named && isVerbatimBlock(named[1]));
86
+ if (!inAbbreviatedVerbatim)
87
+ chunk = { text: line, line: i + 1 };
88
+ continue;
89
+ }
90
+ if (line.trim() === '') {
91
+ close();
92
+ inAbbreviatedVerbatim = false;
93
+ continue;
94
+ }
95
+ if (inAbbreviatedVerbatim)
96
+ continue;
97
+ if (chunk)
98
+ chunk.text += '\n' + line;
99
+ else
100
+ chunk = { text: line, line: i + 1 };
101
+ }
102
+ close();
103
+ return violations;
104
+ }
105
+ //# sourceMappingURL=unclosed-markup-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unclosed-markup-code.js","sourceRoot":"","sources":["../../../src/lint/rules/unclosed-markup-code.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,12 @@ export type RuleSetting = 'off' | Severity;
5
5
  export type LintConfig = {
6
6
  rules?: Record<string, RuleSetting>;
7
7
  };
8
+ export declare const STDIN_NAME = "<stdin>";
8
9
  export type LintContext = {
9
10
  filePath: string;
10
11
  fileType: FileType;
11
12
  config: LintConfig;
13
+ source?: string;
12
14
  };
13
15
  export type Violation = {
14
16
  rule: string;
package/esm/lint/types.js CHANGED
@@ -1,2 +1,4 @@
1
- export {};
1
+ // The name a report carries when the document came from a pipe: there is no
2
+ // directory to resolve a relative path against.
3
+ export const STDIN_NAME = '<stdin>';
2
4
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":"AAYA,4EAA4E;AAC5E,gDAAgD;AAChD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { FileReport } from './formatters/text';
2
+ export type WorkerResult = {
3
+ index: number;
4
+ report: FileReport;
5
+ };
@@ -0,0 +1,15 @@
1
+ import { parentPort } from 'worker_threads';
2
+ import { lintFile } from './index';
3
+ if (parentPort) {
4
+ const port = parentPort;
5
+ // the first message back says the parser is loaded and the thread can be fed
6
+ port.postMessage('ready');
7
+ port.on('message', (batch) => {
8
+ const done = batch.jobs.map(job => ({
9
+ index: job.index,
10
+ report: lintFile(job.filePath, batch.config),
11
+ }));
12
+ port.postMessage(done);
13
+ });
14
+ }
15
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/lint/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAOlC,IAAI,UAAU,EAAE,CAAC;IACf,MAAM,IAAI,GAAG,UAAU,CAAA;IACvB,6EAA6E;IAC7E,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;IACzB,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAY,EAAE,EAAE;QAClC,MAAM,IAAI,GAAmB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClD,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;SAC7C,CAAC,CAAC,CAAA;QACH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;AACJ,CAAC"}
package/esm/query.js CHANGED
@@ -21,7 +21,10 @@ const renderViaRoot = (block, serializer) => {
21
21
  };
22
22
  const formatBlocks = (format, matches) => {
23
23
  if (format === 'json') {
24
- return JSON.stringify(matches.map(m => m.block), null, 2);
24
+ // without the source, a query over several files answers "here are the
25
+ // blocks" and drops "from where", which leaves the caller no way back to
26
+ // the document
27
+ return JSON.stringify(matches.map(m => ({ file: m.source.file, ...m.block })), null, 2);
25
28
  }
26
29
  if (format === 'podlite') {
27
30
  return matches
package/esm/query.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,46 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
- import { getTextContentFromNode, parseSelector, runSelector } from '@podlite/schema';
3
+ import { filePathMatches, getTextContentFromNode, parseSelector, runSelector, } from '@podlite/schema';
4
4
  const isIncludeBlock = (node) => node && typeof node === 'object' && node.type === 'block' && node.name === 'include';
5
+ const hasMask = (target) => /[*?]/.test(target);
6
+ const reachesSubdirs = (target) => target.includes('**');
7
+ // A mask that crosses directories could otherwise walk a whole disk from a
8
+ // short prefix.
9
+ const maxDepth = 32;
10
+ // Everything up to the last separator that carries no mask; the rest is matched
11
+ // by the selector itself, which already knows the pattern language.
12
+ const fixedPrefix = (target) => {
13
+ const parts = target.split('/');
14
+ const upto = parts.findIndex(hasMask);
15
+ return parts.slice(0, upto === -1 ? parts.length : upto).join('/');
16
+ };
17
+ const listDir = (dir, deep, depth = 0) => {
18
+ let entries;
19
+ try {
20
+ entries = fs.readdirSync(dir, { withFileTypes: true });
21
+ }
22
+ catch {
23
+ return [];
24
+ }
25
+ const named = entries.filter(e => !e.name.startsWith('.')).sort((a, b) => (a.name < b.name ? -1 : 1));
26
+ const files = named.filter(e => e.isFile()).map(e => e.name);
27
+ if (!deep || depth >= maxDepth)
28
+ return files;
29
+ const nested = named
30
+ .filter(e => e.isDirectory())
31
+ .flatMap(e => listDir(path.join(dir, e.name), deep, depth + 1).map(inner => `${e.name}/${inner}`));
32
+ return [...files, ...nested];
33
+ };
34
+ // Candidate paths for a masked target, written the way the target is written so
35
+ // the selector matches them back. Matching runs before the file is read: the
36
+ // directory may hold anything, and a mask that does not name it must not send
37
+ // it through the parser.
38
+ const expandMask = (target, baseDir) => {
39
+ const prefix = fixedPrefix(target);
40
+ return listDir(path.resolve(baseDir, prefix), reachesSubdirs(target))
41
+ .map(name => (prefix ? `${prefix}/${name}` : name))
42
+ .filter(file => filePathMatches(file, target));
43
+ };
5
44
  const keepBlocks = (items) => items.filter(item => item && typeof item === 'object' && !('file' in item));
6
45
  const unwrapRoot = (blocks) => blocks.flatMap((b) => b && b.type === 'block' && b.name === 'root' && Array.isArray(b.content) ? b.content : [b]);
7
46
  export const resolveIncludes = (tree, opts) => {
@@ -14,14 +53,24 @@ export const resolveIncludes = (tree, opts) => {
14
53
  const parsed = selector ? parseSelector(selector) : undefined;
15
54
  if (!selector || !parsed || parsed.scheme !== 'file' || !parsed.document)
16
55
  return node;
17
- const target = path.resolve(baseDir, parsed.document);
18
- if (stack.includes(target))
19
- return [];
20
- if (!fs.existsSync(target)) {
56
+ const masked = hasMask(parsed.document);
57
+ const written = masked ? expandMask(parsed.document, baseDir) : [parsed.document];
58
+ if (!masked && !fs.existsSync(path.resolve(baseDir, parsed.document))) {
21
59
  throw new Error(`include target not found: ${parsed.document}`);
22
60
  }
23
- const subTree = walkNode(opts.parse(fs.readFileSync(target, 'utf-8')), path.dirname(target), [...stack, target]);
24
- return unwrapRoot(keepBlocks(runSelector(selector, [{ file: parsed.document, node: subTree }])));
61
+ const docs = [];
62
+ for (const file of written) {
63
+ const target = path.resolve(baseDir, file);
64
+ if (stack.includes(target))
65
+ continue;
66
+ docs.push({
67
+ file,
68
+ node: walkNode(opts.parse(fs.readFileSync(target, 'utf-8')), path.dirname(target), [...stack, target]),
69
+ });
70
+ }
71
+ if (docs.length === 0)
72
+ return [];
73
+ return unwrapRoot(keepBlocks(runSelector(selector, docs)));
25
74
  }
26
75
  if (Array.isArray(node.content))
27
76
  return { ...node, content: walkList(node.content, baseDir, stack) };
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-includes.js","sourceRoot":"","sources":["../src/resolve-includes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-includes.js","sourceRoot":"","sources":["../src/resolve-includes.ts"],"names":[],"mappings":"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"}
package/esm/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "0.0.79";
1
+ export declare const version = "0.0.81";
package/esm/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // generated by scripts/inject-version.mjs — do not edit by hand
2
- export const version = '0.0.79';
2
+ export const version = '0.0.81';
3
3
  //# sourceMappingURL=version.js.map