Files
menav/test/p1-7-extension-config-minimal.node-test.js
rbetree 8f81b430b9 feat(extension): 缩减配置注入并输出 menav-config.json
- 构建:生成 dist/menav-config.json 供扩展按需加载
- 页面:menav-config-data 仅注入扩展元信息(configUrl/pageTemplates/icons/homePageId/allowedSchemes)
- 运行时:模板判定优先 pageTemplates,兼容旧 cfg.data[pageId].template
- 文档:更新 README 的扩展接口说明
2026-01-07 19:35:20 +08:00

57 lines
2.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const test = require('node:test');
const assert = require('node:assert/strict');
const path = require('node:path');
const { loadHandlebarsTemplates, loadConfig, generateHTML } = require('../src/generator.js');
function withRepoRoot(fn) {
const originalCwd = process.cwd();
process.chdir(path.join(__dirname, '..'));
try {
return fn();
} finally {
process.chdir(originalCwd);
}
}
test('P1-7页面内不应注入整站 configJSON应仅保留扩展元信息与最小运行时参数', () => {
withRepoRoot(() => {
loadHandlebarsTemplates();
const config = loadConfig();
const html = generateHTML(config);
const match = html.match(
/<script id="menav-config-data"[^>]*>([\s\S]*?)<\/script>/m
);
assert.ok(match, '应输出 menav-config-data 脚本块');
const raw = String(match[1] || '').trim();
assert.ok(raw.length > 0, 'menav-config-data 内容不应为空');
const parsed = JSON.parse(raw);
assert.ok(parsed && typeof parsed === 'object');
assert.equal(parsed.configUrl, './menav-config.json');
assert.ok(parsed.version, '应包含 version');
assert.ok(parsed.timestamp, '应包含 timestamp');
assert.ok(parsed.icons && typeof parsed.icons === 'object', '应包含 icons 配置(用于运行时)');
assert.ok(parsed.data && typeof parsed.data === 'object', '应包含 data 对象');
assert.ok(parsed.data.homePageId, '应包含 homePageId');
assert.ok(
parsed.data.pageTemplates && typeof parsed.data.pageTemplates === 'object',
'应包含 pageTemplates'
);
// 不应再把 pages/<id>.yml 的完整结构categories/sites 等)注入到页面中
assert.equal(parsed.data.common, undefined);
assert.equal(parsed.data.projects, undefined);
assert.equal(parsed.data.articles, undefined);
assert.equal(parsed.data.bookmarks, undefined);
assert.ok(!/"categories"\s*:/.test(raw), '不应包含 categories 字段');
assert.ok(!/"sites"\s*:/.test(raw), '不应包含 sites 字段');
});
});