Add tests for JSON schema

master
Paul Loyd 2017-12-17 02:10:39 +03:00
parent c6fdf55ff2
commit 31877f825e
40 changed files with 974 additions and 8 deletions

View File

@ -16,16 +16,22 @@ function run(path: string) {
}
try {
const [indent, width] = [4, 80];
const {types, schema} = collect(path);
const output = yaml.dump(types, null, null, {
indent: 4,
width: 80,
const typesOutput = yaml.dump(types, null, null, {
indent,
width,
}).trimRight();
const schemaOutput = stringifyJson(schema, {
indent,
maxLength: width,
});
console.log(output.trimRight());
console.log(typesOutput);
console.log('--------');
console.log(stringifyJson(schema, {maxLength: 80}));
console.log(schemaOutput);
} catch (ex) {
console.error(ex.message);
console.error(ex.stack);

View File

@ -8,12 +8,13 @@ import Ajv from 'ajv';
import collect from '../src';
function run(title) {
let actual, expected;
let actual, expectedTypes, expectedSchema;
// Run the collector only if the suite will be checked.
before(() => {
actual = collect(title + '/source.js');
expected = yaml.load(fs.readFileSync(title + '/types.yaml', 'utf8'));
expectedTypes = yaml.load(fs.readFileSync(title + '/types.yaml', 'utf8'));
expectedSchema = JSON.parse(fs.readFileSync(title + '/schema.json', 'utf8'));
});
it('should not include cycles', () => {
@ -21,7 +22,7 @@ function run(title) {
});
it('should provide expected types', () => {
assert.deepEqual(actual.types, expected);
assert.deepEqual(actual.types, expectedTypes);
});
it('should generate valid JSON schema', () => {
@ -31,6 +32,10 @@ function run(title) {
assert.equal(ajv.errors, null);
});
it('should provide expected JSON schema', () => {
assert.deepEqual(actual.schema, expectedSchema);
});
}
function detectCycles(obj: mixed, cycles: Set<mixed> = new Set, objs: Set<mixed> = new Set) {

View File

@ -0,0 +1,44 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"all::A": {
"type": "object",
"properties": {"a": {"type": "number"}},
"required": ["a"]
},
"all::B": {
"type": "object",
"properties": {"b": {"type": "string"}},
"required": ["b"]
},
"all::X": {
"allOf": [
{"$ref": "#/definitions/all::A"},
{"$ref": "#/definitions/all::B"}
]
},
"all::C": {
"type": "object",
"properties": {"c": {"type": "boolean"}},
"required": ["c"]
},
"all::Y": {
"type": "object",
"properties": {
"y": {
"allOf": [
{"$ref": "#/definitions/all::A"},
{"$ref": "#/definitions/all::B"},
{"$ref": "#/definitions/all::C"}
]
}
},
"required": ["y"]
},
"all::Z": {
"type": "object",
"properties": {"z": {"$ref": "#/definitions/all::A"}},
"required": ["z"]
}
}
}

View File

@ -0,0 +1,11 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"any::X": true,
"any::Y": {
"type": "object",
"properties": {"y": true},
"required": ["y"]
}
}
}

View File

@ -0,0 +1,32 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"arrays::Type": {
"type": "object",
"properties": {
"a": {"type": "array", "items": {"type": "string"}},
"b": {"type": "array", "items": {"type": "string"}},
"c": {"type": "array", "items": {"type": "string"}}
},
"required": ["a", "b", "c"]
},
"arrays::Interface": {
"type": "object",
"properties": {
"a": {"type": "array", "items": {"type": "string"}},
"b": {"type": "array", "items": {"type": "string"}},
"c": {"type": "array", "items": {"type": "string"}}
},
"required": ["a", "b", "c"]
},
"arrays::Class": {
"type": "object",
"properties": {
"a": {"type": "array", "items": {"type": "string"}},
"b": {"type": "array", "items": {"type": "string"}},
"c": {"type": "array", "items": {"type": "string"}}
},
"required": ["a", "b", "c"]
}
}
}

View File

@ -0,0 +1,20 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"declare::Type": {
"type": "object",
"properties": {"a": {"type": "string"}},
"required": ["a"]
},
"declare::Interface": {
"type": "object",
"properties": {"a": {"$ref": "#/definitions/declare::Type"}},
"required": ["a"]
},
"declare::Class": {
"type": "object",
"properties": {"a": {"$ref": "#/definitions/declare::Interface"}},
"required": ["a"]
}
}
}

View File

@ -0,0 +1,25 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"diffs::A": {
"type": "object",
"properties": {"x": {"type": "string"}, "y": {"type": "boolean"}},
"required": ["x", "y"]
},
"diffs::B": {
"type": "object",
"properties": {"y": {"type": "boolean"}},
"required": ["y"]
},
"diffs::X": {
"type": "object",
"properties": {"x": {"type": "string"}},
"required": ["x"]
},
"diffs::Y": {
"type": "object",
"properties": {"y": {"type": "boolean"}},
"required": ["y"]
}
}
}

View File

@ -0,0 +1,16 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"disorder::Z": {"type": "string"},
"disorder::Y": {
"type": "object",
"properties": {"z": {"$ref": "#/definitions/disorder::Z"}},
"required": ["z"]
},
"disorder::X": {
"type": "object",
"properties": {"y": {"$ref": "#/definitions/disorder::Y"}},
"required": ["y"]
}
}
}

View File

@ -0,0 +1,30 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"either::Type": {
"type": "object",
"properties": {
"a": {"anyOf": [{"type": "string"}, {"type": "boolean"}]}
},
"required": ["a"]
},
"either::Interface": {
"type": "object",
"properties": {
"a": {
"anyOf": [
{"type": "string"},
{"type": "boolean"},
{"type": "number"}
]
}
},
"required": ["a"]
},
"either::Class": {
"type": "object",
"properties": {"a": {"type": "string"}},
"required": ["a"]
}
}
}

View File

@ -0,0 +1,22 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"elementType::X::boolean": {
"type": "object",
"properties": {
"x": {"anyOf": [{"type": "boolean"}, {"type": "string"}]}
},
"required": ["x"]
},
"elementType::P": {"const": "x"},
"elementType::Y::x": {
"type": "object",
"properties": {
"y": {"anyOf": [{"type": "boolean"}, {"type": "string"}]},
"yy": {"anyOf": [{"type": "boolean"}, {"type": "string"}]}
},
"required": ["y", "yy"]
},
"elementType::Z": {"anyOf": [{"type": "boolean"}, {"type": "string"}]}
}
}

View File

@ -0,0 +1,4 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {}
}

View File

@ -0,0 +1,20 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"enums::Type": {
"type": "object",
"properties": {"a": {"enum": ["one", "two"]}},
"required": ["a"]
},
"enums::Interface": {
"type": "object",
"properties": {"a": {"enum": ["one", "two"]}},
"required": ["a"]
},
"enums::Class": {
"type": "object",
"properties": {"a": {"enum": ["one", "two"]}},
"required": ["a"]
}
}
}

View File

@ -0,0 +1,16 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"exact::X": {
"type": "object",
"properties": {"x": {"type": "string"}, "y": {"type": "boolean"}},
"required": ["x", "y"]
},
"exact::Y": {"$ref": "#/definitions/exact::X"},
"exact::Z": {
"type": "object",
"properties": {"z": {"type": "string"}},
"required": ["z"]
}
}
}

65
tests/samples/externals/schema.json vendored Normal file
View File

@ -0,0 +1,65 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"externals::modules::first::A": {
"type": "object",
"properties": {"a": {"type": "boolean"}},
"required": ["a"]
},
"externals::modules::first::B": {
"type": "object",
"properties": {"b": {"type": "string"}},
"required": ["b"]
},
"externals::modules::first::CC": {
"type": "object",
"properties": {"c": {"type": "number"}},
"required": ["c"]
},
"externals::modules::first::D": {
"type": "object",
"properties": {"d": {"type": "number"}},
"required": ["d"]
},
"externals::X": {
"type": "object",
"properties": {
"a": {"$ref": "#/definitions/externals::modules::first::A"},
"b": {"$ref": "#/definitions/externals::modules::first::B"},
"c": {"$ref": "#/definitions/externals::modules::first::CC"},
"d": {"$ref": "#/definitions/externals::modules::first::D"}
},
"required": ["a", "b", "c", "d"]
},
"externals::modules::second::N": {
"type": "object",
"properties": {"n": {"type": "boolean"}},
"required": ["n"]
},
"externals::modules::second::M": {
"type": "object",
"properties": {"m": {"type": "string"}},
"required": ["m"]
},
"externals::modules::second::KK": {
"type": "object",
"properties": {"k": {"type": "number"}},
"required": ["k"]
},
"externals::modules::second::P": {
"type": "object",
"properties": {"p": {"type": "number"}},
"required": ["p"]
},
"externals::Y": {
"type": "object",
"properties": {
"n": {"$ref": "#/definitions/externals::modules::second::N"},
"m": {"$ref": "#/definitions/externals::modules::second::M"},
"k": {"$ref": "#/definitions/externals::modules::second::KK"},
"p": {"$ref": "#/definitions/externals::modules::second::P"}
},
"required": ["n", "m", "k", "p"]
}
}
}

View File

@ -0,0 +1,30 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"generics::A::string::boolean": {
"type": "object",
"properties": {"t": {"type": "string"}, "k": {"type": "boolean"}},
"required": ["t", "k"]
},
"generics::X": {
"type": "object",
"properties": {
"a": {"$ref": "#/definitions/generics::A::string::boolean"}
},
"required": ["a"]
},
"generics::A::f64::X": {
"type": "object",
"properties": {
"t": {"type": "number"},
"k": {"$ref": "#/definitions/generics::X"}
},
"required": ["t", "k"]
},
"generics::Y": {
"type": "object",
"properties": {"a": {"$ref": "#/definitions/generics::A::f64::X"}},
"required": ["a"]
}
}
}

View File

@ -0,0 +1,55 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"inheritance::A": {
"type": "object",
"properties": {"a": {"type": "number"}},
"required": ["a"]
},
"inheritance::B": {
"allOf": [
{"$ref": "#/definitions/inheritance::A"},
{
"type": "object",
"properties": {"b": {"type": "string"}},
"required": ["b"]
}
]
},
"inheritance::C": {
"allOf": [
{"$ref": "#/definitions/inheritance::B"},
{
"type": "object",
"properties": {"c": {"type": "boolean"}},
"required": ["c"]
}
]
},
"inheritance::X": {
"type": "object",
"properties": {"x": {"type": "number"}},
"required": ["x"]
},
"inheritance::Y": {
"allOf": [
{"$ref": "#/definitions/inheritance::X"},
{
"type": "object",
"properties": {"y": {"type": "string"}},
"required": ["y"]
}
]
},
"inheritance::Z": {
"allOf": [
{"$ref": "#/definitions/inheritance::Y"},
{
"type": "object",
"properties": {"z": {"type": "boolean"}},
"required": ["z"]
}
]
}
}
}

View File

@ -0,0 +1,51 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"intersections::A": {
"type": "object",
"properties": {"a": {"type": "number"}},
"required": ["a"]
},
"intersections::B": {
"type": "object",
"properties": {"b": {"type": "string"}},
"required": ["b"]
},
"intersections::X": {
"allOf": [
{"$ref": "#/definitions/intersections::A"},
{"$ref": "#/definitions/intersections::B"}
]
},
"intersections::C": {
"type": "object",
"properties": {"c": {"type": "boolean"}},
"required": ["c"]
},
"intersections::Y": {
"type": "object",
"properties": {
"y": {
"allOf": [
{"$ref": "#/definitions/intersections::A"},
{"$ref": "#/definitions/intersections::B"},
{"$ref": "#/definitions/intersections::C"}
]
}
},
"required": ["y"]
},
"intersections::Z": {
"type": "object",
"properties": {
"z": {
"allOf": [
{"$ref": "#/definitions/intersections::A"},
{"$ref": "#/definitions/intersections::C"}
]
}
},
"required": ["z"]
}
}
}

View File

@ -0,0 +1,11 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"keys::X": {
"type": "object",
"properties": {"a": {"type": "string"}, "b": {"type": "boolean"}},
"required": ["a", "b"]
},
"keys::Y": {"enum": ["a", "b"]}
}
}

View File

@ -0,0 +1,29 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"maps::Type": {
"type": "object",
"additionalProperties": {"type": "boolean"}
},
"maps::Interface": {
"type": "object",
"additionalProperties": {"type": "boolean"}
},
"maps::Couple": {
"allOf": [
{"type": "object", "additionalProperties": {"type": "boolean"}},
{"type": "object", "additionalProperties": {"type": "string"}}
]
},
"maps::Mix": {
"allOf": [
{
"type": "object",
"properties": {"foo": {"type": "string"}},
"required": ["foo"]
},
{"type": "object", "additionalProperties": {"type": "boolean"}}
]
}
}
}

View File

@ -0,0 +1,36 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"maybe::X": {
"type": "object",
"properties": {
"x": {"oneOf": [{"type": "string"}, {"type": "null"}]},
"xx": {"oneOf": [{"type": "string"}, {"type": "null"}]}
},
"required": ["x", "xx"]
},
"maybe::Y": {
"type": "object",
"properties": {
"y": {
"oneOf": [
{"type": "array", "items": {"type": "string"}},
{"type": "null"}
]
},
"yy": {"oneOf": [{"type": "string"}, {"type": "null"}]}
},
"required": ["y", "yy"]
},
"maybe::Z": {
"type": "object",
"properties": {
"z": {
"type": "array",
"items": {"oneOf": [{"type": "string"}, {"type": "null"}]}
}
},
"required": ["z"]
}
}
}

View File

@ -0,0 +1,11 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"mixed::X": true,
"mixed::Y": {
"type": "object",
"properties": {"y": true},
"required": ["y"]
}
}
}

View File

@ -0,0 +1,7 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"nonMaybeType::X": {"oneOf": [{"type": "string"}, {"type": "null"}]},
"nonMaybeType::Y": {"type": "string"}
}
}

View File

@ -0,0 +1,20 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"objects::X": {"type": "object", "additionalProperties": true},
"objects::Y": {
"type": "object",
"properties": {
"y": {"type": "object", "additionalProperties": true}
},
"required": ["y"]
},
"objects::Z": {
"type": "object",
"properties": {
"z": {"type": "object", "additionalProperties": true}
},
"required": ["z"]
}
}
}

View File

@ -0,0 +1,13 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"optionals::Type": {
"type": "object",
"properties": {"a": {"type": "string"}}
},
"optionals::Interface": {
"type": "object",
"properties": {"a": {"type": "boolean"}}
}
}
}

View File

@ -0,0 +1,36 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"pragmas::Type": {
"type": "object",
"properties": {
"a": {"type": "integer"},
"b": {"type": "integer"},
"c": {"type": "number"},
"d": {"type": "number"}
},
"required": ["a", "b", "c", "d"]
},
"pragmas::Interface": {
"type": "object",
"properties": {
"a": {"type": "integer"},
"b": {"type": "integer"},
"c": {"type": "number"},
"d": {"type": "number"},
"e": {"type": "string"}
},
"required": ["a", "b", "c", "d", "e"]
},
"pragmas::Class": {
"type": "object",
"properties": {
"a": {"type": "integer"},
"b": {"type": "integer"},
"c": {"type": "number"},
"d": {"type": "number"}
},
"required": ["a", "b", "c", "d"]
}
}
}

View File

@ -0,0 +1,35 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"primitives::Type": {
"type": "object",
"properties": {
"a": {"type": "string"},
"b": {"type": "number"},
"c": {"type": "boolean"},
"d": {"type": "null"}
},
"required": ["a", "b", "c", "d"]
},
"primitives::Interface": {
"type": "object",
"properties": {
"a": {"type": "string"},
"b": {"type": "number"},
"c": {"type": "boolean"},
"d": {"type": "null"}
},
"required": ["a", "b", "c", "d"]
},
"primitives::Class": {
"type": "object",
"properties": {
"a": {"type": "string"},
"b": {"type": "number"},
"c": {"type": "boolean"},
"d": {"type": "null"}
},
"required": ["a", "b", "c", "d"]
}
}
}

View File

@ -0,0 +1,16 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"readOnly::X": {
"type": "object",
"properties": {"x": {"type": "string"}, "y": {"type": "boolean"}},
"required": ["x", "y"]
},
"readOnly::Y": {"$ref": "#/definitions/readOnly::X"},
"readOnly::Z": {
"type": "object",
"properties": {"z": {"type": "string"}},
"required": ["z"]
}
}
}

View File

@ -0,0 +1,39 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"references::A": {"type": "string"},
"references::Type": {
"type": "object",
"properties": {
"a": {"$ref": "#/definitions/references::A"},
"b": {
"type": "array",
"items": {"$ref": "#/definitions/references::A"}
}
},
"required": ["a", "b"]
},
"references::Interface": {
"type": "object",
"properties": {
"a": {"$ref": "#/definitions/references::A"},
"b": {
"type": "array",
"items": {"$ref": "#/definitions/references::A"}
}
},
"required": ["a", "b"]
},
"references::Class": {
"type": "object",
"properties": {
"a": {"$ref": "#/definitions/references::A"},
"b": {
"type": "array",
"items": {"$ref": "#/definitions/references::A"}
}
},
"required": ["a", "b"]
}
}
}

View File

@ -0,0 +1,45 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"scopes::2::X": {"type": "boolean"},
"scopes::1::Z": {"type": "string"},
"scopes::2::Y": {
"type": "object",
"properties": {
"x": {"$ref": "#/definitions/scopes::2::X"},
"z": {"$ref": "#/definitions/scopes::1::Z"}
},
"required": ["x", "z"]
},
"scopes::3::X": {"type": "number"},
"scopes::3::Y": {
"type": "object",
"properties": {
"x": {"$ref": "#/definitions/scopes::3::X"},
"z": {"$ref": "#/definitions/scopes::1::Z"}
},
"required": ["x", "z"]
},
"scopes::4::X": {"type": "string"},
"scopes::4::Y": {
"type": "object",
"properties": {
"x": {"$ref": "#/definitions/scopes::4::X"},
"z": {"$ref": "#/definitions/scopes::1::Z"}
},
"required": ["x", "z"]
},
"scopes::1::X": {"type": "number"},
"scopes::1::Y": {
"type": "object",
"properties": {"x": {"$ref": "#/definitions/scopes::1::X"}},
"required": ["x"]
},
"scopes::X": {"type": "string"},
"scopes::Y": {
"type": "object",
"properties": {"x": {"$ref": "#/definitions/scopes::X"}},
"required": ["x"]
}
}
}

View File

@ -0,0 +1,16 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"shadowing::1::Buffer": {"type": "object", "properties": {}},
"shadowing::1::Y": {
"type": "object",
"properties": {"y": {"$ref": "#/definitions/shadowing::1::Buffer"}},
"required": ["y"]
},
"shadowing::X": {
"type": "object",
"properties": {"x": {"$ref": "#/definitions/Buffer"}},
"required": ["x"]
}
}
}

View File

@ -0,0 +1,14 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"shape::X": {
"type": "object",
"properties": {"x": {"type": "string"}, "y": {"type": "boolean"}},
"required": ["x", "y"]
},
"shape::Y": {
"type": "object",
"properties": {"x": {"type": "string"}, "y": {"type": "boolean"}}
}
}
}

View File

@ -0,0 +1,28 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"skipFunctions::Type": {
"type": "object",
"properties": {
"a": {"type": "string"},
"b": {"type": "boolean"},
"c": {"type": "string"}
},
"required": ["a", "b", "c"]
},
"skipFunctions::Interface": {
"type": "object",
"properties": {
"a": {"type": "string"},
"b": {"type": "boolean"},
"c": {"type": "string"}
},
"required": ["a", "b", "c"]
},
"skipFunctions::Class": {
"type": "object",
"properties": {"a": {"type": "string"}, "b": {"type": "boolean"}},
"required": ["a", "b"]
}
}
}

View File

@ -0,0 +1,10 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"skipStatics::X": {
"type": "object",
"properties": {"xxx": {"type": "string"}},
"required": ["xxx"]
}
}
}

View File

@ -0,0 +1,44 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"tuples::Type": {
"type": "object",
"properties": {
"a": {
"type": "array",
"items": [{"type": "string"}, {"type": "boolean"}]
}
},
"required": ["a"]
},
"tuples::Interface": {
"type": "object",
"properties": {
"a": {
"type": "array",
"items": [
{"type": "string"},
{"type": "null"},
{"type": "boolean"}
]
},
"b": {
"type": "array",
"items": [
{"type": "string"},
{"type": "null"},
{"type": "boolean"}
]
}
},
"required": ["a", "b"]
},
"tuples::Class": {
"type": "object",
"properties": {
"a": {"type": "array", "items": [{"type": "boolean"}]}
},
"required": ["a"]
}
}
}

View File

@ -0,0 +1,11 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"typeInMethod::Test": {"type": "object", "properties": {}},
"typeInMethod::1::X": {
"type": "object",
"properties": {"t": {"$ref": "#/definitions/typeInMethod::Test"}},
"required": ["t"]
}
}
}

View File

@ -0,0 +1,32 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"unions::Type": {
"type": "object",
"properties": {
"a": {"anyOf": [{"type": "string"}, {"type": "boolean"}]}
},
"required": ["a"]
},
"unions::Interface": {
"type": "object",
"properties": {
"a": {
"anyOf": [
{"type": "string"},
{"type": "boolean"},
{"type": "number"}
]
}
},
"required": ["a"]
},
"unions::Class": {
"type": "object",
"properties": {
"a": {"anyOf": [{"type": "string"}, {"type": "boolean"}]}
},
"required": ["a"]
}
}
}

View File

@ -0,0 +1,26 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"unionsAndEnums::Type": {
"type": "object",
"properties": {
"a": {"anyOf": [{"type": "string"}, {"enum": ["one", "two"]}]}
},
"required": ["a"]
},
"unionsAndEnums::Interface": {
"type": "object",
"properties": {
"a": {"anyOf": [{"type": "string"}, {"enum": ["one", "two"]}]}
},
"required": ["a"]
},
"unionsAndEnums::Class": {
"type": "object",
"properties": {
"a": {"anyOf": [{"type": "string"}, {"enum": ["one", "two"]}]}
},
"required": ["a"]
}
}
}

View File

@ -0,0 +1,4 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {}
}

View File

@ -0,0 +1,20 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"valueAsType::Type": {
"type": "object",
"properties": {"a": {"const": "one"}},
"required": ["a"]
},
"valueAsType::Interface": {
"type": "object",
"properties": {"a": {"const": "one"}},
"required": ["a"]
},
"valueAsType::Class": {
"type": "object",
"properties": {"a": {"const": "one"}},
"required": ["a"]
}
}
}

View File

@ -0,0 +1,11 @@
{
"$schema": "http://json-schema.org/draft-06/schema#",
"definitions": {
"values::X": {
"type": "object",
"properties": {"a": {"type": "string"}, "b": {"type": "boolean"}},
"required": ["a", "b"]
},
"values::Y": {"anyOf": [{"type": "string"}, {"type": "boolean"}]}
}
}