UNPKG

@threlte/gltf

Version:

GLTF to Threlte converter

56 lines (47 loc) 1.58 kB
import 'jsdom-global' import fs from 'node:fs/promises' import path from 'node:path' import * as prettier from 'prettier' import * as prettierPluginSvelte from 'prettier-plugin-svelte' import { transform } from './utils/transform.js' import { parse } from './utils/parser.js' import { GLTFLoader } from './bin/GLTFLoader.js' import { DRACOLoader } from './bin/DRACOLoader.js' globalThis.self = globalThis const gltfLoader = new GLTFLoader() const draco = new DRACOLoader() gltfLoader.setDRACOLoader(draco) export default async function (file, output, options) { try { await fs.stat(file) } catch { throw new Error(`${file} does not exist.`) } // Process GLTF if (options.transform || options.instance || options.instanceall) { const { name } = path.parse(file) const transformOut = path.join(`${name}-transformed.glb`) await transform(file, transformOut, options) file = transformOut } const filePath = `${options.root ?? '/'}${options.root ? path.basename(file) : path.normalize(file)}` const data = await fs.readFile(file) const gltf = await gltfLoader.parseAsync(data.buffer) const raw = parse(filePath, gltf, options) const prettiered = await prettier.format(raw, { singleQuote: true, trailingComma: 'es5', semi: false, printWidth: options.printwidth ?? 100, parser: 'svelte', plugins: [prettierPluginSvelte], overrides: [ { files: '*.svelte', options: { parser: 'svelte' } } ], singleAttributePerLine: true }) await fs.writeFile(output, prettiered) }