{"version":3,"sources":["../src/preprocess/models.ts","../src/preprocess/wrappers.ts"],"names":["promisify","gzip","path","fs","skeleton","gzipAsync","emitASUnmanagedFromSchema","pathToFileURL"],"mappings":"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","file":"chunk-UQMMTW5V.cjs","sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { gzip } from 'node:zlib';\nimport { promisify } from 'node:util';\nimport type { DQBuildOpts, SerializedDQVAT } from '../extensions/VATBuilder/VATBuilder';\n\nconst gzipAsync = promisify(gzip);\n\nexport type ShadoModelImportConfig =\n  | {\n      kind?: 'asset-container';\n      url: string;\n    }\n  | {\n      kind: 'scene-loader';\n      rootUrl: string;\n      fileName: string;\n      meshNames?: string[];\n    };\n\nexport type ShadoModelPackConfig = {\n  name: string;\n  outFile: string;\n  import: ShadoModelImportConfig;\n  meshName?: string;\n  skeletonName?: string;\n  includeAnimation?: boolean;\n  serializeScene?: boolean;\n  vat?: {\n    variants?: Array<'float16' | 'float32'>;\n    options?: DQBuildOpts;\n  };\n  artifacts?: {\n    asm?: string;\n    wgsl?: string;\n    glsl?: string;\n  };\n  runtime?: {\n    merge?: boolean;\n    disposeOriginalMaterial?: boolean;\n    replaceMaterial?: boolean;\n  };\n};\n\nexport type ShadoModelManifestConfig = {\n  outFile: string;\n  models: Array<\n    Pick<ShadoModelPackConfig, 'name' | 'import' | 'runtime' | 'vat' | 'includeAnimation'> & {\n      artifact?: string;\n      vat16?: string;\n      vat32?: string;\n      asm?: string;\n      wgsl?: string;\n      glsl?: string;\n    }\n  >;\n};\n\nexport type ShadoModelPackResult = {\n  name: string;\n  outFile: string;\n  files: string[];\n  vatVariants: string[];\n  meshCount: number;\n};\n\nexport type SerializedShadoModel = {\n  kind: 'shado.model';\n  version: 1;\n  name: string;\n  source: ShadoModelImportConfig;\n  runtime?: ShadoModelPackConfig['runtime'];\n  meshes: Array<{\n    name: string;\n    id: string;\n    vertices: number;\n    indices: number;\n    skeleton?: string;\n  }>;\n  skeletons: Array<{ name: string; id: string; bones: number }>;\n  scene?: unknown;\n  artifacts: {\n    vat16?: string;\n    vat32?: string;\n    asm?: string;\n    wgsl?: string;\n    glsl?: string;\n  };\n};\n\nexport async function packShadoModel(config: ShadoModelPackConfig): Promise<ShadoModelPackResult> {\n  if (!config.name) throw new Error('Model pack requires name');\n  if (!config.outFile) throw new Error(`Model pack '${config.name}' requires outFile`);\n\n  installNodeXMLHttpRequest();\n  const BABYLON = await import('@babylonjs/core');\n  await import('@babylonjs/loaders');\n  const { SceneSerializer } = await import('@babylonjs/core/Misc/sceneSerializer.js');\n  const { VATBuilder } = await import('../extensions/VATBuilder/VATBuilder.js');\n\n  const engine = new BABYLON.NullEngine({\n    renderWidth: 256,\n    renderHeight: 256,\n    textureSize: 256,\n    deterministicLockstep: false,\n    lockstepMaxSteps: 1,\n  });\n  const scene = new BABYLON.Scene(engine);\n  new BABYLON.FreeCamera('__shado_preprocess_camera', BABYLON.Vector3.Zero(), scene);\n  new BABYLON.HemisphericLight(\n    '__shado_preprocess_light',\n    new BABYLON.Vector3(0, 1, 0),\n    scene\n  );\n\n  try {\n    await importModel(BABYLON, scene, config.import);\n    await scene.whenReadyAsync();\n\n    const meshes = scene.meshes.filter(mesh => mesh.getTotalVertices() > 0);\n    const targetMesh =\n      (config.meshName ? meshes.find(mesh => mesh.name === config.meshName || mesh.id === config.meshName) : undefined) ??\n      meshes[0];\n    if (!targetMesh) throw new Error(`Model '${config.name}' did not load any renderable meshes`);\n\n    const skeleton =\n      (config.skeletonName\n        ? scene.skeletons.find(s => s.name === config.skeletonName || s.id === config.skeletonName)\n        : undefined) ??\n      targetMesh.skeleton ??\n      scene.skeletons[0];\n\n    const vat: Record<string, SerializedDQVAT> = {};\n    if (config.includeAnimation !== false) {\n      if (!skeleton) {\n        throw new Error(`Model '${config.name}' has no skeleton for DQ VAT preprocessing`);\n      }\n      const variants = config.vat?.variants?.length ? config.vat.variants : ['float16', 'float32'];\n      for (const variant of variants) {\n        const builder = VATBuilder.buildFromScene(scene as any, targetMesh as any, skeleton as any, {\n          ...(config.vat?.options ?? {}),\n          useHalfDQ: variant === 'float16',\n          forceHalfDQ: variant === 'float16',\n        });\n        vat[variant] = builder.toSerialized();\n      }\n    }\n\n    const outFile = normalizeModelOutFile(path.resolve(process.cwd(), config.outFile), config.name);\n    const outDir = path.dirname(outFile);\n    const stem = path.basename(outFile, '.model.json.gz');\n    await fs.mkdir(outDir, { recursive: true });\n\n    const artifactRefs: SerializedShadoModel['artifacts'] = { ...(config.artifacts ?? {}) };\n    const files: string[] = [];\n    for (const [variant, payload] of Object.entries(vat)) {\n      const suffix = variant === 'float16' ? 'vat16' : 'vat32';\n      const fileName = `${stem}.${suffix}.json.gz`;\n      const file = path.join(outDir, fileName);\n      await writeGzipJson(file, payload);\n      files.push(file);\n      if (variant === 'float16') artifactRefs.vat16 = fileName;\n      if (variant === 'float32') artifactRefs.vat32 = fileName;\n    }\n\n    const serialized: SerializedShadoModel = {\n      kind: 'shado.model',\n      version: 1,\n      name: config.name,\n      source: config.import,\n      runtime: config.runtime,\n      meshes: meshes.map(mesh => ({\n        name: mesh.name,\n        id: mesh.id,\n        vertices: mesh.getTotalVertices(),\n        indices: mesh.getTotalIndices(),\n        skeleton: mesh.skeleton?.name,\n      })),\n      skeletons: scene.skeletons.map(skeleton => ({\n        name: skeleton.name,\n        id: skeleton.id,\n        bones: skeleton.bones.length,\n      })),\n      artifacts: artifactRefs,\n    };\n\n    if (config.serializeScene ?? true) {\n      serialized.scene = await SceneSerializer.SerializeAsync(scene);\n    }\n\n    await writeGzipJson(outFile, serialized);\n    files.unshift(outFile);\n\n    return {\n      name: config.name,\n      outFile,\n      files,\n      vatVariants: Object.keys(vat),\n      meshCount: meshes.length,\n    };\n  } finally {\n    scene.dispose();\n    engine.dispose();\n  }\n}\n\nexport async function writeShadoModelManifest(config: ShadoModelManifestConfig): Promise<string> {\n  if (!config.outFile) throw new Error('Model manifest requires outFile');\n  const outFile = path.resolve(process.cwd(), config.outFile);\n  await fs.mkdir(path.dirname(outFile), { recursive: true });\n  const manifest = {\n    kind: 'shado.model.manifest',\n    version: 1,\n    models: Object.fromEntries(\n      config.models.map(model => [\n        model.name,\n        {\n          name: model.name,\n          import: model.import,\n          runtime: model.runtime,\n          includeAnimation: model.includeAnimation ?? true,\n          vat: model.vat,\n          artifacts: {\n            model: model.artifact ?? `models/${model.name}.model.json.gz`,\n            vat16: model.vat16 ?? `models/${model.name}.vat16.json.gz`,\n            vat32: model.vat32 ?? `models/${model.name}.vat32.json.gz`,\n            asm: model.asm,\n            wgsl: model.wgsl,\n            glsl: model.glsl,\n          },\n        },\n      ])\n    ),\n  };\n  await fs.writeFile(outFile, `${JSON.stringify(manifest, null, 2)}\\n`);\n  return outFile;\n}\n\nasync function writeGzipJson(file: string, payload: unknown) {\n  const json = `${JSON.stringify(payload)}\\n`;\n  const compressed = await gzipAsync(Buffer.from(json, 'utf8'), { level: 9 });\n  await fs.writeFile(file, compressed);\n}\n\nfunction normalizeModelOutFile(outFile: string, name: string): string {\n  if (outFile.endsWith('.model.json.gz')) return outFile;\n  if (outFile.endsWith('.shado-model.json')) return outFile.replace(/\\.shado-model\\.json$/, '.model.json.gz');\n  if (outFile.endsWith('.json')) return outFile.replace(/\\.json$/, '.model.json.gz');\n  if (outFile.endsWith('/')) return path.join(outFile, `${name}.model.json.gz`);\n  return outFile;\n}\n\nasync function importModel(BABYLON: typeof import('@babylonjs/core'), scene: any, source: ShadoModelImportConfig) {\n  if ('url' in source) {\n    const container = await BABYLON.LoadAssetContainerAsync(source.url, scene, undefined);\n    container.addAllToScene();\n    return;\n  }\n  await BABYLON.SceneLoader.ImportMeshAsync(\n    source.meshNames ?? '',\n    source.rootUrl,\n    source.fileName,\n    scene\n  );\n}\n\nfunction installNodeXMLHttpRequest() {\n  if (typeof (globalThis as any).XMLHttpRequest !== 'undefined') return;\n\n  type Listener = (event?: any) => void;\n\n  class FetchXMLHttpRequest {\n    public readyState = 0;\n    public status = 0;\n    public statusText = '';\n    public response: any = null;\n    public responseText = '';\n    public responseType: XMLHttpRequestResponseType = '';\n    public responseURL = '';\n    public timeout = 0;\n    public withCredentials = false;\n    public onreadystatechange: Listener | null = null;\n    public onload: Listener | null = null;\n    public onerror: Listener | null = null;\n    public onprogress: Listener | null = null;\n    public onabort: Listener | null = null;\n    public upload = {};\n\n    private _method = 'GET';\n    private _url = '';\n    private _headers = new Map<string, string>();\n    private _responseHeaders = new Map<string, string>();\n    private _listeners = new Map<string, Set<Listener>>();\n    private _controller: AbortController | undefined;\n\n    open(method: string, url: string) {\n      this._method = method;\n      this._url = url;\n      this.responseURL = url;\n      this._setReadyState(1);\n    }\n\n    setRequestHeader(name: string, value: string) {\n      this._headers.set(name, value);\n    }\n\n    getResponseHeader(name: string) {\n      return this._responseHeaders.get(name.toLowerCase()) ?? null;\n    }\n\n    getAllResponseHeaders() {\n      return [...this._responseHeaders.entries()].map(([k, v]) => `${k}: ${v}`).join('\\r\\n');\n    }\n\n    addEventListener(type: string, listener: Listener) {\n      const listeners = this._listeners.get(type) ?? new Set<Listener>();\n      listeners.add(listener);\n      this._listeners.set(type, listeners);\n    }\n\n    removeEventListener(type: string, listener: Listener) {\n      this._listeners.get(type)?.delete(listener);\n    }\n\n    async send(body?: BodyInit | null) {\n      this._controller = new AbortController();\n      try {\n        const response = await fetch(this._url, {\n          method: this._method,\n          headers: Object.fromEntries(this._headers),\n          body,\n          signal: this._controller.signal,\n        });\n        this.status = response.status;\n        this.statusText = response.statusText;\n        response.headers.forEach((value, key) => this._responseHeaders.set(key.toLowerCase(), value));\n        this._setReadyState(2);\n\n        const arrayBuffer = await response.arrayBuffer();\n        this._setReadyState(3);\n        if (this.responseType === 'arraybuffer') {\n          this.response = arrayBuffer;\n        } else if (this.responseType === 'blob') {\n          this.response = new Blob([arrayBuffer], {\n            type: response.headers.get('content-type') ?? undefined,\n          });\n        } else {\n          this.responseText = new TextDecoder().decode(arrayBuffer);\n          this.response = this.responseText;\n        }\n        this._dispatch('progress', { loaded: arrayBuffer.byteLength, total: arrayBuffer.byteLength });\n        this._setReadyState(4);\n        this.onload?.();\n        this._dispatch('load');\n        this._dispatch('loadend');\n      } catch (error) {\n        if ((error as any)?.name === 'AbortError') {\n          this.onabort?.(error);\n          this._dispatch('abort', error);\n        } else {\n          this.onerror?.(error);\n          this._dispatch('error', error);\n        }\n        this._dispatch('loadend');\n      }\n    }\n\n    abort() {\n      this._controller?.abort();\n    }\n\n    private _setReadyState(state: number) {\n      this.readyState = state;\n      this.onreadystatechange?.();\n      this._dispatch('readystatechange');\n    }\n\n    private _dispatch(type: string, event?: any) {\n      this._listeners.get(type)?.forEach(listener => listener(event));\n    }\n  }\n\n  (globalThis as any).XMLHttpRequest = FetchXMLHttpRequest;\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { gzip } from 'node:zlib';\nimport { promisify } from 'node:util';\nimport { emitASUnmanagedFromSchema } from '../asc/schema';\nimport type { InitializeConfig } from '../types';\nimport type { ShadoStructSchema } from '../schema/ShadoStructSchema';\n\nexport type ModuleExportRef = {\n  module: string;\n  export?: string;\n};\n\nexport type WrapperSchemaConfig = ModuleExportRef & {\n  initialize?: false | (Omit<InitializeConfig, 'extra'> & { extra?: ModuleExportRef | unknown });\n};\n\nexport type WrapperPreprocessConfig = {\n  name?: string;\n  outDir: string;\n  schemas: WrapperSchemaConfig[];\n  emit?: Array<'assemblyscript' | 'glsl' | 'wgsl' | 'json'>;\n  gzip?: boolean | Array<'assemblyscript' | 'glsl' | 'wgsl' | 'json'>;\n};\n\nexport type WrapperPreprocessResult = {\n  name: string;\n  outDir: string;\n  files: string[];\n  schemas: Array<{ name: string; headerFloatCount: number }>;\n};\n\ntype ResolvedSchema = {\n  schema: ShadoStructSchema;\n};\n\nconst gzipAsync = promisify(gzip);\n\nexport async function preprocessShadoWrappers(\n  config: WrapperPreprocessConfig,\n  options: { configDir?: string; only?: 'assemblyscript' | 'gpu' | 'all' } = {}\n): Promise<WrapperPreprocessResult> {\n  if (!config.outDir) throw new Error('Wrapper preprocessing requires outDir');\n  if (!config.schemas?.length) throw new Error('Wrapper preprocessing requires schemas[]');\n\n  const emit = new Set(config.emit ?? ['assemblyscript', 'glsl', 'wgsl', 'json']);\n  if (options.only === 'assemblyscript') {\n    emit.clear();\n    emit.add('assemblyscript');\n  } else if (options.only === 'gpu') {\n    emit.clear();\n    emit.add('glsl');\n    emit.add('wgsl');\n    emit.add('json');\n  }\n\n  const outDir = path.resolve(process.cwd(), config.outDir);\n  await fs.mkdir(outDir, { recursive: true });\n\n  const resolved = await Promise.all(\n    config.schemas.map(schemaConfig => resolveSchema(schemaConfig, options.configDir))\n  );\n\n  const files: string[] = [];\n  const manifestSchemas: Array<{\n    name: string;\n    headerFloatCount: number;\n    files: Record<string, string | undefined>;\n  }> = [];\n  for (const { schema } of resolved) {\n    const baseName = safeFileName(schema.name);\n    const schemaFiles: Record<string, string | undefined> = {};\n    const metadata = {\n      kind: 'shado.wrapper.schema',\n      version: 1,\n      name: schema.name,\n      headerFloatCount: schema.headerFloatCount,\n      fields: schema.fields,\n      varArrays: Object.fromEntries(\n        Object.entries(schema.varArrays).map(([name, meta]) => [\n          name,\n          { elemType: meta.elemType, floatStride: meta.floatStride },\n        ])\n      ),\n      structArrays: Object.fromEntries(\n        Object.entries(schema.structArrays).map(([name, meta]) => [\n          name,\n          { schema: meta.schema.name, floatStride: meta.floatStride },\n        ])\n      ),\n    };\n\n    if (emit.has('json')) {\n      const written = await writeTextMaybeGzip(\n        outDir,\n        `${baseName}.schema.json`,\n        `${JSON.stringify(metadata, null, 2)}\\n`,\n        shouldGzip(config.gzip, 'json')\n      );\n      files.push(...written.files);\n      schemaFiles.schema = written.fileName;\n      schemaFiles.schemaGzip = written.gzipFileName;\n    }\n    if (emit.has('assemblyscript')) {\n      const written = await writeTextMaybeGzip(\n        outDir,\n        `${baseName}.asc.ts`,\n        `${emitASUnmanagedFromSchema(schema)}\\n`,\n        shouldGzip(config.gzip, 'assemblyscript')\n      );\n      files.push(...written.files);\n      schemaFiles.assemblyscript = written.fileName;\n      schemaFiles.assemblyscriptGzip = written.gzipFileName;\n    }\n    if (emit.has('glsl')) {\n      const written = await writeTextMaybeGzip(\n        outDir,\n        `${baseName}.glsl`,\n        [schema.emitOffsets(), schema.emitGLSLStorage()].join('\\n\\n') + '\\n',\n        shouldGzip(config.gzip, 'glsl')\n      );\n      files.push(...written.files);\n      schemaFiles.glsl = written.fileName;\n      schemaFiles.glslGzip = written.gzipFileName;\n    }\n    if (emit.has('wgsl')) {\n      const written = await writeTextMaybeGzip(\n        outDir,\n        `${baseName}.wgsl`,\n        [schema.emitOffsetsWGSL(), schema.emitWGSLStorage()].join('\\n\\n') + '\\n',\n        shouldGzip(config.gzip, 'wgsl')\n      );\n      files.push(...written.files);\n      schemaFiles.wgsl = written.fileName;\n      schemaFiles.wgslGzip = written.gzipFileName;\n    }\n    manifestSchemas.push({\n      name: schema.name,\n      headerFloatCount: schema.headerFloatCount,\n      files: schemaFiles,\n    });\n  }\n\n  const manifest = {\n    kind: 'shado.wrapper.manifest',\n    version: 1,\n    name: config.name ?? 'wrappers',\n    schemas: manifestSchemas,\n  };\n  files.push(await writeText(outDir, 'manifest.json', `${JSON.stringify(manifest, null, 2)}\\n`));\n\n  return {\n    name: manifest.name,\n    outDir,\n    files,\n    schemas: resolved.map(({ schema }) => ({\n      name: schema.name,\n      headerFloatCount: schema.headerFloatCount,\n    })),\n  };\n}\n\nasync function resolveSchema(\n  schemaConfig: WrapperSchemaConfig,\n  configDir = process.cwd()\n): Promise<ResolvedSchema> {\n  const ctor = await importRef(schemaConfig, configDir);\n  if (!ctor) {\n    throw new Error(`Could not resolve ${schemaConfig.export ?? 'default'} from ${schemaConfig.module}`);\n  }\n\n  const initialize = schemaConfig.initialize;\n  if (initialize !== false && typeof ctor.initialize === 'function') {\n    const initConfig = await resolveInitializeConfig(initialize ?? { wasm: false }, configDir);\n    const ok = await ctor.initialize({}, { wasm: false, ...initConfig });\n    if (!ok) throw new Error(`${ctor.name ?? schemaConfig.module}.initialize() failed`);\n  }\n\n  const schema =\n    ctor.schema ??\n    (typeof ctor.getSchema === 'function' ? ctor.getSchema([]) : undefined);\n  if (!schema) {\n    throw new Error(`${ctor.name ?? schemaConfig.module} does not expose a Shado schema`);\n  }\n  return { schema };\n}\n\nasync function resolveInitializeConfig(\n  config: WrapperSchemaConfig['initialize'],\n  configDir: string\n): Promise<InitializeConfig> {\n  if (!config) return { wasm: false };\n  const next: InitializeConfig = { ...(config as InitializeConfig), wasm: config.wasm ?? false };\n  const extra = (config as any).extra;\n  if (isModuleExportRef(extra)) {\n    next.extra = await importRef(extra, configDir);\n  }\n  return next;\n}\n\nasync function importRef(ref: ModuleExportRef, configDir: string): Promise<any> {\n  const specifier = resolveModuleSpecifier(ref.module, configDir);\n  const mod = await import(specifier);\n  return ref.export ? mod[ref.export] : (mod.default ?? mod);\n}\n\nfunction resolveModuleSpecifier(moduleName: string, configDir: string): string {\n  if (moduleName.startsWith('.') || moduleName.startsWith('/')) {\n    return pathToFileURL(path.resolve(configDir, moduleName)).href;\n  }\n  return moduleName;\n}\n\nfunction isModuleExportRef(value: unknown): value is ModuleExportRef {\n  return !!value && typeof value === 'object' && typeof (value as any).module === 'string';\n}\n\nfunction safeFileName(name: string): string {\n  return name.replace(/[^a-z0-9._-]+/gi, '-');\n}\n\nasync function writeText(outDir: string, fileName: string, contents: string): Promise<string> {\n  const file = path.join(outDir, fileName);\n  await fs.writeFile(file, contents);\n  return file;\n}\n\nasync function writeTextMaybeGzip(\n  outDir: string,\n  fileName: string,\n  contents: string,\n  shouldCompress: boolean\n): Promise<{ fileName: string; gzipFileName?: string; files: string[] }> {\n  const file = await writeText(outDir, fileName, contents);\n  const files = [file];\n  let gzipFileName: string | undefined;\n  if (shouldCompress) {\n    gzipFileName = `${fileName}.gz`;\n    const gzipFile = path.join(outDir, gzipFileName);\n    await fs.writeFile(gzipFile, await gzipAsync(Buffer.from(contents, 'utf8'), { level: 9 }));\n    files.push(gzipFile);\n  }\n  return { fileName, gzipFileName, files };\n}\n\nfunction shouldGzip(\n  gzip: WrapperPreprocessConfig['gzip'],\n  kind: 'assemblyscript' | 'glsl' | 'wgsl' | 'json'\n): boolean {\n  if (gzip === true) return true;\n  return Array.isArray(gzip) ? gzip.includes(kind) : false;\n}\n"]}