jamdesk 1.1.69 → 1.1.71

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 (75) hide show
  1. package/dist/__tests__/integration/validate.integration.test.js +21 -0
  2. package/dist/__tests__/integration/validate.integration.test.js.map +1 -1
  3. package/dist/__tests__/unit/extract-hooks.test.js +102 -1
  4. package/dist/__tests__/unit/extract-hooks.test.js.map +1 -1
  5. package/dist/__tests__/unit/mdx-validator.test.js +22 -0
  6. package/dist/__tests__/unit/mdx-validator.test.js.map +1 -1
  7. package/dist/__tests__/unit/migrate-mdx.test.js +121 -1
  8. package/dist/__tests__/unit/migrate-mdx.test.js.map +1 -1
  9. package/dist/__tests__/unit/relative-mdx-imports.test.d.ts +2 -0
  10. package/dist/__tests__/unit/relative-mdx-imports.test.d.ts.map +1 -0
  11. package/dist/__tests__/unit/relative-mdx-imports.test.js +452 -0
  12. package/dist/__tests__/unit/relative-mdx-imports.test.js.map +1 -0
  13. package/dist/__tests__/unit/relocate-snippets.test.d.ts +2 -0
  14. package/dist/__tests__/unit/relocate-snippets.test.d.ts.map +1 -0
  15. package/dist/__tests__/unit/relocate-snippets.test.js +542 -0
  16. package/dist/__tests__/unit/relocate-snippets.test.js.map +1 -0
  17. package/dist/__tests__/unit/run-build-script.test.js +23 -1
  18. package/dist/__tests__/unit/run-build-script.test.js.map +1 -1
  19. package/dist/__tests__/unit/warn-relative-imports.test.d.ts +2 -0
  20. package/dist/__tests__/unit/warn-relative-imports.test.d.ts.map +1 -0
  21. package/dist/__tests__/unit/warn-relative-imports.test.js +44 -0
  22. package/dist/__tests__/unit/warn-relative-imports.test.js.map +1 -0
  23. package/dist/commands/dev.d.ts.map +1 -1
  24. package/dist/commands/dev.js +22 -8
  25. package/dist/commands/dev.js.map +1 -1
  26. package/dist/commands/migrate/convert-mdx.d.ts +5 -1
  27. package/dist/commands/migrate/convert-mdx.d.ts.map +1 -1
  28. package/dist/commands/migrate/convert-mdx.js +19 -6
  29. package/dist/commands/migrate/convert-mdx.js.map +1 -1
  30. package/dist/commands/migrate/extract-hooks.d.ts +26 -0
  31. package/dist/commands/migrate/extract-hooks.d.ts.map +1 -1
  32. package/dist/commands/migrate/extract-hooks.js +71 -12
  33. package/dist/commands/migrate/extract-hooks.js.map +1 -1
  34. package/dist/commands/migrate/fix-mdx-syntax.d.ts +38 -0
  35. package/dist/commands/migrate/fix-mdx-syntax.d.ts.map +1 -0
  36. package/dist/commands/migrate/fix-mdx-syntax.js +80 -0
  37. package/dist/commands/migrate/fix-mdx-syntax.js.map +1 -0
  38. package/dist/commands/migrate/index.d.ts.map +1 -1
  39. package/dist/commands/migrate/index.js +165 -3
  40. package/dist/commands/migrate/index.js.map +1 -1
  41. package/dist/commands/migrate/relocate-snippets.d.ts +30 -0
  42. package/dist/commands/migrate/relocate-snippets.d.ts.map +1 -0
  43. package/dist/commands/migrate/relocate-snippets.js +357 -0
  44. package/dist/commands/migrate/relocate-snippets.js.map +1 -0
  45. package/dist/commands/validate.d.ts.map +1 -1
  46. package/dist/commands/validate.js +31 -1
  47. package/dist/commands/validate.js.map +1 -1
  48. package/dist/lib/mdx-syntax-fixes.d.ts +14 -0
  49. package/dist/lib/mdx-syntax-fixes.d.ts.map +1 -0
  50. package/dist/lib/mdx-syntax-fixes.js +38 -0
  51. package/dist/lib/mdx-syntax-fixes.js.map +1 -0
  52. package/dist/lib/mdx-validator.d.ts +11 -2
  53. package/dist/lib/mdx-validator.d.ts.map +1 -1
  54. package/dist/lib/mdx-validator.js +41 -4
  55. package/dist/lib/mdx-validator.js.map +1 -1
  56. package/dist/lib/relative-mdx-imports.d.ts +44 -0
  57. package/dist/lib/relative-mdx-imports.d.ts.map +1 -0
  58. package/dist/lib/relative-mdx-imports.js +145 -0
  59. package/dist/lib/relative-mdx-imports.js.map +1 -0
  60. package/dist/lib/run-build-script.d.ts.map +1 -1
  61. package/dist/lib/run-build-script.js +7 -0
  62. package/dist/lib/run-build-script.js.map +1 -1
  63. package/dist/lib/warn-relative-imports.d.ts +2 -0
  64. package/dist/lib/warn-relative-imports.d.ts.map +1 -0
  65. package/dist/lib/warn-relative-imports.js +29 -0
  66. package/dist/lib/warn-relative-imports.js.map +1 -0
  67. package/package.json +1 -1
  68. package/vendored/app/(unlock)/jd/unlock/page.tsx +32 -0
  69. package/vendored/app/[[...slug]]/page.tsx +63 -15
  70. package/vendored/components/navigation/SocialFooter.tsx +4 -18
  71. package/vendored/lib/branding-url.ts +9 -0
  72. package/vendored/lib/layout-helpers.tsx +7 -9
  73. package/vendored/lib/preprocess-mdx.ts +42 -0
  74. package/vendored/scripts/compile-snippets.cjs +50 -7
  75. package/vendored/workspace-package-lock.json +3 -3
@@ -0,0 +1,357 @@
1
+ // Auto-relocate orphan snippets during `jamdesk migrate`.
2
+ //
3
+ // Mintlify lets users put MDX snippets anywhere and import them with
4
+ // parent-relative paths (`import X from "../foo/bar.mdx"`). Jamdesk only
5
+ // resolves root-relative `/snippets/*` imports. This module detects MDX
6
+ // files used as snippets but living outside `/snippets/`, and moves
7
+ // them in-place — rewriting parent-relative importers to root-relative.
8
+ //
9
+ // Heuristic — a file is relocated only if ALL of the following hold:
10
+ // A — it's imported by >=1 other MDX (parent-relative import)
11
+ // B — it's NOT in docs.json navigation (or referenced by a redirect)
12
+ // C — it's NOT the target of a `[text](path)`, JSX `href|to|path|src`,
13
+ // or reference-style `[ref]: path` link from any MDX
14
+ // D — its filename isn't reserved (`index`, `404`, `home`, etc.)
15
+ // E — its frontmatter has no `title` field (page-shaped frontmatter)
16
+ // F — it doesn't itself import a real page (back-edge would break)
17
+ //
18
+ // Safety bounds — the heuristic refuses to act when the project shape
19
+ // makes it untrustworthy:
20
+ // • aborts entirely if `navigation` resolves to zero pages (without
21
+ // a real nav, signal B is unreliable and every imported file looks
22
+ // like a snippet)
23
+ // • aborts if the planned moves exceed max(5, 25% of all MDX files)
24
+ //
25
+ // Destination preserves the relative path: `<rel>` -> `snippets/<rel>`
26
+ // so locale-prefixed snippets (`de/foo/bar.mdx`) don't collide across
27
+ // languages. Idempotent: anything already under `snippets/` is skipped.
28
+ import fs from 'fs-extra';
29
+ import path from 'node:path';
30
+ import { glob } from 'glob';
31
+ import { detectRelativeMdxImports, stripFencedCodeBlocks, } from '../../lib/relative-mdx-imports.js';
32
+ import { extractNavigationPages } from '../../lib/navigation-validator.js';
33
+ import { parseFrontmatterLenient } from '../../lib/frontmatter-utils.js';
34
+ const MARKDOWN_LINK_RE = /\[(?:[^\]]*)\]\(([^)\s]+)(?:\s+"[^"]*")?\)/g;
35
+ // JSX nav/asset props: `href`, `to`, `path` (router patterns), `src`
36
+ // (embeds, iframes, video sources). Without these, a page reachable
37
+ // only via `<Link to=...>` or `<Embed src=...>` would fall through
38
+ // signal C and be misclassified as an orphan snippet.
39
+ const JSX_NAV_PROP_RE = /\b(?:href|to|path|src)\s*=\s*["']([^"']+)["']/g;
40
+ const REF_LINK_DEF_RE = /^\s{0,3}\[[^\]]+\]:\s*(\S+)/gm;
41
+ const RESERVED_PAGE_NAMES = new Set([
42
+ 'index',
43
+ '404',
44
+ '500',
45
+ 'home',
46
+ 'readme',
47
+ '_app',
48
+ '_document',
49
+ '_layout',
50
+ '_error',
51
+ ]);
52
+ // Two-stage safety bound:
53
+ // • absolute: refuse if planned > max(FLOOR, total * PERCENTAGE) — protects
54
+ // mid-to-large projects where a misclassification would move dozens
55
+ // of files. The floor (5) lets legitimate small relocations through.
56
+ // • ratio: refuse if planned/total > RATIO regardless of count — closes
57
+ // the floor's blind spot: a 4-file project with 4 planned moves
58
+ // should still abort even though 4 < FLOOR.
59
+ const SAFETY_BOUND_PERCENTAGE = 0.25;
60
+ const SAFETY_BOUND_FLOOR = 5;
61
+ const SAFETY_BOUND_RATIO = 0.5;
62
+ function addMdxVariants(base, set) {
63
+ if (base.endsWith('.mdx') || base.endsWith('.md')) {
64
+ set.add(base);
65
+ return;
66
+ }
67
+ set.add(`${base}.mdx`);
68
+ set.add(`${base}.md`);
69
+ }
70
+ function collectLinkTargets(stripped, sourcePath, projectDir, out) {
71
+ for (const re of [MARKDOWN_LINK_RE, JSX_NAV_PROP_RE, REF_LINK_DEF_RE]) {
72
+ re.lastIndex = 0;
73
+ let m;
74
+ while ((m = re.exec(stripped)) !== null) {
75
+ let url = m[1];
76
+ if (!url)
77
+ continue;
78
+ if (/^(?:[a-z][a-z0-9+\-.]*:|#)/i.test(url))
79
+ continue;
80
+ url = url.split('#')[0].split('?')[0];
81
+ if (!url)
82
+ continue;
83
+ const base = url.startsWith('/')
84
+ ? path.join(projectDir, url.slice(1))
85
+ : path.resolve(path.dirname(sourcePath), url);
86
+ addMdxVariants(base, out);
87
+ }
88
+ }
89
+ }
90
+ function hasFrontmatterTitle(content) {
91
+ if (!content.startsWith('---'))
92
+ return false;
93
+ try {
94
+ const { data } = parseFrontmatterLenient(content);
95
+ return typeof data.title === 'string' && data.title.trim().length > 0;
96
+ }
97
+ catch {
98
+ return false;
99
+ }
100
+ }
101
+ async function buildProjectGraph(projectDir, allMdxFiles) {
102
+ const importedBy = new Map();
103
+ const imports = new Map();
104
+ const linked = new Set();
105
+ const pageShaped = new Set();
106
+ await Promise.all(allMdxFiles.map(async (file) => {
107
+ let content;
108
+ try {
109
+ content = await fs.readFile(file, 'utf-8');
110
+ }
111
+ catch {
112
+ return;
113
+ }
114
+ // Strip fenced code blocks once — both link extraction and import
115
+ // detection need the same stripped view, so don't pay for the regex
116
+ // pass twice per file.
117
+ const stripped = stripFencedCodeBlocks(content);
118
+ collectLinkTargets(stripped, file, projectDir, linked);
119
+ if (hasFrontmatterTitle(content)) {
120
+ pageShaped.add(file);
121
+ }
122
+ const detected = detectRelativeMdxImports(stripped, true);
123
+ for (const imp of detected) {
124
+ const resolved = path.resolve(path.dirname(file), imp.specifier);
125
+ if (!(await fs.pathExists(resolved)))
126
+ continue;
127
+ let by = importedBy.get(resolved);
128
+ if (!by) {
129
+ by = new Set();
130
+ importedBy.set(resolved, by);
131
+ }
132
+ by.add(file);
133
+ let outgoing = imports.get(file);
134
+ if (!outgoing) {
135
+ outgoing = new Set();
136
+ imports.set(file, outgoing);
137
+ }
138
+ outgoing.add(resolved);
139
+ }
140
+ }));
141
+ return { importedBy, imports, linked, pageShaped };
142
+ }
143
+ function buildNavSet(config, projectDir) {
144
+ const out = new Set();
145
+ const addPath = (p) => {
146
+ let cleaned = p.split('#')[0].split('?')[0];
147
+ if (cleaned.startsWith('http://') || cleaned.startsWith('https://'))
148
+ return;
149
+ if (cleaned.startsWith('/'))
150
+ cleaned = cleaned.slice(1);
151
+ if (!cleaned)
152
+ return;
153
+ addMdxVariants(path.join(projectDir, cleaned), out);
154
+ };
155
+ const pages = extractNavigationPages(config?.navigation);
156
+ for (const p of pages)
157
+ addPath(p);
158
+ // A page that exists only as a redirect target (or source) is still a
159
+ // real page — kept around for old URLs. Counted separately so a
160
+ // redirect-only docs.json doesn't disarm the empty-nav abort.
161
+ const redirects = config?.redirects;
162
+ if (Array.isArray(redirects)) {
163
+ for (const r of redirects) {
164
+ if (typeof r?.source === 'string')
165
+ addPath(r.source);
166
+ if (typeof r?.destination === 'string')
167
+ addPath(r.destination);
168
+ }
169
+ }
170
+ return { set: out, navigationPageCount: pages.length };
171
+ }
172
+ async function rewriteImporterImports(importerPath, oldAbs, newSpec) {
173
+ const content = await fs.readFile(importerPath, 'utf-8');
174
+ const detected = detectRelativeMdxImports(content);
175
+ if (detected.length === 0)
176
+ return false;
177
+ const importerDir = path.dirname(importerPath);
178
+ let next = content;
179
+ let changed = false;
180
+ for (const m of detected) {
181
+ const resolved = path.resolve(importerDir, m.specifier);
182
+ if (resolved !== oldAbs)
183
+ continue;
184
+ const newImport = m.raw.replace(m.specifier, () => newSpec);
185
+ next = next.replace(m.raw, () => newImport);
186
+ changed = true;
187
+ }
188
+ if (changed) {
189
+ await fs.writeFile(importerPath, next, 'utf-8');
190
+ }
191
+ return changed;
192
+ }
193
+ function findPageImport(outgoing, navSet) {
194
+ if (!outgoing)
195
+ return undefined;
196
+ for (const target of outgoing) {
197
+ if (navSet.has(target))
198
+ return target;
199
+ }
200
+ return undefined;
201
+ }
202
+ function isReservedName(absPath) {
203
+ const base = path.basename(absPath).replace(/\.(mdx|md)$/i, '').toLowerCase();
204
+ return RESERVED_PAGE_NAMES.has(base);
205
+ }
206
+ async function filesAreByteEqual(a, b) {
207
+ // Compare size first to short-circuit on the common no-match case without
208
+ // reading both files. Any difference in length means contents differ.
209
+ const [sa, sb] = await Promise.all([fs.stat(a), fs.stat(b)]);
210
+ if (sa.size !== sb.size)
211
+ return false;
212
+ const [ba, bb] = await Promise.all([fs.readFile(a), fs.readFile(b)]);
213
+ return ba.equals(bb);
214
+ }
215
+ async function classify(importee, ctx) {
216
+ const { projectDir, snippetsRoot, graph, navSet } = ctx;
217
+ const rel = path.relative(projectDir, importee);
218
+ if (rel.startsWith(`snippets${path.sep}`) || rel === 'snippets')
219
+ return null;
220
+ if (navSet.has(importee)) {
221
+ return { skip: { file: rel, reason: 'referenced as page in docs.json navigation or redirects' } };
222
+ }
223
+ if (graph.linked.has(importee)) {
224
+ return { skip: { file: rel, reason: 'linked as a page from another MDX file' } };
225
+ }
226
+ if (isReservedName(importee)) {
227
+ return { skip: { file: rel, reason: `reserved page name (${path.basename(importee)})` } };
228
+ }
229
+ if (graph.pageShaped.has(importee)) {
230
+ return {
231
+ skip: {
232
+ file: rel,
233
+ reason: 'has page-shaped frontmatter (title) — review manually',
234
+ },
235
+ };
236
+ }
237
+ const pageImport = findPageImport(graph.imports.get(importee), navSet);
238
+ if (pageImport) {
239
+ return {
240
+ skip: {
241
+ file: rel,
242
+ reason: `imports the page ${path.relative(projectDir, pageImport)} — relocation would break the back-edge`,
243
+ },
244
+ };
245
+ }
246
+ const destAbs = path.join(snippetsRoot, rel);
247
+ if (await fs.pathExists(destAbs)) {
248
+ // Dest exists. If it's byte-identical to the source, this is a leftover
249
+ // from a previous successful relocate where the user restored the source
250
+ // via `git checkout` (or a stash-pop). Resume safely: drop the source +
251
+ // rewrite importers — the dest is already canonical, no data loss.
252
+ // Different content means the user has hand-edited one side; skip and
253
+ // let them resolve manually (case where data loss IS possible).
254
+ if (await filesAreByteEqual(importee, destAbs)) {
255
+ return { move: { importee, rel, destAbs, resumed: true } };
256
+ }
257
+ return {
258
+ skip: {
259
+ file: rel,
260
+ reason: `would overwrite existing ${path.relative(projectDir, destAbs)} ` +
261
+ `(content differs from source — review manually)`,
262
+ },
263
+ };
264
+ }
265
+ return { move: { importee, rel, destAbs } };
266
+ }
267
+ function computeAbortReason(planned, totalFiles, navigationPageCount) {
268
+ if (planned === 0)
269
+ return undefined;
270
+ if (navigationPageCount === 0) {
271
+ return (`docs.json has no navigation pages — without published pages, ` +
272
+ `every imported file looks like a snippet. Refusing to move ` +
273
+ `${planned} file(s). Add navigation entries first.`);
274
+ }
275
+ const threshold = Math.max(SAFETY_BOUND_FLOOR, Math.floor(totalFiles * SAFETY_BOUND_PERCENTAGE));
276
+ if (planned > threshold) {
277
+ return (`Would move ${planned} of ${totalFiles} MDX file(s) — exceeds ` +
278
+ `the ${Math.floor(SAFETY_BOUND_PERCENTAGE * 100)}% safety bound. ` +
279
+ `Aborting. Review docs.json navigation and re-run.`);
280
+ }
281
+ if (totalFiles > 0 && planned / totalFiles > SAFETY_BOUND_RATIO) {
282
+ return (`Would move ${planned} of ${totalFiles} MDX file(s) — that's ` +
283
+ `${Math.round((planned / totalFiles) * 100)}% of the project. ` +
284
+ `Aborting. Review docs.json navigation and re-run.`);
285
+ }
286
+ return undefined;
287
+ }
288
+ export async function relocateOrphanSnippets(projectDir, config) {
289
+ const allMdxFiles = await glob('**/*.{mdx,md}', {
290
+ cwd: projectDir,
291
+ ignore: ['**/node_modules/**', '**/.git/**'],
292
+ absolute: true,
293
+ });
294
+ const graph = await buildProjectGraph(projectDir, allMdxFiles);
295
+ const { set: navSet, navigationPageCount } = buildNavSet(config, projectDir);
296
+ const ctx = {
297
+ projectDir,
298
+ snippetsRoot: path.join(projectDir, 'snippets'),
299
+ graph,
300
+ navSet,
301
+ };
302
+ // Sort for deterministic output (test stability) and to make
303
+ // snippet-imports-snippet ordering predictable when both qualify.
304
+ const candidates = [...graph.importedBy.keys()].sort();
305
+ const planned = [];
306
+ const skipped = [];
307
+ for (const importee of candidates) {
308
+ const decision = await classify(importee, ctx);
309
+ if (!decision)
310
+ continue;
311
+ if ('move' in decision)
312
+ planned.push(decision.move);
313
+ else
314
+ skipped.push(decision.skip);
315
+ }
316
+ const abortReason = computeAbortReason(planned.length, allMdxFiles.length, navigationPageCount);
317
+ if (abortReason) {
318
+ return {
319
+ moves: [],
320
+ skipped: [
321
+ ...skipped,
322
+ ...planned.map((p) => ({ file: p.rel, reason: 'aborted by safety bound' })),
323
+ ],
324
+ aborted: { reason: abortReason },
325
+ };
326
+ }
327
+ const moves = [];
328
+ const moveMap = new Map();
329
+ for (const p of planned) {
330
+ if (p.resumed) {
331
+ // Dest already exists with identical content — drop the source so we
332
+ // don't end up with two copies on disk. fs.remove tolerates already-
333
+ // missing files but the importee was just confirmed to exist above.
334
+ await fs.remove(p.importee);
335
+ }
336
+ else {
337
+ await fs.ensureDir(path.dirname(p.destAbs));
338
+ await fs.move(p.importee, p.destAbs);
339
+ }
340
+ moveMap.set(p.importee, p.destAbs);
341
+ const newSpec = `/snippets/${p.rel.replaceAll(path.sep, '/')}`;
342
+ const importers = graph.importedBy.get(p.importee);
343
+ if (importers) {
344
+ for (const importer of importers) {
345
+ const currentImporterPath = moveMap.get(importer) ?? importer;
346
+ await rewriteImporterImports(currentImporterPath, p.importee, newSpec);
347
+ }
348
+ }
349
+ moves.push({
350
+ from: p.rel,
351
+ to: path.relative(projectDir, p.destAbs),
352
+ ...(p.resumed && { resumed: true }),
353
+ });
354
+ }
355
+ return { moves, skipped };
356
+ }
357
+ //# sourceMappingURL=relocate-snippets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relocate-snippets.js","sourceRoot":"","sources":["../../../src/commands/migrate/relocate-snippets.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAUD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+MtE"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAUD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAgPtE"}
@@ -14,6 +14,7 @@ import { validateNavigationPages } from '../lib/navigation-validator.js';
14
14
  import { extractAllPages } from '../lib/mdx-validator.js';
15
15
  import { validateBrandingAssets } from '../lib/validate-branding.js';
16
16
  import { ensureDependencies } from '../lib/deps.js';
17
+ import { rewriteRelativeMdxImports } from '../lib/relative-mdx-imports.js';
17
18
  export async function validate(options) {
18
19
  const { verbose } = options;
19
20
  const projectDir = process.cwd();
@@ -113,6 +114,7 @@ export async function validate(options) {
113
114
  const { checkForDeprecatedComponents } = await import('../lib/deprecated-components.js');
114
115
  const { glob } = await import('glob');
115
116
  const allDeprecatedErrors = [];
117
+ const relativeImportWarnings = [];
116
118
  // Get all page paths from navigation (handles all formats: tabs, anchors, groups, languages, flat array)
117
119
  const pagePaths = extractAllPages(result.config?.navigation);
118
120
  // Check page files
@@ -132,7 +134,8 @@ export async function validate(options) {
132
134
  const relPath = path.relative(projectDir, filePath);
133
135
  allDeprecatedErrors.push(...checkForDeprecatedComponents(content, relPath));
134
136
  }
135
- // Check snippet files
137
+ // Check snippet files for deprecated components (relative imports are
138
+ // collected separately below in a project-wide walk).
136
139
  const snippetsDir = path.join(projectDir, 'snippets');
137
140
  if (await fs.pathExists(snippetsDir)) {
138
141
  const snippetFiles = await glob('**/*.{mdx,md}', { cwd: snippetsDir });
@@ -142,6 +145,33 @@ export async function validate(options) {
142
145
  allDeprecatedErrors.push(...checkForDeprecatedComponents(content, `snippets/${file}`));
143
146
  }
144
147
  }
148
+ // Walk EVERY .mdx file (not just nav-referenced pages) so validate matches
149
+ // the build-service skip detector — orphan pages with bad imports fail to
150
+ // compile too, and the user needs to know about them. The rewriter
151
+ // classifies each import: rewrites[] for auto-fixable, warnings[] for
152
+ // ones that need a manual action.
153
+ const allMdxFiles = await glob('**/*.{mdx,md}', {
154
+ cwd: projectDir,
155
+ ignore: ['**/node_modules/**', '**/.git/**'],
156
+ });
157
+ for (const file of allMdxFiles) {
158
+ const filePath = path.join(projectDir, file);
159
+ const content = await fs.readFile(filePath, 'utf8');
160
+ const { rewrites, warnings } = await rewriteRelativeMdxImports(content, filePath, projectDir);
161
+ for (const r of rewrites) {
162
+ relativeImportWarnings.push(`${file}:${r.line}: parent-relative MDX import "${r.from}" — run "jamdesk migrate" to auto-rewrite to ${r.to}`);
163
+ }
164
+ relativeImportWarnings.push(...warnings);
165
+ }
166
+ if (relativeImportWarnings.length > 0) {
167
+ console.log('');
168
+ output.warn(`Found ${relativeImportWarnings.length} parent-relative MDX import(s):`);
169
+ for (const w of relativeImportWarnings) {
170
+ console.log(` - ${w}`);
171
+ }
172
+ output.hint('Run "jamdesk migrate" to auto-fix the rewritable ones; the rest need the manual action shown above.');
173
+ console.log('');
174
+ }
145
175
  if (allDeprecatedErrors.length > 0) {
146
176
  console.log('');
147
177
  output.error(`Found ${allDeprecatedErrors.length} deprecated component(s):`);
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Pure MDX syntax-fix transforms shared by `jamdesk dev` (in-memory before
3
+ * MDX compile) and `jamdesk migrate` (on disk).
4
+ *
5
+ * Mirror of `unindentClosingTagAfterList` in
6
+ * builder/build-service/lib/preprocess-mdx.ts — keep regex in sync. The cli
7
+ * variant additionally returns 1-based touched-line numbers for migrate's
8
+ * report output.
9
+ */
10
+ export declare function unindentClosingTagsAfterLists(content: string): {
11
+ content: string;
12
+ lines: number[];
13
+ };
14
+ //# sourceMappingURL=mdx-syntax-fixes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdx-syntax-fixes.d.ts","sourceRoot":"","sources":["../../src/lib/mdx-syntax-fixes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAyBtC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Pure MDX syntax-fix transforms shared by `jamdesk dev` (in-memory before
3
+ * MDX compile) and `jamdesk migrate` (on disk).
4
+ *
5
+ * Mirror of `unindentClosingTagAfterList` in
6
+ * builder/build-service/lib/preprocess-mdx.ts — keep regex in sync. The cli
7
+ * variant additionally returns 1-based touched-line numbers for migrate's
8
+ * report output.
9
+ */
10
+ const LIST_ITEM_LINE = /^\s*(?:[-*+]\s|\d+\.\s)/;
11
+ const INDENTED_CLOSING_TAG = /^(\s+)(<\/[A-Z][\w-]*>)\s*$/;
12
+ const HAS_INDENTED_CLOSING_TAG = /^\s+<\/[A-Z]/m;
13
+ export function unindentClosingTagsAfterLists(content) {
14
+ // Cheap prefilter — the migrate command iterates every MDX file and the
15
+ // validator runs on every dev validate. Most files have no indented
16
+ // closing tag at all; skip the split+walk in that case.
17
+ if (!HAS_INDENTED_CLOSING_TAG.test(content))
18
+ return { content, lines: [] };
19
+ const lines = content.split('\n');
20
+ const out = [];
21
+ const touched = [];
22
+ let lastNonBlank = '';
23
+ for (let i = 0; i < lines.length; i++) {
24
+ const line = lines[i];
25
+ const closing = line.match(INDENTED_CLOSING_TAG);
26
+ if (closing && LIST_ITEM_LINE.test(lastNonBlank)) {
27
+ out.push(closing[2]);
28
+ touched.push(i + 1);
29
+ lastNonBlank = closing[2];
30
+ continue;
31
+ }
32
+ out.push(line);
33
+ if (line.trim() !== '')
34
+ lastNonBlank = line;
35
+ }
36
+ return { content: out.join('\n'), lines: touched };
37
+ }
38
+ //# sourceMappingURL=mdx-syntax-fixes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdx-syntax-fixes.js","sourceRoot":"","sources":["../../src/lib/mdx-syntax-fixes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,cAAc,GAAG,yBAAyB,CAAC;AACjD,MAAM,oBAAoB,GAAG,6BAA6B,CAAC;AAC3D,MAAM,wBAAwB,GAAG,eAAe,CAAC;AAEjD,MAAM,UAAU,6BAA6B,CAC3C,OAAe;IAEf,wEAAwE;IACxE,oEAAoE;IACpE,wDAAwD;IACxD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAE3E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,YAAY,GAAG,EAAE,CAAC;IAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACjD,IAAI,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,YAAY,GAAG,IAAI,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACrD,CAAC"}
@@ -18,9 +18,18 @@ export interface MdxValidationError {
18
18
  */
19
19
  export declare function buildMdxNotFoundError(depsDir: string): Error;
20
20
  /**
21
- * Validate a single MDX file's content
21
+ * Validate a single MDX file's content.
22
+ *
23
+ * @param applySyntaxFixes - Whether to apply the same in-memory rewrites
24
+ * that build-service's preprocessMdx pipeline applies at render time
25
+ * (e.g. unindenting closing tags absorbed by list items). Default `true`
26
+ * so dev's gate matches what actually compiles. Pass `false` to see the
27
+ * verdict against raw on-disk content — used by `jamdesk migrate` to
28
+ * detect files that *would* break without the runtime safety net.
22
29
  */
23
- export declare function validateMdxFile(content: string, filePath: string): Promise<MdxValidationError | null>;
30
+ export declare function validateMdxFile(content: string, filePath: string, options?: {
31
+ applySyntaxFixes?: boolean;
32
+ }): Promise<MdxValidationError | null>;
24
33
  /**
25
34
  * Extract all page paths from navigation config.
26
35
  * Handles tabs, anchors, groups, languages (multi-language), and flat array structures.
@@ -1 +1 @@
1
- {"version":3,"file":"mdx-validator.d.ts","sourceRoot":"","sources":["../../src/lib/mdx-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAWD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAQ5D;AAmBD;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAyBpC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,EAAE,CAoDzD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA4B/B"}
1
+ {"version":3,"file":"mdx-validator.d.ts","sourceRoot":"","sources":["../../src/lib/mdx-validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAWD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAQ5D;AAmBD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3C,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA+BpC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,EAAE,CAiEzD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA4B/B"}