@openzeppelin/upgrades-core 1.46.0 → 1.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/validate/validate-upgrade-safety.test.js +18 -0
- package/dist/cli/validate/validate-upgrade-safety.test.js.map +1 -1
- package/dist/storage/compare.d.ts.map +1 -1
- package/dist/storage/compare.js +3 -3
- package/dist/storage/compare.js.map +1 -1
- package/dist/storage/extract.d.ts +15 -3
- package/dist/storage/extract.d.ts.map +1 -1
- package/dist/storage/extract.js +47 -15
- package/dist/storage/extract.js.map +1 -1
- package/dist/storage/namespace.d.ts.map +1 -1
- package/dist/storage/namespace.js +8 -2
- package/dist/storage/namespace.js.map +1 -1
- package/dist/storage/report-rename-retype.test.js +30 -0
- package/dist/storage/report-rename-retype.test.js.map +1 -1
- package/dist/storage/report.js +9 -1
- package/dist/storage/report.js.map +1 -1
- package/dist/storage-namespaced-renamed-retyped.test.d.ts +2 -0
- package/dist/storage-namespaced-renamed-retyped.test.d.ts.map +1 -0
- package/dist/storage-namespaced-renamed-retyped.test.js +278 -0
- package/dist/storage-namespaced-renamed-retyped.test.js.map +1 -0
- package/dist/storage-struct-member-renamed-retyped.test.d.ts +2 -0
- package/dist/storage-struct-member-renamed-retyped.test.d.ts.map +1 -0
- package/dist/storage-struct-member-renamed-retyped.test.js +256 -0
- package/dist/storage-struct-member-renamed-retyped.test.js.map +1 -0
- package/dist/utils/annotations.d.ts +1 -0
- package/dist/utils/annotations.d.ts.map +1 -1
- package/dist/utils/annotations.js +4 -1
- package/dist/utils/annotations.js.map +1 -1
- package/dist/utils/struct-member-docs.d.ts +52 -0
- package/dist/utils/struct-member-docs.d.ts.map +1 -0
- package/dist/utils/struct-member-docs.js +264 -0
- package/dist/utils/struct-member-docs.js.map +1 -0
- package/dist/utils/struct-member-docs.test.d.ts +2 -0
- package/dist/utils/struct-member-docs.test.d.ts.map +1 -0
- package/dist/utils/struct-member-docs.test.js +320 -0
- package/dist/utils/struct-member-docs.test.js.map +1 -0
- package/dist/validate/data.d.ts +1 -1
- package/dist/validate/data.d.ts.map +1 -1
- package/dist/validate/data.js +1 -1
- package/dist/validate/run.d.ts +1 -1
- package/dist/validate/run.d.ts.map +1 -1
- package/dist/validate/run.js +22 -2
- package/dist/validate/run.js.map +1 -1
- package/package.json +3 -3
- package/src/cli/validate/validate-upgrade-safety.test.ts +35 -0
- package/src/cli/validate/validate-upgrade-safety.test.ts.md +10 -0
- package/src/cli/validate/validate-upgrade-safety.test.ts.snap +0 -0
- package/src/storage/compare.ts +3 -4
- package/src/storage/extract.ts +55 -18
- package/src/storage/namespace.ts +10 -3
- package/src/storage/report-rename-retype.test.ts +41 -0
- package/src/storage/report.ts +9 -1
- package/src/storage-namespaced-renamed-retyped.test.ts +338 -0
- package/src/storage-namespaced-renamed-retyped.test.ts.md +183 -0
- package/src/storage-namespaced-renamed-retyped.test.ts.snap +0 -0
- package/src/storage-struct-member-renamed-retyped.test.ts +299 -0
- package/src/storage-struct-member-renamed-retyped.test.ts.md +260 -0
- package/src/storage-struct-member-renamed-retyped.test.ts.snap +0 -0
- package/src/utils/annotations.ts +4 -4
- package/src/utils/struct-member-docs.test.ts +351 -0
- package/src/utils/struct-member-docs.ts +293 -0
- package/src/validate/data.ts +2 -2
- package/src/validate/run.ts +23 -1
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ava_1 = __importDefault(require("ava"));
|
|
7
|
+
const hardhat_1 = require("hardhat");
|
|
8
|
+
const task_names_1 = require("hardhat/builtin-tasks/task-names");
|
|
9
|
+
const validate_1 = require("./validate");
|
|
10
|
+
const overrides_1 = require("./validate/overrides");
|
|
11
|
+
const src_decoder_1 = require("./src-decoder");
|
|
12
|
+
const make_namespaced_1 = require("./utils/make-namespaced");
|
|
13
|
+
const storage_1 = require("./storage");
|
|
14
|
+
const layout_1 = require("./storage/layout");
|
|
15
|
+
const stabilize_layout_1 = require("./utils/stabilize-layout");
|
|
16
|
+
const source = 'contracts/test/NamespacedRenamedRetyped.sol';
|
|
17
|
+
const crossFileSource = 'contracts/test/NamespacedCrossFile.sol';
|
|
18
|
+
const test = ava_1.default;
|
|
19
|
+
test.before(async (t) => {
|
|
20
|
+
const { input, output, solcVersion } = await getBuildInfo(`${source}:NamespacedRenamedRetypedV1`);
|
|
21
|
+
const namespacedOutput = await compileNamespaced(input, output, solcVersion);
|
|
22
|
+
const decodeSrc = (0, src_decoder_1.solcInputOutputDecoder)(input, output);
|
|
23
|
+
t.context.input = input;
|
|
24
|
+
t.context.output = output;
|
|
25
|
+
t.context.namespacedOutput = namespacedOutput;
|
|
26
|
+
t.context.solcVersion = solcVersion;
|
|
27
|
+
t.context.validation = (0, validate_1.validate)(output, decodeSrc, solcVersion, input, namespacedOutput);
|
|
28
|
+
t.context.validationWithoutSlots = (0, validate_1.validate)(output, decodeSrc, solcVersion, input);
|
|
29
|
+
const crossFile = await getBuildInfo(`${crossFileSource}:NamespacedCrossFileV1`);
|
|
30
|
+
t.context.crossFile = {
|
|
31
|
+
output: crossFile.output,
|
|
32
|
+
validation: await validateWithNamespacedOutput(crossFile.input, crossFile.output, crossFile.solcVersion),
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
async function getBuildInfo(contract) {
|
|
36
|
+
const buildInfo = await hardhat_1.artifacts.getBuildInfo(contract);
|
|
37
|
+
if (buildInfo === undefined) {
|
|
38
|
+
throw new Error(`Build info not found for ${contract}`);
|
|
39
|
+
}
|
|
40
|
+
return buildInfo;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Compiles the namespaced input for the given compilation, following the same steps as the Hardhat plugin.
|
|
44
|
+
*/
|
|
45
|
+
async function compileNamespaced(input, output, solcVersion) {
|
|
46
|
+
const namespacedInput = await (0, make_namespaced_1.trySanitizeNatSpec)((0, make_namespaced_1.makeNamespacedInput)(input, output, solcVersion), solcVersion);
|
|
47
|
+
return hardhatCompile(namespacedInput, solcVersion);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validates with a namespaced compilation.
|
|
51
|
+
*/
|
|
52
|
+
async function validateWithNamespacedOutput(input, output, solcVersion) {
|
|
53
|
+
const namespacedOutput = await compileNamespaced(input, output, solcVersion);
|
|
54
|
+
return (0, validate_1.validate)(output, (0, src_decoder_1.solcInputOutputDecoder)(input, output), solcVersion, input, namespacedOutput);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Compiles the fixture again from the given source content and validates with a namespaced compilation.
|
|
58
|
+
*/
|
|
59
|
+
async function compileAndValidate(input, content, solcVersion) {
|
|
60
|
+
const newInput = { ...input, sources: { [source]: { content } } };
|
|
61
|
+
const output = await hardhatCompile(newInput, solcVersion);
|
|
62
|
+
return validateWithNamespacedOutput(newInput, output, solcVersion);
|
|
63
|
+
}
|
|
64
|
+
async function hardhatCompile(input, solcVersion) {
|
|
65
|
+
const solcBuild = await (0, hardhat_1.run)(task_names_1.TASK_COMPILE_SOLIDITY_GET_SOLC_BUILD, {
|
|
66
|
+
quiet: true,
|
|
67
|
+
solcVersion,
|
|
68
|
+
});
|
|
69
|
+
const output = solcBuild.isSolcJs
|
|
70
|
+
? await (0, hardhat_1.run)(task_names_1.TASK_COMPILE_SOLIDITY_RUN_SOLCJS, { input, solcJsPath: solcBuild.compilerPath })
|
|
71
|
+
: await (0, hardhat_1.run)(task_names_1.TASK_COMPILE_SOLIDITY_RUN_SOLC, { input, solcPath: solcBuild.compilerPath });
|
|
72
|
+
const errors = output.errors?.filter(e => e.severity === 'error');
|
|
73
|
+
if (errors !== undefined && errors.length > 0) {
|
|
74
|
+
throw new Error(errors.map(e => e.formattedMessage).join('\n'));
|
|
75
|
+
}
|
|
76
|
+
return output;
|
|
77
|
+
}
|
|
78
|
+
function getLayout(validation, contract) {
|
|
79
|
+
return validation[`${source}:${contract}`].layout;
|
|
80
|
+
}
|
|
81
|
+
function assertAnnotationsApplied(t, validation) {
|
|
82
|
+
const v1 = getLayout(validation, 'NamespacedRenamedRetypedV1');
|
|
83
|
+
const v2 = getLayout(validation, 'NamespacedRenamedRetypedV2');
|
|
84
|
+
t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2), []);
|
|
85
|
+
assertExactMap(t, getLayout(validation, 'NamespacedExactMap'));
|
|
86
|
+
}
|
|
87
|
+
function assertExactMap(t, layout) {
|
|
88
|
+
const items = layout.namespaces?.['erc7201:example.exact'];
|
|
89
|
+
if (items === undefined) {
|
|
90
|
+
throw new Error('Namespace not found');
|
|
91
|
+
}
|
|
92
|
+
t.is(items.length, 6);
|
|
93
|
+
for (const item of items) {
|
|
94
|
+
t.is(item.renamedFrom, `old_${item.label}`);
|
|
95
|
+
t.is(item.retypedFrom, undefined);
|
|
96
|
+
// Slots come from the namespaced compilation
|
|
97
|
+
t.not(item.slot, undefined);
|
|
98
|
+
}
|
|
99
|
+
// The struct used inside the namespace is looked up through the namespaced compilation
|
|
100
|
+
const members = Object.values(layout.types).find(type => type.label === 'struct NamespacedExactMap.Inner')?.members;
|
|
101
|
+
if (members === undefined || !(0, layout_1.isStructMembers)(members)) {
|
|
102
|
+
throw new Error('Struct members not found');
|
|
103
|
+
}
|
|
104
|
+
t.is(members.length, 3);
|
|
105
|
+
for (const member of members) {
|
|
106
|
+
t.is(member.renamedFrom, `old_${member.label}`);
|
|
107
|
+
t.is(member.retypedFrom, undefined);
|
|
108
|
+
t.not(member.slot, undefined);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
test('layout', t => {
|
|
112
|
+
t.snapshot((0, stabilize_layout_1.stabilizeStorageLayout)(getLayout(t.context.validation, 'NamespacedRenamedRetypedV2')));
|
|
113
|
+
});
|
|
114
|
+
test('upgrade ok', t => {
|
|
115
|
+
assertAnnotationsApplied(t, t.context.validation);
|
|
116
|
+
});
|
|
117
|
+
test('inherited namespace upgrade ok', t => {
|
|
118
|
+
const v1 = getLayout(t.context.validation, 'NamespacedRenamedRetypedInheritedV1');
|
|
119
|
+
const v2 = getLayout(t.context.validation, 'NamespacedRenamedRetypedInheritedV2');
|
|
120
|
+
t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2), []);
|
|
121
|
+
});
|
|
122
|
+
test('wrong retype', t => {
|
|
123
|
+
const v1 = getLayout(t.context.validation, 'NamespacedBadV1');
|
|
124
|
+
const v2 = getLayout(t.context.validation, 'NamespacedWrongRetypeV2');
|
|
125
|
+
t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2), {
|
|
126
|
+
length: 1,
|
|
127
|
+
0: { kind: 'typechange', original: { label: 'x' }, updated: { label: 'x', retypedFrom: 'address' } },
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
test('annotation on the wrong member', t => {
|
|
131
|
+
// The annotation makes `x` match the original `y` with a different type, and `x` and `z` are left unmatched
|
|
132
|
+
const v1 = getLayout(t.context.validation, 'NamespacedBadV1');
|
|
133
|
+
const v2 = getLayout(t.context.validation, 'NamespacedWrongMemberV2');
|
|
134
|
+
t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2), {
|
|
135
|
+
length: 3,
|
|
136
|
+
0: { kind: 'delete', original: { label: 'x' } },
|
|
137
|
+
1: { kind: 'typechange', original: { label: 'y' }, updated: { label: 'x', renamedFrom: 'y' } },
|
|
138
|
+
2: { kind: 'insert', updated: { label: 'z' } },
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
test('stale rename annotation', t => {
|
|
142
|
+
const v1 = getLayout(t.context.validation, 'NamespacedBadV1');
|
|
143
|
+
const v2 = getLayout(t.context.validation, 'NamespacedStaleRenameV2');
|
|
144
|
+
t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2), {
|
|
145
|
+
length: 1,
|
|
146
|
+
0: { kind: 'rename', original: { label: 'y' }, updated: { label: 'y', renamedFrom: 'q' } },
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
test('unannotated rename and retype', t => {
|
|
150
|
+
const v1 = getLayout(t.context.validation, 'NamespacedBadV1');
|
|
151
|
+
const v2 = getLayout(t.context.validation, 'NamespacedUnannotatedV2');
|
|
152
|
+
t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2), {
|
|
153
|
+
length: 2,
|
|
154
|
+
0: { kind: 'typechange', original: { label: 'x' }, updated: { label: 'x' } },
|
|
155
|
+
1: { kind: 'rename', original: { label: 'y' }, updated: { label: 'z' } },
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
test('namespaced output with different source ids', t => {
|
|
159
|
+
const { input, output, namespacedOutput, solcVersion } = t.context;
|
|
160
|
+
const sources = Object.fromEntries(Object.entries(namespacedOutput.sources).map(([path, s]) => [path, { ...s, id: s.id + 1 }]));
|
|
161
|
+
t.throws(() => (0, validate_1.validate)(output, (0, src_decoder_1.solcInputOutputDecoder)(input, output), solcVersion, input, { ...namespacedOutput, sources }), { message: /Source ids differ between the solc output and the namespaced solc output/ });
|
|
162
|
+
});
|
|
163
|
+
test('two annotated namespaces in one contract', t => {
|
|
164
|
+
const v1 = getLayout(t.context.validation, 'NamespacedTwoV1');
|
|
165
|
+
const v2 = getLayout(t.context.validation, 'NamespacedTwoV2');
|
|
166
|
+
t.like(v2.namespaces, {
|
|
167
|
+
'erc7201:example.first': {
|
|
168
|
+
length: 2,
|
|
169
|
+
0: { label: 'x', retypedFrom: 'bytes32' },
|
|
170
|
+
1: { label: 'y', renamedFrom: 'oldY' },
|
|
171
|
+
},
|
|
172
|
+
'erc7201:example.second': {
|
|
173
|
+
length: 2,
|
|
174
|
+
0: { label: 'f', retypedFrom: 'uint8' },
|
|
175
|
+
1: { label: 'g', renamedFrom: 'oldG' },
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2), []);
|
|
179
|
+
});
|
|
180
|
+
test('kept retype annotation', t => {
|
|
181
|
+
const v1 = getLayout(t.context.validation, 'NamespacedKeptRetypeV1');
|
|
182
|
+
const v2 = getLayout(t.context.validation, 'NamespacedKeptRetypeV2');
|
|
183
|
+
t.like(v2.namespaces, { 'erc7201:example.main': { length: 1, 0: { label: 'x', retypedFrom: 'uint8', slot: '0' } } });
|
|
184
|
+
t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2), []);
|
|
185
|
+
});
|
|
186
|
+
test('kept retype annotation without layout info', t => {
|
|
187
|
+
const v1 = getLayout(t.context.validationWithoutSlots, 'NamespacedKeptRetypeV1');
|
|
188
|
+
const v2 = getLayout(t.context.validationWithoutSlots, 'NamespacedKeptRetypeV2');
|
|
189
|
+
t.like(v2.namespaces, {
|
|
190
|
+
'erc7201:example.main': { length: 1, 0: { label: 'x', retypedFrom: 'uint8', slot: undefined } },
|
|
191
|
+
});
|
|
192
|
+
t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2), []);
|
|
193
|
+
});
|
|
194
|
+
test('retype without layout info', t => {
|
|
195
|
+
// A retype that is not known to be compatible is uncertain without slots
|
|
196
|
+
const v1 = getLayout(t.context.validationWithoutSlots, 'NamespacedBadV1');
|
|
197
|
+
const v2 = getLayout(t.context.validationWithoutSlots, 'NamespacedRetypeV2');
|
|
198
|
+
const report = (0, storage_1.getStorageUpgradeReport)(v1, v2, (0, overrides_1.withValidationDefaults)({}));
|
|
199
|
+
t.false(report.ok);
|
|
200
|
+
t.true(report.explain().includes('Layout could have changed for `x` (bytes32 -> struct TransientSlot.TBytes32)'), report.explain());
|
|
201
|
+
});
|
|
202
|
+
test('wrong retype without layout info', t => {
|
|
203
|
+
const v1 = getLayout(t.context.validationWithoutSlots, 'NamespacedBadV1');
|
|
204
|
+
const v2 = getLayout(t.context.validationWithoutSlots, 'NamespacedWrongRetypeV2');
|
|
205
|
+
t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2), {
|
|
206
|
+
length: 1,
|
|
207
|
+
0: { kind: 'typechange', original: { label: 'x' }, updated: { label: 'x', retypedFrom: 'address' } },
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
test('retype with layout change', t => {
|
|
211
|
+
// A retype annotation that names the original type does not allow the member's size to change
|
|
212
|
+
const v1 = getLayout(t.context.validation, 'NamespacedRetypeLayoutChangeV1');
|
|
213
|
+
const v2 = getLayout(t.context.validation, 'NamespacedRetypeLayoutChangeV2');
|
|
214
|
+
t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2), {
|
|
215
|
+
length: 1,
|
|
216
|
+
0: {
|
|
217
|
+
kind: 'layoutchange',
|
|
218
|
+
original: { label: 'y' },
|
|
219
|
+
updated: { label: 'y', retypedFrom: 'uint256' },
|
|
220
|
+
change: { bytes: { from: '32', to: '16' } },
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
test('struct from another source file', t => {
|
|
225
|
+
// The annotations on the members of the struct are read from the source file that defines it
|
|
226
|
+
const { output, validation } = t.context.crossFile;
|
|
227
|
+
t.not(output.sources['contracts/test/NamespacedCrossFileStruct.sol'].id, 0);
|
|
228
|
+
const v1 = validation[`${crossFileSource}:NamespacedCrossFileV1`].layout;
|
|
229
|
+
const v2 = validation[`${crossFileSource}:NamespacedCrossFileV2`].layout;
|
|
230
|
+
t.like(v2.namespaces, { 'erc7201:example.main': { length: 1, 0: { label: 'data', slot: '0' } } });
|
|
231
|
+
const members = Object.values(v2.types).find(type => type.label === 'struct CrossFileV2.Data')?.members;
|
|
232
|
+
if (members === undefined || !(0, layout_1.isStructMembers)(members)) {
|
|
233
|
+
throw new Error('Struct members not found');
|
|
234
|
+
}
|
|
235
|
+
t.like(members, {
|
|
236
|
+
length: 2,
|
|
237
|
+
0: { label: 'a', retypedFrom: 'bytes32', slot: '0' },
|
|
238
|
+
1: { label: 'c', renamedFrom: 'b', slot: '1' },
|
|
239
|
+
});
|
|
240
|
+
t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2), []);
|
|
241
|
+
});
|
|
242
|
+
/**
|
|
243
|
+
* Validates the fixture compiled again with the given line endings.
|
|
244
|
+
*/
|
|
245
|
+
async function validateWithLineEndings(t, lineEnding) {
|
|
246
|
+
const content = t.context.input.sources[source].content;
|
|
247
|
+
if (content === undefined) {
|
|
248
|
+
throw new Error('Unexpected fixture content');
|
|
249
|
+
}
|
|
250
|
+
return compileAndValidate(t.context.input, content.replace(/\r\n|\r|\n/g, lineEnding), t.context.solcVersion);
|
|
251
|
+
}
|
|
252
|
+
test('CRLF line endings', async (t) => {
|
|
253
|
+
assertAnnotationsApplied(t, await validateWithLineEndings(t, '\r\n'));
|
|
254
|
+
});
|
|
255
|
+
test('CR line endings', async (t) => {
|
|
256
|
+
assertAnnotationsApplied(t, await validateWithLineEndings(t, '\r'));
|
|
257
|
+
});
|
|
258
|
+
test('solc 0.8.20', async (t) => {
|
|
259
|
+
const content = t.context.input.sources[source].content;
|
|
260
|
+
if (content === undefined) {
|
|
261
|
+
throw new Error('Unexpected fixture content');
|
|
262
|
+
}
|
|
263
|
+
const validation = await compileAndValidate(t.context.input, content, '0.8.20');
|
|
264
|
+
assertAnnotationsApplied(t, validation);
|
|
265
|
+
});
|
|
266
|
+
test('stale rename annotation report', t => {
|
|
267
|
+
const v1 = getLayout(t.context.validation, 'NamespacedBadV1');
|
|
268
|
+
const v2 = getLayout(t.context.validation, 'NamespacedStaleRenameV2');
|
|
269
|
+
const report = (0, storage_1.getStorageUpgradeReport)(v1, v2, (0, overrides_1.withValidationDefaults)({}));
|
|
270
|
+
t.false(report.ok);
|
|
271
|
+
const items = v2.namespaces?.['erc7201:example.main'];
|
|
272
|
+
if (items === undefined) {
|
|
273
|
+
throw new Error('Namespace not found');
|
|
274
|
+
}
|
|
275
|
+
t.is(report.explain(), `${items[1].src}: \`y\` has a '@custom:oz-renamed-from q' annotation, but it was not renamed\n` +
|
|
276
|
+
' > If the annotation is left over from an earlier upgrade, remove it.');
|
|
277
|
+
});
|
|
278
|
+
//# sourceMappingURL=storage-namespaced-renamed-retyped.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-namespaced-renamed-retyped.test.js","sourceRoot":"","sources":["../src/storage-namespaced-renamed-retyped.test.ts"],"names":[],"mappings":";;;;;AAAA,8CAAsD;AACtD,qCAAyC;AACzC,iEAI0C;AAI1C,yCAAyD;AACzD,oDAA8D;AAC9D,+CAAuD;AACvD,6DAAkF;AAClF,uCAA6E;AAC7E,6CAAkE;AAClE,+DAAkE;AAElE,MAAM,MAAM,GAAG,6CAA6C,CAAC;AAC7D,MAAM,eAAe,GAAG,wCAAwC,CAAC;AAejE,MAAM,IAAI,GAAG,aAAwB,CAAC;AAEtC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;IACpB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,YAAY,CAAC,GAAG,MAAM,6BAA6B,CAAC,CAAC;IAClG,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,IAAA,oCAAsB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IACxB,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAC1B,CAAC,CAAC,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC9C,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;IACpC,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,IAAA,mBAAQ,EAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACzF,CAAC,CAAC,OAAO,CAAC,sBAAsB,GAAG,IAAA,mBAAQ,EAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IAEnF,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,GAAG,eAAe,wBAAwB,CAAC,CAAC;IACjF,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG;QACpB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,UAAU,EAAE,MAAM,4BAA4B,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,WAAW,CAAC;KACzG,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC1C,MAAM,SAAS,GAAG,MAAM,mBAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,KAAgB,EAAE,MAAkB,EAAE,WAAmB;IACxF,MAAM,eAAe,GAAG,MAAM,IAAA,oCAAkB,EAAC,IAAA,qCAAmB,EAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;IAC/G,OAAO,cAAc,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,4BAA4B,CAAC,KAAgB,EAAE,MAAkB,EAAE,WAAmB;IACnG,MAAM,gBAAgB,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7E,OAAO,IAAA,mBAAQ,EAAC,MAAM,EAAE,IAAA,oCAAsB,EAAC,KAAK,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;AACvG,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAAC,KAAgB,EAAE,OAAe,EAAE,WAAmB;IACtF,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC3D,OAAO,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,KAAgB,EAAE,WAAmB;IACjE,MAAM,SAAS,GAAc,MAAM,IAAA,aAAG,EAAC,iDAAoC,EAAE;QAC3E,KAAK,EAAE,IAAI;QACX,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,MAAM,GAAe,SAAS,CAAC,QAAQ;QAC3C,CAAC,CAAC,MAAM,IAAA,aAAG,EAAC,6CAAgC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC;QAC5F,CAAC,CAAC,MAAM,IAAA,aAAG,EAAC,2CAA8B,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;IAE3F,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAClE,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,SAAS,CAAC,UAA6B,EAAE,QAAgB;IAChE,OAAO,UAAU,CAAC,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC;AAED,SAAS,wBAAwB,CAAC,CAA4B,EAAE,UAA6B;IAC3F,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;IAC/D,MAAM,EAAE,GAAG,SAAS,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC;IAC/D,CAAC,CAAC,SAAS,CAAC,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACjD,cAAc,CAAC,CAAC,EAAE,SAAS,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,cAAc,CAAC,CAA4B,EAAE,MAAqB;IACzE,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,uBAAuB,CAAC,CAAC;IAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IACD,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAClC,6CAA6C;QAC7C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC9B,CAAC;IAED,uFAAuF;IACvF,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,iCAAiC,CAAC,EAAE,OAAO,CAAC;IACpH,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,IAAA,wBAAe,EAAC,OAAO,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;IACjB,CAAC,CAAC,QAAQ,CAAC,IAAA,yCAAsB,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,4BAA4B,CAAC,CAAC,CAAC,CAAC;AACpG,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE;IACrB,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gCAAgC,EAAE,CAAC,CAAC,EAAE;IACzC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,qCAAqC,CAAC,CAAC;IAClF,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,qCAAqC,CAAC,CAAC;IAClF,CAAC,CAAC,SAAS,CAAC,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE;IACvB,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IACtE,CAAC,CAAC,IAAI,CAAC,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE;QACtC,MAAM,EAAE,CAAC;QACT,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;KACrG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gCAAgC,EAAE,CAAC,CAAC,EAAE;IACzC,4GAA4G;IAC5G,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IACtE,CAAC,CAAC,IAAI,CAAC,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE;QACtC,MAAM,EAAE,CAAC;QACT,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC/C,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE;QAC9F,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;KAC/C,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC,EAAE;IAClC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IACtE,CAAC,CAAC,IAAI,CAAC,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE;QACtC,MAAM,EAAE,CAAC;QACT,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE;KAC3F,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+BAA+B,EAAE,CAAC,CAAC,EAAE;IACxC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IACtE,CAAC,CAAC,IAAI,CAAC,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE;QACtC,MAAM,EAAE,CAAC;QACT,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC5E,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;KACzE,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,6CAA6C,EAAE,CAAC,CAAC,EAAE;IACtD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;IACnE,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAChC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAC5F,CAAC;IACF,CAAC,CAAC,MAAM,CACN,GAAG,EAAE,CAAC,IAAA,mBAAQ,EAAC,MAAM,EAAE,IAAA,oCAAsB,EAAC,KAAK,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,GAAG,gBAAgB,EAAE,OAAO,EAAE,CAAC,EACnH,EAAE,OAAO,EAAE,0EAA0E,EAAE,CACxF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0CAA0C,EAAE,CAAC,CAAC,EAAE;IACnD,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC9D,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;QACpB,uBAAuB,EAAE;YACvB,MAAM,EAAE,CAAC;YACT,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE;YACzC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE;SACvC;QACD,wBAAwB,EAAE;YACxB,MAAM,EAAE,CAAC;YACT,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE;YACvC,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE;SACvC;KACF,CAAC,CAAC;IACH,CAAC,CAAC,SAAS,CAAC,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC,EAAE;IACjC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;IACrE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;IACrE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACrH,CAAC,CAAC,SAAS,CAAC,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4CAA4C,EAAE,CAAC,CAAC,EAAE;IACrD,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,wBAAwB,CAAC,CAAC;IACjF,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,wBAAwB,CAAC,CAAC;IACjF,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;QACpB,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;KAChG,CAAC,CAAC;IACH,CAAC,CAAC,SAAS,CAAC,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4BAA4B,EAAE,CAAC,CAAC,EAAE;IACrC,yEAAyE;IACzE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;IAC1E,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,EAAE,IAAA,kCAAsB,EAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC,CAAC,IAAI,CACJ,MAAM,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,8EAA8E,CAAC,EACzG,MAAM,CAAC,OAAO,EAAE,CACjB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kCAAkC,EAAE,CAAC,CAAC,EAAE;IAC3C,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;IAC1E,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,CAAC;IAClF,CAAC,CAAC,IAAI,CAAC,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE;QACtC,MAAM,EAAE,CAAC;QACT,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;KACrG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE;IACpC,8FAA8F;IAC9F,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,gCAAgC,CAAC,CAAC;IAC7E,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,gCAAgC,CAAC,CAAC;IAC7E,CAAC,CAAC,IAAI,CAAC,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE;QACtC,MAAM,EAAE,CAAC;QACT,CAAC,EAAE;YACD,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;YACxB,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE;YAC/C,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;SAC5C;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iCAAiC,EAAE,CAAC,CAAC,EAAE;IAC1C,6FAA6F;IAC7F,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IACnD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,eAAe,wBAAwB,CAAC,CAAC,MAAM,CAAC;IACzE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,eAAe,wBAAwB,CAAC,CAAC,MAAM,CAAC;IACzE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,sBAAsB,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAClG,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACxG,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,IAAA,wBAAe,EAAC,OAAO,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE;QACd,MAAM,EAAE,CAAC;QACT,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;QACpD,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;KAC/C,CAAC,CAAC;IACH,CAAC,CAAC,SAAS,CAAC,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH;;GAEG;AACH,KAAK,UAAU,uBAAuB,CAAC,CAA4B,EAAE,UAAkB;IACrF,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;IACxD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAChH,CAAC;AAED,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAClC,wBAAwB,CAAC,CAAC,EAAE,MAAM,uBAAuB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAChC,wBAAwB,CAAC,CAAC,EAAE,MAAM,uBAAuB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACtE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,aAAa,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC5B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;IACxD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAChF,wBAAwB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gCAAgC,EAAE,CAAC,CAAC,EAAE;IACzC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC9D,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,IAAA,iCAAuB,EAAC,EAAE,EAAE,EAAE,EAAE,IAAA,kCAAsB,EAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnB,MAAM,KAAK,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,sBAAsB,CAAC,CAAC;IACtD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IACD,CAAC,CAAC,EAAE,CACF,MAAM,CAAC,OAAO,EAAE,EAChB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,gFAAgF;QAC7F,wEAAwE,CAC3E,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-struct-member-renamed-retyped.test.d.ts","sourceRoot":"","sources":["../src/storage-struct-member-renamed-retyped.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const ava_1 = __importDefault(require("ava"));
|
|
7
|
+
const hardhat_1 = require("hardhat");
|
|
8
|
+
const utils_1 = require("solidity-ast/utils");
|
|
9
|
+
const validate_1 = require("./validate");
|
|
10
|
+
const overrides_1 = require("./validate/overrides");
|
|
11
|
+
const src_decoder_1 = require("./src-decoder");
|
|
12
|
+
const storage_1 = require("./storage");
|
|
13
|
+
const layout_1 = require("./storage/layout");
|
|
14
|
+
const stabilize_layout_1 = require("./utils/stabilize-layout");
|
|
15
|
+
const source = 'contracts/test/StructMemberRenamedRetyped.sol';
|
|
16
|
+
const test = ava_1.default;
|
|
17
|
+
test.before(async (t) => {
|
|
18
|
+
const buildInfo = await hardhat_1.artifacts.getBuildInfo(`${source}:StructMemberRenamedRetypedV1`);
|
|
19
|
+
if (buildInfo === undefined) {
|
|
20
|
+
throw new Error('Build info not found');
|
|
21
|
+
}
|
|
22
|
+
t.context.buildInfo = buildInfo;
|
|
23
|
+
// The source decoder always uses the original build info, since the tests below only modify the input in ways
|
|
24
|
+
// that keep line numbers unchanged.
|
|
25
|
+
const decodeSrc = (0, src_decoder_1.solcInputOutputDecoder)(buildInfo.input, buildInfo.output);
|
|
26
|
+
t.context.validate = (solcInput = buildInfo.input, solcOutput = buildInfo.output) => (0, validate_1.validate)(solcOutput, decodeSrc, buildInfo.solcVersion, solcInput);
|
|
27
|
+
const validation = t.context.validate();
|
|
28
|
+
t.context.layout = contract => validation[`${source}:${contract}`].layout;
|
|
29
|
+
});
|
|
30
|
+
function getStructMembers(layout, label) {
|
|
31
|
+
const members = Object.values(layout.types).find(type => type.label === label)?.members;
|
|
32
|
+
if (members === undefined || !(0, layout_1.isStructMembers)(members)) {
|
|
33
|
+
throw new Error(`Struct members not found for ${label}`);
|
|
34
|
+
}
|
|
35
|
+
return members;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Replaces the given comment inside a struct body with code of the same length, so that the AST offsets still line up
|
|
39
|
+
* but the text between two members is not whitespace or comments, as it would be with syntax that is not supported.
|
|
40
|
+
*/
|
|
41
|
+
function withUnexpectedStructSyntax(solcInput, comment) {
|
|
42
|
+
const content = solcInput.sources[source].content;
|
|
43
|
+
if (content === undefined || !content.includes(comment)) {
|
|
44
|
+
throw new Error(`Comment ${comment} not found in ${source}`);
|
|
45
|
+
}
|
|
46
|
+
const code = 'uint256 q;'.padEnd(comment.length);
|
|
47
|
+
return { ...solcInput, sources: { ...solcInput.sources, [source]: { content: content.replace(comment, code) } } };
|
|
48
|
+
}
|
|
49
|
+
test('layout', t => {
|
|
50
|
+
t.snapshot((0, stabilize_layout_1.stabilizeStorageLayout)(t.context.layout('StructMemberRenamedRetypedV2')));
|
|
51
|
+
});
|
|
52
|
+
test('upgrade ok', t => {
|
|
53
|
+
const v1 = t.context.layout('StructMemberRenamedRetypedV1');
|
|
54
|
+
const v2 = t.context.layout('StructMemberRenamedRetypedV2');
|
|
55
|
+
t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2), []);
|
|
56
|
+
});
|
|
57
|
+
test('exact map', t => {
|
|
58
|
+
const members = getStructMembers(t.context.layout('StructMemberExactMap'), 'struct StructMemberExactMap.S');
|
|
59
|
+
t.is(members.length, 5);
|
|
60
|
+
for (const member of members) {
|
|
61
|
+
t.is(member.renamedFrom, `old_${member.label}`);
|
|
62
|
+
t.is(member.retypedFrom, undefined);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
test('wrong retype', t => {
|
|
66
|
+
const v1 = t.context.layout('StructMemberBadV1');
|
|
67
|
+
const v2 = t.context.layout('StructMemberWrongRetypeV2');
|
|
68
|
+
t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2), {
|
|
69
|
+
length: 1,
|
|
70
|
+
0: {
|
|
71
|
+
kind: 'typechange',
|
|
72
|
+
change: {
|
|
73
|
+
kind: 'struct members',
|
|
74
|
+
ops: {
|
|
75
|
+
length: 1,
|
|
76
|
+
0: { kind: 'typechange', original: { label: 'x' }, updated: { label: 'x', retypedFrom: 'address' } },
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
original: { label: 's' },
|
|
80
|
+
updated: { label: 's' },
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
test('retype with layout change', t => {
|
|
85
|
+
// A retype annotation that names the original type does not allow the member's size to change
|
|
86
|
+
const v1 = t.context.layout('StructMemberRetypeLayoutChangeV1');
|
|
87
|
+
const v2 = t.context.layout('StructMemberRetypeLayoutChangeV2');
|
|
88
|
+
t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2), {
|
|
89
|
+
length: 1,
|
|
90
|
+
0: {
|
|
91
|
+
kind: 'typechange',
|
|
92
|
+
change: {
|
|
93
|
+
kind: 'struct members',
|
|
94
|
+
ops: {
|
|
95
|
+
length: 1,
|
|
96
|
+
0: {
|
|
97
|
+
kind: 'layoutchange',
|
|
98
|
+
original: { label: 'y' },
|
|
99
|
+
updated: { label: 'y', retypedFrom: 'uint256' },
|
|
100
|
+
change: { bytes: { from: '32', to: '16' } },
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
original: { label: 's' },
|
|
105
|
+
updated: { label: 's' },
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
test('annotation on the wrong member', t => {
|
|
110
|
+
// The annotation makes `x` match the original `y` with a different type, and `x` and `z` are left unmatched
|
|
111
|
+
const v1 = t.context.layout('StructMemberBadV1');
|
|
112
|
+
const v2 = t.context.layout('StructMemberWrongMemberV2');
|
|
113
|
+
t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2), {
|
|
114
|
+
length: 1,
|
|
115
|
+
0: {
|
|
116
|
+
kind: 'typechange',
|
|
117
|
+
change: {
|
|
118
|
+
kind: 'struct members',
|
|
119
|
+
ops: {
|
|
120
|
+
length: 3,
|
|
121
|
+
0: { kind: 'delete', original: { label: 'x' } },
|
|
122
|
+
1: { kind: 'typechange', original: { label: 'y' }, updated: { label: 'x', renamedFrom: 'y' } },
|
|
123
|
+
2: { kind: 'insert', updated: { label: 'z' } },
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
original: { label: 's' },
|
|
127
|
+
updated: { label: 's' },
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
test('stale rename annotation', t => {
|
|
132
|
+
const v1 = t.context.layout('StructMemberBadV1');
|
|
133
|
+
const v2 = t.context.layout('StructMemberStaleRenameV2');
|
|
134
|
+
t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2), {
|
|
135
|
+
length: 1,
|
|
136
|
+
0: {
|
|
137
|
+
kind: 'typechange',
|
|
138
|
+
change: {
|
|
139
|
+
kind: 'struct members',
|
|
140
|
+
ops: {
|
|
141
|
+
length: 1,
|
|
142
|
+
0: { kind: 'rename', original: { label: 'y' }, updated: { label: 'y', renamedFrom: 'q' } },
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
original: { label: 's' },
|
|
146
|
+
updated: { label: 's' },
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
test('unannotated rename and retype', t => {
|
|
151
|
+
const v1 = t.context.layout('StructMemberBadV1');
|
|
152
|
+
const v2 = t.context.layout('StructMemberUnannotatedV2');
|
|
153
|
+
t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2), {
|
|
154
|
+
length: 1,
|
|
155
|
+
0: {
|
|
156
|
+
kind: 'typechange',
|
|
157
|
+
change: {
|
|
158
|
+
kind: 'struct members',
|
|
159
|
+
ops: {
|
|
160
|
+
length: 2,
|
|
161
|
+
0: { kind: 'typechange', original: { label: 'x' }, updated: { label: 'x' } },
|
|
162
|
+
1: { kind: 'rename', original: { label: 'y' }, updated: { label: 'z' } },
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
original: { label: 's' },
|
|
166
|
+
updated: { label: 's' },
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
test('annotated members without layout info', t => {
|
|
171
|
+
// Without the compiler's storage layout, members have no slots. A retype that is not known to be compatible is then uncertain.
|
|
172
|
+
const solcOutput = JSON.parse(JSON.stringify(t.context.buildInfo.output));
|
|
173
|
+
for (const contracts of Object.values(solcOutput.contracts)) {
|
|
174
|
+
for (const contract of Object.values(contracts)) {
|
|
175
|
+
delete contract.storageLayout;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const validation = t.context.validate(undefined, solcOutput);
|
|
179
|
+
const v1 = validation[`${source}:StructMemberRenamedRetypedV1`].layout;
|
|
180
|
+
const v2 = validation[`${source}:StructMemberRenamedRetypedV2`].layout;
|
|
181
|
+
const report = (0, storage_1.getStorageUpgradeReport)(v1, v2, (0, overrides_1.withValidationDefaults)({}));
|
|
182
|
+
t.false(report.ok);
|
|
183
|
+
t.like(report.ops, {
|
|
184
|
+
length: 4,
|
|
185
|
+
0: { kind: 'typechange', original: { label: 's' } },
|
|
186
|
+
1: { kind: 'typechange', original: { label: 'm' } },
|
|
187
|
+
2: { kind: 'typechange', original: { label: 'arr' } },
|
|
188
|
+
3: { kind: 'typechange', original: { label: 'other' } },
|
|
189
|
+
});
|
|
190
|
+
t.true(report.explain().includes('Layout could have changed for `x` (bytes32 -> struct TransientSlot.TBytes32)'), report.explain());
|
|
191
|
+
t.snapshot(report.explain());
|
|
192
|
+
});
|
|
193
|
+
test('annotations are not read without source content', t => {
|
|
194
|
+
const { input } = t.context.buildInfo;
|
|
195
|
+
const sources = Object.fromEntries(Object.keys(input.sources).map(path => [path, {}]));
|
|
196
|
+
const validation = t.context.validate({ ...input, sources });
|
|
197
|
+
const v1 = validation[`${source}:StructMemberRenamedRetypedV1`].layout;
|
|
198
|
+
const v2 = validation[`${source}:StructMemberRenamedRetypedV2`].layout;
|
|
199
|
+
t.like((0, storage_1.getStorageUpgradeErrors)(v1, v2), {
|
|
200
|
+
length: 5,
|
|
201
|
+
0: { kind: 'typechange', original: { label: 's' } },
|
|
202
|
+
1: { kind: 'typechange', original: { label: 'm' } },
|
|
203
|
+
2: { kind: 'typechange', original: { label: 'arr' } },
|
|
204
|
+
3: { kind: 'typechange', original: { label: 'outer' } },
|
|
205
|
+
4: { kind: 'typechange', original: { label: 'other' } },
|
|
206
|
+
});
|
|
207
|
+
});
|
|
208
|
+
test('unexpected syntax in struct with annotations', t => {
|
|
209
|
+
const { input, output } = t.context.buildInfo;
|
|
210
|
+
const structDef = [...(0, utils_1.findAll)('StructDefinition', output.sources[source].ast)].find(s => s.canonicalName === 'StructMemberUnreadableAnnotated.S');
|
|
211
|
+
if (structDef === undefined) {
|
|
212
|
+
throw new Error('Struct not found');
|
|
213
|
+
}
|
|
214
|
+
const structSrc = (0, src_decoder_1.solcInputOutputDecoder)(input, output)(structDef);
|
|
215
|
+
const error = t.throws(() => t.context.validate(withUnexpectedStructSyntax(input, '// 12345678')));
|
|
216
|
+
t.true(error?.message.includes(`${structSrc}: Could not read storage annotations on members of struct \`StructMemberUnreadableAnnotated.S\``), error?.message);
|
|
217
|
+
t.true(error?.message.includes('Please report this at https://zpl.in/upgrades/report and include the struct definition from your contract.'), error?.message);
|
|
218
|
+
});
|
|
219
|
+
test('unexpected syntax in struct without annotations', t => {
|
|
220
|
+
const validation = t.context.validate(withUnexpectedStructSyntax(t.context.buildInfo.input, '// 87654321'));
|
|
221
|
+
const layout = validation[`${source}:StructMemberUnreadableUnannotated`].layout;
|
|
222
|
+
t.like(getStructMembers(layout, 'struct StructMemberUnreadableUnannotated.S'), {
|
|
223
|
+
length: 2,
|
|
224
|
+
0: { label: 'b', renamedFrom: undefined, retypedFrom: undefined },
|
|
225
|
+
1: { label: 'c', renamedFrom: undefined, retypedFrom: undefined },
|
|
226
|
+
});
|
|
227
|
+
// Other structs are unaffected
|
|
228
|
+
const v1 = validation[`${source}:StructMemberRenamedRetypedV1`].layout;
|
|
229
|
+
const v2 = validation[`${source}:StructMemberRenamedRetypedV2`].layout;
|
|
230
|
+
t.deepEqual((0, storage_1.getStorageUpgradeErrors)(v1, v2), []);
|
|
231
|
+
});
|
|
232
|
+
test('unexpected syntax in struct with other annotations', t => {
|
|
233
|
+
const validation = t.context.validate(withUnexpectedStructSyntax(t.context.buildInfo.input, '// 13572468'));
|
|
234
|
+
const layout = validation[`${source}:StructMemberUnreadableOtherAnnotation`].layout;
|
|
235
|
+
t.like(getStructMembers(layout, 'struct StructMemberUnreadableOtherAnnotation.S'), {
|
|
236
|
+
length: 2,
|
|
237
|
+
0: { label: 'b', renamedFrom: undefined, retypedFrom: undefined },
|
|
238
|
+
1: { label: 'c', renamedFrom: undefined, retypedFrom: undefined },
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
test('multiple annotations in a doc block without line prefixes', t => {
|
|
242
|
+
const layout = t.context.layout('StateVariableDocBlock');
|
|
243
|
+
t.like(layout.storage, { length: 1, 0: { label: 'x', renamedFrom: 'a', retypedFrom: 'uint8' } });
|
|
244
|
+
});
|
|
245
|
+
test('stale rename annotation report', t => {
|
|
246
|
+
const v1 = t.context.layout('StructMemberBadV1');
|
|
247
|
+
const v2 = t.context.layout('StructMemberStaleRenameV2');
|
|
248
|
+
const report = (0, storage_1.getStorageUpgradeReport)(v1, v2, (0, overrides_1.withValidationDefaults)({}));
|
|
249
|
+
t.false(report.ok);
|
|
250
|
+
t.is(report.explain(), `${v2.storage[0].src}: Upgraded \`s\` to an incompatible type\n` +
|
|
251
|
+
' - Bad upgrade from struct StructMemberBadV1.S to struct StructMemberStaleRenameV2.S\n' +
|
|
252
|
+
' - In struct StructMemberStaleRenameV2.S\n' +
|
|
253
|
+
" - `y` has a '@custom:oz-renamed-from q' annotation, but it was not renamed\n" +
|
|
254
|
+
' > If the annotation is left over from an earlier upgrade, remove it.');
|
|
255
|
+
});
|
|
256
|
+
//# sourceMappingURL=storage-struct-member-renamed-retyped.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-struct-member-renamed-retyped.test.js","sourceRoot":"","sources":["../src/storage-struct-member-renamed-retyped.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../src/utils/annotations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../src/utils/annotations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,eAAO,MAAM,gBAAgB,QAAqF,CAAC;AAEnH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,YAoB5F;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,UAM1C"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ANNOTATION_REGEX = void 0;
|
|
3
4
|
exports.hasAnnotationTag = hasAnnotationTag;
|
|
4
5
|
exports.getAnnotationArgs = getAnnotationArgs;
|
|
5
6
|
exports.getDocumentation = getDocumentation;
|
|
6
7
|
const execall_1 = require("./execall");
|
|
8
|
+
// Matches one NatSpec tag: `@title:tag args`, where the args run until the next line that starts with a tag
|
|
9
|
+
exports.ANNOTATION_REGEX = /^\s*(?:@(?<title>\w+)(?::(?<tag>[a-z][a-z-]*))? )?(?<args>(?:(?!^\s*@\w+)[^])*)/m;
|
|
7
10
|
/**
|
|
8
11
|
* Whether the given doc string has an annotation tag.
|
|
9
12
|
*/
|
|
@@ -20,7 +23,7 @@ function hasAnnotationTag(doc, tag) {
|
|
|
20
23
|
*/
|
|
21
24
|
function getAnnotationArgs(doc, tag, supportedArgs) {
|
|
22
25
|
const result = [];
|
|
23
|
-
for (const { groups } of (0, execall_1.execall)(
|
|
26
|
+
for (const { groups } of (0, execall_1.execall)(exports.ANNOTATION_REGEX, doc)) {
|
|
24
27
|
if (groups && groups.title === 'custom' && groups.tag === tag) {
|
|
25
28
|
const trimmedArgs = groups.args.trim();
|
|
26
29
|
if (trimmedArgs.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/utils/annotations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/utils/annotations.ts"],"names":[],"mappings":";;;AASA,4CAGC;AASD,8CAoBC;AAOD,4CAMC;AAtDD,uCAAoC;AAGpC,4GAA4G;AAC/F,QAAA,gBAAgB,GAAG,kFAAkF,CAAC;AAEnH;;GAEG;AACH,SAAgB,gBAAgB,CAAC,GAAW,EAAE,GAAW;IACvD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,iBAAiB,GAAG,UAAU,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,GAAW,EAAE,GAAW,EAAE,aAAiC;IAC3F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,IAAA,iBAAO,EAAC,wBAAgB,EAAE,GAAG,CAAC,EAAE,CAAC;QACxD,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,6BAA6B,GAAG,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,IAAU;IACzC,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;QAC5B,OAAO,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACxG,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|