19 lines
1.7 KiB
JavaScript
19 lines
1.7 KiB
JavaScript
import {build} from 'esbuild';
|
|
import {mkdir,writeFile} from 'node:fs/promises';
|
|
import {fileURLToPath} from 'node:url';
|
|
import {resolve,join} from 'node:path';
|
|
|
|
const root=fileURLToPath(new URL('.',import.meta.url));
|
|
const destination=process.argv[2];
|
|
if(!destination)throw Error('Pass an artifact output directory; no server is started.');
|
|
const result=await build({entryPoints:[join(root,'main.tsx')],bundle:true,write:false,minify:true,
|
|
format:'iife',platform:'browser',jsx:'automatic',outfile:'preview.js',define:{'process.env.NODE_ENV':'"production"'},
|
|
alias:{'@nodedc/ui-react':resolve(root,'../../node_modules/@nodedc/ui-react/dist/index.js')},
|
|
nodePaths:[resolve(root,'../../node_modules')],logLevel:'warning'});
|
|
const js=result.outputFiles.find(f=>f.path.endsWith('.js')).text.replaceAll('</script','<\\/script');
|
|
const css=result.outputFiles.find(f=>f.path.endsWith('.css')).text.replaceAll('</style','<\\/style');
|
|
await mkdir(destination,{recursive:true});
|
|
const html=`<!doctype html><html lang="ru" data-nodedc-theme="dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta http-equiv="Content-Security-Policy" content="default-src 'none'; connect-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; font-src data:"><title>Mission Core · Профили управления · Прототип</title><style>${css}</style></head><body data-nodedc-ui><div id="root"></div><script>${js}</script></body></html>`;
|
|
await writeFile(join(destination,'rover-control-preview.html'),html);
|
|
console.log(JSON.stringify({artifact:join(destination,'rover-control-preview.html'),bytes:Buffer.byteLength(html),network:'disabled by CSP',hardware:'no adapter'}));
|