Skip to content

Commit 9c5a03b

Browse files
committed
v7.2.0 - Support for object literals
1 parent d3b58f2 commit 9c5a03b

File tree

5 files changed

+59
-11
lines changed

5 files changed

+59
-11
lines changed

__tests__/JSONSchema_test.res

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,28 @@ test("Schema of String Literal schema", t => {
334334
)
335335
})
336336

337+
test("Schema of Object Literal schema", t => {
338+
let schema = S.literal({"received": true})
339+
340+
t->Assert.deepEqual(
341+
JSONSchema.make(schema),
342+
Ok(
343+
%raw(`{
344+
"$schema": "http://json-schema.org/draft-07/schema#",
345+
"type": "object",
346+
"additionalProperties": false,
347+
"properties": {
348+
"received": {
349+
"type": "boolean",
350+
"const": true
351+
}
352+
},
353+
"required": ["received"]
354+
}`),
355+
),
356+
)
357+
})
358+
337359
test("Schema of Int Literal schema", t => {
338360
let schema = S.literal(123)
339361

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rescript-json-schema",
3-
"version": "7.1.0",
3+
"version": "7.2.0",
44
"description": "📄 Typesafe JSON Schema for ReScript",
55
"keywords": [
66
"rescript",

src/JSONSchema.bs.js

Lines changed: 20 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/JSONSchema.res

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,24 @@ let rec fromRescriptSchema:
270270
jsonSchema.const = Some(Js.Json.string(value))
271271
}
272272
| S.Literal(Null(_)) => jsonSchema.type_ = Some(Arrayable.single(#null))
273+
| S.Literal(Dict({value})) => {
274+
let properties = Js.Dict.empty()
275+
let required = []
276+
value
277+
->Js.Dict.entries
278+
->Js.Array2.forEach(((key, value)) => {
279+
required->Js.Array2.push(key)->ignore
280+
properties->Js.Dict.set(key, Definition.schema(fromRescriptSchema(S.literal(value))))
281+
})
282+
jsonSchema.type_ = Some(Arrayable.single(#object))
283+
jsonSchema.properties = Some(properties)
284+
jsonSchema.required = Some(required)
285+
jsonSchema.additionalProperties = Some(Definition.boolean(false))
286+
}
273287
| S.Literal(Undefined(_))
274288
| S.Literal(BigInt(_))
275289
| S.Literal(Function(_))
276290
| S.Literal(Array(_))
277-
| S.Literal(Dict(_))
278291
| S.Literal(Symbol(_))
279292
| S.Literal(Object(_))
280293
| S.Literal(NaN(_))

0 commit comments

Comments
 (0)