import { defineSchema, parseSchema, parseValue, createValidator } from './index'; console.log('=== Testing Schema Parser ===\n'); const testCases = [ { schema: 'string', value: 'hello', description: 'Simple string' }, { schema: 'number', value: '42', description: 'Simple number' }, { schema: 'boolean', value: 'true', description: 'Simple boolean' }, { schema: '[string; number]', value: '[hello; 42]', description: 'Tuple' }, { schema: '[string; number]', value: 'hello; 42', description: 'Tuple without brackets' }, { schema: 'string[]', value: '[hello; world; test]', description: 'Array of strings' }, { schema: 'string[]', value: 'hello; world; test', description: 'Array without brackets' }, { schema: 'number[]', value: '[1; 2; 3; 4]', description: 'Array of numbers' }, { schema: '[string; number][]', value: '[[a; 1]; [b; 2]; [c; 3]]', description: 'Array of tuples' }, { schema: '[string; number][]', value: '[a; 1]; [b; 2]; [c; 3]', description: 'Array of tuples without outer brackets' }, { schema: 'word-smith', value: 'word-smith', description: 'String with hyphen' }, { schema: 'string', value: 'hello\\;world', description: 'Escaped semicolon' }, { schema: 'string', value: 'hello\\[world', description: 'Escaped bracket' }, { schema: 'string', value: 'hello\\\\world', description: 'Escaped backslash' }, { schema: '[string; string]', value: 'hello\\;world; test', description: 'Tuple with escaped semicolon' }, { schema: '[x: number; y: number]', value: '[x: 10; y: 20]', description: 'Named tuple' }, { schema: '[x: number; y: number]', value: 'x: 10; y: 20', description: 'Named tuple without brackets' }, { schema: '[name: string; age: number; active: boolean]', value: '[name: Alice; age: 30; active: true]', description: 'Named tuple with mixed types' }, { schema: '[name: string; age: number]', value: 'name: Bob; age: 25', description: 'Named tuple without brackets' }, { schema: '[point: [x: number; y: number]]', value: '[point: [x: 5; y: 10]]', description: 'Nested named tuple' }, ]; testCases.forEach(({ schema, value, description }) => { try { console.log(`Test: ${description}`); console.log(` Schema: ${schema}`); console.log(` Value: "${value}"`); const parsed = defineSchema(schema); const parsedValue = parsed.parse(value); const isValid = parsed.validator(parsedValue); console.log(` Parsed: ${JSON.stringify(parsedValue)}`); console.log(` Valid: ${isValid}`); console.log(' ✓ Passed\n'); } catch (error) { console.log(` ✗ Failed: ${(error as Error).message}\n`); } }); console.log('=== Testing Validation ===\n'); const stringSchema = defineSchema('string'); console.log('String schema validation:'); console.log(` "hello" is valid: ${stringSchema.validator('hello')}`); console.log(` 42 is valid: ${stringSchema.validator(42)}\n`); const numberSchema = defineSchema('number'); console.log('Number schema validation:'); console.log(` 42 is valid: ${numberSchema.validator(42)}`); console.log(` "42" is valid: ${numberSchema.validator('42')}\n`); const tupleSchema = defineSchema('[string; number; boolean]'); console.log('Tuple [string; number; boolean] validation:'); console.log(` ["hello", 42, true] is valid: ${tupleSchema.validator(['hello', 42, true])}`); console.log(` ["hello", "42", true] is valid: ${tupleSchema.validator(['hello', '42', true])}\n`); const arraySchema = defineSchema('number[]'); console.log('Array number[] validation:'); console.log(` [1, 2, 3] is valid: ${arraySchema.validator([1, 2, 3])}`); console.log(` [1, "2", 3] is valid: ${arraySchema.validator([1, '2', 3])}\n`); const arrayOfTuplesSchema = defineSchema('[string; number][]'); console.log('Array of tuples [string; number][] validation:'); console.log(` [["a", 1], ["b", 2]] is valid: ${arrayOfTuplesSchema.validator([['a', 1], ['b', 2]])}`); console.log(` [["a", "1"], ["b", 2]] is valid: ${arrayOfTuplesSchema.validator([['a', '1'], ['b', 2]])}\n`); console.log('=== All tests completed ===');