{"version":3,"file":"record.mjs","names":[],"sources":["../../src/schemas/record.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { BaseSchema } from \"../core/base\";\nimport type { CombinedStandardProps, Schema } from \"../core/types\";\n\nexport class RecordSchema<K extends string | number, V> extends BaseSchema<unknown, Record<K, V>> {\n  private readonly keySchema?: Schema<unknown, K>;\n  private readonly valueSchema: Schema<unknown, V>;\n\n  constructor(keySchema: Schema<unknown, K> | undefined, valueSchema: Schema<unknown, V>) {\n    super();\n    this.keySchema = keySchema;\n    this.valueSchema = valueSchema;\n    this.jsonSchema = {\n      type: \"object\",\n      additionalProperties: valueSchema.jsonSchema,\n    };\n  }\n\n  get [\"~standard\"](): CombinedStandardProps<unknown, Record<K, V>> {\n    return {\n      version: 1,\n      vendor: \"h-schema\",\n      jsonSchema: {\n        input: () => this.jsonSchema,\n        output: () => this.jsonSchema,\n      },\n      validate: (value: unknown) => {\n        if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n          return { issues: [{ message: `Expected record, received ${typeof value}` }] };\n        }\n\n        const out: Record<string | number, any> = {};\n        const issues: StandardSchemaV1.Issue[] = [];\n        const obj = value as Record<string, unknown>;\n\n        for (const k of Object.keys(obj)) {\n          let key: any = k;\n          if (this.keySchema) {\n            const kr = this.keySchema[\"~standard\"].validate(k) as StandardSchemaV1.Result<K>;\n            if (\"issues\" in kr) {\n              if (kr.issues) {\n                issues.push(\n                  ...kr.issues.map((i) => ({\n                    ...i,\n                    path: i.path ? [k, ...i.path] : [k],\n                  })),\n                );\n              }\n              continue;\n            }\n            key = kr.value;\n          }\n\n          const vr = this.valueSchema[\"~standard\"].validate(obj[k]) as StandardSchemaV1.Result<V>;\n          if (\"issues\" in vr) {\n            if (vr.issues) {\n              issues.push(\n                ...vr.issues.map((i) => ({\n                  ...i,\n                  path: i.path ? [k, ...i.path] : [k],\n                })),\n              );\n            }\n          } else {\n            out[key] = vr.value;\n          }\n        }\n\n        if (issues.length > 0) {\n          return { issues };\n        }\n        return { value: out as Record<K, V> };\n      },\n      types: {\n        input: {} as unknown,\n        output: {} as Record<K, V>,\n      },\n    };\n  }\n}\n"],"mappings":";;AAIA,IAAa,eAAb,cAAgE,WAAkC;CAChG;CACA;CAEA,YAAY,WAA2C,aAAiC;EACtF,MAAM;EACN,KAAK,YAAY;EACjB,KAAK,cAAc;EACnB,KAAK,aAAa;GAChB,MAAM;GACN,sBAAsB,YAAY;EACpC;CACF;CAEA,KAAK,eAA6D;EAChE,OAAO;GACL,SAAS;GACT,QAAQ;GACR,YAAY;IACV,aAAa,KAAK;IAClB,cAAc,KAAK;GACrB;GACA,WAAW,UAAmB;IAC5B,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GACpE,OAAO,EAAE,QAAQ,CAAC,EAAE,SAAS,6BAA6B,OAAO,QAAQ,CAAC,EAAE;IAG9E,MAAM,MAAoC,CAAC;IAC3C,MAAM,SAAmC,CAAC;IAC1C,MAAM,MAAM;IAEZ,KAAK,MAAM,KAAK,OAAO,KAAK,GAAG,GAAG;KAChC,IAAI,MAAW;KACf,IAAI,KAAK,WAAW;MAClB,MAAM,KAAK,KAAK,UAAU,YAAY,CAAC,SAAS,CAAC;MACjD,IAAI,YAAY,IAAI;OAClB,IAAI,GAAG,QACL,OAAO,KACL,GAAG,GAAG,OAAO,KAAK,OAAO;QACvB,GAAG;QACH,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC;OACpC,EAAE,CACJ;OAEF;MACF;MACA,MAAM,GAAG;KACX;KAEA,MAAM,KAAK,KAAK,YAAY,YAAY,CAAC,SAAS,IAAI,EAAE;KACxD,IAAI,YAAY,IACV;UAAA,GAAG,QACL,OAAO,KACL,GAAG,GAAG,OAAO,KAAK,OAAO;OACvB,GAAG;OACH,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC;MACpC,EAAE,CACJ;KAAA,OAGF,IAAI,OAAO,GAAG;IAElB;IAEA,IAAI,OAAO,SAAS,GAClB,OAAO,EAAE,OAAO;IAElB,OAAO,EAAE,OAAO,IAAoB;GACtC;GACA,OAAO;IACL,OAAO,CAAC;IACR,QAAQ,CAAC;GACX;EACF;CACF;AACF"}