Skip to content

Commit

Permalink
v9.2.3 - fix preprocessed tags
Browse files Browse the repository at this point in the history
  • Loading branch information
DZakh committed Feb 13, 2025
1 parent 28837a2 commit bffc8c2
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 4 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "rescript-schema",
"version": "9.2.2-rescript12.0",
"version": "9.2.3-rescript12.0",
"private": true,
"description": "🧬 The fastest parser in the entire JavaScript ecosystem with a focus on small bundle size and top-notch DX",
"keywords": [
Expand Down
19 changes: 19 additions & 0 deletions packages/tests/src/core/S_object_nested_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,25 @@ test("S.schema object with a deep strict applied to the nested field parent", t
t->U.assertCompiledCode(~schema, ~op=#ReverseConvert, `i=>{let v0=i["nested"];return i}`)
})

test("Nested tags on reverse convert", t => {
let schema = S.object(s => {
s.nested("nested").tag("tag", "value")
})

t->Assert.deepEqual(()->S.reverseConvertOrThrow(schema), %raw(`{"nested":{"tag":"value"}}`), ())
})

test("Nested preprocessed tags on reverse convert", t => {
let schema = S.object(s => {
let _ = s.nested("nested").field(
"tag",
S.literal("value")->S.preprocess(_ => {serializer: v => "_" ++ v->Obj.magic}),
)
})

t->Assert.deepEqual(()->S.reverseConvertOrThrow(schema), %raw(`{"nested":{"tag":"_value"}}`), ())
})

test("S.schema object with a deep strict applied to the nested field parent + reverse", t => {
let schema =
S.schema(s =>
Expand Down
15 changes: 14 additions & 1 deletion packages/tests/src/core/S_preprocess_test.res
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,20 @@ test("Reverse schema to the original schema", t => {
parser: _ => 1->Int.toFloat,
serializer: _ => 1.->Int.fromFloat,
})
t->U.assertEqualSchemas(schema->S.reverse, S.unknown->S.toUnknown)
t->Assert.truthy(
switch schema->S.classify {
| Int => true
| _ => false
},
(),
)
t->Assert.truthy(
switch schema->S.reverse->S.classify {
| Int => true
| _ => false
},
(),
)
})

test("Succesfully uses reversed schema for parsing back to initial value", t => {
Expand Down
2 changes: 1 addition & 1 deletion src/S_Core.res
Original file line number Diff line number Diff line change
Expand Up @@ -2690,7 +2690,7 @@ let rec preprocess = (schema, transformer) => {
let reversed = schema.reverse()
makeReverseSchema(
~name=primitiveName,
~tagged=Unknown,
~tagged=reversed.tagged,
~builder=(b, ~input, ~selfSchema as _, ~path) => {
let input = b->B.parse(~schema=reversed, ~input, ~path)
switch transformer(b->B.effectCtx(~selfSchema=schema, ~path)) {
Expand Down
2 changes: 1 addition & 1 deletion src/S_Core.res.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -1747,7 +1747,7 @@ function preprocess(schema, transformer) {
}
}, undefined, () => {
let reversed = schema["~r"]();
return makeReverseSchema(primitiveName, "unknown", empty, (b, input, param, path) => {
return makeReverseSchema(primitiveName, reversed.t, empty, (b, input, param, path) => {
let input$1 = reversed.b(b, input, reversed, path);
let match = transformer(effectCtx(b, schema, path));
let serializer = match.s;
Expand Down

0 comments on commit bffc8c2

Please sign in to comment.