diff --git a/src/generators/jsonSchema.js b/src/generators/jsonSchema.js index 9c448e3..f1b5e39 100644 --- a/src/generators/jsonSchema.js +++ b/src/generators/jsonSchema.js @@ -122,9 +122,11 @@ function convert(fund: Fund, type: ?Type): Schema { oneOf: [convert(fund, type.value), {type: 'null'}], }; case 'number': - return { - type: type.repr === 'f32' || type.repr === 'f64' ? 'number' : 'integer', - }; + const {repr} = type; + + return repr === 'f32' || repr === 'f64' ? {type: 'number'} + : repr === 'i32' || repr === 'i64' ? {type: 'integer'} + : {type: 'integer', minimum: 0}; case 'string': return { type: 'string', diff --git a/tests/samples/pragmas/schema.json b/tests/samples/pragmas/schema.json index 8ebf6b1..43aa735 100644 --- a/tests/samples/pragmas/schema.json +++ b/tests/samples/pragmas/schema.json @@ -7,9 +7,11 @@ "a": {"type": "integer"}, "b": {"type": "integer"}, "c": {"type": "number"}, - "d": {"type": "number"} + "d": {"type": "number"}, + "e": {"type": "integer", "minimum": 0}, + "f": {"type": "integer", "minimum": 0} }, - "required": ["a", "b", "c", "d"] + "required": ["a", "b", "c", "d", "e", "f"] }, "pragmas::Interface": { "type": "object", @@ -18,9 +20,11 @@ "b": {"type": "integer"}, "c": {"type": "number"}, "d": {"type": "number"}, - "e": {"type": "string"} + "e": {"type": "integer", "minimum": 0}, + "f": {"type": "integer", "minimum": 0}, + "g": {"type": "string"} }, - "required": ["a", "b", "c", "d", "e"] + "required": ["a", "b", "c", "d", "e", "f", "g"] }, "pragmas::Class": { "type": "object", @@ -28,9 +32,11 @@ "a": {"type": "integer"}, "b": {"type": "integer"}, "c": {"type": "number"}, - "d": {"type": "number"} + "d": {"type": "number"}, + "e": {"type": "integer", "minimum": 0}, + "f": {"type": "integer", "minimum": 0} }, - "required": ["a", "b", "c", "d"] + "required": ["a", "b", "c", "d", "e", "f"] } } } diff --git a/tests/samples/pragmas/source.js b/tests/samples/pragmas/source.js index ef8fec9..2f13709 100644 --- a/tests/samples/pragmas/source.js +++ b/tests/samples/pragmas/source.js @@ -7,6 +7,10 @@ type Type = { c: number, // @repr {f64} d: number, + // @repr {u32} + e: number, + // @repr {u64} + f: number, }; interface Interface { @@ -18,9 +22,13 @@ interface Interface { c: number; // @repr {f64} d: number; + // @repr {u32} + e: number; + // @repr {u64} + f: number; // Some comment. - e: string; + g: string; } class Class { @@ -32,6 +40,10 @@ class Class { c: number; // @repr {f64} d: number; + // @repr {u32} + e: number; + // @repr {u64} + f: number; } export {Type, Interface, Class}; diff --git a/tests/samples/pragmas/types.yaml b/tests/samples/pragmas/types.yaml index c71f34d..e6709ee 100644 --- a/tests/samples/pragmas/types.yaml +++ b/tests/samples/pragmas/types.yaml @@ -12,6 +12,12 @@ - name: d value: {kind: number, repr: f64} required: true + - name: e + value: {kind: number, repr: u32} + required: true + - name: f + value: {kind: number, repr: u64} + required: true id: [pragmas, Type] - kind: record fields: @@ -28,6 +34,12 @@ value: {kind: number, repr: f64} required: true - name: e + value: {kind: number, repr: u32} + required: true + - name: f + value: {kind: number, repr: u64} + required: true + - name: g value: {kind: string} required: true id: [pragmas, Interface] @@ -45,4 +57,10 @@ - name: d value: {kind: number, repr: f64} required: true + - name: e + value: {kind: number, repr: u32} + required: true + - name: f + value: {kind: number, repr: u64} + required: true id: [pragmas, Class]