137 lines
5.6 KiB
JavaScript
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]; }
|
|
}; |