Files

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')