scripts/build-editor.mjs
Rama main · réplica de lectura del repositorio original.
import {build} from 'esbuild';
import {readFile, mkdir, copyFile} from 'node:fs/promises';
await mkdir('public/assets/editor', {recursive:true});
await build({entryPoints:['resources/js/editor.js'],bundle:true,minify:true,format:'iife',outfile:'public/assets/editor/editor.js',legalComments:'linked',plugins:[{
name:'current-dompurify',
setup(builder){builder.onLoad({filter:/@toast-ui\/editor\/dist\/esm\/index\.js$/},async ({path})=>{
const source=await readFile(path,'utf8');
// Toast UI ships its sanitizer inline. Replace that entire vendored copy,
// not just its npm dependency, so the browser receives the patched version.
const start=source.indexOf('/*! @license DOMPurify');
const end=source.indexOf('var purify = createDOMPurify();',start);
if(start<0 || end<0) throw new Error('Editor sanitizer layout changed: review before building');
return {contents:source.slice(0,start)+"import purify from 'dompurify';\n"+source.slice(end+'var purify = createDOMPurify();'.length),resolveDir:path.slice(0,path.lastIndexOf('/')),loader:'js'};
});}
}]});
await copyFile('node_modules/@toast-ui/editor/dist/toastui-editor.css','public/assets/editor/editor.css');
await copyFile('node_modules/@toast-ui/editor/dist/theme/toastui-editor-dark.css','public/assets/editor/dark.css');