jamdesk 1.1.24 → 1.1.26
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/dist/__tests__/integration/validate.integration.test.js +40 -1
- package/dist/__tests__/integration/validate.integration.test.js.map +1 -1
- package/dist/__tests__/unit/deps.test.js +142 -6
- package/dist/__tests__/unit/deps.test.js.map +1 -1
- package/dist/__tests__/unit/templates-consistency.test.d.ts +2 -0
- package/dist/__tests__/unit/templates-consistency.test.d.ts.map +1 -0
- package/dist/__tests__/unit/templates-consistency.test.js +19 -0
- package/dist/__tests__/unit/templates-consistency.test.js.map +1 -0
- package/dist/__tests__/unit/windows-ci-diagnosis.test.d.ts +2 -0
- package/dist/__tests__/unit/windows-ci-diagnosis.test.d.ts.map +1 -0
- package/dist/__tests__/unit/windows-ci-diagnosis.test.js +132 -0
- package/dist/__tests__/unit/windows-ci-diagnosis.test.js.map +1 -0
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +9 -6
- package/dist/commands/validate.js.map +1 -1
- package/dist/lib/deps.d.ts +1 -0
- package/dist/lib/deps.d.ts.map +1 -1
- package/dist/lib/deps.js +209 -45
- package/dist/lib/deps.js.map +1 -1
- package/dist/lib/navigation-validator.d.ts +39 -17
- package/dist/lib/navigation-validator.d.ts.map +1 -1
- package/dist/lib/navigation-validator.js +65 -36
- package/dist/lib/navigation-validator.js.map +1 -1
- package/package.json +4 -1
- package/vendored/lib/docs-types.ts +14 -4
- package/vendored/lib/extract-highlights.ts +2 -2
- package/vendored/lib/validate-config.ts +118 -13
- package/vendored/schema/docs-schema.json +0 -3
- package/vendored/shared/navigation-validator.ts +103 -53
- package/vendored/shared/status-reporter.ts +1 -1
- package/vendored/workspace-package-lock.json +6735 -0
package/dist/lib/deps.js
CHANGED
|
@@ -9,6 +9,7 @@ import { spawn } from 'child_process';
|
|
|
9
9
|
import crypto from 'crypto';
|
|
10
10
|
import fs from 'fs-extra';
|
|
11
11
|
import path from 'path';
|
|
12
|
+
import { fileURLToPath } from 'url';
|
|
12
13
|
import { homedir } from 'os';
|
|
13
14
|
import { output } from './output.js';
|
|
14
15
|
import { spinner } from './spinner.js';
|
|
@@ -16,8 +17,11 @@ import { createRequire } from 'module';
|
|
|
16
17
|
const require = createRequire(import.meta.url);
|
|
17
18
|
const cliPackage = require('../../package.json');
|
|
18
19
|
const JAMDESK_DIR = path.join(homedir(), '.jamdesk');
|
|
19
|
-
// Match build-service versions exactly
|
|
20
|
-
|
|
20
|
+
// Match build-service versions exactly.
|
|
21
|
+
// Exported so the workspace-lockfile generator script
|
|
22
|
+
// (scripts/generate-workspace-lockfile.js) can read the canonical map from
|
|
23
|
+
// compiled dist/lib/deps.js instead of re-parsing the TypeScript source.
|
|
24
|
+
export const REQUIRED_DEPS = {
|
|
21
25
|
// Next.js and React
|
|
22
26
|
'next': '16.2.3',
|
|
23
27
|
// OpenAPI validation (for API reference docs)
|
|
@@ -139,43 +143,168 @@ export async function verifyCriticalPackagesInstalled(depsDir) {
|
|
|
139
143
|
}
|
|
140
144
|
return true;
|
|
141
145
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
146
|
+
/**
|
|
147
|
+
* File-based lock to serialize ensureDependencies across concurrent jamdesk
|
|
148
|
+
* invocations. `npm ci` deletes and rewrites node_modules, so two overlapping
|
|
149
|
+
* runs can corrupt each other's trees AND both write "success" markers
|
|
150
|
+
* against a partially-corrupted state — the same silent-corruption class
|
|
151
|
+
* the integrity check was supposed to fix.
|
|
152
|
+
*
|
|
153
|
+
* Stale locks (older than INSTALL_LOCK_STALE_MS) are bypassed on the
|
|
154
|
+
* assumption that the holding process crashed. The 10-minute bound is a
|
|
155
|
+
* safe upper bound for `npm ci` (5-minute spawn timeout) plus slack for
|
|
156
|
+
* slow CI runners and post-install integrity checks.
|
|
157
|
+
*/
|
|
158
|
+
const INSTALL_LOCK_FILE = '.install.lock';
|
|
159
|
+
const INSTALL_LOCK_STALE_MS = 10 * 60 * 1000;
|
|
160
|
+
const INSTALL_LOCK_POLL_MS = 150;
|
|
161
|
+
const INSTALL_LOCK_HEARTBEAT_MS = 60 * 1000;
|
|
162
|
+
async function withInstallLock(depsDir, verbose, fn) {
|
|
163
|
+
const lockPath = path.join(depsDir, INSTALL_LOCK_FILE);
|
|
164
|
+
let notifiedWait = false;
|
|
165
|
+
while (true) {
|
|
152
166
|
try {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
167
|
+
// `wx`: O_CREAT | O_EXCL — atomic create-or-fail. Cross-platform.
|
|
168
|
+
const fd = fs.openSync(lockPath, 'wx');
|
|
169
|
+
try {
|
|
170
|
+
fs.writeSync(fd, `${process.pid}\n${Date.now()}\n`);
|
|
171
|
+
}
|
|
172
|
+
finally {
|
|
173
|
+
fs.closeSync(fd);
|
|
157
174
|
}
|
|
158
|
-
|
|
159
|
-
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
const code = err.code;
|
|
179
|
+
if (code !== 'EEXIST')
|
|
180
|
+
throw err;
|
|
181
|
+
// Another process holds the lock. Check staleness before waiting.
|
|
182
|
+
let stat;
|
|
183
|
+
try {
|
|
184
|
+
stat = fs.statSync(lockPath);
|
|
160
185
|
}
|
|
161
|
-
|
|
162
|
-
//
|
|
163
|
-
|
|
164
|
-
reinstallReason = 'install is incomplete (missing critical packages)';
|
|
186
|
+
catch {
|
|
187
|
+
// Lock disappeared between openSync and statSync; retry immediately.
|
|
188
|
+
continue;
|
|
165
189
|
}
|
|
166
|
-
if (
|
|
190
|
+
if (Date.now() - stat.mtimeMs > INSTALL_LOCK_STALE_MS) {
|
|
167
191
|
if (verbose)
|
|
168
|
-
output.
|
|
169
|
-
|
|
192
|
+
output.warn('Removing stale install lock');
|
|
193
|
+
try {
|
|
194
|
+
fs.unlinkSync(lockPath);
|
|
195
|
+
}
|
|
196
|
+
catch { /* ignore */ }
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
if (!notifiedWait && verbose) {
|
|
200
|
+
output.info('Another jamdesk process is installing dependencies; waiting...');
|
|
201
|
+
notifiedWait = true;
|
|
170
202
|
}
|
|
171
|
-
|
|
172
|
-
|
|
203
|
+
await new Promise((r) => setTimeout(r, INSTALL_LOCK_POLL_MS));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Heartbeat: bump mtime every minute so a slow-but-live install isn't
|
|
207
|
+
// declared stale by a peer waiter. unref() so we don't pin the event
|
|
208
|
+
// loop if the caller abandons the promise.
|
|
209
|
+
const heartbeat = setInterval(() => {
|
|
210
|
+
try {
|
|
211
|
+
const now = new Date();
|
|
212
|
+
fs.utimesSync(lockPath, now, now);
|
|
173
213
|
}
|
|
174
214
|
catch {
|
|
175
|
-
//
|
|
215
|
+
// Lock file gone (unlinked early by a buggy peer, or filesystem
|
|
216
|
+
// eviction); no recovery needed — we'll release in the finally.
|
|
217
|
+
}
|
|
218
|
+
}, INSTALL_LOCK_HEARTBEAT_MS);
|
|
219
|
+
heartbeat.unref();
|
|
220
|
+
try {
|
|
221
|
+
return await fn();
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
clearInterval(heartbeat);
|
|
225
|
+
try {
|
|
226
|
+
fs.unlinkSync(lockPath);
|
|
227
|
+
}
|
|
228
|
+
catch { /* ignore */ }
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Returns the reason a reinstall is needed, or `null` if the existing
|
|
233
|
+
* install is healthy. Non-null strings feed directly into user-facing
|
|
234
|
+
* spinner text — keep them terse and actionable.
|
|
235
|
+
*/
|
|
236
|
+
async function checkInstallReinstallReason(depsDir) {
|
|
237
|
+
const packageJsonPath = path.join(depsDir, 'package.json');
|
|
238
|
+
if (!fs.existsSync(packageJsonPath))
|
|
239
|
+
return 'first-run install';
|
|
240
|
+
try {
|
|
241
|
+
const pkg = await fs.readJson(packageJsonPath);
|
|
242
|
+
if (pkg._jamdeskVersion !== cliPackage.version) {
|
|
243
|
+
return `CLI version changed: ${pkg._jamdeskVersion} → ${cliPackage.version}`;
|
|
176
244
|
}
|
|
245
|
+
if (pkg._depsHash !== getDepsHash())
|
|
246
|
+
return 'deps changed';
|
|
247
|
+
// N stat calls — only pay this once version+hash already match.
|
|
248
|
+
if (!(await verifyCriticalPackagesInstalled(depsDir))) {
|
|
249
|
+
return 'install is incomplete (missing critical packages)';
|
|
250
|
+
}
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
return 'package.json unreadable';
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
export async function ensureDependencies(verbose, overrideDepsDir) {
|
|
258
|
+
const depsDir = overrideDepsDir || JAMDESK_DIR;
|
|
259
|
+
const depsNodeModulesDir = path.join(depsDir, 'node_modules');
|
|
260
|
+
// Fast path: skip lock acquisition when already up-to-date.
|
|
261
|
+
const initialReason = await checkInstallReinstallReason(depsDir);
|
|
262
|
+
if (initialReason === null) {
|
|
263
|
+
if (verbose)
|
|
264
|
+
output.info('Dependencies already installed');
|
|
265
|
+
return depsNodeModulesDir;
|
|
177
266
|
}
|
|
178
|
-
|
|
267
|
+
if (verbose)
|
|
268
|
+
output.info(`Updating dependencies (${initialReason})`);
|
|
269
|
+
await fs.ensureDir(depsDir);
|
|
270
|
+
return withInstallLock(depsDir, verbose, async () => {
|
|
271
|
+
// Re-check after acquiring the lock — a peer install may have wiped +
|
|
272
|
+
// rewritten node_modules while we waited.
|
|
273
|
+
const reason = await checkInstallReinstallReason(depsDir);
|
|
274
|
+
if (reason === null) {
|
|
275
|
+
if (verbose) {
|
|
276
|
+
output.info('Dependencies were installed by another jamdesk process');
|
|
277
|
+
}
|
|
278
|
+
return depsNodeModulesDir;
|
|
279
|
+
}
|
|
280
|
+
return runInstall(depsDir, verbose);
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Detect the shape of an `npm ci` drift error — the shipped workspace
|
|
285
|
+
* lockfile is out of sync with REQUIRED_DEPS. Surfacing a reinstall hint
|
|
286
|
+
* turns a wall of npm boilerplate into one actionable instruction.
|
|
287
|
+
*
|
|
288
|
+
* Each pattern targets a specific drift message npm prints. We deliberately
|
|
289
|
+
* do NOT match bare `EUSAGE` (the generic usage-error code) because it can
|
|
290
|
+
* also fire on unrelated npm misuse; matching only the drift-specific
|
|
291
|
+
* phrases avoids telling users to reinstall when the real error is e.g.
|
|
292
|
+
* a missing CLI flag.
|
|
293
|
+
*/
|
|
294
|
+
function looksLikeLockfileDrift(stderr) {
|
|
295
|
+
return (/can only install packages when your package\.json and package-lock\.json/i.test(stderr) ||
|
|
296
|
+
/Missing:.*from lock file/i.test(stderr) ||
|
|
297
|
+
/lock file'?s?\s.*does not satisfy/i.test(stderr));
|
|
298
|
+
}
|
|
299
|
+
async function runInstall(depsDir, verbose) {
|
|
300
|
+
const depsNodeModulesDir = path.join(depsDir, 'node_modules');
|
|
301
|
+
const packageJsonPath = path.join(depsDir, 'package.json');
|
|
302
|
+
// Direct check — "first run" means no pre-existing marker file. Corrupt
|
|
303
|
+
// package.json falls through as "Updating..." since the file already exists.
|
|
304
|
+
const isFirstRun = !fs.existsSync(packageJsonPath);
|
|
305
|
+
const spin = spinner(isFirstRun
|
|
306
|
+
? 'Installing dependencies (first run only)...'
|
|
307
|
+
: 'Updating dependencies...');
|
|
179
308
|
// Shared shape for both the pre-install and post-install writes. The
|
|
180
309
|
// version/hash marker fields are added ONLY in the post-install write —
|
|
181
310
|
// their absence from basePkg is the whole point of the two-phase write.
|
|
@@ -194,23 +323,54 @@ export async function ensureDependencies(verbose, overrideDepsDir) {
|
|
|
194
323
|
};
|
|
195
324
|
}
|
|
196
325
|
try {
|
|
197
|
-
//
|
|
198
|
-
//
|
|
199
|
-
//
|
|
200
|
-
//
|
|
201
|
-
|
|
326
|
+
// Two-phase write: the pre-install pkg omits version/hash markers for
|
|
327
|
+
// two independent reasons. (1) Crash-safety: a crashed install must not
|
|
328
|
+
// leave a stale "success" marker behind (see
|
|
329
|
+
// docs/plans/2026-04-14-cli-mdx-broken-install-fix.md). (2) Lockfile
|
|
330
|
+
// drift: the shipped workspace-package-lock.json is generated from a
|
|
331
|
+
// package.json with only { name, private, type, dependencies } — any
|
|
332
|
+
// extra field here (including _jamdeskVersion / _depsHash) causes npm
|
|
333
|
+
// ci to reject the tree as drift. If you add a field to buildPkg(),
|
|
334
|
+
// regenerate the lockfile via `npm run vendor`. Markers are added
|
|
335
|
+
// post-install in the second writeJson below.
|
|
202
336
|
await fs.writeJson(packageJsonPath, buildPkg(), { spaces: 2 });
|
|
337
|
+
// Copy the precomputed lockfile into ~/.jamdesk alongside the dynamic
|
|
338
|
+
// package.json. deps.ts ships with vendored/workspace-package-lock.json
|
|
339
|
+
// generated from the same REQUIRED_DEPS map — running `npm ci` against
|
|
340
|
+
// this lockfile finishes in ~30s vs. 5+ minutes for `npm install` which
|
|
341
|
+
// has to do a full resolver pass from scratch.
|
|
342
|
+
//
|
|
343
|
+
// Path resolution: import.meta.url → src/lib/deps.ts at test time or
|
|
344
|
+
// dist/lib/deps.js at runtime. Both resolve up two parents + vendored/
|
|
345
|
+
// to the same vendored/ directory (source tree in tests, installed
|
|
346
|
+
// package tree at runtime).
|
|
347
|
+
const thisFileDir = path.dirname(fileURLToPath(import.meta.url));
|
|
348
|
+
const workspaceLockSrc = path.resolve(thisFileDir, '../../vendored/workspace-package-lock.json');
|
|
349
|
+
const workspaceLockDest = path.join(depsDir, 'package-lock.json');
|
|
350
|
+
try {
|
|
351
|
+
await fs.copy(workspaceLockSrc, workspaceLockDest);
|
|
352
|
+
}
|
|
353
|
+
catch (err) {
|
|
354
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
355
|
+
throw new Error(`Failed to copy workspace lockfile from ${workspaceLockSrc}. ` +
|
|
356
|
+
`This usually means the jamdesk CLI install is damaged. ` +
|
|
357
|
+
`Try reinstalling with: npm install -g jamdesk\n` +
|
|
358
|
+
`Original error: ${msg}`);
|
|
359
|
+
}
|
|
203
360
|
// Install dependencies (async to allow spinner animation)
|
|
204
361
|
await new Promise((resolve, reject) => {
|
|
205
362
|
// Windows needs shell:true so npm.cmd resolves — Node refuses to spawn
|
|
206
363
|
// .cmd files directly since CVE-2024-27980 hardening. Our args are all
|
|
207
364
|
// hardcoded literals so there's no injection surface.
|
|
208
|
-
// --omit=dev replaces the deprecated --production flag (Node 24+
|
|
209
|
-
// emits a deprecation warning for the latter).
|
|
210
|
-
// --loglevel=error suppresses "npm warn deprecated" messages for
|
|
211
|
-
// transitive deps; we surface real failures via stderr capture below.
|
|
212
365
|
const isWindows = process.platform === 'win32';
|
|
213
|
-
|
|
366
|
+
// npm ci: skips the resolver pass entirely, installs from the
|
|
367
|
+
// pre-resolved tarball URLs in package-lock.json. ~15x faster than
|
|
368
|
+
// `npm install` on a cold Windows runner. Requires the shipped
|
|
369
|
+
// lockfile to match package.json exactly — the generator script
|
|
370
|
+
// (scripts/generate-workspace-lockfile.js) guarantees sync, and
|
|
371
|
+
// the verify:workspace-lockfile pre-commit hook + CI job guard
|
|
372
|
+
// against drift.
|
|
373
|
+
const npmInstall = spawn('npm', ['ci', '--no-audit', '--no-fund', '--loglevel=error'], {
|
|
214
374
|
cwd: depsDir,
|
|
215
375
|
stdio: verbose ? 'inherit' : 'pipe',
|
|
216
376
|
...(isWindows ? { shell: true } : {}),
|
|
@@ -218,7 +378,7 @@ export async function ensureDependencies(verbose, overrideDepsDir) {
|
|
|
218
378
|
// 5 minute timeout
|
|
219
379
|
const timeout = setTimeout(() => {
|
|
220
380
|
npmInstall.kill('SIGKILL');
|
|
221
|
-
reject(new Error('npm
|
|
381
|
+
reject(new Error('npm ci timed out after 5 minutes'));
|
|
222
382
|
}, 300000);
|
|
223
383
|
// Capture stderr for better error messages
|
|
224
384
|
let stderrOutput = '';
|
|
@@ -231,11 +391,15 @@ export async function ensureDependencies(verbose, overrideDepsDir) {
|
|
|
231
391
|
clearTimeout(timeout);
|
|
232
392
|
if (code === 0) {
|
|
233
393
|
resolve();
|
|
394
|
+
return;
|
|
234
395
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
reject(new Error(`
|
|
396
|
+
const details = stderrOutput ? `\n${stderrOutput.trim()}` : '';
|
|
397
|
+
if (looksLikeLockfileDrift(stderrOutput)) {
|
|
398
|
+
reject(new Error(`The jamdesk CLI's shipped lockfile is out of sync with its ` +
|
|
399
|
+
`dependencies. Upgrade the CLI: \`npm install -g jamdesk@latest\`${details}`));
|
|
400
|
+
return;
|
|
238
401
|
}
|
|
402
|
+
reject(new Error(`npm ci exited with code ${code}${details}`));
|
|
239
403
|
});
|
|
240
404
|
npmInstall.on('error', (err) => {
|
|
241
405
|
clearTimeout(timeout);
|
|
@@ -247,10 +411,10 @@ export async function ensureDependencies(verbose, overrideDepsDir) {
|
|
|
247
411
|
// won't commit a marker that claims a broken install is healthy.
|
|
248
412
|
const integrityOk = await verifyCriticalPackagesInstalled(depsDir);
|
|
249
413
|
if (!integrityOk) {
|
|
250
|
-
throw new Error(`npm
|
|
414
|
+
throw new Error(`npm ci exited 0 but critical packages are missing in ${depsDir}. ` +
|
|
251
415
|
'Try removing that directory and running jamdesk dev again.');
|
|
252
416
|
}
|
|
253
|
-
await fs.writeJson(packageJsonPath, buildPkg({ version:
|
|
417
|
+
await fs.writeJson(packageJsonPath, buildPkg({ version: cliPackage.version, hash: getDepsHash() }), { spaces: 2 });
|
|
254
418
|
spin.succeed('Dependencies installed');
|
|
255
419
|
return depsNodeModulesDir;
|
|
256
420
|
}
|
package/dist/lib/deps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/lib/deps.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../src/lib/deps.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,26 +6,48 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Used by both CLI (validate command) and build-service (build-time warnings).
|
|
8
8
|
*/
|
|
9
|
-
interface PageObject {
|
|
10
|
-
page?: string;
|
|
11
|
-
title?: string;
|
|
12
|
-
}
|
|
13
|
-
interface NavigationGroup {
|
|
14
|
-
group?: string;
|
|
15
|
-
pages?: (string | PageObject | NavigationGroup)[];
|
|
16
|
-
}
|
|
17
|
-
interface DocsConfig {
|
|
18
|
-
navigation?: NavigationGroup[];
|
|
19
|
-
}
|
|
20
9
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
10
|
+
* Structural copy of `BuildWarning` from ./status-reporter.ts. Kept local so
|
|
11
|
+
* this file can be copied byte-identically to all four tracked locations
|
|
12
|
+
* (build-service/shared, functions/src/shared, cli/vendored/shared,
|
|
13
|
+
* cli/src/lib) — the CLI src/lib copy has no sibling status-reporter.ts, and
|
|
14
|
+
* an `import type { BuildWarning } from './status-reporter.js'` would fail to
|
|
15
|
+
* resolve under the CLI's NodeNext tsconfig. TypeScript structural typing
|
|
16
|
+
* means callers in build-service/functions can still assign these to their
|
|
17
|
+
* imported BuildWarning[] without issue. Keep the shape in sync with
|
|
18
|
+
* builder/shared/status-reporter.ts.
|
|
23
19
|
*/
|
|
24
|
-
|
|
20
|
+
type BuildWarning = {
|
|
21
|
+
type: 'broken_link' | 'auto_migrate' | 'missing_asset' | 'missing_page';
|
|
22
|
+
file: string;
|
|
23
|
+
line?: number;
|
|
24
|
+
link?: string;
|
|
25
|
+
message?: string;
|
|
26
|
+
};
|
|
25
27
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
+
* Extract all local page paths referenced anywhere in a navigation config.
|
|
29
|
+
*
|
|
30
|
+
* Walks every nav container shape (groups, tabs, anchors, dropdowns,
|
|
31
|
+
* products, versions, languages, global) recursively. Skips external URLs.
|
|
32
|
+
* Deduplicates — a page referenced from multiple containers is returned once.
|
|
33
|
+
*
|
|
34
|
+
* Input may be the full `navigation` object from docs.json, or any nested
|
|
35
|
+
* container. Returns a sorted unique list.
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractNavigationPages(nav: unknown): string[];
|
|
38
|
+
/**
|
|
39
|
+
* Boundary type for `validateNavigationPages` — any object with an optional
|
|
40
|
+
* `navigation` key. Callers' stricter `DocsConfig` types assign here.
|
|
41
|
+
*/
|
|
42
|
+
export type NavValidationInput = {
|
|
43
|
+
navigation?: unknown;
|
|
44
|
+
[key: string]: unknown;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Validate that all pages referenced in docs.json navigation exist on disk
|
|
48
|
+
* as either `.mdx` or `.md` files. Returns a BuildWarning[] suitable for
|
|
49
|
+
* merging into `reporter.reportCompletion({ warnings })`.
|
|
28
50
|
*/
|
|
29
|
-
export declare function
|
|
51
|
+
export declare function validateNavigationPages(config: NavValidationInput | null | undefined, projectDir: string): Promise<BuildWarning[]>;
|
|
30
52
|
export {};
|
|
31
53
|
//# sourceMappingURL=navigation-validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-validator.d.ts","sourceRoot":"","sources":["../../src/lib/navigation-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,
|
|
1
|
+
{"version":3,"file":"navigation-validator.d.ts","sourceRoot":"","sources":["../../src/lib/navigation-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH;;;;;;;;;;GAUG;AACH,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,CAAC;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AA6BF;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CA0C7D;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAElF;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,EAC7C,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAwBzB"}
|
|
@@ -21,55 +21,84 @@ async function fileExists(filePath) {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
|
-
* Extract all page paths
|
|
25
|
-
*
|
|
24
|
+
* Extract all local page paths referenced anywhere in a navigation config.
|
|
25
|
+
*
|
|
26
|
+
* Walks every nav container shape (groups, tabs, anchors, dropdowns,
|
|
27
|
+
* products, versions, languages, global) recursively. Skips external URLs.
|
|
28
|
+
* Deduplicates — a page referenced from multiple containers is returned once.
|
|
29
|
+
*
|
|
30
|
+
* Input may be the full `navigation` object from docs.json, or any nested
|
|
31
|
+
* container. Returns a sorted unique list.
|
|
26
32
|
*/
|
|
27
|
-
export function extractNavigationPages(
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
export function extractNavigationPages(nav) {
|
|
34
|
+
if (!nav || typeof nav !== 'object')
|
|
35
|
+
return [];
|
|
36
|
+
const seen = new Set();
|
|
37
|
+
function addPage(value) {
|
|
38
|
+
if (typeof value !== 'string')
|
|
39
|
+
return;
|
|
40
|
+
if (value.startsWith('http://') || value.startsWith('https://'))
|
|
41
|
+
return;
|
|
42
|
+
seen.add(value);
|
|
43
|
+
}
|
|
44
|
+
function walkItems(items) {
|
|
45
|
+
if (!Array.isArray(items))
|
|
46
|
+
return;
|
|
30
47
|
for (const item of items) {
|
|
31
48
|
if (typeof item === 'string') {
|
|
32
|
-
|
|
33
|
-
if (!item.startsWith('http://') && !item.startsWith('https://')) {
|
|
34
|
-
pages.push(item);
|
|
35
|
-
}
|
|
49
|
+
addPage(item);
|
|
36
50
|
}
|
|
37
51
|
else if (item && typeof item === 'object') {
|
|
38
|
-
|
|
39
|
-
pages.push(item.page);
|
|
40
|
-
}
|
|
41
|
-
if ('pages' in item && Array.isArray(item.pages)) {
|
|
42
|
-
processPages(item.pages);
|
|
43
|
-
}
|
|
52
|
+
walkContainer(item);
|
|
44
53
|
}
|
|
45
54
|
}
|
|
46
55
|
}
|
|
47
|
-
|
|
48
|
-
if (
|
|
49
|
-
|
|
50
|
-
}
|
|
56
|
+
function walkContainer(container) {
|
|
57
|
+
if (!container || typeof container !== 'object')
|
|
58
|
+
return;
|
|
59
|
+
// `page` property on an item (e.g., { page: "foo", title: "..." })
|
|
60
|
+
if ('page' in container)
|
|
61
|
+
addPage(container.page);
|
|
62
|
+
walkItems(container.pages);
|
|
63
|
+
walkItems(container.groups);
|
|
64
|
+
walkItems(container.tabs);
|
|
65
|
+
walkItems(container.anchors);
|
|
66
|
+
walkItems(container.dropdowns);
|
|
67
|
+
walkItems(container.products);
|
|
68
|
+
walkItems(container.versions);
|
|
69
|
+
walkItems(container.languages);
|
|
70
|
+
if (container.global)
|
|
71
|
+
walkContainer(container.global);
|
|
51
72
|
}
|
|
52
|
-
|
|
73
|
+
walkContainer(nav);
|
|
74
|
+
return Array.from(seen).sort();
|
|
53
75
|
}
|
|
54
76
|
/**
|
|
55
|
-
* Validate that all navigation
|
|
56
|
-
*
|
|
77
|
+
* Validate that all pages referenced in docs.json navigation exist on disk
|
|
78
|
+
* as either `.mdx` or `.md` files. Returns a BuildWarning[] suitable for
|
|
79
|
+
* merging into `reporter.reportCompletion({ warnings })`.
|
|
57
80
|
*/
|
|
58
|
-
export async function
|
|
59
|
-
if (!config
|
|
81
|
+
export async function validateNavigationPages(config, projectDir) {
|
|
82
|
+
if (!config || typeof config !== 'object')
|
|
60
83
|
return [];
|
|
61
|
-
}
|
|
62
84
|
const pagePaths = extractNavigationPages(config.navigation);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
if (
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
85
|
+
if (pagePaths.length === 0)
|
|
86
|
+
return [];
|
|
87
|
+
// Short-circuits to `.md` only if `.mdx` doesn't exist, avoiding a second
|
|
88
|
+
// stat when the first hits.
|
|
89
|
+
const results = await Promise.all(pagePaths.map(async (pagePath) => {
|
|
90
|
+
const mdxExists = await fileExists(path.join(projectDir, `${pagePath}.mdx`));
|
|
91
|
+
if (mdxExists)
|
|
92
|
+
return { pagePath, exists: true };
|
|
93
|
+
const mdExists = await fileExists(path.join(projectDir, `${pagePath}.md`));
|
|
94
|
+
return { pagePath, exists: mdExists };
|
|
95
|
+
}));
|
|
96
|
+
return results
|
|
97
|
+
.filter((r) => !r.exists)
|
|
98
|
+
.map(({ pagePath }) => ({
|
|
99
|
+
type: 'missing_page',
|
|
100
|
+
file: `${pagePath}.mdx`,
|
|
101
|
+
message: `Page "${pagePath}" is referenced in navigation but no ${pagePath}.mdx or ${pagePath}.md file exists`,
|
|
102
|
+
}));
|
|
74
103
|
}
|
|
75
104
|
//# sourceMappingURL=navigation-validator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-validator.js","sourceRoot":"","sources":["../../src/lib/navigation-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"navigation-validator.js","sourceRoot":"","sources":["../../src/lib/navigation-validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jamdesk",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.26",
|
|
4
4
|
"description": "CLI for Jamdesk — build, preview, and deploy documentation sites from MDX. Dev server with hot reload, 50+ components, OpenAPI support, AI search, and Mintlify migration",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jamdesk",
|
|
@@ -76,6 +76,7 @@
|
|
|
76
76
|
"vendored/tailwind.config.ts",
|
|
77
77
|
"vendored/postcss.config.mjs",
|
|
78
78
|
"vendored/tsconfig.json",
|
|
79
|
+
"vendored/workspace-package-lock.json",
|
|
79
80
|
"README.md",
|
|
80
81
|
"LICENSE",
|
|
81
82
|
"NOTICE"
|
|
@@ -84,6 +85,8 @@
|
|
|
84
85
|
"build": "tsc",
|
|
85
86
|
"prepare": "npm run build",
|
|
86
87
|
"vendor": "node scripts/vendor.js",
|
|
88
|
+
"generate-workspace-lockfile": "node scripts/generate-workspace-lockfile.js",
|
|
89
|
+
"verify:workspace-lockfile": "node scripts/verify-workspace-lockfile.js",
|
|
87
90
|
"security-check": "node scripts/security-check.js",
|
|
88
91
|
"prepublishOnly": "npm run vendor && npm run build && npm run security-check",
|
|
89
92
|
"publish:npm": "node scripts/publish.js npm",
|
|
@@ -214,9 +214,13 @@ export interface TabConfig {
|
|
|
214
214
|
}
|
|
215
215
|
|
|
216
216
|
/**
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
217
|
+
* Legacy anchor configuration (top-level navigation sections).
|
|
218
|
+
*
|
|
219
|
+
* Retained so NavigationConfig / DropdownConfig / ProductConfig /
|
|
220
|
+
* VersionConfig / LanguageConfig can continue to type customer configs
|
|
221
|
+
* that still carry the legacy shape. New configs should use TabConfig
|
|
222
|
+
* for internal sections and top-level ExternalAnchorConfig for external
|
|
223
|
+
* links; `validateConfig` rejects `navigation.anchors` at build time.
|
|
220
224
|
*/
|
|
221
225
|
export interface AnchorConfig {
|
|
222
226
|
anchor: string;
|
|
@@ -792,9 +796,15 @@ export interface DocsConfig {
|
|
|
792
796
|
// Required fields
|
|
793
797
|
theme: ThemeName;
|
|
794
798
|
name: string;
|
|
795
|
-
colors: ColorsConfig;
|
|
796
799
|
navigation: NavigationConfig;
|
|
797
800
|
|
|
801
|
+
// Boundary escape hatch — docs.json is user-authored and may carry fields
|
|
802
|
+
// not represented in this interface. Unknown keys read as `unknown`.
|
|
803
|
+
[key: string]: unknown;
|
|
804
|
+
|
|
805
|
+
// Optional — themes provide defaults at render time
|
|
806
|
+
colors?: ColorsConfig;
|
|
807
|
+
|
|
798
808
|
// Optional fields
|
|
799
809
|
description?: string;
|
|
800
810
|
favicon?: Favicon;
|