import { TypeAssertion } from '../types'; import { validate, getType } from '../validator'; import { compile } from '../compiler'; import { serialize, deserialize } from '../serializer'; describe("compiler-1", function() { it("compiler-primitive", function() { const schema = compile(` type FooA = number; type FooB = bigint; type FooC = string; type FooD = boolean; type FooE = null; type FooF = undefined; type BarA = 3; type BarB = 7n; type BarC = 'XB'; type BarD = true; type BazA = integer; `); { expect(Array.from(schema.keys())).toEqual([ 'FooA', 'FooB', 'FooC', 'FooD', 'FooE', 'FooF', 'BarA', 'BarB', 'BarC', 'BarD', 'BazA', ]); } for (const ty of [getType(deserialize(serialize(schema)), 'FooA'), getType(schema, 'FooA')]) { const rhs: TypeAssertion = { name: 'FooA', typeName: 'FooA', kind: 'primitive', primitiveName: 'number', }; expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual({value: 0}); expect(validate(1, ty)).toEqual({value: 1}); expect(validate(1.1, ty)).toEqual({value: 1.1}); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual(null); expect(validate(3, ty)).toEqual({value: 3}); expect(validate(BigInt(7), ty)).toEqual(null); expect(validate('XB', ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); } for (const ty of [getType(deserialize(serialize(schema)), 'FooB'), getType(schema, 'FooB')]) { const rhs: TypeAssertion = { name: 'FooB', typeName: 'FooB', kind: 'primitive', primitiveName: 'bigint', }; expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(1.1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual({value: BigInt(0)}); expect(validate(BigInt(1), ty)).toEqual({value: BigInt(1)}); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual(null); expect(validate(3, ty)).toEqual(null); expect(validate(BigInt(7), ty)).toEqual({value: BigInt(7)}); expect(validate('XB', ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); } for (const ty of [getType(deserialize(serialize(schema)), 'FooC'), getType(schema, 'FooC')]) { const rhs: TypeAssertion = { name: 'FooC', typeName: 'FooC', kind: 'primitive', primitiveName: 'string', }; expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(1.1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual({value: ''}); expect(validate('1', ty)).toEqual({value: '1'}); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual(null); expect(validate(3, ty)).toEqual(null); expect(validate(BigInt(7), ty)).toEqual(null); expect(validate('XB', ty)).toEqual({value: 'XB'}); expect(validate(true, ty)).toEqual(null); } for (const ty of [getType(deserialize(serialize(schema)), 'FooD'), getType(schema, 'FooD')]) { const rhs: TypeAssertion = { name: 'FooD', typeName: 'FooD', kind: 'primitive', primitiveName: 'boolean', }; expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(1.1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual({value: false}); expect(validate(true, ty)).toEqual({value: true}); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual(null); expect(validate(3, ty)).toEqual(null); expect(validate(BigInt(7), ty)).toEqual(null); expect(validate('XB', ty)).toEqual(null); expect(validate(true, ty)).toEqual({value: true}); } for (const ty of [getType(deserialize(serialize(schema)), 'FooE'), getType(schema, 'FooE')]) { const rhs: TypeAssertion = { name: 'FooE', typeName: 'FooE', kind: 'primitive', primitiveName: 'null', }; expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(1.1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual({value: null}); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual(null); expect(validate(3, ty)).toEqual(null); expect(validate(BigInt(7), ty)).toEqual(null); expect(validate('XB', ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); } for (const ty of [getType(deserialize(serialize(schema)), 'FooF'), getType(schema, 'FooF')]) { const rhs: TypeAssertion = { name: 'FooF', typeName: 'FooF', kind: 'primitive', primitiveName: 'undefined', }; expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(1.1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual({value: void 0}); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual(null); expect(validate(3, ty)).toEqual(null); expect(validate(BigInt(7), ty)).toEqual(null); expect(validate('XB', ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); } { const rhs: TypeAssertion = { name: 'BarA', typeName: 'BarA', kind: 'primitive-value', value: 3, }; // const ty = getType(schema, 'BarA'); for (const ty of [getType(deserialize(serialize(schema)), 'BarA'), getType(schema, 'BarA')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(1.1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual(null); expect(validate(3, ty)).toEqual({value: 3}); expect(validate(BigInt(7), ty)).toEqual(null); expect(validate('XB', ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); } } { const rhs: TypeAssertion = { name: 'BarB', typeName: 'BarB', kind: 'primitive-value', value: BigInt(7), }; // const ty = getType(schema, 'BarB'); for (const ty of [getType(deserialize(serialize(schema)), 'BarB'), getType(schema, 'BarB')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(1.1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual(null); expect(validate(3, ty)).toEqual(null); expect(validate(BigInt(7), ty)).toEqual({value: BigInt(7)}); expect(validate('XB', ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); } } { const rhs: TypeAssertion = { name: 'BarC', typeName: 'BarC', kind: 'primitive-value', value: 'XB', }; // const ty = getType(schema, 'BarC'); for (const ty of [getType(deserialize(serialize(schema)), 'BarC'), getType(schema, 'BarC')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(1.1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual(null); expect(validate(3, ty)).toEqual(null); expect(validate(BigInt(7), ty)).toEqual(null); expect(validate('XB', ty)).toEqual({value: 'XB'}); expect(validate(true, ty)).toEqual(null); } } { const rhs: TypeAssertion = { name: 'BarD', typeName: 'BarD', kind: 'primitive-value', value: true, }; // const ty = getType(schema, 'BarD'); for (const ty of [getType(deserialize(serialize(schema)), 'BarD'), getType(schema, 'BarD')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(1.1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual({value: true}); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual(null); expect(validate(3, ty)).toEqual(null); expect(validate(BigInt(7), ty)).toEqual(null); expect(validate('XB', ty)).toEqual(null); expect(validate(true, ty)).toEqual({value: true}); } } for (const ty of [getType(deserialize(serialize(schema)), 'BazA'), getType(schema, 'BazA')]) { const rhs: TypeAssertion = { name: 'BazA', typeName: 'BazA', kind: 'primitive', primitiveName: 'integer', }; expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual({value: 0}); expect(validate(1, ty)).toEqual({value: 1}); expect(validate(1.1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual(null); expect(validate(3, ty)).toEqual({value: 3}); expect(validate(BigInt(7), ty)).toEqual(null); expect(validate('XB', ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); } }); it("compiler-array-of-primitive", function() { const schemas = [compile(` type FooA = number[]; type FooB = bigint[]; type FooC = string[]; type FooD = boolean[]; type FooE = null[]; type FooF = undefined[]; type BarA = 3[]; type BarB = 7n[]; type BarC = 'XB'[]; type BarD = true[]; type BazA = integer[]; `), compile(` type FooA = Array; type FooB = Array; type FooC = Array; type FooD = Array; type FooE = Array; type FooF = Array; type BarA = Array<3>; type BarB = Array<7n>; type BarC = Array<'XB'>; type BarD = Array; type BazA = Array; `)]; for (const schema of schemas) { { expect(Array.from(schema.keys())).toEqual([ 'FooA', 'FooB', 'FooC', 'FooD', 'FooE', 'FooF', 'BarA', 'BarB', 'BarC', 'BarD', 'BazA', ]); } { const rhs: TypeAssertion = { name: 'FooA', typeName: 'FooA', kind: 'repeated', min: null, max: null, repeated: { kind: 'primitive', primitiveName: 'number', }, }; // const ty = getType(schema, 'FooA'); for (const ty of [getType(deserialize(serialize(schema)), 'FooA'), getType(schema, 'FooA')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual({value: []}); expect(validate([0], ty)).toEqual({value: [0]}); expect(validate([1.1], ty)).toEqual({value: [1.1]}); expect(validate([BigInt(0)], ty)).toEqual(null); expect(validate([''], ty)).toEqual(null); expect(validate([false], ty)).toEqual(null); expect(validate([null], ty)).toEqual(null); expect(validate([void 0], ty)).toEqual(null); expect(validate([3], ty)).toEqual({value: [3]}); expect(validate([BigInt(7)], ty)).toEqual(null); expect(validate(['XB'], ty)).toEqual(null); expect(validate([true], ty)).toEqual(null); } } { const rhs: TypeAssertion = { name: 'FooB', typeName: 'FooB', kind: 'repeated', min: null, max: null, repeated: { kind: 'primitive', primitiveName: 'bigint', }, }; // const ty = getType(schema, 'FooB'); for (const ty of [getType(deserialize(serialize(schema)), 'FooB'), getType(schema, 'FooB')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual({value: []}); expect(validate([0], ty)).toEqual(null); expect(validate([1.1], ty)).toEqual(null); expect(validate([BigInt(0)], ty)).toEqual({value: [BigInt(0)]}); expect(validate([''], ty)).toEqual(null); expect(validate([false], ty)).toEqual(null); expect(validate([null], ty)).toEqual(null); expect(validate([void 0], ty)).toEqual(null); expect(validate([3], ty)).toEqual(null); expect(validate([BigInt(7)], ty)).toEqual({value: [BigInt(7)]}); expect(validate(['XB'], ty)).toEqual(null); expect(validate([true], ty)).toEqual(null); } } { const rhs: TypeAssertion = { name: 'FooC', typeName: 'FooC', kind: 'repeated', min: null, max: null, repeated: { kind: 'primitive', primitiveName: 'string', }, }; // const ty = getType(schema, 'FooC'); for (const ty of [getType(deserialize(serialize(schema)), 'FooC'), getType(schema, 'FooC')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual({value: []}); expect(validate([0], ty)).toEqual(null); expect(validate([1.1], ty)).toEqual(null); expect(validate([BigInt(0)], ty)).toEqual(null); expect(validate([''], ty)).toEqual({value: ['']}); expect(validate([false], ty)).toEqual(null); expect(validate([null], ty)).toEqual(null); expect(validate([void 0], ty)).toEqual(null); expect(validate([3], ty)).toEqual(null); expect(validate([BigInt(7)], ty)).toEqual(null); expect(validate(['XB'], ty)).toEqual({value: ['XB']}); expect(validate([true], ty)).toEqual(null); } } { const rhs: TypeAssertion = { name: 'FooD', typeName: 'FooD', kind: 'repeated', min: null, max: null, repeated: { kind: 'primitive', primitiveName: 'boolean', }, }; // const ty = getType(schema, 'FooD'); for (const ty of [getType(deserialize(serialize(schema)), 'FooD'), getType(schema, 'FooD')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual({value: []}); expect(validate([0], ty)).toEqual(null); expect(validate([1.1], ty)).toEqual(null); expect(validate([BigInt(0)], ty)).toEqual(null); expect(validate([''], ty)).toEqual(null); expect(validate([false], ty)).toEqual({value: [false]}); expect(validate([null], ty)).toEqual(null); expect(validate([void 0], ty)).toEqual(null); expect(validate([3], ty)).toEqual(null); expect(validate([BigInt(7)], ty)).toEqual(null); expect(validate(['XB'], ty)).toEqual(null); expect(validate([true], ty)).toEqual({value: [true]}); } } { const rhs: TypeAssertion = { name: 'FooE', typeName: 'FooE', kind: 'repeated', min: null, max: null, repeated: { kind: 'primitive', primitiveName: 'null', }, }; // const ty = getType(schema, 'FooE'); for (const ty of [getType(deserialize(serialize(schema)), 'FooE'), getType(schema, 'FooE')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual({value: []}); expect(validate([0], ty)).toEqual(null); expect(validate([1.1], ty)).toEqual(null); expect(validate([BigInt(0)], ty)).toEqual(null); expect(validate([''], ty)).toEqual(null); expect(validate([false], ty)).toEqual(null); expect(validate([null], ty)).toEqual({value: [null]}); expect(validate([void 0], ty)).toEqual(null); expect(validate([3], ty)).toEqual(null); expect(validate([BigInt(7)], ty)).toEqual(null); expect(validate(['XB'], ty)).toEqual(null); expect(validate([true], ty)).toEqual(null); } } { const rhs: TypeAssertion = { name: 'FooF', typeName: 'FooF', kind: 'repeated', min: null, max: null, repeated: { kind: 'primitive', primitiveName: 'undefined', }, }; // const ty = getType(schema, 'FooF'); for (const ty of [getType(deserialize(serialize(schema)), 'FooF'), getType(schema, 'FooF')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual({value: []}); expect(validate([0], ty)).toEqual(null); expect(validate([1.1], ty)).toEqual(null); expect(validate([BigInt(0)], ty)).toEqual(null); expect(validate([''], ty)).toEqual(null); expect(validate([false], ty)).toEqual(null); expect(validate([null], ty)).toEqual(null); expect(validate([void 0], ty)).toEqual({value: [void 0]}); expect(validate([3], ty)).toEqual(null); expect(validate([BigInt(7)], ty)).toEqual(null); expect(validate(['XB'], ty)).toEqual(null); expect(validate([true], ty)).toEqual(null); } } { const rhs: TypeAssertion = { name: 'BarA', typeName: 'BarA', kind: 'repeated', min: null, max: null, repeated: { kind: 'primitive-value', value: 3, }, }; // const ty = getType(schema, 'BarA'); for (const ty of [getType(deserialize(serialize(schema)), 'BarA'), getType(schema, 'BarA')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual({value: []}); expect(validate([0], ty)).toEqual(null); expect(validate([1.1], ty)).toEqual(null); expect(validate([BigInt(0)], ty)).toEqual(null); expect(validate([''], ty)).toEqual(null); expect(validate([false], ty)).toEqual(null); expect(validate([null], ty)).toEqual(null); expect(validate([void 0], ty)).toEqual(null); expect(validate([3], ty)).toEqual({value: [3]}); expect(validate([BigInt(7)], ty)).toEqual(null); expect(validate(['XB'], ty)).toEqual(null); expect(validate([true], ty)).toEqual(null); } } { const rhs: TypeAssertion = { name: 'BarB', typeName: 'BarB', kind: 'repeated', min: null, max: null, repeated: { kind: 'primitive-value', value: BigInt(7), }, }; // const ty = getType(schema, 'BarB'); for (const ty of [getType(deserialize(serialize(schema)), 'BarB'), getType(schema, 'BarB')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual({value: []}); expect(validate([0], ty)).toEqual(null); expect(validate([1.1], ty)).toEqual(null); expect(validate([BigInt(0)], ty)).toEqual(null); expect(validate([''], ty)).toEqual(null); expect(validate([false], ty)).toEqual(null); expect(validate([null], ty)).toEqual(null); expect(validate([void 0], ty)).toEqual(null); expect(validate([3], ty)).toEqual(null); expect(validate([BigInt(7)], ty)).toEqual({value: [BigInt(7)]}); expect(validate(['XB'], ty)).toEqual(null); expect(validate([true], ty)).toEqual(null); } } { const rhs: TypeAssertion = { name: 'BarC', typeName: 'BarC', kind: 'repeated', min: null, max: null, repeated: { kind: 'primitive-value', value: 'XB', }, }; // const ty = getType(schema, 'BarC'); for (const ty of [getType(deserialize(serialize(schema)), 'BarC'), getType(schema, 'BarC')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual({value: []}); expect(validate([0], ty)).toEqual(null); expect(validate([1.1], ty)).toEqual(null); expect(validate([BigInt(0)], ty)).toEqual(null); expect(validate([''], ty)).toEqual(null); expect(validate([false], ty)).toEqual(null); expect(validate([null], ty)).toEqual(null); expect(validate([void 0], ty)).toEqual(null); expect(validate([3], ty)).toEqual(null); expect(validate([BigInt(7)], ty)).toEqual(null); expect(validate(['XB'], ty)).toEqual({value: ['XB']}); expect(validate([true], ty)).toEqual(null); } } { const rhs: TypeAssertion = { name: 'BarD', typeName: 'BarD', kind: 'repeated', min: null, max: null, repeated: { kind: 'primitive-value', value: true, }, }; // const ty = getType(schema, 'BarD'); for (const ty of [getType(deserialize(serialize(schema)), 'BarD'), getType(schema, 'BarD')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual({value: []}); expect(validate([0], ty)).toEqual(null); expect(validate([1.1], ty)).toEqual(null); expect(validate([BigInt(0)], ty)).toEqual(null); expect(validate([''], ty)).toEqual(null); expect(validate([false], ty)).toEqual(null); expect(validate([null], ty)).toEqual(null); expect(validate([void 0], ty)).toEqual(null); expect(validate([3], ty)).toEqual(null); expect(validate([BigInt(7)], ty)).toEqual(null); expect(validate(['XB'], ty)).toEqual(null); expect(validate([true], ty)).toEqual({value: [true]}); } } { const rhs: TypeAssertion = { name: 'BazA', typeName: 'BazA', kind: 'repeated', min: null, max: null, repeated: { kind: 'primitive', primitiveName: 'integer', }, }; // const ty = getType(schema, 'BazA'); for (const ty of [getType(deserialize(serialize(schema)), 'BazA'), getType(schema, 'BazA')]) { expect(ty).toEqual(rhs); expect(validate(0, ty)).toEqual(null); expect(validate(1, ty)).toEqual(null); expect(validate(1.1, ty)).toEqual(null); expect(validate(BigInt(0), ty)).toEqual(null); expect(validate(BigInt(1), ty)).toEqual(null); expect(validate('', ty)).toEqual(null); expect(validate('1', ty)).toEqual(null); expect(validate(false, ty)).toEqual(null); expect(validate(true, ty)).toEqual(null); expect(validate(null, ty)).toEqual(null); expect(validate(void 0, ty)).toEqual(null); expect(validate({}, ty)).toEqual(null); expect(validate([], ty)).toEqual({value: []}); expect(validate([0], ty)).toEqual({value: [0]}); expect(validate([1.1], ty)).toEqual(null); expect(validate([BigInt(0)], ty)).toEqual(null); expect(validate([''], ty)).toEqual(null); expect(validate([false], ty)).toEqual(null); expect(validate([null], ty)).toEqual(null); expect(validate([void 0], ty)).toEqual(null); expect(validate([3], ty)).toEqual({value: [3]}); expect(validate([BigInt(7)], ty)).toEqual(null); expect(validate(['XB'], ty)).toEqual(null); expect(validate([true], ty)).toEqual(null); } } } }); });