Files
photo-live/packages/embed-loader/sync-to-viewer.js
T
浅念 66d1eb3e9f feat(embed,ui04): E01 v2 contract skeleton — displayMode/scrollSpeed/reactionsEnabled, v2 loader entry and fixed 195x280 shell
- contracts: EmbedSlotSettings optional v2 fields (carousel default) + SlotSettingsPayload; gen + redocly green
- api: DTO validation + normalization full-set (cn manage + ov public projection share normalizeStoredSettings)
- embed-loader: params v2 parse/merge/url family, loader-v2.js fixed shell (border/radius/#10161E/safe-area, resize ignored, stack gap 12), dual-artifact build+sync; v1 source frozen
- viewer: EmbedPage v=2 branch, EmbedStream (viewport/track/real anchors/collapse/empty), stream.ts pure fns, i18n zh/en
- admin: types + utils (create default vertical-stream, clampScrollSpeed, v1/v2 snippet selection)
- tests: loader 36 (+9 v2), viewer 222, admin 82, api unit 51, v1 embed e2e 20, v2 E01 gate 2 (195x280 desktop+mobile cross-origin, no footer)

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-22 12:50:28 +08:00

37 lines
1.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// packages/embed-loader/sync-to-viewer.js
// 复制构建产物到 viewer 静态目录:vite publicDir(apps/viewer/public/)在 dev
// 直接可访问、build 自动携带进 dist/。拷贝后 sha256 校验,不一致即失败(构建
// 脚本级检查,非生产路径,允许 console)。用法:pnpm --filter @photo/embed-loader
// sync(先 build)。UI-04 起 v1/v2 双产物。
import { createHash } from 'node:crypto';
import { cpSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
import { dirname, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
const here = dirname(fileURLToPath(import.meta.url));
const targets = [
{ src: 'dist/v1/loader.js', dest: '../../apps/viewer/public/embed/v1/loader.js' },
{ src: 'dist/v2/loader.js', dest: '../../apps/viewer/public/embed/v2/loader.js' },
];
function sha256(p) {
return createHash('sha256').update(readFileSync(p)).digest('hex');
}
for (const { src: srcRel, dest: destRel } of targets) {
const src = resolve(here, srcRel);
const dest = resolve(here, destRel);
if (!existsSync(src)) {
console.error(`[sync] missing ${srcRel} — run \`pnpm build\` first`);
process.exit(1);
}
mkdirSync(dirname(dest), { recursive: true });
cpSync(src, dest);
const srcHash = sha256(src);
if (srcHash !== sha256(dest)) {
console.error(`[sync] hash mismatch after copy — ${destRel} diverged`);
process.exit(1);
}
console.log(`[sync] ${srcRel} -> ${destRel} (sha256 ${srcHash.slice(0, 12)}…)`);
}