Skip to content

Commit

Permalink
Use val for transform
Browse files Browse the repository at this point in the history
  • Loading branch information
DZakh committed May 12, 2024
1 parent f28811c commit 6ee6ede
Show file tree
Hide file tree
Showing 19 changed files with 615 additions and 553 deletions.
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"],v7,v8=i["Rating"],v9,v14=i["Age"],v15;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){let v6=[];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}v6.push(v5)}v7=v6}try{v8==="G"||e[5](v8);v9=v8}catch(v10){if(v10&&v10.s===s){try{v8==="PG"||e[6](v8);v9=v8}catch(v11){if(v11&&v11.s===s){try{v8==="PG13"||e[7](v8);v9=v8}catch(v12){if(v12&&v12.s===s){try{v8==="R"||e[8](v8);v9=v8}catch(v13){if(v13&&v13.s===s){e[9]([v10,v11,v12,v13])}else{throw v13}}}else{throw v12}}}else{throw v11}}}else{throw v10}}if(v14!==void 0&&(typeof v14!=="number"||v14>2147483647||v14<-2147483648||v14%1!==0)){e[10](v14)}if(v14!==void 0){v15=v14}return {"id":v0,"title":v1,"tags":v7===void 0?e[4]:v7,"rating":v9,"deprecatedAgeRestriction":v15,}}`,
`i=>{if(!i||i.constructor!==Object){e[11](i)}let v0=i["Id"],v1=i["Title"],v2=i["Tags"],v8,v9=i["Rating"],v10,v15=i["Age"],v16;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){let v7=[];for(let v3=0;v3<v2.length;++v3){let v6;try{let v5=v2[v3];if(typeof v5!=="string"){e[3](v5)}v6=v5}catch(v4){if(v4&&v4.s===s){v4.path="[\\"Tags\\"]"+\'["\'+v3+\'"]\'+v4.path}throw v4}v7.push(v6)}v8=v7}try{v9==="G"||e[5](v9);v10=v9}catch(v11){if(v11&&v11.s===s){try{v9==="PG"||e[6](v9);v10=v9}catch(v12){if(v12&&v12.s===s){try{v9==="PG13"||e[7](v9);v10=v9}catch(v13){if(v13&&v13.s===s){try{v9==="R"||e[8](v9);v10=v9}catch(v14){if(v14&&v14.s===s){e[9]([v11,v12,v13,v14])}else{throw v14}}}else{throw v13}}}else{throw v12}}}else{throw v11}}if(v15!==void 0&&(typeof v15!=="number"||v15>2147483647||v15<-2147483648||v15%1!==0)){e[10](v15)}if(v15!==void 0){v16=v15}return {"id":v0,"title":v1,"tags":v8===void 0?e[4]:v8,"rating":v10,"deprecatedAgeRestriction":v16,}}`,
)
})

Expand Down
2 changes: 1 addition & 1 deletion packages/tests/src/core/S_Option_getOrWith_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ test("Compiled async parse code snapshot", t => {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{if(i!==void 0&&(typeof i!=="boolean")){e[2](i)}let v1,v3;if(i!==void 0){let v0;v0=e[0](i);v1=v0}else{v1=()=>Promise.resolve(void 0)}v3=()=>v1().then(v2=>{return v2===void 0?e[1]():v2});return v3}`,
`i=>{if(i!==void 0&&(typeof i!=="boolean")){e[2](i)}let v1,v3=()=>v1().then(v2=>{return v2===void 0?e[1]():v2});if(i!==void 0){let v0=e[0](i);v1=v0}else{v1=()=>Promise.resolve(void 0)}return v3}`,
)
})

Expand Down
2 changes: 1 addition & 1 deletion packages/tests/src/core/S_Option_getOr_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ test("Compiled async parse code snapshot", t => {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{if(i!==void 0&&(typeof i!=="boolean")){e[2](i)}let v1,v3;if(i!==void 0){let v0;v0=e[0](i);v1=v0}else{v1=()=>Promise.resolve(void 0)}v3=()=>v1().then(v2=>{return v2===void 0?e[1]:v2});return v3}`,
`i=>{if(i!==void 0&&(typeof i!=="boolean")){e[2](i)}let v1,v3=()=>v1().then(v2=>{return v2===void 0?e[1]:v2});if(i!==void 0){let v0=e[0](i);v1=v0}else{v1=()=>Promise.resolve(void 0)}return v3}`,
)
})

Expand Down
6 changes: 3 additions & 3 deletions packages/tests/src/core/S_array_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ module CommonWithNested = {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{if(!Array.isArray(i)){e[1](i)}let v3=[];for(let v0=0;v0<i.length;++v0){let v2=i[v0];try{if(typeof v2!=="string"){e[0](v2)}}catch(v1){if(v1&&v1.s===s){v1.path=""+\'["\'+v0+\'"]\'+v1.path}throw v1}v3.push(v2)}return v3}`,
`i=>{if(!Array.isArray(i)){e[1](i)}let v4=[];for(let v0=0;v0<i.length;++v0){let v3;try{let v2=i[v0];if(typeof v2!=="string"){e[0](v2)}v3=v2}catch(v1){if(v1&&v1.s===s){v1.path=""+\'["\'+v0+\'"]\'+v1.path}throw v1}v4.push(v3)}return v4}`,
)
})

Expand All @@ -62,7 +62,7 @@ module CommonWithNested = {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{if(!Array.isArray(i)){e[1](i)}let v4=[],v5=()=>Promise.all(v4.map(t=>t()));for(let v0=0;v0<i.length;++v0){let v2,v3;try{v2=e[0](i[v0]);v3=()=>{try{return v2().catch(v1=>{if(v1&&v1.s===s){v1.path=""+\'["\'+v0+\'"]\'+v1.path}throw v1})}catch(v1){if(v1&&v1.s===s){v1.path=""+\'["\'+v0+\'"]\'+v1.path}throw v1}};}catch(v1){if(v1&&v1.s===s){v1.path=""+\'["\'+v0+\'"]\'+v1.path}throw v1}v4.push(v3)}return v5}`,
`i=>{if(!Array.isArray(i)){e[1](i)}let v4=[],v5=()=>Promise.all(v4.map(t=>t()));for(let v0=0;v0<i.length;++v0){let v3;try{let v2=e[0](i[v0]);v3=()=>{try{return v2().catch(v1=>{if(v1&&v1.s===s){v1.path=""+\'["\'+v0+\'"]\'+v1.path}throw v1})}catch(v1){if(v1&&v1.s===s){v1.path=""+\'["\'+v0+\'"]\'+v1.path}throw v1}}}catch(v1){if(v1&&v1.s===s){v1.path=""+\'["\'+v0+\'"]\'+v1.path}throw v1}v4.push(v3)}return v5}`,
)
})

Expand All @@ -79,7 +79,7 @@ module CommonWithNested = {
t->U.assertCompiledCode(
~schema,
~op=#serialize,
`i=>{let v4=[];for(let v0=0;v0<i.length;++v0){let v2=i[v0],v3;try{if(v2!==void 0){v3=e[0](v2)}}catch(v1){if(v1&&v1.s===s){v1.path=""+\'["\'+v0+\'"]\'+v1.path}throw v1}v4.push(v3)}return v4}`,
`i=>{let v5=[];for(let v0=0;v0<i.length;++v0){let v4;try{let v2=i[v0],v3;if(v2!==void 0){v3=e[0](v2)}v4=v3}catch(v1){if(v1&&v1.s===s){v1.path=""+\'["\'+v0+\'"]\'+v1.path}throw v1}v5.push(v4)}return v5}`,
)
})
}
Expand Down
5 changes: 3 additions & 2 deletions packages/tests/src/core/S_catch_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,8 @@ test("Compiled parse code snapshot", t => {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{try{if(typeof i!=="boolean"){e[1](i)}}catch(v0){if(v0&&v0.s===s){i=e[0](i,v0)}else{throw v0}}return i}`,
// TODO: Improve to return i without reassigning
`i=>{let v1;try{if(typeof i!=="boolean"){e[1](i)}v1=i}catch(v0){if(v0&&v0.s===s){v1=e[0](i,v0)}else{throw v0}}return v1}`,
)
})

Expand All @@ -127,7 +128,7 @@ test("Compiled async parse code snapshot", t => {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{let v1,v2;try{if(typeof i!=="boolean"){e[1](i)}v1=e[2](i);v2=()=>{try{return v1().catch(v0=>{if(v0&&v0.s===s){return e[0](i,v0)}else{throw v0}})}catch(v0){if(v0&&v0.s===s){return Promise.resolve(e[0](i,v0))}else{throw v0}}};}catch(v0){if(v0&&v0.s===s){v2=()=>Promise.resolve(e[0](i,v0))}else{throw v0}}return v2}`,
`i=>{let v2;try{let v1=e[2](i);if(typeof i!=="boolean"){e[1](i)}v2=()=>{try{return v1().catch(v0=>{if(v0&&v0.s===s){return e[0](i,v0)}else{throw v0}})}catch(v0){if(v0&&v0.s===s){return Promise.resolve(e[0](i,v0))}else{throw v0}}}}catch(v0){if(v0&&v0.s===s){v2=()=>Promise.resolve(e[0](i,v0))}else{throw v0}}return v2}`,
)
})

Expand Down
6 changes: 3 additions & 3 deletions packages/tests/src/core/S_dict_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ module CommonWithNested = {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{if(!i||i.constructor!==Object){e[1](i)}let v1;v1={};for(let v0 in i){let v3=i[v0];try{if(typeof v3!=="string"){e[0](v3)}}catch(v2){if(v2&&v2.s===s){v2.path=""+\'["\'+v0+\'"]\'+v2.path}throw v2}v1[v0]=v3}return v1}`,
`i=>{if(!i||i.constructor!==Object){e[1](i)}let v1;v1={};for(let v0 in i){let v4;try{let v3=i[v0];if(typeof v3!=="string"){e[0](v3)}v4=v3}catch(v2){if(v2&&v2.s===s){v2.path=""+\'["\'+v0+\'"]\'+v2.path}throw v2}v1[v0]=v4}return v1}`,
)
})

Expand All @@ -62,7 +62,7 @@ module CommonWithNested = {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{if(!i||i.constructor!==Object){e[1](i)}let v1,v9;v1={};for(let v0 in i){let v3,v4;try{v3=e[0](i[v0]);v4=()=>{try{return v3().catch(v2=>{if(v2&&v2.s===s){v2.path=""+'["'+v0+'"]'+v2.path}throw v2})}catch(v2){if(v2&&v2.s===s){v2.path=""+'["'+v0+'"]'+v2.path}throw v2}};}catch(v2){if(v2&&v2.s===s){v2.path=""+'["'+v0+'"]'+v2.path}throw v2}v1[v0]=v4}v9=()=>new Promise((v5,v6)=>{let v8=Object.keys(v1).length;for(let v0 in v1){v1[v0]().then(v7=>{v1[v0]=v7;if(v8--===1){v5(v1)}},v6)}});return v9}`,
`i=>{if(!i||i.constructor!==Object){e[1](i)}let v1,v9;v1={};for(let v0 in i){let v4;try{let v3=e[0](i[v0]);v4=()=>{try{return v3().catch(v2=>{if(v2&&v2.s===s){v2.path=""+\'["\'+v0+\'"]\'+v2.path}throw v2})}catch(v2){if(v2&&v2.s===s){v2.path=""+\'["\'+v0+\'"]\'+v2.path}throw v2}}}catch(v2){if(v2&&v2.s===s){v2.path=""+\'["\'+v0+\'"]\'+v2.path}throw v2}v1[v0]=v4}v9=()=>new Promise((v5,v6)=>{let v8=Object.keys(v1).length;for(let v0 in v1){v1[v0]().then(v7=>{v1[v0]=v7;if(v8--===1){v5(v1)}},v6)}});return v9}`,
)
})

Expand All @@ -78,7 +78,7 @@ module CommonWithNested = {
t->U.assertCompiledCode(
~schema,
~op=#serialize,
`i=>{let v1;v1={};for(let v0 in i){let v3=i[v0],v4;try{if(v3!==void 0){v4=e[0](v3)}}catch(v2){if(v2&&v2.s===s){v2.path=""+\'["\'+v0+\'"]\'+v2.path}throw v2}v1[v0]=v4}return v1}`,
`i=>{let v1;v1={};for(let v0 in i){let v5;try{let v3=i[v0],v4;if(v3!==void 0){v4=e[0](v3)}v5=v4}catch(v2){if(v2&&v2.s===s){v2.path=""+\'["\'+v0+\'"]\'+v2.path}throw v2}v1[v0]=v5}return v1}`,
)
})
}
Expand Down
2 changes: 1 addition & 1 deletion packages/tests/src/core/S_jsonString_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ test("Compiled async parse code snapshot", t => {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{if(typeof i!=="string"){e[3](i)}let v0,v1;try{v0=JSON.parse(i)}catch(t){e[0](t.message)}if(typeof v0!=="boolean"){e[1](v0)}v1=e[2](v0);return v1}`,
`i=>{if(typeof i!=="string"){e[3](i)}let v0;try{v0=JSON.parse(i)}catch(t){e[0](t.message)}let v1=e[2](v0);if(typeof v0!=="boolean"){e[1](v0)}return v1}`,
)
})

Expand Down
2 changes: 1 addition & 1 deletion packages/tests/src/core/S_null_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ module Common = {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{let v1;if(i!==null){let v0;v0=e[0](i);v1=v0}else{v1=()=>Promise.resolve(void 0)}return v1}`,
`i=>{let v1;if(i!==null){let v0=e[0](i);v1=v0}else{v1=()=>Promise.resolve(void 0)}return v1}`,
)
})

Expand Down
2 changes: 1 addition & 1 deletion packages/tests/src/core/S_nullable_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ module NullCommon = {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{let v2;if(i!==void 0){let v1;if(i!==null){let v0;v0=e[0](i);v1=v0}else{v1=()=>Promise.resolve(void 0)}v2=v1}else{v2=()=>Promise.resolve(void 0)}return v2}`,
`i=>{let v2;if(i!==void 0){let v1;if(i!==null){let v0=e[0](i);v1=v0}else{v1=()=>Promise.resolve(void 0)}v2=v1}else{v2=()=>Promise.resolve(void 0)}return v2}`,
)
})

Expand Down
2 changes: 1 addition & 1 deletion packages/tests/src/core/S_object_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -1004,7 +1004,7 @@ module Compiled = {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{if(!i||i.constructor!==Object){e[2](i)}let v0,v1=i["bar"],v2=()=>Promise.all([v0()]).then(([v0])=>({"foo":v0,"bar":v1,}));v0=e[0](i["foo"]);if(typeof v1!=="boolean"){e[1](v1)}return v2}`,
`i=>{if(!i||i.constructor!==Object){e[2](i)}let v0=e[0](i["foo"]),v1=i["bar"],v2=()=>Promise.all([v0()]).then(([v0])=>({"foo":v0,"bar":v1,}));if(typeof v1!=="boolean"){e[1](v1)}return v2}`,
)
})

Expand Down
2 changes: 1 addition & 1 deletion packages/tests/src/core/S_option_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ module Common = {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{let v1;if(i!==void 0){let v0;v0=e[0](i);v1=v0}else{v1=()=>Promise.resolve(void 0)}return v1}`,
`i=>{let v1;if(i!==void 0){let v0=e[0](i);v1=v0}else{v1=()=>Promise.resolve(void 0)}return v1}`,
)
})

Expand Down
6 changes: 6 additions & 0 deletions packages/tests/src/core/S_parseAnyAsyncInStepsWith_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -850,6 +850,12 @@ module Json = {
asyncTest("[JsonString] Successfully parses", t => {
let schema = S.jsonString(S.int->validAsyncRefine)

t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{if(typeof i!=="string"){e[3](i)}let v0;try{v0=JSON.parse(i)}catch(t){e[0](t.message)}let v1=e[2](v0);if(typeof v0!=="number"||v0>2147483647||v0<-2147483648||v0%1!==0){e[1](v0)}return v1}`,
)

("1"->S.parseAnyAsyncInStepsWith(schema)->Result.getExn)()->Promise.thenResolve(result => {
t->Assert.deepEqual(result, Ok(1), ())
})
Expand Down
2 changes: 1 addition & 1 deletion packages/tests/src/core/S_preprocess_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ test("Compiled async parse code snapshot", t => {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{let v0,v1;v0=e[0](i);v1=()=>v0().then(v2=>{if(typeof v2!=="number"||v2>2147483647||v2<-2147483648||v2%1!==0){e[1](v2)}return v2});return v1}`,
`i=>{let v0=e[0](i),v1;v1=()=>v0().then(v2=>{if(typeof v2!=="number"||v2>2147483647||v2<-2147483648||v2%1!==0){e[1](v2)}return v2});return v1}`,
)
})

Expand Down
23 changes: 22 additions & 1 deletion packages/tests/src/core/S_refine_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,27 @@ test("Successfully refines on serializing", t => {
)
})

test("Successfully parses simple object with empty refine", t => {
let schema = S.object(s =>
{
"foo": s.field("foo", S.string),
"bar": s.field("bar", S.bool),
}
)->S.refine(_ => _ => ())

t->Assert.deepEqual(
%raw(`{
"foo": "string",
"bar": true,
}`)->S.parseAnyWith(schema),
Ok({
"foo": "string",
"bar": true,
}),
(),
)
})

test("Compiled parse code snapshot for simple object with refine", t => {
let schema = S.object(s =>
{
Expand All @@ -62,6 +83,6 @@ test("Compiled parse code snapshot for simple object with refine", t => {
~schema,
~op=#parse,
// FIXME: Double "let" looks wrong
`i=>{if(!i||i.constructor!==Object){e[3](i)}let v2={"foo":v0,"bar":v1,};let v0=i["foo"],v1=i["bar"];if(typeof v0!=="string"){e[0](v0)}if(typeof v1!=="boolean"){e[1](v1)}e[2](v2);return v2}`,
`i=>{if(!i||i.constructor!==Object){e[3](i)}let v2;let v0=i["foo"],v1=i["bar"];if(typeof v0!=="string"){e[0](v0)}if(typeof v1!=="boolean"){e[1](v1)}v2={"foo":v0,"bar":v1,};e[2](v2);return v2}`,
)
})
2 changes: 1 addition & 1 deletion packages/tests/src/core/S_transform_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ test("Compiled async parse code snapshot", t => {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{if(typeof i!=="number"||i>2147483647||i<-2147483648||i%1!==0){e[1](i)}let v0;v0=e[0](i);return v0}`,
`i=>{if(typeof i!=="number"||i>2147483647||i<-2147483648||i%1!==0){e[1](i)}let v0=e[0](i);return v0}`,
)
})

Expand Down
2 changes: 1 addition & 1 deletion packages/tests/src/core/S_tuple_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ module Compiled = {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{if(!Array.isArray(i)){e[3](i)}if(i.length!==2){e[0](i.length)}let v0,v1=i["1"],v2=()=>Promise.all([v0()]).then(([v0])=>([v0,v1,]));v0=e[1](i["0"]);if(typeof v1!=="boolean"){e[2](v1)}return v2}`,
`i=>{if(!Array.isArray(i)){e[3](i)}if(i.length!==2){e[0](i.length)}let v0=e[1](i["0"]),v1=i["1"],v2=()=>Promise.all([v0()]).then(([v0])=>([v0,v1,]));if(typeof v1!=="boolean"){e[2](v1)}return v2}`,
)
})

Expand Down
2 changes: 1 addition & 1 deletion packages/tests/src/core/S_union_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ test("Compiled async parse code snapshot", t => {
t->U.assertCompiledCode(
~schema,
~op=#parse,
`i=>{let v0,v1;try{i===0||e[0](i);v0=e[1](i);throw v0}catch(v2){if(v2&&v2.s===s||v2===v0){try{i===1||e[2](i);v1=()=>Promise.resolve(i)}catch(v3){if(v3&&v3.s===s){v1=()=>Promise.any([v2===v0?v2():Promise.reject(v2),Promise.reject(v3)]).catch(t=>{e[3](t.errors)})}else{throw v3}}}else{throw v2}}return v1}`,
`i=>{let v0=e[1](i),v1;try{i===0||e[0](i);throw v0}catch(v2){if(v2&&v2.s===s||v2===v0){try{i===1||e[2](i);v1=()=>Promise.resolve(i)}catch(v3){if(v3&&v3.s===s){v1=()=>Promise.any([v2===v0?v2():Promise.reject(v2),Promise.reject(v3)]).catch(t=>{e[3](t.errors)})}else{throw v3}}}else{throw v2}}return v1}`,
)
})

Expand Down
Loading

0 comments on commit 6ee6ede

Please sign in to comment.