33 lines
2.1 KiB
JavaScript
33 lines
2.1 KiB
JavaScript
// 核验实际安装的图标组件及 SVG 输出,不启动浏览器、不检查页面交互。
|
|
const fs = require('node:fs')
|
|
const path = require('node:path')
|
|
const assert = require('node:assert/strict')
|
|
const { createRequire } = require('node:module')
|
|
const root = path.resolve(__dirname, '..')
|
|
const localRequire = createRequire(path.join(root, 'web', 'package.json'))
|
|
const icons = localRequire('@element-plus/icons-vue')
|
|
const { createSSRApp, h } = localRequire('vue')
|
|
const { renderToString } = localRequire('@vue/server-renderer')
|
|
|
|
;(async () => {
|
|
const source = fs.readFileSync(path.join(root, 'internal/data/business/menu_icons.go'), 'utf8')
|
|
const entries = [...source.matchAll(/"(sw_[^"]+)":\s*"([^"]+)"/g)].map(match => ({ name: match[1], icon: match[2] }))
|
|
assert.equal(entries.length, 14)
|
|
const sql = fs.readFileSync(path.join(root, 'docs/sw6-to-kra/sw_to_kra_migrate.sql'), 'utf8')
|
|
const moduleSource = fs.readFileSync(path.join(root, 'internal/modules/business/definition.go'), 'utf8')
|
|
for (const row of entries) {
|
|
assert.ok(icons[row.icon], `${row.icon} 未注册`)
|
|
assert.ok(sql.includes(`WHEN '${row.name}' THEN '${row.icon}'`), `${row.name} 缺少重复执行修复`)
|
|
assert.ok(sql.includes(`WHEN '${row.name.slice(3)}' THEN '${row.icon}'`), `${row.name} 缺少首次迁移映射`)
|
|
assert.ok(moduleSource.includes(`Icon: databusiness.MenuIcon("${row.name}")`))
|
|
const rendered = await renderToString(createSSRApp({ render: () => h(icons[row.icon]) }))
|
|
assert.match(rendered, /<svg[\s>]/)
|
|
assert.match(rendered, /<(path|circle|rect|polygon|line)[\s>]/)
|
|
row.svgRendered = true
|
|
}
|
|
assert.ok(icons.Menu, 'SQL 默认图标必须已注册')
|
|
const result = { method: '本地已安装组件的 SSR SVG 验证,包含首次/重复迁移 SQL 与模块定义一致性检查', icons: entries, passed: true }
|
|
fs.writeFileSync(path.join(root, 'docs/sw6-to-kra/menu-icons-components-2026-11-04.json'), JSON.stringify(result, null, 2) + '\n')
|
|
console.log(JSON.stringify(result))
|
|
})().catch(error => { console.error(error); process.exitCode = 1 })
|