@proto-kit/common 0.1.1-develop.651 → 0.1.1-develop.833
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/LICENSE.md +201 -201
- package/dist/config/ChildContainerFactory.d.ts +10 -0
- package/dist/config/ChildContainerFactory.d.ts.map +1 -0
- package/dist/config/ChildContainerFactory.js +23 -0
- package/dist/config/ChildContainerStartable.d.ts +5 -0
- package/dist/config/ChildContainerStartable.d.ts.map +1 -0
- package/dist/config/ChildContainerStartable.js +1 -0
- package/dist/config/ConfigurableModule.d.ts +1 -1
- package/dist/config/ConfigurableModule.d.ts.map +1 -1
- package/dist/config/ConfigurableModule.js +0 -1
- package/dist/config/ModuleContainer.d.ts +10 -2
- package/dist/config/ModuleContainer.d.ts.map +1 -1
- package/dist/config/ModuleContainer.js +6 -10
- package/dist/dependencyFactory/DependencyFactory.d.ts.map +1 -1
- package/dist/dependencyFactory/injectOptional.d.ts.map +1 -1
- package/dist/dependencyFactory/injectOptional.js +1 -4
- package/dist/events/EventEmitter.d.ts.map +1 -1
- package/dist/events/EventEmitter.js +0 -1
- package/dist/events/EventEmitterProxy.d.ts.map +1 -1
- package/dist/events/EventEmitterProxy.js +2 -0
- package/dist/log.d.ts +3 -2
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +11 -4
- package/dist/quickmaths.d.ts +7 -0
- package/dist/quickmaths.d.ts.map +1 -0
- package/dist/quickmaths.js +24 -0
- package/dist/test/equalProvable.d.ts +20 -0
- package/dist/test/equalProvable.d.ts.map +1 -0
- package/dist/test/equalProvable.js +13 -0
- package/dist/trees/MockAsyncMerkleStore.d.ts.map +1 -1
- package/dist/trees/MockAsyncMerkleStore.js +1 -1
- package/dist/trees/RollupMerkleTree.d.ts +35 -16
- package/dist/trees/RollupMerkleTree.d.ts.map +1 -1
- package/dist/trees/RollupMerkleTree.js +8 -13
- package/dist/trees/VirtualMerkleTreeStore.d.ts +13 -0
- package/dist/trees/VirtualMerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/VirtualMerkleTreeStore.js +17 -0
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +12 -7
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +31 -10
- package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts.map +1 -1
- package/dist/zkProgrammable/ProvableMethodExecutionContext.js +1 -3
- package/dist/zkProgrammable/ZkProgrammable.d.ts +11 -5
- package/dist/zkProgrammable/ZkProgrammable.d.ts.map +1 -1
- package/dist/zkProgrammable/ZkProgrammable.js +7 -2
- package/dist/zkProgrammable/provableMethod.d.ts +5 -6
- package/dist/zkProgrammable/provableMethod.d.ts.map +1 -1
- package/dist/zkProgrammable/provableMethod.js +2 -5
- package/package.json +5 -5
- package/src/config/ChildContainerCreatable.ts +1 -1
- package/src/config/ConfigurableModule.ts +1 -2
- package/src/config/ModuleContainer.ts +17 -13
- package/src/dependencyFactory/DependencyFactory.ts +5 -4
- package/src/dependencyFactory/injectOptional.ts +0 -1
- package/src/events/EventEmitter.ts +0 -2
- package/src/events/EventEmitterProxy.ts +7 -5
- package/src/log.ts +20 -6
- package/src/trees/MockAsyncMerkleStore.ts +2 -1
- package/src/trees/RollupMerkleTree.ts +11 -17
- package/src/trees/VirtualMerkleTreeStore.ts +2 -3
- package/src/types.ts +2 -4
- package/src/utils.ts +77 -19
- package/src/zkProgrammable/ProvableMethodExecutionContext.ts +2 -4
- package/src/zkProgrammable/ZkProgrammable.ts +19 -13
- package/src/zkProgrammable/provableMethod.ts +13 -15
- package/test/config/ContainerEvents.test.ts +6 -25
- package/test/config/ModuleContainer.test.ts +10 -25
- package/test/trees/MerkleTree.test.ts +3 -2
- package/test/tsconfig.json +5 -2
- package/test/zkProgrammable/ZkProgrammable.test.ts +104 -83
- package/tsconfig.json +1 -1
- package/tsconfig.test.json +0 -9
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
/* eslint-disable max-classes-per-file */
|
|
2
1
|
import "reflect-metadata";
|
|
3
|
-
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
4
2
|
import { jest } from "@jest/globals";
|
|
5
3
|
import { container } from "tsyringe";
|
|
6
|
-
import {
|
|
4
|
+
import { Field, Struct, Proof, ZkProgram } from "o1js";
|
|
7
5
|
|
|
8
6
|
import {
|
|
9
|
-
|
|
7
|
+
MOCK_PROOF,
|
|
10
8
|
provableMethod,
|
|
11
9
|
} from "../../src/zkProgrammable/provableMethod";
|
|
12
10
|
import {
|
|
13
11
|
AreProofsEnabled,
|
|
14
12
|
CompileArtifact,
|
|
15
|
-
|
|
13
|
+
MOCK_VERIFICATION_KEY,
|
|
16
14
|
PlainZkProgram,
|
|
17
15
|
ZkProgrammable,
|
|
18
16
|
} from "../../src/zkProgrammable/ZkProgrammable";
|
|
@@ -36,6 +34,8 @@ class TestPublicOutput extends Struct({
|
|
|
36
34
|
|
|
37
35
|
const failErrorMessage = "test failure";
|
|
38
36
|
|
|
37
|
+
type Balance = Field;
|
|
38
|
+
|
|
39
39
|
class TestProgrammable extends ZkProgrammable<
|
|
40
40
|
TestPublicInput,
|
|
41
41
|
TestPublicOutput
|
|
@@ -43,7 +43,7 @@ class TestProgrammable extends ZkProgrammable<
|
|
|
43
43
|
public appChain: AreProofsEnabled = appChainMock;
|
|
44
44
|
|
|
45
45
|
@provableMethod()
|
|
46
|
-
public foo(publicInput: TestPublicInput, bar:
|
|
46
|
+
public async foo(publicInput: TestPublicInput, bar: Balance) {
|
|
47
47
|
// expose the private input as public output again for testing purposes
|
|
48
48
|
return new TestPublicOutput({
|
|
49
49
|
bar,
|
|
@@ -51,7 +51,7 @@ class TestProgrammable extends ZkProgrammable<
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
@provableMethod()
|
|
54
|
-
public fail(publicInput: TestPublicInput) {
|
|
54
|
+
public async fail(publicInput: TestPublicInput) {
|
|
55
55
|
publicInput.foo.assertEquals(1, failErrorMessage);
|
|
56
56
|
|
|
57
57
|
return new TestPublicOutput({
|
|
@@ -60,7 +60,8 @@ class TestProgrammable extends ZkProgrammable<
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
public zkProgramFactory() {
|
|
63
|
-
const program =
|
|
63
|
+
const program = ZkProgram({
|
|
64
|
+
name: "testprogram",
|
|
64
65
|
publicInput: TestPublicInput,
|
|
65
66
|
publicOutput: TestPublicOutput,
|
|
66
67
|
|
|
@@ -77,7 +78,7 @@ class TestProgrammable extends ZkProgrammable<
|
|
|
77
78
|
},
|
|
78
79
|
});
|
|
79
80
|
|
|
80
|
-
const SelfProof =
|
|
81
|
+
const SelfProof = ZkProgram.Proof(program);
|
|
81
82
|
|
|
82
83
|
const methods = {
|
|
83
84
|
foo: program.foo.bind(program),
|
|
@@ -87,6 +88,7 @@ class TestProgrammable extends ZkProgrammable<
|
|
|
87
88
|
return {
|
|
88
89
|
compile: program.compile.bind(program),
|
|
89
90
|
verify: program.verify.bind(program),
|
|
91
|
+
analyzeMethods: program.analyzeMethods.bind(program),
|
|
90
92
|
Proof: SelfProof,
|
|
91
93
|
methods,
|
|
92
94
|
};
|
|
@@ -101,7 +103,7 @@ class OtherTestProgrammable extends ZkProgrammable {
|
|
|
101
103
|
}
|
|
102
104
|
|
|
103
105
|
@provableMethod()
|
|
104
|
-
public bar(
|
|
106
|
+
public async bar(
|
|
105
107
|
testProgrammableProof: InstanceType<
|
|
106
108
|
typeof this.testProgrammable.zkProgram.Proof
|
|
107
109
|
>
|
|
@@ -110,7 +112,8 @@ class OtherTestProgrammable extends ZkProgrammable {
|
|
|
110
112
|
}
|
|
111
113
|
|
|
112
114
|
public zkProgramFactory(): PlainZkProgram {
|
|
113
|
-
const program =
|
|
115
|
+
const program = ZkProgram({
|
|
116
|
+
name: "testprogram2",
|
|
114
117
|
methods: {
|
|
115
118
|
bar: {
|
|
116
119
|
privateInputs: [this.testProgrammable.zkProgram.Proof],
|
|
@@ -123,40 +126,58 @@ class OtherTestProgrammable extends ZkProgrammable {
|
|
|
123
126
|
bar: program.bar.bind(program),
|
|
124
127
|
};
|
|
125
128
|
|
|
126
|
-
const SelfProof =
|
|
129
|
+
const SelfProof = ZkProgram.Proof(program);
|
|
127
130
|
|
|
128
131
|
return {
|
|
129
132
|
compile: program.compile.bind(program),
|
|
130
133
|
verify: program.verify.bind(program),
|
|
134
|
+
analyzeMethods: program.analyzeMethods.bind(program),
|
|
131
135
|
Proof: SelfProof,
|
|
132
136
|
methods,
|
|
133
137
|
};
|
|
134
138
|
}
|
|
135
139
|
}
|
|
136
140
|
|
|
141
|
+
const testWithProofs = false;
|
|
142
|
+
|
|
137
143
|
describe("zkProgrammable", () => {
|
|
138
144
|
let testProgrammable: TestProgrammable;
|
|
139
145
|
let artifact: CompileArtifact;
|
|
140
146
|
let zkProgramFactorySpy: ReturnType<typeof jest.spyOn>;
|
|
141
147
|
|
|
142
|
-
|
|
148
|
+
const testCases: [
|
|
149
|
+
boolean,
|
|
150
|
+
{
|
|
151
|
+
verificationKey: CompileArtifact["verificationKey"];
|
|
152
|
+
shouldVerifyMockProofs: boolean;
|
|
153
|
+
},
|
|
154
|
+
][] = [
|
|
143
155
|
[
|
|
144
156
|
false,
|
|
145
157
|
{
|
|
146
|
-
verificationKey:
|
|
158
|
+
verificationKey: MOCK_VERIFICATION_KEY,
|
|
147
159
|
shouldVerifyMockProofs: true,
|
|
148
160
|
},
|
|
149
161
|
],
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
162
|
+
];
|
|
163
|
+
|
|
164
|
+
// We want to disable testing with proofs enabled for the CI and other stuff,
|
|
165
|
+
// as it is quite expensive. But we should find a better pattern than this
|
|
166
|
+
if (testWithProofs) {
|
|
167
|
+
// TODO Migrate to new o1js compile artifact format
|
|
168
|
+
// testCases.push([
|
|
169
|
+
// true,
|
|
170
|
+
// {
|
|
171
|
+
// verificationKey:
|
|
172
|
+
// eslint-disable-next-line max-len
|
|
173
|
+
// "AAA32/LNoPxEfDF5UkwfEetd5jiVLDF/Ul3N+Q2wKNcqFZm7FRScVoJylKe73IAPgAcadZ/vFAeIuDuAPFx1FaoIIoGAq5LAKNNrkU8EnWUJgSmKm2rJ3uNkJifAf116Aja8pacHExKqq5WblExBpsV/ET9JavLBZSql4zYEIvj9KfYfAz2DV6a0/jRWJAiF2xBaK2UIyga33djCkw3Lk/UC3DjVrt2EysRhypmelSlnf+XKLECQMQSk8RH9/YlNvyBZpqiNt2FlUphQazs7tArBs1eMd8Zn5BE7gszpmPaIBOtcvVRRaoXc/9FRX89st9IEWtFf8MCMV5kDlKOGk7wCKMz8HjgfMG5ux/3FCHeQiJdfk1USn9oER3MsAsOUsziPykhVZkOHTXvVphx27cZwnf2iUIIEZgJ/GvKXv9ZRAPEQsf3bP6yoKoazBlJYJZVwJ4aidwzIHiqcMJmfUYoxL512IZf6WYCGHaisgzdOw7TSGo4LDc8IjqMT1fcqqziBQw5iZbeJ9JQwPFai1PkJQnD2Yh+XfclzWkCC9uJVEFUmidAVVw3DeMlCb77ylJUd9nVCi+MfElf+x2xqKyELAPU2Hf5+05yTxvFR6B+n1y1MEeOZsMpcWt11zHMC5aMGTiOLUZ6zJb9lAr5GuDaWTBTcRkzBp4sWaQ58MLNygBNfVgmLkp2N5ItRcyQPo138oegzHf1obQa8D6Id32K2DfDUXcvgcgo2Q6GSrTc55iNzoFEEnszUKAyi4usWdLQATzgC0CgbEaN54nF7JD1417PipM6skAf4fB31aqCEATAP+QVDRQTIrYkHJ4gykPi8QCTVk497d3wkJVioAtqWDiIoGlSITUmhBoj05xN6cndvsMrzaKQz420nYy/Nw1EIqL0yq71q2w/eRqnezVxOAjuoyAzo0ss9hT9C9OUhOxq7H0CPcRiPBFFSelqjsO/g0FD/RuuRzeNS8IwBpViTNDoNfKjTjQIA2Rvdn8TniKe2OXfwFb4f/+B1LEUHbeA9D4aCojFAs/U1D+KsyQ3POBklNQvw3lJEv4n8wjbXHzAnk+d4pkHG16gSpwp1IPbEZuQv/yQeU9e5SNuNMxR6BKwZs/3LLXASCppG7W4g7fXmJ5Obzdn7V2OHejsQNdcQ3r3ImJ3gfugi5tDEq63oO8BGGtMhHFbJD/aGiYggPSQpWxcCGjoOStt5x9jDra37fkaowxt63JU/idlqGvM3NCguIz0OMHFD30sXE/Ctf9JcBptLSQXxlKD3zX27vKwcYgsNyY7dkWA9I2XE+Lqn2VNXnswX2uN5aqu7MqwSUTuf/H5AyW1TOoF3tpHQpfmx5ZYZfNNIDrtJSOeDiNgWKGgHWj2HirSLyRjHkbAhEQ6kH/BkRbsTXmtZhRSdgdQe2gKDnhtDyE8nxhqHxc8C5zznmhk9PeJsD0CUwL9FqRQ0t31h2zVQ+V/DcDWkZC1lY32O3kxRjYQy2ZQHjLrnLlB9U9eWwRjw6533dW0fwOAPRZ/LIKkEUDj7xGdkIh41GEmEFfHGUJ2cGul1I0EU41YmnQl7xDuz2KX7stk0Rj8/Nw+pjbF8klv/zEEy5MZSmNHnYnpDMVB/lP3/adIIPQ/sqGwf/JbdIJSGSsxMfEHlToUJnt4oK4vf4FEQEeAx36h3hrDTLb+w2yg9/tvctlmozFR40US7LOTTi340MhaWSCB3i7mHFbicLRXi178Mbj8qelbiSbvDcUTOgJMlD5kaRoGMs7X6fcVBhOz8F0q6Ty1qFN1wqjgJpknYbPsatVbunR36XacWlDHuAwYx9Rh3IjC+kH6kzLmqB5ADggniTRj+IxQh+ItPFVmKrCjXqlzZJNTHjBr0wvwaeIRjCwA0A99RlRl+apkAvwKKmLFzZKTt7/TmhhNR+WAeprMEP4I8mS9pWqm7BbWK2AbAv6KrVeDaf0V7rBaDMQL/oDc++F6rmBgDC1G8viAUfmqAiWq/9+g0Z189fJVmwRni+i1qIIBb38UpVA4Tt0wJzYGRsnZM5uev3IfIe1sRTvYsIAT/WeFRq43GLL5xelWjKnmEOr9yjzQj2uTelZU6PFknB3dlo5ybe2i6dpHoAU/vZvgdHKJ6ApSKnlCWEtbd4QG5Rc7vBt2Kj4/AxK1jp6/MLA/+p5dUlF+8682seKFHLAdKGxaE2d18jjnLdRZ5+YHcCE0TdnKateX+EToGKZkW9znPIweZGEgTKwXn3GUaBh+LX59g3KpRFPldlKt7KghKyMRpHE+NUpxXsvRi8Nil93U+BWB7hC1msGRoAK+fMsmH1e+ZCActSz0ZP074iKPZGLa/CZwkxCqUS7tPOqEOomk5PtUCjLaVxmu/m/Icw9sE18n1bhexuNgU6dVWRSs=",
|
|
174
|
+
//
|
|
175
|
+
// shouldVerifyMockProofs: false,
|
|
176
|
+
// },
|
|
177
|
+
// ]);
|
|
178
|
+
}
|
|
155
179
|
|
|
156
|
-
|
|
157
|
-
},
|
|
158
|
-
],
|
|
159
|
-
])(
|
|
180
|
+
describe.each(testCases)(
|
|
160
181
|
"areProofsEnabled",
|
|
161
182
|
(areProofsEnabled, { verificationKey, shouldVerifyMockProofs }) => {
|
|
162
183
|
beforeAll(async () => {
|
|
@@ -191,7 +212,7 @@ describe("zkProgrammable", () => {
|
|
|
191
212
|
expect.assertions(1);
|
|
192
213
|
|
|
193
214
|
const proof = new testProgrammable.zkProgram.Proof({
|
|
194
|
-
proof:
|
|
215
|
+
proof: MOCK_PROOF,
|
|
195
216
|
|
|
196
217
|
publicInput: new TestPublicInput({
|
|
197
218
|
foo: Field(0),
|
|
@@ -212,71 +233,71 @@ describe("zkProgrammable", () => {
|
|
|
212
233
|
// const json = proof.toJSON();
|
|
213
234
|
// expect(json).toBeDefined();
|
|
214
235
|
});
|
|
215
|
-
}
|
|
216
|
-
);
|
|
217
236
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
237
|
+
describe("provableMethod", () => {
|
|
238
|
+
const executionContext =
|
|
239
|
+
container.resolve<ProvableMethodExecutionContext>(
|
|
240
|
+
ProvableMethodExecutionContext
|
|
241
|
+
);
|
|
222
242
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
const testPublicInput = new TestPublicInput({
|
|
226
|
-
foo: Field(0),
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
describe("zkProgram interoperability", () => {
|
|
230
|
-
beforeAll(async () => {
|
|
231
|
-
otherTestProgrammable = new OtherTestProgrammable(testProgrammable);
|
|
232
|
-
await otherTestProgrammable.zkProgram.compile();
|
|
233
|
-
}, 500_000);
|
|
243
|
+
let otherTestProgrammable: OtherTestProgrammable;
|
|
234
244
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
// execute foo
|
|
239
|
-
testProgrammable.foo(testPublicInput, Field(0));
|
|
240
|
-
|
|
241
|
-
// prove foo
|
|
242
|
-
const testProof = await executionContext
|
|
243
|
-
.current()
|
|
244
|
-
.result.prove<Proof<TestPublicInput, TestPublicOutput>>();
|
|
245
|
-
const testProofVerified = await testProgrammable.zkProgram.verify(
|
|
246
|
-
testProof
|
|
247
|
-
);
|
|
248
|
-
|
|
249
|
-
// execute bar
|
|
250
|
-
otherTestProgrammable.bar(testProof);
|
|
251
|
-
|
|
252
|
-
// proof bar
|
|
253
|
-
const otherTestProof = await executionContext
|
|
254
|
-
.current()
|
|
255
|
-
.result.prove<Proof<undefined, void>>();
|
|
256
|
-
const otherTestProofVerified =
|
|
257
|
-
await otherTestProgrammable.zkProgram.verify(otherTestProof);
|
|
258
|
-
|
|
259
|
-
expect(testProof.publicOutput.bar.toString()).toBe(
|
|
260
|
-
testPublicInput.foo.toString()
|
|
261
|
-
);
|
|
245
|
+
const testPublicInput = new TestPublicInput({
|
|
246
|
+
foo: Field(0),
|
|
247
|
+
});
|
|
262
248
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
249
|
+
describe("zkProgram interoperability", () => {
|
|
250
|
+
beforeAll(async () => {
|
|
251
|
+
otherTestProgrammable = new OtherTestProgrammable(testProgrammable);
|
|
252
|
+
await otherTestProgrammable.zkProgram.compile();
|
|
253
|
+
}, 500_000);
|
|
254
|
+
|
|
255
|
+
it("should successfully pass proof of one zkProgram as input to another zkProgram", async () => {
|
|
256
|
+
expect.assertions(3);
|
|
257
|
+
|
|
258
|
+
// execute foo
|
|
259
|
+
await testProgrammable.foo(testPublicInput, Field(0));
|
|
260
|
+
|
|
261
|
+
// prove foo
|
|
262
|
+
const testProof = await executionContext
|
|
263
|
+
.current()
|
|
264
|
+
.result.prove<Proof<TestPublicInput, TestPublicOutput>>();
|
|
265
|
+
const testProofVerified =
|
|
266
|
+
await testProgrammable.zkProgram.verify(testProof);
|
|
267
|
+
|
|
268
|
+
// execute bar
|
|
269
|
+
await otherTestProgrammable.bar(testProof);
|
|
270
|
+
|
|
271
|
+
// proof bar
|
|
272
|
+
const otherTestProof = await executionContext
|
|
273
|
+
.current()
|
|
274
|
+
.result.prove<Proof<undefined, void>>();
|
|
275
|
+
const otherTestProofVerified =
|
|
276
|
+
await otherTestProgrammable.zkProgram.verify(otherTestProof);
|
|
277
|
+
|
|
278
|
+
expect(testProof.publicOutput.bar.toString()).toBe(
|
|
279
|
+
testPublicInput.foo.toString()
|
|
280
|
+
);
|
|
281
|
+
|
|
282
|
+
expect(testProofVerified).toBe(true);
|
|
283
|
+
expect(otherTestProofVerified).toBe(true);
|
|
284
|
+
}, 500_000);
|
|
285
|
+
});
|
|
267
286
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
287
|
+
describe("failed method execution", () => {
|
|
288
|
+
it("if the method fails, it should fail to execute and prove", async () => {
|
|
289
|
+
expect.assertions(2);
|
|
271
290
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
291
|
+
await expect(
|
|
292
|
+
testProgrammable.fail(testPublicInput)
|
|
293
|
+
).rejects.toThrow(failErrorMessage);
|
|
275
294
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
295
|
+
await expect(async () => {
|
|
296
|
+
await executionContext.current().result.prove();
|
|
297
|
+
}).rejects.toThrow(failErrorMessage);
|
|
298
|
+
});
|
|
299
|
+
});
|
|
279
300
|
});
|
|
280
|
-
}
|
|
281
|
-
|
|
301
|
+
}
|
|
302
|
+
);
|
|
282
303
|
});
|
package/tsconfig.json
CHANGED