{"version":3,"file":"lookup-codec-builder.mjs","sources":["../../src/lookup-codec-builder.ts"],"sourcesContent":["import type { Codec, StringRecord } from \"@pezkuwi/bizinikiwi-bindings\"\nimport * as scale from \"@pezkuwi/bizinikiwi-bindings\"\nimport type { LookupEntry } from \"./lookups\"\nimport { withCache } from \"./with-cache\"\n\nconst _bytes = scale.Bin()\n\nconst _buildCodec = (\n input: LookupEntry,\n cache: Map>,\n stack: Set,\n _accountId: Codec,\n): Codec => {\n if (input.type === \"primitive\") return scale[input.value]\n if (input.type === \"void\") return scale._void\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"AccountId20\") return scale.ethAccount\n if (input.type === \"compact\")\n return input.isBig ? scale.compactBn : scale.compactNumber\n if (input.type === \"bitSequence\") return scale.BitSeq(input.isLSB)\n\n const buildNextCodec = (nextInput: LookupEntry): Codec =>\n buildCodec(nextInput, cache, stack, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const innerCodec = buildNextCodec(inner)\n return len ? scale.Vector(innerCodec, len) : scale.Vector(innerCodec)\n }\n\n const buildTuple = (value: LookupEntry[]) =>\n scale.Tuple(...value.map(buildNextCodec))\n\n const buildStruct = (value: StringRecord) => {\n const inner = Object.fromEntries(\n Object.entries(value).map(([key, value]) => [key, buildNextCodec(value)]),\n ) as StringRecord>\n return scale.Struct(inner)\n }\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return _bytes\n }\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\")\n return scale.Bin(input.len)\n\n return buildVector(input.value, input.len)\n }\n\n if (input.type === \"sequence\") return buildVector(input.value)\n if (input.type === \"tuple\") return buildTuple(input.value)\n if (input.type === \"struct\") return buildStruct(input.value)\n\n if (input.type === \"option\") return scale.Option(buildNextCodec(input.value))\n\n if (input.type === \"result\")\n return scale.Result(\n buildNextCodec(input.value.ok),\n buildNextCodec(input.value.ko),\n )\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n switch (v.type) {\n case \"void\":\n return scale._void\n case \"lookupEntry\":\n return buildNextCodec(v.value)\n case \"tuple\":\n return buildTuple(v.value)\n case \"struct\":\n return buildStruct(v.value)\n case \"array\":\n return buildVector(v.value, v.len)\n }\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => {\n return [key, dependencies[idx]]\n }),\n ) as StringRecord>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n const variantCodec = areIndexesSorted\n ? scale.Variant(inner)\n : scale.Variant(inner, indexes as any)\n return input.byteLength\n ? fixedSizeCodec(variantCodec, input.byteLength)\n : variantCodec\n}\nconst buildCodec = withCache(_buildCodec, scale.Self, (res) => res)\n\nexport const getLookupCodecBuilder = (\n lookup: (id: number) => LookupEntry,\n accountId = scale.AccountId(),\n) => {\n const cache = new Map()\n const buildDefinition = (id: number) =>\n buildCodec(lookup(id), cache, new Set(), accountId)\n\n return (id: number) => buildDefinition(id)\n}\n\nconst fixedSizeCodec = (codec: Codec, size: number): Codec => {\n const allBytes = scale.Bytes(size)\n return scale.createCodec(\n (value: T) => allBytes.enc(codec.enc(value)),\n (data) => codec.dec(allBytes.dec(data)),\n )\n}\n"],"names":["inner","value"],"mappings":"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"}