@polkadot-api/view-builder 0.2.0 → 0.2.1

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.js CHANGED
@@ -156,8 +156,7 @@ var complex = {
156
156
  // src/with-cache.ts
157
157
  var withCache = (fn, onEnterCircular, onExitCircular) => (input, cache, stack, ...rest) => {
158
158
  const { id } = input;
159
- if (cache.has(id))
160
- return cache.get(id);
159
+ if (cache.has(id)) return cache.get(id);
161
160
  if (stack.has(id)) {
162
161
  const res = onEnterCircular(() => cache.get(id), input, ...rest);
163
162
  cache.set(id, res);
@@ -195,18 +194,13 @@ var addPath = (fn) => (input, cache, stack, lookupData, ...rest) => {
195
194
  return path.length ? withProp(base, "path", path) : base;
196
195
  };
197
196
  var _buildShapedDecoder = (input, cache, stack, lookupData, _accountId) => {
198
- if (input.type === "primitive")
199
- return primitives[input.value];
200
- if (input.type === "void")
201
- return primitives._void;
202
- if (input.type === "AccountId20")
203
- return primitives.ethAccount;
204
- if (input.type === "AccountId32")
205
- return _accountId;
197
+ if (input.type === "primitive") return primitives[input.value];
198
+ if (input.type === "void") return primitives._void;
199
+ if (input.type === "AccountId20") return primitives.ethAccount;
200
+ if (input.type === "AccountId32") return _accountId;
206
201
  if (input.type === "compact")
207
202
  return input.isBig || input.isBig === null ? primitives.compactBn : primitives.compactNumber;
208
- if (input.type === "bitSequence")
209
- return primitives.bitSequence;
203
+ if (input.type === "bitSequence") return primitives.bitSequence;
210
204
  if (input.type === "sequence" && input.value.type === "primitive" && input.value.value === "u8") {
211
205
  return primitives.Bytes;
212
206
  }
@@ -227,23 +221,18 @@ var _buildShapedDecoder = (input, cache, stack, lookupData, _accountId) => {
227
221
  }
228
222
  return buildVector(input.value, input.len);
229
223
  }
230
- if (input.type === "sequence")
231
- return buildVector(input.value);
232
- if (input.type === "tuple")
233
- return buildTuple(input.value, input.innerDocs);
234
- if (input.type === "struct")
235
- return buildStruct(input.value, input.innerDocs);
236
- if (input.type === "option")
237
- return complex.Option(buildNext(input.value));
224
+ if (input.type === "sequence") return buildVector(input.value);
225
+ if (input.type === "tuple") return buildTuple(input.value, input.innerDocs);
226
+ if (input.type === "struct") return buildStruct(input.value, input.innerDocs);
227
+ if (input.type === "option") return complex.Option(buildNext(input.value));
238
228
  if (input.type === "result")
239
229
  return complex.Result(buildNext(input.value.ok), buildNext(input.value.ko));
240
230
  const dependencies = Object.values(input.value).map((v) => {
241
- if (v.type === "void")
242
- return primitives._void;
231
+ if (v.type === "void") return primitives._void;
243
232
  if (v.type === "lookupEntry") {
244
233
  return buildNext(v.value);
245
234
  }
246
- return v.type === "tuple" ? buildTuple(v.value, v.innerDocs) : buildStruct(v.value, v.innerDocs);
235
+ return v.type === "tuple" ? buildTuple(v.value, v.innerDocs) : v.type === "array" ? buildVector(v.value, v.len) : buildStruct(v.value, v.innerDocs);
247
236
  });
248
237
  const inner = Object.fromEntries(
249
238
  Object.keys(input.value).map((key, idx) => [key, dependencies[idx]])
@@ -283,8 +272,7 @@ var getViewBuilder = (metadata) => {
283
272
  if (prefix) {
284
273
  try {
285
274
  const prefixVal = getDecoder(prefix.type)(prefix.value).value;
286
- if (typeof prefixVal === "number")
287
- _accountId = AccountIdShaped(prefixVal);
275
+ if (typeof prefixVal === "number") _accountId = AccountIdShaped(prefixVal);
288
276
  } catch (_) {
289
277
  }
290
278
  }
@@ -292,8 +280,7 @@ var getViewBuilder = (metadata) => {
292
280
  const callDecoder = (0, import_substrate_bindings.createDecoder)((bytes) => {
293
281
  const palletIdx = import_substrate_bindings.u8.dec(bytes);
294
282
  const palletEntry = metadata.pallets.find((x) => x.index === palletIdx);
295
- if (!palletEntry)
296
- throw new Error("Invalid Pallet");
283
+ if (!palletEntry) throw new Error("Invalid Pallet");
297
284
  const pallet = {
298
285
  value: {
299
286
  name: palletEntry.name,
@@ -303,8 +290,7 @@ var getViewBuilder = (metadata) => {
303
290
  };
304
291
  const callsDecoder = getDecoder(palletEntry.calls);
305
292
  const decoded = callsDecoder(bytes);
306
- if (decoded.codec !== "Enum")
307
- throw null;
293
+ if (decoded.codec !== "Enum") throw null;
308
294
  const call = {
309
295
  value: {
310
296
  name: decoded.value.type,
@@ -323,11 +309,10 @@ var getViewBuilder = (metadata) => {
323
309
  (entry, forceTuple = false) => {
324
310
  if (entry.type === "void")
325
311
  return forceTuple ? emptyTuple : primitives._void;
326
- if (entry.type === "lookupEntry")
327
- return getDecoder(entry.value.id);
312
+ if (entry.type === "lookupEntry") return getDecoder(entry.value.id);
328
313
  return entry.type === "tuple" ? complex.Tuple(
329
314
  ...Object.values(entry.value).map((l) => getDecoder(l.id))
330
- ) : complex.Struct(
315
+ ) : entry.type === "array" ? complex.Array(getDecoder(entry.value.id), entry.len) : complex.Struct(
331
316
  (0, import_utils2.mapObject)(
332
317
  entry.value,
333
318
  (x) => getDecoder(x.id)
@@ -338,8 +323,7 @@ var getViewBuilder = (metadata) => {
338
323
  const buildVariant = (type) => (pallet, name) => {
339
324
  const palletEntry = metadata.pallets.find((x) => x.name === pallet);
340
325
  const lookup = getLookupEntryDef(palletEntry[type]);
341
- if (lookup.type !== "enum")
342
- throw null;
326
+ if (lookup.type !== "enum") throw null;
343
327
  const event = lookup.value[name];
344
328
  return {
345
329
  location: [palletEntry.index, event.idx],
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 V14,\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 | V14) => {\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAA2C;AAC3C,gCAUO;AAEP,+BAA4B;;;ACb5B,mBAAiD;AACjD,YAAuB;AA4BvB,IAAM,QAAQ,aAAAC;AAiEd,IAAM,0BAA0B,CAC9B,KACA,SAOM,oBAAc,CAAC,WAAW;AAC9B,QAAM,QAAQ;AACd,QAAM,QAAQ,MAAM;AACpB,QAAM,QAAQ,IAAI,KAAK;AACvB,QAAM,QAAQ,MAAM,IAAI,WAAW,MAAM,OAAO,MAAM,OAAO,MAAM,CAAC,CAAC,CAAC;AACtE,SAAO,EAAE,GAAG,MAAM,OAAO,MAAM;AACjC,CAAC;AAEH,IAAM,yBAAyB,CAC7B,OACA,OACA,SAKG;AACH,QAAM,UACJ,wBAAwB,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC;AAEnD,SAAO,OAAO,OAAO,SAAS;AAAA,IAC5B,OAAO,EAAE,MAAM;AAAA,EACjB,CAAC;AACH;AAEA,IAAM,uBAAuB,CAC3B,OACA,OACA,SASG;AACH,QAAM,UACJ,wBAAwB,OAAO,EAAE,OAAO,MAAM,OAAO,GAAG,KAAK,CAAC;AAEhE,SAAO,OAAO,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;AAEO,IAAM,kBAAkB,CAAC,aAAa,OAAO;AAClD,QAAM,WAAiB;AAAA,IACf,gBAAU,UAAU,EAAE;AAAA,IAC5B,CAAC,aAAa;AAAA,MACZ;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,uBAAuB,aAAa,UAAU,CAAC,CAAC;AACzD;AAEA,IAAM,aAAa,CAAC,QAClB,uBAAuB,cAAoB,UAAI,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC;AAElE,IAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKA,IAAM,iBAMF,OAAO;AAAA,EACT,YAAY,IAAI,CAAC,MAAM,CAAC,GAAG,uBAAuB,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;AACrE;AAEO,IAAM,aAAa;AAAA,EACxB,GAAG;AAAA,EACH,OAAO,uBAAuB,SAAe,UAAI,IAAI,CAAC;AAAA,EACtD;AAAA,EACA,WAAW,gBAAgB;AAC7B;AAEA,IAAM,WAAW,CAAC,UAChB;AAAA,EACE,EAAE,OAAO,YAAY,OAAO,MAAM,MAAM;AAAA,EAClC,aAAO,IAAI,KAAY;AAC/B;AAEF,IAAM,WAAW,CAAC,OAAsB,QACtC;AAAA,EACE,EAAE,OAAO,SAAS,OAAO,MAAM,OAAO,IAAI;AAAA,EACpC,aAAO,IAAI,OAAc,GAAG;AACpC;AAEF,IAAM,WAAW,IAAI,UACnB;AAAA,EACE,EAAE,OAAO,SAAS,OAAO,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;AAAA,EAC7C,YAAM,IAAI,GAAI,KAA6B;AACnD;AAEF,IAAM,YAAY,CAAC,UACjB;AAAA,EACE,EAAE,OAAO,UAAU,WAAO,8BAAgB,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;AAAA,EAC3D,aAAO,IAAI,KAAW;AAC9B;AAEF,IAAM,UAAU,CACd,OACA,SAEA;AAAA,EACE,EAAE,OAAO,QAAQ,WAAO,8BAAgB,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;AAAA,EACzD,cAAQ,IAAI,OAAa,IAAW;AAC5C;AAEK,IAAM,YAAY,CAAC,UACxB;AAAA,EACE,EAAE,OAAO,UAAU,OAAO,MAAM,MAAM;AAAA,EAChC,aAAO,IAAI,KAAY;AAC/B;AAEK,IAAM,YAAY,CACvB,IACA,OAEA;AAAA,EACE,EAAE,OAAO,UAAU,OAAO,EAAE,IAAI,GAAG,OAAO,IAAI,GAAG,MAAM,EAAE;AAAA,EACnD,aAAO,IAAI,IAAoB,EAAkB;AACzD;AAEK,IAAM,cAAc,CAAC,UAA8C;AACxE,MAAI,QAAsB,CAAC,MAAM;AAC/B,UAAM,UAAU,MAAM;AACtB,UAAMC,UAAS;AACf,YAAQ;AACR,WAAOA,QAAO,CAAC;AAAA,EACjB;AAEA,QAAM,SAAU,CAAC,MAAM,MAAM,CAAC;AAC9B,SAAO,QAAQ,EAAE,OAAO,QAAQ;AAChC,SAAO;AACT;AAEO,IAAM,UAAU;AAAA,EACrB;AAAA,EACA,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AACV;;;AC3QO,IAAM,YACX,CACE,IACA,iBAKA,mBAOF,CAAC,OAAO,OAAO,UAAU,SAAS;AAChC,QAAM,EAAE,GAAG,IAAI;AACf,MAAI,MAAM,IAAI,EAAE;AAAG,WAAO,MAAM,IAAI,EAAE;AAEtC,MAAI,MAAM,IAAI,EAAE,GAAG;AACjB,UAAM,MAAM,gBAAgB,MAAM,MAAM,IAAI,EAAE,GAAI,OAAO,GAAG,IAAI;AAChE,UAAM,IAAI,IAAI,GAAG;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,IAAI,EAAE;AACZ,MAAI,SAAS,GAAG,OAAO,OAAO,OAAO,GAAG,IAAI;AAC5C,QAAM,OAAO,EAAE;AAEf,MAAI,MAAM,IAAI,EAAE;AACd,aAAS,eAAe,QAAQ,MAAM,IAAI,EAAE,GAAI,OAAO,GAAG,IAAI;AAEhE,QAAM,IAAI,IAAI,MAAM;AACpB,SAAO;AACT;;;AFVF,IAAM,aAAa,QAAQ,MAAM;AAEjC,IAAM,oBACJ,CACE,OAEF,IAAI,SAAS;AACX,QAAM,QAAQ,GAAG,GAAG,IAAI;AACxB,SAAO;AAAA,IACL,OAAO,MAAM;AAAA,IACb,SAAS;AAAA,EACX;AACF;AAcF,IAAM,WAAW,CACf,OACA,UACA,cACiD;AACjD,QAAM,cAAU,0CAAe,OAAsB,CAAC,OAAO;AAAA,IAC3D,GAAG;AAAA,IACH,CAAC,QAAQ,GAAG;AAAA,EACd,EAAE;AACF,UAAQ,QAAQ,MAAM;AACtB,SAAO;AACT;AAEA,IAAM,UACJ,CACE,OAcF,CAAC,OAAO,OAAO,OAAO,eAAe,SAAS;AAC5C,QAAM,EAAE,KAAK,IAAI,WAAW,MAAM,EAAE;AACpC,QAAM,OAAO,GAAG,OAAO,OAAO,OAAO,YAAY,GAAG,IAAI;AACxD,SAAO,KAAK,SAAS,SAAS,MAAM,QAAQ,IAAI,IAAI;AACtD;AAEF,IAAM,sBAAsB,CAC1B,OACA,OACA,OACA,YACA,eACkB;AAClB,MAAI,MAAM,SAAS;AAAa,WAAO,WAAW,MAAM,KAAK;AAC7D,MAAI,MAAM,SAAS;AAAQ,WAAO,WAAW;AAC7C,MAAI,MAAM,SAAS;AAAe,WAAO,WAAW;AACpD,MAAI,MAAM,SAAS;AAAe,WAAO;AACzC,MAAI,MAAM,SAAS;AACjB,WAAO,MAAM,SAAS,MAAM,UAAU,OAClC,WAAW,YACX,WAAW;AACjB,MAAI,MAAM,SAAS;AAAe,WAAO,WAAW;AAEpD,MACE,MAAM,SAAS,cACf,MAAM,MAAM,SAAS,eACrB,MAAM,MAAM,UAAU,MACtB;AACA,WAAO,WAAW;AAAA,EACpB;AAEA,QAAM,YAAY,CAAC,cACjB,mBAAmB,WAAW,OAAO,OAAO,YAAY,UAAU;AAEpE,QAAM,cAAc,CAACC,QAAoB,QAAiB;AACxD,UAAM,SAAS,UAAUA,MAAK;AAC9B,WAAO,MAAM,QAAQ,MAAM,QAAQ,GAAG,IAAI,QAAQ,SAAS,MAAM;AAAA,EACnE;AAEA,QAAM,aAAa,CAAC,OAAsB,cACxC,SAAS,QAAQ,MAAM,GAAG,MAAM,IAAI,SAAS,CAAC,GAAG,aAAa,SAAS;AAEzE,QAAM,cAAc,CAClB,OACA,cAEA;AAAA,IACE,QAAQ,WAAO,+BAAgB,OAAO,SAAS,CAAC;AAAA,IAChD;AAAA,IACA;AAAA,EACF;AAEF,MAAI,MAAM,SAAS,SAAS;AAE1B,QAAI,MAAM,MAAM,SAAS,eAAe,MAAM,MAAM,UAAU,MAAM;AAClE,aAAO,WAAW,WAAW,MAAM,GAAG;AAAA,IACxC;AAEA,WAAO,YAAY,MAAM,OAAO,MAAM,GAAG;AAAA,EAC3C;AAEA,MAAI,MAAM,SAAS;AAAY,WAAO,YAAY,MAAM,KAAK;AAC7D,MAAI,MAAM,SAAS;AAAS,WAAO,WAAW,MAAM,OAAO,MAAM,SAAS;AAC1E,MAAI,MAAM,SAAS;AAAU,WAAO,YAAY,MAAM,OAAO,MAAM,SAAS;AAC5E,MAAI,MAAM,SAAS;AAAU,WAAO,QAAQ,OAAO,UAAU,MAAM,KAAK,CAAC;AAEzE,MAAI,MAAM,SAAS;AACjB,WAAO,QAAQ,OAAO,UAAU,MAAM,MAAM,EAAE,GAAG,UAAU,MAAM,MAAM,EAAE,CAAC;AAG5E,QAAM,eAAe,OAAO,OAAO,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM;AACzD,QAAI,EAAE,SAAS;AAAQ,aAAO,WAAW;AACzC,QAAI,EAAE,SAAS,eAAe;AAC5B,aAAO,UAAU,EAAE,KAAK;AAAA,IAC1B;AACA,WAAO,EAAE,SAAS,UACd,WAAW,EAAE,OAAO,EAAE,SAAS,IAC/B,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EACtC,CAAC;AAED,QAAM,QAAQ,OAAO;AAAA,IACnB,OAAO,KAAK,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,aAAa,GAAG,CAAC,CAAC;AAAA,EACrE;AAEA,QAAM,UAAU,OAAO,OAAO,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;AAC3D,QAAM,mBAAmB,QAAQ,MAAM,CAAC,KAAK,MAAM,QAAQ,CAAC;AAE5D,QAAM,cAAc,mBAChB,QAAQ,KAAK,KAAK,IAClB,QAAQ,KAAK,OAAO,OAAc;AAEtC,QAAM,eAAW,0CAAe,aAAa,CAAC,QAAQ;AACpD,UAAM,OAAO,MAAM,UAAU,IAAI,MAAM,IAAI;AAC3C,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACD,WAAS,QAAQ,YAAY;AAC7B,SAAO;AACT;AAEA,IAAM,WAAW,QAAQ,mBAAmB;AAC5C,IAAM,qBAAqB,UAAU,UAAU,aAAa,CAAC,QAAQ,UAAU;AAC7E,QAAM,QAAQ,OAAO;AACrB,SAAO;AACT,CAAC;AAED,IAAM,iBAAiB,CAAC,UACtB,KAAK,MAAM,SAAS,EAAE,EAAE,OAAO,GAAG,GAAG,CAAC;AAEjC,IAAM,iBAAiC,CAAC,aAAwB;AACrE,QAAM,aAAa,SAAS;AAC5B,QAAM,QAAQ,oBAAI,IAA2B;AAE7C,QAAM,aAAa,CAAC,OAClB;AAAA,IACE,kBAAkB,EAAE;AAAA,IACpB;AAAA,IACA,oBAAI,IAAI;AAAA,IACR;AAAA,IACA;AAAA,EACF;AAEF,QAAM,wBAAoB,sCAAY,UAAU;AAEhD,MAAI,aAAsD,WAAW;AAErE,QAAM,SAAS,SAAS,QACrB,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ,GAC9B,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,YAAY;AACjD,MAAI,QAAQ;AACV,QAAI;AACF,YAAM,YAAY,WAAW,OAAO,IAAI,EAAE,OAAO,KAAK,EAAE;AAExD,UAAI,OAAO,cAAc;AAAU,qBAAa,gBAAgB,SAAS;AAAA,IAC3E,SAAS,GAAG;AAAA,IAAC;AAAA,EACf;AAEA,QAAM,kBAAkB,kBAAkB,UAAU;AAEpD,QAAM,kBAAoC,yCAAc,CAAC,UAAU;AACjE,UAAM,YAAY,6BAAG,IAAI,KAAK;AAE9B,UAAM,cAAc,SAAS,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,SAAS;AACtE,QAAI,CAAC;AAAa,YAAM,IAAI,MAAM,gBAAgB;AAElD,UAAM,SAAS;AAAA,MACb,OAAO;AAAA,QACL,MAAM,YAAY;AAAA,QAClB,KAAK;AAAA,MACP;AAAA,MACA,OAAO,eAAe,MAAM,CAAC,CAAC;AAAA,IAChC;AAEA,UAAM,eAAe,WAAW,YAAY,KAAM;AAElD,UAAM,UAAU,aAAa,KAAK;AAElC,QAAI,QAAQ,UAAU;AAAQ,YAAM;AAEpC,UAAM,OAAO;AAAA,MACX,OAAO;AAAA,QACL,MAAM,QAAQ,MAAM;AAAA,QACpB,KAAK,MAAM,CAAC;AAAA,MACd;AAAA,MACA,OAAO,eAAe,MAAM,CAAC,CAAC;AAAA,MAC9B,MAAO,QAAgB;AAAA,IACzB;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,MAAM,EAAE,OAAO,QAAQ,MAAM,OAAc,OAAO,aAAa,MAAM;AAAA,IACvE;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB;AAAA,IACrB,CACE,OACA,aAAa,UACK;AAClB,UAAI,MAAM,SAAS;AACjB,eAAO,aAAa,aAAa,WAAW;AAE9C,UAAI,MAAM,SAAS;AAAe,eAAO,WAAW,MAAM,MAAM,EAAE;AAElE,aAAO,MAAM,SAAS,UAClB,QAAQ;AAAA,QACN,GAAG,OAAO,OAAO,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM,WAAW,EAAE,EAAE,CAAC;AAAA,MAC3D,IACA,QAAQ;AAAA,YACN;AAAA,UAAU,MAAM;AAAA,UAAO,CAAC,MACtB,WAAW,EAAE,EAAE;AAAA,QACjB;AAAA,MACF;AAAA,IACN;AAAA,EACF;AAEA,QAAM,eACJ,CAAC,SACD,CACE,QACA,SAIG;AACH,UAAM,cAAc,SAAS,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM;AAElE,UAAM,SAAS,kBAAkB,YAAY,IAAI,CAAE;AACnD,QAAI,OAAO,SAAS;AAAQ,YAAM;AAElC,UAAM,QAAQ,OAAO,MAAM,IAAI;AAE/B,WAAO;AAAA,MACL,UAAU,CAAC,YAAY,OAAO,MAAM,GAAG;AAAA,MACvC,MAAM,eAAe,OAAO,SAAS,OAAO;AAAA,IAC9C;AAAA,EACF;AAEF,QAAM,gBAAgB,CAAC,QAAgB,iBAAyB;AAC9D,UAAM,eAAe,SAAS,QAC3B,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM,EAC7B,UAAW,KAAK,CAAC,MAAM,EAAE,SAAS,YAAY;AAEjD,WAAO,gBAAgB,aAAa,IAAc;AAAA,EACpD;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IAEA,YAAY,aAAa,QAAQ;AAAA,IACjC,YAAY,aAAa,QAAQ;AAAA,IACjC,WAAW,aAAa,OAAO;AAAA,IAC/B;AAAA,EACF;AACF;","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 V14,\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 : v.type === \"array\"\n ? buildVector(v.value, v.len)\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 | V14) => {\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 : entry.type === \"array\"\n ? complex.Array(getDecoder(entry.value.id), entry.len)\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
@@ -124,8 +124,7 @@ var complex = {
124
124
  // src/with-cache.ts
125
125
  var withCache = (fn, onEnterCircular, onExitCircular) => (input, cache, stack, ...rest) => {
126
126
  const { id } = input;
127
- if (cache.has(id))
128
- return cache.get(id);
127
+ if (cache.has(id)) return cache.get(id);
129
128
  if (stack.has(id)) {
130
129
  const res = onEnterCircular(() => cache.get(id), input, ...rest);
131
130
  cache.set(id, res);
@@ -163,18 +162,13 @@ var addPath = (fn) => (input, cache, stack, lookupData, ...rest) => {
163
162
  return path.length ? withProp(base, "path", path) : base;
164
163
  };
165
164
  var _buildShapedDecoder = (input, cache, stack, lookupData, _accountId) => {
166
- if (input.type === "primitive")
167
- return primitives[input.value];
168
- if (input.type === "void")
169
- return primitives._void;
170
- if (input.type === "AccountId20")
171
- return primitives.ethAccount;
172
- if (input.type === "AccountId32")
173
- return _accountId;
165
+ if (input.type === "primitive") return primitives[input.value];
166
+ if (input.type === "void") return primitives._void;
167
+ if (input.type === "AccountId20") return primitives.ethAccount;
168
+ if (input.type === "AccountId32") return _accountId;
174
169
  if (input.type === "compact")
175
170
  return input.isBig || input.isBig === null ? primitives.compactBn : primitives.compactNumber;
176
- if (input.type === "bitSequence")
177
- return primitives.bitSequence;
171
+ if (input.type === "bitSequence") return primitives.bitSequence;
178
172
  if (input.type === "sequence" && input.value.type === "primitive" && input.value.value === "u8") {
179
173
  return primitives.Bytes;
180
174
  }
@@ -195,23 +189,18 @@ var _buildShapedDecoder = (input, cache, stack, lookupData, _accountId) => {
195
189
  }
196
190
  return buildVector(input.value, input.len);
197
191
  }
198
- if (input.type === "sequence")
199
- return buildVector(input.value);
200
- if (input.type === "tuple")
201
- return buildTuple(input.value, input.innerDocs);
202
- if (input.type === "struct")
203
- return buildStruct(input.value, input.innerDocs);
204
- if (input.type === "option")
205
- return complex.Option(buildNext(input.value));
192
+ if (input.type === "sequence") return buildVector(input.value);
193
+ if (input.type === "tuple") return buildTuple(input.value, input.innerDocs);
194
+ if (input.type === "struct") return buildStruct(input.value, input.innerDocs);
195
+ if (input.type === "option") return complex.Option(buildNext(input.value));
206
196
  if (input.type === "result")
207
197
  return complex.Result(buildNext(input.value.ok), buildNext(input.value.ko));
208
198
  const dependencies = Object.values(input.value).map((v) => {
209
- if (v.type === "void")
210
- return primitives._void;
199
+ if (v.type === "void") return primitives._void;
211
200
  if (v.type === "lookupEntry") {
212
201
  return buildNext(v.value);
213
202
  }
214
- return v.type === "tuple" ? buildTuple(v.value, v.innerDocs) : buildStruct(v.value, v.innerDocs);
203
+ return v.type === "tuple" ? buildTuple(v.value, v.innerDocs) : v.type === "array" ? buildVector(v.value, v.len) : buildStruct(v.value, v.innerDocs);
215
204
  });
216
205
  const inner = Object.fromEntries(
217
206
  Object.keys(input.value).map((key, idx) => [key, dependencies[idx]])
@@ -251,8 +240,7 @@ var getViewBuilder = (metadata) => {
251
240
  if (prefix) {
252
241
  try {
253
242
  const prefixVal = getDecoder(prefix.type)(prefix.value).value;
254
- if (typeof prefixVal === "number")
255
- _accountId = AccountIdShaped(prefixVal);
243
+ if (typeof prefixVal === "number") _accountId = AccountIdShaped(prefixVal);
256
244
  } catch (_) {
257
245
  }
258
246
  }
@@ -260,8 +248,7 @@ var getViewBuilder = (metadata) => {
260
248
  const callDecoder = createDecoder2((bytes) => {
261
249
  const palletIdx = u8.dec(bytes);
262
250
  const palletEntry = metadata.pallets.find((x) => x.index === palletIdx);
263
- if (!palletEntry)
264
- throw new Error("Invalid Pallet");
251
+ if (!palletEntry) throw new Error("Invalid Pallet");
265
252
  const pallet = {
266
253
  value: {
267
254
  name: palletEntry.name,
@@ -271,8 +258,7 @@ var getViewBuilder = (metadata) => {
271
258
  };
272
259
  const callsDecoder = getDecoder(palletEntry.calls);
273
260
  const decoded = callsDecoder(bytes);
274
- if (decoded.codec !== "Enum")
275
- throw null;
261
+ if (decoded.codec !== "Enum") throw null;
276
262
  const call = {
277
263
  value: {
278
264
  name: decoded.value.type,
@@ -291,11 +277,10 @@ var getViewBuilder = (metadata) => {
291
277
  (entry, forceTuple = false) => {
292
278
  if (entry.type === "void")
293
279
  return forceTuple ? emptyTuple : primitives._void;
294
- if (entry.type === "lookupEntry")
295
- return getDecoder(entry.value.id);
280
+ if (entry.type === "lookupEntry") return getDecoder(entry.value.id);
296
281
  return entry.type === "tuple" ? complex.Tuple(
297
282
  ...Object.values(entry.value).map((l) => getDecoder(l.id))
298
- ) : complex.Struct(
283
+ ) : entry.type === "array" ? complex.Array(getDecoder(entry.value.id), entry.len) : complex.Struct(
299
284
  mapObject(
300
285
  entry.value,
301
286
  (x) => getDecoder(x.id)
@@ -306,8 +291,7 @@ var getViewBuilder = (metadata) => {
306
291
  const buildVariant = (type) => (pallet, name) => {
307
292
  const palletEntry = metadata.pallets.find((x) => x.name === pallet);
308
293
  const lookup = getLookupEntryDef(palletEntry[type]);
309
- if (lookup.type !== "enum")
310
- throw null;
294
+ if (lookup.type !== "enum") throw null;
311
295
  const event = lookup.value[name];
312
296
  return {
313
297
  location: [palletEntry.index, event.idx],
@@ -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 V14,\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 | V14) => {\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"]}
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 V14,\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 : v.type === \"array\"\n ? buildVector(v.value, v.len)\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 | V14) => {\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 : entry.type === \"array\"\n ? complex.Array(getDecoder(entry.value.id), entry.len)\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":";AAAA,SAAS,WAAW,mBAAAA,wBAAuB;AAC3C;AAAA,EAME,iBAAAC;AAAA,EACA;AAAA,EAEA,kBAAAC;AAAA,OACK;AAEP,SAAS,mBAAmB;;;ACb5B,SAAS,SAAS,QAAQ,uBAAuB;AACjD,YAAY,WAAW;AA4BvB,IAAM,QAAQ;AAiEd,IAAM,0BAA0B,CAC9B,KACA,SAOM,oBAAc,CAAC,WAAW;AAC9B,QAAM,QAAQ;AACd,QAAM,QAAQ,MAAM;AACpB,QAAM,QAAQ,IAAI,KAAK;AACvB,QAAM,QAAQ,MAAM,IAAI,WAAW,MAAM,OAAO,MAAM,OAAO,MAAM,CAAC,CAAC,CAAC;AACtE,SAAO,EAAE,GAAG,MAAM,OAAO,MAAM;AACjC,CAAC;AAEH,IAAM,yBAAyB,CAC7B,OACA,OACA,SAKG;AACH,QAAM,UACJ,wBAAwB,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC;AAEnD,SAAO,OAAO,OAAO,SAAS;AAAA,IAC5B,OAAO,EAAE,MAAM;AAAA,EACjB,CAAC;AACH;AAEA,IAAM,uBAAuB,CAC3B,OACA,OACA,SASG;AACH,QAAM,UACJ,wBAAwB,OAAO,EAAE,OAAO,MAAM,OAAO,GAAG,KAAK,CAAC;AAEhE,SAAO,OAAO,OAAO,SAAS;AAAA,IAC5B;AAAA,EACF,CAAC;AACH;AAEO,IAAM,kBAAkB,CAAC,aAAa,OAAO;AAClD,QAAM,WAAiB;AAAA,IACf,gBAAU,UAAU,EAAE;AAAA,IAC5B,CAAC,aAAa;AAAA,MACZ;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,uBAAuB,aAAa,UAAU,CAAC,CAAC;AACzD;AAEA,IAAM,aAAa,CAAC,QAClB,uBAAuB,cAAoB,UAAI,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC;AAElE,IAAM,cAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKA,IAAM,iBAMF,OAAO;AAAA,EACT,YAAY,IAAI,CAAC,MAAM,CAAC,GAAG,uBAAuB,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;AACrE;AAEO,IAAM,aAAa;AAAA,EACxB,GAAG;AAAA,EACH,OAAO,uBAAuB,SAAe,UAAI,IAAI,CAAC;AAAA,EACtD;AAAA,EACA,WAAW,gBAAgB;AAC7B;AAEA,IAAM,WAAW,CAAC,UAChB;AAAA,EACE,EAAE,OAAO,YAAY,OAAO,MAAM,MAAM;AAAA,EAClC,aAAO,IAAI,KAAY;AAC/B;AAEF,IAAM,WAAW,CAAC,OAAsB,QACtC;AAAA,EACE,EAAE,OAAO,SAAS,OAAO,MAAM,OAAO,IAAI;AAAA,EACpC,aAAO,IAAI,OAAc,GAAG;AACpC;AAEF,IAAM,WAAW,IAAI,UACnB;AAAA,EACE,EAAE,OAAO,SAAS,OAAO,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE;AAAA,EAC7C,YAAM,IAAI,GAAI,KAA6B;AACnD;AAEF,IAAM,YAAY,CAAC,UACjB;AAAA,EACE,EAAE,OAAO,UAAU,OAAO,gBAAgB,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;AAAA,EAC3D,aAAO,IAAI,KAAW;AAC9B;AAEF,IAAM,UAAU,CACd,OACA,SAEA;AAAA,EACE,EAAE,OAAO,QAAQ,OAAO,gBAAgB,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;AAAA,EACzD,cAAQ,IAAI,OAAa,IAAW;AAC5C;AAEK,IAAM,YAAY,CAAC,UACxB;AAAA,EACE,EAAE,OAAO,UAAU,OAAO,MAAM,MAAM;AAAA,EAChC,aAAO,IAAI,KAAY;AAC/B;AAEK,IAAM,YAAY,CACvB,IACA,OAEA;AAAA,EACE,EAAE,OAAO,UAAU,OAAO,EAAE,IAAI,GAAG,OAAO,IAAI,GAAG,MAAM,EAAE;AAAA,EACnD,aAAO,IAAI,IAAoB,EAAkB;AACzD;AAEK,IAAM,cAAc,CAAC,UAA8C;AACxE,MAAI,QAAsB,CAAC,MAAM;AAC/B,UAAM,UAAU,MAAM;AACtB,UAAMC,UAAS;AACf,YAAQ;AACR,WAAOA,QAAO,CAAC;AAAA,EACjB;AAEA,QAAM,SAAU,CAAC,MAAM,MAAM,CAAC;AAC9B,SAAO,QAAQ,EAAE,OAAO,QAAQ;AAChC,SAAO;AACT;AAEO,IAAM,UAAU;AAAA,EACrB;AAAA,EACA,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AACV;;;AC3QO,IAAM,YACX,CACE,IACA,iBAKA,mBAOF,CAAC,OAAO,OAAO,UAAU,SAAS;AAChC,QAAM,EAAE,GAAG,IAAI;AACf,MAAI,MAAM,IAAI,EAAE,EAAG,QAAO,MAAM,IAAI,EAAE;AAEtC,MAAI,MAAM,IAAI,EAAE,GAAG;AACjB,UAAM,MAAM,gBAAgB,MAAM,MAAM,IAAI,EAAE,GAAI,OAAO,GAAG,IAAI;AAChE,UAAM,IAAI,IAAI,GAAG;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,IAAI,EAAE;AACZ,MAAI,SAAS,GAAG,OAAO,OAAO,OAAO,GAAG,IAAI;AAC5C,QAAM,OAAO,EAAE;AAEf,MAAI,MAAM,IAAI,EAAE;AACd,aAAS,eAAe,QAAQ,MAAM,IAAI,EAAE,GAAI,OAAO,GAAG,IAAI;AAEhE,QAAM,IAAI,IAAI,MAAM;AACpB,SAAO;AACT;;;AFVF,IAAM,aAAa,QAAQ,MAAM;AAEjC,IAAM,oBACJ,CACE,OAEF,IAAI,SAAS;AACX,QAAM,QAAQ,GAAG,GAAG,IAAI;AACxB,SAAO;AAAA,IACL,OAAO,MAAM;AAAA,IACb,SAAS;AAAA,EACX;AACF;AAcF,IAAM,WAAW,CACf,OACA,UACA,cACiD;AACjD,QAAM,UAAUC,gBAAe,OAAsB,CAAC,OAAO;AAAA,IAC3D,GAAG;AAAA,IACH,CAAC,QAAQ,GAAG;AAAA,EACd,EAAE;AACF,UAAQ,QAAQ,MAAM;AACtB,SAAO;AACT;AAEA,IAAM,UACJ,CACE,OAcF,CAAC,OAAO,OAAO,OAAO,eAAe,SAAS;AAC5C,QAAM,EAAE,KAAK,IAAI,WAAW,MAAM,EAAE;AACpC,QAAM,OAAO,GAAG,OAAO,OAAO,OAAO,YAAY,GAAG,IAAI;AACxD,SAAO,KAAK,SAAS,SAAS,MAAM,QAAQ,IAAI,IAAI;AACtD;AAEF,IAAM,sBAAsB,CAC1B,OACA,OACA,OACA,YACA,eACkB;AAClB,MAAI,MAAM,SAAS,YAAa,QAAO,WAAW,MAAM,KAAK;AAC7D,MAAI,MAAM,SAAS,OAAQ,QAAO,WAAW;AAC7C,MAAI,MAAM,SAAS,cAAe,QAAO,WAAW;AACpD,MAAI,MAAM,SAAS,cAAe,QAAO;AACzC,MAAI,MAAM,SAAS;AACjB,WAAO,MAAM,SAAS,MAAM,UAAU,OAClC,WAAW,YACX,WAAW;AACjB,MAAI,MAAM,SAAS,cAAe,QAAO,WAAW;AAEpD,MACE,MAAM,SAAS,cACf,MAAM,MAAM,SAAS,eACrB,MAAM,MAAM,UAAU,MACtB;AACA,WAAO,WAAW;AAAA,EACpB;AAEA,QAAM,YAAY,CAAC,cACjB,mBAAmB,WAAW,OAAO,OAAO,YAAY,UAAU;AAEpE,QAAM,cAAc,CAACC,QAAoB,QAAiB;AACxD,UAAM,SAAS,UAAUA,MAAK;AAC9B,WAAO,MAAM,QAAQ,MAAM,QAAQ,GAAG,IAAI,QAAQ,SAAS,MAAM;AAAA,EACnE;AAEA,QAAM,aAAa,CAAC,OAAsB,cACxC,SAAS,QAAQ,MAAM,GAAG,MAAM,IAAI,SAAS,CAAC,GAAG,aAAa,SAAS;AAEzE,QAAM,cAAc,CAClB,OACA,cAEA;AAAA,IACE,QAAQ,OAAOC,iBAAgB,OAAO,SAAS,CAAC;AAAA,IAChD;AAAA,IACA;AAAA,EACF;AAEF,MAAI,MAAM,SAAS,SAAS;AAE1B,QAAI,MAAM,MAAM,SAAS,eAAe,MAAM,MAAM,UAAU,MAAM;AAClE,aAAO,WAAW,WAAW,MAAM,GAAG;AAAA,IACxC;AAEA,WAAO,YAAY,MAAM,OAAO,MAAM,GAAG;AAAA,EAC3C;AAEA,MAAI,MAAM,SAAS,WAAY,QAAO,YAAY,MAAM,KAAK;AAC7D,MAAI,MAAM,SAAS,QAAS,QAAO,WAAW,MAAM,OAAO,MAAM,SAAS;AAC1E,MAAI,MAAM,SAAS,SAAU,QAAO,YAAY,MAAM,OAAO,MAAM,SAAS;AAC5E,MAAI,MAAM,SAAS,SAAU,QAAO,QAAQ,OAAO,UAAU,MAAM,KAAK,CAAC;AAEzE,MAAI,MAAM,SAAS;AACjB,WAAO,QAAQ,OAAO,UAAU,MAAM,MAAM,EAAE,GAAG,UAAU,MAAM,MAAM,EAAE,CAAC;AAG5E,QAAM,eAAe,OAAO,OAAO,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM;AACzD,QAAI,EAAE,SAAS,OAAQ,QAAO,WAAW;AACzC,QAAI,EAAE,SAAS,eAAe;AAC5B,aAAO,UAAU,EAAE,KAAK;AAAA,IAC1B;AACA,WAAO,EAAE,SAAS,UACd,WAAW,EAAE,OAAO,EAAE,SAAS,IAC/B,EAAE,SAAS,UACT,YAAY,EAAE,OAAO,EAAE,GAAG,IAC1B,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EACxC,CAAC;AAED,QAAM,QAAQ,OAAO;AAAA,IACnB,OAAO,KAAK,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,aAAa,GAAG,CAAC,CAAC;AAAA,EACrE;AAEA,QAAM,UAAU,OAAO,OAAO,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;AAC3D,QAAM,mBAAmB,QAAQ,MAAM,CAAC,KAAK,MAAM,QAAQ,CAAC;AAE5D,QAAM,cAAc,mBAChB,QAAQ,KAAK,KAAK,IAClB,QAAQ,KAAK,OAAO,OAAc;AAEtC,QAAM,WAAWF,gBAAe,aAAa,CAAC,QAAQ;AACpD,UAAM,OAAO,MAAM,UAAU,IAAI,MAAM,IAAI;AAC3C,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AACD,WAAS,QAAQ,YAAY;AAC7B,SAAO;AACT;AAEA,IAAM,WAAW,QAAQ,mBAAmB;AAC5C,IAAM,qBAAqB,UAAU,UAAU,aAAa,CAAC,QAAQ,UAAU;AAC7E,QAAM,QAAQ,OAAO;AACrB,SAAO;AACT,CAAC;AAED,IAAM,iBAAiB,CAAC,UACtB,KAAK,MAAM,SAAS,EAAE,EAAE,OAAO,GAAG,GAAG,CAAC;AAEjC,IAAM,iBAAiC,CAAC,aAAwB;AACrE,QAAM,aAAa,SAAS;AAC5B,QAAM,QAAQ,oBAAI,IAA2B;AAE7C,QAAM,aAAa,CAAC,OAClB;AAAA,IACE,kBAAkB,EAAE;AAAA,IACpB;AAAA,IACA,oBAAI,IAAI;AAAA,IACR;AAAA,IACA;AAAA,EACF;AAEF,QAAM,oBAAoB,YAAY,UAAU;AAEhD,MAAI,aAAsD,WAAW;AAErE,QAAM,SAAS,SAAS,QACrB,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ,GAC9B,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,YAAY;AACjD,MAAI,QAAQ;AACV,QAAI;AACF,YAAM,YAAY,WAAW,OAAO,IAAI,EAAE,OAAO,KAAK,EAAE;AAExD,UAAI,OAAO,cAAc,SAAU,cAAa,gBAAgB,SAAS;AAAA,IAC3E,SAAS,GAAG;AAAA,IAAC;AAAA,EACf;AAEA,QAAM,kBAAkB,kBAAkB,UAAU;AAEpD,QAAM,cAAoCG,eAAc,CAAC,UAAU;AACjE,UAAM,YAAY,GAAG,IAAI,KAAK;AAE9B,UAAM,cAAc,SAAS,QAAQ,KAAK,CAAC,MAAM,EAAE,UAAU,SAAS;AACtE,QAAI,CAAC,YAAa,OAAM,IAAI,MAAM,gBAAgB;AAElD,UAAM,SAAS;AAAA,MACb,OAAO;AAAA,QACL,MAAM,YAAY;AAAA,QAClB,KAAK;AAAA,MACP;AAAA,MACA,OAAO,eAAe,MAAM,CAAC,CAAC;AAAA,IAChC;AAEA,UAAM,eAAe,WAAW,YAAY,KAAM;AAElD,UAAM,UAAU,aAAa,KAAK;AAElC,QAAI,QAAQ,UAAU,OAAQ,OAAM;AAEpC,UAAM,OAAO;AAAA,MACX,OAAO;AAAA,QACL,MAAM,QAAQ,MAAM;AAAA,QACpB,KAAK,MAAM,CAAC;AAAA,MACd;AAAA,MACA,OAAO,eAAe,MAAM,CAAC,CAAC;AAAA,MAC9B,MAAO,QAAgB;AAAA,IACzB;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,MAAM,EAAE,OAAO,QAAQ,MAAM,OAAc,OAAO,aAAa,MAAM;AAAA,IACvE;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB;AAAA,IACrB,CACE,OACA,aAAa,UACK;AAClB,UAAI,MAAM,SAAS;AACjB,eAAO,aAAa,aAAa,WAAW;AAE9C,UAAI,MAAM,SAAS,cAAe,QAAO,WAAW,MAAM,MAAM,EAAE;AAElE,aAAO,MAAM,SAAS,UAClB,QAAQ;AAAA,QACN,GAAG,OAAO,OAAO,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM,WAAW,EAAE,EAAE,CAAC;AAAA,MAC3D,IACA,MAAM,SAAS,UACb,QAAQ,MAAM,WAAW,MAAM,MAAM,EAAE,GAAG,MAAM,GAAG,IACnD,QAAQ;AAAA,QACN;AAAA,UAAU,MAAM;AAAA,UAAO,CAAC,MACtB,WAAW,EAAE,EAAE;AAAA,QACjB;AAAA,MACF;AAAA,IACR;AAAA,EACF;AAEA,QAAM,eACJ,CAAC,SACD,CACE,QACA,SAIG;AACH,UAAM,cAAc,SAAS,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM;AAElE,UAAM,SAAS,kBAAkB,YAAY,IAAI,CAAE;AACnD,QAAI,OAAO,SAAS,OAAQ,OAAM;AAElC,UAAM,QAAQ,OAAO,MAAM,IAAI;AAE/B,WAAO;AAAA,MACL,UAAU,CAAC,YAAY,OAAO,MAAM,GAAG;AAAA,MACvC,MAAM,eAAe,OAAO,SAAS,OAAO;AAAA,IAC9C;AAAA,EACF;AAEF,QAAM,gBAAgB,CAAC,QAAgB,iBAAyB;AAC9D,UAAM,eAAe,SAAS,QAC3B,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM,EAC7B,UAAW,KAAK,CAAC,MAAM,EAAE,SAAS,YAAY;AAEjD,WAAO,gBAAgB,aAAa,IAAc;AAAA,EACpD;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IAEA,YAAY,aAAa,QAAQ;AAAA,IACjC,YAAY,aAAa,QAAQ;AAAA,IACjC,WAAW,aAAa,OAAO;AAAA,IAC/B;AAAA,EACF;AACF;","names":["mapStringRecord","createDecoder","enhanceDecoder","result","enhanceDecoder","inner","mapStringRecord","createDecoder"]}
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"),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}};
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 c in t)g(e,c,{get:t[c],enumerable:!0})},O=(e,t,c,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of U(t))!M.call(e,a)&&a!==c&&g(e,a,{get:()=>t[a],enumerable:!(o=N(t,a))||o.enumerable});return e};var K=(e,t,c)=>(c=e!=null?j(F(e)):{},O(t||!e||!e.__esModule?g(c,"default",{value:e,enumerable:!0}):c,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(c=>{let o=c,a=o.i,p=e(o),u=z(new Uint8Array(o.buffer.slice(a,o.i)));return{...t,value:p,input:u}}),C=(e,t,c)=>{let o=V(t,{codec:e,...c});return Object.assign(o,{shape:{codec:e}})},x=(e,t,c)=>{let o=V(t,{codec:e.codec,...c});return Object.assign(o,{shape:e})},W=(e=42)=>{let t=n.enhanceDecoder(n.AccountId(e).dec,c=>({address:c,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)])),D={...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,c=>c.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 a=e(),p=a;return t=a,p(o)},c=o=>t(o);return c.shape={codec:"_void"},c},h={Sequence:Y,Array:Z,Tuple:ee,Struct:te,Enum:re,Option:oe,Result:ce};var w=(e,t,c)=>(o,a,p,...u)=>{let{id:s}=o;if(a.has(s))return a.get(s);if(p.has(s)){let E=t(()=>a.get(s),o,...u);return a.set(s,E),E}p.add(s);let y=e(o,a,p,...u);return p.delete(s),a.has(s)&&(y=c(y,a.get(s),o,...u)),a.set(s,y),y};var de=h.Tuple(),L=e=>(...t)=>{let c=e(...t);return{shape:c.shape,decoder:c}},k=(e,t,c)=>{let o=(0,v.enhanceDecoder)(e,a=>({...a,[t]:c}));return o.shape=e.shape,o},ae=e=>(t,c,o,a,...p)=>{let{path:u}=a[t.id],s=e(t,c,o,a,...p);return u.length?k(s,"path",u):s},ne=(e,t,c,o,a)=>{if(e.type==="primitive")return D[e.value];if(e.type==="void")return D._void;if(e.type==="AccountId20")return D.ethAccount;if(e.type==="AccountId32")return a;if(e.type==="compact")return e.isBig||e.isBig===null?D.compactBn:D.compactNumber;if(e.type==="bitSequence")return D.bitSequence;if(e.type==="sequence"&&e.value.type==="primitive"&&e.value.value==="u8")return D.Bytes;let p=r=>q(r,t,c,o,a),u=(r,i)=>{let S=p(r);return i?h.Array(S,i):h.Sequence(S)},s=(r,i)=>k(h.Tuple(...r.map(p)),"innerDocs",i),y=(r,i)=>k(h.Struct((0,A.mapStringRecord)(r,p)),"innerDocs",i);if(e.type==="array")return e.value.type==="primitive"&&e.value.value==="u8"?D.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(r=>r.type==="void"?D._void:r.type==="lookupEntry"?p(r.value):r.type==="tuple"?s(r.value,r.innerDocs):r.type==="array"?u(r.value,r.len):y(r.value,r.innerDocs)),f=Object.fromEntries(Object.keys(e.value).map((r,i)=>[r,E[i]])),P=Object.values(e.value).map(r=>r.idx),m=P.every((r,i)=>r===i)?h.Enum(f):h.Enum(f,P),l=(0,v.enhanceDecoder)(m,r=>{let i=e.innerDocs[r.value.type];return{...r,docs:i}});return l.shape=m.shape,l},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,c=new Map,o=d=>q(a(d),c,new Set,t,p),a=(0,I.getLookupFn)(t),p=D.AccountId,u=e.pallets.find(d=>d.name==="System")?.constants.find(d=>d.name==="SS58Prefix");if(u)try{let d=o(u.type)(u.value).value;typeof d=="number"&&(p=W(d))}catch{}let s=L(o),y=(0,v.createDecoder)(d=>{let m=v.u8.dec(d),l=e.pallets.find(H=>H.index===m);if(!l)throw new Error("Invalid Pallet");let r={value:{name:l.name,idx:m},input:B(d[0])},i=o(l.calls),S=i(d);if(S.codec!=="Enum")throw null;let T={value:{name:S.value.type,idx:d[1]},input:B(d[1]),docs:S.docs};return{pallet:r,call:T,args:{value:S.value.value,shape:i.shape}}}),E=L((d,m=!1)=>d.type==="void"?m?de:D._void:d.type==="lookupEntry"?o(d.value.id):d.type==="tuple"?h.Tuple(...Object.values(d.value).map(l=>o(l.id))):d.type==="array"?h.Array(o(d.value.id),d.len):h.Struct((0,A.mapObject)(d.value,l=>o(l.id)))),f=d=>(m,l)=>{let r=e.pallets.find(T=>T.name===m),i=a(r[d]);if(i.type!=="enum")throw null;let S=i.value[l];return{location:[r.index,S.idx],view:E(S,d==="calls")}},P=(d,m)=>{let l=e.pallets.find(r=>r.name===d).constants.find(r=>r.name===m);return s(l.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 V14,\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 | V14) => {\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"]}
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 V14,\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 : v.type === \"array\"\n ? buildVector(v.value, v.len)\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 | V14) => {\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 : entry.type === \"array\"\n ? complex.Array(getDecoder(entry.value.id), entry.len)\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","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.2.0",
3
+ "version": "0.2.1",
4
4
  "author": "Josep M Sobrepere (https://github.com/josepot)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -34,15 +34,10 @@
34
34
  "files": [
35
35
  "dist"
36
36
  ],
37
- "prettier": {
38
- "printWidth": 80,
39
- "semi": false,
40
- "trailingComma": "all"
41
- },
42
37
  "dependencies": {
43
- "@polkadot-api/metadata-builders": "0.2.0",
44
- "@polkadot-api/substrate-bindings": "0.2.0",
45
- "@polkadot-api/utils": "0.0.1"
38
+ "@polkadot-api/metadata-builders": "0.3.1",
39
+ "@polkadot-api/substrate-bindings": "0.6.0",
40
+ "@polkadot-api/utils": "0.1.0"
46
41
  },
47
42
  "devDependencies": {
48
43
  "@polkadot-api/metadata-fixtures": "0.0.0"