UNPKG

@threlte/gltf

Version:

GLTF to Threlte converter

99 lines (91 loc) 3.92 kB
#!/usr/bin/env node 'use strict' import { dirname, parse } from 'node:path' import { fileURLToPath } from 'node:url' import meow from 'meow' import { readPackageUpSync } from 'read-pkg-up' import gltf from './src/index.js' const __filename = fileURLToPath(import.meta.url) const __dirname = dirname(__filename) const cli = meow( ` Usage $ npx @threlte/gltf@latest [Model.glb] [options] Options --output, -o Output file name/path --types, -t Add Typescript definitions --keepnames, -k Keep original names --keepgroups, -K Keep (empty) groups, disable pruning --meta, -m Include metadata (as userData) --shadows, -s Let meshes cast and receive shadows --printwidth, -w Prettier printWidth (default: 120) --precision, -p Number of fractional digits (default: 2) --draco, -d Draco binary path --preload -P Add preload method to module script --suspense -u Make the component suspense-ready --isolated, -i Output as isolated module --root, -r Sets directory from which .gltf file is served --transform, -T Transform the asset for the web (draco, prune, resize) --resolution, -R Transform resolution for texture resizing (default: 1024) --keepmeshes, -j Do not join compatible meshes --keepmaterials, -M Do not palette join materials --format, -f Texture format (default: "webp") --simplify, -S Transform simplification (default: false) --ratio Simplifier ratio (default: 0.75) --error Simplifier error threshold (default: 0.001) --debug, -D Debug output `, { importMeta: import.meta, flags: { output: { type: 'string', shortFlag: 'o' }, types: { type: 'boolean', shortFlag: 't' }, keepnames: { type: 'boolean', shortFlag: 'k' }, keepgroups: { type: 'boolean', shortFlag: 'K' }, shadows: { type: 'boolean', shortFlag: 's' }, printwidth: { type: 'number', shortFlag: 'w', default: 120 }, meta: { type: 'boolean', shortFlag: 'm' }, precision: { type: 'number', shortFlag: 'p', default: 2 }, isolated: { type: 'boolean', shortFlag: 'i', default: false }, preload: { type: 'boolean', shortFlag: 'P', default: false }, suspense: { type: 'boolean', shortFlag: 'u', default: false }, draco: { type: 'string', shortFlag: 'd' }, root: { type: 'string', shortFlag: 'r' }, transform: { type: 'boolean', shortFlag: 'T' }, resolution: { type: 'number', shortFlag: 'R', default: 1024 }, degrade: { type: 'string', shortFlag: 'q', default: '' }, degraderesolution: { type: 'number', shortFlag: 'Q', default: 512 }, simplify: { type: 'boolean', shortFlag: 'S', default: false }, keepmeshes: { type: 'boolean', shortFlag: 'j', default: false }, keepmaterials: { type: 'boolean', shortFlag: 'M', default: false }, format: { type: 'string', shortFlag: 'f', default: 'webp' }, ratio: { type: 'number', default: 0.75 }, error: { type: 'number', default: 0.001 }, debug: { type: 'boolean', shortFlag: 'D' } } } ) const { packageJson } = readPackageUpSync({ cwd: __dirname, normalize: false }) if (cli.input.length === 0) { console.log(cli.help) } else { const file = cli.input[0] const name = parse(file).name const output = cli.flags.output ? cli.flags.output.endsWith('.svelte') ? cli.flags.output : `${cli.flags.output}.svelte` : `${name}.svelte` try { await gltf(file, output, { ...cli.flags, header: `Auto-generated by: https://github.com/threlte/threlte/tree/main/packages/gltf Command: npx @threlte/gltf@${packageJson.version} ${process.argv.slice(2).join(' ')}`, showLog: (log) => console.info('log:', log), timeout: 0, delay: 1 }) } catch (e) { console.error(e) } }