Files
wehub-resource-sync 6db8fca185
docmd CI verification / verify (push) Failing after 0s
chore: import upstream snapshot with attribution
2026-07-13 12:31:55 +08:00

137 lines
5.6 KiB
JavaScript

/**
* --------------------------------------------------------------------
* docmd : the zero-config documentation engine.
*
* Slice E — Migration polish
*
* Covers:
* N-10 `moveFilesToBackup` keeps lockfiles and package manifests
* (package.json, package-lock.json, yarn.lock, pnpm-lock.yaml,
* bun.lock, bun.lockb) in place so a recovery doesn't have
* to re-resolve every dependency.
* N-22 Docusaurus migrate preserves the original `staticDir`
* (default `static`) and MkDocs migrate preserves the
* original `site_dir` (default `site`). Starlight and
* VitePress keep their conventional defaults.
* N-9 MkDocs migrate parses the top-level `nav:` block into a
* docmd-compatible `navigation` array. Multi-level nav is
* preserved via the `children` field.
*
* Run: `node tests/runner.js --only=migrate-fix`
* --------------------------------------------------------------------
*/
import {
DOCMD,
setup,
writeFile,
runTestFile
} from '../shared.js';
import { execSync } from 'node:child_process';
import fs from 'node:fs';
import path from 'node:path';
let passed = 0;
let failed = 0;
const failures = [];
function assert(condition, message) {
if (!condition) {
failed++;
failures.push(message);
console.log(` ❌ ${message}`);
} else {
passed++;
console.log(` ✅ ${message}`);
}
}
export const test = runTestFile({
name: 'Migration polish (Slice E — N-9, N-10, N-22)',
emoji: '🚚',
run: () => {
// N-10 — lockfiles and package manifests stay in place.
{
const dir = setup('migrate-fix-n10-lockfiles-stay');
writeFile(dir, 'mkdocs.yml', 'site_name: N-10\n');
writeFile(dir, 'package.json', '{"name":"test","dependencies":{"foo":"^1.0.0"}}\n');
writeFile(dir, 'package-lock.json', '{"name":"test","lockfileVersion":3}\n');
writeFile(dir, 'pnpm-lock.yaml', 'lockfileVersion: 6.0\n');
writeFile(dir, 'docs/index.md', '# Home\n');
writeFile(dir, 'docmd.config.json', '{"title":"N-10","src":"./docs","out":"./site"}\n');
execSync(`node ${DOCMD} migrate --mkdocs`, { cwd: dir, stdio: 'pipe' });
// Package manifests stay in cwd (not in backup)
assert(fs.existsSync(path.join(dir, 'package.json')), 'N-10: package.json stays in cwd after migrate');
assert(fs.existsSync(path.join(dir, 'package-lock.json')), 'N-10: package-lock.json stays in cwd after migrate');
assert(fs.existsSync(path.join(dir, 'pnpm-lock.yaml')), 'N-10: pnpm-lock.yaml stays in cwd after migrate');
// node_modules is excluded
assert(fs.existsSync(path.join(dir, 'node_modules')) === false || !fs.statSync(path.join(dir, 'node_modules')).isDirectory(), 'N-10: node_modules is not in the backup');
// Backup contains user content
assert(fs.existsSync(path.join(dir, 'mkdocs-backup/docs/index.md')), 'N-10: backup contains moved content (mkdocs-backup/docs/index.md)');
}
// N-22 (Docusaurus) — preserve original staticDir.
{
const dir = setup('migrate-fix-n22-docusaurus');
writeFile(dir, 'docusaurus.config.js', [
"module.exports = {",
" title: 'N-22-d',",
" staticDir: 'my-static',",
"};"
].join('\n'));
writeFile(dir, 'docs/index.md', '# Home\n');
writeFile(dir, 'docmd.config.json', '{"title":"N-22-d","src":"./docs","out":"./site"}\n');
execSync(`node ${DOCMD} migrate --docusaurus`, { cwd: dir, stdio: 'pipe' });
const written = fs.readFileSync(path.join(dir, 'docmd.config.js'), 'utf8');
assert(/out:\s*'my-static'/.test(written) || /out:\s*"my-static"/.test(written) || /out:\s*'my-static'/.test(written) || /out: 'my-static'/.test(written), 'N-22: Docusaurus staticDir "my-static" is preserved in the generated config');
}
// N-22 (MkDocs) — preserve original site_dir.
{
const dir = setup('migrate-fix-n22-mkdocs');
writeFile(dir, 'mkdocs.yml', [
'site_name: N-22-m',
'site_dir: my-site',
''
].join('\n'));
writeFile(dir, 'docs/index.md', '# Home\n');
writeFile(dir, 'docmd.config.json', '{"title":"N-22-m","src":"./docs","out":"./site"}\n');
execSync(`node ${DOCMD} migrate --mkdocs`, { cwd: dir, stdio: 'pipe' });
const written = fs.readFileSync(path.join(dir, 'docmd.config.js'), 'utf8');
assert(/out:\s*['"]my-site['"]/.test(written), 'N-22: MkDocs site_dir "my-site" is preserved in the generated config');
}
// N-9 — MkDocs nav: is parsed into the docmd navigation.
{
const dir = setup('migrate-fix-n9-mkdocs-nav');
writeFile(dir, 'mkdocs.yml', [
'site_name: N-9',
'nav:',
' - Home: index.md',
' - Guide:',
' - Getting Started: guide/start.md',
' - Reference: guide/ref.md',
''
].join('\n'));
writeFile(dir, 'docs/index.md', '# Home\n');
writeFile(dir, 'docmd.config.json', '{"title":"N-9","src":"./docs","out":"./site"}\n');
execSync(`node ${DOCMD} migrate --mkdocs`, { cwd: dir, stdio: 'pipe' });
const written = fs.readFileSync(path.join(dir, 'docmd.config.js'), 'utf8');
assert(/navigation:\s*\[/.test(written), 'N-9: generated config has a navigation array');
assert(/'Home'|"Home"/.test(written) && /\bindex\b/.test(written), 'N-9: navigation contains the Home entry');
assert(/'Guide'|"Guide"/.test(written) && /children/.test(written), 'N-9: multi-level nav (Guide with children) is preserved');
}
}
});
export const results = {
get passed() { return passed; },
get failed() { return failed; },
get failures() { return [...failures]; }
};