Files
dj/integration-work/validate_real_storyboard_drafts.cjs
2026-11-13 11:46:25 +08:00

18 lines
1.8 KiB
JavaScript

const fs=require('fs'),vm=require('vm');
const ts=require('../huobao-source/backend/node_modules/typescript');
const source=fs.readFileSync('huobao-source/backend/src/services/english-video-prompt.ts','utf8');
const part=source.slice(source.indexOf('const han ='),source.indexOf('export async function promptAssetNames'))+source.slice(source.indexOf('// Do not normalize'),source.indexOf('export async function translateVisualPrompt'));
const ctx={exports:{},console};vm.runInNewContext(ts.transpileModule(part,{compilerOptions:{module:ts.ModuleKind.CommonJS,target:ts.ScriptTarget.ES2022}}).outputText,ctx);
const utils={exports:{}};vm.runInNewContext(ts.transpileModule(fs.readFileSync('huobao-source/backend/src/utils/storyboard-generated-prompt.ts','utf8'),{compilerOptions:{module:ts.ModuleKind.CommonJS,target:ts.ScriptTarget.ES2022}}).outputText,utils);
for(const folder of process.argv.slice(2)){
const fixture=JSON.parse(fs.readFileSync(folder+'/drafts.json','utf8'));
for(const [i,call] of fixture.calls.entries())for(const shot of call.storyboards||[]){
const norm=p=>utils.exports.normalizeDraftAssets(utils.exports.normalizeDraftVoices(p,fixture.characters,shot.character_ids||[]),fixture.names);
try{ctx.exports.validateEnglishPrompt(norm(shot.video_prompt),norm(shot.video_prompt_en)||'',fixture.names);console.log(JSON.stringify({folder,call:i,shot:shot.shot_number,valid:true}));}
catch(e){
const from=ctx.exports.protectPrompt(norm(shot.video_prompt)||'',fixture.names),to=ctx.exports.protectPrompt(norm(shot.video_prompt_en)||'',fixture.names);
console.log(JSON.stringify({folder,call:i,shot:shot.shot_number,error:e.message,unprotectedHan:(to.text.match(/\p{Script=Han}+/gu)||[]),missing:from.literals.filter(x=>!to.literals.includes(x)),extra:to.literals.filter(x=>!from.literals.includes(x))}));
}
}
}