Files
hi-landing-hero/scripts/build-model-decoder.mjs

39 lines
1.7 KiB
JavaScript

import { transform } from 'esbuild'
import fs from 'node:fs/promises'
import assert from 'node:assert/strict'
const reference = await fs.readFile('assets-source/hifast/hardware-reference.js', 'utf8')
const loader = (await fs.readFile('node_modules/three/examples/jsm/loaders/DRACOLoader.js', 'utf8'))
.replace(/^import\s*\{[\s\S]*?\}\s*from 'three';/, '')
.replace('export { DRACOLoader };', '')
// Reuse the reference's Three r180 classes. No second Three.js runtime is shipped.
const factory = `const hiDracoLoader = (() => {
const BufferAttribute=ut, BufferGeometry=It, Color=we, ColorManagement=qe,
FileLoader=vs, Loader=Cn, LinearSRGBColorSpace=Ct, SRGBColorSpace=ft;
${loader}
return new DRACOLoader().setDecoderPath('/hifast/draco/').setWorkerLimit(2);
})();\n`
const marker = ' var nx = new Ga().loadAsync('
assert.equal(
reference.split(marker).length,
2,
'Reference loader has changed; review adapter aliases before rebuilding',
)
const source = reference.replace(
marker,
factory + ' var nx = new Ga().setDRACOLoader(hiDracoLoader).loadAsync(',
)
const result = await transform(source, { minify: true, target: 'es2020', legalComments: 'eof' })
await fs.writeFile('public/hifast/hardware.js', result.code)
await fs.mkdir('public/hifast/draco', { recursive: true })
for (const name of ['draco_wasm_wrapper.js', 'draco_decoder.wasm', 'draco_decoder.js']) {
await fs.copyFile(
`node_modules/three/examples/jsm/libs/draco/gltf/${name}`,
`public/hifast/draco/${name}`,
)
}
await fs.copyFile('node_modules/three/LICENSE', 'public/hifast/draco/THREE-LICENSE.txt')
await fs.copyFile(
'node_modules/three/examples/jsm/libs/draco/README.md',
'public/hifast/draco/README.md',
)