@redocly/recheck 0.4.1 → 0.5.0

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 (69) hide show
  1. package/README.md +359 -125
  2. package/dist/cli.js +59 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/baseline.d.ts +10 -0
  5. package/dist/commands/baseline.d.ts.map +1 -0
  6. package/dist/commands/baseline.js +59 -0
  7. package/dist/commands/baseline.js.map +1 -0
  8. package/dist/commands/readability.d.ts +10 -0
  9. package/dist/commands/readability.d.ts.map +1 -0
  10. package/dist/commands/readability.js +90 -0
  11. package/dist/commands/readability.js.map +1 -0
  12. package/dist/commands/run.d.ts.map +1 -1
  13. package/dist/commands/run.js +52 -8
  14. package/dist/commands/run.js.map +1 -1
  15. package/dist/config/load.d.ts +2 -0
  16. package/dist/config/load.d.ts.map +1 -1
  17. package/dist/config/load.js +3 -0
  18. package/dist/config/load.js.map +1 -1
  19. package/dist/config/schema.d.ts +4 -0
  20. package/dist/config/schema.d.ts.map +1 -1
  21. package/dist/config/schema.js +3 -0
  22. package/dist/config/schema.js.map +1 -1
  23. package/dist/config/validate.d.ts +2 -0
  24. package/dist/config/validate.d.ts.map +1 -1
  25. package/dist/config/validate.js +3 -1
  26. package/dist/config/validate.js.map +1 -1
  27. package/dist/core/baseline.d.ts +49 -0
  28. package/dist/core/baseline.d.ts.map +1 -0
  29. package/dist/core/baseline.js +0 -0
  30. package/dist/core/baseline.js.map +1 -0
  31. package/dist/core/prose-extract.d.ts +6 -0
  32. package/dist/core/prose-extract.d.ts.map +1 -0
  33. package/dist/core/prose-extract.js +79 -0
  34. package/dist/core/prose-extract.js.map +1 -0
  35. package/dist/core/readability.d.ts +17 -0
  36. package/dist/core/readability.d.ts.map +1 -0
  37. package/dist/core/readability.js +37 -0
  38. package/dist/core/readability.js.map +1 -0
  39. package/dist/core/runner.d.ts.map +1 -1
  40. package/dist/core/runner.js +1 -0
  41. package/dist/core/runner.js.map +1 -1
  42. package/dist/data/markdoc-realm-schema.d.ts.map +1 -1
  43. package/dist/data/markdoc-realm-schema.js +13 -0
  44. package/dist/data/markdoc-realm-schema.js.map +1 -1
  45. package/dist/reporter/formats/json.d.ts +5 -1
  46. package/dist/reporter/formats/json.d.ts.map +1 -1
  47. package/dist/reporter/formats/json.js +2 -1
  48. package/dist/reporter/formats/json.js.map +1 -1
  49. package/dist/reporter/index.js +2 -2
  50. package/dist/reporter/index.js.map +1 -1
  51. package/dist/reporter/summary.d.ts +1 -1
  52. package/dist/reporter/summary.d.ts.map +1 -1
  53. package/dist/reporter/summary.js +2 -1
  54. package/dist/reporter/summary.js.map +1 -1
  55. package/dist/rules/scope/metric.d.ts +2 -14
  56. package/dist/rules/scope/metric.d.ts.map +1 -1
  57. package/dist/rules/scope/metric.js +11 -187
  58. package/dist/rules/scope/metric.js.map +1 -1
  59. package/dist/rules/scope/semantic-line-breaks.d.ts.map +1 -1
  60. package/dist/rules/scope/semantic-line-breaks.js +58 -35
  61. package/dist/rules/scope/semantic-line-breaks.js.map +1 -1
  62. package/dist/rules/token/link-fragments.d.ts.map +1 -1
  63. package/dist/rules/token/link-fragments.js +221 -91
  64. package/dist/rules/token/link-fragments.js.map +1 -1
  65. package/dist/rules/types.d.ts +2 -0
  66. package/dist/rules/types.d.ts.map +1 -1
  67. package/dist/types/reporting.d.ts +9 -0
  68. package/dist/types/reporting.d.ts.map +1 -1
  69. package/package.json +3 -3
@@ -1,4 +1,11 @@
1
- import { filterByTypes } from '../../parser/index.js';
1
+ // Ported from markdownlint's lib/md051.mjs
2
+ // (https://github.com/DavidAnson/markdownlint, MIT © David Anson).
3
+ // Extends upstream MD051 with the opt-in `crossFile` option: relative link
4
+ // and image targets must exist on disk, and a `file.md#anchor` fragment
5
+ // must exist in the target. Upstream never validates other files.
6
+ import { readFileSync, statSync } from 'node:fs';
7
+ import { dirname, extname, join, resolve } from 'node:path';
8
+ import { filterByTypes, parseMarkdown } from '../../parser/index.js';
2
9
  import { filterByPredicate, getHtmlAttributeRe, getHtmlTagInfo, isDocfxTab, toWellFormedString, } from './helpers.js';
3
10
  /** Recursive-descendant type filter (any depth), matching upstream's `filterByTypes(tokens, types)` semantics -- distinct from `getDescendantsByType`'s single-type-per-depth path walk, which is the wrong shape here since `resourceDestinationString`/`definitionDestinationString` nest under a literal/raw alternation this call site doesn't want to spell out. */
4
11
  function descendantsOfType(children, type) {
@@ -34,112 +41,235 @@ function unescapeStringTokenText(token) {
34
41
  .map((child) => child.text)
35
42
  .join('');
36
43
  }
37
- export const linkFragments = {
38
- name: 'link-fragments',
39
- tags: ['links'],
40
- fixable: true,
41
- defaults: {
42
- message: 'Link fragments should be valid',
43
- ignoreCase: false,
44
- ignoredPattern: '',
45
- },
46
- check(ctx) {
47
- const ignoreCase = !!ctx.config.ignoreCase;
48
- const ignoredPattern = String(ctx.config.ignoredPattern ?? '');
49
- const ignoredPatternRe = new RegExp(ignoredPattern || '^$');
50
- const fragments = new Map([['#top', 0]]);
51
- // Process headings
52
- for (const headingText of filterByTypes(ctx.tree, ['atxHeadingText', 'setextHeadingText'])) {
53
- const fragment = convertHeadingToHTMLFragment(headingText);
54
- if (fragment !== '#') {
55
- const count = fragments.get(fragment) || 0;
56
- if (count) {
57
- fragments.set(`${fragment}-${count}`, 0);
58
- }
59
- fragments.set(fragment, count + 1);
60
- anchorRe.lastIndex = 0;
61
- let match;
62
- while ((match = anchorRe.exec(headingText.text)) !== null) {
63
- const anchor = match[1];
64
- if (!fragments.has(anchor)) {
65
- fragments.set(anchor, 1);
66
- }
44
+ /** Anchors a document exposes: heading slugs, `{#anchors}`, and HTML id/name anchors. */
45
+ function collectFragments(tree) {
46
+ const fragments = new Map([['#top', 0]]);
47
+ for (const headingText of filterByTypes(tree, ['atxHeadingText', 'setextHeadingText'])) {
48
+ const fragment = convertHeadingToHTMLFragment(headingText);
49
+ if (fragment !== '#') {
50
+ const count = fragments.get(fragment) || 0;
51
+ if (count) {
52
+ fragments.set(`${fragment}-${count}`, 0);
53
+ }
54
+ fragments.set(fragment, count + 1);
55
+ anchorRe.lastIndex = 0;
56
+ let match;
57
+ while ((match = anchorRe.exec(headingText.text)) !== null) {
58
+ const anchor = match[1];
59
+ if (!fragments.has(anchor)) {
60
+ fragments.set(anchor, 1);
67
61
  }
68
62
  }
69
63
  }
70
- // Process HTML anchors. includeHtmlFlow: true -- matches upstream's own
71
- // `filterByTypesCached(['htmlText'], true)` in md051.mjs, so this also
72
- // picks up anchors inside block-level HTML (`<div id="x">`, etc.), not
73
- // just genuinely inline HTML. Task 12: the parser now reparses `htmlFlow`
74
- // blocks into real `htmlText` descendants (see parser/index.ts's
75
- // `reparseHtmlFlow`), which is what makes this single pass sufficient --
76
- // it used to need a separate raw-text regex scan over `htmlFlow` tokens
77
- // (see the removed `collectHtmlFlowAnchors`, no longer needed now that
78
- // the tokens it worked around actually exist).
79
- for (const token of filterByTypes(ctx.tree, ['htmlText'], true)) {
80
- const htmlTagInfo = getHtmlTagInfo(token);
81
- if (htmlTagInfo && !htmlTagInfo.close) {
82
- const anchorMatch = idRe.exec(token.text) ||
83
- (htmlTagInfo.name.toLowerCase() === 'a' && nameRe.exec(token.text));
84
- if (anchorMatch && anchorMatch.length > 0) {
85
- fragments.set(`#${anchorMatch[1]}`, 0);
86
- }
64
+ }
65
+ // includeHtmlFlow: true matches upstream md051.mjs, so anchors inside
66
+ // block-level HTML (`<div id="x">`) count too, not just inline HTML.
67
+ for (const token of filterByTypes(tree, ['htmlText'], true)) {
68
+ const htmlTagInfo = getHtmlTagInfo(token);
69
+ if (htmlTagInfo && !htmlTagInfo.close) {
70
+ const anchorMatch = idRe.exec(token.text) ||
71
+ (htmlTagInfo.name.toLowerCase() === 'a' && nameRe.exec(token.text));
72
+ if (anchorMatch && anchorMatch.length > 0) {
73
+ fragments.set(`#${anchorMatch[1]}`, 0);
87
74
  }
88
75
  }
89
- // Process link and definition fragments
90
- const parentChilds = [
91
- ['link', 'resourceDestinationString'],
92
- ['definition', 'definitionDestinationString'],
93
- ];
94
- for (const [parentType, definitionType] of parentChilds) {
95
- const links = filterByTypes(ctx.tree, [parentType]).filter((link) => !(link.parent?.type === 'atxHeadingText' && isDocfxTab(link.parent.parent)));
96
- for (const link of links) {
97
- const definitions = descendantsOfType(link.children, definitionType);
98
- for (const definition of definitions) {
99
- const { endColumn, startColumn } = definition;
100
- const text = unescapeStringTokenText(definition);
101
- const textSliceOne = text.slice(1);
102
- const encodedText = `#${encodeURIComponent(toWellFormedString(textSliceOne))}`;
103
- if (text.length > 1 &&
104
- text.startsWith('#') &&
105
- !fragments.has(encodedText) &&
106
- !lineFragmentRe.test(encodedText) &&
107
- !ignoredPatternRe.test(textSliceOne)) {
108
- const hasRange = link.startLine === link.endLine;
109
- const context = hasRange ? link.text : undefined;
110
- const column = hasRange ? link.startColumn : undefined;
111
- const fixInfo = hasRange
112
- ? {
113
- lineNumber: link.startLine,
114
- editColumn: startColumn,
115
- deleteCount: endColumn - startColumn,
116
- }
117
- : undefined;
118
- const textLower = text.toLowerCase();
119
- const mixedCaseKey = [...fragments.keys()].find((key) => textLower === key.toLowerCase());
120
- if (mixedCaseKey) {
121
- const finalFixInfo = fixInfo ? { ...fixInfo, insertText: mixedCaseKey } : undefined;
122
- if (!ignoreCase && mixedCaseKey !== text) {
123
- ctx.onError({
124
- line: link.startLine,
125
- column,
126
- detail: `Expected: ${mixedCaseKey}; Actual: ${text}`,
127
- context,
128
- fixInfo: finalFixInfo,
129
- });
130
- }
76
+ }
77
+ return fragments;
78
+ }
79
+ const SCHEME_RE = /^[a-z][a-z0-9+.-]*:/i;
80
+ const targetCache = new Map();
81
+ const MISSING = { mtimeMs: -1, exists: false, fragments: null };
82
+ // Anchors and existence of one on-disk file, cached by (path, mtime) so a
83
+ // run reads each target once and edits invalidate naturally.
84
+ function resolveTargetFile(absolutePath, markdoc) {
85
+ let stats;
86
+ try {
87
+ stats = statSync(absolutePath);
88
+ }
89
+ catch {
90
+ return MISSING;
91
+ }
92
+ const cached = targetCache.get(absolutePath);
93
+ if (cached && cached.mtimeMs === stats.mtimeMs)
94
+ return cached;
95
+ let fragments = null;
96
+ if (stats.isFile() && ['.md', '.markdown'].includes(extname(absolutePath).toLowerCase())) {
97
+ try {
98
+ fragments = collectFragments(parseMarkdown(readFileSync(absolutePath, 'utf8'), { markdoc }));
99
+ }
100
+ catch {
101
+ fragments = null;
102
+ }
103
+ }
104
+ const entry = { mtimeMs: stats.mtimeMs, exists: true, fragments };
105
+ targetCache.set(absolutePath, entry);
106
+ return entry;
107
+ }
108
+ // Resolves a link target the way the Realm router does: an extensionless
109
+ // path also tries `<path>.md`, and a directory reads its `index.md` for
110
+ // anchors.
111
+ function resolveTarget(absolutePath, markdoc) {
112
+ let stats;
113
+ try {
114
+ stats = statSync(absolutePath);
115
+ }
116
+ catch {
117
+ if (extname(absolutePath) === '') {
118
+ const asMarkdown = resolveTargetFile(`${absolutePath}.md`, markdoc);
119
+ if (asMarkdown.exists)
120
+ return asMarkdown;
121
+ return resolveTargetFile(join(absolutePath, 'index.md'), markdoc);
122
+ }
123
+ return MISSING;
124
+ }
125
+ if (stats.isDirectory()) {
126
+ const viaIndex = resolveTargetFile(join(absolutePath, 'index.md'), markdoc);
127
+ if (viaIndex.exists)
128
+ return viaIndex;
129
+ const asSibling = resolveTargetFile(`${absolutePath}.md`, markdoc);
130
+ if (asSibling.exists)
131
+ return asSibling;
132
+ return { mtimeMs: stats.mtimeMs, exists: true, fragments: null };
133
+ }
134
+ return resolveTargetFile(absolutePath, markdoc);
135
+ }
136
+ function checkLinkFragments(ctx) {
137
+ const ignoreCase = !!ctx.config.ignoreCase;
138
+ const crossFile = !!ctx.config.crossFile;
139
+ const ignoredPattern = String(ctx.config.ignoredPattern ?? '');
140
+ const ignoredPatternRe = new RegExp(ignoredPattern || '^$');
141
+ const fragments = collectFragments(ctx.tree);
142
+ const baseDir = dirname(ctx.filePath);
143
+ const checkCrossFileDestination = (rawDestination, link, allowFragmentCheck) => {
144
+ if (rawDestination === '' ||
145
+ rawDestination.startsWith('#') ||
146
+ rawDestination.startsWith('/') ||
147
+ rawDestination.startsWith('//') ||
148
+ SCHEME_RE.test(rawDestination)) {
149
+ return;
150
+ }
151
+ const hashIndex = rawDestination.indexOf('#');
152
+ const fragment = hashIndex === -1 ? '' : rawDestination.slice(hashIndex);
153
+ let targetPath = hashIndex === -1 ? rawDestination : rawDestination.slice(0, hashIndex);
154
+ targetPath = targetPath.split('?')[0];
155
+ if (targetPath === '')
156
+ return;
157
+ try {
158
+ targetPath = decodeURIComponent(targetPath);
159
+ }
160
+ catch {
161
+ return;
162
+ }
163
+ const target = resolveTarget(resolve(baseDir, targetPath), ctx.markdoc !== undefined);
164
+ const hasRange = link.startLine === link.endLine;
165
+ const context = hasRange ? link.text : undefined;
166
+ const column = hasRange ? link.startColumn : undefined;
167
+ if (!target.exists) {
168
+ ctx.onError({
169
+ line: link.startLine,
170
+ column,
171
+ detail: `Link target not found: ${targetPath}`,
172
+ context,
173
+ });
174
+ return;
175
+ }
176
+ if (!allowFragmentCheck || fragment.length <= 1 || target.fragments === null)
177
+ return;
178
+ const encoded = `#${encodeURIComponent(toWellFormedString(fragment.slice(1)))}`;
179
+ if (lineFragmentRe.test(encoded) || ignoredPatternRe.test(fragment.slice(1)))
180
+ return;
181
+ const found = ignoreCase
182
+ ? [...target.fragments.keys()].some((key) => key.toLowerCase() === encoded.toLowerCase())
183
+ : target.fragments.has(encoded);
184
+ if (!found) {
185
+ ctx.onError({
186
+ line: link.startLine,
187
+ column,
188
+ detail: `Fragment ${fragment} not found in ${targetPath}`,
189
+ context,
190
+ });
191
+ }
192
+ };
193
+ // Process link and definition fragments
194
+ const parentChilds = [
195
+ ['link', 'resourceDestinationString'],
196
+ ['definition', 'definitionDestinationString'],
197
+ ];
198
+ for (const [parentType, definitionType] of parentChilds) {
199
+ const links = filterByTypes(ctx.tree, [parentType]).filter((link) => !(link.parent?.type === 'atxHeadingText' && isDocfxTab(link.parent.parent)));
200
+ for (const link of links) {
201
+ const definitions = descendantsOfType(link.children, definitionType);
202
+ for (const definition of definitions) {
203
+ const { endColumn, startColumn } = definition;
204
+ const text = unescapeStringTokenText(definition);
205
+ if (crossFile && !text.startsWith('#')) {
206
+ checkCrossFileDestination(text, link, true);
207
+ continue;
208
+ }
209
+ const textSliceOne = text.slice(1);
210
+ const encodedText = `#${encodeURIComponent(toWellFormedString(textSliceOne))}`;
211
+ if (text.length > 1 &&
212
+ text.startsWith('#') &&
213
+ !fragments.has(encodedText) &&
214
+ !lineFragmentRe.test(encodedText) &&
215
+ !ignoredPatternRe.test(textSliceOne)) {
216
+ const hasRange = link.startLine === link.endLine;
217
+ const context = hasRange ? link.text : undefined;
218
+ const column = hasRange ? link.startColumn : undefined;
219
+ const fixInfo = hasRange
220
+ ? {
221
+ lineNumber: link.startLine,
222
+ editColumn: startColumn,
223
+ deleteCount: endColumn - startColumn,
131
224
  }
132
- else {
225
+ : undefined;
226
+ const textLower = text.toLowerCase();
227
+ const mixedCaseKey = [...fragments.keys()].find((key) => textLower === key.toLowerCase());
228
+ if (mixedCaseKey) {
229
+ const finalFixInfo = fixInfo ? { ...fixInfo, insertText: mixedCaseKey } : undefined;
230
+ if (!ignoreCase && mixedCaseKey !== text) {
133
231
  ctx.onError({
134
232
  line: link.startLine,
135
233
  column,
234
+ detail: `Expected: ${mixedCaseKey}; Actual: ${text}`,
136
235
  context,
236
+ fixInfo: finalFixInfo,
137
237
  });
138
238
  }
139
239
  }
240
+ else {
241
+ ctx.onError({
242
+ line: link.startLine,
243
+ column,
244
+ context,
245
+ });
246
+ }
140
247
  }
141
248
  }
142
249
  }
250
+ }
251
+ if (crossFile) {
252
+ for (const image of filterByTypes(ctx.tree, ['image'])) {
253
+ for (const definition of descendantsOfType(image.children, 'resourceDestinationString')) {
254
+ const text = unescapeStringTokenText(definition);
255
+ if (!text.startsWith('#'))
256
+ checkCrossFileDestination(text, image, false);
257
+ }
258
+ }
259
+ }
260
+ }
261
+ export const linkFragments = {
262
+ name: 'link-fragments',
263
+ tags: ['links'],
264
+ fixable: true,
265
+ defaults: {
266
+ message: 'Link fragments should be valid',
267
+ ignoreCase: false,
268
+ ignoredPattern: '',
269
+ crossFile: false,
270
+ },
271
+ check(ctx) {
272
+ checkLinkFragments(ctx);
143
273
  },
144
274
  };
145
275
  //# sourceMappingURL=link-fragments.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"link-fragments.js","sourceRoot":"","sources":["../../../src/rules/token/link-fragments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"link-fragments.js","sourceRoot":"","sources":["../../../src/rules/token/link-fragments.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,8 @@ export interface TokenRuleOnErrorInfo {
47
47
  export interface TokenRuleContext {
48
48
  tree: TokenTree;
49
49
  lines: string[];
50
+ /** Path of the file under check, for rules that resolve relative link targets. */
51
+ filePath: string;
50
52
  config: Record<string, unknown>;
51
53
  onError(info: TokenRuleOnErrorInfo): void;
52
54
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rules/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,OAAO,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;CACzF;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACvF,GAAG,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;IACzC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC1C;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;QAC7B;;;;;;WAMG;QACH,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO,EAAE,cAAc,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACpC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rules/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,OAAO,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;CACzF;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACvF,GAAG,CAAC,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;IACzC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC1C;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;QAC7B;;;;;;WAMG;QACH,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO,EAAE,cAAc,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACpC"}
@@ -12,6 +12,13 @@ export interface Summary {
12
12
  totalWarnings: number;
13
13
  totalInfo: number;
14
14
  breakdown: RuleBreakdown;
15
+ /** Present only when a baseline is active. */
16
+ baseline?: BaselineStats;
17
+ }
18
+ export interface BaselineStats {
19
+ matched: number;
20
+ new: number;
21
+ stale: number;
15
22
  }
16
23
  export type OutputFormat = 'table' | 'json' | 'sarif' | 'github-actions';
17
24
  export interface ReportOptions {
@@ -19,5 +26,7 @@ export interface ReportOptions {
19
26
  showStats?: boolean;
20
27
  annotationsLimit?: number;
21
28
  outputPath?: string;
29
+ /** Present only when a baseline is active; the json format serializes it. */
30
+ baseline?: BaselineStats;
22
31
  }
23
32
  //# sourceMappingURL=reporting.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reporting.d.ts","sourceRoot":"","sources":["../../src/types/reporting.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE3D,MAAM,WAAW,OAAO;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,gBAAgB,CAAC;AAEzE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"reporting.d.ts","sourceRoot":"","sources":["../../src/types/reporting.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAE3D,MAAM,WAAW,OAAO;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,aAAa,CAAC;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,gBAAgB,CAAC;AAEzE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/recheck",
3
- "version": "0.4.1",
3
+ "version": "0.5.0",
4
4
  "description": "Content linting (configurable + built-in rules)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -58,8 +58,8 @@
58
58
  "tsx": "^4.23.1",
59
59
  "typescript": "6.0.3",
60
60
  "vitest": "4.1.10",
61
- "@redocly/portal": "0.68.3",
62
- "@redocly/theme": "0.69.0-next.0"
61
+ "@redocly/theme": "0.69.0-next.0",
62
+ "@redocly/portal": "0.68.3"
63
63
  },
64
64
  "scripts": {
65
65
  "build": "tsgo && tsgo --noEmit -p tsconfig.typecheck.json",