{"version":3,"sources":["../src/types.ts","../src/utils/type-helpers.ts","../src/asc/schema.ts"],"names":[],"mappings":"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","file":"chunk-KRASCSNK.cjs","sourcesContent":["import type { ASCExtension } from './core/Shado';\nimport { PendingField } from './decorators';\nimport type { ShadoStructSchema } from './schema/ShadoStructSchema';\n\nexport type ScalarType = 'f32' | 'i32' | 'u32';\nexport type VectorType = 'vec2' | 'vec3' | 'vec4';\nexport type MatrixType = 'mat2' | 'mat3' | 'mat4';\n\nexport interface VarArrayType {\n  arrayOf: FieldType;\n}\nexport type FieldType = ScalarType | VectorType | MatrixType | VarArrayType | StructRef;\n\nexport type BackendKind = 'storage' | 'datatex';\n\nexport type WasmInitializeMode =\n  | false\n  | 'off'\n  | 'runtime'\n  | {\n      mode: 'off' | 'runtime' | 'precompiled';\n      module?: WebAssembly.Module | ArrayBuffer | Uint8Array;\n    };\n\nexport type InitializeConfig = {\n  logShaderCode?: boolean;\n  logAscCode?: boolean;\n  backend?: BackendKind;\n  debugWasm?: boolean;\n  wasm?: WasmInitializeMode;\n  additionalFields?: PendingField[];\n  extra?: any;\n};\n\nexport interface GPUBacking {\n  kind: BackendKind;\n  commit(): void;\n  bind(effect: any, includeName: string): void;\n  bindMaterial?(material: any, includeName: string): void;\n  dispose(): void;\n}\n\nexport interface FieldDef {\n  name: string;\n  type: FieldType;\n  headerFloatOffset?: number;\n  headerFloatSize?: number;\n}\n\nexport type Segment = { offF: number; lenF: number; capF: number };\n\nexport type ScalarTy = 'i32' | 'u32' | 'f32';\nexport type UboField = { name: string; ty: ScalarTy; comment?: string };\n\nexport type SchemaSpec = {\n  name: string;\n  storageName: string;\n  uboFields: UboField[];\n};\n\nexport type DynamicMeta = {\n  storageName: string;\n  bases?: Record<string, number>;\n  strides?: Record<string, number>;\n  counts?: Record<string, number>;\n  extraI32?: string[];\n};\n\nexport type StorageSpec = {\n  storageName: string;\n  access?: 'read' | 'read_write';\n};\n\nexport type ShadoStatics = {\n  schema?: ShadoStructSchema;\n  backingPreference?: BackendKind;\n  getSchema(additionalFields: PendingField[]): ShadoStructSchema;\n  registerIncludes(): void;\n  buildSchema(): ShadoStructSchema;\n  debugShaderCode(engine: any): void;\n  debugAscCode(): void;\n  shaderIO(engine: any): { uniforms: string[]; samplers: string[] };\n  wasmCompiled?: boolean;\n  compiledWasmModule?: WebAssembly.Module;\n  ascExtension?: ASCExtension;\n};\n\nexport type ShadoBaseCtor = ShadoStatics & { new?: any };\n\n// add at top-level exports\nexport const LAZY_CTOR: unique symbol = Symbol('shado.lazyCtor');\n\nexport type LazyCtor<T = any> = (() => T) & { [LAZY_CTOR]: true };\n\nexport type StructRef = { structOf: any } | { structOf: LazyCtor<any> };\n\nexport type ShadoConcreteCtor<T = any> = (new (engine: any, ...args: any[]) => T) & ShadoStatics;\n\nexport interface StructArrayType<T = any> {\n  arrayOf: { structOf: ShadoConcreteCtor<T> };\n}\n\nexport type ShadoAbstractCtor<T = any> = ShadoBaseCtor & (abstract new (engine: any) => T);\n\nexport type DirtyEvent =\n  | { kind: 'header'; byteOffset?: number; byteLength?: number }\n  | { kind: 'var'; field: string; byteOffset?: number; byteLength?: number }\n  | {\n      kind: 'struct-array';\n      field: string;\n      index?: number;\n      byteOffset?: number;\n      byteLength?: number;\n    };\n\nexport type DirtyHandler = (ev: DirtyEvent) => void;\n","import {\n  type FieldType,\n  type VarArrayType,\n  type StructRef,\n  type ScalarType,\n  type VectorType,\n  type MatrixType,\n  type LazyCtor,\n  LAZY_CTOR,\n} from '../types';\n\n// ------------------------------ Type Guards ------------------------------------\nexport function isVarArray(t: FieldType): t is VarArrayType {\n  return typeof t === 'object' && !!(t as any)?.arrayOf;\n}\n\nexport function isScalar(t: any): t is ScalarType {\n  return t === 'f32' || t === 'i32' || t === 'u32';\n}\n\nexport function isVector(t: any): t is VectorType {\n  return t === 'vec2' || t === 'vec3' || t === 'vec4';\n}\n\nexport function isMatrix(t: any): t is MatrixType {\n  return t === 'mat2' || t === 'mat3' || t === 'mat4';\n}\n\nexport function isVarArrayOfStruct(t: FieldType): t is VarArrayType {\n  return isVarArray(t) && isStructRef(t.arrayOf as any);\n}\n\n// floats per element in our packed representation\nexport function floatStrideOf(t: ScalarType | VectorType | MatrixType): number {\n  if (isScalar(t)) {\n    return 1;\n  }\n  if (t === 'vec2') {\n    return 2;\n  }\n  if (t === 'vec3') {\n    return 4;\n  } // padded to 4\n  if (t === 'vec4') {\n    return 4;\n  }\n  if (t === 'mat2') {\n    return 4;\n  } // 2 columns * vec2\n  if (t === 'mat3') {\n    return 12;\n  } // 3 columns * padded vec3\n  if (t === 'mat4') {\n    return 16;\n  } // 4 columns * vec4\n  throw new Error(`Unknown type: ${t as any}`);\n}\n\nexport function isStructRef(t: any): t is StructRef {\n  return !!(t && typeof t === 'object' && 'structOf' in t);\n}\n\n// Utility so callers can write structOf: lazy(() => Foo)\nexport const lazy = <T>(fn: () => T): LazyCtor<T> => {\n  (fn as any)[LAZY_CTOR] = true;\n  return fn as LazyCtor<T>;\n};\n\n// Heuristic to detect a *class constructor* (works for native + most transpiled TS)\nfunction isClassFunction(fn: any): boolean {\n  if (typeof fn !== 'function') return false;\n  const s = Function.prototype.toString.call(fn);\n  if (/^\\s*class\\b/.test(s)) return true; // native class\n  // transpiled/older patterns: prototype with members beyond 'constructor'\n  const proto = fn.prototype;\n  if (!proto) return false;\n  const names = Object.getOwnPropertyNames(proto);\n  // if it has any prototype methods besides constructor, it's likely a class-ish ctor\n  return names.some(n => n !== 'constructor');\n}\n\nexport function resolveCtor(x: any) {\n  if (!x) return x;\n\n  if (typeof x === 'function' && x[LAZY_CTOR]) {\n    const out = (x as Function)();\n    return resolveCtor(out);\n  }\n\n  if (typeof x === 'function' && isClassFunction(x)) {\n    return x;\n  }\n  return x;\n}\n","import { resolveCtor } from '../utils/type-helpers';\n\n// asc/schema.ts\nexport function emitASUnmanagedFromSchema(parentSchema: any): string {\n  const lines: string[] = [];\n\n  function emitClass(name: string, fields: any[]) {\n    const structFields = [] as string[];\n    lines.push(`@unmanaged\\nclass ${name}Header {`);\n    let totalSize = 0;\n    for (const f of fields) {\n      if (f.type?.arrayOf) {\n        if (f.type.arrayOf?.structOf) {\n          const childCtor = resolveCtor(f.type.arrayOf.structOf);\n          const childSchema = childCtor.getSchema();\n          structFields.push(childSchema.name);\n        } else {\n          // Need to map up vec and mat families to unmanaged classes here\n          // lines.push(`  ${f.name}: StaticArray<${f.type.arrayOf}>;`);\n        }\n        continue;\n      }\n      switch (f.type) {\n        case 'f32':\n          totalSize += 4;\n          lines.push(`  ${f.name}: f32;`);\n          break;\n        case 'i32':\n          totalSize += 4;\n          lines.push(`  ${f.name}: i32;`);\n          break;\n        case 'u32':\n          totalSize += 4;\n          lines.push(`  ${f.name}: u32;`);\n          break;\n        case 'vec2':\n          totalSize += 8;\n          lines.push(`  ${f.name}_x:f32; ${f.name}_y:f32;`);\n          break;\n        case 'vec3':\n          totalSize += 12;\n          lines.push(`  ${f.name}_x:f32; ${f.name}_y:f32; ${f.name}_z:f32;`);\n          break;\n        case 'vec4':\n          totalSize += 16;\n          lines.push(`  ${f.name}_x:f32; ${f.name}_y:f32; ${f.name}_z:f32; ${f.name}_w:f32;`);\n          break;\n        case 'mat2':\n          totalSize += 16;\n          lines.push(\n            `  ${f.name}_m00:f32; ${f.name}_m10:f32; ${f.name}_m01:f32; ${f.name}_m11:f32;`\n          );\n          break;\n        case 'mat3':\n          totalSize += 48;\n          // 3 vec4 rows/cols with last lane pad — keep 12 floats\n          lines.push(\n            `  ${f.name}_c0x:f32; ${f.name}_c0y:f32; ${f.name}_c0z:f32; ${f.name}_c0w:f32;`,\n            `  ${f.name}_c1x:f32; ${f.name}_c1y:f32; ${f.name}_c1z:f32; ${f.name}_c1w:f32;`,\n            `  ${f.name}_c2x:f32; ${f.name}_c2y:f32; ${f.name}_c2z:f32; ${f.name}_c2w:f32;`\n          );\n          break;\n        case 'mat4':\n          totalSize += 64;\n          // 16 floats, 4x vec4 columns\n          for (let c = 0; c < 4; c++)\n            lines.push(\n              `  ${f.name}_c${c}x:f32; ${f.name}_c${c}y:f32; ${f.name}_c${c}z:f32; ${f.name}_c${c}w:f32;`\n            );\n          break;\n        default:\n          break;\n      }\n    }\n    // pad to headerFloatCount * 4\n    const needF =\n      parentSchema.name === name\n        ? parentSchema.headerFloatCount\n        : (parentSchema.structArrays[name]?.schema?.headerFloatCount ?? 0);\n\n    const haveF = totalSize >> 2;\n    const padF = Math.max(0, needF - haveF);\n    for (let i = 0; i < padF; i++) lines.push(`  __pad${i}: f32;`);\n\n    lines.push(`}`);\n\n    for (const f of fields) {\n      if (f.type?.arrayOf) continue;\n      const offF = f.headerFloatOffset ?? 0;\n      lines.push(`export const OFFSET_${name}_${f.name}: i32 = ${offF * 4};`);\n    }\n    for (const field of structFields) {\n      lines.push(`\n@inline\nfunction instancePtr_${field}(h: ${name}Header, i: i32): usize {\n  return h.instancesPtr + usize(i) * SIZEOF_${field}Header;\n}\n\n@inline\nfunction instanceRef_${field}(h: ${name}Header, i: i32): ${field}Header {\n  return changetype<${field}Header>(instancePtr_${field}(h, i));\n}\n\n`);\n    }\n    lines.push(`export const SIZEOF_${name}Header: i32 = ${totalSize};\\n`);\n  }\n\n  for (const [_arrName, meta] of Object.entries(parentSchema.structArrays)) {\n    const child = (meta as any).schema;\n    emitClass(child.name, child.fields);\n  }\n\n  emitClass(parentSchema.name, parentSchema.fields);\n\n  return lines.join('\\n');\n}\n"]}