zod 3.25.4 → 3.25.6
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/commonjs/v3/types.d.ts +1 -1
- package/dist/commonjs/v4/classic/errors.d.ts +1 -1
- package/dist/commonjs/v4/classic/errors.js +1 -0
- package/dist/commonjs/v4/classic/parse.d.ts +1 -1
- package/dist/commonjs/v4/classic/parse.js +2 -2
- package/dist/commonjs/v4/core/errors.d.ts +1 -1
- package/dist/commonjs/v4/core/errors.js +44 -0
- package/dist/commonjs/v4/core/parse.js +2 -2
- package/dist/esm/v3/types.d.ts +1 -1
- package/dist/esm/v4/classic/errors.d.ts +1 -1
- package/dist/esm/v4/classic/errors.js +1 -0
- package/dist/esm/v4/classic/parse.d.ts +1 -1
- package/dist/esm/v4/classic/parse.js +3 -3
- package/dist/esm/v4/core/errors.d.ts +1 -1
- package/dist/esm/v4/core/errors.js +11 -0
- package/dist/esm/v4/core/parse.js +2 -2
- package/package.json +1 -1
- package/src/v3/types.ts +1 -1
- package/src/v4/classic/errors.ts +2 -1
- package/src/v4/classic/parse.ts +3 -3
- package/src/v4/classic/tests/array.test.ts +42 -46
- package/src/v4/classic/tests/async-refinements.test.ts +14 -18
- package/src/v4/classic/tests/catch.test.ts +10 -12
- package/src/v4/classic/tests/discriminated-unions.test.ts +77 -87
- package/src/v4/classic/tests/enum.test.ts +33 -39
- package/src/v4/classic/tests/error-utils.test.ts +25 -27
- package/src/v4/classic/tests/error.test.ts +115 -128
- package/src/v4/classic/tests/literal.test.ts +10 -12
- package/src/v4/classic/tests/map.test.ts +60 -68
- package/src/v4/classic/tests/nested-refine.test.ts +68 -72
- package/src/v4/classic/tests/nonoptional.test.ts +36 -44
- package/src/v4/classic/tests/number.test.ts +36 -44
- package/src/v4/classic/tests/pipe.test.ts +18 -22
- package/src/v4/classic/tests/preprocess.test.ts +91 -107
- package/src/v4/classic/tests/primitive.test.ts +9 -11
- package/src/v4/classic/tests/record.test.ts +101 -121
- package/src/v4/classic/tests/set.test.ts +30 -36
- package/src/v4/classic/tests/string.test.ts +50 -60
- package/src/v4/classic/tests/template-literal.test.ts +45 -55
- package/src/v4/classic/tests/transform.test.ts +36 -46
- package/src/v4/classic/tests/tuple.test.ts +54 -66
- package/src/v4/core/errors.ts +12 -1
- package/src/v4/core/parse.ts +2 -2
- package/src/v4/core/tests/index.test.ts +42 -1
- package/src/v4/mini/tests/error.test.ts +1 -1
|
@@ -10,16 +10,14 @@ test("nonoptional", () => {
|
|
|
10
10
|
expect(result.success).toBe(false);
|
|
11
11
|
expect(result).toMatchInlineSnapshot(`
|
|
12
12
|
{
|
|
13
|
-
"error": ZodError
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
],
|
|
22
|
-
},
|
|
13
|
+
"error": [ZodError: [
|
|
14
|
+
{
|
|
15
|
+
"expected": "string",
|
|
16
|
+
"code": "invalid_type",
|
|
17
|
+
"path": [],
|
|
18
|
+
"message": "Invalid input: expected string, received undefined"
|
|
19
|
+
}
|
|
20
|
+
]],
|
|
23
21
|
"success": false,
|
|
24
22
|
}
|
|
25
23
|
`);
|
|
@@ -34,16 +32,14 @@ test("nonoptional with default", () => {
|
|
|
34
32
|
expect(result.success).toBe(false);
|
|
35
33
|
expect(result).toMatchInlineSnapshot(`
|
|
36
34
|
{
|
|
37
|
-
"error": ZodError
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
],
|
|
46
|
-
},
|
|
35
|
+
"error": [ZodError: [
|
|
36
|
+
{
|
|
37
|
+
"code": "invalid_type",
|
|
38
|
+
"expected": "nonoptional",
|
|
39
|
+
"path": [],
|
|
40
|
+
"message": "Invalid input: expected nonoptional, received undefined"
|
|
41
|
+
}
|
|
42
|
+
]],
|
|
47
43
|
"success": false,
|
|
48
44
|
}
|
|
49
45
|
`);
|
|
@@ -61,34 +57,30 @@ test("nonoptional in object", () => {
|
|
|
61
57
|
// expect(schema.safeParse({ hi: undefined }).success).toEqual(false);
|
|
62
58
|
expect(r2.success).toEqual(false);
|
|
63
59
|
expect(r2.error).toMatchInlineSnapshot(`
|
|
64
|
-
ZodError
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
],
|
|
75
|
-
}
|
|
60
|
+
[ZodError: [
|
|
61
|
+
{
|
|
62
|
+
"code": "invalid_type",
|
|
63
|
+
"expected": "nonoptional",
|
|
64
|
+
"path": [
|
|
65
|
+
"hi"
|
|
66
|
+
],
|
|
67
|
+
"message": "Invalid input: expected nonoptional, received undefined"
|
|
68
|
+
}
|
|
69
|
+
]]
|
|
76
70
|
`);
|
|
77
71
|
|
|
78
72
|
const r3 = schema.safeParse({});
|
|
79
73
|
expect(r3.success).toEqual(false);
|
|
80
74
|
expect(r3.error).toMatchInlineSnapshot(`
|
|
81
|
-
ZodError
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
],
|
|
92
|
-
}
|
|
75
|
+
[ZodError: [
|
|
76
|
+
{
|
|
77
|
+
"code": "invalid_type",
|
|
78
|
+
"expected": "nonoptional",
|
|
79
|
+
"path": [
|
|
80
|
+
"hi"
|
|
81
|
+
],
|
|
82
|
+
"message": "Invalid input: expected nonoptional, received undefined"
|
|
83
|
+
}
|
|
84
|
+
]]
|
|
93
85
|
`);
|
|
94
86
|
});
|
|
@@ -16,33 +16,29 @@ test("Infinity validation", () => {
|
|
|
16
16
|
const schema = z.number();
|
|
17
17
|
expect(schema.safeParse(Number.POSITIVE_INFINITY)).toMatchInlineSnapshot(`
|
|
18
18
|
{
|
|
19
|
-
"error": ZodError
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
],
|
|
29
|
-
},
|
|
19
|
+
"error": [ZodError: [
|
|
20
|
+
{
|
|
21
|
+
"expected": "number",
|
|
22
|
+
"code": "invalid_type",
|
|
23
|
+
"received": "Infinity",
|
|
24
|
+
"path": [],
|
|
25
|
+
"message": "Invalid input: expected number, received number"
|
|
26
|
+
}
|
|
27
|
+
]],
|
|
30
28
|
"success": false,
|
|
31
29
|
}
|
|
32
30
|
`);
|
|
33
31
|
expect(schema.safeParse(Number.NEGATIVE_INFINITY)).toMatchInlineSnapshot(`
|
|
34
32
|
{
|
|
35
|
-
"error": ZodError
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
],
|
|
45
|
-
},
|
|
33
|
+
"error": [ZodError: [
|
|
34
|
+
{
|
|
35
|
+
"expected": "number",
|
|
36
|
+
"code": "invalid_type",
|
|
37
|
+
"received": "Infinity",
|
|
38
|
+
"path": [],
|
|
39
|
+
"message": "Invalid input: expected number, received number"
|
|
40
|
+
}
|
|
41
|
+
]],
|
|
46
42
|
"success": false,
|
|
47
43
|
}
|
|
48
44
|
`);
|
|
@@ -153,33 +149,29 @@ test(".finite() validation", () => {
|
|
|
153
149
|
expect(schema.parse(123)).toEqual(123);
|
|
154
150
|
expect(schema.safeParse(Number.POSITIVE_INFINITY)).toMatchInlineSnapshot(`
|
|
155
151
|
{
|
|
156
|
-
"error": ZodError
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
],
|
|
166
|
-
},
|
|
152
|
+
"error": [ZodError: [
|
|
153
|
+
{
|
|
154
|
+
"expected": "number",
|
|
155
|
+
"code": "invalid_type",
|
|
156
|
+
"received": "Infinity",
|
|
157
|
+
"path": [],
|
|
158
|
+
"message": "Invalid input: expected number, received number"
|
|
159
|
+
}
|
|
160
|
+
]],
|
|
167
161
|
"success": false,
|
|
168
162
|
}
|
|
169
163
|
`);
|
|
170
164
|
expect(schema.safeParse(Number.NEGATIVE_INFINITY)).toMatchInlineSnapshot(`
|
|
171
165
|
{
|
|
172
|
-
"error": ZodError
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
],
|
|
182
|
-
},
|
|
166
|
+
"error": [ZodError: [
|
|
167
|
+
{
|
|
168
|
+
"expected": "number",
|
|
169
|
+
"code": "invalid_type",
|
|
170
|
+
"received": "Infinity",
|
|
171
|
+
"path": [],
|
|
172
|
+
"message": "Invalid input: expected number, received number"
|
|
173
|
+
}
|
|
174
|
+
]],
|
|
183
175
|
"success": false,
|
|
184
176
|
}
|
|
185
177
|
`);
|
|
@@ -40,20 +40,18 @@ test("continue on non-fatal errors", () => {
|
|
|
40
40
|
|
|
41
41
|
expect(schema.safeParse("4321")).toMatchInlineSnapshot(`
|
|
42
42
|
{
|
|
43
|
-
"error": ZodError
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"path": [],
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"code": "custom",
|
|
52
|
-
"message": "B",
|
|
53
|
-
"path": [],
|
|
54
|
-
},
|
|
55
|
-
],
|
|
43
|
+
"error": [ZodError: [
|
|
44
|
+
{
|
|
45
|
+
"code": "custom",
|
|
46
|
+
"path": [],
|
|
47
|
+
"message": "A"
|
|
56
48
|
},
|
|
49
|
+
{
|
|
50
|
+
"code": "custom",
|
|
51
|
+
"path": [],
|
|
52
|
+
"message": "B"
|
|
53
|
+
}
|
|
54
|
+
]],
|
|
57
55
|
"success": false,
|
|
58
56
|
}
|
|
59
57
|
`);
|
|
@@ -70,15 +68,13 @@ test("break on fatal errors", () => {
|
|
|
70
68
|
|
|
71
69
|
expect(schema.safeParse("4321")).toMatchInlineSnapshot(`
|
|
72
70
|
{
|
|
73
|
-
"error": ZodError
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
],
|
|
81
|
-
},
|
|
71
|
+
"error": [ZodError: [
|
|
72
|
+
{
|
|
73
|
+
"code": "custom",
|
|
74
|
+
"path": [],
|
|
75
|
+
"message": "A"
|
|
76
|
+
}
|
|
77
|
+
]],
|
|
82
78
|
"success": false,
|
|
83
79
|
}
|
|
84
80
|
`);
|
|
@@ -32,15 +32,13 @@ test("ctx.addIssue accepts string", () => {
|
|
|
32
32
|
expect(result.error!.issues).toHaveLength(1);
|
|
33
33
|
expect(result).toMatchInlineSnapshot(`
|
|
34
34
|
{
|
|
35
|
-
"error": ZodError
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
],
|
|
43
|
-
},
|
|
35
|
+
"error": [ZodError: [
|
|
36
|
+
{
|
|
37
|
+
"message": "bad stuff",
|
|
38
|
+
"code": "custom",
|
|
39
|
+
"path": []
|
|
40
|
+
}
|
|
41
|
+
]],
|
|
44
42
|
"success": false,
|
|
45
43
|
}
|
|
46
44
|
`);
|
|
@@ -63,15 +61,13 @@ test("preprocess ctx.addIssue with parse", () => {
|
|
|
63
61
|
expect(result.error!.issues).toHaveLength(1);
|
|
64
62
|
expect(result).toMatchInlineSnapshot(`
|
|
65
63
|
{
|
|
66
|
-
"error": ZodError
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
],
|
|
74
|
-
},
|
|
64
|
+
"error": [ZodError: [
|
|
65
|
+
{
|
|
66
|
+
"code": "custom",
|
|
67
|
+
"message": "asdf is not one of our allowed strings",
|
|
68
|
+
"path": []
|
|
69
|
+
}
|
|
70
|
+
]],
|
|
75
71
|
"success": false,
|
|
76
72
|
}
|
|
77
73
|
`);
|
|
@@ -90,21 +86,19 @@ test("preprocess ctx.addIssue non-fatal by default", () => {
|
|
|
90
86
|
expect(result.error!.issues).toHaveLength(2);
|
|
91
87
|
expect(result).toMatchInlineSnapshot(`
|
|
92
88
|
{
|
|
93
|
-
"error": ZodError
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
"path": [],
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
"code": "invalid_type",
|
|
102
|
-
"expected": "string",
|
|
103
|
-
"message": "Invalid input: expected string, received number",
|
|
104
|
-
"path": [],
|
|
105
|
-
},
|
|
106
|
-
],
|
|
89
|
+
"error": [ZodError: [
|
|
90
|
+
{
|
|
91
|
+
"code": "custom",
|
|
92
|
+
"message": "custom error",
|
|
93
|
+
"path": []
|
|
107
94
|
},
|
|
95
|
+
{
|
|
96
|
+
"expected": "string",
|
|
97
|
+
"code": "invalid_type",
|
|
98
|
+
"path": [],
|
|
99
|
+
"message": "Invalid input: expected string, received number"
|
|
100
|
+
}
|
|
101
|
+
]],
|
|
108
102
|
"success": false,
|
|
109
103
|
}
|
|
110
104
|
`);
|
|
@@ -127,17 +121,15 @@ test("preprocess ctx.addIssue fatal true", () => {
|
|
|
127
121
|
expect(result.error!.issues).toHaveLength(1);
|
|
128
122
|
expect(result).toMatchInlineSnapshot(`
|
|
129
123
|
{
|
|
130
|
-
"error": ZodError
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
],
|
|
140
|
-
},
|
|
124
|
+
"error": [ZodError: [
|
|
125
|
+
{
|
|
126
|
+
"code": "custom",
|
|
127
|
+
"origin": "custom",
|
|
128
|
+
"message": "custom error",
|
|
129
|
+
"fatal": true,
|
|
130
|
+
"path": []
|
|
131
|
+
}
|
|
132
|
+
]],
|
|
141
133
|
"success": false,
|
|
142
134
|
}
|
|
143
135
|
`);
|
|
@@ -158,15 +150,13 @@ test("async preprocess ctx.addIssue with parseAsync", async () => {
|
|
|
158
150
|
expect(result.error!.issues).toHaveLength(1);
|
|
159
151
|
expect(result).toMatchInlineSnapshot(`
|
|
160
152
|
{
|
|
161
|
-
"error": ZodError
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
],
|
|
169
|
-
},
|
|
153
|
+
"error": [ZodError: [
|
|
154
|
+
{
|
|
155
|
+
"code": "custom",
|
|
156
|
+
"message": "asdf is not one of our allowed strings",
|
|
157
|
+
"path": []
|
|
158
|
+
}
|
|
159
|
+
]],
|
|
170
160
|
"success": false,
|
|
171
161
|
}
|
|
172
162
|
`);
|
|
@@ -188,21 +178,19 @@ test("z.NEVER in preprocess", () => {
|
|
|
188
178
|
expect(result.error!.issues).toHaveLength(2);
|
|
189
179
|
expect(result).toMatchInlineSnapshot(`
|
|
190
180
|
{
|
|
191
|
-
"error": ZodError
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
"path": [],
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
"code": "invalid_type",
|
|
200
|
-
"expected": "number",
|
|
201
|
-
"message": "Invalid input: expected number, received object",
|
|
202
|
-
"path": [],
|
|
203
|
-
},
|
|
204
|
-
],
|
|
181
|
+
"error": [ZodError: [
|
|
182
|
+
{
|
|
183
|
+
"code": "custom",
|
|
184
|
+
"message": "bad",
|
|
185
|
+
"path": []
|
|
205
186
|
},
|
|
187
|
+
{
|
|
188
|
+
"expected": "number",
|
|
189
|
+
"code": "invalid_type",
|
|
190
|
+
"path": [],
|
|
191
|
+
"message": "Invalid input: expected number, received object"
|
|
192
|
+
}
|
|
193
|
+
]],
|
|
206
194
|
"success": false,
|
|
207
195
|
}
|
|
208
196
|
`);
|
|
@@ -221,29 +209,27 @@ test("preprocess as the second property of object", () => {
|
|
|
221
209
|
expect(result.error!.issues).toHaveLength(2);
|
|
222
210
|
expect(result).toMatchInlineSnapshot(`
|
|
223
211
|
{
|
|
224
|
-
"error": ZodError
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
"path": [
|
|
232
|
-
"nonEmptyStr",
|
|
233
|
-
],
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
"code": "too_small",
|
|
237
|
-
"inclusive": false,
|
|
238
|
-
"message": "Too small: expected number to be >0",
|
|
239
|
-
"minimum": 0,
|
|
240
|
-
"origin": "number",
|
|
241
|
-
"path": [
|
|
242
|
-
"positiveNum",
|
|
243
|
-
],
|
|
244
|
-
},
|
|
212
|
+
"error": [ZodError: [
|
|
213
|
+
{
|
|
214
|
+
"origin": "string",
|
|
215
|
+
"code": "too_small",
|
|
216
|
+
"minimum": 1,
|
|
217
|
+
"path": [
|
|
218
|
+
"nonEmptyStr"
|
|
245
219
|
],
|
|
220
|
+
"message": "Too small: expected string to have >1 characters"
|
|
246
221
|
},
|
|
222
|
+
{
|
|
223
|
+
"origin": "number",
|
|
224
|
+
"code": "too_small",
|
|
225
|
+
"minimum": 0,
|
|
226
|
+
"inclusive": false,
|
|
227
|
+
"path": [
|
|
228
|
+
"positiveNum"
|
|
229
|
+
],
|
|
230
|
+
"message": "Too small: expected number to be >0"
|
|
231
|
+
}
|
|
232
|
+
]],
|
|
247
233
|
"success": false,
|
|
248
234
|
}
|
|
249
235
|
`);
|
|
@@ -260,28 +246,26 @@ test("preprocess validates with sibling errors", () => {
|
|
|
260
246
|
expect(result.error!.issues).toHaveLength(2);
|
|
261
247
|
expect(result).toMatchInlineSnapshot(`
|
|
262
248
|
{
|
|
263
|
-
"error": ZodError
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
"path": [
|
|
270
|
-
"missing",
|
|
271
|
-
],
|
|
272
|
-
},
|
|
273
|
-
{
|
|
274
|
-
"code": "invalid_format",
|
|
275
|
-
"format": "regex",
|
|
276
|
-
"message": "Invalid string: must match pattern / asdf/",
|
|
277
|
-
"origin": "string",
|
|
278
|
-
"path": [
|
|
279
|
-
"preprocess",
|
|
280
|
-
],
|
|
281
|
-
"pattern": "/ asdf/",
|
|
282
|
-
},
|
|
249
|
+
"error": [ZodError: [
|
|
250
|
+
{
|
|
251
|
+
"expected": "string",
|
|
252
|
+
"code": "invalid_type",
|
|
253
|
+
"path": [
|
|
254
|
+
"missing"
|
|
283
255
|
],
|
|
256
|
+
"message": "Invalid input: expected string, received undefined"
|
|
284
257
|
},
|
|
258
|
+
{
|
|
259
|
+
"origin": "string",
|
|
260
|
+
"code": "invalid_format",
|
|
261
|
+
"format": "regex",
|
|
262
|
+
"pattern": "/ asdf/",
|
|
263
|
+
"path": [
|
|
264
|
+
"preprocess"
|
|
265
|
+
],
|
|
266
|
+
"message": "Invalid string: must match pattern / asdf/"
|
|
267
|
+
}
|
|
268
|
+
]],
|
|
285
269
|
"success": false,
|
|
286
270
|
}
|
|
287
271
|
`);
|
|
@@ -102,17 +102,15 @@ test("date schema", async () => {
|
|
|
102
102
|
expect(() => dateSchema.parse(null)).toThrow();
|
|
103
103
|
expect(await dateSchema.safeParseAsync(new Date("invalid"))).toMatchInlineSnapshot(`
|
|
104
104
|
{
|
|
105
|
-
"error": ZodError
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
],
|
|
115
|
-
},
|
|
105
|
+
"error": [ZodError: [
|
|
106
|
+
{
|
|
107
|
+
"expected": "date",
|
|
108
|
+
"code": "invalid_type",
|
|
109
|
+
"received": "Invalid Date",
|
|
110
|
+
"path": [],
|
|
111
|
+
"message": "Invalid input: expected date, received Date"
|
|
112
|
+
}
|
|
113
|
+
]],
|
|
116
114
|
"success": false,
|
|
117
115
|
}
|
|
118
116
|
`);
|