{"version":3,"sources":["../src/asc/records.ts"],"names":[],"mappings":"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","file":"chunk-BADHBF5V.cjs","sourcesContent":["const ASC_RECORD_META_KEY = Symbol('shado:ascRecordMeta');\nconst ASC_RECORD_FIELDS_KEY = Symbol('shado:ascRecordFields');\nconst ASC_RECORD_FIELD_LIST_KEY = '__shado:ascRecordFields:list';\n\nexport type AscRecordFieldType = 'i32' | 'u32' | 'f32' | 'f64' | 'vec2' | 'vec3' | 'vec4';\n\nexport type AscRecordField = {\n  name: string;\n  type: AscRecordFieldType;\n  byteOffset?: number;\n};\n\nexport type AscRecordSchema = {\n  name: string;\n  fields: AscRecordField[];\n  byteSize?: number;\n};\n\nexport type AscRecordConfig = {\n  name?: string;\n  byteSize?: number;\n};\n\nexport type AscRecordFieldConfig = {\n  byteOffset?: number;\n};\n\nexport function ascRecord(meta: AscRecordConfig = {}) {\n  return function (...args: any[]) {\n    args = args.filter(Boolean);\n    if (args.length === 1 && typeof args[0] === 'function') {\n      const ctor = args[0];\n      writeAscRecordMeta(ctor, meta);\n      return;\n    }\n    if (args.length === 2 && typeof args[1] === 'object' && 'kind' in args[1]) {\n      const value = args[0] as Function;\n      const context = args[1];\n      writeAscRecordMeta(value, meta);\n      const aggregated =\n        (context.metadata?.[ASC_RECORD_FIELD_LIST_KEY] as AscRecordField[] | undefined) ?? [];\n      if (aggregated.length) {\n        writeAscRecordFields(value, aggregated);\n      }\n      return;\n    }\n  };\n}\n\nexport function ascField(type: AscRecordFieldType, config: AscRecordFieldConfig = {}) {\n  return function (...args: any[]) {\n    args = args.filter(Boolean);\n    if (args.length === 2 && (typeof args[1] === 'string' || typeof args[1] === 'symbol')) {\n      const target = args[0];\n      const name = String(args[1]);\n      const ctor = target.constructor;\n      appendAscRecordField(ctor, { name, type, byteOffset: config.byteOffset });\n      return;\n    }\n    if (args.length === 2 && typeof args[1] === 'object' && 'kind' in args[1]) {\n      const context = args[1];\n      const name = String(context.name);\n      context.addInitializer(function (this: any) {\n        const ctor = typeof this === 'function' ? this : this?.constructor;\n        if (!ctor) return;\n        appendAscRecordField(ctor, { name, type, byteOffset: config.byteOffset });\n      });\n      return;\n    }\n  };\n}\n\nexport function readAscRecordSchema(ctor: any): AscRecordSchema | undefined {\n  if (!ctor) return undefined;\n  const existing = ctor.ascRecord ?? ctor.record ?? ctor.schema;\n  if (isAscRecordSchema(existing)) {\n    return {\n      name: existing.name,\n      fields: existing.fields.slice(),\n      byteSize: existing.byteSize,\n    };\n  }\n  const meta = readAscRecordMeta(ctor);\n  const fields = readAscRecordFields(ctor);\n  if (!meta && !fields.length) return undefined;\n  return {\n    name: meta?.name ?? ctor.name,\n    fields,\n    byteSize: meta?.byteSize,\n  };\n}\n\nfunction writeAscRecordMeta(ctor: any, meta: AscRecordConfig): void {\n  (Reflect as any).defineMetadata?.(ASC_RECORD_META_KEY, meta, ctor);\n  ctor[ASC_RECORD_META_KEY] = meta;\n}\n\nfunction readAscRecordMeta(ctor: any): AscRecordConfig | undefined {\n  return (\n    (Reflect as any).getMetadata?.(ASC_RECORD_META_KEY, ctor) ??\n    ctor[ASC_RECORD_META_KEY]\n  ) as AscRecordConfig | undefined;\n}\n\nfunction writeAscRecordFields(ctor: any, fields: AscRecordField[]): void {\n  (Reflect as any).defineMetadata?.(ASC_RECORD_FIELDS_KEY, fields, ctor);\n  ctor[ASC_RECORD_FIELDS_KEY] = fields;\n}\n\nfunction readAscRecordFields(ctor: any): AscRecordField[] {\n  return (\n    ((Reflect as any).getMetadata?.(ASC_RECORD_FIELDS_KEY, ctor) ??\n      ctor[ASC_RECORD_FIELDS_KEY] ??\n      []) as AscRecordField[]\n  ).slice();\n}\n\nfunction appendAscRecordField(ctor: any, field: AscRecordField): void {\n  const fields = readAscRecordFields(ctor);\n  if (!fields.some(existing => existing.name === field.name)) {\n    fields.push(field);\n  }\n  writeAscRecordFields(ctor, fields);\n}\n\nfunction isAscRecordSchema(value: any): value is AscRecordSchema {\n  return (\n    value != null &&\n    typeof value.name === 'string' &&\n    Array.isArray(value.fields) &&\n    value.fields.every(\n      (field: any) => typeof field?.name === 'string' && typeof field?.type === 'string'\n    )\n  );\n}\n"]}