mirror of
https://github.com/darkings/Obsidian-MonokaiSyntax.git
synced 2026-07-22 04:40:26 +00:00
139 lines
6.8 KiB
JavaScript
139 lines
6.8 KiB
JavaScript
import { existsSync, readFileSync } from "node:fs";
|
|
import { resolve } from "node:path";
|
|
|
|
const rootDir = resolve(import.meta.dirname, "..");
|
|
const paths = {
|
|
base: resolve(rootDir, "src/scss/_base.scss"),
|
|
editor: resolve(rootDir, "src/scss/components/_editor.scss"),
|
|
index: resolve(rootDir, "src/scss/index.scss"),
|
|
overrides: resolve(rootDir, "src/scss/_active-visual-overrides.scss"),
|
|
generatedIcons: resolve(rootDir, "src/scss/components/_file-icons.generated.scss"),
|
|
iconGenerator: resolve(rootDir, "scripts/generate-icon-theme.js"),
|
|
packageJson: resolve(rootDir, "package.json"),
|
|
};
|
|
|
|
const files = Object.fromEntries(
|
|
Object.entries(paths).map(([key, path]) => [
|
|
key,
|
|
existsSync(path) ? readFileSync(path, "utf8") : "",
|
|
]),
|
|
);
|
|
|
|
const packageJson = JSON.parse(files.packageJson);
|
|
|
|
const checks = [
|
|
[
|
|
"Active 视觉验证脚本已接入 release:pack",
|
|
packageJson.scripts?.["release:pack"]?.includes("npm run verify:active-visual"),
|
|
],
|
|
[
|
|
"Active 视觉覆盖层位于插件样式之后",
|
|
/@use "plugins";\s*@use "active-visual-overrides";/.test(files.index)
|
|
&& !/MONOKAI SYNTAX CSS LOADED/.test(files.base),
|
|
],
|
|
[
|
|
"Active 视觉覆盖层不保留诊断描边",
|
|
!/box-shadow:\s*inset 0 0 0 3px/.test(files.overrides)
|
|
&& !/#f92672/.test(files.overrides)
|
|
&& !/box-shadow:[^;]*#66d9ef/.test(files.overrides),
|
|
],
|
|
[
|
|
"文件夹不再生成额外 ::before 图标",
|
|
!/\.nav-folder-title::before/.test(files.generatedIcons)
|
|
&& !/\.nav-folder-title::before/.test(files.iconGenerator),
|
|
],
|
|
[
|
|
"导航折叠指示器由 Obsidian 默认图标承担第一层",
|
|
/\.nav-folder-collapse-indicator[\s\S]*?color:\s*var\(--icon-color\);/.test(files.base),
|
|
],
|
|
[
|
|
"属性值不再绘制额外背景色",
|
|
!/--monokai-metadata-value-background/.test(files.base)
|
|
&& !/\.metadata-property-value\s*\{[^}]*background-color:/s.test(files.base)
|
|
&& !/\.metadata-property-value:focus-within\s*\{[^}]*background-color:/s.test(files.base),
|
|
],
|
|
[
|
|
"行内代码背景与代码块背景一致",
|
|
/--monokai-inline-code-background:\s*var\(--code-background\);/.test(files.editor)
|
|
&& /\.markdown-rendered[\s\S]*?code[\s\S]*?background-color:\s*var\(--monokai-inline-code-background\);/.test(files.editor),
|
|
],
|
|
[
|
|
"Callout 使用截图式蓝青面板",
|
|
/--monokai-callout-background:\s*rgb\(102 217 239 \/ 14%\);/.test(files.editor)
|
|
&& /--callout-padding:\s*calc\(var\(--spacing-5\) \+ var\(--spacing-2\)\) calc\(var\(--spacing-5\) \+ var\(--spacing-4\)\);/.test(files.overrides)
|
|
&& /--callout-content-padding:\s*var\(--spacing-4\) 0 0 0;/.test(files.overrides)
|
|
&& /body \.markdown-source-view\.mod-cm6 \.callout[\s\S]*?box-shadow:\s*inset 0 0 0 1px var\(--monokai-callout-border\);/.test(files.overrides)
|
|
&& /body \.markdown-source-view\.mod-cm6 \.callout[\s\S]*?border-inline-start:\s*0;/.test(files.overrides)
|
|
&& /body \.markdown-source-view\.mod-cm6 \.callout[\s\S]*?padding:\s*var\(--callout-padding\);/.test(files.overrides)
|
|
&& /body \.markdown-source-view\.mod-cm6 \.callout-title[\s\S]*?color:\s*var\(--callout-color, #66d9ef\);/.test(files.overrides),
|
|
],
|
|
[
|
|
"Callout 语义色映射到 Monokai 六色盘",
|
|
/\.callout\[data-callout="info"\][\s\S]*?#66d9ef/.test(files.editor)
|
|
&& /\.callout\[data-callout="warning"\][\s\S]*?#fd971f/.test(files.editor)
|
|
&& /\.callout\[data-callout="danger"\][\s\S]*?#f92672/.test(files.editor)
|
|
&& /\.callout\[data-callout="success"\][\s\S]*?#a6e22e/.test(files.editor),
|
|
],
|
|
[
|
|
"Callout 内容与标题之间留出呼吸感",
|
|
/\.callout-content[\s\S]*?margin-block-start:\s*var\(--spacing-4\);/.test(files.editor),
|
|
],
|
|
[
|
|
"编辑区域顶部冗余标题被隐藏",
|
|
/\.markdown-source-view\.mod-cm6\s+\.inline-title[\s\S]*?display:\s*none;/.test(files.editor),
|
|
],
|
|
[
|
|
"Terminal 插件面板有主题化间距",
|
|
/\.terminal[\s\S]*?padding:\s*var\(--spacing-3\);/.test(files.base)
|
|
|| /\.workspace-leaf-content\[data-type="terminal"\][\s\S]*?padding:\s*var\(--spacing-3\);/.test(files.base),
|
|
],
|
|
[
|
|
"行内代码文字统一使用 Monokai Pro 绿色",
|
|
/--monokai-inline-code-color:\s*#a6e22e;/.test(files.editor)
|
|
&& /\.cm-inline-code[\s\S]*?color:\s*var\(--monokai-inline-code-color\);/.test(files.editor),
|
|
],
|
|
[
|
|
"行内代码不再使用着色边框",
|
|
/\.markdown-rendered[\s\S]*?code[\s\S]*?border:\s*0;/.test(files.editor)
|
|
&& /\.cm-inline-code[\s\S]*?border:\s*0;/.test(files.editor)
|
|
&& !/--monokai-inline-code-border/.test(files.editor),
|
|
],
|
|
[
|
|
"块引用左侧竖条改为较细的 Monokai Pro 绿色并加大间距",
|
|
/--blockquote-border-color:\s*#\{\$color-dark-green\};/.test(files.base)
|
|
&& /--blockquote-background-color:\s*var\(--monokai-blockquote-background\);/.test(files.overrides)
|
|
&& /--blockquote-border-thickness:\s*2px;/.test(files.overrides)
|
|
&& /body \.markdown-source-view\.mod-cm6 \.cm-line\.HyperMD-quote[\s\S]*?box-shadow:\s*inset 2px 0 0 var\(--blockquote-border-color\);/.test(files.overrides)
|
|
&& /body \.markdown-source-view\.mod-cm6 \.cm-line:has\(\.cm-quote\)[\s\S]*?box-shadow:\s*inset 2px 0 0 var\(--blockquote-border-color\);/.test(files.overrides)
|
|
&& /body \.markdown-rendered blockquote[\s\S]*?padding:\s*var\(--spacing-4\) var\(--spacing-5\) var\(--spacing-4\) calc\(var\(--spacing-5\) \+ var\(--spacing-5\) \+ var\(--spacing-3\)\);/.test(files.overrides)
|
|
&& /body \.markdown-source-view\.mod-cm6 \.cm-line\.HyperMD-quote[\s\S]*?padding-inline-start:\s*var\(--spacing-3\);/.test(files.overrides)
|
|
&& /body \.markdown-source-view\.mod-cm6 \.cm-line\.HyperMD-quote[\s\S]*?text-indent:\s*calc\(var\(--spacing-5\) \+ var\(--spacing-2\)\);/.test(files.overrides)
|
|
&& /body \.markdown-source-view\.mod-cm6 \.cm-line\.HyperMD-quote \.cm-quote[\s\S]*?margin-inline-start:\s*0;/.test(files.overrides),
|
|
],
|
|
[
|
|
"复选框未选中为 Monokai Pro 黄色,选中为绿色",
|
|
/--monokai-checkbox-unchecked-color:\s*#\{\$color-dark-yellow\};/.test(files.base)
|
|
&& /--monokai-checkbox-checked-color:\s*#\{\$color-dark-green\};/.test(files.base)
|
|
&& /input\[type="checkbox"\]:not\(:checked\)[\s\S]*?border-color:\s*var\(--monokai-checkbox-unchecked-color\);/.test(files.base)
|
|
&& /input\[type="checkbox"\]:checked[\s\S]*?background-color:\s*var\(--monokai-checkbox-checked-color\);/.test(files.base),
|
|
],
|
|
[
|
|
"AGENTS.md 与 CLAUDE.md 拥有专属文件名图标规则",
|
|
/\[data-path="AGENTS\.md"\]::before/.test(files.generatedIcons)
|
|
&& /\[data-path="CLAUDE\.md"\]::before/.test(files.generatedIcons),
|
|
],
|
|
];
|
|
|
|
let hasFailure = false;
|
|
|
|
for (const [label, passed] of checks) {
|
|
console.log(`${label}: ${passed ? "通过" : "失败"}`);
|
|
|
|
if (!passed) {
|
|
hasFailure = true;
|
|
}
|
|
}
|
|
|
|
if (hasFailure) {
|
|
process.exitCode = 1;
|
|
}
|