Split compute from report
This commit is contained in:
parent
c4bfc0eefc
commit
9bdfc4c3ab
|
@ -2,14 +2,16 @@ import { typeFor, typeForIntersection } from './gentype';
|
|||
import { ANY_TYPE, SimpleType } from './type';
|
||||
import * as M from './meta';
|
||||
|
||||
export function checkSchema(schema: M.Schema): M.Schema {
|
||||
export function checkSchema(schema: M.Schema): (
|
||||
{ ok: true, schema: M.Schema } | { ok: false, problems: Array<string> })
|
||||
{
|
||||
const checker = new Checker();
|
||||
schema.definitions.forEach(checker.checkDefinition.bind(checker));
|
||||
if (checker.problems.length > 0) {
|
||||
throw new Error(`Schema does not specify a bijection:\n` +
|
||||
checker.problems.map(c => ' - ' + c).join('\n'));
|
||||
return { ok: false, problems: checker.problems };
|
||||
} else {
|
||||
return { ok: true, schema };
|
||||
}
|
||||
return schema;
|
||||
}
|
||||
|
||||
class Checker {
|
||||
|
|
|
@ -59,7 +59,10 @@ function _readSchema(source: string, options?: ReaderOptions<never>): Array<Inpu
|
|||
export function readSchema(source: string,
|
||||
options?: ReaderOptions<never> & SchemaReaderOptions): Schema
|
||||
{
|
||||
return checkSchema(parseSchema(_readSchema(source, options), options ?? {}));
|
||||
const checked = checkSchema(parseSchema(_readSchema(source, options), options ?? {}));
|
||||
if (checked.ok) return checked.schema;
|
||||
throw new Error(`Schema does not specify a bijection:\n` +
|
||||
checked.problems.map(c => ' - ' + c).join('\n'));
|
||||
}
|
||||
|
||||
export function parseSchema(toplevelTokens: Array<Input>,
|
||||
|
|
Loading…
Reference in New Issue