jamdesk 1.1.149 → 1.1.150
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/README.md +28 -0
- package/dist/__tests__/integration/fix-scan-integration.test.d.ts +2 -0
- package/dist/__tests__/integration/fix-scan-integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/fix-scan-integration.test.js +77 -0
- package/dist/__tests__/integration/fix-scan-integration.test.js.map +1 -0
- package/dist/__tests__/unit/ai-fix-client.test.d.ts +2 -0
- package/dist/__tests__/unit/ai-fix-client.test.d.ts.map +1 -0
- package/dist/__tests__/unit/ai-fix-client.test.js +64 -0
- package/dist/__tests__/unit/ai-fix-client.test.js.map +1 -0
- package/dist/__tests__/unit/docs-config.test.js +66 -0
- package/dist/__tests__/unit/docs-config.test.js.map +1 -1
- package/dist/__tests__/unit/fix-ai-fallback.test.d.ts +2 -0
- package/dist/__tests__/unit/fix-ai-fallback.test.d.ts.map +1 -0
- package/dist/__tests__/unit/fix-ai-fallback.test.js +82 -0
- package/dist/__tests__/unit/fix-ai-fallback.test.js.map +1 -0
- package/dist/__tests__/unit/fix-engine-sync.test.d.ts +2 -0
- package/dist/__tests__/unit/fix-engine-sync.test.d.ts.map +1 -0
- package/dist/__tests__/unit/fix-engine-sync.test.js +16 -0
- package/dist/__tests__/unit/fix-engine-sync.test.js.map +1 -0
- package/dist/__tests__/unit/fix.test.d.ts +2 -0
- package/dist/__tests__/unit/fix.test.d.ts.map +1 -0
- package/dist/__tests__/unit/fix.test.js +61 -0
- package/dist/__tests__/unit/fix.test.js.map +1 -0
- package/dist/__tests__/unit/frontmatter-write.test.d.ts +2 -0
- package/dist/__tests__/unit/frontmatter-write.test.d.ts.map +1 -0
- package/dist/__tests__/unit/frontmatter-write.test.js +31 -0
- package/dist/__tests__/unit/frontmatter-write.test.js.map +1 -0
- package/dist/__tests__/unit/heading-extractor-sync.test.d.ts +2 -0
- package/dist/__tests__/unit/heading-extractor-sync.test.d.ts.map +1 -0
- package/dist/__tests__/unit/heading-extractor-sync.test.js +16 -0
- package/dist/__tests__/unit/heading-extractor-sync.test.js.map +1 -0
- package/dist/__tests__/unit/missing-description-scan.test.d.ts +2 -0
- package/dist/__tests__/unit/missing-description-scan.test.d.ts.map +1 -0
- package/dist/__tests__/unit/missing-description-scan.test.js +36 -0
- package/dist/__tests__/unit/missing-description-scan.test.js.map +1 -0
- package/dist/commands/fix.d.ts +97 -0
- package/dist/commands/fix.d.ts.map +1 -0
- package/dist/commands/fix.js +331 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/ai-fix-client.d.ts +27 -0
- package/dist/lib/ai-fix-client.d.ts.map +1 -0
- package/dist/lib/ai-fix-client.js +45 -0
- package/dist/lib/ai-fix-client.js.map +1 -0
- package/dist/lib/deps.js +1 -1
- package/dist/lib/deps.js.map +1 -1
- package/dist/lib/docs-config.d.ts +1 -1
- package/dist/lib/docs-config.d.ts.map +1 -1
- package/dist/lib/docs-config.js +59 -4
- package/dist/lib/docs-config.js.map +1 -1
- package/dist/lib/fix-engine.d.ts +89 -0
- package/dist/lib/fix-engine.d.ts.map +1 -0
- package/dist/lib/fix-engine.js +236 -0
- package/dist/lib/fix-engine.js.map +1 -0
- package/dist/lib/frontmatter-write.d.ts +4 -0
- package/dist/lib/frontmatter-write.d.ts.map +1 -0
- package/dist/lib/frontmatter-write.js +10 -0
- package/dist/lib/frontmatter-write.js.map +1 -0
- package/dist/lib/heading-extractor.d.ts +63 -0
- package/dist/lib/heading-extractor.d.ts.map +1 -0
- package/dist/lib/heading-extractor.js +171 -0
- package/dist/lib/heading-extractor.js.map +1 -0
- package/dist/lib/missing-description-scan.d.ts +7 -0
- package/dist/lib/missing-description-scan.d.ts.map +1 -0
- package/dist/lib/missing-description-scan.js +20 -0
- package/dist/lib/missing-description-scan.js.map +1 -0
- package/package.json +3 -3
- package/vendored/components/mdx/ApiEndpoint.tsx +1 -1
- package/vendored/components/mdx/OpenApiEndpoint.tsx +7 -2
- package/vendored/components/navigation/SocialFooter.tsx +9 -1
- package/vendored/lib/build/error-parser.ts +6 -3
- package/vendored/lib/firestore-helpers.ts +2 -3
- package/vendored/lib/fix-engine.ts +293 -0
- package/vendored/lib/health-checks.ts +2 -2
- package/vendored/lib/json-ld.ts +98 -6
- package/vendored/lib/render-doc-page.tsx +8 -2
- package/vendored/lib/search.ts +2 -2
- package/vendored/lib/seo.ts +29 -13
- package/vendored/lib/static-artifacts.ts +2 -2
- package/vendored/lib/ui-strings.ts +6 -0
- package/vendored/lib/validate-config.ts +63 -4
- package/vendored/scripts/build-search-index.cjs +2 -2
- package/vendored/shared/types.ts +1 -0
- package/vendored/workspace-package-lock.json +36 -36
package/README.md
CHANGED
|
@@ -116,6 +116,7 @@ npx jamdesk dev
|
|
|
116
116
|
| `jamdesk validate` | Validate docs.json, MDX syntax, OpenAPI specs |
|
|
117
117
|
| `jamdesk openapi-check <spec>` | Validate a single OpenAPI spec |
|
|
118
118
|
| `jamdesk broken-links` | Find broken internal links |
|
|
119
|
+
| `jamdesk fix` | Auto-fix broken internal links (cross-locale anchors + typos) |
|
|
119
120
|
| `jamdesk spellcheck` | Check for spelling errors |
|
|
120
121
|
| `jamdesk spellcheck --fix` | Interactively fix or ignore misspellings |
|
|
121
122
|
| `jamdesk rename <from> <to>` | Rename file, update all references |
|
|
@@ -284,6 +285,33 @@ Uses an English dictionary with 150+ built-in tech terms (API, GraphQL, Kubernet
|
|
|
284
285
|
|
|
285
286
|
Changes are previewed and confirmed before applying. Prose-safe: won't modify words inside code blocks, inline code, or JSX attributes. Your project name from docs.json is automatically ignored.
|
|
286
287
|
|
|
288
|
+
### `jamdesk fix`
|
|
289
|
+
|
|
290
|
+
Auto-fix broken internal links where the correct target is unambiguous: typo'd anchors and cross-locale anchor drift (a translated page renamed its headings but in-content links still point at the old English fragments). Edits local `.mdx` files; review before applying.
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
jamdesk fix --dry-run # preview every planned fix, write nothing
|
|
294
|
+
jamdesk fix # apply after a y/N confirmation
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
```
|
|
298
|
+
Planned fixes:
|
|
299
|
+
|
|
300
|
+
fr/ai/overview.mdx:9
|
|
301
|
+
/fr/ai/selectors#ai-strategies → /fr/ai/selectors#stratégies-ia
|
|
302
|
+
|
|
303
|
+
Apply 1 fix(es) to local files? (y/N) y
|
|
304
|
+
✓ Fixed 1 file(s); 0 warning(s) left for manual review.
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
| Option | Description |
|
|
308
|
+
|--------|-------------|
|
|
309
|
+
| `--dry-run` | Show planned fixes without writing files |
|
|
310
|
+
| `-y, --yes` | Apply fixes without the confirmation prompt |
|
|
311
|
+
| `--types <types>` | Comma-separated warning types to fix (default: all supported) |
|
|
312
|
+
|
|
313
|
+
Fixes are conservative: a fix is only applied when the corrected anchor is a real heading on the target page. Anything ambiguous is left for manual review. (Distinct from `spellcheck --fix`, which only corrects spelling; `jamdesk fix` repairs broken internal links.)
|
|
314
|
+
|
|
287
315
|
## File Management
|
|
288
316
|
|
|
289
317
|
Rename a page and every reference updates automatically — docs.json navigation, internal links, snippet imports:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-scan-integration.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/integration/fix-scan-integration.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// builder/cli/src/__tests__/integration/fix-scan-integration.test.ts
|
|
2
|
+
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
3
|
+
import { execFileSync } from 'child_process';
|
|
4
|
+
import fs from 'node:fs';
|
|
5
|
+
import os from 'node:os';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
import { planFixes, applyPlanToFiles } from '../../commands/fix.js';
|
|
9
|
+
import { extractHeadings } from '../../lib/heading-extractor.js';
|
|
10
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
const VALIDATE = path.join(__dirname, '../../../vendored/scripts/validate-links.cjs');
|
|
12
|
+
let dir;
|
|
13
|
+
beforeAll(() => {
|
|
14
|
+
dir = fs.mkdtempSync(path.join(os.tmpdir(), 'jd-fix-int-'));
|
|
15
|
+
const write = (rel, body) => {
|
|
16
|
+
fs.mkdirSync(path.join(dir, path.dirname(rel)), { recursive: true });
|
|
17
|
+
fs.writeFileSync(path.join(dir, rel), body, 'utf-8');
|
|
18
|
+
};
|
|
19
|
+
write('docs.json', JSON.stringify({
|
|
20
|
+
navigation: { languages: [
|
|
21
|
+
{ language: 'en', default: true, pages: ['ai/overview', 'ai/selectors', 'setup', 'guide/setup', 'collide'] },
|
|
22
|
+
{ language: 'fr', pages: ['fr/ai/overview', 'fr/ai/selectors'] },
|
|
23
|
+
] },
|
|
24
|
+
}));
|
|
25
|
+
write('ai/overview.mdx', 'See [strategy](/ai/selectors#ai-strategies).\n');
|
|
26
|
+
write('ai/selectors.mdx', '## Enable AI\n\n## AI strategies\n');
|
|
27
|
+
write('fr/ai/overview.mdx', 'Voir la [stratégie](/fr/ai/selectors#ai-strategies).\n');
|
|
28
|
+
write('fr/ai/selectors.mdx', '## Activer l\'IA\n\n## Stratégies IA\n');
|
|
29
|
+
// Substring-collision fixture: a VALID /guide/setup#introduction and a BROKEN
|
|
30
|
+
// /setup#introductio (typo) share a line; /setup#introductio is a substring of
|
|
31
|
+
// the valid href. Only the broken one must be fixed; the valid one left intact.
|
|
32
|
+
write('setup.mdx', '## Introduction\n');
|
|
33
|
+
write('guide/setup.mdx', '## Introduction\n');
|
|
34
|
+
write('collide.mdx', 'A [x](/guide/setup#introduction) and [y](/setup#introductio) end\n');
|
|
35
|
+
});
|
|
36
|
+
afterAll(() => fs.rmSync(dir, { recursive: true, force: true }));
|
|
37
|
+
describe('jamdesk fix — scanner→engine integration', () => {
|
|
38
|
+
it('the real validator finds the fr broken anchor and planFixes fixes it', () => {
|
|
39
|
+
let warnings = [];
|
|
40
|
+
try {
|
|
41
|
+
warnings = JSON.parse(execFileSync('node', [VALIDATE, '--json'], { cwd: dir, encoding: 'utf-8', env: { ...process.env, CONTENT_DIR: dir } }));
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
warnings = JSON.parse(e.stdout);
|
|
45
|
+
}
|
|
46
|
+
const broken = warnings.find((wn) => wn.file.startsWith('fr/ai/overview') && wn.link.includes('#ai-strategies'));
|
|
47
|
+
expect(broken, 'validator should report the fr broken anchor').toBeDefined();
|
|
48
|
+
const readPage = (p) => { const mdx = path.join(dir, p + '.mdx'); return fs.existsSync(mdx) ? fs.readFileSync(mdx, 'utf-8') : null; };
|
|
49
|
+
const headingsOf = (p) => { const c = readPage(p); return c == null ? null : extractHeadings(c); };
|
|
50
|
+
const plan = planFixes([broken], { hostAtDocs: false, locales: { codes: ['en', 'fr'], defaultCode: 'en' }, headingsOf, pageExists: (p) => readPage(p) !== null });
|
|
51
|
+
expect(plan.fixed).toHaveLength(1);
|
|
52
|
+
expect(plan.fixed[0].edits[0].newText).toContain('#stratégies-ia');
|
|
53
|
+
});
|
|
54
|
+
it('fixes only the broken href, never the valid longer href that contains it as a substring (scan → applyPlanToFiles → disk)', () => {
|
|
55
|
+
let warnings = [];
|
|
56
|
+
try {
|
|
57
|
+
warnings = JSON.parse(execFileSync('node', [VALIDATE, '--json'], { cwd: dir, encoding: 'utf-8', env: { ...process.env, CONTENT_DIR: dir } }));
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
warnings = JSON.parse(e.stdout);
|
|
61
|
+
}
|
|
62
|
+
// The validator flags ONLY the typo'd /setup#introductio, not the valid /guide/setup#introduction.
|
|
63
|
+
const collide = warnings.filter((wn) => wn.file.startsWith('collide'));
|
|
64
|
+
expect(collide.map((c) => c.link)).toEqual(['/setup#introductio']);
|
|
65
|
+
const readPage = (p) => { const mdx = path.join(dir, p + '.mdx'); return fs.existsSync(mdx) ? fs.readFileSync(mdx, 'utf-8') : null; };
|
|
66
|
+
const headingsOf = (p) => { const c = readPage(p); return c == null ? null : extractHeadings(c); };
|
|
67
|
+
const plan = planFixes(collide, { hostAtDocs: false, locales: { codes: ['en', 'fr'], defaultCode: 'en' }, headingsOf, pageExists: (p) => readPage(p) !== null });
|
|
68
|
+
expect(plan.fixed).toHaveLength(1);
|
|
69
|
+
const io = { readFile: (p) => fs.readFileSync(p, 'utf-8'), writeFile: (p, c) => fs.writeFileSync(p, c, 'utf-8') };
|
|
70
|
+
const outcome = applyPlanToFiles(plan, dir, io);
|
|
71
|
+
expect(outcome.written).toEqual(['collide.mdx']);
|
|
72
|
+
expect(outcome.failed).toHaveLength(0);
|
|
73
|
+
const after = fs.readFileSync(path.join(dir, 'collide.mdx'), 'utf-8');
|
|
74
|
+
expect(after).toBe('A [x](/guide/setup#introduction) and [y](/setup#introduction) end\n');
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=fix-scan-integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-scan-integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/fix-scan-integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-fix-client.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/ai-fix-client.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
const apiCall = vi.fn();
|
|
3
|
+
vi.mock('../../lib/auth.js', () => ({ apiCall: (...a) => apiCall(...a) }));
|
|
4
|
+
import { requestAiFixes } from '../../lib/ai-fix-client.js';
|
|
5
|
+
// apiCall resolves a fetch Response — the mock must be Response-shaped.
|
|
6
|
+
const resp = (body, ok = true) => ({ ok, status: ok ? 200 : 500, json: async () => body });
|
|
7
|
+
// A single anchor so the request is non-empty and a call actually happens.
|
|
8
|
+
const oneAnchor = [{ brokenFragment: 'a', targetHeadingIds: ['x'] }];
|
|
9
|
+
describe('requestAiFixes', () => {
|
|
10
|
+
beforeEach(() => { apiCall.mockReset(); });
|
|
11
|
+
it('returns the parsed callable result', async () => {
|
|
12
|
+
apiCall.mockResolvedValue(resp({ anchors: [{ index: 0, id: 'x' }], descriptions: [] }));
|
|
13
|
+
const out = await requestAiFixes({ projectId: 'p', anchors: oneAnchor, descriptions: [] });
|
|
14
|
+
expect(out.anchors[0].id).toBe('x');
|
|
15
|
+
});
|
|
16
|
+
it('makes no network call when there is nothing to resolve', async () => {
|
|
17
|
+
const out = await requestAiFixes({ projectId: 'p', anchors: [], descriptions: [] });
|
|
18
|
+
expect(apiCall).not.toHaveBeenCalled();
|
|
19
|
+
expect(out).toEqual({ anchors: [], descriptions: [] });
|
|
20
|
+
});
|
|
21
|
+
it('degrades to empty when apiCall throws (offline)', async () => {
|
|
22
|
+
apiCall.mockRejectedValue(new Error('network'));
|
|
23
|
+
const out = await requestAiFixes({ projectId: 'p', anchors: oneAnchor, descriptions: [] });
|
|
24
|
+
expect(apiCall).toHaveBeenCalledTimes(1);
|
|
25
|
+
expect(out).toEqual({ anchors: [], descriptions: [] });
|
|
26
|
+
});
|
|
27
|
+
it('degrades to empty on a non-2xx response', async () => {
|
|
28
|
+
apiCall.mockResolvedValue(resp({}, false));
|
|
29
|
+
const out = await requestAiFixes({ projectId: 'p', anchors: oneAnchor, descriptions: [] });
|
|
30
|
+
expect(apiCall).toHaveBeenCalledTimes(1);
|
|
31
|
+
expect(out).toEqual({ anchors: [], descriptions: [] });
|
|
32
|
+
});
|
|
33
|
+
it('chunks >50 into multiple batches and re-bases indices to global', async () => {
|
|
34
|
+
// Echo each batch's own indices; requestAiFixes must offset them back to global.
|
|
35
|
+
apiCall.mockImplementation((_ep, opts) => resp({
|
|
36
|
+
anchors: opts.body.anchors.map((_, i) => ({ index: i, id: 'x' })),
|
|
37
|
+
descriptions: opts.body.descriptions.map((_, i) => ({ index: i, text: 'd' })),
|
|
38
|
+
}));
|
|
39
|
+
const descriptions = Array.from({ length: 60 }, (_, i) => ({ title: `T${i}`, pageText: 'b' }));
|
|
40
|
+
const out = await requestAiFixes({ projectId: 'p', anchors: [], descriptions });
|
|
41
|
+
expect(apiCall).toHaveBeenCalledTimes(2); // 60 → 50 + 10
|
|
42
|
+
expect(out.descriptions).toHaveLength(60);
|
|
43
|
+
expect(out.descriptions[59].index).toBe(59); // global, not batch-local 9
|
|
44
|
+
});
|
|
45
|
+
it('re-bases each array independently when anchors and descriptions span different batch counts', async () => {
|
|
46
|
+
// 55 anchors (2 batches) + 5 descriptions (1 batch). Batch 1 carries anchors
|
|
47
|
+
// 50-54 but ZERO descriptions — proves the independent re-base never cross-
|
|
48
|
+
// contaminates: a batch-1 anchor index must not land on a batch-0 description's
|
|
49
|
+
// slot, and the empty desc chunk must produce no spurious entries.
|
|
50
|
+
apiCall.mockImplementation((_ep, opts) => resp({
|
|
51
|
+
anchors: opts.body.anchors.map((_, i) => ({ index: i, id: 'x' })),
|
|
52
|
+
descriptions: opts.body.descriptions.map((_, i) => ({ index: i, text: 'd' })),
|
|
53
|
+
}));
|
|
54
|
+
const anchors = Array.from({ length: 55 }, () => ({ brokenFragment: 'a', targetHeadingIds: ['x'] }));
|
|
55
|
+
const descriptions = Array.from({ length: 5 }, (_, i) => ({ title: `T${i}`, pageText: 'b' }));
|
|
56
|
+
const out = await requestAiFixes({ projectId: 'p', anchors, descriptions });
|
|
57
|
+
expect(apiCall).toHaveBeenCalledTimes(2); // max(2 anchor batches, 1 desc batch)
|
|
58
|
+
expect(out.anchors).toHaveLength(55);
|
|
59
|
+
expect(out.anchors.map((a) => a.index)).toEqual(Array.from({ length: 55 }, (_, i) => i)); // 0..54, contiguous
|
|
60
|
+
expect(out.descriptions).toHaveLength(5); // batch-1's empty desc chunk added nothing
|
|
61
|
+
expect(out.descriptions.map((d) => d.index)).toEqual([0, 1, 2, 3, 4]);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=ai-fix-client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-fix-client.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/ai-fix-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -166,6 +166,51 @@ describe('docs-config', () => {
|
|
|
166
166
|
const matches = result.match(/Missing required field "primary"/g);
|
|
167
167
|
expect(matches).toHaveLength(1);
|
|
168
168
|
});
|
|
169
|
+
it('filterNavigationAnyOfNoise: surfaces child error, drops sibling red herrings when tabs is the only key', () => {
|
|
170
|
+
// Simulates the real Ajv error set for a tabs-only navigation with a
|
|
171
|
+
// malformed tab entry. Red herrings: 6× required (one per other nav key)
|
|
172
|
+
// + 6× additionalProperties (one per non-matching sibling branch).
|
|
173
|
+
// Actionable child error: /navigation/tabs/0 missing 'tab' field.
|
|
174
|
+
const NAV_KEYS = ['products', 'languages', 'versions', 'tabs', 'dropdowns', 'groups', 'pages'];
|
|
175
|
+
const otherKeys = NAV_KEYS.filter((k) => k !== 'tabs');
|
|
176
|
+
const errors = [
|
|
177
|
+
// Sibling-branch "required" noise — each non-matching branch says its key is missing
|
|
178
|
+
...otherKeys.map((k, i) => ({
|
|
179
|
+
keyword: 'required',
|
|
180
|
+
instancePath: '/navigation',
|
|
181
|
+
params: { missingProperty: k },
|
|
182
|
+
message: `must have required property '${k}'`,
|
|
183
|
+
schemaPath: `#/anyOf/${i}/required`,
|
|
184
|
+
})),
|
|
185
|
+
// Sibling-branch "additionalProperties" noise — other branches reject "tabs"
|
|
186
|
+
...otherKeys.map((k, i) => ({
|
|
187
|
+
keyword: 'additionalProperties',
|
|
188
|
+
instancePath: '/navigation',
|
|
189
|
+
params: { additionalProperty: 'tabs' },
|
|
190
|
+
message: 'must NOT have additional properties',
|
|
191
|
+
schemaPath: `#/anyOf/${i}/additionalProperties`,
|
|
192
|
+
})),
|
|
193
|
+
// The REAL actionable error: malformed tab item at index 0
|
|
194
|
+
{
|
|
195
|
+
keyword: 'required',
|
|
196
|
+
instancePath: '/navigation/tabs/0',
|
|
197
|
+
params: { missingProperty: 'tab' },
|
|
198
|
+
message: "must have required property 'tab'",
|
|
199
|
+
schemaPath: '#/anyOf/3/properties/tabs/items/required',
|
|
200
|
+
},
|
|
201
|
+
];
|
|
202
|
+
const navigation = { tabs: [{ pages: ['intro'] }] };
|
|
203
|
+
const result = formatValidationErrors(errors, navigation);
|
|
204
|
+
// Must surface the child error
|
|
205
|
+
expect(result).toContain('/navigation/tabs/0');
|
|
206
|
+
// Must NOT show red-herring nav keys
|
|
207
|
+
expect(result).not.toContain('products');
|
|
208
|
+
expect(result).not.toContain('languages');
|
|
209
|
+
expect(result).not.toContain('versions');
|
|
210
|
+
expect(result).not.toContain('groups');
|
|
211
|
+
expect(result).not.toContain('dropdowns');
|
|
212
|
+
expect(result).not.toContain('pages');
|
|
213
|
+
});
|
|
169
214
|
});
|
|
170
215
|
describe('validateConfig', () => {
|
|
171
216
|
it('returns error for missing file', async () => {
|
|
@@ -222,6 +267,27 @@ describe('docs-config', () => {
|
|
|
222
267
|
await fs.rm(dir, { recursive: true, force: true });
|
|
223
268
|
}
|
|
224
269
|
});
|
|
270
|
+
it('pre-Ajv navigation message does not mention anchors', async () => {
|
|
271
|
+
const dir = await fs.mkdtemp(path.join(os.tmpdir(), 'jd-nav-empty-'));
|
|
272
|
+
try {
|
|
273
|
+
const cfg = path.join(dir, 'docs.json');
|
|
274
|
+
await fs.writeFile(cfg, JSON.stringify({ name: 'Test', theme: 'jam', navigation: {} }));
|
|
275
|
+
const result = await validateConfig(cfg);
|
|
276
|
+
expect(result.valid).toBe(false);
|
|
277
|
+
expect(result.error).not.toContain('anchors');
|
|
278
|
+
// Must list the valid nav keys
|
|
279
|
+
expect(result.error).toContain('tabs');
|
|
280
|
+
expect(result.error).toContain('groups');
|
|
281
|
+
expect(result.error).toContain('pages');
|
|
282
|
+
expect(result.error).toContain('dropdowns');
|
|
283
|
+
expect(result.error).toContain('versions');
|
|
284
|
+
expect(result.error).toContain('languages');
|
|
285
|
+
expect(result.error).toContain('products');
|
|
286
|
+
}
|
|
287
|
+
finally {
|
|
288
|
+
await fs.rm(dir, { recursive: true, force: true });
|
|
289
|
+
}
|
|
290
|
+
});
|
|
225
291
|
});
|
|
226
292
|
describe('getAllPagePaths', () => {
|
|
227
293
|
it('extracts paths from anchors with groups', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs-config.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/docs-config.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"docs-config.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/docs-config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-ai-fallback.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/fix-ai-fallback.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { buildAiRequest, anchorEditsFromResponse, dropResolvedSkips, planDescriptionWrites } from '../../commands/fix.js';
|
|
3
|
+
const headings = {
|
|
4
|
+
'ai/selectors': [{ id: 'enable-ai' }, { id: 'ai-strategies' }],
|
|
5
|
+
};
|
|
6
|
+
const headingsOf = (p) => headings[p] ?? null;
|
|
7
|
+
describe('buildAiRequest', () => {
|
|
8
|
+
it('turns a needs-AI skipped broken_link into an anchor task', () => {
|
|
9
|
+
const input = {
|
|
10
|
+
skipped: [{ warning: { type: 'broken_link', file: 'a.mdx', line: 1, link: '/ai/selectors#ai-strat' }, reason: 'no confident deterministic fix — structures diverge or target is ambiguous (needs AI)' }],
|
|
11
|
+
missing: [{ file: 'setup.mdx', title: 'Setup', pageText: 'body' }],
|
|
12
|
+
hostAtDocs: false,
|
|
13
|
+
headingsOf,
|
|
14
|
+
resolveTarget: () => 'ai/selectors',
|
|
15
|
+
};
|
|
16
|
+
const { request, anchorMeta } = buildAiRequest(input);
|
|
17
|
+
expect(request.anchors).toEqual([{ brokenFragment: 'ai-strat', targetHeadingIds: ['enable-ai', 'ai-strategies'] }]);
|
|
18
|
+
expect(request.descriptions[0].title).toBe('Setup');
|
|
19
|
+
expect(anchorMeta[0].targetPage).toBe('ai/selectors');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe('anchorEditsFromResponse', () => {
|
|
23
|
+
const anchorMeta = [{ warning: { type: 'broken_link', file: 'a.mdx', line: 1, link: '/ai/selectors#ai-strat' }, targetPage: 'ai/selectors', linkPath: '/ai/selectors', fragment: 'ai-strat' }];
|
|
24
|
+
it('keeps a validated AI id and rewrites the href', () => {
|
|
25
|
+
const fixed = anchorEditsFromResponse({ anchors: [{ index: 0, id: 'ai-strategies' }], descriptions: [] }, anchorMeta, headingsOf);
|
|
26
|
+
expect(fixed[0].edits[0].newText).toBe('/ai/selectors#ai-strategies');
|
|
27
|
+
});
|
|
28
|
+
it('discards an AI id that is NOT a real heading (hallucination guard)', () => {
|
|
29
|
+
const fixed = anchorEditsFromResponse({ anchors: [{ index: 0, id: 'totally-made-up' }], descriptions: [] }, anchorMeta, headingsOf);
|
|
30
|
+
expect(fixed).toHaveLength(0);
|
|
31
|
+
});
|
|
32
|
+
it('drops a null AI result', () => {
|
|
33
|
+
const fixed = anchorEditsFromResponse({ anchors: [{ index: 0, id: null }], descriptions: [] }, anchorMeta, headingsOf);
|
|
34
|
+
expect(fixed).toHaveLength(0);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('dropResolvedSkips', () => {
|
|
38
|
+
it('removes AI-resolved warnings from skipped (no double-count)', () => {
|
|
39
|
+
const w = { type: 'broken_link', file: 'a.mdx', line: 1, link: '/x#y' };
|
|
40
|
+
const skipped = [
|
|
41
|
+
{ warning: w, reason: 'needs AI' },
|
|
42
|
+
{ warning: { type: 'broken_link', file: 'b.mdx', line: 2, link: '/z#q' }, reason: 'needs AI' },
|
|
43
|
+
];
|
|
44
|
+
const resolved = [{ warning: w, edits: [] }];
|
|
45
|
+
const out = dropResolvedSkips(skipped, resolved);
|
|
46
|
+
expect(out).toHaveLength(1);
|
|
47
|
+
expect(out[0].warning.file).toBe('b.mdx');
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe('planDescriptionWrites', () => {
|
|
51
|
+
const missing = [{ file: 'a.mdx', title: 'A', pageText: 'x' }, { file: 'b.mdx', title: 'B', pageText: 'y' }];
|
|
52
|
+
const descriptions = [{ index: 0, text: 'desc a' }, { index: 1, text: 'desc b' }];
|
|
53
|
+
it('returns writable descriptions for an interactive TTY run', () => {
|
|
54
|
+
const r = planDescriptionWrites({ descriptions, missing: missing, cap: 25, isTTY: true, dryRun: false });
|
|
55
|
+
expect(r.toReview.map((d) => d.file)).toEqual(['a.mdx', 'b.mdx']);
|
|
56
|
+
expect(r.skippedNoTty).toBe(false);
|
|
57
|
+
expect(r.overflow).toBe(0);
|
|
58
|
+
});
|
|
59
|
+
it('skips ALL writes in a non-TTY run (never auto-writes unattended — the --yes safety guard)', () => {
|
|
60
|
+
const r = planDescriptionWrites({ descriptions, missing: missing, cap: 25, isTTY: false, dryRun: false });
|
|
61
|
+
expect(r.toReview).toEqual([]);
|
|
62
|
+
expect(r.skippedNoTty).toBe(true);
|
|
63
|
+
});
|
|
64
|
+
it('still lists proposals under non-TTY dry-run (no write, but visible)', () => {
|
|
65
|
+
const r = planDescriptionWrites({ descriptions, missing: missing, cap: 25, isTTY: false, dryRun: true });
|
|
66
|
+
expect(r.toReview).toHaveLength(2);
|
|
67
|
+
expect(r.skippedNoTty).toBe(false);
|
|
68
|
+
});
|
|
69
|
+
it('caps per run and reports the overflow', () => {
|
|
70
|
+
const r = planDescriptionWrites({ descriptions, missing: missing, cap: 1, isTTY: true, dryRun: false });
|
|
71
|
+
expect(r.toReview).toHaveLength(1);
|
|
72
|
+
expect(r.overflow).toBe(1);
|
|
73
|
+
});
|
|
74
|
+
it('drops a description whose page is not in `missing` and one with empty text', () => {
|
|
75
|
+
const r = planDescriptionWrites({
|
|
76
|
+
descriptions: [{ index: 0, text: '' }, { index: 9, text: 'orphan' }],
|
|
77
|
+
missing: missing, cap: 25, isTTY: true, dryRun: false,
|
|
78
|
+
});
|
|
79
|
+
expect(r.toReview).toEqual([]);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=fix-ai-fallback.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-ai-fallback.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/fix-ai-fallback.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-engine-sync.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/fix-engine-sync.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// builder/cli/src/__tests__/unit/fix-engine-sync.test.ts
|
|
2
|
+
import { describe, it, expect } from 'vitest';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const stripHeader = (s) => s.replace(/^\/\*\*[\s\S]*?\*\/\s*\n/, '');
|
|
8
|
+
describe('fix-engine sync', () => {
|
|
9
|
+
it('CLI body matches build-service canonical (excluding header)', () => {
|
|
10
|
+
const cli = stripHeader(fs.readFileSync(path.resolve(__dirname, '../../lib/fix-engine.ts'), 'utf-8'));
|
|
11
|
+
const canonical = stripHeader(fs.readFileSync(path.resolve(__dirname, '../../../../build-service/lib/fix-engine.ts'), 'utf-8'));
|
|
12
|
+
expect(cli).not.toBe('');
|
|
13
|
+
expect(cli).toBe(canonical);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=fix-engine-sync.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-engine-sync.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/fix-engine-sync.test.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,WAAW,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;AAE7E,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACtG,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,6CAA6C,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAChI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/fix.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// builder/cli/src/__tests__/unit/fix.test.ts
|
|
2
|
+
import { describe, it, expect } from 'vitest';
|
|
3
|
+
import { planFixes, applyPlanToFiles } from '../../commands/fix.js';
|
|
4
|
+
import { extractHeadings } from '../../lib/heading-extractor.js';
|
|
5
|
+
const LOCALES = { codes: ['en', 'fr'], defaultCode: 'en' };
|
|
6
|
+
const PAGES = {
|
|
7
|
+
'ai/selectors': '## Enable AI\n\n## AI strategies\n',
|
|
8
|
+
'fr/ai/selectors': '## Activer l\'IA\n\n## Stratégies IA\n',
|
|
9
|
+
};
|
|
10
|
+
const headingsOf = (p) => (p in PAGES ? extractHeadings(PAGES[p]) : null);
|
|
11
|
+
describe('planFixes', () => {
|
|
12
|
+
const deps = { hostAtDocs: false, locales: LOCALES, headingsOf, pageExists: (p) => p in PAGES };
|
|
13
|
+
it('produces an edit per fixable warning and records skips', () => {
|
|
14
|
+
const warnings = [
|
|
15
|
+
{ type: 'broken_link', file: 'fr/ai/overview.mdx', line: 9, link: '/fr/ai/selectors#ai-strategies' },
|
|
16
|
+
{ type: 'broken_link', file: 'fr/x.mdx', line: 2, link: '/does/not/exist#y' },
|
|
17
|
+
];
|
|
18
|
+
const plan = planFixes(warnings, deps);
|
|
19
|
+
expect(plan.fixed).toHaveLength(1);
|
|
20
|
+
expect(plan.fixed[0].edits[0].newText).toContain('#stratégies-ia');
|
|
21
|
+
expect(plan.skipped[0].warning.link).toBe('/does/not/exist#y');
|
|
22
|
+
});
|
|
23
|
+
it('returns an empty plan for no warnings', () => { expect(planFixes([], deps)).toEqual({ fixed: [], skipped: [] }); });
|
|
24
|
+
it('resolves /docs/-prefixed links when hostAtDocs is true', () => {
|
|
25
|
+
const plan = planFixes([{ type: 'broken_link', file: 'fr/ai/overview.mdx', line: 9, link: '/docs/fr/ai/selectors#ai-strategies' }], { ...deps, hostAtDocs: true });
|
|
26
|
+
expect(plan.fixed[0].edits[0].newText).toContain('#stratégies-ia');
|
|
27
|
+
});
|
|
28
|
+
it('does not cross-locale-map in a non-i18n project', () => {
|
|
29
|
+
const plan = planFixes([{ type: 'broken_link', file: 'ai/overview.mdx', line: 9, link: '/ai/selectors#nope' }], { ...deps, locales: { codes: [], defaultCode: '' } });
|
|
30
|
+
expect(plan.fixed).toHaveLength(0);
|
|
31
|
+
expect(plan.skipped).toHaveLength(1);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
describe('applyPlanToFiles', () => {
|
|
35
|
+
const plan = {
|
|
36
|
+
fixed: [
|
|
37
|
+
{ warning: { type: 'broken_link', file: 'a.mdx', line: 1, link: '/x#old' }, edits: [{ file: 'a.mdx', line: 1, oldText: '/x#old', newText: '/x#new' }] },
|
|
38
|
+
{ warning: { type: 'broken_link', file: 'b.mdx', line: 1, link: '/y#old' }, edits: [{ file: 'b.mdx', line: 1, oldText: '/y#old', newText: '/y#new' }] },
|
|
39
|
+
],
|
|
40
|
+
skipped: [],
|
|
41
|
+
};
|
|
42
|
+
it('writes all files when every edit applies', () => {
|
|
43
|
+
const writes = {};
|
|
44
|
+
const io = { readFile: (p) => (p.endsWith('a.mdx') ? 'see /x#old' : 'see /y#old'), writeFile: (p, c) => { writes[p] = c; } };
|
|
45
|
+
const outcome = applyPlanToFiles(plan, '/proj', io);
|
|
46
|
+
expect(outcome.written.sort()).toEqual(['a.mdx', 'b.mdx']);
|
|
47
|
+
expect(outcome.failed).toHaveLength(0);
|
|
48
|
+
});
|
|
49
|
+
it('records a file as failed (others still written) when its source changed since the scan', () => {
|
|
50
|
+
const writes = {};
|
|
51
|
+
const io = {
|
|
52
|
+
readFile: (p) => (p.endsWith('a.mdx') ? 'stale, no anchor here' : 'see /y#old'),
|
|
53
|
+
writeFile: (p, c) => { writes[p] = c; },
|
|
54
|
+
};
|
|
55
|
+
const outcome = applyPlanToFiles(plan, '/proj', io);
|
|
56
|
+
expect(outcome.written).toEqual(['b.mdx']);
|
|
57
|
+
expect(outcome.failed.map((f) => f.file)).toEqual(['a.mdx']);
|
|
58
|
+
expect(writes['/proj/a.mdx']).toBeUndefined();
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=fix.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix.test.js","sourceRoot":"","sources":["../../../src/__tests__/unit/fix.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter-write.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/unit/frontmatter-write.test.ts"],"names":[],"mappings":""}
|