1 | import { Struct } from '@polkadot/types-codec';
|
2 | import { getUniqTypes, toCallsOnly } from './util/index.js';
|
3 | import { toV10 } from './v9/toV10.js';
|
4 | import { toV11 } from './v10/toV11.js';
|
5 | import { toV12 } from './v11/toV12.js';
|
6 | import { toV13 } from './v12/toV13.js';
|
7 | import { toV14 } from './v13/toV14.js';
|
8 | import { toV15 } from './v14/toV15.js';
|
9 | import { toLatest } from './v15/toLatest.js';
|
10 | import { MagicNumber } from './MagicNumber.js';
|
11 | const KNOWN_VERSIONS = [15, 14, 13, 12, 11, 10, 9];
|
12 | const LATEST_VERSION = KNOWN_VERSIONS[0];
|
13 | const TO_CALLS_VERSION = 14;
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 | export class MetadataVersioned extends Struct {
|
20 | constructor(registry, value) {
|
21 |
|
22 | super(registry, {
|
23 | magicNumber: MagicNumber,
|
24 | metadata: 'MetadataAll'
|
25 | }, value);
|
26 | this.__internal__converted = new Map();
|
27 | this.__internal__assertVersion = (version) => {
|
28 | if (this.version > version) {
|
29 | throw new Error(`Cannot convert metadata from version ${this.version} to ${version}`);
|
30 | }
|
31 | return this.version === version;
|
32 | };
|
33 | this.__internal__getVersion = (version, fromPrev) => {
|
34 | if (version !== 'latest' && this.__internal__assertVersion(version)) {
|
35 | const asCurr = `asV${version}`;
|
36 | return this.__internal__metadata()[asCurr];
|
37 | }
|
38 | if (!this.__internal__converted.has(version)) {
|
39 | const asPrev = version === 'latest'
|
40 | ? `asV${LATEST_VERSION}`
|
41 | : `asV${(version - 1)}`;
|
42 | this.__internal__converted.set(version, fromPrev(this.registry, this[asPrev], this.version));
|
43 | }
|
44 | return this.__internal__converted.get(version);
|
45 | };
|
46 | |
47 |
|
48 |
|
49 | this.__internal__metadata = () => {
|
50 | return this.getT('metadata');
|
51 | };
|
52 |
|
53 | }
|
54 | |
55 |
|
56 |
|
57 | get asCallsOnly() {
|
58 | return new MetadataVersioned(this.registry, {
|
59 | magicNumber: this.magicNumber,
|
60 | metadata: this.registry.createTypeUnsafe('MetadataAll', [toCallsOnly(this.registry, this.asLatest), TO_CALLS_VERSION])
|
61 | });
|
62 | }
|
63 | |
64 |
|
65 |
|
66 | get asV9() {
|
67 | this.__internal__assertVersion(9);
|
68 | return this.__internal__metadata().asV9;
|
69 | }
|
70 | |
71 |
|
72 |
|
73 | get asV10() {
|
74 | return this.__internal__getVersion(10, toV10);
|
75 | }
|
76 | |
77 |
|
78 |
|
79 | get asV11() {
|
80 | return this.__internal__getVersion(11, toV11);
|
81 | }
|
82 | |
83 |
|
84 |
|
85 | get asV12() {
|
86 | return this.__internal__getVersion(12, toV12);
|
87 | }
|
88 | |
89 |
|
90 |
|
91 | get asV13() {
|
92 | return this.__internal__getVersion(13, toV13);
|
93 | }
|
94 | |
95 |
|
96 |
|
97 | get asV14() {
|
98 | return this.__internal__getVersion(14, toV14);
|
99 | }
|
100 | |
101 |
|
102 |
|
103 | get asV15() {
|
104 | return this.__internal__getVersion(15, toV15);
|
105 | }
|
106 | |
107 |
|
108 |
|
109 | get asLatest() {
|
110 | return this.__internal__getVersion('latest', toLatest);
|
111 | }
|
112 | |
113 |
|
114 |
|
115 | get magicNumber() {
|
116 | return this.getT('magicNumber');
|
117 | }
|
118 | |
119 |
|
120 |
|
121 | get version() {
|
122 | return this.__internal__metadata().index;
|
123 | }
|
124 | getUniqTypes(throwError) {
|
125 | return getUniqTypes(this.registry, this.asLatest, throwError);
|
126 | }
|
127 | |
128 |
|
129 |
|
130 | toJSON() {
|
131 |
|
132 |
|
133 |
|
134 | this.asLatest;
|
135 | return super.toJSON();
|
136 | }
|
137 | }
|