{"version":3,"sources":["../src/asc/index.ts"],"names":["loadASC","emitASUnmanagedFromSchema","readAscRecordSchema"],"mappings":"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","file":"chunk-DM2GRNOU.cjs","sourcesContent":["import { emitASUnmanagedFromSchema } from './schema';\nimport {\n  readAscRecordSchema,\n  type AscRecordField,\n  type AscRecordFieldType,\n  type AscRecordSchema,\n} from './records';\n\nexport { loadASC } from './load';\nexport { asPrelude } from './prelude';\nexport { genericASModuleSource } from './generic';\nexport { buildOpsForParent } from './ops';\nexport { emitASUnmanagedFromSchema } from './schema';\nexport { ascField, ascRecord, readAscRecordSchema } from './records';\nexport type { AscRecordField, AscRecordFieldType, AscRecordSchema } from './records';\n\nexport type AscGeneratedRecordFieldType = AscRecordFieldType;\n\nexport type AscGeneratedSchemaRef = {\n  module: string;\n  export?: string;\n  initialize?: false | Record<string, unknown>;\n};\n\nexport type AscGeneratedRecordField = AscRecordField;\n\nexport type AscGeneratedRecord = AscRecordSchema;\nexport type AscGeneratedRecordRef = AscGeneratedSchemaRef;\n\nexport type AscGeneratedFileConfig = {\n  outFile: string;\n  schemas?: AscGeneratedSchemaRef[];\n  records?: Array<AscGeneratedRecord | AscGeneratedRecordRef>;\n};\n\nexport type AscPrecompileConfig = {\n  inputPaths: string[];\n  outFile: string;\n  generatedFiles?: AscGeneratedFileConfig[];\n  gzipFile?: string;\n  base64File?: string;\n  base64ExportName?: string;\n  base64Source?: 'outFile' | 'gzipFile';\n  textFile?: string;\n  sourceMap?: boolean;\n  debug?: boolean;\n  optimizeLevel?: 0 | 1 | 2 | 3 | 4;\n  shrinkLevel?: 0 | 1 | 2;\n  runtime?: 'stub' | 'minimal' | 'incremental';\n  simd?: boolean;\n  noAssert?: boolean;\n};\n\nexport async function precompileAssemblyScript(config: AscPrecompileConfig): Promise<{\n  outFile: string;\n  gzipFile?: string;\n  base64File?: string;\n  textFile?: string;\n}> {\n  if (!config.inputPaths?.length) {\n    throw new Error('precompileAssemblyScript requires at least one input path');\n  }\n  if (!config.outFile) {\n    throw new Error('precompileAssemblyScript requires outFile');\n  }\n\n  if (config.generatedFiles?.length) {\n    await Promise.all(config.generatedFiles.map(file => writeGeneratedAscFile(file)));\n  }\n\n  const { loadASC } = await import('./load.js');\n  const asc = await loadASC();\n\n  const args = [\n    ...config.inputPaths,\n    '--outFile',\n    config.outFile,\n    ...(config.textFile ? ['--textFile', config.textFile] : []),\n    ...(config.sourceMap ? ['--sourceMap'] : []),\n    ...(config.debug ? ['--debug'] : ['--optimizeLevel', String(config.optimizeLevel ?? 3)]),\n    ...(config.shrinkLevel != null ? ['--shrinkLevel', String(config.shrinkLevel)] : []),\n    ...((config.noAssert ?? true) ? ['--noAssert'] : []),\n    ...((config.simd ?? true) ? ['--enable', 'simd'] : []),\n    '--runtime',\n    config.runtime ?? 'stub',\n    '--noColors',\n  ];\n\n  const result = await asc.main(args);\n  if (result?.error) {\n    throw new Error(`AssemblyScript precompile failed: ${result.error.message ?? result.error}`);\n  }\n\n  if (config.gzipFile) {\n    const [{ readFile, writeFile, mkdir }, { dirname }, { gzip }] = await Promise.all([\n      import('node:fs/promises'),\n      import('node:path'),\n      import('node:zlib'),\n    ]);\n    const { promisify } = await import('node:util');\n    const compressed = await promisify(gzip)(await readFile(config.outFile), { level: 9 });\n    await mkdir(dirname(config.gzipFile), { recursive: true });\n    await writeFile(config.gzipFile, compressed);\n  }\n\n  if (config.base64File) {\n    const [{ readFile, writeFile, mkdir }, { dirname }] = await Promise.all([\n      import('node:fs/promises'),\n      import('node:path'),\n    ]);\n    const sourceFile =\n      config.base64Source === 'gzipFile'\n        ? config.gzipFile\n        : config.base64Source === 'outFile'\n          ? config.outFile\n          : (config.gzipFile ?? config.outFile);\n    if (!sourceFile) {\n      throw new Error('base64Source \"gzipFile\" requires gzipFile');\n    }\n    const exportName = config.base64ExportName ?? 'SHADO_WASM_BASE64';\n    const base64 = (await readFile(sourceFile)).toString('base64');\n    await mkdir(dirname(config.base64File), { recursive: true });\n    await writeFile(\n      config.base64File,\n      ['// Generated by shado asc build.', `export const ${exportName} = \"${base64}\";`, ''].join(\n        '\\n'\n      )\n    );\n  }\n\n  return {\n    outFile: config.outFile,\n    gzipFile: config.gzipFile,\n    base64File: config.base64File,\n    textFile: config.textFile,\n  };\n}\n\nasync function writeGeneratedAscFile(config: AscGeneratedFileConfig): Promise<void> {\n  const [{ writeFile, mkdir }, { dirname }] = await Promise.all([\n    import('node:fs/promises'),\n    import('node:path'),\n  ]);\n  const parts = ['// Generated by shado asc build. Do not edit.', ''];\n  for (const schemaRef of config.schemas ?? []) {\n    const schema = await resolveSchemaRef(schemaRef);\n    parts.push(emitASUnmanagedFromSchema(schema), '');\n  }\n  for (const record of config.records ?? []) {\n    parts.push(emitASRecord(await resolveRecord(record)), '');\n  }\n  await mkdir(dirname(config.outFile), { recursive: true });\n  await writeFile(config.outFile, parts.join('\\n'));\n}\n\nasync function resolveRecord(\n  record: AscGeneratedRecord | AscGeneratedRecordRef\n): Promise<AscGeneratedRecord> {\n  if ('fields' in record) return record;\n  const ctor = await resolveExportRef(record);\n  const schema = readAscRecordSchema(ctor);\n  if (!schema) {\n    throw new Error(`${ctor.name ?? record.module} does not expose a Shado ASC record schema`);\n  }\n  return schema;\n}\n\nasync function resolveSchemaRef(ref: AscGeneratedSchemaRef): Promise<any> {\n  const ctor = await resolveExportRef(ref);\n  const initialize = ref.initialize;\n  if (initialize !== false && typeof ctor.initialize === 'function') {\n    const ok = await ctor.initialize({}, { wasm: false, ...(initialize ?? {}) });\n    if (!ok) throw new Error(`${ctor.name ?? ref.module}.initialize() failed`);\n  }\n  const schema =\n    ctor.schema ?? (typeof ctor.getSchema === 'function' ? ctor.getSchema([]) : undefined);\n  if (!schema) {\n    throw new Error(`${ctor.name ?? ref.module} does not expose a Shado schema`);\n  }\n  return schema;\n}\n\nasync function resolveExportRef(ref: AscGeneratedSchemaRef): Promise<any> {\n  const { pathToFileURL } = await import('node:url');\n  const { resolve } = await import('node:path');\n  const specifier =\n    ref.module.startsWith('.') || ref.module.startsWith('/')\n      ? pathToFileURL(resolve(process.cwd(), ref.module)).href\n      : ref.module;\n  const mod = await import(specifier);\n  const ctor = ref.export ? mod[ref.export] : (mod.default ?? mod);\n  if (!ctor) {\n    throw new Error(`Could not resolve ${ref.export ?? 'default'} from ${ref.module}`);\n  }\n  return ctor;\n}\n\nfunction emitASRecord(record: AscGeneratedRecord): string {\n  const lines: string[] = [];\n  const offsets: Array<{ name: string; offset: number }> = [];\n  let cursor = 0;\n  let padIndex = 0;\n  lines.push(`@unmanaged`);\n  lines.push(`export class ${record.name} {`);\n  for (const field of record.fields) {\n    const offset = field.byteOffset ?? cursor;\n    if (offset < cursor) {\n      throw new Error(`${record.name}.${field.name} overlaps previous field`);\n    }\n    while (cursor < offset) {\n      lines.push(`  __pad${padIndex++}: u8;`);\n      cursor++;\n    }\n    offsets.push({ name: field.name, offset });\n    const emitted = emitASRecordField(field.name, field.type);\n    for (const line of emitted.lines) lines.push(`  ${line}`);\n    cursor += emitted.byteSize;\n  }\n  const byteSize = record.byteSize ?? cursor;\n  if (byteSize < cursor) {\n    throw new Error(`${record.name}.byteSize ${byteSize} is smaller than emitted ${cursor}`);\n  }\n  while (cursor < byteSize) {\n    lines.push(`  __pad${padIndex++}: u8;`);\n    cursor++;\n  }\n  lines.push(`}`);\n  for (const field of offsets) {\n    lines.push(`export const OFFSET_${record.name}_${field.name}: i32 = ${field.offset};`);\n  }\n  lines.push(`export const SIZEOF_${record.name}: i32 = ${byteSize};`);\n  return lines.join('\\n');\n}\n\nfunction emitASRecordField(\n  name: string,\n  type: AscGeneratedRecordFieldType\n): { lines: string[]; byteSize: number } {\n  switch (type) {\n    case 'i32':\n    case 'u32':\n    case 'f32':\n    case 'f64':\n      return { lines: [`${name}: ${type};`], byteSize: type === 'f64' ? 8 : 4 };\n    case 'vec2':\n      return { lines: [`${name}_x: f32; ${name}_y: f32;`], byteSize: 8 };\n    case 'vec3':\n      return { lines: [`${name}_x: f32; ${name}_y: f32; ${name}_z: f32;`], byteSize: 12 };\n    case 'vec4':\n      return {\n        lines: [`${name}_x: f32; ${name}_y: f32; ${name}_z: f32; ${name}_w: f32;`],\n        byteSize: 16,\n      };\n  }\n}\n"]}