72 lines
2.4 KiB
JavaScript
72 lines
2.4 KiB
JavaScript
import assert from 'node:assert/strict'
|
|
import { existsSync, readFileSync } from 'node:fs'
|
|
import { resolve } from 'node:path'
|
|
import { createHash } from 'node:crypto'
|
|
|
|
const root = resolve(import.meta.dirname, '..')
|
|
const assets = [
|
|
'admin-web/public/brand/logo-mark.png',
|
|
'admin-web/public/brand/login-illustration.jpg',
|
|
'miniapp/assets/brand/logo-mark.png',
|
|
'miniapp/assets/brand/home-nightscape.jpg',
|
|
'miniapp/assets/brand/default-avatar.png',
|
|
'miniapp/assets/covers/activity-default.jpg',
|
|
'miniapp/assets/covers/classroom-default.jpg',
|
|
'miniapp/assets/covers/counseling-default.jpg',
|
|
'miniapp/assets/covers/anti-fraud-default.jpg',
|
|
'miniapp/assets/covers/station-default.jpg',
|
|
]
|
|
|
|
const miniappHeroAssets = [
|
|
'miniapp/assets/brand/home-hero-v2.jpg',
|
|
'miniapp/assets/service/matchmaker-hero.jpg',
|
|
'miniapp/assets/service/counseling-hero.jpg',
|
|
'miniapp/assets/service/premarital-hero.jpg',
|
|
'miniapp/assets/service/anti-fraud-hero.jpg',
|
|
'miniapp/assets/service/station-hero.jpg',
|
|
]
|
|
|
|
const homeIconAssets = [
|
|
'find-object.png',
|
|
'matchmaker.png',
|
|
'activity.png',
|
|
'counseling.png',
|
|
'classroom.png',
|
|
'premarital.png',
|
|
'anti-fraud.png',
|
|
'service-station.png',
|
|
].map((name) => `miniapp/assets/icons/home/${name}`)
|
|
|
|
const uiIconAssets = [
|
|
'back.png',
|
|
'chevron-right.png',
|
|
'warning.png',
|
|
'empty.png',
|
|
'loading.png',
|
|
'search.png',
|
|
].map((name) => `miniapp/assets/icons/ui/${name}`)
|
|
|
|
for (const file of assets) {
|
|
const path = resolve(root, file)
|
|
assert.ok(existsSync(path), `缺少品牌资产 ${file}`)
|
|
assert.ok(readFileSync(path).length > 4096, `品牌资产为空或过小 ${file}`)
|
|
}
|
|
|
|
for (const file of miniappHeroAssets) {
|
|
const path = resolve(root, file)
|
|
assert.ok(existsSync(path), `缺少小程序 Hero 素材 ${file}`)
|
|
assert.ok(readFileSync(path).length > 16 * 1024, `小程序 Hero 素材为空或过小 ${file}`)
|
|
}
|
|
|
|
const homeIconHashes = new Set()
|
|
for (const file of [...homeIconAssets, ...uiIconAssets]) {
|
|
const path = resolve(root, file)
|
|
assert.ok(existsSync(path), `缺少小程序图标 ${file}`)
|
|
const bytes = readFileSync(path)
|
|
assert.ok(bytes.length > 256, `小程序图标为空或过小 ${file}`)
|
|
if (homeIconAssets.includes(file)) homeIconHashes.add(createHash('sha256').update(bytes).digest('hex'))
|
|
}
|
|
assert.equal(homeIconHashes.size, homeIconAssets.length, '首页 8 个入口不得复用同一图标')
|
|
|
|
console.log('Brand asset contracts passed')
|