@polkadot-api/view-builder 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -72,6 +72,10 @@ type BitSequenceDecoded = WithInputAndPath<{
72
72
  bytes: Uint8Array;
73
73
  };
74
74
  }>;
75
+ type EthAccountDecoded = WithInputAndPath<{
76
+ codec: "ethAccount";
77
+ value: HexString;
78
+ }>;
75
79
  type BytesSequenceDecoded = WithInputAndPath<{
76
80
  codec: "Bytes";
77
81
  value: HexString;
@@ -88,7 +92,7 @@ type AccountIdDecoded = WithInputAndPath<{
88
92
  address: string;
89
93
  };
90
94
  }>;
91
- type PrimitiveDecoded = VoidDecoded | BoolDecoded | StringDecoded | NumberDecoded | BigNumberDecoded | BitSequenceDecoded | BytesSequenceDecoded | BytesArrayDecoded | AccountIdDecoded;
95
+ type PrimitiveDecoded = VoidDecoded | BoolDecoded | StringDecoded | NumberDecoded | BigNumberDecoded | BitSequenceDecoded | BytesSequenceDecoded | BytesArrayDecoded | AccountIdDecoded | EthAccountDecoded;
92
96
  type SequenceDecoded = WithInputAndPath<{
93
97
  codec: "Sequence";
94
98
  value: Array<Decoded>;
@@ -164,4 +168,4 @@ type Shape = {
164
168
 
165
169
  declare const getViewBuilder: GetViewBuilder;
166
170
 
167
- export { type AccountIdDecoded, type ArrayDecoded, type ArrayShape, type BigNumberDecoded, type BitSequenceDecoded, type BoolDecoded, type BytesArrayDecoded, type BytesSequenceDecoded, type ComplexDecoded, type ComplexShape, type Decoded, type DecodedCall, type EnumDecoded, type EnumShape, type GetViewBuilder, type NumberDecoded, type OptionDecoded, type OptionShape, type PrimitiveDecoded, type ResultDecoded, type ResultShape, type SequenceDecoded, type SequenceShape, type Shape, type StringDecoded, type StructDecoded, type StructShape, type TupleDecoded, type TupleShape, type UnshapedDecoder, type VoidDecoded, getViewBuilder };
171
+ export { type AccountIdDecoded, type ArrayDecoded, type ArrayShape, type BigNumberDecoded, type BitSequenceDecoded, type BoolDecoded, type BytesArrayDecoded, type BytesSequenceDecoded, type ComplexDecoded, type ComplexShape, type Decoded, type DecodedCall, type EnumDecoded, type EnumShape, type EthAccountDecoded, type GetViewBuilder, type NumberDecoded, type OptionDecoded, type OptionShape, type PrimitiveDecoded, type ResultDecoded, type ResultShape, type SequenceDecoded, type SequenceShape, type Shape, type StringDecoded, type StructDecoded, type StructShape, type TupleDecoded, type TupleShape, type UnshapedDecoder, type VoidDecoded, getViewBuilder };
package/dist/index.d.ts CHANGED
@@ -72,6 +72,10 @@ type BitSequenceDecoded = WithInputAndPath<{
72
72
  bytes: Uint8Array;
73
73
  };
74
74
  }>;
75
+ type EthAccountDecoded = WithInputAndPath<{
76
+ codec: "ethAccount";
77
+ value: HexString;
78
+ }>;
75
79
  type BytesSequenceDecoded = WithInputAndPath<{
76
80
  codec: "Bytes";
77
81
  value: HexString;
@@ -88,7 +92,7 @@ type AccountIdDecoded = WithInputAndPath<{
88
92
  address: string;
89
93
  };
90
94
  }>;
91
- type PrimitiveDecoded = VoidDecoded | BoolDecoded | StringDecoded | NumberDecoded | BigNumberDecoded | BitSequenceDecoded | BytesSequenceDecoded | BytesArrayDecoded | AccountIdDecoded;
95
+ type PrimitiveDecoded = VoidDecoded | BoolDecoded | StringDecoded | NumberDecoded | BigNumberDecoded | BitSequenceDecoded | BytesSequenceDecoded | BytesArrayDecoded | AccountIdDecoded | EthAccountDecoded;
92
96
  type SequenceDecoded = WithInputAndPath<{
93
97
  codec: "Sequence";
94
98
  value: Array<Decoded>;
@@ -164,4 +168,4 @@ type Shape = {
164
168
 
165
169
  declare const getViewBuilder: GetViewBuilder;
166
170
 
167
- export { type AccountIdDecoded, type ArrayDecoded, type ArrayShape, type BigNumberDecoded, type BitSequenceDecoded, type BoolDecoded, type BytesArrayDecoded, type BytesSequenceDecoded, type ComplexDecoded, type ComplexShape, type Decoded, type DecodedCall, type EnumDecoded, type EnumShape, type GetViewBuilder, type NumberDecoded, type OptionDecoded, type OptionShape, type PrimitiveDecoded, type ResultDecoded, type ResultShape, type SequenceDecoded, type SequenceShape, type Shape, type StringDecoded, type StructDecoded, type StructShape, type TupleDecoded, type TupleShape, type UnshapedDecoder, type VoidDecoded, getViewBuilder };
171
+ export { type AccountIdDecoded, type ArrayDecoded, type ArrayShape, type BigNumberDecoded, type BitSequenceDecoded, type BoolDecoded, type BytesArrayDecoded, type BytesSequenceDecoded, type ComplexDecoded, type ComplexShape, type Decoded, type DecodedCall, type EnumDecoded, type EnumShape, type EthAccountDecoded, type GetViewBuilder, type NumberDecoded, type OptionDecoded, type OptionShape, type PrimitiveDecoded, type ResultDecoded, type ResultShape, type SequenceDecoded, type SequenceShape, type Shape, type StringDecoded, type StructDecoded, type StructShape, type TupleDecoded, type TupleShape, type UnshapedDecoder, type VoidDecoded, getViewBuilder };
package/dist/index.js CHANGED
@@ -92,7 +92,8 @@ var _primitives = [
92
92
  "i256",
93
93
  "compactNumber",
94
94
  "compactBn",
95
- "bitSequence"
95
+ "bitSequence",
96
+ "ethAccount"
96
97
  ];
97
98
  var corePrimitives = Object.fromEntries(
98
99
  _primitives.map((x) => [x, primitiveShapedDecoder(x, scale[x].dec)])
@@ -198,6 +199,8 @@ var _buildShapedDecoder = (input, cache, stack, lookupData, _accountId) => {
198
199
  return primitives[input.value];
199
200
  if (input.type === "void")
200
201
  return primitives._void;
202
+ if (input.type === "AccountId20")
203
+ return primitives.ethAccount;
201
204
  if (input.type === "AccountId32")
202
205
  return _accountId;
203
206
  if (input.type === "compact")
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/view-builder.ts","../src/shaped-decoders.ts","../src/with-cache.ts"],"sourcesContent":["export * from \"./types\"\nexport { getViewBuilder } from \"./view-builder\"\n","import { mapObject, mapStringRecord } from \"@polkadot-api/utils\"\nimport {\n Decoder,\n type StringRecord,\n type V15,\n type V14Lookup,\n createDecoder,\n u8,\n HexString,\n enhanceDecoder,\n} from \"@polkadot-api/substrate-bindings\"\nimport type { EnumVar, LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport {\n primitives,\n complex,\n WithShapeWithoutExtra,\n ShapedDecoder,\n selfDecoder,\n AccountIdShaped,\n WithoutExtra,\n} from \"./shaped-decoders\"\nimport {\n AccountIdDecoded,\n Decoded,\n DecodedCall,\n GetViewBuilder,\n PrimitiveDecoded,\n UnshapedDecoder,\n} from \"./types\"\nimport { withCache } from \"./with-cache\"\n\nconst emptyTuple = complex.Tuple()\n\nconst toUnshapedDecoder =\n <A extends Array<any>>(\n fn: (...args: A) => ShapedDecoder,\n ): ((...args: A) => UnshapedDecoder) =>\n (...args) => {\n const value = fn(...args)\n return {\n shape: value.shape,\n decoder: value as Decoder<Decoded>,\n }\n }\n\ntype WithProp<\n T extends Decoder<any> & { shape: any },\n PropName extends string,\n PropValue,\n> = T extends Decoder<infer D> & { shape: infer S }\n ? Decoder<\n D extends WithoutExtra<PrimitiveDecoded>\n ? PrimitiveDecoded\n : D & { [P in PropName]: PropValue }\n > & { shape: S }\n : T\n\nconst withProp = <PropName extends string, PropValue>(\n input: ShapedDecoder,\n propName: PropName,\n propValue: PropValue,\n): WithProp<ShapedDecoder, PropName, PropValue> => {\n const decoder = enhanceDecoder(input as Decoder<{}>, (x) => ({\n ...x,\n [propName]: propValue,\n })) as WithProp<ShapedDecoder, PropName, PropValue>\n decoder.shape = input.shape\n return decoder\n}\n\nconst addPath =\n <Other extends Array<any>>(\n fn: (\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n ...rest: Other\n ) => ShapedDecoder,\n ): ((\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n ...rest: Other\n ) => ShapedDecoder | WithProp<ShapedDecoder, \"path\", string[]>) =>\n (input, cache, stack, lookupData, ...rest) => {\n const { path } = lookupData[input.id]\n const base = fn(input, cache, stack, lookupData, ...rest)\n return path.length ? withProp(base, \"path\", path) : base\n }\n\nconst _buildShapedDecoder = (\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n _accountId: WithShapeWithoutExtra<AccountIdDecoded>,\n): ShapedDecoder => {\n if (input.type === \"primitive\") return primitives[input.value]\n if (input.type === \"void\") return primitives._void\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"compact\")\n return input.isBig || input.isBig === null\n ? primitives.compactBn\n : primitives.compactNumber\n if (input.type === \"bitSequence\") return primitives.bitSequence\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return primitives.Bytes\n }\n\n const buildNext = (nextInput: LookupEntry): ShapedDecoder =>\n buildShapedDecoder(nextInput, cache, stack, lookupData, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const _inner = buildNext(inner)\n return len ? complex.Array(_inner, len) : complex.Sequence(_inner)\n }\n\n const buildTuple = (value: LookupEntry[], innerDocs: string[][]) =>\n withProp(complex.Tuple(...value.map(buildNext)), \"innerDocs\", innerDocs)\n\n const buildStruct = (\n value: StringRecord<LookupEntry>,\n innerDocs: StringRecord<string[]>,\n ) =>\n withProp(\n complex.Struct(mapStringRecord(value, buildNext)),\n \"innerDocs\",\n innerDocs,\n )\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\") {\n return primitives.BytesArray(input.len)\n }\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, input.innerDocs)\n if (input.type === \"struct\") return buildStruct(input.value, input.innerDocs)\n if (input.type === \"option\") return complex.Option(buildNext(input.value))\n\n if (input.type === \"result\")\n return complex.Result(buildNext(input.value.ok), buildNext(input.value.ko))\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n if (v.type === \"void\") return primitives._void\n if (v.type === \"lookupEntry\") {\n return buildNext(v.value)\n }\n return v.type === \"tuple\"\n ? buildTuple(v.value, v.innerDocs)\n : buildStruct(v.value, v.innerDocs)\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => [key, dependencies[idx]]),\n ) as StringRecord<ShapedDecoder>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n const withoutDocs = areIndexesSorted\n ? complex.Enum(inner)\n : complex.Enum(inner, indexes as any)\n\n const withDocs = enhanceDecoder(withoutDocs, (val) => {\n const docs = input.innerDocs[val.value.type]\n return {\n ...val,\n docs,\n }\n }) as unknown as typeof withoutDocs\n withDocs.shape = withoutDocs.shape\n return withDocs\n}\n\nconst withPath = addPath(_buildShapedDecoder)\nconst buildShapedDecoder = withCache(withPath, selfDecoder, (outter, inner) => {\n inner.shape = outter.shape\n return outter\n})\n\nconst hexStrFromByte = (input: number) =>\n `0x${input.toString(16).padEnd(2, \"0\")}` as HexString\n\nexport const getViewBuilder: GetViewBuilder = (metadata: V15) => {\n const lookupData = metadata.lookup\n const cache = new Map<number, ShapedDecoder>()\n\n const getDecoder = (id: number) =>\n buildShapedDecoder(\n getLookupEntryDef(id),\n cache,\n new Set(),\n lookupData,\n _accountId,\n )\n\n const getLookupEntryDef = getLookupFn(lookupData)\n\n let _accountId: WithShapeWithoutExtra<AccountIdDecoded> = primitives.AccountId\n\n const prefix = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"SS58Prefix\")\n if (prefix) {\n try {\n const prefixVal = getDecoder(prefix.type)(prefix.value).value\n\n if (typeof prefixVal === \"number\") _accountId = AccountIdShaped(prefixVal)\n } catch (_) {}\n }\n\n const buildDefinition = toUnshapedDecoder(getDecoder)\n\n const callDecoder: Decoder<DecodedCall> = createDecoder((bytes) => {\n const palletIdx = u8.dec(bytes)\n\n const palletEntry = metadata.pallets.find((x) => x.index === palletIdx)\n if (!palletEntry) throw new Error(\"Invalid Pallet\")\n\n const pallet = {\n value: {\n name: palletEntry.name,\n idx: palletIdx,\n },\n input: hexStrFromByte(bytes[0]),\n }\n\n const callsDecoder = getDecoder(palletEntry.calls!)\n\n const decoded = callsDecoder(bytes)\n\n if (decoded.codec !== \"Enum\") throw null\n\n const call = {\n value: {\n name: decoded.value.type,\n idx: bytes[1],\n },\n input: hexStrFromByte(bytes[1]),\n docs: (decoded as any).docs as string[],\n }\n\n return {\n pallet,\n call,\n args: { value: decoded.value.value as any, shape: callsDecoder.shape },\n }\n })\n\n const buildEnumEntry = toUnshapedDecoder(\n (\n entry: EnumVar[\"value\"][keyof EnumVar[\"value\"]],\n forceTuple = false,\n ): ShapedDecoder => {\n if (entry.type === \"void\")\n return forceTuple ? emptyTuple : primitives._void\n\n if (entry.type === \"lookupEntry\") return getDecoder(entry.value.id)\n\n return entry.type === \"tuple\"\n ? complex.Tuple(\n ...Object.values(entry.value).map((l) => getDecoder(l.id)),\n )\n : complex.Struct(\n mapObject(entry.value, (x) =>\n getDecoder(x.id),\n ) as StringRecord<ShapedDecoder>,\n )\n },\n )\n\n const buildVariant =\n (type: \"errors\" | \"events\" | \"calls\") =>\n (\n pallet: string,\n name: string,\n ): {\n view: UnshapedDecoder\n location: [number, number]\n } => {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n\n const lookup = getLookupEntryDef(palletEntry[type]!)\n if (lookup.type !== \"enum\") throw null\n\n const event = lookup.value[name]\n\n return {\n location: [palletEntry.index, event.idx],\n view: buildEnumEntry(event, type === \"calls\"),\n }\n }\n\n const buildConstant = (pallet: string, constantName: string) => {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type as number)\n }\n\n return {\n buildDefinition,\n callDecoder,\n\n buildEvent: buildVariant(\"events\"),\n buildError: buildVariant(\"errors\"),\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n }\n}\n","import { toHex as _toHex, mapStringRecord } from \"@polkadot-api/utils\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport type {\n Decoder,\n HexString,\n StringRecord,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n ArrayDecoded,\n ArrayShape,\n BytesArrayDecoded,\n ComplexDecoded,\n ComplexShape,\n Decoded,\n EnumDecoded,\n EnumShape,\n OptionDecoded,\n OptionShape,\n PrimitiveDecoded,\n ResultDecoded,\n ResultShape,\n SequenceDecoded,\n SequenceShape,\n StructDecoded,\n StructShape,\n TupleDecoded,\n TupleShape,\n} from \"./types\"\n\nconst toHex = _toHex as (input: Uint8Array) => HexString\n\ntype Extras = \"docs\" | \"path\" | \"innerDocs\"\nexport type WithoutExtra<T extends {}> = Omit<T, Extras>\ntype PrimitiveCodec = PrimitiveDecoded[\"codec\"]\ntype ComplexCodec = ComplexDecoded[\"codec\"]\n\nexport type WithShapeWithoutExtra<T extends PrimitiveDecoded> = Decoder<\n WithoutExtra<T>\n> & {\n shape: { codec: T[\"codec\"] }\n}\ntype PrimitiveShapeDecoder = WithShapeWithoutExtra<PrimitiveDecoded>\n\ntype SequenceShapedDecoder = Decoder<WithoutExtra<SequenceDecoded>> & {\n shape: SequenceShape\n}\ntype ArrayShapedDecoder = Decoder<WithoutExtra<ArrayDecoded>> & {\n shape: ArrayShape\n}\ntype TupleShapedDecoder = Decoder<WithoutExtra<TupleDecoded>> & {\n shape: TupleShape\n}\ntype StructShapedDecoder = Decoder<WithoutExtra<StructDecoded>> & {\n shape: StructShape\n}\n\ntype OptionShapedDecoder = Decoder<WithoutExtra<OptionDecoded>> & {\n shape: OptionShape\n}\n\ntype ResultShapedDecoder = Decoder<WithoutExtra<ResultDecoded>> & {\n shape: ResultShape\n}\n\ntype EnumShapedDecoder = Decoder<WithoutExtra<EnumDecoded>> & {\n shape: EnumShape\n}\ntype ComplexShapedDecoder =\n | SequenceShapedDecoder\n | ArrayShapedDecoder\n | TupleShapedDecoder\n | StructShapedDecoder\n | OptionShapedDecoder\n | ResultShapedDecoder\n | EnumShapedDecoder\n\nexport type ShapedDecoder = PrimitiveShapeDecoder | ComplexShapedDecoder\n\ntype PrimitiveDecodedValue<C extends PrimitiveCodec> = (PrimitiveDecoded & {\n codec: C\n})[\"value\"]\ntype PrimitiveDecodedRest<C extends PrimitiveCodec> = Omit<\n PrimitiveDecoded & { codec: C },\n \"value\" | \"input\" | \"codec\" | Extras\n>\n\ntype ComplexDecodedValue<C extends ComplexCodec> = (ComplexDecoded & {\n codec: C\n})[\"value\"]\ntype ComplexDecodedRest<C extends ComplexCodec> = Omit<\n ComplexDecoded & { codec: C },\n \"value\" | \"input\" | \"codec\" | Extras\n>\n\nconst createInputValueDecoder = <T, Rest extends { codec: Decoded[\"codec\"] }>(\n dec: Decoder<T>,\n rest: Rest,\n): Decoder<\n Rest & {\n input: HexString\n value: T\n }\n> =>\n scale.createDecoder((_bytes) => {\n const bytes = _bytes as Uint8Array & { i: number; v: DataView }\n const start = bytes.i\n const value = dec(bytes)\n const input = toHex(new Uint8Array(bytes.buffer.slice(start, bytes.i)))\n return { ...rest, value, input }\n })\n\nconst primitiveShapedDecoder = <C extends PrimitiveCodec>(\n codec: C,\n input: Decoder<PrimitiveDecodedValue<C>>,\n rest?: PrimitiveDecodedRest<C>,\n): WithShapeWithoutExtra<\n PrimitiveDecoded & {\n codec: C\n }\n> => {\n const decoder: Decoder<WithoutExtra<PrimitiveDecoded>> =\n createInputValueDecoder(input, { codec, ...rest })\n\n return Object.assign(decoder, {\n shape: { codec },\n }) as any\n}\n\nconst complexShapedDecoder = <Shape extends ComplexShape>(\n shape: Shape,\n input: Decoder<ComplexDecodedValue<Shape[\"codec\"]>>,\n rest?: ComplexDecodedRest<Shape[\"codec\"]>,\n): Decoder<\n WithoutExtra<\n ComplexDecoded & {\n codec: Shape[\"codec\"]\n }\n >\n> & {\n shape: Shape\n} => {\n const decoder: Decoder<WithoutExtra<ComplexDecoded>> =\n createInputValueDecoder(input, { codec: shape.codec, ...rest })\n\n return Object.assign(decoder, {\n shape,\n })\n}\n\nexport const AccountIdShaped = (ss58Prefix = 42) => {\n const enhanced = scale.enhanceDecoder(\n scale.AccountId(ss58Prefix).dec,\n (address) => ({\n address,\n ss58Prefix,\n }),\n )\n\n return primitiveShapedDecoder(\"AccountId\", enhanced, {})\n}\n\nconst BytesArray = (len: number): WithShapeWithoutExtra<BytesArrayDecoded> =>\n primitiveShapedDecoder(\"BytesArray\", scale.Hex.dec(len), { len })\n\nconst _primitives = [\n \"_void\",\n \"bool\",\n \"char\",\n \"str\",\n \"u8\",\n \"u16\",\n \"u32\",\n \"i8\",\n \"i16\",\n \"i32\",\n \"u64\",\n \"u128\",\n \"u256\",\n \"i64\",\n \"i128\",\n \"i256\",\n \"compactNumber\",\n \"compactBn\",\n \"bitSequence\",\n] as const\n\ntype PrimitivesList = typeof _primitives\ntype PrimitivesKeys = PrimitivesList[number]\n\nconst corePrimitives: {\n [P in PrimitivesKeys]: WithShapeWithoutExtra<\n PrimitiveDecoded & {\n codec: P\n }\n >\n} = Object.fromEntries(\n _primitives.map((x) => [x, primitiveShapedDecoder(x, scale[x].dec)]),\n) as any\n\nexport const primitives = {\n ...corePrimitives,\n Bytes: primitiveShapedDecoder(\"Bytes\", scale.Hex.dec()),\n BytesArray,\n AccountId: AccountIdShaped(),\n}\n\nconst Sequence = (input: ShapedDecoder): SequenceShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Sequence\", shape: input.shape },\n scale.Vector.dec(input as any),\n )\n\nconst ArrayDec = (input: ShapedDecoder, len: number): ArrayShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Array\", shape: input.shape, len },\n scale.Vector.dec(input as any, len),\n )\n\nconst TupleDec = (...input: Array<ShapedDecoder>): TupleShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Tuple\", shape: input.map((x) => x.shape) },\n scale.Tuple.dec(...(input as Array<Decoder<any>>)),\n )\n\nconst StructDec = (input: StringRecord<ShapedDecoder>): StructShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Struct\", shape: mapStringRecord(input, (x) => x.shape) },\n scale.Struct.dec(input as {}),\n )\n\nconst EnumDec = (\n input: StringRecord<ShapedDecoder>,\n args?: number[],\n): EnumShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Enum\", shape: mapStringRecord(input, (x) => x.shape) },\n scale.Variant.dec(input as {}, args as any),\n )\n\nexport const OptionDec = (input: ShapedDecoder): OptionShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Option\", shape: input.shape },\n scale.Option.dec(input as any) as any,\n )\n\nexport const ResultDec = (\n ok: ShapedDecoder,\n ko: ShapedDecoder,\n): ResultShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Result\", shape: { ok: ok.shape, ko: ko.shape } },\n scale.Result.dec(ok as Decoder<any>, ko as Decoder<any>) as any,\n )\n\nexport const selfDecoder = (value: () => ShapedDecoder): ShapedDecoder => {\n let cache: Decoder<any> = (x) => {\n const decoder = value()\n const result = decoder\n cache = decoder\n return result(x)\n }\n\n const result = ((x) => cache(x)) as ShapedDecoder\n result.shape = { codec: \"_void\" }\n return result\n}\n\nexport const complex = {\n Sequence,\n Array: ArrayDec,\n Tuple: TupleDec,\n Struct: StructDec,\n Enum: EnumDec,\n Option: OptionDec,\n Result: ResultDec,\n}\n","import { LookupEntry } from \"@polkadot-api/metadata-builders\"\n\ntype FnWithStack<Other extends Array<any>, T> = (\n input: LookupEntry,\n cache: Map<number, T>,\n stack: Set<number>,\n ...rest: Other\n) => T\n\nexport const withCache =\n <Other extends Array<any>, T>(\n fn: FnWithStack<Other, T>,\n onEnterCircular: (\n cacheGetter: () => T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n onExitCircular: (\n outter: T,\n inner: T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n ): FnWithStack<Other, T> =>\n (input, cache, stack, ...rest) => {\n const { id } = input\n if (cache.has(id)) return cache.get(id)!\n\n if (stack.has(id)) {\n const res = onEnterCircular(() => cache.get(id)!, input, ...rest)\n cache.set(id, res)\n return res\n }\n\n stack.add(id)\n let result = fn(input, cache, stack, ...rest)\n stack.delete(id)\n\n if (cache.has(id))\n result = onExitCircular(result, cache.get(id)!, input, ...rest)\n\n cache.set(id, result)\n return result\n }\n"],"mappings":"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","names":["import_utils","_toHex","result","inner"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/view-builder.ts","../src/shaped-decoders.ts","../src/with-cache.ts"],"sourcesContent":["export * from \"./types\"\nexport { getViewBuilder } from \"./view-builder\"\n","import { mapObject, mapStringRecord } from \"@polkadot-api/utils\"\nimport {\n Decoder,\n type StringRecord,\n type V15,\n type V14Lookup,\n createDecoder,\n u8,\n HexString,\n enhanceDecoder,\n} from \"@polkadot-api/substrate-bindings\"\nimport type { EnumVar, LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport {\n primitives,\n complex,\n WithShapeWithoutExtra,\n ShapedDecoder,\n selfDecoder,\n AccountIdShaped,\n WithoutExtra,\n} from \"./shaped-decoders\"\nimport {\n AccountIdDecoded,\n Decoded,\n DecodedCall,\n GetViewBuilder,\n PrimitiveDecoded,\n UnshapedDecoder,\n} from \"./types\"\nimport { withCache } from \"./with-cache\"\n\nconst emptyTuple = complex.Tuple()\n\nconst toUnshapedDecoder =\n <A extends Array<any>>(\n fn: (...args: A) => ShapedDecoder,\n ): ((...args: A) => UnshapedDecoder) =>\n (...args) => {\n const value = fn(...args)\n return {\n shape: value.shape,\n decoder: value as Decoder<Decoded>,\n }\n }\n\ntype WithProp<\n T extends Decoder<any> & { shape: any },\n PropName extends string,\n PropValue,\n> = T extends Decoder<infer D> & { shape: infer S }\n ? Decoder<\n D extends WithoutExtra<PrimitiveDecoded>\n ? PrimitiveDecoded\n : D & { [P in PropName]: PropValue }\n > & { shape: S }\n : T\n\nconst withProp = <PropName extends string, PropValue>(\n input: ShapedDecoder,\n propName: PropName,\n propValue: PropValue,\n): WithProp<ShapedDecoder, PropName, PropValue> => {\n const decoder = enhanceDecoder(input as Decoder<{}>, (x) => ({\n ...x,\n [propName]: propValue,\n })) as WithProp<ShapedDecoder, PropName, PropValue>\n decoder.shape = input.shape\n return decoder\n}\n\nconst addPath =\n <Other extends Array<any>>(\n fn: (\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n ...rest: Other\n ) => ShapedDecoder,\n ): ((\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n ...rest: Other\n ) => ShapedDecoder | WithProp<ShapedDecoder, \"path\", string[]>) =>\n (input, cache, stack, lookupData, ...rest) => {\n const { path } = lookupData[input.id]\n const base = fn(input, cache, stack, lookupData, ...rest)\n return path.length ? withProp(base, \"path\", path) : base\n }\n\nconst _buildShapedDecoder = (\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n _accountId: WithShapeWithoutExtra<AccountIdDecoded>,\n): ShapedDecoder => {\n if (input.type === \"primitive\") return primitives[input.value]\n if (input.type === \"void\") return primitives._void\n if (input.type === \"AccountId20\") return primitives.ethAccount\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"compact\")\n return input.isBig || input.isBig === null\n ? primitives.compactBn\n : primitives.compactNumber\n if (input.type === \"bitSequence\") return primitives.bitSequence\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return primitives.Bytes\n }\n\n const buildNext = (nextInput: LookupEntry): ShapedDecoder =>\n buildShapedDecoder(nextInput, cache, stack, lookupData, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const _inner = buildNext(inner)\n return len ? complex.Array(_inner, len) : complex.Sequence(_inner)\n }\n\n const buildTuple = (value: LookupEntry[], innerDocs: string[][]) =>\n withProp(complex.Tuple(...value.map(buildNext)), \"innerDocs\", innerDocs)\n\n const buildStruct = (\n value: StringRecord<LookupEntry>,\n innerDocs: StringRecord<string[]>,\n ) =>\n withProp(\n complex.Struct(mapStringRecord(value, buildNext)),\n \"innerDocs\",\n innerDocs,\n )\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\") {\n return primitives.BytesArray(input.len)\n }\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, input.innerDocs)\n if (input.type === \"struct\") return buildStruct(input.value, input.innerDocs)\n if (input.type === \"option\") return complex.Option(buildNext(input.value))\n\n if (input.type === \"result\")\n return complex.Result(buildNext(input.value.ok), buildNext(input.value.ko))\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n if (v.type === \"void\") return primitives._void\n if (v.type === \"lookupEntry\") {\n return buildNext(v.value)\n }\n return v.type === \"tuple\"\n ? buildTuple(v.value, v.innerDocs)\n : buildStruct(v.value, v.innerDocs)\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => [key, dependencies[idx]]),\n ) as StringRecord<ShapedDecoder>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n const withoutDocs = areIndexesSorted\n ? complex.Enum(inner)\n : complex.Enum(inner, indexes as any)\n\n const withDocs = enhanceDecoder(withoutDocs, (val) => {\n const docs = input.innerDocs[val.value.type]\n return {\n ...val,\n docs,\n }\n }) as unknown as typeof withoutDocs\n withDocs.shape = withoutDocs.shape\n return withDocs\n}\n\nconst withPath = addPath(_buildShapedDecoder)\nconst buildShapedDecoder = withCache(withPath, selfDecoder, (outter, inner) => {\n inner.shape = outter.shape\n return outter\n})\n\nconst hexStrFromByte = (input: number) =>\n `0x${input.toString(16).padEnd(2, \"0\")}` as HexString\n\nexport const getViewBuilder: GetViewBuilder = (metadata: V15) => {\n const lookupData = metadata.lookup\n const cache = new Map<number, ShapedDecoder>()\n\n const getDecoder = (id: number) =>\n buildShapedDecoder(\n getLookupEntryDef(id),\n cache,\n new Set(),\n lookupData,\n _accountId,\n )\n\n const getLookupEntryDef = getLookupFn(lookupData)\n\n let _accountId: WithShapeWithoutExtra<AccountIdDecoded> = primitives.AccountId\n\n const prefix = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"SS58Prefix\")\n if (prefix) {\n try {\n const prefixVal = getDecoder(prefix.type)(prefix.value).value\n\n if (typeof prefixVal === \"number\") _accountId = AccountIdShaped(prefixVal)\n } catch (_) {}\n }\n\n const buildDefinition = toUnshapedDecoder(getDecoder)\n\n const callDecoder: Decoder<DecodedCall> = createDecoder((bytes) => {\n const palletIdx = u8.dec(bytes)\n\n const palletEntry = metadata.pallets.find((x) => x.index === palletIdx)\n if (!palletEntry) throw new Error(\"Invalid Pallet\")\n\n const pallet = {\n value: {\n name: palletEntry.name,\n idx: palletIdx,\n },\n input: hexStrFromByte(bytes[0]),\n }\n\n const callsDecoder = getDecoder(palletEntry.calls!)\n\n const decoded = callsDecoder(bytes)\n\n if (decoded.codec !== \"Enum\") throw null\n\n const call = {\n value: {\n name: decoded.value.type,\n idx: bytes[1],\n },\n input: hexStrFromByte(bytes[1]),\n docs: (decoded as any).docs as string[],\n }\n\n return {\n pallet,\n call,\n args: { value: decoded.value.value as any, shape: callsDecoder.shape },\n }\n })\n\n const buildEnumEntry = toUnshapedDecoder(\n (\n entry: EnumVar[\"value\"][keyof EnumVar[\"value\"]],\n forceTuple = false,\n ): ShapedDecoder => {\n if (entry.type === \"void\")\n return forceTuple ? emptyTuple : primitives._void\n\n if (entry.type === \"lookupEntry\") return getDecoder(entry.value.id)\n\n return entry.type === \"tuple\"\n ? complex.Tuple(\n ...Object.values(entry.value).map((l) => getDecoder(l.id)),\n )\n : complex.Struct(\n mapObject(entry.value, (x) =>\n getDecoder(x.id),\n ) as StringRecord<ShapedDecoder>,\n )\n },\n )\n\n const buildVariant =\n (type: \"errors\" | \"events\" | \"calls\") =>\n (\n pallet: string,\n name: string,\n ): {\n view: UnshapedDecoder\n location: [number, number]\n } => {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n\n const lookup = getLookupEntryDef(palletEntry[type]!)\n if (lookup.type !== \"enum\") throw null\n\n const event = lookup.value[name]\n\n return {\n location: [palletEntry.index, event.idx],\n view: buildEnumEntry(event, type === \"calls\"),\n }\n }\n\n const buildConstant = (pallet: string, constantName: string) => {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type as number)\n }\n\n return {\n buildDefinition,\n callDecoder,\n\n buildEvent: buildVariant(\"events\"),\n buildError: buildVariant(\"errors\"),\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n }\n}\n","import { toHex as _toHex, mapStringRecord } from \"@polkadot-api/utils\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport type {\n Decoder,\n HexString,\n StringRecord,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n ArrayDecoded,\n ArrayShape,\n BytesArrayDecoded,\n ComplexDecoded,\n ComplexShape,\n Decoded,\n EnumDecoded,\n EnumShape,\n OptionDecoded,\n OptionShape,\n PrimitiveDecoded,\n ResultDecoded,\n ResultShape,\n SequenceDecoded,\n SequenceShape,\n StructDecoded,\n StructShape,\n TupleDecoded,\n TupleShape,\n} from \"./types\"\n\nconst toHex = _toHex as (input: Uint8Array) => HexString\n\ntype Extras = \"docs\" | \"path\" | \"innerDocs\"\nexport type WithoutExtra<T extends {}> = Omit<T, Extras>\ntype PrimitiveCodec = PrimitiveDecoded[\"codec\"]\ntype ComplexCodec = ComplexDecoded[\"codec\"]\n\nexport type WithShapeWithoutExtra<T extends PrimitiveDecoded> = Decoder<\n WithoutExtra<T>\n> & {\n shape: { codec: T[\"codec\"] }\n}\ntype PrimitiveShapeDecoder = WithShapeWithoutExtra<PrimitiveDecoded>\n\ntype SequenceShapedDecoder = Decoder<WithoutExtra<SequenceDecoded>> & {\n shape: SequenceShape\n}\ntype ArrayShapedDecoder = Decoder<WithoutExtra<ArrayDecoded>> & {\n shape: ArrayShape\n}\ntype TupleShapedDecoder = Decoder<WithoutExtra<TupleDecoded>> & {\n shape: TupleShape\n}\ntype StructShapedDecoder = Decoder<WithoutExtra<StructDecoded>> & {\n shape: StructShape\n}\n\ntype OptionShapedDecoder = Decoder<WithoutExtra<OptionDecoded>> & {\n shape: OptionShape\n}\n\ntype ResultShapedDecoder = Decoder<WithoutExtra<ResultDecoded>> & {\n shape: ResultShape\n}\n\ntype EnumShapedDecoder = Decoder<WithoutExtra<EnumDecoded>> & {\n shape: EnumShape\n}\ntype ComplexShapedDecoder =\n | SequenceShapedDecoder\n | ArrayShapedDecoder\n | TupleShapedDecoder\n | StructShapedDecoder\n | OptionShapedDecoder\n | ResultShapedDecoder\n | EnumShapedDecoder\n\nexport type ShapedDecoder = PrimitiveShapeDecoder | ComplexShapedDecoder\n\ntype PrimitiveDecodedValue<C extends PrimitiveCodec> = (PrimitiveDecoded & {\n codec: C\n})[\"value\"]\ntype PrimitiveDecodedRest<C extends PrimitiveCodec> = Omit<\n PrimitiveDecoded & { codec: C },\n \"value\" | \"input\" | \"codec\" | Extras\n>\n\ntype ComplexDecodedValue<C extends ComplexCodec> = (ComplexDecoded & {\n codec: C\n})[\"value\"]\ntype ComplexDecodedRest<C extends ComplexCodec> = Omit<\n ComplexDecoded & { codec: C },\n \"value\" | \"input\" | \"codec\" | Extras\n>\n\nconst createInputValueDecoder = <T, Rest extends { codec: Decoded[\"codec\"] }>(\n dec: Decoder<T>,\n rest: Rest,\n): Decoder<\n Rest & {\n input: HexString\n value: T\n }\n> =>\n scale.createDecoder((_bytes) => {\n const bytes = _bytes as Uint8Array & { i: number; v: DataView }\n const start = bytes.i\n const value = dec(bytes)\n const input = toHex(new Uint8Array(bytes.buffer.slice(start, bytes.i)))\n return { ...rest, value, input }\n })\n\nconst primitiveShapedDecoder = <C extends PrimitiveCodec>(\n codec: C,\n input: Decoder<PrimitiveDecodedValue<C>>,\n rest?: PrimitiveDecodedRest<C>,\n): WithShapeWithoutExtra<\n PrimitiveDecoded & {\n codec: C\n }\n> => {\n const decoder: Decoder<WithoutExtra<PrimitiveDecoded>> =\n createInputValueDecoder(input, { codec, ...rest })\n\n return Object.assign(decoder, {\n shape: { codec },\n }) as any\n}\n\nconst complexShapedDecoder = <Shape extends ComplexShape>(\n shape: Shape,\n input: Decoder<ComplexDecodedValue<Shape[\"codec\"]>>,\n rest?: ComplexDecodedRest<Shape[\"codec\"]>,\n): Decoder<\n WithoutExtra<\n ComplexDecoded & {\n codec: Shape[\"codec\"]\n }\n >\n> & {\n shape: Shape\n} => {\n const decoder: Decoder<WithoutExtra<ComplexDecoded>> =\n createInputValueDecoder(input, { codec: shape.codec, ...rest })\n\n return Object.assign(decoder, {\n shape,\n })\n}\n\nexport const AccountIdShaped = (ss58Prefix = 42) => {\n const enhanced = scale.enhanceDecoder(\n scale.AccountId(ss58Prefix).dec,\n (address) => ({\n address,\n ss58Prefix,\n }),\n )\n\n return primitiveShapedDecoder(\"AccountId\", enhanced, {})\n}\n\nconst BytesArray = (len: number): WithShapeWithoutExtra<BytesArrayDecoded> =>\n primitiveShapedDecoder(\"BytesArray\", scale.Hex.dec(len), { len })\n\nconst _primitives = [\n \"_void\",\n \"bool\",\n \"char\",\n \"str\",\n \"u8\",\n \"u16\",\n \"u32\",\n \"i8\",\n \"i16\",\n \"i32\",\n \"u64\",\n \"u128\",\n \"u256\",\n \"i64\",\n \"i128\",\n \"i256\",\n \"compactNumber\",\n \"compactBn\",\n \"bitSequence\",\n \"ethAccount\",\n] as const\n\ntype PrimitivesList = typeof _primitives\ntype PrimitivesKeys = PrimitivesList[number]\n\nconst corePrimitives: {\n [P in PrimitivesKeys]: WithShapeWithoutExtra<\n PrimitiveDecoded & {\n codec: P\n }\n >\n} = Object.fromEntries(\n _primitives.map((x) => [x, primitiveShapedDecoder(x, scale[x].dec)]),\n) as any\n\nexport const primitives = {\n ...corePrimitives,\n Bytes: primitiveShapedDecoder(\"Bytes\", scale.Hex.dec()),\n BytesArray,\n AccountId: AccountIdShaped(),\n}\n\nconst Sequence = (input: ShapedDecoder): SequenceShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Sequence\", shape: input.shape },\n scale.Vector.dec(input as any),\n )\n\nconst ArrayDec = (input: ShapedDecoder, len: number): ArrayShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Array\", shape: input.shape, len },\n scale.Vector.dec(input as any, len),\n )\n\nconst TupleDec = (...input: Array<ShapedDecoder>): TupleShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Tuple\", shape: input.map((x) => x.shape) },\n scale.Tuple.dec(...(input as Array<Decoder<any>>)),\n )\n\nconst StructDec = (input: StringRecord<ShapedDecoder>): StructShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Struct\", shape: mapStringRecord(input, (x) => x.shape) },\n scale.Struct.dec(input as {}),\n )\n\nconst EnumDec = (\n input: StringRecord<ShapedDecoder>,\n args?: number[],\n): EnumShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Enum\", shape: mapStringRecord(input, (x) => x.shape) },\n scale.Variant.dec(input as {}, args as any),\n )\n\nexport const OptionDec = (input: ShapedDecoder): OptionShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Option\", shape: input.shape },\n scale.Option.dec(input as any) as any,\n )\n\nexport const ResultDec = (\n ok: ShapedDecoder,\n ko: ShapedDecoder,\n): ResultShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Result\", shape: { ok: ok.shape, ko: ko.shape } },\n scale.Result.dec(ok as Decoder<any>, ko as Decoder<any>) as any,\n )\n\nexport const selfDecoder = (value: () => ShapedDecoder): ShapedDecoder => {\n let cache: Decoder<any> = (x) => {\n const decoder = value()\n const result = decoder\n cache = decoder\n return result(x)\n }\n\n const result = ((x) => cache(x)) as ShapedDecoder\n result.shape = { codec: \"_void\" }\n return result\n}\n\nexport const complex = {\n Sequence,\n Array: ArrayDec,\n Tuple: TupleDec,\n Struct: StructDec,\n Enum: EnumDec,\n Option: OptionDec,\n Result: ResultDec,\n}\n","import { LookupEntry } from \"@polkadot-api/metadata-builders\"\n\ntype FnWithStack<Other extends Array<any>, T> = (\n input: LookupEntry,\n cache: Map<number, T>,\n stack: Set<number>,\n ...rest: Other\n) => T\n\nexport const withCache =\n <Other extends Array<any>, T>(\n fn: FnWithStack<Other, T>,\n onEnterCircular: (\n cacheGetter: () => T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n onExitCircular: (\n outter: T,\n inner: T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n ): FnWithStack<Other, T> =>\n (input, cache, stack, ...rest) => {\n const { id } = input\n if (cache.has(id)) return cache.get(id)!\n\n if (stack.has(id)) {\n const res = onEnterCircular(() => cache.get(id)!, input, ...rest)\n cache.set(id, res)\n return res\n }\n\n stack.add(id)\n let result = fn(input, cache, stack, ...rest)\n stack.delete(id)\n\n if (cache.has(id))\n result = onExitCircular(result, cache.get(id)!, input, ...rest)\n\n cache.set(id, result)\n return result\n }\n"],"mappings":"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","names":["import_utils","_toHex","result","inner"]}
package/dist/index.mjs CHANGED
@@ -60,7 +60,8 @@ var _primitives = [
60
60
  "i256",
61
61
  "compactNumber",
62
62
  "compactBn",
63
- "bitSequence"
63
+ "bitSequence",
64
+ "ethAccount"
64
65
  ];
65
66
  var corePrimitives = Object.fromEntries(
66
67
  _primitives.map((x) => [x, primitiveShapedDecoder(x, scale[x].dec)])
@@ -166,6 +167,8 @@ var _buildShapedDecoder = (input, cache, stack, lookupData, _accountId) => {
166
167
  return primitives[input.value];
167
168
  if (input.type === "void")
168
169
  return primitives._void;
170
+ if (input.type === "AccountId20")
171
+ return primitives.ethAccount;
169
172
  if (input.type === "AccountId32")
170
173
  return _accountId;
171
174
  if (input.type === "compact")
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/view-builder.ts","../src/shaped-decoders.ts","../src/with-cache.ts"],"sourcesContent":["import { mapObject, mapStringRecord } from \"@polkadot-api/utils\"\nimport {\n Decoder,\n type StringRecord,\n type V15,\n type V14Lookup,\n createDecoder,\n u8,\n HexString,\n enhanceDecoder,\n} from \"@polkadot-api/substrate-bindings\"\nimport type { EnumVar, LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport {\n primitives,\n complex,\n WithShapeWithoutExtra,\n ShapedDecoder,\n selfDecoder,\n AccountIdShaped,\n WithoutExtra,\n} from \"./shaped-decoders\"\nimport {\n AccountIdDecoded,\n Decoded,\n DecodedCall,\n GetViewBuilder,\n PrimitiveDecoded,\n UnshapedDecoder,\n} from \"./types\"\nimport { withCache } from \"./with-cache\"\n\nconst emptyTuple = complex.Tuple()\n\nconst toUnshapedDecoder =\n <A extends Array<any>>(\n fn: (...args: A) => ShapedDecoder,\n ): ((...args: A) => UnshapedDecoder) =>\n (...args) => {\n const value = fn(...args)\n return {\n shape: value.shape,\n decoder: value as Decoder<Decoded>,\n }\n }\n\ntype WithProp<\n T extends Decoder<any> & { shape: any },\n PropName extends string,\n PropValue,\n> = T extends Decoder<infer D> & { shape: infer S }\n ? Decoder<\n D extends WithoutExtra<PrimitiveDecoded>\n ? PrimitiveDecoded\n : D & { [P in PropName]: PropValue }\n > & { shape: S }\n : T\n\nconst withProp = <PropName extends string, PropValue>(\n input: ShapedDecoder,\n propName: PropName,\n propValue: PropValue,\n): WithProp<ShapedDecoder, PropName, PropValue> => {\n const decoder = enhanceDecoder(input as Decoder<{}>, (x) => ({\n ...x,\n [propName]: propValue,\n })) as WithProp<ShapedDecoder, PropName, PropValue>\n decoder.shape = input.shape\n return decoder\n}\n\nconst addPath =\n <Other extends Array<any>>(\n fn: (\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n ...rest: Other\n ) => ShapedDecoder,\n ): ((\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n ...rest: Other\n ) => ShapedDecoder | WithProp<ShapedDecoder, \"path\", string[]>) =>\n (input, cache, stack, lookupData, ...rest) => {\n const { path } = lookupData[input.id]\n const base = fn(input, cache, stack, lookupData, ...rest)\n return path.length ? withProp(base, \"path\", path) : base\n }\n\nconst _buildShapedDecoder = (\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n _accountId: WithShapeWithoutExtra<AccountIdDecoded>,\n): ShapedDecoder => {\n if (input.type === \"primitive\") return primitives[input.value]\n if (input.type === \"void\") return primitives._void\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"compact\")\n return input.isBig || input.isBig === null\n ? primitives.compactBn\n : primitives.compactNumber\n if (input.type === \"bitSequence\") return primitives.bitSequence\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return primitives.Bytes\n }\n\n const buildNext = (nextInput: LookupEntry): ShapedDecoder =>\n buildShapedDecoder(nextInput, cache, stack, lookupData, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const _inner = buildNext(inner)\n return len ? complex.Array(_inner, len) : complex.Sequence(_inner)\n }\n\n const buildTuple = (value: LookupEntry[], innerDocs: string[][]) =>\n withProp(complex.Tuple(...value.map(buildNext)), \"innerDocs\", innerDocs)\n\n const buildStruct = (\n value: StringRecord<LookupEntry>,\n innerDocs: StringRecord<string[]>,\n ) =>\n withProp(\n complex.Struct(mapStringRecord(value, buildNext)),\n \"innerDocs\",\n innerDocs,\n )\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\") {\n return primitives.BytesArray(input.len)\n }\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, input.innerDocs)\n if (input.type === \"struct\") return buildStruct(input.value, input.innerDocs)\n if (input.type === \"option\") return complex.Option(buildNext(input.value))\n\n if (input.type === \"result\")\n return complex.Result(buildNext(input.value.ok), buildNext(input.value.ko))\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n if (v.type === \"void\") return primitives._void\n if (v.type === \"lookupEntry\") {\n return buildNext(v.value)\n }\n return v.type === \"tuple\"\n ? buildTuple(v.value, v.innerDocs)\n : buildStruct(v.value, v.innerDocs)\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => [key, dependencies[idx]]),\n ) as StringRecord<ShapedDecoder>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n const withoutDocs = areIndexesSorted\n ? complex.Enum(inner)\n : complex.Enum(inner, indexes as any)\n\n const withDocs = enhanceDecoder(withoutDocs, (val) => {\n const docs = input.innerDocs[val.value.type]\n return {\n ...val,\n docs,\n }\n }) as unknown as typeof withoutDocs\n withDocs.shape = withoutDocs.shape\n return withDocs\n}\n\nconst withPath = addPath(_buildShapedDecoder)\nconst buildShapedDecoder = withCache(withPath, selfDecoder, (outter, inner) => {\n inner.shape = outter.shape\n return outter\n})\n\nconst hexStrFromByte = (input: number) =>\n `0x${input.toString(16).padEnd(2, \"0\")}` as HexString\n\nexport const getViewBuilder: GetViewBuilder = (metadata: V15) => {\n const lookupData = metadata.lookup\n const cache = new Map<number, ShapedDecoder>()\n\n const getDecoder = (id: number) =>\n buildShapedDecoder(\n getLookupEntryDef(id),\n cache,\n new Set(),\n lookupData,\n _accountId,\n )\n\n const getLookupEntryDef = getLookupFn(lookupData)\n\n let _accountId: WithShapeWithoutExtra<AccountIdDecoded> = primitives.AccountId\n\n const prefix = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"SS58Prefix\")\n if (prefix) {\n try {\n const prefixVal = getDecoder(prefix.type)(prefix.value).value\n\n if (typeof prefixVal === \"number\") _accountId = AccountIdShaped(prefixVal)\n } catch (_) {}\n }\n\n const buildDefinition = toUnshapedDecoder(getDecoder)\n\n const callDecoder: Decoder<DecodedCall> = createDecoder((bytes) => {\n const palletIdx = u8.dec(bytes)\n\n const palletEntry = metadata.pallets.find((x) => x.index === palletIdx)\n if (!palletEntry) throw new Error(\"Invalid Pallet\")\n\n const pallet = {\n value: {\n name: palletEntry.name,\n idx: palletIdx,\n },\n input: hexStrFromByte(bytes[0]),\n }\n\n const callsDecoder = getDecoder(palletEntry.calls!)\n\n const decoded = callsDecoder(bytes)\n\n if (decoded.codec !== \"Enum\") throw null\n\n const call = {\n value: {\n name: decoded.value.type,\n idx: bytes[1],\n },\n input: hexStrFromByte(bytes[1]),\n docs: (decoded as any).docs as string[],\n }\n\n return {\n pallet,\n call,\n args: { value: decoded.value.value as any, shape: callsDecoder.shape },\n }\n })\n\n const buildEnumEntry = toUnshapedDecoder(\n (\n entry: EnumVar[\"value\"][keyof EnumVar[\"value\"]],\n forceTuple = false,\n ): ShapedDecoder => {\n if (entry.type === \"void\")\n return forceTuple ? emptyTuple : primitives._void\n\n if (entry.type === \"lookupEntry\") return getDecoder(entry.value.id)\n\n return entry.type === \"tuple\"\n ? complex.Tuple(\n ...Object.values(entry.value).map((l) => getDecoder(l.id)),\n )\n : complex.Struct(\n mapObject(entry.value, (x) =>\n getDecoder(x.id),\n ) as StringRecord<ShapedDecoder>,\n )\n },\n )\n\n const buildVariant =\n (type: \"errors\" | \"events\" | \"calls\") =>\n (\n pallet: string,\n name: string,\n ): {\n view: UnshapedDecoder\n location: [number, number]\n } => {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n\n const lookup = getLookupEntryDef(palletEntry[type]!)\n if (lookup.type !== \"enum\") throw null\n\n const event = lookup.value[name]\n\n return {\n location: [palletEntry.index, event.idx],\n view: buildEnumEntry(event, type === \"calls\"),\n }\n }\n\n const buildConstant = (pallet: string, constantName: string) => {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type as number)\n }\n\n return {\n buildDefinition,\n callDecoder,\n\n buildEvent: buildVariant(\"events\"),\n buildError: buildVariant(\"errors\"),\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n }\n}\n","import { toHex as _toHex, mapStringRecord } from \"@polkadot-api/utils\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport type {\n Decoder,\n HexString,\n StringRecord,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n ArrayDecoded,\n ArrayShape,\n BytesArrayDecoded,\n ComplexDecoded,\n ComplexShape,\n Decoded,\n EnumDecoded,\n EnumShape,\n OptionDecoded,\n OptionShape,\n PrimitiveDecoded,\n ResultDecoded,\n ResultShape,\n SequenceDecoded,\n SequenceShape,\n StructDecoded,\n StructShape,\n TupleDecoded,\n TupleShape,\n} from \"./types\"\n\nconst toHex = _toHex as (input: Uint8Array) => HexString\n\ntype Extras = \"docs\" | \"path\" | \"innerDocs\"\nexport type WithoutExtra<T extends {}> = Omit<T, Extras>\ntype PrimitiveCodec = PrimitiveDecoded[\"codec\"]\ntype ComplexCodec = ComplexDecoded[\"codec\"]\n\nexport type WithShapeWithoutExtra<T extends PrimitiveDecoded> = Decoder<\n WithoutExtra<T>\n> & {\n shape: { codec: T[\"codec\"] }\n}\ntype PrimitiveShapeDecoder = WithShapeWithoutExtra<PrimitiveDecoded>\n\ntype SequenceShapedDecoder = Decoder<WithoutExtra<SequenceDecoded>> & {\n shape: SequenceShape\n}\ntype ArrayShapedDecoder = Decoder<WithoutExtra<ArrayDecoded>> & {\n shape: ArrayShape\n}\ntype TupleShapedDecoder = Decoder<WithoutExtra<TupleDecoded>> & {\n shape: TupleShape\n}\ntype StructShapedDecoder = Decoder<WithoutExtra<StructDecoded>> & {\n shape: StructShape\n}\n\ntype OptionShapedDecoder = Decoder<WithoutExtra<OptionDecoded>> & {\n shape: OptionShape\n}\n\ntype ResultShapedDecoder = Decoder<WithoutExtra<ResultDecoded>> & {\n shape: ResultShape\n}\n\ntype EnumShapedDecoder = Decoder<WithoutExtra<EnumDecoded>> & {\n shape: EnumShape\n}\ntype ComplexShapedDecoder =\n | SequenceShapedDecoder\n | ArrayShapedDecoder\n | TupleShapedDecoder\n | StructShapedDecoder\n | OptionShapedDecoder\n | ResultShapedDecoder\n | EnumShapedDecoder\n\nexport type ShapedDecoder = PrimitiveShapeDecoder | ComplexShapedDecoder\n\ntype PrimitiveDecodedValue<C extends PrimitiveCodec> = (PrimitiveDecoded & {\n codec: C\n})[\"value\"]\ntype PrimitiveDecodedRest<C extends PrimitiveCodec> = Omit<\n PrimitiveDecoded & { codec: C },\n \"value\" | \"input\" | \"codec\" | Extras\n>\n\ntype ComplexDecodedValue<C extends ComplexCodec> = (ComplexDecoded & {\n codec: C\n})[\"value\"]\ntype ComplexDecodedRest<C extends ComplexCodec> = Omit<\n ComplexDecoded & { codec: C },\n \"value\" | \"input\" | \"codec\" | Extras\n>\n\nconst createInputValueDecoder = <T, Rest extends { codec: Decoded[\"codec\"] }>(\n dec: Decoder<T>,\n rest: Rest,\n): Decoder<\n Rest & {\n input: HexString\n value: T\n }\n> =>\n scale.createDecoder((_bytes) => {\n const bytes = _bytes as Uint8Array & { i: number; v: DataView }\n const start = bytes.i\n const value = dec(bytes)\n const input = toHex(new Uint8Array(bytes.buffer.slice(start, bytes.i)))\n return { ...rest, value, input }\n })\n\nconst primitiveShapedDecoder = <C extends PrimitiveCodec>(\n codec: C,\n input: Decoder<PrimitiveDecodedValue<C>>,\n rest?: PrimitiveDecodedRest<C>,\n): WithShapeWithoutExtra<\n PrimitiveDecoded & {\n codec: C\n }\n> => {\n const decoder: Decoder<WithoutExtra<PrimitiveDecoded>> =\n createInputValueDecoder(input, { codec, ...rest })\n\n return Object.assign(decoder, {\n shape: { codec },\n }) as any\n}\n\nconst complexShapedDecoder = <Shape extends ComplexShape>(\n shape: Shape,\n input: Decoder<ComplexDecodedValue<Shape[\"codec\"]>>,\n rest?: ComplexDecodedRest<Shape[\"codec\"]>,\n): Decoder<\n WithoutExtra<\n ComplexDecoded & {\n codec: Shape[\"codec\"]\n }\n >\n> & {\n shape: Shape\n} => {\n const decoder: Decoder<WithoutExtra<ComplexDecoded>> =\n createInputValueDecoder(input, { codec: shape.codec, ...rest })\n\n return Object.assign(decoder, {\n shape,\n })\n}\n\nexport const AccountIdShaped = (ss58Prefix = 42) => {\n const enhanced = scale.enhanceDecoder(\n scale.AccountId(ss58Prefix).dec,\n (address) => ({\n address,\n ss58Prefix,\n }),\n )\n\n return primitiveShapedDecoder(\"AccountId\", enhanced, {})\n}\n\nconst BytesArray = (len: number): WithShapeWithoutExtra<BytesArrayDecoded> =>\n primitiveShapedDecoder(\"BytesArray\", scale.Hex.dec(len), { len })\n\nconst _primitives = [\n \"_void\",\n \"bool\",\n \"char\",\n \"str\",\n \"u8\",\n \"u16\",\n \"u32\",\n \"i8\",\n \"i16\",\n \"i32\",\n \"u64\",\n \"u128\",\n \"u256\",\n \"i64\",\n \"i128\",\n \"i256\",\n \"compactNumber\",\n \"compactBn\",\n \"bitSequence\",\n] as const\n\ntype PrimitivesList = typeof _primitives\ntype PrimitivesKeys = PrimitivesList[number]\n\nconst corePrimitives: {\n [P in PrimitivesKeys]: WithShapeWithoutExtra<\n PrimitiveDecoded & {\n codec: P\n }\n >\n} = Object.fromEntries(\n _primitives.map((x) => [x, primitiveShapedDecoder(x, scale[x].dec)]),\n) as any\n\nexport const primitives = {\n ...corePrimitives,\n Bytes: primitiveShapedDecoder(\"Bytes\", scale.Hex.dec()),\n BytesArray,\n AccountId: AccountIdShaped(),\n}\n\nconst Sequence = (input: ShapedDecoder): SequenceShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Sequence\", shape: input.shape },\n scale.Vector.dec(input as any),\n )\n\nconst ArrayDec = (input: ShapedDecoder, len: number): ArrayShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Array\", shape: input.shape, len },\n scale.Vector.dec(input as any, len),\n )\n\nconst TupleDec = (...input: Array<ShapedDecoder>): TupleShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Tuple\", shape: input.map((x) => x.shape) },\n scale.Tuple.dec(...(input as Array<Decoder<any>>)),\n )\n\nconst StructDec = (input: StringRecord<ShapedDecoder>): StructShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Struct\", shape: mapStringRecord(input, (x) => x.shape) },\n scale.Struct.dec(input as {}),\n )\n\nconst EnumDec = (\n input: StringRecord<ShapedDecoder>,\n args?: number[],\n): EnumShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Enum\", shape: mapStringRecord(input, (x) => x.shape) },\n scale.Variant.dec(input as {}, args as any),\n )\n\nexport const OptionDec = (input: ShapedDecoder): OptionShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Option\", shape: input.shape },\n scale.Option.dec(input as any) as any,\n )\n\nexport const ResultDec = (\n ok: ShapedDecoder,\n ko: ShapedDecoder,\n): ResultShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Result\", shape: { ok: ok.shape, ko: ko.shape } },\n scale.Result.dec(ok as Decoder<any>, ko as Decoder<any>) as any,\n )\n\nexport const selfDecoder = (value: () => ShapedDecoder): ShapedDecoder => {\n let cache: Decoder<any> = (x) => {\n const decoder = value()\n const result = decoder\n cache = decoder\n return result(x)\n }\n\n const result = ((x) => cache(x)) as ShapedDecoder\n result.shape = { codec: \"_void\" }\n return result\n}\n\nexport const complex = {\n Sequence,\n Array: ArrayDec,\n Tuple: TupleDec,\n Struct: StructDec,\n Enum: EnumDec,\n Option: OptionDec,\n Result: ResultDec,\n}\n","import { LookupEntry } from \"@polkadot-api/metadata-builders\"\n\ntype FnWithStack<Other extends Array<any>, T> = (\n input: LookupEntry,\n cache: Map<number, T>,\n stack: Set<number>,\n ...rest: Other\n) => T\n\nexport const withCache =\n <Other extends Array<any>, T>(\n fn: FnWithStack<Other, T>,\n onEnterCircular: (\n cacheGetter: () => T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n onExitCircular: (\n outter: T,\n inner: T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n ): FnWithStack<Other, T> =>\n (input, cache, stack, ...rest) => {\n const { id } = input\n if (cache.has(id)) return cache.get(id)!\n\n if (stack.has(id)) {\n const res = onEnterCircular(() => cache.get(id)!, input, ...rest)\n cache.set(id, res)\n return res\n }\n\n stack.add(id)\n let result = fn(input, cache, stack, ...rest)\n stack.delete(id)\n\n if (cache.has(id))\n result = onExitCircular(result, cache.get(id)!, input, ...rest)\n\n cache.set(id, result)\n return result\n }\n"],"mappings":"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","names":["mapStringRecord","createDecoder","enhanceDecoder","result","enhanceDecoder","inner","mapStringRecord","createDecoder"]}
1
+ {"version":3,"sources":["../src/view-builder.ts","../src/shaped-decoders.ts","../src/with-cache.ts"],"sourcesContent":["import { mapObject, mapStringRecord } from \"@polkadot-api/utils\"\nimport {\n Decoder,\n type StringRecord,\n type V15,\n type V14Lookup,\n createDecoder,\n u8,\n HexString,\n enhanceDecoder,\n} from \"@polkadot-api/substrate-bindings\"\nimport type { EnumVar, LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport {\n primitives,\n complex,\n WithShapeWithoutExtra,\n ShapedDecoder,\n selfDecoder,\n AccountIdShaped,\n WithoutExtra,\n} from \"./shaped-decoders\"\nimport {\n AccountIdDecoded,\n Decoded,\n DecodedCall,\n GetViewBuilder,\n PrimitiveDecoded,\n UnshapedDecoder,\n} from \"./types\"\nimport { withCache } from \"./with-cache\"\n\nconst emptyTuple = complex.Tuple()\n\nconst toUnshapedDecoder =\n <A extends Array<any>>(\n fn: (...args: A) => ShapedDecoder,\n ): ((...args: A) => UnshapedDecoder) =>\n (...args) => {\n const value = fn(...args)\n return {\n shape: value.shape,\n decoder: value as Decoder<Decoded>,\n }\n }\n\ntype WithProp<\n T extends Decoder<any> & { shape: any },\n PropName extends string,\n PropValue,\n> = T extends Decoder<infer D> & { shape: infer S }\n ? Decoder<\n D extends WithoutExtra<PrimitiveDecoded>\n ? PrimitiveDecoded\n : D & { [P in PropName]: PropValue }\n > & { shape: S }\n : T\n\nconst withProp = <PropName extends string, PropValue>(\n input: ShapedDecoder,\n propName: PropName,\n propValue: PropValue,\n): WithProp<ShapedDecoder, PropName, PropValue> => {\n const decoder = enhanceDecoder(input as Decoder<{}>, (x) => ({\n ...x,\n [propName]: propValue,\n })) as WithProp<ShapedDecoder, PropName, PropValue>\n decoder.shape = input.shape\n return decoder\n}\n\nconst addPath =\n <Other extends Array<any>>(\n fn: (\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n ...rest: Other\n ) => ShapedDecoder,\n ): ((\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n ...rest: Other\n ) => ShapedDecoder | WithProp<ShapedDecoder, \"path\", string[]>) =>\n (input, cache, stack, lookupData, ...rest) => {\n const { path } = lookupData[input.id]\n const base = fn(input, cache, stack, lookupData, ...rest)\n return path.length ? withProp(base, \"path\", path) : base\n }\n\nconst _buildShapedDecoder = (\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n _accountId: WithShapeWithoutExtra<AccountIdDecoded>,\n): ShapedDecoder => {\n if (input.type === \"primitive\") return primitives[input.value]\n if (input.type === \"void\") return primitives._void\n if (input.type === \"AccountId20\") return primitives.ethAccount\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"compact\")\n return input.isBig || input.isBig === null\n ? primitives.compactBn\n : primitives.compactNumber\n if (input.type === \"bitSequence\") return primitives.bitSequence\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return primitives.Bytes\n }\n\n const buildNext = (nextInput: LookupEntry): ShapedDecoder =>\n buildShapedDecoder(nextInput, cache, stack, lookupData, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const _inner = buildNext(inner)\n return len ? complex.Array(_inner, len) : complex.Sequence(_inner)\n }\n\n const buildTuple = (value: LookupEntry[], innerDocs: string[][]) =>\n withProp(complex.Tuple(...value.map(buildNext)), \"innerDocs\", innerDocs)\n\n const buildStruct = (\n value: StringRecord<LookupEntry>,\n innerDocs: StringRecord<string[]>,\n ) =>\n withProp(\n complex.Struct(mapStringRecord(value, buildNext)),\n \"innerDocs\",\n innerDocs,\n )\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\") {\n return primitives.BytesArray(input.len)\n }\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, input.innerDocs)\n if (input.type === \"struct\") return buildStruct(input.value, input.innerDocs)\n if (input.type === \"option\") return complex.Option(buildNext(input.value))\n\n if (input.type === \"result\")\n return complex.Result(buildNext(input.value.ok), buildNext(input.value.ko))\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n if (v.type === \"void\") return primitives._void\n if (v.type === \"lookupEntry\") {\n return buildNext(v.value)\n }\n return v.type === \"tuple\"\n ? buildTuple(v.value, v.innerDocs)\n : buildStruct(v.value, v.innerDocs)\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => [key, dependencies[idx]]),\n ) as StringRecord<ShapedDecoder>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n const withoutDocs = areIndexesSorted\n ? complex.Enum(inner)\n : complex.Enum(inner, indexes as any)\n\n const withDocs = enhanceDecoder(withoutDocs, (val) => {\n const docs = input.innerDocs[val.value.type]\n return {\n ...val,\n docs,\n }\n }) as unknown as typeof withoutDocs\n withDocs.shape = withoutDocs.shape\n return withDocs\n}\n\nconst withPath = addPath(_buildShapedDecoder)\nconst buildShapedDecoder = withCache(withPath, selfDecoder, (outter, inner) => {\n inner.shape = outter.shape\n return outter\n})\n\nconst hexStrFromByte = (input: number) =>\n `0x${input.toString(16).padEnd(2, \"0\")}` as HexString\n\nexport const getViewBuilder: GetViewBuilder = (metadata: V15) => {\n const lookupData = metadata.lookup\n const cache = new Map<number, ShapedDecoder>()\n\n const getDecoder = (id: number) =>\n buildShapedDecoder(\n getLookupEntryDef(id),\n cache,\n new Set(),\n lookupData,\n _accountId,\n )\n\n const getLookupEntryDef = getLookupFn(lookupData)\n\n let _accountId: WithShapeWithoutExtra<AccountIdDecoded> = primitives.AccountId\n\n const prefix = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"SS58Prefix\")\n if (prefix) {\n try {\n const prefixVal = getDecoder(prefix.type)(prefix.value).value\n\n if (typeof prefixVal === \"number\") _accountId = AccountIdShaped(prefixVal)\n } catch (_) {}\n }\n\n const buildDefinition = toUnshapedDecoder(getDecoder)\n\n const callDecoder: Decoder<DecodedCall> = createDecoder((bytes) => {\n const palletIdx = u8.dec(bytes)\n\n const palletEntry = metadata.pallets.find((x) => x.index === palletIdx)\n if (!palletEntry) throw new Error(\"Invalid Pallet\")\n\n const pallet = {\n value: {\n name: palletEntry.name,\n idx: palletIdx,\n },\n input: hexStrFromByte(bytes[0]),\n }\n\n const callsDecoder = getDecoder(palletEntry.calls!)\n\n const decoded = callsDecoder(bytes)\n\n if (decoded.codec !== \"Enum\") throw null\n\n const call = {\n value: {\n name: decoded.value.type,\n idx: bytes[1],\n },\n input: hexStrFromByte(bytes[1]),\n docs: (decoded as any).docs as string[],\n }\n\n return {\n pallet,\n call,\n args: { value: decoded.value.value as any, shape: callsDecoder.shape },\n }\n })\n\n const buildEnumEntry = toUnshapedDecoder(\n (\n entry: EnumVar[\"value\"][keyof EnumVar[\"value\"]],\n forceTuple = false,\n ): ShapedDecoder => {\n if (entry.type === \"void\")\n return forceTuple ? emptyTuple : primitives._void\n\n if (entry.type === \"lookupEntry\") return getDecoder(entry.value.id)\n\n return entry.type === \"tuple\"\n ? complex.Tuple(\n ...Object.values(entry.value).map((l) => getDecoder(l.id)),\n )\n : complex.Struct(\n mapObject(entry.value, (x) =>\n getDecoder(x.id),\n ) as StringRecord<ShapedDecoder>,\n )\n },\n )\n\n const buildVariant =\n (type: \"errors\" | \"events\" | \"calls\") =>\n (\n pallet: string,\n name: string,\n ): {\n view: UnshapedDecoder\n location: [number, number]\n } => {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n\n const lookup = getLookupEntryDef(palletEntry[type]!)\n if (lookup.type !== \"enum\") throw null\n\n const event = lookup.value[name]\n\n return {\n location: [palletEntry.index, event.idx],\n view: buildEnumEntry(event, type === \"calls\"),\n }\n }\n\n const buildConstant = (pallet: string, constantName: string) => {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type as number)\n }\n\n return {\n buildDefinition,\n callDecoder,\n\n buildEvent: buildVariant(\"events\"),\n buildError: buildVariant(\"errors\"),\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n }\n}\n","import { toHex as _toHex, mapStringRecord } from \"@polkadot-api/utils\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport type {\n Decoder,\n HexString,\n StringRecord,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n ArrayDecoded,\n ArrayShape,\n BytesArrayDecoded,\n ComplexDecoded,\n ComplexShape,\n Decoded,\n EnumDecoded,\n EnumShape,\n OptionDecoded,\n OptionShape,\n PrimitiveDecoded,\n ResultDecoded,\n ResultShape,\n SequenceDecoded,\n SequenceShape,\n StructDecoded,\n StructShape,\n TupleDecoded,\n TupleShape,\n} from \"./types\"\n\nconst toHex = _toHex as (input: Uint8Array) => HexString\n\ntype Extras = \"docs\" | \"path\" | \"innerDocs\"\nexport type WithoutExtra<T extends {}> = Omit<T, Extras>\ntype PrimitiveCodec = PrimitiveDecoded[\"codec\"]\ntype ComplexCodec = ComplexDecoded[\"codec\"]\n\nexport type WithShapeWithoutExtra<T extends PrimitiveDecoded> = Decoder<\n WithoutExtra<T>\n> & {\n shape: { codec: T[\"codec\"] }\n}\ntype PrimitiveShapeDecoder = WithShapeWithoutExtra<PrimitiveDecoded>\n\ntype SequenceShapedDecoder = Decoder<WithoutExtra<SequenceDecoded>> & {\n shape: SequenceShape\n}\ntype ArrayShapedDecoder = Decoder<WithoutExtra<ArrayDecoded>> & {\n shape: ArrayShape\n}\ntype TupleShapedDecoder = Decoder<WithoutExtra<TupleDecoded>> & {\n shape: TupleShape\n}\ntype StructShapedDecoder = Decoder<WithoutExtra<StructDecoded>> & {\n shape: StructShape\n}\n\ntype OptionShapedDecoder = Decoder<WithoutExtra<OptionDecoded>> & {\n shape: OptionShape\n}\n\ntype ResultShapedDecoder = Decoder<WithoutExtra<ResultDecoded>> & {\n shape: ResultShape\n}\n\ntype EnumShapedDecoder = Decoder<WithoutExtra<EnumDecoded>> & {\n shape: EnumShape\n}\ntype ComplexShapedDecoder =\n | SequenceShapedDecoder\n | ArrayShapedDecoder\n | TupleShapedDecoder\n | StructShapedDecoder\n | OptionShapedDecoder\n | ResultShapedDecoder\n | EnumShapedDecoder\n\nexport type ShapedDecoder = PrimitiveShapeDecoder | ComplexShapedDecoder\n\ntype PrimitiveDecodedValue<C extends PrimitiveCodec> = (PrimitiveDecoded & {\n codec: C\n})[\"value\"]\ntype PrimitiveDecodedRest<C extends PrimitiveCodec> = Omit<\n PrimitiveDecoded & { codec: C },\n \"value\" | \"input\" | \"codec\" | Extras\n>\n\ntype ComplexDecodedValue<C extends ComplexCodec> = (ComplexDecoded & {\n codec: C\n})[\"value\"]\ntype ComplexDecodedRest<C extends ComplexCodec> = Omit<\n ComplexDecoded & { codec: C },\n \"value\" | \"input\" | \"codec\" | Extras\n>\n\nconst createInputValueDecoder = <T, Rest extends { codec: Decoded[\"codec\"] }>(\n dec: Decoder<T>,\n rest: Rest,\n): Decoder<\n Rest & {\n input: HexString\n value: T\n }\n> =>\n scale.createDecoder((_bytes) => {\n const bytes = _bytes as Uint8Array & { i: number; v: DataView }\n const start = bytes.i\n const value = dec(bytes)\n const input = toHex(new Uint8Array(bytes.buffer.slice(start, bytes.i)))\n return { ...rest, value, input }\n })\n\nconst primitiveShapedDecoder = <C extends PrimitiveCodec>(\n codec: C,\n input: Decoder<PrimitiveDecodedValue<C>>,\n rest?: PrimitiveDecodedRest<C>,\n): WithShapeWithoutExtra<\n PrimitiveDecoded & {\n codec: C\n }\n> => {\n const decoder: Decoder<WithoutExtra<PrimitiveDecoded>> =\n createInputValueDecoder(input, { codec, ...rest })\n\n return Object.assign(decoder, {\n shape: { codec },\n }) as any\n}\n\nconst complexShapedDecoder = <Shape extends ComplexShape>(\n shape: Shape,\n input: Decoder<ComplexDecodedValue<Shape[\"codec\"]>>,\n rest?: ComplexDecodedRest<Shape[\"codec\"]>,\n): Decoder<\n WithoutExtra<\n ComplexDecoded & {\n codec: Shape[\"codec\"]\n }\n >\n> & {\n shape: Shape\n} => {\n const decoder: Decoder<WithoutExtra<ComplexDecoded>> =\n createInputValueDecoder(input, { codec: shape.codec, ...rest })\n\n return Object.assign(decoder, {\n shape,\n })\n}\n\nexport const AccountIdShaped = (ss58Prefix = 42) => {\n const enhanced = scale.enhanceDecoder(\n scale.AccountId(ss58Prefix).dec,\n (address) => ({\n address,\n ss58Prefix,\n }),\n )\n\n return primitiveShapedDecoder(\"AccountId\", enhanced, {})\n}\n\nconst BytesArray = (len: number): WithShapeWithoutExtra<BytesArrayDecoded> =>\n primitiveShapedDecoder(\"BytesArray\", scale.Hex.dec(len), { len })\n\nconst _primitives = [\n \"_void\",\n \"bool\",\n \"char\",\n \"str\",\n \"u8\",\n \"u16\",\n \"u32\",\n \"i8\",\n \"i16\",\n \"i32\",\n \"u64\",\n \"u128\",\n \"u256\",\n \"i64\",\n \"i128\",\n \"i256\",\n \"compactNumber\",\n \"compactBn\",\n \"bitSequence\",\n \"ethAccount\",\n] as const\n\ntype PrimitivesList = typeof _primitives\ntype PrimitivesKeys = PrimitivesList[number]\n\nconst corePrimitives: {\n [P in PrimitivesKeys]: WithShapeWithoutExtra<\n PrimitiveDecoded & {\n codec: P\n }\n >\n} = Object.fromEntries(\n _primitives.map((x) => [x, primitiveShapedDecoder(x, scale[x].dec)]),\n) as any\n\nexport const primitives = {\n ...corePrimitives,\n Bytes: primitiveShapedDecoder(\"Bytes\", scale.Hex.dec()),\n BytesArray,\n AccountId: AccountIdShaped(),\n}\n\nconst Sequence = (input: ShapedDecoder): SequenceShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Sequence\", shape: input.shape },\n scale.Vector.dec(input as any),\n )\n\nconst ArrayDec = (input: ShapedDecoder, len: number): ArrayShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Array\", shape: input.shape, len },\n scale.Vector.dec(input as any, len),\n )\n\nconst TupleDec = (...input: Array<ShapedDecoder>): TupleShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Tuple\", shape: input.map((x) => x.shape) },\n scale.Tuple.dec(...(input as Array<Decoder<any>>)),\n )\n\nconst StructDec = (input: StringRecord<ShapedDecoder>): StructShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Struct\", shape: mapStringRecord(input, (x) => x.shape) },\n scale.Struct.dec(input as {}),\n )\n\nconst EnumDec = (\n input: StringRecord<ShapedDecoder>,\n args?: number[],\n): EnumShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Enum\", shape: mapStringRecord(input, (x) => x.shape) },\n scale.Variant.dec(input as {}, args as any),\n )\n\nexport const OptionDec = (input: ShapedDecoder): OptionShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Option\", shape: input.shape },\n scale.Option.dec(input as any) as any,\n )\n\nexport const ResultDec = (\n ok: ShapedDecoder,\n ko: ShapedDecoder,\n): ResultShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Result\", shape: { ok: ok.shape, ko: ko.shape } },\n scale.Result.dec(ok as Decoder<any>, ko as Decoder<any>) as any,\n )\n\nexport const selfDecoder = (value: () => ShapedDecoder): ShapedDecoder => {\n let cache: Decoder<any> = (x) => {\n const decoder = value()\n const result = decoder\n cache = decoder\n return result(x)\n }\n\n const result = ((x) => cache(x)) as ShapedDecoder\n result.shape = { codec: \"_void\" }\n return result\n}\n\nexport const complex = {\n Sequence,\n Array: ArrayDec,\n Tuple: TupleDec,\n Struct: StructDec,\n Enum: EnumDec,\n Option: OptionDec,\n Result: ResultDec,\n}\n","import { LookupEntry } from \"@polkadot-api/metadata-builders\"\n\ntype FnWithStack<Other extends Array<any>, T> = (\n input: LookupEntry,\n cache: Map<number, T>,\n stack: Set<number>,\n ...rest: Other\n) => T\n\nexport const withCache =\n <Other extends Array<any>, T>(\n fn: FnWithStack<Other, T>,\n onEnterCircular: (\n cacheGetter: () => T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n onExitCircular: (\n outter: T,\n inner: T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n ): FnWithStack<Other, T> =>\n (input, cache, stack, ...rest) => {\n const { id } = input\n if (cache.has(id)) return cache.get(id)!\n\n if (stack.has(id)) {\n const res = onEnterCircular(() => cache.get(id)!, input, ...rest)\n cache.set(id, res)\n return res\n }\n\n stack.add(id)\n let result = fn(input, cache, stack, ...rest)\n stack.delete(id)\n\n if (cache.has(id))\n result = onExitCircular(result, cache.get(id)!, input, ...rest)\n\n cache.set(id, result)\n return result\n }\n"],"mappings":"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","names":["mapStringRecord","createDecoder","enhanceDecoder","result","enhanceDecoder","inner","mapStringRecord","createDecoder"]}
@@ -72,6 +72,10 @@ type BitSequenceDecoded = WithInputAndPath<{
72
72
  bytes: Uint8Array;
73
73
  };
74
74
  }>;
75
+ type EthAccountDecoded = WithInputAndPath<{
76
+ codec: "ethAccount";
77
+ value: HexString;
78
+ }>;
75
79
  type BytesSequenceDecoded = WithInputAndPath<{
76
80
  codec: "Bytes";
77
81
  value: HexString;
@@ -88,7 +92,7 @@ type AccountIdDecoded = WithInputAndPath<{
88
92
  address: string;
89
93
  };
90
94
  }>;
91
- type PrimitiveDecoded = VoidDecoded | BoolDecoded | StringDecoded | NumberDecoded | BigNumberDecoded | BitSequenceDecoded | BytesSequenceDecoded | BytesArrayDecoded | AccountIdDecoded;
95
+ type PrimitiveDecoded = VoidDecoded | BoolDecoded | StringDecoded | NumberDecoded | BigNumberDecoded | BitSequenceDecoded | BytesSequenceDecoded | BytesArrayDecoded | AccountIdDecoded | EthAccountDecoded;
92
96
  type SequenceDecoded = WithInputAndPath<{
93
97
  codec: "Sequence";
94
98
  value: Array<Decoded>;
@@ -164,4 +168,4 @@ type Shape = {
164
168
 
165
169
  declare const getViewBuilder: GetViewBuilder;
166
170
 
167
- export { type AccountIdDecoded, type ArrayDecoded, type ArrayShape, type BigNumberDecoded, type BitSequenceDecoded, type BoolDecoded, type BytesArrayDecoded, type BytesSequenceDecoded, type ComplexDecoded, type ComplexShape, type Decoded, type DecodedCall, type EnumDecoded, type EnumShape, type GetViewBuilder, type NumberDecoded, type OptionDecoded, type OptionShape, type PrimitiveDecoded, type ResultDecoded, type ResultShape, type SequenceDecoded, type SequenceShape, type Shape, type StringDecoded, type StructDecoded, type StructShape, type TupleDecoded, type TupleShape, type UnshapedDecoder, type VoidDecoded, getViewBuilder };
171
+ export { type AccountIdDecoded, type ArrayDecoded, type ArrayShape, type BigNumberDecoded, type BitSequenceDecoded, type BoolDecoded, type BytesArrayDecoded, type BytesSequenceDecoded, type ComplexDecoded, type ComplexShape, type Decoded, type DecodedCall, type EnumDecoded, type EnumShape, type EthAccountDecoded, type GetViewBuilder, type NumberDecoded, type OptionDecoded, type OptionShape, type PrimitiveDecoded, type ResultDecoded, type ResultShape, type SequenceDecoded, type SequenceShape, type Shape, type StringDecoded, type StructDecoded, type StructShape, type TupleDecoded, type TupleShape, type UnshapedDecoder, type VoidDecoded, getViewBuilder };
package/dist/min/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var j=Object.create;var g=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)g(e,r,{get:t[r],enumerable:!0})},O=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let d of U(t))!M.call(e,d)&&d!==r&&g(e,d,{get:()=>t[d],enumerable:!(o=N(t,d))||o.enumerable});return e};var K=(e,t,r)=>(r=e!=null?j(F(e)):{},O(t||!e||!e.__esModule?g(r,"default",{value:e,enumerable:!0}):r,e)),$=e=>O(g({},"__esModule",{value:!0}),e);var se={};G(se,{getViewBuilder:()=>_});module.exports=$(se);var A=require("@polkadot-api/utils"),v=require("@polkadot-api/substrate-bindings"),q=require("@polkadot-api/metadata-builders");var b=require("@polkadot-api/utils"),n=K(require("@polkadot-api/substrate-bindings")),z=b.toHex,V=(e,t)=>n.createDecoder(r=>{let o=r,d=o.i,p=e(o),u=z(new Uint8Array(o.buffer.slice(d,o.i)));return{...t,value:p,input:u}}),C=(e,t,r)=>{let o=V(t,{codec:e,...r});return Object.assign(o,{shape:{codec:e}})},x=(e,t,r)=>{let o=V(t,{codec:e.codec,...r});return Object.assign(o,{shape:e})},W=(e=42)=>{let t=n.enhanceDecoder(n.AccountId(e).dec,r=>({address:r,ss58Prefix:e}));return C("AccountId",t,{})},J=e=>C("BytesArray",n.Hex.dec(e),{len:e}),Q=["_void","bool","char","str","u8","u16","u32","i8","i16","i32","u64","u128","u256","i64","i128","i256","compactNumber","compactBn","bitSequence"],X=Object.fromEntries(Q.map(e=>[e,C(e,n[e].dec)])),m={...X,Bytes:C("Bytes",n.Hex.dec()),BytesArray:J,AccountId:W()},Y=e=>x({codec:"Sequence",shape:e.shape},n.Vector.dec(e)),Z=(e,t)=>x({codec:"Array",shape:e.shape,len:t},n.Vector.dec(e,t)),ee=(...e)=>x({codec:"Tuple",shape:e.map(t=>t.shape)},n.Tuple.dec(...e)),te=e=>x({codec:"Struct",shape:(0,b.mapStringRecord)(e,t=>t.shape)},n.Struct.dec(e)),re=(e,t)=>x({codec:"Enum",shape:(0,b.mapStringRecord)(e,r=>r.shape)},n.Variant.dec(e,t)),oe=e=>x({codec:"Option",shape:e.shape},n.Option.dec(e)),ce=(e,t)=>x({codec:"Result",shape:{ok:e.shape,ko:t.shape}},n.Result.dec(e,t)),R=e=>{let t=o=>{let d=e(),p=d;return t=d,p(o)},r=o=>t(o);return r.shape={codec:"_void"},r},h={Sequence:Y,Array:Z,Tuple:ee,Struct:te,Enum:re,Option:oe,Result:ce};var w=(e,t,r)=>(o,d,p,...u)=>{let{id:s}=o;if(d.has(s))return d.get(s);if(p.has(s)){let E=t(()=>d.get(s),o,...u);return d.set(s,E),E}p.add(s);let y=e(o,d,p,...u);return p.delete(s),d.has(s)&&(y=r(y,d.get(s),o,...u)),d.set(s,y),y};var de=h.Tuple(),L=e=>(...t)=>{let r=e(...t);return{shape:r.shape,decoder:r}},k=(e,t,r)=>{let o=(0,v.enhanceDecoder)(e,d=>({...d,[t]:r}));return o.shape=e.shape,o},ae=e=>(t,r,o,d,...p)=>{let{path:u}=d[t.id],s=e(t,r,o,d,...p);return u.length?k(s,"path",u):s},ne=(e,t,r,o,d)=>{if(e.type==="primitive")return m[e.value];if(e.type==="void")return m._void;if(e.type==="AccountId32")return d;if(e.type==="compact")return e.isBig||e.isBig===null?m.compactBn:m.compactNumber;if(e.type==="bitSequence")return m.bitSequence;if(e.type==="sequence"&&e.value.type==="primitive"&&e.value.value==="u8")return m.Bytes;let p=c=>I(c,t,r,o,d),u=(c,i)=>{let S=p(c);return i?h.Array(S,i):h.Sequence(S)},s=(c,i)=>k(h.Tuple(...c.map(p)),"innerDocs",i),y=(c,i)=>k(h.Struct((0,A.mapStringRecord)(c,p)),"innerDocs",i);if(e.type==="array")return e.value.type==="primitive"&&e.value.value==="u8"?m.BytesArray(e.len):u(e.value,e.len);if(e.type==="sequence")return u(e.value);if(e.type==="tuple")return s(e.value,e.innerDocs);if(e.type==="struct")return y(e.value,e.innerDocs);if(e.type==="option")return h.Option(p(e.value));if(e.type==="result")return h.Result(p(e.value.ok),p(e.value.ko));let E=Object.values(e.value).map(c=>c.type==="void"?m._void:c.type==="lookupEntry"?p(c.value):c.type==="tuple"?s(c.value,c.innerDocs):y(c.value,c.innerDocs)),f=Object.fromEntries(Object.keys(e.value).map((c,i)=>[c,E[i]])),P=Object.values(e.value).map(c=>c.idx),D=P.every((c,i)=>c===i)?h.Enum(f):h.Enum(f,P),l=(0,v.enhanceDecoder)(D,c=>{let i=e.innerDocs[c.value.type];return{...c,docs:i}});return l.shape=D.shape,l},pe=ae(ne),I=w(pe,R,(e,t)=>(t.shape=e.shape,e)),B=e=>`0x${e.toString(16).padEnd(2,"0")}`,_=e=>{let t=e.lookup,r=new Map,o=a=>I(d(a),r,new Set,t,p),d=(0,q.getLookupFn)(t),p=m.AccountId,u=e.pallets.find(a=>a.name==="System")?.constants.find(a=>a.name==="SS58Prefix");if(u)try{let a=o(u.type)(u.value).value;typeof a=="number"&&(p=W(a))}catch{}let s=L(o),y=(0,v.createDecoder)(a=>{let D=v.u8.dec(a),l=e.pallets.find(H=>H.index===D);if(!l)throw new Error("Invalid Pallet");let c={value:{name:l.name,idx:D},input:B(a[0])},i=o(l.calls),S=i(a);if(S.codec!=="Enum")throw null;let T={value:{name:S.value.type,idx:a[1]},input:B(a[1]),docs:S.docs};return{pallet:c,call:T,args:{value:S.value.value,shape:i.shape}}}),E=L((a,D=!1)=>a.type==="void"?D?de:m._void:a.type==="lookupEntry"?o(a.value.id):a.type==="tuple"?h.Tuple(...Object.values(a.value).map(l=>o(l.id))):h.Struct((0,A.mapObject)(a.value,l=>o(l.id)))),f=a=>(D,l)=>{let c=e.pallets.find(T=>T.name===D),i=d(c[a]);if(i.type!=="enum")throw null;let S=i.value[l];return{location:[c.index,S.idx],view:E(S,a==="calls")}},P=(a,D)=>{let l=e.pallets.find(c=>c.name===a).constants.find(c=>c.name===D);return s(l.type)};return{buildDefinition:s,callDecoder:y,buildEvent:f("events"),buildError:f("errors"),buildCall:f("calls"),buildConstant:P}};
1
+ "use strict";var j=Object.create;var g=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var r in t)g(e,r,{get:t[r],enumerable:!0})},O=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let d of U(t))!M.call(e,d)&&d!==r&&g(e,d,{get:()=>t[d],enumerable:!(o=N(t,d))||o.enumerable});return e};var K=(e,t,r)=>(r=e!=null?j(F(e)):{},O(t||!e||!e.__esModule?g(r,"default",{value:e,enumerable:!0}):r,e)),$=e=>O(g({},"__esModule",{value:!0}),e);var se={};G(se,{getViewBuilder:()=>_});module.exports=$(se);var A=require("@polkadot-api/utils"),v=require("@polkadot-api/substrate-bindings"),I=require("@polkadot-api/metadata-builders");var b=require("@polkadot-api/utils"),n=K(require("@polkadot-api/substrate-bindings")),z=b.toHex,V=(e,t)=>n.createDecoder(r=>{let o=r,d=o.i,p=e(o),u=z(new Uint8Array(o.buffer.slice(d,o.i)));return{...t,value:p,input:u}}),C=(e,t,r)=>{let o=V(t,{codec:e,...r});return Object.assign(o,{shape:{codec:e}})},x=(e,t,r)=>{let o=V(t,{codec:e.codec,...r});return Object.assign(o,{shape:e})},W=(e=42)=>{let t=n.enhanceDecoder(n.AccountId(e).dec,r=>({address:r,ss58Prefix:e}));return C("AccountId",t,{})},J=e=>C("BytesArray",n.Hex.dec(e),{len:e}),Q=["_void","bool","char","str","u8","u16","u32","i8","i16","i32","u64","u128","u256","i64","i128","i256","compactNumber","compactBn","bitSequence","ethAccount"],X=Object.fromEntries(Q.map(e=>[e,C(e,n[e].dec)])),l={...X,Bytes:C("Bytes",n.Hex.dec()),BytesArray:J,AccountId:W()},Y=e=>x({codec:"Sequence",shape:e.shape},n.Vector.dec(e)),Z=(e,t)=>x({codec:"Array",shape:e.shape,len:t},n.Vector.dec(e,t)),ee=(...e)=>x({codec:"Tuple",shape:e.map(t=>t.shape)},n.Tuple.dec(...e)),te=e=>x({codec:"Struct",shape:(0,b.mapStringRecord)(e,t=>t.shape)},n.Struct.dec(e)),re=(e,t)=>x({codec:"Enum",shape:(0,b.mapStringRecord)(e,r=>r.shape)},n.Variant.dec(e,t)),oe=e=>x({codec:"Option",shape:e.shape},n.Option.dec(e)),ce=(e,t)=>x({codec:"Result",shape:{ok:e.shape,ko:t.shape}},n.Result.dec(e,t)),R=e=>{let t=o=>{let d=e(),p=d;return t=d,p(o)},r=o=>t(o);return r.shape={codec:"_void"},r},D={Sequence:Y,Array:Z,Tuple:ee,Struct:te,Enum:re,Option:oe,Result:ce};var w=(e,t,r)=>(o,d,p,...u)=>{let{id:s}=o;if(d.has(s))return d.get(s);if(p.has(s)){let E=t(()=>d.get(s),o,...u);return d.set(s,E),E}p.add(s);let y=e(o,d,p,...u);return p.delete(s),d.has(s)&&(y=r(y,d.get(s),o,...u)),d.set(s,y),y};var de=D.Tuple(),L=e=>(...t)=>{let r=e(...t);return{shape:r.shape,decoder:r}},k=(e,t,r)=>{let o=(0,v.enhanceDecoder)(e,d=>({...d,[t]:r}));return o.shape=e.shape,o},ae=e=>(t,r,o,d,...p)=>{let{path:u}=d[t.id],s=e(t,r,o,d,...p);return u.length?k(s,"path",u):s},ne=(e,t,r,o,d)=>{if(e.type==="primitive")return l[e.value];if(e.type==="void")return l._void;if(e.type==="AccountId20")return l.ethAccount;if(e.type==="AccountId32")return d;if(e.type==="compact")return e.isBig||e.isBig===null?l.compactBn:l.compactNumber;if(e.type==="bitSequence")return l.bitSequence;if(e.type==="sequence"&&e.value.type==="primitive"&&e.value.value==="u8")return l.Bytes;let p=c=>q(c,t,r,o,d),u=(c,i)=>{let S=p(c);return i?D.Array(S,i):D.Sequence(S)},s=(c,i)=>k(D.Tuple(...c.map(p)),"innerDocs",i),y=(c,i)=>k(D.Struct((0,A.mapStringRecord)(c,p)),"innerDocs",i);if(e.type==="array")return e.value.type==="primitive"&&e.value.value==="u8"?l.BytesArray(e.len):u(e.value,e.len);if(e.type==="sequence")return u(e.value);if(e.type==="tuple")return s(e.value,e.innerDocs);if(e.type==="struct")return y(e.value,e.innerDocs);if(e.type==="option")return D.Option(p(e.value));if(e.type==="result")return D.Result(p(e.value.ok),p(e.value.ko));let E=Object.values(e.value).map(c=>c.type==="void"?l._void:c.type==="lookupEntry"?p(c.value):c.type==="tuple"?s(c.value,c.innerDocs):y(c.value,c.innerDocs)),f=Object.fromEntries(Object.keys(e.value).map((c,i)=>[c,E[i]])),P=Object.values(e.value).map(c=>c.idx),m=P.every((c,i)=>c===i)?D.Enum(f):D.Enum(f,P),h=(0,v.enhanceDecoder)(m,c=>{let i=e.innerDocs[c.value.type];return{...c,docs:i}});return h.shape=m.shape,h},pe=ae(ne),q=w(pe,R,(e,t)=>(t.shape=e.shape,e)),B=e=>`0x${e.toString(16).padEnd(2,"0")}`,_=e=>{let t=e.lookup,r=new Map,o=a=>q(d(a),r,new Set,t,p),d=(0,I.getLookupFn)(t),p=l.AccountId,u=e.pallets.find(a=>a.name==="System")?.constants.find(a=>a.name==="SS58Prefix");if(u)try{let a=o(u.type)(u.value).value;typeof a=="number"&&(p=W(a))}catch{}let s=L(o),y=(0,v.createDecoder)(a=>{let m=v.u8.dec(a),h=e.pallets.find(H=>H.index===m);if(!h)throw new Error("Invalid Pallet");let c={value:{name:h.name,idx:m},input:B(a[0])},i=o(h.calls),S=i(a);if(S.codec!=="Enum")throw null;let T={value:{name:S.value.type,idx:a[1]},input:B(a[1]),docs:S.docs};return{pallet:c,call:T,args:{value:S.value.value,shape:i.shape}}}),E=L((a,m=!1)=>a.type==="void"?m?de:l._void:a.type==="lookupEntry"?o(a.value.id):a.type==="tuple"?D.Tuple(...Object.values(a.value).map(h=>o(h.id))):D.Struct((0,A.mapObject)(a.value,h=>o(h.id)))),f=a=>(m,h)=>{let c=e.pallets.find(T=>T.name===m),i=d(c[a]);if(i.type!=="enum")throw null;let S=i.value[h];return{location:[c.index,S.idx],view:E(S,a==="calls")}},P=(a,m)=>{let h=e.pallets.find(c=>c.name===a).constants.find(c=>c.name===m);return s(h.type)};return{buildDefinition:s,callDecoder:y,buildEvent:f("events"),buildError:f("errors"),buildCall:f("calls"),buildConstant:P}};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/view-builder.ts","../../src/shaped-decoders.ts","../../src/with-cache.ts"],"sourcesContent":["export * from \"./types\"\nexport { getViewBuilder } from \"./view-builder\"\n","import { mapObject, mapStringRecord } from \"@polkadot-api/utils\"\nimport {\n Decoder,\n type StringRecord,\n type V15,\n type V14Lookup,\n createDecoder,\n u8,\n HexString,\n enhanceDecoder,\n} from \"@polkadot-api/substrate-bindings\"\nimport type { EnumVar, LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport {\n primitives,\n complex,\n WithShapeWithoutExtra,\n ShapedDecoder,\n selfDecoder,\n AccountIdShaped,\n WithoutExtra,\n} from \"./shaped-decoders\"\nimport {\n AccountIdDecoded,\n Decoded,\n DecodedCall,\n GetViewBuilder,\n PrimitiveDecoded,\n UnshapedDecoder,\n} from \"./types\"\nimport { withCache } from \"./with-cache\"\n\nconst emptyTuple = complex.Tuple()\n\nconst toUnshapedDecoder =\n <A extends Array<any>>(\n fn: (...args: A) => ShapedDecoder,\n ): ((...args: A) => UnshapedDecoder) =>\n (...args) => {\n const value = fn(...args)\n return {\n shape: value.shape,\n decoder: value as Decoder<Decoded>,\n }\n }\n\ntype WithProp<\n T extends Decoder<any> & { shape: any },\n PropName extends string,\n PropValue,\n> = T extends Decoder<infer D> & { shape: infer S }\n ? Decoder<\n D extends WithoutExtra<PrimitiveDecoded>\n ? PrimitiveDecoded\n : D & { [P in PropName]: PropValue }\n > & { shape: S }\n : T\n\nconst withProp = <PropName extends string, PropValue>(\n input: ShapedDecoder,\n propName: PropName,\n propValue: PropValue,\n): WithProp<ShapedDecoder, PropName, PropValue> => {\n const decoder = enhanceDecoder(input as Decoder<{}>, (x) => ({\n ...x,\n [propName]: propValue,\n })) as WithProp<ShapedDecoder, PropName, PropValue>\n decoder.shape = input.shape\n return decoder\n}\n\nconst addPath =\n <Other extends Array<any>>(\n fn: (\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n ...rest: Other\n ) => ShapedDecoder,\n ): ((\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n ...rest: Other\n ) => ShapedDecoder | WithProp<ShapedDecoder, \"path\", string[]>) =>\n (input, cache, stack, lookupData, ...rest) => {\n const { path } = lookupData[input.id]\n const base = fn(input, cache, stack, lookupData, ...rest)\n return path.length ? withProp(base, \"path\", path) : base\n }\n\nconst _buildShapedDecoder = (\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n _accountId: WithShapeWithoutExtra<AccountIdDecoded>,\n): ShapedDecoder => {\n if (input.type === \"primitive\") return primitives[input.value]\n if (input.type === \"void\") return primitives._void\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"compact\")\n return input.isBig || input.isBig === null\n ? primitives.compactBn\n : primitives.compactNumber\n if (input.type === \"bitSequence\") return primitives.bitSequence\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return primitives.Bytes\n }\n\n const buildNext = (nextInput: LookupEntry): ShapedDecoder =>\n buildShapedDecoder(nextInput, cache, stack, lookupData, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const _inner = buildNext(inner)\n return len ? complex.Array(_inner, len) : complex.Sequence(_inner)\n }\n\n const buildTuple = (value: LookupEntry[], innerDocs: string[][]) =>\n withProp(complex.Tuple(...value.map(buildNext)), \"innerDocs\", innerDocs)\n\n const buildStruct = (\n value: StringRecord<LookupEntry>,\n innerDocs: StringRecord<string[]>,\n ) =>\n withProp(\n complex.Struct(mapStringRecord(value, buildNext)),\n \"innerDocs\",\n innerDocs,\n )\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\") {\n return primitives.BytesArray(input.len)\n }\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, input.innerDocs)\n if (input.type === \"struct\") return buildStruct(input.value, input.innerDocs)\n if (input.type === \"option\") return complex.Option(buildNext(input.value))\n\n if (input.type === \"result\")\n return complex.Result(buildNext(input.value.ok), buildNext(input.value.ko))\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n if (v.type === \"void\") return primitives._void\n if (v.type === \"lookupEntry\") {\n return buildNext(v.value)\n }\n return v.type === \"tuple\"\n ? buildTuple(v.value, v.innerDocs)\n : buildStruct(v.value, v.innerDocs)\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => [key, dependencies[idx]]),\n ) as StringRecord<ShapedDecoder>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n const withoutDocs = areIndexesSorted\n ? complex.Enum(inner)\n : complex.Enum(inner, indexes as any)\n\n const withDocs = enhanceDecoder(withoutDocs, (val) => {\n const docs = input.innerDocs[val.value.type]\n return {\n ...val,\n docs,\n }\n }) as unknown as typeof withoutDocs\n withDocs.shape = withoutDocs.shape\n return withDocs\n}\n\nconst withPath = addPath(_buildShapedDecoder)\nconst buildShapedDecoder = withCache(withPath, selfDecoder, (outter, inner) => {\n inner.shape = outter.shape\n return outter\n})\n\nconst hexStrFromByte = (input: number) =>\n `0x${input.toString(16).padEnd(2, \"0\")}` as HexString\n\nexport const getViewBuilder: GetViewBuilder = (metadata: V15) => {\n const lookupData = metadata.lookup\n const cache = new Map<number, ShapedDecoder>()\n\n const getDecoder = (id: number) =>\n buildShapedDecoder(\n getLookupEntryDef(id),\n cache,\n new Set(),\n lookupData,\n _accountId,\n )\n\n const getLookupEntryDef = getLookupFn(lookupData)\n\n let _accountId: WithShapeWithoutExtra<AccountIdDecoded> = primitives.AccountId\n\n const prefix = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"SS58Prefix\")\n if (prefix) {\n try {\n const prefixVal = getDecoder(prefix.type)(prefix.value).value\n\n if (typeof prefixVal === \"number\") _accountId = AccountIdShaped(prefixVal)\n } catch (_) {}\n }\n\n const buildDefinition = toUnshapedDecoder(getDecoder)\n\n const callDecoder: Decoder<DecodedCall> = createDecoder((bytes) => {\n const palletIdx = u8.dec(bytes)\n\n const palletEntry = metadata.pallets.find((x) => x.index === palletIdx)\n if (!palletEntry) throw new Error(\"Invalid Pallet\")\n\n const pallet = {\n value: {\n name: palletEntry.name,\n idx: palletIdx,\n },\n input: hexStrFromByte(bytes[0]),\n }\n\n const callsDecoder = getDecoder(palletEntry.calls!)\n\n const decoded = callsDecoder(bytes)\n\n if (decoded.codec !== \"Enum\") throw null\n\n const call = {\n value: {\n name: decoded.value.type,\n idx: bytes[1],\n },\n input: hexStrFromByte(bytes[1]),\n docs: (decoded as any).docs as string[],\n }\n\n return {\n pallet,\n call,\n args: { value: decoded.value.value as any, shape: callsDecoder.shape },\n }\n })\n\n const buildEnumEntry = toUnshapedDecoder(\n (\n entry: EnumVar[\"value\"][keyof EnumVar[\"value\"]],\n forceTuple = false,\n ): ShapedDecoder => {\n if (entry.type === \"void\")\n return forceTuple ? emptyTuple : primitives._void\n\n if (entry.type === \"lookupEntry\") return getDecoder(entry.value.id)\n\n return entry.type === \"tuple\"\n ? complex.Tuple(\n ...Object.values(entry.value).map((l) => getDecoder(l.id)),\n )\n : complex.Struct(\n mapObject(entry.value, (x) =>\n getDecoder(x.id),\n ) as StringRecord<ShapedDecoder>,\n )\n },\n )\n\n const buildVariant =\n (type: \"errors\" | \"events\" | \"calls\") =>\n (\n pallet: string,\n name: string,\n ): {\n view: UnshapedDecoder\n location: [number, number]\n } => {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n\n const lookup = getLookupEntryDef(palletEntry[type]!)\n if (lookup.type !== \"enum\") throw null\n\n const event = lookup.value[name]\n\n return {\n location: [palletEntry.index, event.idx],\n view: buildEnumEntry(event, type === \"calls\"),\n }\n }\n\n const buildConstant = (pallet: string, constantName: string) => {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type as number)\n }\n\n return {\n buildDefinition,\n callDecoder,\n\n buildEvent: buildVariant(\"events\"),\n buildError: buildVariant(\"errors\"),\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n }\n}\n","import { toHex as _toHex, mapStringRecord } from \"@polkadot-api/utils\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport type {\n Decoder,\n HexString,\n StringRecord,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n ArrayDecoded,\n ArrayShape,\n BytesArrayDecoded,\n ComplexDecoded,\n ComplexShape,\n Decoded,\n EnumDecoded,\n EnumShape,\n OptionDecoded,\n OptionShape,\n PrimitiveDecoded,\n ResultDecoded,\n ResultShape,\n SequenceDecoded,\n SequenceShape,\n StructDecoded,\n StructShape,\n TupleDecoded,\n TupleShape,\n} from \"./types\"\n\nconst toHex = _toHex as (input: Uint8Array) => HexString\n\ntype Extras = \"docs\" | \"path\" | \"innerDocs\"\nexport type WithoutExtra<T extends {}> = Omit<T, Extras>\ntype PrimitiveCodec = PrimitiveDecoded[\"codec\"]\ntype ComplexCodec = ComplexDecoded[\"codec\"]\n\nexport type WithShapeWithoutExtra<T extends PrimitiveDecoded> = Decoder<\n WithoutExtra<T>\n> & {\n shape: { codec: T[\"codec\"] }\n}\ntype PrimitiveShapeDecoder = WithShapeWithoutExtra<PrimitiveDecoded>\n\ntype SequenceShapedDecoder = Decoder<WithoutExtra<SequenceDecoded>> & {\n shape: SequenceShape\n}\ntype ArrayShapedDecoder = Decoder<WithoutExtra<ArrayDecoded>> & {\n shape: ArrayShape\n}\ntype TupleShapedDecoder = Decoder<WithoutExtra<TupleDecoded>> & {\n shape: TupleShape\n}\ntype StructShapedDecoder = Decoder<WithoutExtra<StructDecoded>> & {\n shape: StructShape\n}\n\ntype OptionShapedDecoder = Decoder<WithoutExtra<OptionDecoded>> & {\n shape: OptionShape\n}\n\ntype ResultShapedDecoder = Decoder<WithoutExtra<ResultDecoded>> & {\n shape: ResultShape\n}\n\ntype EnumShapedDecoder = Decoder<WithoutExtra<EnumDecoded>> & {\n shape: EnumShape\n}\ntype ComplexShapedDecoder =\n | SequenceShapedDecoder\n | ArrayShapedDecoder\n | TupleShapedDecoder\n | StructShapedDecoder\n | OptionShapedDecoder\n | ResultShapedDecoder\n | EnumShapedDecoder\n\nexport type ShapedDecoder = PrimitiveShapeDecoder | ComplexShapedDecoder\n\ntype PrimitiveDecodedValue<C extends PrimitiveCodec> = (PrimitiveDecoded & {\n codec: C\n})[\"value\"]\ntype PrimitiveDecodedRest<C extends PrimitiveCodec> = Omit<\n PrimitiveDecoded & { codec: C },\n \"value\" | \"input\" | \"codec\" | Extras\n>\n\ntype ComplexDecodedValue<C extends ComplexCodec> = (ComplexDecoded & {\n codec: C\n})[\"value\"]\ntype ComplexDecodedRest<C extends ComplexCodec> = Omit<\n ComplexDecoded & { codec: C },\n \"value\" | \"input\" | \"codec\" | Extras\n>\n\nconst createInputValueDecoder = <T, Rest extends { codec: Decoded[\"codec\"] }>(\n dec: Decoder<T>,\n rest: Rest,\n): Decoder<\n Rest & {\n input: HexString\n value: T\n }\n> =>\n scale.createDecoder((_bytes) => {\n const bytes = _bytes as Uint8Array & { i: number; v: DataView }\n const start = bytes.i\n const value = dec(bytes)\n const input = toHex(new Uint8Array(bytes.buffer.slice(start, bytes.i)))\n return { ...rest, value, input }\n })\n\nconst primitiveShapedDecoder = <C extends PrimitiveCodec>(\n codec: C,\n input: Decoder<PrimitiveDecodedValue<C>>,\n rest?: PrimitiveDecodedRest<C>,\n): WithShapeWithoutExtra<\n PrimitiveDecoded & {\n codec: C\n }\n> => {\n const decoder: Decoder<WithoutExtra<PrimitiveDecoded>> =\n createInputValueDecoder(input, { codec, ...rest })\n\n return Object.assign(decoder, {\n shape: { codec },\n }) as any\n}\n\nconst complexShapedDecoder = <Shape extends ComplexShape>(\n shape: Shape,\n input: Decoder<ComplexDecodedValue<Shape[\"codec\"]>>,\n rest?: ComplexDecodedRest<Shape[\"codec\"]>,\n): Decoder<\n WithoutExtra<\n ComplexDecoded & {\n codec: Shape[\"codec\"]\n }\n >\n> & {\n shape: Shape\n} => {\n const decoder: Decoder<WithoutExtra<ComplexDecoded>> =\n createInputValueDecoder(input, { codec: shape.codec, ...rest })\n\n return Object.assign(decoder, {\n shape,\n })\n}\n\nexport const AccountIdShaped = (ss58Prefix = 42) => {\n const enhanced = scale.enhanceDecoder(\n scale.AccountId(ss58Prefix).dec,\n (address) => ({\n address,\n ss58Prefix,\n }),\n )\n\n return primitiveShapedDecoder(\"AccountId\", enhanced, {})\n}\n\nconst BytesArray = (len: number): WithShapeWithoutExtra<BytesArrayDecoded> =>\n primitiveShapedDecoder(\"BytesArray\", scale.Hex.dec(len), { len })\n\nconst _primitives = [\n \"_void\",\n \"bool\",\n \"char\",\n \"str\",\n \"u8\",\n \"u16\",\n \"u32\",\n \"i8\",\n \"i16\",\n \"i32\",\n \"u64\",\n \"u128\",\n \"u256\",\n \"i64\",\n \"i128\",\n \"i256\",\n \"compactNumber\",\n \"compactBn\",\n \"bitSequence\",\n] as const\n\ntype PrimitivesList = typeof _primitives\ntype PrimitivesKeys = PrimitivesList[number]\n\nconst corePrimitives: {\n [P in PrimitivesKeys]: WithShapeWithoutExtra<\n PrimitiveDecoded & {\n codec: P\n }\n >\n} = Object.fromEntries(\n _primitives.map((x) => [x, primitiveShapedDecoder(x, scale[x].dec)]),\n) as any\n\nexport const primitives = {\n ...corePrimitives,\n Bytes: primitiveShapedDecoder(\"Bytes\", scale.Hex.dec()),\n BytesArray,\n AccountId: AccountIdShaped(),\n}\n\nconst Sequence = (input: ShapedDecoder): SequenceShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Sequence\", shape: input.shape },\n scale.Vector.dec(input as any),\n )\n\nconst ArrayDec = (input: ShapedDecoder, len: number): ArrayShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Array\", shape: input.shape, len },\n scale.Vector.dec(input as any, len),\n )\n\nconst TupleDec = (...input: Array<ShapedDecoder>): TupleShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Tuple\", shape: input.map((x) => x.shape) },\n scale.Tuple.dec(...(input as Array<Decoder<any>>)),\n )\n\nconst StructDec = (input: StringRecord<ShapedDecoder>): StructShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Struct\", shape: mapStringRecord(input, (x) => x.shape) },\n scale.Struct.dec(input as {}),\n )\n\nconst EnumDec = (\n input: StringRecord<ShapedDecoder>,\n args?: number[],\n): EnumShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Enum\", shape: mapStringRecord(input, (x) => x.shape) },\n scale.Variant.dec(input as {}, args as any),\n )\n\nexport const OptionDec = (input: ShapedDecoder): OptionShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Option\", shape: input.shape },\n scale.Option.dec(input as any) as any,\n )\n\nexport const ResultDec = (\n ok: ShapedDecoder,\n ko: ShapedDecoder,\n): ResultShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Result\", shape: { ok: ok.shape, ko: ko.shape } },\n scale.Result.dec(ok as Decoder<any>, ko as Decoder<any>) as any,\n )\n\nexport const selfDecoder = (value: () => ShapedDecoder): ShapedDecoder => {\n let cache: Decoder<any> = (x) => {\n const decoder = value()\n const result = decoder\n cache = decoder\n return result(x)\n }\n\n const result = ((x) => cache(x)) as ShapedDecoder\n result.shape = { codec: \"_void\" }\n return result\n}\n\nexport const complex = {\n Sequence,\n Array: ArrayDec,\n Tuple: TupleDec,\n Struct: StructDec,\n Enum: EnumDec,\n Option: OptionDec,\n Result: ResultDec,\n}\n","import { LookupEntry } from \"@polkadot-api/metadata-builders\"\n\ntype FnWithStack<Other extends Array<any>, T> = (\n input: LookupEntry,\n cache: Map<number, T>,\n stack: Set<number>,\n ...rest: Other\n) => T\n\nexport const withCache =\n <Other extends Array<any>, T>(\n fn: FnWithStack<Other, T>,\n onEnterCircular: (\n cacheGetter: () => T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n onExitCircular: (\n outter: T,\n inner: T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n ): FnWithStack<Other, T> =>\n (input, cache, stack, ...rest) => {\n const { id } = input\n if (cache.has(id)) return cache.get(id)!\n\n if (stack.has(id)) {\n const res = onEnterCircular(() => cache.get(id)!, input, ...rest)\n cache.set(id, res)\n return res\n }\n\n stack.add(id)\n let result = fn(input, cache, stack, ...rest)\n stack.delete(id)\n\n if (cache.has(id))\n result = onExitCircular(result, cache.get(id)!, input, ...rest)\n\n cache.set(id, result)\n return result\n }\n"],"mappings":"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","names":["src_exports","__export","getViewBuilder","__toCommonJS","import_utils","import_substrate_bindings","import_metadata_builders","import_utils","scale","toHex","_toHex","createInputValueDecoder","dec","rest","_bytes","bytes","start","value","input","primitiveShapedDecoder","codec","decoder","complexShapedDecoder","shape","AccountIdShaped","ss58Prefix","enhanced","address","BytesArray","len","_primitives","corePrimitives","x","primitives","Sequence","ArrayDec","TupleDec","StructDec","EnumDec","args","OptionDec","ResultDec","ok","ko","selfDecoder","cache","result","complex","withCache","fn","onEnterCircular","onExitCircular","input","cache","stack","rest","id","res","result","emptyTuple","complex","toUnshapedDecoder","fn","args","value","withProp","input","propName","propValue","decoder","x","addPath","cache","stack","lookupData","rest","path","base","_buildShapedDecoder","_accountId","primitives","buildNext","nextInput","buildShapedDecoder","buildVector","inner","len","_inner","buildTuple","innerDocs","buildStruct","dependencies","v","key","idx","indexes","withoutDocs","withDocs","val","docs","withPath","withCache","selfDecoder","outter","hexStrFromByte","getViewBuilder","metadata","getDecoder","id","getLookupEntryDef","prefix","prefixVal","AccountIdShaped","buildDefinition","callDecoder","bytes","palletIdx","palletEntry","pallet","callsDecoder","decoded","call","buildEnumEntry","entry","forceTuple","buildVariant","type","name","lookup","event","buildConstant","constantName","storageEntry","s"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/view-builder.ts","../../src/shaped-decoders.ts","../../src/with-cache.ts"],"sourcesContent":["export * from \"./types\"\nexport { getViewBuilder } from \"./view-builder\"\n","import { mapObject, mapStringRecord } from \"@polkadot-api/utils\"\nimport {\n Decoder,\n type StringRecord,\n type V15,\n type V14Lookup,\n createDecoder,\n u8,\n HexString,\n enhanceDecoder,\n} from \"@polkadot-api/substrate-bindings\"\nimport type { EnumVar, LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport {\n primitives,\n complex,\n WithShapeWithoutExtra,\n ShapedDecoder,\n selfDecoder,\n AccountIdShaped,\n WithoutExtra,\n} from \"./shaped-decoders\"\nimport {\n AccountIdDecoded,\n Decoded,\n DecodedCall,\n GetViewBuilder,\n PrimitiveDecoded,\n UnshapedDecoder,\n} from \"./types\"\nimport { withCache } from \"./with-cache\"\n\nconst emptyTuple = complex.Tuple()\n\nconst toUnshapedDecoder =\n <A extends Array<any>>(\n fn: (...args: A) => ShapedDecoder,\n ): ((...args: A) => UnshapedDecoder) =>\n (...args) => {\n const value = fn(...args)\n return {\n shape: value.shape,\n decoder: value as Decoder<Decoded>,\n }\n }\n\ntype WithProp<\n T extends Decoder<any> & { shape: any },\n PropName extends string,\n PropValue,\n> = T extends Decoder<infer D> & { shape: infer S }\n ? Decoder<\n D extends WithoutExtra<PrimitiveDecoded>\n ? PrimitiveDecoded\n : D & { [P in PropName]: PropValue }\n > & { shape: S }\n : T\n\nconst withProp = <PropName extends string, PropValue>(\n input: ShapedDecoder,\n propName: PropName,\n propValue: PropValue,\n): WithProp<ShapedDecoder, PropName, PropValue> => {\n const decoder = enhanceDecoder(input as Decoder<{}>, (x) => ({\n ...x,\n [propName]: propValue,\n })) as WithProp<ShapedDecoder, PropName, PropValue>\n decoder.shape = input.shape\n return decoder\n}\n\nconst addPath =\n <Other extends Array<any>>(\n fn: (\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n ...rest: Other\n ) => ShapedDecoder,\n ): ((\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n ...rest: Other\n ) => ShapedDecoder | WithProp<ShapedDecoder, \"path\", string[]>) =>\n (input, cache, stack, lookupData, ...rest) => {\n const { path } = lookupData[input.id]\n const base = fn(input, cache, stack, lookupData, ...rest)\n return path.length ? withProp(base, \"path\", path) : base\n }\n\nconst _buildShapedDecoder = (\n input: LookupEntry,\n cache: Map<number, ShapedDecoder>,\n stack: Set<number>,\n lookupData: V14Lookup,\n _accountId: WithShapeWithoutExtra<AccountIdDecoded>,\n): ShapedDecoder => {\n if (input.type === \"primitive\") return primitives[input.value]\n if (input.type === \"void\") return primitives._void\n if (input.type === \"AccountId20\") return primitives.ethAccount\n if (input.type === \"AccountId32\") return _accountId\n if (input.type === \"compact\")\n return input.isBig || input.isBig === null\n ? primitives.compactBn\n : primitives.compactNumber\n if (input.type === \"bitSequence\") return primitives.bitSequence\n\n if (\n input.type === \"sequence\" &&\n input.value.type === \"primitive\" &&\n input.value.value === \"u8\"\n ) {\n return primitives.Bytes\n }\n\n const buildNext = (nextInput: LookupEntry): ShapedDecoder =>\n buildShapedDecoder(nextInput, cache, stack, lookupData, _accountId)\n\n const buildVector = (inner: LookupEntry, len?: number) => {\n const _inner = buildNext(inner)\n return len ? complex.Array(_inner, len) : complex.Sequence(_inner)\n }\n\n const buildTuple = (value: LookupEntry[], innerDocs: string[][]) =>\n withProp(complex.Tuple(...value.map(buildNext)), \"innerDocs\", innerDocs)\n\n const buildStruct = (\n value: StringRecord<LookupEntry>,\n innerDocs: StringRecord<string[]>,\n ) =>\n withProp(\n complex.Struct(mapStringRecord(value, buildNext)),\n \"innerDocs\",\n innerDocs,\n )\n\n if (input.type === \"array\") {\n // Bytes case\n if (input.value.type === \"primitive\" && input.value.value === \"u8\") {\n return primitives.BytesArray(input.len)\n }\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, input.innerDocs)\n if (input.type === \"struct\") return buildStruct(input.value, input.innerDocs)\n if (input.type === \"option\") return complex.Option(buildNext(input.value))\n\n if (input.type === \"result\")\n return complex.Result(buildNext(input.value.ok), buildNext(input.value.ko))\n\n // it has to be an enum by now\n const dependencies = Object.values(input.value).map((v) => {\n if (v.type === \"void\") return primitives._void\n if (v.type === \"lookupEntry\") {\n return buildNext(v.value)\n }\n return v.type === \"tuple\"\n ? buildTuple(v.value, v.innerDocs)\n : buildStruct(v.value, v.innerDocs)\n })\n\n const inner = Object.fromEntries(\n Object.keys(input.value).map((key, idx) => [key, dependencies[idx]]),\n ) as StringRecord<ShapedDecoder>\n\n const indexes = Object.values(input.value).map((x) => x.idx)\n const areIndexesSorted = indexes.every((idx, i) => idx === i)\n\n const withoutDocs = areIndexesSorted\n ? complex.Enum(inner)\n : complex.Enum(inner, indexes as any)\n\n const withDocs = enhanceDecoder(withoutDocs, (val) => {\n const docs = input.innerDocs[val.value.type]\n return {\n ...val,\n docs,\n }\n }) as unknown as typeof withoutDocs\n withDocs.shape = withoutDocs.shape\n return withDocs\n}\n\nconst withPath = addPath(_buildShapedDecoder)\nconst buildShapedDecoder = withCache(withPath, selfDecoder, (outter, inner) => {\n inner.shape = outter.shape\n return outter\n})\n\nconst hexStrFromByte = (input: number) =>\n `0x${input.toString(16).padEnd(2, \"0\")}` as HexString\n\nexport const getViewBuilder: GetViewBuilder = (metadata: V15) => {\n const lookupData = metadata.lookup\n const cache = new Map<number, ShapedDecoder>()\n\n const getDecoder = (id: number) =>\n buildShapedDecoder(\n getLookupEntryDef(id),\n cache,\n new Set(),\n lookupData,\n _accountId,\n )\n\n const getLookupEntryDef = getLookupFn(lookupData)\n\n let _accountId: WithShapeWithoutExtra<AccountIdDecoded> = primitives.AccountId\n\n const prefix = metadata.pallets\n .find((x) => x.name === \"System\")\n ?.constants.find((x) => x.name === \"SS58Prefix\")\n if (prefix) {\n try {\n const prefixVal = getDecoder(prefix.type)(prefix.value).value\n\n if (typeof prefixVal === \"number\") _accountId = AccountIdShaped(prefixVal)\n } catch (_) {}\n }\n\n const buildDefinition = toUnshapedDecoder(getDecoder)\n\n const callDecoder: Decoder<DecodedCall> = createDecoder((bytes) => {\n const palletIdx = u8.dec(bytes)\n\n const palletEntry = metadata.pallets.find((x) => x.index === palletIdx)\n if (!palletEntry) throw new Error(\"Invalid Pallet\")\n\n const pallet = {\n value: {\n name: palletEntry.name,\n idx: palletIdx,\n },\n input: hexStrFromByte(bytes[0]),\n }\n\n const callsDecoder = getDecoder(palletEntry.calls!)\n\n const decoded = callsDecoder(bytes)\n\n if (decoded.codec !== \"Enum\") throw null\n\n const call = {\n value: {\n name: decoded.value.type,\n idx: bytes[1],\n },\n input: hexStrFromByte(bytes[1]),\n docs: (decoded as any).docs as string[],\n }\n\n return {\n pallet,\n call,\n args: { value: decoded.value.value as any, shape: callsDecoder.shape },\n }\n })\n\n const buildEnumEntry = toUnshapedDecoder(\n (\n entry: EnumVar[\"value\"][keyof EnumVar[\"value\"]],\n forceTuple = false,\n ): ShapedDecoder => {\n if (entry.type === \"void\")\n return forceTuple ? emptyTuple : primitives._void\n\n if (entry.type === \"lookupEntry\") return getDecoder(entry.value.id)\n\n return entry.type === \"tuple\"\n ? complex.Tuple(\n ...Object.values(entry.value).map((l) => getDecoder(l.id)),\n )\n : complex.Struct(\n mapObject(entry.value, (x) =>\n getDecoder(x.id),\n ) as StringRecord<ShapedDecoder>,\n )\n },\n )\n\n const buildVariant =\n (type: \"errors\" | \"events\" | \"calls\") =>\n (\n pallet: string,\n name: string,\n ): {\n view: UnshapedDecoder\n location: [number, number]\n } => {\n const palletEntry = metadata.pallets.find((x) => x.name === pallet)!\n\n const lookup = getLookupEntryDef(palletEntry[type]!)\n if (lookup.type !== \"enum\") throw null\n\n const event = lookup.value[name]\n\n return {\n location: [palletEntry.index, event.idx],\n view: buildEnumEntry(event, type === \"calls\"),\n }\n }\n\n const buildConstant = (pallet: string, constantName: string) => {\n const storageEntry = metadata.pallets\n .find((x) => x.name === pallet)!\n .constants!.find((s) => s.name === constantName)!\n\n return buildDefinition(storageEntry.type as number)\n }\n\n return {\n buildDefinition,\n callDecoder,\n\n buildEvent: buildVariant(\"events\"),\n buildError: buildVariant(\"errors\"),\n buildCall: buildVariant(\"calls\"),\n buildConstant,\n }\n}\n","import { toHex as _toHex, mapStringRecord } from \"@polkadot-api/utils\"\nimport * as scale from \"@polkadot-api/substrate-bindings\"\nimport type {\n Decoder,\n HexString,\n StringRecord,\n} from \"@polkadot-api/substrate-bindings\"\nimport {\n ArrayDecoded,\n ArrayShape,\n BytesArrayDecoded,\n ComplexDecoded,\n ComplexShape,\n Decoded,\n EnumDecoded,\n EnumShape,\n OptionDecoded,\n OptionShape,\n PrimitiveDecoded,\n ResultDecoded,\n ResultShape,\n SequenceDecoded,\n SequenceShape,\n StructDecoded,\n StructShape,\n TupleDecoded,\n TupleShape,\n} from \"./types\"\n\nconst toHex = _toHex as (input: Uint8Array) => HexString\n\ntype Extras = \"docs\" | \"path\" | \"innerDocs\"\nexport type WithoutExtra<T extends {}> = Omit<T, Extras>\ntype PrimitiveCodec = PrimitiveDecoded[\"codec\"]\ntype ComplexCodec = ComplexDecoded[\"codec\"]\n\nexport type WithShapeWithoutExtra<T extends PrimitiveDecoded> = Decoder<\n WithoutExtra<T>\n> & {\n shape: { codec: T[\"codec\"] }\n}\ntype PrimitiveShapeDecoder = WithShapeWithoutExtra<PrimitiveDecoded>\n\ntype SequenceShapedDecoder = Decoder<WithoutExtra<SequenceDecoded>> & {\n shape: SequenceShape\n}\ntype ArrayShapedDecoder = Decoder<WithoutExtra<ArrayDecoded>> & {\n shape: ArrayShape\n}\ntype TupleShapedDecoder = Decoder<WithoutExtra<TupleDecoded>> & {\n shape: TupleShape\n}\ntype StructShapedDecoder = Decoder<WithoutExtra<StructDecoded>> & {\n shape: StructShape\n}\n\ntype OptionShapedDecoder = Decoder<WithoutExtra<OptionDecoded>> & {\n shape: OptionShape\n}\n\ntype ResultShapedDecoder = Decoder<WithoutExtra<ResultDecoded>> & {\n shape: ResultShape\n}\n\ntype EnumShapedDecoder = Decoder<WithoutExtra<EnumDecoded>> & {\n shape: EnumShape\n}\ntype ComplexShapedDecoder =\n | SequenceShapedDecoder\n | ArrayShapedDecoder\n | TupleShapedDecoder\n | StructShapedDecoder\n | OptionShapedDecoder\n | ResultShapedDecoder\n | EnumShapedDecoder\n\nexport type ShapedDecoder = PrimitiveShapeDecoder | ComplexShapedDecoder\n\ntype PrimitiveDecodedValue<C extends PrimitiveCodec> = (PrimitiveDecoded & {\n codec: C\n})[\"value\"]\ntype PrimitiveDecodedRest<C extends PrimitiveCodec> = Omit<\n PrimitiveDecoded & { codec: C },\n \"value\" | \"input\" | \"codec\" | Extras\n>\n\ntype ComplexDecodedValue<C extends ComplexCodec> = (ComplexDecoded & {\n codec: C\n})[\"value\"]\ntype ComplexDecodedRest<C extends ComplexCodec> = Omit<\n ComplexDecoded & { codec: C },\n \"value\" | \"input\" | \"codec\" | Extras\n>\n\nconst createInputValueDecoder = <T, Rest extends { codec: Decoded[\"codec\"] }>(\n dec: Decoder<T>,\n rest: Rest,\n): Decoder<\n Rest & {\n input: HexString\n value: T\n }\n> =>\n scale.createDecoder((_bytes) => {\n const bytes = _bytes as Uint8Array & { i: number; v: DataView }\n const start = bytes.i\n const value = dec(bytes)\n const input = toHex(new Uint8Array(bytes.buffer.slice(start, bytes.i)))\n return { ...rest, value, input }\n })\n\nconst primitiveShapedDecoder = <C extends PrimitiveCodec>(\n codec: C,\n input: Decoder<PrimitiveDecodedValue<C>>,\n rest?: PrimitiveDecodedRest<C>,\n): WithShapeWithoutExtra<\n PrimitiveDecoded & {\n codec: C\n }\n> => {\n const decoder: Decoder<WithoutExtra<PrimitiveDecoded>> =\n createInputValueDecoder(input, { codec, ...rest })\n\n return Object.assign(decoder, {\n shape: { codec },\n }) as any\n}\n\nconst complexShapedDecoder = <Shape extends ComplexShape>(\n shape: Shape,\n input: Decoder<ComplexDecodedValue<Shape[\"codec\"]>>,\n rest?: ComplexDecodedRest<Shape[\"codec\"]>,\n): Decoder<\n WithoutExtra<\n ComplexDecoded & {\n codec: Shape[\"codec\"]\n }\n >\n> & {\n shape: Shape\n} => {\n const decoder: Decoder<WithoutExtra<ComplexDecoded>> =\n createInputValueDecoder(input, { codec: shape.codec, ...rest })\n\n return Object.assign(decoder, {\n shape,\n })\n}\n\nexport const AccountIdShaped = (ss58Prefix = 42) => {\n const enhanced = scale.enhanceDecoder(\n scale.AccountId(ss58Prefix).dec,\n (address) => ({\n address,\n ss58Prefix,\n }),\n )\n\n return primitiveShapedDecoder(\"AccountId\", enhanced, {})\n}\n\nconst BytesArray = (len: number): WithShapeWithoutExtra<BytesArrayDecoded> =>\n primitiveShapedDecoder(\"BytesArray\", scale.Hex.dec(len), { len })\n\nconst _primitives = [\n \"_void\",\n \"bool\",\n \"char\",\n \"str\",\n \"u8\",\n \"u16\",\n \"u32\",\n \"i8\",\n \"i16\",\n \"i32\",\n \"u64\",\n \"u128\",\n \"u256\",\n \"i64\",\n \"i128\",\n \"i256\",\n \"compactNumber\",\n \"compactBn\",\n \"bitSequence\",\n \"ethAccount\",\n] as const\n\ntype PrimitivesList = typeof _primitives\ntype PrimitivesKeys = PrimitivesList[number]\n\nconst corePrimitives: {\n [P in PrimitivesKeys]: WithShapeWithoutExtra<\n PrimitiveDecoded & {\n codec: P\n }\n >\n} = Object.fromEntries(\n _primitives.map((x) => [x, primitiveShapedDecoder(x, scale[x].dec)]),\n) as any\n\nexport const primitives = {\n ...corePrimitives,\n Bytes: primitiveShapedDecoder(\"Bytes\", scale.Hex.dec()),\n BytesArray,\n AccountId: AccountIdShaped(),\n}\n\nconst Sequence = (input: ShapedDecoder): SequenceShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Sequence\", shape: input.shape },\n scale.Vector.dec(input as any),\n )\n\nconst ArrayDec = (input: ShapedDecoder, len: number): ArrayShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Array\", shape: input.shape, len },\n scale.Vector.dec(input as any, len),\n )\n\nconst TupleDec = (...input: Array<ShapedDecoder>): TupleShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Tuple\", shape: input.map((x) => x.shape) },\n scale.Tuple.dec(...(input as Array<Decoder<any>>)),\n )\n\nconst StructDec = (input: StringRecord<ShapedDecoder>): StructShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Struct\", shape: mapStringRecord(input, (x) => x.shape) },\n scale.Struct.dec(input as {}),\n )\n\nconst EnumDec = (\n input: StringRecord<ShapedDecoder>,\n args?: number[],\n): EnumShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Enum\", shape: mapStringRecord(input, (x) => x.shape) },\n scale.Variant.dec(input as {}, args as any),\n )\n\nexport const OptionDec = (input: ShapedDecoder): OptionShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Option\", shape: input.shape },\n scale.Option.dec(input as any) as any,\n )\n\nexport const ResultDec = (\n ok: ShapedDecoder,\n ko: ShapedDecoder,\n): ResultShapedDecoder =>\n complexShapedDecoder(\n { codec: \"Result\", shape: { ok: ok.shape, ko: ko.shape } },\n scale.Result.dec(ok as Decoder<any>, ko as Decoder<any>) as any,\n )\n\nexport const selfDecoder = (value: () => ShapedDecoder): ShapedDecoder => {\n let cache: Decoder<any> = (x) => {\n const decoder = value()\n const result = decoder\n cache = decoder\n return result(x)\n }\n\n const result = ((x) => cache(x)) as ShapedDecoder\n result.shape = { codec: \"_void\" }\n return result\n}\n\nexport const complex = {\n Sequence,\n Array: ArrayDec,\n Tuple: TupleDec,\n Struct: StructDec,\n Enum: EnumDec,\n Option: OptionDec,\n Result: ResultDec,\n}\n","import { LookupEntry } from \"@polkadot-api/metadata-builders\"\n\ntype FnWithStack<Other extends Array<any>, T> = (\n input: LookupEntry,\n cache: Map<number, T>,\n stack: Set<number>,\n ...rest: Other\n) => T\n\nexport const withCache =\n <Other extends Array<any>, T>(\n fn: FnWithStack<Other, T>,\n onEnterCircular: (\n cacheGetter: () => T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n onExitCircular: (\n outter: T,\n inner: T,\n circular: LookupEntry,\n ...rest: Other\n ) => T,\n ): FnWithStack<Other, T> =>\n (input, cache, stack, ...rest) => {\n const { id } = input\n if (cache.has(id)) return cache.get(id)!\n\n if (stack.has(id)) {\n const res = onEnterCircular(() => cache.get(id)!, input, ...rest)\n cache.set(id, res)\n return res\n }\n\n stack.add(id)\n let result = fn(input, cache, stack, ...rest)\n stack.delete(id)\n\n if (cache.has(id))\n result = onExitCircular(result, cache.get(id)!, input, ...rest)\n\n cache.set(id, result)\n return result\n }\n"],"mappings":"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","names":["src_exports","__export","getViewBuilder","__toCommonJS","import_utils","import_substrate_bindings","import_metadata_builders","import_utils","scale","toHex","_toHex","createInputValueDecoder","dec","rest","_bytes","bytes","start","value","input","primitiveShapedDecoder","codec","decoder","complexShapedDecoder","shape","AccountIdShaped","ss58Prefix","enhanced","address","BytesArray","len","_primitives","corePrimitives","x","primitives","Sequence","ArrayDec","TupleDec","StructDec","EnumDec","args","OptionDec","ResultDec","ok","ko","selfDecoder","cache","result","complex","withCache","fn","onEnterCircular","onExitCircular","input","cache","stack","rest","id","res","result","emptyTuple","complex","toUnshapedDecoder","fn","args","value","withProp","input","propName","propValue","decoder","x","addPath","cache","stack","lookupData","rest","path","base","_buildShapedDecoder","_accountId","primitives","buildNext","nextInput","buildShapedDecoder","buildVector","inner","len","_inner","buildTuple","innerDocs","buildStruct","dependencies","v","key","idx","indexes","withoutDocs","withDocs","val","docs","withPath","withCache","selfDecoder","outter","hexStrFromByte","getViewBuilder","metadata","getDecoder","id","getLookupEntryDef","prefix","prefixVal","AccountIdShaped","buildDefinition","callDecoder","bytes","palletIdx","palletEntry","pallet","callsDecoder","decoded","call","buildEnumEntry","entry","forceTuple","l","buildVariant","type","name","lookup","event","buildConstant","constantName","storageEntry","s"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polkadot-api/view-builder",
3
- "version": "0.0.1",
3
+ "version": "0.1.0",
4
4
  "author": "Josep M Sobrepere (https://github.com/josepot)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -40,8 +40,8 @@
40
40
  "trailingComma": "all"
41
41
  },
42
42
  "dependencies": {
43
- "@polkadot-api/metadata-builders": "0.0.1",
44
- "@polkadot-api/substrate-bindings": "0.0.1",
43
+ "@polkadot-api/metadata-builders": "0.1.0",
44
+ "@polkadot-api/substrate-bindings": "0.1.0",
45
45
  "@polkadot-api/utils": "0.0.1"
46
46
  },
47
47
  "devDependencies": {