39 lines
1.7 KiB
JavaScript
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',
|
|
)
|