@polkadot-api/compare-runtimes 0.0.1 → 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.
@@ -1,8 +1,9 @@
1
- import { mapLookupToTypedef, entryPointsAreCompatible, runtimeCallEntryPoint, storageEntryPoint, singleValueEntryPoint, enumValueEntryPointNode, voidEntryPointNode } from '@polkadot-api/metadata-compatibility';
2
- import { getMappedMetadata } from './mapped-metadata.mjs';
3
- import { unifyMetadata, decAnyMetadata } from '@polkadot-api/substrate-bindings';
4
1
  import { getLookupFn } from '@polkadot-api/metadata-builders';
2
+ import { mapLookupToTypedef, entryPointsAreCompatible, singleValueEntryPoint, runtimeCallEntryPoint, storageEntryPoint, enumValueEntryPointNode, voidEntryPointNode } from '@polkadot-api/metadata-compatibility';
3
+ import { unifyMetadata, decAnyMetadata } from '@polkadot-api/substrate-bindings';
4
+ import { getMappedMetadata } from './mapped-metadata.mjs';
5
5
  import { shallowDiff } from './shallow-diff.mjs';
6
+ import { mapObject } from '@polkadot-api/utils';
6
7
 
7
8
  const getEnumEntry = (entry, side) => {
8
9
  const node = enumValueEntryPointNode(entry);
@@ -19,7 +20,11 @@ const getMetadataHelpers = (rawMetadata) => {
19
20
  const metadataMaps = getMappedMetadata(metadata, lookupFn);
20
21
  return { lookupFn, getTypeDefNode, metadataMaps };
21
22
  };
22
- const minCompatLevel = (levels) => Math.min(levels.args, levels.values);
23
+ const minCompatLevel = (results) => Math.min(results.args.level, results.values.level);
24
+ const compatLevel = (results) => ({
25
+ args: results.args.level,
26
+ values: results.values.level
27
+ });
23
28
  const compareRuntimes = (prevMetadata, nextMetadata) => {
24
29
  const [prev, next] = [prevMetadata, nextMetadata].map(getMetadataHelpers);
25
30
  const cache = /* @__PURE__ */ new Map();
@@ -64,6 +69,26 @@ const compareRuntimes = (prevMetadata, nextMetadata) => {
64
69
  )
65
70
  };
66
71
  };
72
+ const compareExtension = (name) => {
73
+ const prevExtensions = prev.metadataMaps.extensions[name];
74
+ const newExtensions = next.metadataMaps.extensions[name];
75
+ return {
76
+ kind: "extension",
77
+ name,
78
+ compat: mapObject(
79
+ prevExtensions,
80
+ (type, key) => minCompatLevel(
81
+ entryPointsAreCompatible(
82
+ singleValueEntryPoint(type),
83
+ prev.getTypeDefNode,
84
+ singleValueEntryPoint(newExtensions[key]),
85
+ next.getTypeDefNode,
86
+ cache
87
+ )
88
+ )
89
+ )
90
+ };
91
+ };
67
92
  const compareStorage = (pallet, name) => {
68
93
  const a = prev.metadataMaps.pallets[pallet].storage.get(name);
69
94
  const b = next.metadataMaps.pallets[pallet].storage.get(name);
@@ -71,12 +96,14 @@ const compareRuntimes = (prevMetadata, nextMetadata) => {
71
96
  kind: "storage",
72
97
  pallet,
73
98
  name,
74
- compat: entryPointsAreCompatible(
75
- storageEntryPoint(a),
76
- prev.getTypeDefNode,
77
- storageEntryPoint(b),
78
- next.getTypeDefNode,
79
- cache
99
+ compat: compatLevel(
100
+ entryPointsAreCompatible(
101
+ storageEntryPoint(a),
102
+ prev.getTypeDefNode,
103
+ storageEntryPoint(b),
104
+ next.getTypeDefNode,
105
+ cache
106
+ )
80
107
  )
81
108
  };
82
109
  };
@@ -87,12 +114,14 @@ const compareRuntimes = (prevMetadata, nextMetadata) => {
87
114
  kind: "view",
88
115
  pallet,
89
116
  name,
90
- compat: entryPointsAreCompatible(
91
- runtimeCallEntryPoint(a),
92
- prev.getTypeDefNode,
93
- runtimeCallEntryPoint(b),
94
- next.getTypeDefNode,
95
- cache
117
+ compat: compatLevel(
118
+ entryPointsAreCompatible(
119
+ runtimeCallEntryPoint(a),
120
+ prev.getTypeDefNode,
121
+ runtimeCallEntryPoint(b),
122
+ next.getTypeDefNode,
123
+ cache
124
+ )
96
125
  )
97
126
  };
98
127
  };
@@ -103,12 +132,14 @@ const compareRuntimes = (prevMetadata, nextMetadata) => {
103
132
  kind: "api",
104
133
  group,
105
134
  name,
106
- compat: entryPointsAreCompatible(
107
- runtimeCallEntryPoint(a),
108
- prev.getTypeDefNode,
109
- runtimeCallEntryPoint(b),
110
- next.getTypeDefNode,
111
- cache
135
+ compat: compatLevel(
136
+ entryPointsAreCompatible(
137
+ runtimeCallEntryPoint(a),
138
+ prev.getTypeDefNode,
139
+ runtimeCallEntryPoint(b),
140
+ next.getTypeDefNode,
141
+ cache
142
+ )
112
143
  )
113
144
  };
114
145
  };
@@ -125,6 +156,8 @@ const compareRuntimes = (prevMetadata, nextMetadata) => {
125
156
  return compareViewFn(x.pallet, x.name);
126
157
  case "api":
127
158
  return compareRuntimeApi(x.group, x.name);
159
+ case "extension":
160
+ throw compareExtension(x.name);
128
161
  default:
129
162
  return compareEnumEntries(x);
130
163
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compare-runtimes.mjs","sources":["../../src/compare-runtimes.ts"],"sourcesContent":["import {\n CompatibilityLevel,\n entryPointsAreCompatible,\n enumValueEntryPointNode,\n mapLookupToTypedef,\n runtimeCallEntryPoint,\n singleValueEntryPoint,\n storageEntryPoint,\n TypedefNode,\n voidEntryPointNode,\n} from \"@polkadot-api/metadata-compatibility\"\nimport { EnumEntry, getMappedMetadata } from \"./mapped-metadata\"\nimport { decAnyMetadata, unifyMetadata } from \"@polkadot-api/substrate-bindings\"\nimport { getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport { ComparedChange, Output } from \"./public-types\"\nimport { shallowDiff } from \"./shallow-diff\"\n\nconst getEnumEntry = (entry: EnumEntry, side: \"args\" | \"values\") => {\n const node = enumValueEntryPointNode(entry)\n return {\n args: side === \"args\" ? node : voidEntryPointNode,\n values: side === \"args\" ? voidEntryPointNode : node,\n }\n}\n\nconst getMetadataHelpers = (rawMetadata: Uint8Array) => {\n const metadata = unifyMetadata(decAnyMetadata(rawMetadata))\n const lookupFn = getLookupFn(metadata)\n const typeNodesCache: (TypedefNode | null)[] = []\n const getTypeDefNode = (id: number) =>\n (typeNodesCache[id] ||= mapLookupToTypedef(lookupFn(id)))\n const metadataMaps = getMappedMetadata(metadata, lookupFn)\n\n return { lookupFn, getTypeDefNode, metadataMaps }\n}\n\nconst minCompatLevel = (levels: {\n args: CompatibilityLevel\n values: CompatibilityLevel\n}) => Math.min(levels.args, levels.values)\n\nexport const compareRuntimes = (\n prevMetadata: Uint8Array,\n nextMetadata: Uint8Array,\n): Output => {\n const [prev, next] = [prevMetadata, nextMetadata].map(getMetadataHelpers)\n\n const cache = new Map()\n const compareEnumEntries = ({\n kind,\n pallet,\n name,\n }: {\n kind: \"call\" | \"event\" | \"error\"\n pallet: string\n name: string\n }): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]![kind].get(name)!\n const b = next.metadataMaps.pallets[pallet]![kind].get(name)!\n const argsOrValues = kind === \"call\" ? \"args\" : \"values\"\n\n return {\n kind,\n pallet,\n name,\n compat: minCompatLevel(\n entryPointsAreCompatible(\n getEnumEntry(a, argsOrValues),\n prev.getTypeDefNode,\n getEnumEntry(b, argsOrValues),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const compareConst = (pallet: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]!.const.get(name)!\n const b = next.metadataMaps.pallets[pallet]!.const.get(name)!\n\n return {\n kind: \"const\",\n pallet,\n name,\n compat: minCompatLevel(\n entryPointsAreCompatible(\n singleValueEntryPoint(a.type),\n prev.getTypeDefNode,\n singleValueEntryPoint(b.type),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const compareStorage = (pallet: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]!.storage.get(name)!\n const b = next.metadataMaps.pallets[pallet]!.storage.get(name)!\n\n return {\n kind: \"storage\",\n pallet,\n name,\n compat: entryPointsAreCompatible(\n storageEntryPoint(a),\n prev.getTypeDefNode,\n storageEntryPoint(b),\n next.getTypeDefNode,\n cache,\n ),\n }\n }\n\n const compareViewFn = (pallet: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]!.view.get(name)!\n const b = next.metadataMaps.pallets[pallet]!.view.get(name)!\n\n return {\n kind: \"view\",\n pallet,\n name,\n compat: entryPointsAreCompatible(\n runtimeCallEntryPoint(a),\n prev.getTypeDefNode,\n runtimeCallEntryPoint(b),\n next.getTypeDefNode,\n cache,\n ),\n }\n }\n\n const compareRuntimeApi = (group: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.api[group]!.get(name)!\n const b = next.metadataMaps.api[group]!.get(name)!\n\n return {\n kind: \"api\",\n group,\n name,\n compat: entryPointsAreCompatible(\n runtimeCallEntryPoint(a),\n prev.getTypeDefNode,\n runtimeCallEntryPoint(b),\n next.getTypeDefNode,\n cache,\n ),\n }\n }\n\n const added = shallowDiff(prev.metadataMaps, next.metadataMaps, \"added\")\n const removed = shallowDiff(next.metadataMaps, prev.metadataMaps, \"added\")\n const commonApis = shallowDiff(prev.metadataMaps, next.metadataMaps, \"kept\")\n\n const kept = commonApis.map((x) => {\n switch (x.kind) {\n case \"const\":\n return compareConst(x.pallet, x.name)\n case \"storage\":\n return compareStorage(x.pallet, x.name)\n case \"view\":\n return compareViewFn(x.pallet, x.name)\n case \"api\":\n return compareRuntimeApi(x.group, x.name)\n default:\n return compareEnumEntries(x as any)\n }\n })\n\n return { added, removed, kept }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compare-runtimes.mjs","sources":["../../src/compare-runtimes.ts"],"sourcesContent":["import { getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport {\n CompatibilityResult,\n entryPointsAreCompatible,\n enumValueEntryPointNode,\n mapLookupToTypedef,\n runtimeCallEntryPoint,\n singleValueEntryPoint,\n storageEntryPoint,\n TypedefNode,\n voidEntryPointNode,\n} from \"@polkadot-api/metadata-compatibility\"\nimport { decAnyMetadata, unifyMetadata } from \"@polkadot-api/substrate-bindings\"\nimport { EnumEntry, getMappedMetadata } from \"./mapped-metadata\"\nimport { ComparedChange, Output } from \"./public-types\"\nimport { shallowDiff } from \"./shallow-diff\"\nimport { mapObject } from \"@polkadot-api/utils\"\n\nconst getEnumEntry = (entry: EnumEntry, side: \"args\" | \"values\") => {\n const node = enumValueEntryPointNode(entry)\n return {\n args: side === \"args\" ? node : voidEntryPointNode,\n values: side === \"args\" ? voidEntryPointNode : node,\n }\n}\n\nconst getMetadataHelpers = (rawMetadata: Uint8Array) => {\n const metadata = unifyMetadata(decAnyMetadata(rawMetadata))\n const lookupFn = getLookupFn(metadata)\n const typeNodesCache: (TypedefNode | null)[] = []\n const getTypeDefNode = (id: number) =>\n (typeNodesCache[id] ||= mapLookupToTypedef(lookupFn(id)))\n const metadataMaps = getMappedMetadata(metadata, lookupFn)\n\n return { lookupFn, getTypeDefNode, metadataMaps }\n}\n\nconst minCompatLevel = (results: {\n args: CompatibilityResult\n values: CompatibilityResult\n}) => Math.min(results.args.level, results.values.level)\nconst compatLevel = (results: {\n args: CompatibilityResult\n values: CompatibilityResult\n}) => ({\n args: results.args.level,\n values: results.values.level,\n})\n\nexport const compareRuntimes = (\n prevMetadata: Uint8Array,\n nextMetadata: Uint8Array,\n): Output => {\n const [prev, next] = [prevMetadata, nextMetadata].map(getMetadataHelpers)\n\n const cache = new Map()\n const compareEnumEntries = ({\n kind,\n pallet,\n name,\n }: {\n kind: \"call\" | \"event\" | \"error\"\n pallet: string\n name: string\n }): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]![kind].get(name)!\n const b = next.metadataMaps.pallets[pallet]![kind].get(name)!\n const argsOrValues = kind === \"call\" ? \"args\" : \"values\"\n\n return {\n kind,\n pallet,\n name,\n compat: minCompatLevel(\n entryPointsAreCompatible(\n getEnumEntry(a, argsOrValues),\n prev.getTypeDefNode,\n getEnumEntry(b, argsOrValues),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const compareConst = (pallet: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]!.const.get(name)!\n const b = next.metadataMaps.pallets[pallet]!.const.get(name)!\n\n return {\n kind: \"const\",\n pallet,\n name,\n compat: minCompatLevel(\n entryPointsAreCompatible(\n singleValueEntryPoint(a.type),\n prev.getTypeDefNode,\n singleValueEntryPoint(b.type),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const compareExtension = (name: string): ComparedChange => {\n const prevExtensions = prev.metadataMaps.extensions[name]\n const newExtensions = next.metadataMaps.extensions[name]\n\n return {\n kind: \"extension\",\n name,\n compat: mapObject(prevExtensions, (type, key) =>\n minCompatLevel(\n entryPointsAreCompatible(\n singleValueEntryPoint(type),\n prev.getTypeDefNode,\n singleValueEntryPoint(newExtensions[key]),\n next.getTypeDefNode,\n cache,\n ),\n ),\n ),\n }\n }\n\n const compareStorage = (pallet: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]!.storage.get(name)!\n const b = next.metadataMaps.pallets[pallet]!.storage.get(name)!\n\n return {\n kind: \"storage\",\n pallet,\n name,\n compat: compatLevel(\n entryPointsAreCompatible(\n storageEntryPoint(a),\n prev.getTypeDefNode,\n storageEntryPoint(b),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const compareViewFn = (pallet: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]!.view.get(name)!\n const b = next.metadataMaps.pallets[pallet]!.view.get(name)!\n\n return {\n kind: \"view\",\n pallet,\n name,\n compat: compatLevel(\n entryPointsAreCompatible(\n runtimeCallEntryPoint(a),\n prev.getTypeDefNode,\n runtimeCallEntryPoint(b),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const compareRuntimeApi = (group: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.api[group]!.get(name)!\n const b = next.metadataMaps.api[group]!.get(name)!\n\n return {\n kind: \"api\",\n group,\n name,\n compat: compatLevel(\n entryPointsAreCompatible(\n runtimeCallEntryPoint(a),\n prev.getTypeDefNode,\n runtimeCallEntryPoint(b),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const added = shallowDiff(prev.metadataMaps, next.metadataMaps, \"added\")\n const removed = shallowDiff(next.metadataMaps, prev.metadataMaps, \"added\")\n const commonApis = shallowDiff(prev.metadataMaps, next.metadataMaps, \"kept\")\n\n const kept = commonApis.map((x) => {\n switch (x.kind) {\n case \"const\":\n return compareConst(x.pallet, x.name)\n case \"storage\":\n return compareStorage(x.pallet, x.name)\n case \"view\":\n return compareViewFn(x.pallet, x.name)\n case \"api\":\n return compareRuntimeApi(x.group, x.name)\n case \"extension\":\n throw compareExtension(x.name)\n default:\n return compareEnumEntries(x as any)\n }\n })\n\n return { added, removed, kept }\n}\n"],"names":[],"mappings":"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"}
@@ -50,7 +50,16 @@ const getMappedMetadata = (metadata, lookupFn) => {
50
50
  new Map(x.methods.map((m) => [m.name, m]))
51
51
  ])
52
52
  );
53
- return { pallets, api };
53
+ return {
54
+ pallets,
55
+ api,
56
+ extensions: Object.fromEntries(
57
+ metadata.extrinsic.signedExtensions.map(({ identifier, ...rest2 }) => [
58
+ identifier,
59
+ rest2
60
+ ])
61
+ )
62
+ };
54
63
  };
55
64
 
56
65
  export { getMappedMetadata };
@@ -1 +1 @@
1
- {"version":3,"file":"mapped-metadata.mjs","sources":["../../src/mapped-metadata.ts"],"sourcesContent":["import { LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { UnifiedMetadata } from \"@polkadot-api/substrate-bindings\"\nimport type {\n StructVar,\n ArrayVar,\n TupleVar,\n VoidVar,\n} from \"@polkadot-api/metadata-builders\"\nimport { mapObject } from \"@polkadot-api/utils\"\n\nexport type EnumEntry = (\n | VoidVar\n | TupleVar\n | StructVar\n | ArrayVar\n | {\n type: \"lookupEntry\"\n value: LookupEntry\n }\n) & {\n idx: number\n}\n\nexport type MetadataMaps = {\n pallets: Record<\n string,\n {\n storage: Map<\n string,\n NonNullable<\n UnifiedMetadata[\"pallets\"][number][\"storage\"]\n >[\"items\"][number]\n >\n event: Map<string, EnumEntry>\n error: Map<string, EnumEntry>\n call: Map<string, EnumEntry>\n const: Map<\n string,\n NonNullable<UnifiedMetadata[\"pallets\"][number][\"constants\"]>[number]\n >\n view: Map<\n string,\n NonNullable<UnifiedMetadata[\"pallets\"][number][\"viewFns\"]>[number]\n >\n }\n >\n api: Record<\n string,\n Map<string, NonNullable<UnifiedMetadata[\"apis\"][number][\"methods\"][number]>>\n >\n}\n\nconst buildVariants = (\n metadata: UnifiedMetadata,\n lookupFn: (id: number) => LookupEntry,\n) =>\n Object.fromEntries(\n metadata.pallets.map((palletEntry) => {\n const [error, event, call] = [\n \"errors\" as const,\n \"events\" as const,\n \"calls\" as const,\n ].map((variantType) => {\n try {\n const lookup = lookupFn(palletEntry[variantType]!.type)\n if (lookup.type !== \"enum\") throw null\n return new Map(Object.entries(lookup.value))\n } catch {\n return new Map()\n }\n })\n return [palletEntry.name, { error, event, call }]\n }),\n )\n\nexport const getMappedMetadata = (\n metadata: UnifiedMetadata,\n lookupFn: (id: number) => LookupEntry,\n): MetadataMaps => {\n const palletVariants = buildVariants(metadata, lookupFn)\n const rest = Object.fromEntries(\n metadata.pallets.map((palletEntry) => {\n const [constants, view] = [\"constants\" as const, \"viewFns\" as const].map(\n (entryType) => new Map(palletEntry[entryType].map((x) => [x.name, x])),\n )\n return [palletEntry.name, { const: constants, view }]\n }),\n ) as Record<string, Pick<MetadataMaps[\"pallets\"][string], \"const\" | \"view\">>\n const storage = Object.fromEntries(\n metadata.pallets.map((palletEntry) => [\n palletEntry.name,\n new Map((palletEntry.storage?.items || []).map((x) => [x.name, x])),\n ]),\n ) as Record<string, MetadataMaps[\"pallets\"][string][\"storage\"]>\n\n const pallets: MetadataMaps[\"pallets\"] = mapObject(\n palletVariants,\n ({ error, event, call }, key) => ({\n error,\n event,\n call,\n storage: storage[key],\n ...rest[key],\n }),\n )\n\n const api: MetadataMaps[\"api\"] = Object.fromEntries(\n metadata.apis.map((x) => [\n x.name,\n new Map(x.methods.map((m) => [m.name, m])),\n ]),\n )\n\n return { pallets, api }\n}\n"],"names":[],"mappings":";;AAoDA,MAAM,aAAgB,GAAA,CACpB,QACA,EAAA,QAAA,KAEA,MAAO,CAAA,WAAA;AAAA,EACL,QAAS,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,WAAgB,KAAA;AACpC,IAAA,MAAM,CAAC,KAAA,EAAO,KAAO,EAAA,IAAI,CAAI,GAAA;AAAA,MAC3B,QAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF,CAAE,GAAI,CAAA,CAAC,WAAgB,KAAA;AACrB,MAAI,IAAA;AACF,QAAA,MAAM,MAAS,GAAA,QAAA,CAAS,WAAY,CAAA,WAAW,EAAG,IAAI,CAAA;AACtD,QAAI,IAAA,MAAA,CAAO,IAAS,KAAA,MAAA,EAAc,MAAA,IAAA;AAClC,QAAA,OAAO,IAAI,GAAI,CAAA,MAAA,CAAO,OAAQ,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OACrC,CAAA,MAAA;AACN,QAAA,2BAAW,GAAI,EAAA;AAAA;AACjB,KACD,CAAA;AACD,IAAA,OAAO,CAAC,WAAY,CAAA,IAAA,EAAM,EAAE,KAAO,EAAA,KAAA,EAAO,MAAM,CAAA;AAAA,GACjD;AACH,CAAA;AAEW,MAAA,iBAAA,GAAoB,CAC/B,QAAA,EACA,QACiB,KAAA;AACjB,EAAM,MAAA,cAAA,GAAiB,aAAc,CAAA,QAAA,EAAU,QAAQ,CAAA;AACvD,EAAA,MAAM,OAAO,MAAO,CAAA,WAAA;AAAA,IAClB,QAAS,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,WAAgB,KAAA;AACpC,MAAA,MAAM,CAAC,SAAW,EAAA,IAAI,IAAI,CAAC,WAAA,EAAsB,SAAkB,CAAE,CAAA,GAAA;AAAA,QACnE,CAAC,SAAA,KAAc,IAAI,GAAA,CAAI,YAAY,SAAS,CAAA,CAAE,GAAI,CAAA,CAAC,MAAM,CAAC,CAAA,CAAE,IAAM,EAAA,CAAC,CAAC,CAAC;AAAA,OACvE;AACA,MAAA,OAAO,CAAC,WAAY,CAAA,IAAA,EAAM,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,CAAA;AAAA,KACrD;AAAA,GACH;AACA,EAAA,MAAM,UAAU,MAAO,CAAA,WAAA;AAAA,IACrB,QAAS,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,WAAgB,KAAA;AAAA,MACpC,WAAY,CAAA,IAAA;AAAA,MACZ,IAAI,GAAA,CAAA,CAAK,WAAY,CAAA,OAAA,EAAS,SAAS,EAAC,EAAG,GAAI,CAAA,CAAC,MAAM,CAAC,CAAA,CAAE,IAAM,EAAA,CAAC,CAAC,CAAC;AAAA,KACnE;AAAA,GACH;AAEA,EAAA,MAAM,OAAmC,GAAA,SAAA;AAAA,IACvC,cAAA;AAAA,IACA,CAAC,EAAE,KAAA,EAAO,KAAO,EAAA,IAAA,IAAQ,GAAS,MAAA;AAAA,MAChC,KAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA,EAAS,QAAQ,GAAG,CAAA;AAAA,MACpB,GAAG,KAAK,GAAG;AAAA,KACb;AAAA,GACF;AAEA,EAAA,MAAM,MAA2B,MAAO,CAAA,WAAA;AAAA,IACtC,QAAS,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,CAAM,KAAA;AAAA,MACvB,CAAE,CAAA,IAAA;AAAA,MACF,IAAI,GAAA,CAAI,CAAE,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,CAAM,KAAA,CAAC,CAAE,CAAA,IAAA,EAAM,CAAC,CAAC,CAAC;AAAA,KAC1C;AAAA,GACH;AAEA,EAAO,OAAA,EAAE,SAAS,GAAI,EAAA;AACxB;;;;"}
1
+ {"version":3,"file":"mapped-metadata.mjs","sources":["../../src/mapped-metadata.ts"],"sourcesContent":["import { LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { UnifiedMetadata } from \"@polkadot-api/substrate-bindings\"\nimport type {\n StructVar,\n ArrayVar,\n TupleVar,\n VoidVar,\n} from \"@polkadot-api/metadata-builders\"\nimport { mapObject } from \"@polkadot-api/utils\"\n\nexport type EnumEntry = (\n | VoidVar\n | TupleVar\n | StructVar\n | ArrayVar\n | {\n type: \"lookupEntry\"\n value: LookupEntry\n }\n) & {\n idx: number\n}\n\nexport type MetadataMaps = {\n pallets: Record<\n string,\n {\n storage: Map<\n string,\n NonNullable<\n UnifiedMetadata[\"pallets\"][number][\"storage\"]\n >[\"items\"][number]\n >\n event: Map<string, EnumEntry>\n error: Map<string, EnumEntry>\n call: Map<string, EnumEntry>\n const: Map<\n string,\n NonNullable<UnifiedMetadata[\"pallets\"][number][\"constants\"]>[number]\n >\n view: Map<\n string,\n NonNullable<UnifiedMetadata[\"pallets\"][number][\"viewFns\"]>[number]\n >\n }\n >\n api: Record<\n string,\n Map<string, NonNullable<UnifiedMetadata[\"apis\"][number][\"methods\"][number]>>\n >\n extensions: Record<string, { type: number; additionalSigned: number }>\n}\n\nconst buildVariants = (\n metadata: UnifiedMetadata,\n lookupFn: (id: number) => LookupEntry,\n) =>\n Object.fromEntries(\n metadata.pallets.map((palletEntry) => {\n const [error, event, call] = [\n \"errors\" as const,\n \"events\" as const,\n \"calls\" as const,\n ].map((variantType) => {\n try {\n const lookup = lookupFn(palletEntry[variantType]!.type)\n if (lookup.type !== \"enum\") throw null\n return new Map(Object.entries(lookup.value))\n } catch {\n return new Map()\n }\n })\n return [palletEntry.name, { error, event, call }]\n }),\n )\n\nexport const getMappedMetadata = (\n metadata: UnifiedMetadata,\n lookupFn: (id: number) => LookupEntry,\n): MetadataMaps => {\n const palletVariants = buildVariants(metadata, lookupFn)\n const rest = Object.fromEntries(\n metadata.pallets.map((palletEntry) => {\n const [constants, view] = [\"constants\" as const, \"viewFns\" as const].map(\n (entryType) => new Map(palletEntry[entryType].map((x) => [x.name, x])),\n )\n return [palletEntry.name, { const: constants, view }]\n }),\n ) as Record<string, Pick<MetadataMaps[\"pallets\"][string], \"const\" | \"view\">>\n const storage = Object.fromEntries(\n metadata.pallets.map((palletEntry) => [\n palletEntry.name,\n new Map((palletEntry.storage?.items || []).map((x) => [x.name, x])),\n ]),\n ) as Record<string, MetadataMaps[\"pallets\"][string][\"storage\"]>\n\n const pallets: MetadataMaps[\"pallets\"] = mapObject(\n palletVariants,\n ({ error, event, call }, key) => ({\n error,\n event,\n call,\n storage: storage[key],\n ...rest[key],\n }),\n )\n\n const api: MetadataMaps[\"api\"] = Object.fromEntries(\n metadata.apis.map((x) => [\n x.name,\n new Map(x.methods.map((m) => [m.name, m])),\n ]),\n )\n\n return {\n pallets,\n api,\n extensions: Object.fromEntries(\n metadata.extrinsic.signedExtensions.map(({ identifier, ...rest }) => [\n identifier,\n rest,\n ]),\n ),\n }\n}\n"],"names":["rest"],"mappings":"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"}
@@ -33,6 +33,15 @@ const shallowDiff = (prev, next, type) => {
33
33
  }
34
34
  });
35
35
  });
36
+ Object.keys(next.extensions).forEach((name) => {
37
+ const isInPrev = !!prev.extensions[name];
38
+ if (type === "added" ? !isInPrev : isInPrev) {
39
+ result.push({
40
+ kind: "extension",
41
+ name
42
+ });
43
+ }
44
+ });
36
45
  return result;
37
46
  };
38
47
 
@@ -1 +1 @@
1
- {"version":3,"file":"shallow-diff.mjs","sources":["../../src/shallow-diff.ts"],"sourcesContent":["import { MetadataMaps } from \"./mapped-metadata\"\nimport { Change } from \"./public-types\"\n\nexport const shallowDiff = (\n prev: MetadataMaps,\n next: MetadataMaps,\n type: \"added\" | \"kept\",\n): Array<Change> => {\n const result: Array<Change> = []\n Object.entries(next.pallets).forEach(([palletName, data]) => {\n ;[\n \"const\" as const,\n \"storage\" as const,\n \"call\" as const,\n \"event\" as const,\n \"error\" as const,\n \"view\" as const,\n ].forEach((x) => {\n ;[...data[x as \"storage\"].keys()].forEach((key) => {\n const isInPrev = prev.pallets[palletName]?.[x as \"storage\"].has(key)\n if (type === \"added\" ? !isInPrev : isInPrev) {\n result.push({\n kind: x,\n pallet: palletName,\n name: key,\n })\n }\n })\n })\n })\n\n Object.entries(next.api).forEach(([apiGroup, val]) => {\n ;[...val.keys()].forEach((x) => {\n const isInPrev = prev.api[apiGroup]?.has(x)\n if (type === \"added\" ? !isInPrev : isInPrev) {\n result.push({\n kind: \"api\",\n group: apiGroup,\n name: x,\n })\n }\n })\n })\n\n return result\n}\n"],"names":[],"mappings":"AAGO,MAAM,WAAc,GAAA,CACzB,IACA,EAAA,IAAA,EACA,IACkB,KAAA;AAClB,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAO,MAAA,CAAA,OAAA,CAAQ,KAAK,OAAO,CAAA,CAAE,QAAQ,CAAC,CAAC,UAAY,EAAA,IAAI,CAAM,KAAA;AAC1D,IAAA;AAAA,MACC,OAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF,CAAE,OAAQ,CAAA,CAAC,CAAM,KAAA;AACd,MAAC,CAAA,GAAG,KAAK,CAAc,CAAA,CAAE,MAAM,CAAA,CAAE,OAAQ,CAAA,CAAC,GAAQ,KAAA;AACjD,QAAM,MAAA,QAAA,GAAW,KAAK,OAAQ,CAAA,UAAU,IAAI,CAAc,CAAA,CAAE,IAAI,GAAG,CAAA;AACnE,QAAA,IAAI,IAAS,KAAA,OAAA,GAAU,CAAC,QAAA,GAAW,QAAU,EAAA;AAC3C,UAAA,MAAA,CAAO,IAAK,CAAA;AAAA,YACV,IAAM,EAAA,CAAA;AAAA,YACN,MAAQ,EAAA,UAAA;AAAA,YACR,IAAM,EAAA;AAAA,WACP,CAAA;AAAA;AACH,OACD,CAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA;AAED,EAAO,MAAA,CAAA,OAAA,CAAQ,KAAK,GAAG,CAAA,CAAE,QAAQ,CAAC,CAAC,QAAU,EAAA,GAAG,CAAM,KAAA;AACnD,IAAA,CAAC,GAAG,GAAI,CAAA,IAAA,EAAM,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AAC9B,MAAA,MAAM,WAAW,IAAK,CAAA,GAAA,CAAI,QAAQ,CAAA,EAAG,IAAI,CAAC,CAAA;AAC1C,MAAA,IAAI,IAAS,KAAA,OAAA,GAAU,CAAC,QAAA,GAAW,QAAU,EAAA;AAC3C,QAAA,MAAA,CAAO,IAAK,CAAA;AAAA,UACV,IAAM,EAAA,KAAA;AAAA,UACN,KAAO,EAAA,QAAA;AAAA,UACP,IAAM,EAAA;AAAA,SACP,CAAA;AAAA;AACH,KACD,CAAA;AAAA,GACF,CAAA;AAED,EAAO,OAAA,MAAA;AACT;;;;"}
1
+ {"version":3,"file":"shallow-diff.mjs","sources":["../../src/shallow-diff.ts"],"sourcesContent":["import { MetadataMaps } from \"./mapped-metadata\"\nimport { Change } from \"./public-types\"\n\nexport const shallowDiff = (\n prev: MetadataMaps,\n next: MetadataMaps,\n type: \"added\" | \"kept\",\n): Array<Change> => {\n const result: Array<Change> = []\n Object.entries(next.pallets).forEach(([palletName, data]) => {\n ;[\n \"const\" as const,\n \"storage\" as const,\n \"call\" as const,\n \"event\" as const,\n \"error\" as const,\n \"view\" as const,\n ].forEach((x) => {\n ;[...data[x as \"storage\"].keys()].forEach((key) => {\n const isInPrev = prev.pallets[palletName]?.[x as \"storage\"].has(key)\n if (type === \"added\" ? !isInPrev : isInPrev) {\n result.push({\n kind: x,\n pallet: palletName,\n name: key,\n })\n }\n })\n })\n })\n\n Object.entries(next.api).forEach(([apiGroup, val]) => {\n ;[...val.keys()].forEach((x) => {\n const isInPrev = prev.api[apiGroup]?.has(x)\n if (type === \"added\" ? !isInPrev : isInPrev) {\n result.push({\n kind: \"api\",\n group: apiGroup,\n name: x,\n })\n }\n })\n })\n\n Object.keys(next.extensions).forEach((name) => {\n const isInPrev = !!prev.extensions[name]\n if (type === \"added\" ? !isInPrev : isInPrev) {\n result.push({\n kind: \"extension\",\n name,\n })\n }\n })\n\n return result\n}\n"],"names":[],"mappings":"AAGO,MAAM,WAAc,GAAA,CACzB,IACA,EAAA,IAAA,EACA,IACkB,KAAA;AAClB,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAO,MAAA,CAAA,OAAA,CAAQ,KAAK,OAAO,CAAA,CAAE,QAAQ,CAAC,CAAC,UAAY,EAAA,IAAI,CAAM,KAAA;AAC1D,IAAA;AAAA,MACC,OAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF,CAAE,OAAQ,CAAA,CAAC,CAAM,KAAA;AACd,MAAC,CAAA,GAAG,KAAK,CAAc,CAAA,CAAE,MAAM,CAAA,CAAE,OAAQ,CAAA,CAAC,GAAQ,KAAA;AACjD,QAAM,MAAA,QAAA,GAAW,KAAK,OAAQ,CAAA,UAAU,IAAI,CAAc,CAAA,CAAE,IAAI,GAAG,CAAA;AACnE,QAAA,IAAI,IAAS,KAAA,OAAA,GAAU,CAAC,QAAA,GAAW,QAAU,EAAA;AAC3C,UAAA,MAAA,CAAO,IAAK,CAAA;AAAA,YACV,IAAM,EAAA,CAAA;AAAA,YACN,MAAQ,EAAA,UAAA;AAAA,YACR,IAAM,EAAA;AAAA,WACP,CAAA;AAAA;AACH,OACD,CAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA;AAED,EAAO,MAAA,CAAA,OAAA,CAAQ,KAAK,GAAG,CAAA,CAAE,QAAQ,CAAC,CAAC,QAAU,EAAA,GAAG,CAAM,KAAA;AACnD,IAAA,CAAC,GAAG,GAAI,CAAA,IAAA,EAAM,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AAC9B,MAAA,MAAM,WAAW,IAAK,CAAA,GAAA,CAAI,QAAQ,CAAA,EAAG,IAAI,CAAC,CAAA;AAC1C,MAAA,IAAI,IAAS,KAAA,OAAA,GAAU,CAAC,QAAA,GAAW,QAAU,EAAA;AAC3C,QAAA,MAAA,CAAO,IAAK,CAAA;AAAA,UACV,IAAM,EAAA,KAAA;AAAA,UACN,KAAO,EAAA,QAAA;AAAA,UACP,IAAM,EAAA;AAAA,SACP,CAAA;AAAA;AACH,KACD,CAAA;AAAA,GACF,CAAA;AAED,EAAA,MAAA,CAAO,KAAK,IAAK,CAAA,UAAU,CAAE,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AAC7C,IAAA,MAAM,QAAW,GAAA,CAAC,CAAC,IAAA,CAAK,WAAW,IAAI,CAAA;AACvC,IAAA,IAAI,IAAS,KAAA,OAAA,GAAU,CAAC,QAAA,GAAW,QAAU,EAAA;AAC3C,MAAA,MAAA,CAAO,IAAK,CAAA;AAAA,QACV,IAAM,EAAA,WAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA;AACH,GACD,CAAA;AAED,EAAO,OAAA,MAAA;AACT;;;;"}
package/dist/index.d.ts CHANGED
@@ -9,6 +9,9 @@ type Change = {
9
9
  kind: "api";
10
10
  group: string;
11
11
  name: string;
12
+ } | {
13
+ kind: "extension";
14
+ name: string;
12
15
  };
13
16
  type ComparedChange = {
14
17
  kind: "call" | "event" | "error" | "const";
@@ -31,6 +34,13 @@ type ComparedChange = {
31
34
  args: CompatibilityLevel;
32
35
  values: CompatibilityLevel;
33
36
  };
37
+ } | {
38
+ kind: "extension";
39
+ name: string;
40
+ compat: {
41
+ type: CompatibilityLevel;
42
+ additionalSigned: CompatibilityLevel;
43
+ };
34
44
  };
35
45
  type Output = {
36
46
  added: Array<Change>;
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
+ var metadataBuilders = require('@polkadot-api/metadata-builders');
3
4
  var metadataCompatibility = require('@polkadot-api/metadata-compatibility');
4
- var utils = require('@polkadot-api/utils');
5
5
  var substrateBindings = require('@polkadot-api/substrate-bindings');
6
- var metadataBuilders = require('@polkadot-api/metadata-builders');
6
+ var utils = require('@polkadot-api/utils');
7
7
 
8
8
  const buildVariants = (metadata, lookupFn) => Object.fromEntries(
9
9
  metadata.pallets.map((palletEntry) => {
@@ -55,7 +55,16 @@ const getMappedMetadata = (metadata, lookupFn) => {
55
55
  new Map(x.methods.map((m) => [m.name, m]))
56
56
  ])
57
57
  );
58
- return { pallets, api };
58
+ return {
59
+ pallets,
60
+ api,
61
+ extensions: Object.fromEntries(
62
+ metadata.extrinsic.signedExtensions.map(({ identifier, ...rest2 }) => [
63
+ identifier,
64
+ rest2
65
+ ])
66
+ )
67
+ };
59
68
  };
60
69
 
61
70
  const shallowDiff = (prev, next, type) => {
@@ -93,6 +102,15 @@ const shallowDiff = (prev, next, type) => {
93
102
  }
94
103
  });
95
104
  });
105
+ Object.keys(next.extensions).forEach((name) => {
106
+ const isInPrev = !!prev.extensions[name];
107
+ if (type === "added" ? !isInPrev : isInPrev) {
108
+ result.push({
109
+ kind: "extension",
110
+ name
111
+ });
112
+ }
113
+ });
96
114
  return result;
97
115
  };
98
116
 
@@ -111,7 +129,11 @@ const getMetadataHelpers = (rawMetadata) => {
111
129
  const metadataMaps = getMappedMetadata(metadata, lookupFn);
112
130
  return { lookupFn, getTypeDefNode, metadataMaps };
113
131
  };
114
- const minCompatLevel = (levels) => Math.min(levels.args, levels.values);
132
+ const minCompatLevel = (results) => Math.min(results.args.level, results.values.level);
133
+ const compatLevel = (results) => ({
134
+ args: results.args.level,
135
+ values: results.values.level
136
+ });
115
137
  const compareRuntimes = (prevMetadata, nextMetadata) => {
116
138
  const [prev, next] = [prevMetadata, nextMetadata].map(getMetadataHelpers);
117
139
  const cache = /* @__PURE__ */ new Map();
@@ -156,6 +178,26 @@ const compareRuntimes = (prevMetadata, nextMetadata) => {
156
178
  )
157
179
  };
158
180
  };
181
+ const compareExtension = (name) => {
182
+ const prevExtensions = prev.metadataMaps.extensions[name];
183
+ const newExtensions = next.metadataMaps.extensions[name];
184
+ return {
185
+ kind: "extension",
186
+ name,
187
+ compat: utils.mapObject(
188
+ prevExtensions,
189
+ (type, key) => minCompatLevel(
190
+ metadataCompatibility.entryPointsAreCompatible(
191
+ metadataCompatibility.singleValueEntryPoint(type),
192
+ prev.getTypeDefNode,
193
+ metadataCompatibility.singleValueEntryPoint(newExtensions[key]),
194
+ next.getTypeDefNode,
195
+ cache
196
+ )
197
+ )
198
+ )
199
+ };
200
+ };
159
201
  const compareStorage = (pallet, name) => {
160
202
  const a = prev.metadataMaps.pallets[pallet].storage.get(name);
161
203
  const b = next.metadataMaps.pallets[pallet].storage.get(name);
@@ -163,12 +205,14 @@ const compareRuntimes = (prevMetadata, nextMetadata) => {
163
205
  kind: "storage",
164
206
  pallet,
165
207
  name,
166
- compat: metadataCompatibility.entryPointsAreCompatible(
167
- metadataCompatibility.storageEntryPoint(a),
168
- prev.getTypeDefNode,
169
- metadataCompatibility.storageEntryPoint(b),
170
- next.getTypeDefNode,
171
- cache
208
+ compat: compatLevel(
209
+ metadataCompatibility.entryPointsAreCompatible(
210
+ metadataCompatibility.storageEntryPoint(a),
211
+ prev.getTypeDefNode,
212
+ metadataCompatibility.storageEntryPoint(b),
213
+ next.getTypeDefNode,
214
+ cache
215
+ )
172
216
  )
173
217
  };
174
218
  };
@@ -179,12 +223,14 @@ const compareRuntimes = (prevMetadata, nextMetadata) => {
179
223
  kind: "view",
180
224
  pallet,
181
225
  name,
182
- compat: metadataCompatibility.entryPointsAreCompatible(
183
- metadataCompatibility.runtimeCallEntryPoint(a),
184
- prev.getTypeDefNode,
185
- metadataCompatibility.runtimeCallEntryPoint(b),
186
- next.getTypeDefNode,
187
- cache
226
+ compat: compatLevel(
227
+ metadataCompatibility.entryPointsAreCompatible(
228
+ metadataCompatibility.runtimeCallEntryPoint(a),
229
+ prev.getTypeDefNode,
230
+ metadataCompatibility.runtimeCallEntryPoint(b),
231
+ next.getTypeDefNode,
232
+ cache
233
+ )
188
234
  )
189
235
  };
190
236
  };
@@ -195,12 +241,14 @@ const compareRuntimes = (prevMetadata, nextMetadata) => {
195
241
  kind: "api",
196
242
  group,
197
243
  name,
198
- compat: metadataCompatibility.entryPointsAreCompatible(
199
- metadataCompatibility.runtimeCallEntryPoint(a),
200
- prev.getTypeDefNode,
201
- metadataCompatibility.runtimeCallEntryPoint(b),
202
- next.getTypeDefNode,
203
- cache
244
+ compat: compatLevel(
245
+ metadataCompatibility.entryPointsAreCompatible(
246
+ metadataCompatibility.runtimeCallEntryPoint(a),
247
+ prev.getTypeDefNode,
248
+ metadataCompatibility.runtimeCallEntryPoint(b),
249
+ next.getTypeDefNode,
250
+ cache
251
+ )
204
252
  )
205
253
  };
206
254
  };
@@ -217,6 +265,8 @@ const compareRuntimes = (prevMetadata, nextMetadata) => {
217
265
  return compareViewFn(x.pallet, x.name);
218
266
  case "api":
219
267
  return compareRuntimeApi(x.group, x.name);
268
+ case "extension":
269
+ throw compareExtension(x.name);
220
270
  default:
221
271
  return compareEnumEntries(x);
222
272
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/mapped-metadata.ts","../src/shallow-diff.ts","../src/compare-runtimes.ts"],"sourcesContent":["import { LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { UnifiedMetadata } from \"@polkadot-api/substrate-bindings\"\nimport type {\n StructVar,\n ArrayVar,\n TupleVar,\n VoidVar,\n} from \"@polkadot-api/metadata-builders\"\nimport { mapObject } from \"@polkadot-api/utils\"\n\nexport type EnumEntry = (\n | VoidVar\n | TupleVar\n | StructVar\n | ArrayVar\n | {\n type: \"lookupEntry\"\n value: LookupEntry\n }\n) & {\n idx: number\n}\n\nexport type MetadataMaps = {\n pallets: Record<\n string,\n {\n storage: Map<\n string,\n NonNullable<\n UnifiedMetadata[\"pallets\"][number][\"storage\"]\n >[\"items\"][number]\n >\n event: Map<string, EnumEntry>\n error: Map<string, EnumEntry>\n call: Map<string, EnumEntry>\n const: Map<\n string,\n NonNullable<UnifiedMetadata[\"pallets\"][number][\"constants\"]>[number]\n >\n view: Map<\n string,\n NonNullable<UnifiedMetadata[\"pallets\"][number][\"viewFns\"]>[number]\n >\n }\n >\n api: Record<\n string,\n Map<string, NonNullable<UnifiedMetadata[\"apis\"][number][\"methods\"][number]>>\n >\n}\n\nconst buildVariants = (\n metadata: UnifiedMetadata,\n lookupFn: (id: number) => LookupEntry,\n) =>\n Object.fromEntries(\n metadata.pallets.map((palletEntry) => {\n const [error, event, call] = [\n \"errors\" as const,\n \"events\" as const,\n \"calls\" as const,\n ].map((variantType) => {\n try {\n const lookup = lookupFn(palletEntry[variantType]!.type)\n if (lookup.type !== \"enum\") throw null\n return new Map(Object.entries(lookup.value))\n } catch {\n return new Map()\n }\n })\n return [palletEntry.name, { error, event, call }]\n }),\n )\n\nexport const getMappedMetadata = (\n metadata: UnifiedMetadata,\n lookupFn: (id: number) => LookupEntry,\n): MetadataMaps => {\n const palletVariants = buildVariants(metadata, lookupFn)\n const rest = Object.fromEntries(\n metadata.pallets.map((palletEntry) => {\n const [constants, view] = [\"constants\" as const, \"viewFns\" as const].map(\n (entryType) => new Map(palletEntry[entryType].map((x) => [x.name, x])),\n )\n return [palletEntry.name, { const: constants, view }]\n }),\n ) as Record<string, Pick<MetadataMaps[\"pallets\"][string], \"const\" | \"view\">>\n const storage = Object.fromEntries(\n metadata.pallets.map((palletEntry) => [\n palletEntry.name,\n new Map((palletEntry.storage?.items || []).map((x) => [x.name, x])),\n ]),\n ) as Record<string, MetadataMaps[\"pallets\"][string][\"storage\"]>\n\n const pallets: MetadataMaps[\"pallets\"] = mapObject(\n palletVariants,\n ({ error, event, call }, key) => ({\n error,\n event,\n call,\n storage: storage[key],\n ...rest[key],\n }),\n )\n\n const api: MetadataMaps[\"api\"] = Object.fromEntries(\n metadata.apis.map((x) => [\n x.name,\n new Map(x.methods.map((m) => [m.name, m])),\n ]),\n )\n\n return { pallets, api }\n}\n","import { MetadataMaps } from \"./mapped-metadata\"\nimport { Change } from \"./public-types\"\n\nexport const shallowDiff = (\n prev: MetadataMaps,\n next: MetadataMaps,\n type: \"added\" | \"kept\",\n): Array<Change> => {\n const result: Array<Change> = []\n Object.entries(next.pallets).forEach(([palletName, data]) => {\n ;[\n \"const\" as const,\n \"storage\" as const,\n \"call\" as const,\n \"event\" as const,\n \"error\" as const,\n \"view\" as const,\n ].forEach((x) => {\n ;[...data[x as \"storage\"].keys()].forEach((key) => {\n const isInPrev = prev.pallets[palletName]?.[x as \"storage\"].has(key)\n if (type === \"added\" ? !isInPrev : isInPrev) {\n result.push({\n kind: x,\n pallet: palletName,\n name: key,\n })\n }\n })\n })\n })\n\n Object.entries(next.api).forEach(([apiGroup, val]) => {\n ;[...val.keys()].forEach((x) => {\n const isInPrev = prev.api[apiGroup]?.has(x)\n if (type === \"added\" ? !isInPrev : isInPrev) {\n result.push({\n kind: \"api\",\n group: apiGroup,\n name: x,\n })\n }\n })\n })\n\n return result\n}\n","import {\n CompatibilityLevel,\n entryPointsAreCompatible,\n enumValueEntryPointNode,\n mapLookupToTypedef,\n runtimeCallEntryPoint,\n singleValueEntryPoint,\n storageEntryPoint,\n TypedefNode,\n voidEntryPointNode,\n} from \"@polkadot-api/metadata-compatibility\"\nimport { EnumEntry, getMappedMetadata } from \"./mapped-metadata\"\nimport { decAnyMetadata, unifyMetadata } from \"@polkadot-api/substrate-bindings\"\nimport { getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport { ComparedChange, Output } from \"./public-types\"\nimport { shallowDiff } from \"./shallow-diff\"\n\nconst getEnumEntry = (entry: EnumEntry, side: \"args\" | \"values\") => {\n const node = enumValueEntryPointNode(entry)\n return {\n args: side === \"args\" ? node : voidEntryPointNode,\n values: side === \"args\" ? voidEntryPointNode : node,\n }\n}\n\nconst getMetadataHelpers = (rawMetadata: Uint8Array) => {\n const metadata = unifyMetadata(decAnyMetadata(rawMetadata))\n const lookupFn = getLookupFn(metadata)\n const typeNodesCache: (TypedefNode | null)[] = []\n const getTypeDefNode = (id: number) =>\n (typeNodesCache[id] ||= mapLookupToTypedef(lookupFn(id)))\n const metadataMaps = getMappedMetadata(metadata, lookupFn)\n\n return { lookupFn, getTypeDefNode, metadataMaps }\n}\n\nconst minCompatLevel = (levels: {\n args: CompatibilityLevel\n values: CompatibilityLevel\n}) => Math.min(levels.args, levels.values)\n\nexport const compareRuntimes = (\n prevMetadata: Uint8Array,\n nextMetadata: Uint8Array,\n): Output => {\n const [prev, next] = [prevMetadata, nextMetadata].map(getMetadataHelpers)\n\n const cache = new Map()\n const compareEnumEntries = ({\n kind,\n pallet,\n name,\n }: {\n kind: \"call\" | \"event\" | \"error\"\n pallet: string\n name: string\n }): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]![kind].get(name)!\n const b = next.metadataMaps.pallets[pallet]![kind].get(name)!\n const argsOrValues = kind === \"call\" ? \"args\" : \"values\"\n\n return {\n kind,\n pallet,\n name,\n compat: minCompatLevel(\n entryPointsAreCompatible(\n getEnumEntry(a, argsOrValues),\n prev.getTypeDefNode,\n getEnumEntry(b, argsOrValues),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const compareConst = (pallet: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]!.const.get(name)!\n const b = next.metadataMaps.pallets[pallet]!.const.get(name)!\n\n return {\n kind: \"const\",\n pallet,\n name,\n compat: minCompatLevel(\n entryPointsAreCompatible(\n singleValueEntryPoint(a.type),\n prev.getTypeDefNode,\n singleValueEntryPoint(b.type),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const compareStorage = (pallet: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]!.storage.get(name)!\n const b = next.metadataMaps.pallets[pallet]!.storage.get(name)!\n\n return {\n kind: \"storage\",\n pallet,\n name,\n compat: entryPointsAreCompatible(\n storageEntryPoint(a),\n prev.getTypeDefNode,\n storageEntryPoint(b),\n next.getTypeDefNode,\n cache,\n ),\n }\n }\n\n const compareViewFn = (pallet: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]!.view.get(name)!\n const b = next.metadataMaps.pallets[pallet]!.view.get(name)!\n\n return {\n kind: \"view\",\n pallet,\n name,\n compat: entryPointsAreCompatible(\n runtimeCallEntryPoint(a),\n prev.getTypeDefNode,\n runtimeCallEntryPoint(b),\n next.getTypeDefNode,\n cache,\n ),\n }\n }\n\n const compareRuntimeApi = (group: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.api[group]!.get(name)!\n const b = next.metadataMaps.api[group]!.get(name)!\n\n return {\n kind: \"api\",\n group,\n name,\n compat: entryPointsAreCompatible(\n runtimeCallEntryPoint(a),\n prev.getTypeDefNode,\n runtimeCallEntryPoint(b),\n next.getTypeDefNode,\n cache,\n ),\n }\n }\n\n const added = shallowDiff(prev.metadataMaps, next.metadataMaps, \"added\")\n const removed = shallowDiff(next.metadataMaps, prev.metadataMaps, \"added\")\n const commonApis = shallowDiff(prev.metadataMaps, next.metadataMaps, \"kept\")\n\n const kept = commonApis.map((x) => {\n switch (x.kind) {\n case \"const\":\n return compareConst(x.pallet, x.name)\n case \"storage\":\n return compareStorage(x.pallet, x.name)\n case \"view\":\n return compareViewFn(x.pallet, x.name)\n case \"api\":\n return compareRuntimeApi(x.group, x.name)\n default:\n return compareEnumEntries(x as any)\n }\n })\n\n return { added, removed, kept }\n}\n"],"names":["mapObject","enumValueEntryPointNode","voidEntryPointNode","unifyMetadata","decAnyMetadata","getLookupFn","mapLookupToTypedef","entryPointsAreCompatible","singleValueEntryPoint","storageEntryPoint","runtimeCallEntryPoint"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/mapped-metadata.ts","../src/shallow-diff.ts","../src/compare-runtimes.ts"],"sourcesContent":["import { LookupEntry } from \"@polkadot-api/metadata-builders\"\nimport { UnifiedMetadata } from \"@polkadot-api/substrate-bindings\"\nimport type {\n StructVar,\n ArrayVar,\n TupleVar,\n VoidVar,\n} from \"@polkadot-api/metadata-builders\"\nimport { mapObject } from \"@polkadot-api/utils\"\n\nexport type EnumEntry = (\n | VoidVar\n | TupleVar\n | StructVar\n | ArrayVar\n | {\n type: \"lookupEntry\"\n value: LookupEntry\n }\n) & {\n idx: number\n}\n\nexport type MetadataMaps = {\n pallets: Record<\n string,\n {\n storage: Map<\n string,\n NonNullable<\n UnifiedMetadata[\"pallets\"][number][\"storage\"]\n >[\"items\"][number]\n >\n event: Map<string, EnumEntry>\n error: Map<string, EnumEntry>\n call: Map<string, EnumEntry>\n const: Map<\n string,\n NonNullable<UnifiedMetadata[\"pallets\"][number][\"constants\"]>[number]\n >\n view: Map<\n string,\n NonNullable<UnifiedMetadata[\"pallets\"][number][\"viewFns\"]>[number]\n >\n }\n >\n api: Record<\n string,\n Map<string, NonNullable<UnifiedMetadata[\"apis\"][number][\"methods\"][number]>>\n >\n extensions: Record<string, { type: number; additionalSigned: number }>\n}\n\nconst buildVariants = (\n metadata: UnifiedMetadata,\n lookupFn: (id: number) => LookupEntry,\n) =>\n Object.fromEntries(\n metadata.pallets.map((palletEntry) => {\n const [error, event, call] = [\n \"errors\" as const,\n \"events\" as const,\n \"calls\" as const,\n ].map((variantType) => {\n try {\n const lookup = lookupFn(palletEntry[variantType]!.type)\n if (lookup.type !== \"enum\") throw null\n return new Map(Object.entries(lookup.value))\n } catch {\n return new Map()\n }\n })\n return [palletEntry.name, { error, event, call }]\n }),\n )\n\nexport const getMappedMetadata = (\n metadata: UnifiedMetadata,\n lookupFn: (id: number) => LookupEntry,\n): MetadataMaps => {\n const palletVariants = buildVariants(metadata, lookupFn)\n const rest = Object.fromEntries(\n metadata.pallets.map((palletEntry) => {\n const [constants, view] = [\"constants\" as const, \"viewFns\" as const].map(\n (entryType) => new Map(palletEntry[entryType].map((x) => [x.name, x])),\n )\n return [palletEntry.name, { const: constants, view }]\n }),\n ) as Record<string, Pick<MetadataMaps[\"pallets\"][string], \"const\" | \"view\">>\n const storage = Object.fromEntries(\n metadata.pallets.map((palletEntry) => [\n palletEntry.name,\n new Map((palletEntry.storage?.items || []).map((x) => [x.name, x])),\n ]),\n ) as Record<string, MetadataMaps[\"pallets\"][string][\"storage\"]>\n\n const pallets: MetadataMaps[\"pallets\"] = mapObject(\n palletVariants,\n ({ error, event, call }, key) => ({\n error,\n event,\n call,\n storage: storage[key],\n ...rest[key],\n }),\n )\n\n const api: MetadataMaps[\"api\"] = Object.fromEntries(\n metadata.apis.map((x) => [\n x.name,\n new Map(x.methods.map((m) => [m.name, m])),\n ]),\n )\n\n return {\n pallets,\n api,\n extensions: Object.fromEntries(\n metadata.extrinsic.signedExtensions.map(({ identifier, ...rest }) => [\n identifier,\n rest,\n ]),\n ),\n }\n}\n","import { MetadataMaps } from \"./mapped-metadata\"\nimport { Change } from \"./public-types\"\n\nexport const shallowDiff = (\n prev: MetadataMaps,\n next: MetadataMaps,\n type: \"added\" | \"kept\",\n): Array<Change> => {\n const result: Array<Change> = []\n Object.entries(next.pallets).forEach(([palletName, data]) => {\n ;[\n \"const\" as const,\n \"storage\" as const,\n \"call\" as const,\n \"event\" as const,\n \"error\" as const,\n \"view\" as const,\n ].forEach((x) => {\n ;[...data[x as \"storage\"].keys()].forEach((key) => {\n const isInPrev = prev.pallets[palletName]?.[x as \"storage\"].has(key)\n if (type === \"added\" ? !isInPrev : isInPrev) {\n result.push({\n kind: x,\n pallet: palletName,\n name: key,\n })\n }\n })\n })\n })\n\n Object.entries(next.api).forEach(([apiGroup, val]) => {\n ;[...val.keys()].forEach((x) => {\n const isInPrev = prev.api[apiGroup]?.has(x)\n if (type === \"added\" ? !isInPrev : isInPrev) {\n result.push({\n kind: \"api\",\n group: apiGroup,\n name: x,\n })\n }\n })\n })\n\n Object.keys(next.extensions).forEach((name) => {\n const isInPrev = !!prev.extensions[name]\n if (type === \"added\" ? !isInPrev : isInPrev) {\n result.push({\n kind: \"extension\",\n name,\n })\n }\n })\n\n return result\n}\n","import { getLookupFn } from \"@polkadot-api/metadata-builders\"\nimport {\n CompatibilityResult,\n entryPointsAreCompatible,\n enumValueEntryPointNode,\n mapLookupToTypedef,\n runtimeCallEntryPoint,\n singleValueEntryPoint,\n storageEntryPoint,\n TypedefNode,\n voidEntryPointNode,\n} from \"@polkadot-api/metadata-compatibility\"\nimport { decAnyMetadata, unifyMetadata } from \"@polkadot-api/substrate-bindings\"\nimport { EnumEntry, getMappedMetadata } from \"./mapped-metadata\"\nimport { ComparedChange, Output } from \"./public-types\"\nimport { shallowDiff } from \"./shallow-diff\"\nimport { mapObject } from \"@polkadot-api/utils\"\n\nconst getEnumEntry = (entry: EnumEntry, side: \"args\" | \"values\") => {\n const node = enumValueEntryPointNode(entry)\n return {\n args: side === \"args\" ? node : voidEntryPointNode,\n values: side === \"args\" ? voidEntryPointNode : node,\n }\n}\n\nconst getMetadataHelpers = (rawMetadata: Uint8Array) => {\n const metadata = unifyMetadata(decAnyMetadata(rawMetadata))\n const lookupFn = getLookupFn(metadata)\n const typeNodesCache: (TypedefNode | null)[] = []\n const getTypeDefNode = (id: number) =>\n (typeNodesCache[id] ||= mapLookupToTypedef(lookupFn(id)))\n const metadataMaps = getMappedMetadata(metadata, lookupFn)\n\n return { lookupFn, getTypeDefNode, metadataMaps }\n}\n\nconst minCompatLevel = (results: {\n args: CompatibilityResult\n values: CompatibilityResult\n}) => Math.min(results.args.level, results.values.level)\nconst compatLevel = (results: {\n args: CompatibilityResult\n values: CompatibilityResult\n}) => ({\n args: results.args.level,\n values: results.values.level,\n})\n\nexport const compareRuntimes = (\n prevMetadata: Uint8Array,\n nextMetadata: Uint8Array,\n): Output => {\n const [prev, next] = [prevMetadata, nextMetadata].map(getMetadataHelpers)\n\n const cache = new Map()\n const compareEnumEntries = ({\n kind,\n pallet,\n name,\n }: {\n kind: \"call\" | \"event\" | \"error\"\n pallet: string\n name: string\n }): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]![kind].get(name)!\n const b = next.metadataMaps.pallets[pallet]![kind].get(name)!\n const argsOrValues = kind === \"call\" ? \"args\" : \"values\"\n\n return {\n kind,\n pallet,\n name,\n compat: minCompatLevel(\n entryPointsAreCompatible(\n getEnumEntry(a, argsOrValues),\n prev.getTypeDefNode,\n getEnumEntry(b, argsOrValues),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const compareConst = (pallet: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]!.const.get(name)!\n const b = next.metadataMaps.pallets[pallet]!.const.get(name)!\n\n return {\n kind: \"const\",\n pallet,\n name,\n compat: minCompatLevel(\n entryPointsAreCompatible(\n singleValueEntryPoint(a.type),\n prev.getTypeDefNode,\n singleValueEntryPoint(b.type),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const compareExtension = (name: string): ComparedChange => {\n const prevExtensions = prev.metadataMaps.extensions[name]\n const newExtensions = next.metadataMaps.extensions[name]\n\n return {\n kind: \"extension\",\n name,\n compat: mapObject(prevExtensions, (type, key) =>\n minCompatLevel(\n entryPointsAreCompatible(\n singleValueEntryPoint(type),\n prev.getTypeDefNode,\n singleValueEntryPoint(newExtensions[key]),\n next.getTypeDefNode,\n cache,\n ),\n ),\n ),\n }\n }\n\n const compareStorage = (pallet: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]!.storage.get(name)!\n const b = next.metadataMaps.pallets[pallet]!.storage.get(name)!\n\n return {\n kind: \"storage\",\n pallet,\n name,\n compat: compatLevel(\n entryPointsAreCompatible(\n storageEntryPoint(a),\n prev.getTypeDefNode,\n storageEntryPoint(b),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const compareViewFn = (pallet: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.pallets[pallet]!.view.get(name)!\n const b = next.metadataMaps.pallets[pallet]!.view.get(name)!\n\n return {\n kind: \"view\",\n pallet,\n name,\n compat: compatLevel(\n entryPointsAreCompatible(\n runtimeCallEntryPoint(a),\n prev.getTypeDefNode,\n runtimeCallEntryPoint(b),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const compareRuntimeApi = (group: string, name: string): ComparedChange => {\n const a = prev.metadataMaps.api[group]!.get(name)!\n const b = next.metadataMaps.api[group]!.get(name)!\n\n return {\n kind: \"api\",\n group,\n name,\n compat: compatLevel(\n entryPointsAreCompatible(\n runtimeCallEntryPoint(a),\n prev.getTypeDefNode,\n runtimeCallEntryPoint(b),\n next.getTypeDefNode,\n cache,\n ),\n ),\n }\n }\n\n const added = shallowDiff(prev.metadataMaps, next.metadataMaps, \"added\")\n const removed = shallowDiff(next.metadataMaps, prev.metadataMaps, \"added\")\n const commonApis = shallowDiff(prev.metadataMaps, next.metadataMaps, \"kept\")\n\n const kept = commonApis.map((x) => {\n switch (x.kind) {\n case \"const\":\n return compareConst(x.pallet, x.name)\n case \"storage\":\n return compareStorage(x.pallet, x.name)\n case \"view\":\n return compareViewFn(x.pallet, x.name)\n case \"api\":\n return compareRuntimeApi(x.group, x.name)\n case \"extension\":\n throw compareExtension(x.name)\n default:\n return compareEnumEntries(x as any)\n }\n })\n\n return { added, removed, kept }\n}\n"],"names":["mapObject","rest","enumValueEntryPointNode","voidEntryPointNode","unifyMetadata","decAnyMetadata","getLookupFn","mapLookupToTypedef","entryPointsAreCompatible","singleValueEntryPoint","storageEntryPoint","runtimeCallEntryPoint"],"mappings":";;;;;;;AAqDA,MAAM,aAAgB,GAAA,CACpB,QACA,EAAA,QAAA,KAEA,MAAO,CAAA,WAAA;AAAA,EACL,QAAS,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,WAAgB,KAAA;AACpC,IAAA,MAAM,CAAC,KAAA,EAAO,KAAO,EAAA,IAAI,CAAI,GAAA;AAAA,MAC3B,QAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF,CAAE,GAAI,CAAA,CAAC,WAAgB,KAAA;AACrB,MAAI,IAAA;AACF,QAAA,MAAM,MAAS,GAAA,QAAA,CAAS,WAAY,CAAA,WAAW,EAAG,IAAI,CAAA;AACtD,QAAI,IAAA,MAAA,CAAO,IAAS,KAAA,MAAA,EAAc,MAAA,IAAA;AAClC,QAAA,OAAO,IAAI,GAAI,CAAA,MAAA,CAAO,OAAQ,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,OACrC,CAAA,MAAA;AACN,QAAA,2BAAW,GAAI,EAAA;AAAA;AACjB,KACD,CAAA;AACD,IAAA,OAAO,CAAC,WAAY,CAAA,IAAA,EAAM,EAAE,KAAO,EAAA,KAAA,EAAO,MAAM,CAAA;AAAA,GACjD;AACH,CAAA;AAEW,MAAA,iBAAA,GAAoB,CAC/B,QAAA,EACA,QACiB,KAAA;AACjB,EAAM,MAAA,cAAA,GAAiB,aAAc,CAAA,QAAA,EAAU,QAAQ,CAAA;AACvD,EAAA,MAAM,OAAO,MAAO,CAAA,WAAA;AAAA,IAClB,QAAS,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,WAAgB,KAAA;AACpC,MAAA,MAAM,CAAC,SAAW,EAAA,IAAI,IAAI,CAAC,WAAA,EAAsB,SAAkB,CAAE,CAAA,GAAA;AAAA,QACnE,CAAC,SAAA,KAAc,IAAI,GAAA,CAAI,YAAY,SAAS,CAAA,CAAE,GAAI,CAAA,CAAC,MAAM,CAAC,CAAA,CAAE,IAAM,EAAA,CAAC,CAAC,CAAC;AAAA,OACvE;AACA,MAAA,OAAO,CAAC,WAAY,CAAA,IAAA,EAAM,EAAE,KAAO,EAAA,SAAA,EAAW,MAAM,CAAA;AAAA,KACrD;AAAA,GACH;AACA,EAAA,MAAM,UAAU,MAAO,CAAA,WAAA;AAAA,IACrB,QAAS,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,WAAgB,KAAA;AAAA,MACpC,WAAY,CAAA,IAAA;AAAA,MACZ,IAAI,GAAA,CAAA,CAAK,WAAY,CAAA,OAAA,EAAS,SAAS,EAAC,EAAG,GAAI,CAAA,CAAC,MAAM,CAAC,CAAA,CAAE,IAAM,EAAA,CAAC,CAAC,CAAC;AAAA,KACnE;AAAA,GACH;AAEA,EAAA,MAAM,OAAmC,GAAAA,eAAA;AAAA,IACvC,cAAA;AAAA,IACA,CAAC,EAAE,KAAA,EAAO,KAAO,EAAA,IAAA,IAAQ,GAAS,MAAA;AAAA,MAChC,KAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA,EAAS,QAAQ,GAAG,CAAA;AAAA,MACpB,GAAG,KAAK,GAAG;AAAA,KACb;AAAA,GACF;AAEA,EAAA,MAAM,MAA2B,MAAO,CAAA,WAAA;AAAA,IACtC,QAAS,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,CAAM,KAAA;AAAA,MACvB,CAAE,CAAA,IAAA;AAAA,MACF,IAAI,GAAA,CAAI,CAAE,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,CAAM,KAAA,CAAC,CAAE,CAAA,IAAA,EAAM,CAAC,CAAC,CAAC;AAAA,KAC1C;AAAA,GACH;AAEA,EAAO,OAAA;AAAA,IACL,OAAA;AAAA,IACA,GAAA;AAAA,IACA,YAAY,MAAO,CAAA,WAAA;AAAA,MACjB,QAAA,CAAS,UAAU,gBAAiB,CAAA,GAAA,CAAI,CAAC,EAAE,UAAA,EAAY,GAAGC,KAAAA,EAAW,KAAA;AAAA,QACnE,UAAA;AAAA,QACAA;AAAA,OACD;AAAA;AACH,GACF;AACF,CAAA;;ACzHO,MAAM,WAAc,GAAA,CACzB,IACA,EAAA,IAAA,EACA,IACkB,KAAA;AAClB,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAO,MAAA,CAAA,OAAA,CAAQ,KAAK,OAAO,CAAA,CAAE,QAAQ,CAAC,CAAC,UAAY,EAAA,IAAI,CAAM,KAAA;AAC1D,IAAA;AAAA,MACC,OAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF,CAAE,OAAQ,CAAA,CAAC,CAAM,KAAA;AACd,MAAC,CAAA,GAAG,KAAK,CAAc,CAAA,CAAE,MAAM,CAAA,CAAE,OAAQ,CAAA,CAAC,GAAQ,KAAA;AACjD,QAAM,MAAA,QAAA,GAAW,KAAK,OAAQ,CAAA,UAAU,IAAI,CAAc,CAAA,CAAE,IAAI,GAAG,CAAA;AACnE,QAAA,IAAI,IAAS,KAAA,OAAA,GAAU,CAAC,QAAA,GAAW,QAAU,EAAA;AAC3C,UAAA,MAAA,CAAO,IAAK,CAAA;AAAA,YACV,IAAM,EAAA,CAAA;AAAA,YACN,MAAQ,EAAA,UAAA;AAAA,YACR,IAAM,EAAA;AAAA,WACP,CAAA;AAAA;AACH,OACD,CAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA;AAED,EAAO,MAAA,CAAA,OAAA,CAAQ,KAAK,GAAG,CAAA,CAAE,QAAQ,CAAC,CAAC,QAAU,EAAA,GAAG,CAAM,KAAA;AACnD,IAAA,CAAC,GAAG,GAAI,CAAA,IAAA,EAAM,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AAC9B,MAAA,MAAM,WAAW,IAAK,CAAA,GAAA,CAAI,QAAQ,CAAA,EAAG,IAAI,CAAC,CAAA;AAC1C,MAAA,IAAI,IAAS,KAAA,OAAA,GAAU,CAAC,QAAA,GAAW,QAAU,EAAA;AAC3C,QAAA,MAAA,CAAO,IAAK,CAAA;AAAA,UACV,IAAM,EAAA,KAAA;AAAA,UACN,KAAO,EAAA,QAAA;AAAA,UACP,IAAM,EAAA;AAAA,SACP,CAAA;AAAA;AACH,KACD,CAAA;AAAA,GACF,CAAA;AAED,EAAA,MAAA,CAAO,KAAK,IAAK,CAAA,UAAU,CAAE,CAAA,OAAA,CAAQ,CAAC,IAAS,KAAA;AAC7C,IAAA,MAAM,QAAW,GAAA,CAAC,CAAC,IAAA,CAAK,WAAW,IAAI,CAAA;AACvC,IAAA,IAAI,IAAS,KAAA,OAAA,GAAU,CAAC,QAAA,GAAW,QAAU,EAAA;AAC3C,MAAA,MAAA,CAAO,IAAK,CAAA;AAAA,QACV,IAAM,EAAA,WAAA;AAAA,QACN;AAAA,OACD,CAAA;AAAA;AACH,GACD,CAAA;AAED,EAAO,OAAA,MAAA;AACT,CAAA;;ACrCA,MAAM,YAAA,GAAe,CAAC,KAAA,EAAkB,IAA4B,KAAA;AAClE,EAAM,MAAA,IAAA,GAAOC,8CAAwB,KAAK,CAAA;AAC1C,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,IAAS,KAAA,MAAA,GAAS,IAAO,GAAAC,wCAAA;AAAA,IAC/B,MAAA,EAAQ,IAAS,KAAA,MAAA,GAASA,wCAAqB,GAAA;AAAA,GACjD;AACF,CAAA;AAEA,MAAM,kBAAA,GAAqB,CAAC,WAA4B,KAAA;AACtD,EAAA,MAAM,QAAW,GAAAC,+BAAA,CAAcC,gCAAe,CAAA,WAAW,CAAC,CAAA;AAC1D,EAAM,MAAA,QAAA,GAAWC,6BAAY,QAAQ,CAAA;AACrC,EAAA,MAAM,iBAAyC,EAAC;AAChD,EAAA,MAAM,iBAAiB,CAAC,EAAA,KACrB,4CAAuBC,wCAAmB,CAAA,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AACzD,EAAM,MAAA,YAAA,GAAe,iBAAkB,CAAA,QAAA,EAAU,QAAQ,CAAA;AAEzD,EAAO,OAAA,EAAE,QAAU,EAAA,cAAA,EAAgB,YAAa,EAAA;AAClD,CAAA;AAEA,MAAM,cAAA,GAAiB,CAAC,OAAA,KAGlB,IAAK,CAAA,GAAA,CAAI,QAAQ,IAAK,CAAA,KAAA,EAAO,OAAQ,CAAA,MAAA,CAAO,KAAK,CAAA;AACvD,MAAM,WAAA,GAAc,CAAC,OAGd,MAAA;AAAA,EACL,IAAA,EAAM,QAAQ,IAAK,CAAA,KAAA;AAAA,EACnB,MAAA,EAAQ,QAAQ,MAAO,CAAA;AACzB,CAAA,CAAA;AAEa,MAAA,eAAA,GAAkB,CAC7B,YAAA,EACA,YACW,KAAA;AACX,EAAM,MAAA,CAAC,MAAM,IAAI,CAAA,GAAI,CAAC,YAAc,EAAA,YAAY,CAAE,CAAA,GAAA,CAAI,kBAAkB,CAAA;AAExE,EAAM,MAAA,KAAA,uBAAY,GAAI,EAAA;AACtB,EAAA,MAAM,qBAAqB,CAAC;AAAA,IAC1B,IAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GAKoB,KAAA;AACpB,IAAM,MAAA,CAAA,GAAI,KAAK,YAAa,CAAA,OAAA,CAAQ,MAAM,CAAG,CAAA,IAAI,CAAE,CAAA,GAAA,CAAI,IAAI,CAAA;AAC3D,IAAM,MAAA,CAAA,GAAI,KAAK,YAAa,CAAA,OAAA,CAAQ,MAAM,CAAG,CAAA,IAAI,CAAE,CAAA,GAAA,CAAI,IAAI,CAAA;AAC3D,IAAM,MAAA,YAAA,GAAe,IAAS,KAAA,MAAA,GAAS,MAAS,GAAA,QAAA;AAEhD,IAAO,OAAA;AAAA,MACL,IAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAQ,EAAA,cAAA;AAAA,QACNC,8CAAA;AAAA,UACE,YAAA,CAAa,GAAG,YAAY,CAAA;AAAA,UAC5B,IAAK,CAAA,cAAA;AAAA,UACL,YAAA,CAAa,GAAG,YAAY,CAAA;AAAA,UAC5B,IAAK,CAAA,cAAA;AAAA,UACL;AAAA;AACF;AACF,KACF;AAAA,GACF;AAEA,EAAM,MAAA,YAAA,GAAe,CAAC,MAAA,EAAgB,IAAiC,KAAA;AACrE,IAAM,MAAA,CAAA,GAAI,KAAK,YAAa,CAAA,OAAA,CAAQ,MAAM,CAAG,CAAA,KAAA,CAAM,IAAI,IAAI,CAAA;AAC3D,IAAM,MAAA,CAAA,GAAI,KAAK,YAAa,CAAA,OAAA,CAAQ,MAAM,CAAG,CAAA,KAAA,CAAM,IAAI,IAAI,CAAA;AAE3D,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,OAAA;AAAA,MACN,MAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAQ,EAAA,cAAA;AAAA,QACNA,8CAAA;AAAA,UACEC,2CAAA,CAAsB,EAAE,IAAI,CAAA;AAAA,UAC5B,IAAK,CAAA,cAAA;AAAA,UACLA,2CAAA,CAAsB,EAAE,IAAI,CAAA;AAAA,UAC5B,IAAK,CAAA,cAAA;AAAA,UACL;AAAA;AACF;AACF,KACF;AAAA,GACF;AAEA,EAAM,MAAA,gBAAA,GAAmB,CAAC,IAAiC,KAAA;AACzD,IAAA,MAAM,cAAiB,GAAA,IAAA,CAAK,YAAa,CAAA,UAAA,CAAW,IAAI,CAAA;AACxD,IAAA,MAAM,aAAgB,GAAA,IAAA,CAAK,YAAa,CAAA,UAAA,CAAW,IAAI,CAAA;AAEvD,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,WAAA;AAAA,MACN,IAAA;AAAA,MACA,MAAQ,EAAAT,eAAA;AAAA,QAAU,cAAA;AAAA,QAAgB,CAAC,MAAM,GACvC,KAAA,cAAA;AAAA,UACEQ,8CAAA;AAAA,YACEC,4CAAsB,IAAI,CAAA;AAAA,YAC1B,IAAK,CAAA,cAAA;AAAA,YACLA,2CAAA,CAAsB,aAAc,CAAA,GAAG,CAAC,CAAA;AAAA,YACxC,IAAK,CAAA,cAAA;AAAA,YACL;AAAA;AACF;AACF;AACF,KACF;AAAA,GACF;AAEA,EAAM,MAAA,cAAA,GAAiB,CAAC,MAAA,EAAgB,IAAiC,KAAA;AACvE,IAAM,MAAA,CAAA,GAAI,KAAK,YAAa,CAAA,OAAA,CAAQ,MAAM,CAAG,CAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAC7D,IAAM,MAAA,CAAA,GAAI,KAAK,YAAa,CAAA,OAAA,CAAQ,MAAM,CAAG,CAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAE7D,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,SAAA;AAAA,MACN,MAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAQ,EAAA,WAAA;AAAA,QACND,8CAAA;AAAA,UACEE,wCAAkB,CAAC,CAAA;AAAA,UACnB,IAAK,CAAA,cAAA;AAAA,UACLA,wCAAkB,CAAC,CAAA;AAAA,UACnB,IAAK,CAAA,cAAA;AAAA,UACL;AAAA;AACF;AACF,KACF;AAAA,GACF;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,MAAA,EAAgB,IAAiC,KAAA;AACtE,IAAM,MAAA,CAAA,GAAI,KAAK,YAAa,CAAA,OAAA,CAAQ,MAAM,CAAG,CAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AAC1D,IAAM,MAAA,CAAA,GAAI,KAAK,YAAa,CAAA,OAAA,CAAQ,MAAM,CAAG,CAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AAE1D,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,MAAA;AAAA,MACN,MAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAQ,EAAA,WAAA;AAAA,QACNF,8CAAA;AAAA,UACEG,4CAAsB,CAAC,CAAA;AAAA,UACvB,IAAK,CAAA,cAAA;AAAA,UACLA,4CAAsB,CAAC,CAAA;AAAA,UACvB,IAAK,CAAA,cAAA;AAAA,UACL;AAAA;AACF;AACF,KACF;AAAA,GACF;AAEA,EAAM,MAAA,iBAAA,GAAoB,CAAC,KAAA,EAAe,IAAiC,KAAA;AACzE,IAAA,MAAM,IAAI,IAAK,CAAA,YAAA,CAAa,IAAI,KAAK,CAAA,CAAG,IAAI,IAAI,CAAA;AAChD,IAAA,MAAM,IAAI,IAAK,CAAA,YAAA,CAAa,IAAI,KAAK,CAAA,CAAG,IAAI,IAAI,CAAA;AAEhD,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,KAAA;AAAA,MACN,KAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAQ,EAAA,WAAA;AAAA,QACNH,8CAAA;AAAA,UACEG,4CAAsB,CAAC,CAAA;AAAA,UACvB,IAAK,CAAA,cAAA;AAAA,UACLA,4CAAsB,CAAC,CAAA;AAAA,UACvB,IAAK,CAAA,cAAA;AAAA,UACL;AAAA;AACF;AACF,KACF;AAAA,GACF;AAEA,EAAA,MAAM,QAAQ,WAAY,CAAA,IAAA,CAAK,YAAc,EAAA,IAAA,CAAK,cAAc,OAAO,CAAA;AACvE,EAAA,MAAM,UAAU,WAAY,CAAA,IAAA,CAAK,YAAc,EAAA,IAAA,CAAK,cAAc,OAAO,CAAA;AACzE,EAAA,MAAM,aAAa,WAAY,CAAA,IAAA,CAAK,YAAc,EAAA,IAAA,CAAK,cAAc,MAAM,CAAA;AAE3E,EAAA,MAAM,IAAO,GAAA,UAAA,CAAW,GAAI,CAAA,CAAC,CAAM,KAAA;AACjC,IAAA,QAAQ,EAAE,IAAM;AAAA,MACd,KAAK,OAAA;AACH,QAAA,OAAO,YAAa,CAAA,CAAA,CAAE,MAAQ,EAAA,CAAA,CAAE,IAAI,CAAA;AAAA,MACtC,KAAK,SAAA;AACH,QAAA,OAAO,cAAe,CAAA,CAAA,CAAE,MAAQ,EAAA,CAAA,CAAE,IAAI,CAAA;AAAA,MACxC,KAAK,MAAA;AACH,QAAA,OAAO,aAAc,CAAA,CAAA,CAAE,MAAQ,EAAA,CAAA,CAAE,IAAI,CAAA;AAAA,MACvC,KAAK,KAAA;AACH,QAAA,OAAO,iBAAkB,CAAA,CAAA,CAAE,KAAO,EAAA,CAAA,CAAE,IAAI,CAAA;AAAA,MAC1C,KAAK,WAAA;AACH,QAAM,MAAA,gBAAA,CAAiB,EAAE,IAAI,CAAA;AAAA,MAC/B;AACE,QAAA,OAAO,mBAAmB,CAAQ,CAAA;AAAA;AACtC,GACD,CAAA;AAED,EAAO,OAAA,EAAE,KAAO,EAAA,OAAA,EAAS,IAAK,EAAA;AAChC;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polkadot-api/compare-runtimes",
3
- "version": "0.0.1",
3
+ "version": "0.2.1",
4
4
  "author": "Josep M Sobrepere (https://github.com/josepot)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -35,9 +35,9 @@
35
35
  "dist"
36
36
  ],
37
37
  "dependencies": {
38
- "@polkadot-api/metadata-builders": "0.12.2",
39
38
  "@polkadot-api/substrate-bindings": "0.14.0",
40
- "@polkadot-api/metadata-compatibility": "0.2.4",
39
+ "@polkadot-api/metadata-compatibility": "0.3.0",
40
+ "@polkadot-api/metadata-builders": "0.12.2",
41
41
  "@polkadot-api/utils": "0.2.0"
42
42
  },
43
43
  "scripts": {