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