Skip to content

Commit

Permalink
Improve parsing of unions with different types
Browse files Browse the repository at this point in the history
  • Loading branch information
DZakh committed Jul 12, 2024
1 parent e440b08 commit fee93c4
Show file tree
Hide file tree
Showing 7 changed files with 321 additions and 149 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG_NEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,5 @@
- Release 7.0.2 with type check fix for recursive schema
- Test GenType compatibility with d.ts
- Clean up error tags
- Set 8.0.x for rescript-schema in ppx deps
- Update github ci to run on "v*.*.\*-patch"
30 changes: 19 additions & 11 deletions packages/tests/src/benchmark/Benchmark.bs.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -120,22 +120,25 @@ var schema = S$RescriptSchema.recursive(function (schema) {

var testData1 = {
TAG: "Z",
_0: Core__Array.make(2, {
_0: Core__Array.make(25, {
TAG: "Z",
_0: Core__Array.make(2, {
_0: Core__Array.make(25, {
TAG: "Z",
_0: Core__Array.make(2, "Y")
_0: Core__Array.make(25, "Y")
})
})
};

Core__Array.make(2, {
TAG: "A",
_0: Core__Array.make(2, {
TAG: "A",
_0: Core__Array.make(2, "B")
})
});
var testData2 = {
TAG: "A",
_0: Core__Array.make(25, {
TAG: "A",
_0: Core__Array.make(25, {
TAG: "A",
_0: Core__Array.make(25, "B")
})
})
};

function test() {
console.time("testData1 serialize");
Expand All @@ -144,7 +147,12 @@ function test() {
console.time("testData1 parse");
S$RescriptSchema.parseOrRaiseWith(json, schema);
console.timeEnd("testData1 parse");
console.log(schema.parseOrThrow.toString());
console.time("testData2 serialize");
var json$1 = S$RescriptSchema.serializeOrRaiseWith(testData2, schema);
console.timeEnd("testData2 serialize");
console.time("testData2 parse");
S$RescriptSchema.parseOrRaiseWith(json$1, schema);
console.timeEnd("testData2 parse");
}

test();
Expand Down
30 changes: 21 additions & 9 deletions packages/tests/src/benchmark/Benchmark.res
Original file line number Diff line number Diff line change
Expand Up @@ -170,9 +170,9 @@ module CrazyUnion = {
])
)

let testData1 = Z(Array.make(~length=2, Z(Array.make(~length=2, Z(Array.make(~length=2, Y))))))
let testData1 = Z(Array.make(~length=25, Z(Array.make(~length=25, Z(Array.make(~length=25, Y))))))

let _testData2 = A(Array.make(~length=2, A(Array.make(~length=2, A(Array.make(~length=2, B))))))
let testData2 = A(Array.make(~length=25, A(Array.make(~length=25, A(Array.make(~length=25, B))))))

let test = () => {
Console.time("testData1 serialize")
Expand All @@ -183,22 +183,34 @@ module CrazyUnion = {
let _ = S.parseOrRaiseWith(json, schema)
Console.timeEnd("testData1 parse")

// Console.time("testData2 serialize")
// let json = S.serializeOrRaiseWith(testData2, schema)
// Console.timeEnd("testData2 serialize")
Console.time("testData2 serialize")
let json = S.serializeOrRaiseWith(testData2, schema)
Console.timeEnd("testData2 serialize")

// Console.time("testData2 parse")
// let _ = S.parseOrRaiseWith(json, schema)
// Console.timeEnd("testData2 parse")
Console.time("testData2 parse")
let _ = S.parseOrRaiseWith(json, schema)
Console.timeEnd("testData2 parse")

Js.log((schema->Obj.magic)["parseOrThrow"]["toString"]())
// Js.log((schema->Obj.magic)["parseOrThrow"]["toString"]())
}
}

// Full
// testData1 serialize: 5.414s
// testData1 parse: 5.519s
// testData2 serialize: 70.864ms
// testData2 parse: 70.967ms

// Wip
// testData1 serialize: 5.398s
// testData1 parse: 6.171ms
// testData2 serialize: 69.621ms
// testData2 parse: 0.878ms

// Partial
// testData1 serialize: 1.802ms
// testData1 parse: 1.411ms
// 734 Error.make
CrazyUnion.test()

let data = makeTestObject()
Expand Down
2 changes: 1 addition & 1 deletion packages/tests/src/core/Example_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ test("Compiled parse code snapshot", t => {
t->U.assertCompiledCode(
~schema=filmSchema,
~op=#Parse,
`i=>{if(!i||i.constructor!==Object){e[11](i)}let v0=i["Id"],v1=i["Title"],v2=i["Tags"],v6=i["Rating"],v7,v8=i["Age"];if(typeof v0!=="number"||Number.isNaN(v0)){e[0](v0)}if(typeof v1!=="string"){e[1](v1)}if(v2!==void 0&&(!Array.isArray(v2))){e[2](v2)}if(v2!==void 0){for(let v3=0;v3<v2.length;++v3){let v5=v2[v3];try{if(typeof v5!=="string"){e[3](v5)}}catch(v4){if(v4&&v4.s===s){v4.path="[\\"Tags\\"]"+\'["\'+v3+\'"]\'+v4.path}throw v4}}}try{v6==="G"||e[5](v6);v7=v6}catch(e0){try{v6==="PG"||e[6](v6);v7=v6}catch(e1){try{v6==="PG13"||e[7](v6);v7=v6}catch(e2){try{v6==="R"||e[8](v6);v7=v6}catch(e3){e[9]([e0,e1,e2,e3,])}}}}if(v8!==void 0&&(typeof v8!=="number"||v8>2147483647||v8<-2147483648||v8%1!==0)){e[10](v8)}return {"id":v0,"title":v1,"tags":v2===void 0?e[4]:v2,"rating":v7,"deprecatedAgeRestriction":v8,}}`,
`i=>{if(!i||i.constructor!==Object){e[11](i)}let v0=i["Id"],v1=i["Title"],v2=i["Tags"],v6=i["Rating"],v7,v8=i["Age"];if(typeof v0!=="number"||Number.isNaN(v0)){e[0](v0)}if(typeof v1!=="string"){e[1](v1)}if(v2!==void 0&&(!Array.isArray(v2))){e[2](v2)}if(v2!==void 0){for(let v3=0;v3<v2.length;++v3){let v5=v2[v3];try{if(typeof v5!=="string"){e[3](v5)}}catch(v4){if(v4&&v4.s===s){v4.path="[\\"Tags\\"]"+\'["\'+v3+\'"]\'+v4.path}throw v4}}}if(!(v6==="G")){if(!(v6==="PG")){if(!(v6==="PG13")){if(!(v6==="R")){e[5](v6)}else{v7=v6}}else{v7=v6}}else{v7=v6}}else{v7=v6}if(v8!==void 0&&(typeof v8!=="number"||v8>2147483647||v8<-2147483648||v8%1!==0)){e[10](v8)}return {"id":v0,"title":v1,"tags":v2===void 0?e[4]:v2,"rating":v7,"deprecatedAgeRestriction":v8,}}`,
)
})

Expand Down
120 changes: 74 additions & 46 deletions packages/tests/src/core/S_union_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,26 @@ test("Successfully parses polymorphic variants", t => {
t->Assert.deepEqual(%raw(`"apple"`)->S.parseAnyWith(schema), Ok(#apple), ())
})

test("Parses when both schemas misses parser", t => {
test("Parses when both schemas misses parser and have the same type", t => {
let schema = S.union([
S.literal(#apple)->S.transform(_ => {serializer: _ => #apple}),
S.string->S.transform(_ => {serializer: _ => "apple"}),
S.string->S.transform(_ => {serializer: _ => "apple"}),
])

t->U.assertErrorResult(
%raw(`null`)->S.parseAnyWith(schema),
{
code: InvalidType({
expected: schema->S.toUnknown,
received: %raw(`null`),
}),
operation: Parse,
path: S.Path.empty,
},
)

t->U.assertErrorResult(
%raw(`"foo"`)->S.parseAnyWith(schema),
{
code: InvalidUnion([
U.error({
Expand All @@ -51,7 +63,45 @@ test("Parses when both schemas misses parser", t => {
},
)

t->U.assertCompiledCode(~schema, ~op=#Parse, `i=>{e[4]([e[1],e[3],]);return i}`)
t->U.assertCompiledCode(
~schema,
~op=#Parse,
`i=>{if(typeof i!=="string"){e[0](i)}else{e[5]([e[2],e[4],]);}return undefined}`,
)
})

test("Parses when both schemas misses parser and have different types", t => {
let schema = S.union([
S.literal(#apple)->S.transform(_ => {serializer: _ => #apple}),
S.string->S.transform(_ => {serializer: _ => "apple"}),
])

t->U.assertErrorResult(
%raw(`null`)->S.parseAnyWith(schema),
{
code: InvalidType({
expected: schema->S.toUnknown,
received: %raw(`null`),
}),
operation: Parse,
path: S.Path.empty,
},
)

t->U.assertErrorResult(
%raw(`"abc"`)->S.parseAnyWith(schema),
{
code: InvalidOperation({description: "The S.transform parser is missing"}),
operation: Parse,
path: S.Path.empty,
},
)

t->U.assertCompiledCode(
~schema,
~op=#Parse,
`i=>{if(!(i==="apple")){if(typeof i!=="string"){e[0](i)}else{throw e[1]}}else{throw e[3]}return undefined}`,
)
})

test("Serializes when both schemas misses serializer", t => {
Expand Down Expand Up @@ -91,7 +141,7 @@ test("Parses when second struct misses parser", t => {
t->U.assertCompiledCode(
~schema,
~op=#Parse,
`i=>{let v0;try{i==="apple"||e[0](i);v0=i}catch(e0){e[3]([e0,e[2],])}return v0}`,
`i=>{let v0;if(!(i==="apple")){if(typeof i!=="string"){e[0](i)}else{throw e[1]}}else{v0=i}return v0}`,
)
})

Expand Down Expand Up @@ -258,32 +308,10 @@ module Advanced = {
t->U.assertErrorResult(
%raw(`"Hello world!"`)->S.parseAnyWith(shapeSchema),
{
code: InvalidUnion([
U.error({
code: InvalidType({
expected: circleSchema->S.toUnknown,
received: %raw(`"Hello world!"`),
}),
operation: Parse,
path: S.Path.empty,
}),
U.error({
code: InvalidType({
expected: squareSchema->S.toUnknown,
received: %raw(`"Hello world!"`),
}),
operation: Parse,
path: S.Path.empty,
}),
U.error({
code: InvalidType({
expected: triangleSchema->S.toUnknown,
received: %raw(`"Hello world!"`),
}),
operation: Parse,
path: S.Path.empty,
}),
]),
code: InvalidType({
expected: shapeSchema->S.toUnknown,
received: %raw(`"Hello world!"`),
}),
operation: Parse,
path: S.Path.empty,
},
Expand Down Expand Up @@ -377,7 +405,7 @@ module Advanced = {
t->U.assertCompiledCode(
~schema=shapeSchema,
~op=#Parse,
`i=>{let v2;try{if(!i||i.constructor!==Object){e[0](i)}let v0=i["kind"],v1=i["radius"];v0==="circle"||e[1](v0);if(typeof v1!=="number"||Number.isNaN(v1)){e[2](v1)}v2={"TAG":e[3],"radius":v1,}}catch(e0){try{if(!i||i.constructor!==Object){e[4](i)}let v3=i["kind"],v4=i["x"];v3==="square"||e[5](v3);if(typeof v4!=="number"||Number.isNaN(v4)){e[6](v4)}v2={"TAG":e[7],"x":v4,}}catch(e1){try{if(!i||i.constructor!==Object){e[8](i)}let v5=i["kind"],v6=i["x"],v7=i["y"];v5==="triangle"||e[9](v5);if(typeof v6!=="number"||Number.isNaN(v6)){e[10](v6)}if(typeof v7!=="number"||Number.isNaN(v7)){e[11](v7)}v2={"TAG":e[12],"x":v6,"y":v7,}}catch(e2){e[13]([e0,e1,e2,])}}}return v2}`,
`i=>{let v2;if(!i||i.constructor!==Object){e[0](i)}else{try{if(!i||i.constructor!==Object){e[1](i)}let v0=i["kind"],v1=i["radius"];v0==="circle"||e[2](v0);if(typeof v1!=="number"||Number.isNaN(v1)){e[3](v1)}v2={"TAG":e[4],"radius":v1,}}catch(e0){try{if(!i||i.constructor!==Object){e[5](i)}let v3=i["kind"],v4=i["x"];v3==="square"||e[6](v3);if(typeof v4!=="number"||Number.isNaN(v4)){e[7](v4)}v2={"TAG":e[8],"x":v4,}}catch(e1){try{if(!i||i.constructor!==Object){e[9](i)}let v5=i["kind"],v6=i["x"],v7=i["y"];v5==="triangle"||e[10](v5);if(typeof v6!=="number"||Number.isNaN(v6)){e[11](v6)}if(typeof v7!=="number"||Number.isNaN(v7)){e[12](v7)}v2={"TAG":e[13],"x":v6,"y":v7,}}catch(e2){e[14]([e0,e1,e2,])}}}}return v2}`,
)
})

Expand Down Expand Up @@ -413,7 +441,7 @@ test("Compiled parse code snapshot", t => {
t->U.assertCompiledCode(
~schema,
~op=#Parse,
`i=>{let v0;try{i===0||e[0](i);v0=i}catch(e0){try{i===1||e[1](i);v0=i}catch(e1){e[2]([e0,e1,])}}return v0}`,
`i=>{let v0;if(!(i===0)){if(!(i===1)){e[0](i)}else{v0=i}}else{v0=i}return v0}`,
)
})

Expand Down Expand Up @@ -568,18 +596,18 @@ module CrazyUnion = {
])
)

test("Compiled code snapshot of crazy union", t => {
S.setGlobalConfig({})
t->U.assertCompiledCode(
~schema,
~op=#Parse,
`i=>{let r0=i=>{let v6;try{if(!i||i.constructor!==Object){e[0](i)}let v0=i["type"],v1=i["nested"],v5=[];v0==="A"||e[1](v0);if(!Array.isArray(v1)){e[2](v1)}for(let v2=0;v2<v1.length;++v2){let v4;try{v4=r0(v1[v2])}catch(v3){if(v3&&v3.s===s){v3.path="[\\"nested\\"]"+\'["\'+v2+\'"]\'+v3.path}throw v3}v5.push(v4)}v6={"TAG":e[3],"_0":v5,}}catch(e0){try{i==="B"||e[4](i);v6=i}catch(e1){try{i==="C"||e[5](i);v6=i}catch(e2){try{i==="D"||e[6](i);v6=i}catch(e3){try{i==="E"||e[7](i);v6=i}catch(e4){try{i==="F"||e[8](i);v6=i}catch(e5){try{i==="G"||e[9](i);v6=i}catch(e6){try{i==="H"||e[10](i);v6=i}catch(e7){try{i==="I"||e[11](i);v6=i}catch(e8){try{i==="J"||e[12](i);v6=i}catch(e9){try{i==="K"||e[13](i);v6=i}catch(e10){try{i==="L"||e[14](i);v6=i}catch(e11){try{i==="M"||e[15](i);v6=i}catch(e12){try{i==="N"||e[16](i);v6=i}catch(e13){try{i==="O"||e[17](i);v6=i}catch(e14){try{i==="P"||e[18](i);v6=i}catch(e15){try{i==="Q"||e[19](i);v6=i}catch(e16){try{i==="R"||e[20](i);v6=i}catch(e17){try{i==="S"||e[21](i);v6=i}catch(e18){try{i==="T"||e[22](i);v6=i}catch(e19){try{i==="U"||e[23](i);v6=i}catch(e20){try{i==="V"||e[24](i);v6=i}catch(e21){try{i==="W"||e[25](i);v6=i}catch(e22){try{i==="X"||e[26](i);v6=i}catch(e23){try{i==="Y"||e[27](i);v6=i}catch(e24){try{if(!i||i.constructor!==Object){e[28](i)}let v7=i["type"],v8=i["nested"],v12=[];v7==="Z"||e[29](v7);if(!Array.isArray(v8)){e[30](v8)}for(let v9=0;v9<v8.length;++v9){let v11;try{v11=r0(v8[v9])}catch(v10){if(v10&&v10.s===s){v10.path="[\\"nested\\"]"+\'["\'+v9+\'"]\'+v10.path}throw v10}v12.push(v11)}v6={"TAG":e[31],"_0":v12,}}catch(e25){e[32]([e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,e19,e20,e21,e22,e23,e24,e25,])}}}}}}}}}}}}}}}}}}}}}}}}}}return v6};return r0(i)}`,
)
S.setGlobalConfig({})
t->U.assertCompiledCode(
~schema,
~op=#Serialize,
`i=>{let r0=i=>{let v5,v6,v12;try{let v0=i["_0"],v4=[];if(i["TAG"]!==e[0]){e[1](i["TAG"])}for(let v1=0;v1<v0.length;++v1){let v3;try{v3=r0(v0[v1])}catch(v2){if(v2&&v2.s===s){v2.path="[\\"_0\\"]"+\'["\'+v1+\'"]\'+v2.path}throw v2}v4.push(v3)}v5={"type":e[2],"nested":v4,};if(!v5||v5.constructor!==Object){e[3](v5)}v6=v5}catch(e0){try{i==="B"||e[4](i);v6=i}catch(e1){try{i==="C"||e[5](i);v6=i}catch(e2){try{i==="D"||e[6](i);v6=i}catch(e3){try{i==="E"||e[7](i);v6=i}catch(e4){try{i==="F"||e[8](i);v6=i}catch(e5){try{i==="G"||e[9](i);v6=i}catch(e6){try{i==="H"||e[10](i);v6=i}catch(e7){try{i==="I"||e[11](i);v6=i}catch(e8){try{i==="J"||e[12](i);v6=i}catch(e9){try{i==="K"||e[13](i);v6=i}catch(e10){try{i==="L"||e[14](i);v6=i}catch(e11){try{i==="M"||e[15](i);v6=i}catch(e12){try{i==="N"||e[16](i);v6=i}catch(e13){try{i==="O"||e[17](i);v6=i}catch(e14){try{i==="P"||e[18](i);v6=i}catch(e15){try{i==="Q"||e[19](i);v6=i}catch(e16){try{i==="R"||e[20](i);v6=i}catch(e17){try{i==="S"||e[21](i);v6=i}catch(e18){try{i==="T"||e[22](i);v6=i}catch(e19){try{i==="U"||e[23](i);v6=i}catch(e20){try{i==="V"||e[24](i);v6=i}catch(e21){try{i==="W"||e[25](i);v6=i}catch(e22){try{i==="X"||e[26](i);v6=i}catch(e23){try{i==="Y"||e[27](i);v6=i}catch(e24){try{let v7=i["_0"],v11=[];if(i["TAG"]!==e[28]){e[29](i["TAG"])}for(let v8=0;v8<v7.length;++v8){let v10;try{v10=r0(v7[v8])}catch(v9){if(v9&&v9.s===s){v9.path="[\\"_0\\"]"+\'["\'+v8+\'"]\'+v9.path}throw v9}v11.push(v10)}v12={"type":e[30],"nested":v11,};if(!v12||v12.constructor!==Object){e[31](v12)}v6=v12}catch(e25){e[32]([e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,e19,e20,e21,e22,e23,e24,e25,])}}}}}}}}}}}}}}}}}}}}}}}}}}return v6};return r0(i)}`,
)
})
// test("Compiled code snapshot of crazy union", t => {
// S.setGlobalConfig({})
// t->U.assertCompiledCode(
// ~schema,
// ~op=#Parse,
// `i=>{let r0=i=>{let v6;try{if(!i||i.constructor!==Object){e[0](i)}let v0=i["type"],v1=i["nested"],v5=[];v0==="A"||e[1](v0);if(!Array.isArray(v1)){e[2](v1)}for(let v2=0;v2<v1.length;++v2){let v4;try{v4=r0(v1[v2])}catch(v3){if(v3&&v3.s===s){v3.path="[\\"nested\\"]"+\'["\'+v2+\'"]\'+v3.path}throw v3}v5.push(v4)}v6={"TAG":e[3],"_0":v5,}}catch(e0){try{i==="B"||e[4](i);v6=i}catch(e1){try{i==="C"||e[5](i);v6=i}catch(e2){try{i==="D"||e[6](i);v6=i}catch(e3){try{i==="E"||e[7](i);v6=i}catch(e4){try{i==="F"||e[8](i);v6=i}catch(e5){try{i==="G"||e[9](i);v6=i}catch(e6){try{i==="H"||e[10](i);v6=i}catch(e7){try{i==="I"||e[11](i);v6=i}catch(e8){try{i==="J"||e[12](i);v6=i}catch(e9){try{i==="K"||e[13](i);v6=i}catch(e10){try{i==="L"||e[14](i);v6=i}catch(e11){try{i==="M"||e[15](i);v6=i}catch(e12){try{i==="N"||e[16](i);v6=i}catch(e13){try{i==="O"||e[17](i);v6=i}catch(e14){try{i==="P"||e[18](i);v6=i}catch(e15){try{i==="Q"||e[19](i);v6=i}catch(e16){try{i==="R"||e[20](i);v6=i}catch(e17){try{i==="S"||e[21](i);v6=i}catch(e18){try{i==="T"||e[22](i);v6=i}catch(e19){try{i==="U"||e[23](i);v6=i}catch(e20){try{i==="V"||e[24](i);v6=i}catch(e21){try{i==="W"||e[25](i);v6=i}catch(e22){try{i==="X"||e[26](i);v6=i}catch(e23){try{i==="Y"||e[27](i);v6=i}catch(e24){try{if(!i||i.constructor!==Object){e[28](i)}let v7=i["type"],v8=i["nested"],v12=[];v7==="Z"||e[29](v7);if(!Array.isArray(v8)){e[30](v8)}for(let v9=0;v9<v8.length;++v9){let v11;try{v11=r0(v8[v9])}catch(v10){if(v10&&v10.s===s){v10.path="[\\"nested\\"]"+\'["\'+v9+\'"]\'+v10.path}throw v10}v12.push(v11)}v6={"TAG":e[31],"_0":v12,}}catch(e25){e[32]([e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,e19,e20,e21,e22,e23,e24,e25,])}}}}}}}}}}}}}}}}}}}}}}}}}}return v6};return r0(i)}`,
// )
// S.setGlobalConfig({})
// t->U.assertCompiledCode(
// ~schema,
// ~op=#Serialize,
// `i=>{let r0=i=>{let v5,v6,v12;try{let v0=i["_0"],v4=[];if(i["TAG"]!==e[0]){e[1](i["TAG"])}for(let v1=0;v1<v0.length;++v1){let v3;try{v3=r0(v0[v1])}catch(v2){if(v2&&v2.s===s){v2.path="[\\"_0\\"]"+\'["\'+v1+\'"]\'+v2.path}throw v2}v4.push(v3)}v5={"type":e[2],"nested":v4,};if(!v5||v5.constructor!==Object){e[3](v5)}v6=v5}catch(e0){try{i==="B"||e[4](i);v6=i}catch(e1){try{i==="C"||e[5](i);v6=i}catch(e2){try{i==="D"||e[6](i);v6=i}catch(e3){try{i==="E"||e[7](i);v6=i}catch(e4){try{i==="F"||e[8](i);v6=i}catch(e5){try{i==="G"||e[9](i);v6=i}catch(e6){try{i==="H"||e[10](i);v6=i}catch(e7){try{i==="I"||e[11](i);v6=i}catch(e8){try{i==="J"||e[12](i);v6=i}catch(e9){try{i==="K"||e[13](i);v6=i}catch(e10){try{i==="L"||e[14](i);v6=i}catch(e11){try{i==="M"||e[15](i);v6=i}catch(e12){try{i==="N"||e[16](i);v6=i}catch(e13){try{i==="O"||e[17](i);v6=i}catch(e14){try{i==="P"||e[18](i);v6=i}catch(e15){try{i==="Q"||e[19](i);v6=i}catch(e16){try{i==="R"||e[20](i);v6=i}catch(e17){try{i==="S"||e[21](i);v6=i}catch(e18){try{i==="T"||e[22](i);v6=i}catch(e19){try{i==="U"||e[23](i);v6=i}catch(e20){try{i==="V"||e[24](i);v6=i}catch(e21){try{i==="W"||e[25](i);v6=i}catch(e22){try{i==="X"||e[26](i);v6=i}catch(e23){try{i==="Y"||e[27](i);v6=i}catch(e24){try{let v7=i["_0"],v11=[];if(i["TAG"]!==e[28]){e[29](i["TAG"])}for(let v8=0;v8<v7.length;++v8){let v10;try{v10=r0(v7[v8])}catch(v9){if(v9&&v9.s===s){v9.path="[\\"_0\\"]"+\'["\'+v8+\'"]\'+v9.path}throw v9}v11.push(v10)}v12={"type":e[30],"nested":v11,};if(!v12||v12.constructor!==Object){e[31](v12)}v6=v12}catch(e25){e[32]([e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,e19,e20,e21,e22,e23,e24,e25,])}}}}}}}}}}}}}}}}}}}}}}}}}}return v6};return r0(i)}`,
// )
// })
}
Loading

0 comments on commit fee93c4

Please sign in to comment.