mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-10 03:32:52 +00:00
refactor: reintroduce validateThing method
This commit is contained in:
@@ -182,6 +182,20 @@ export function isSchemaWithDefinitions(schema: JSONSchema): schema is SchemaWit
|
|||||||
return typeof schema.definitions !== 'undefined';
|
return typeof schema.definitions !== 'undefined';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// tslint:disable: completed-docs
|
||||||
|
/**
|
||||||
|
* Guard method for determining if an object (a thing) has a type property with a type of string
|
||||||
|
*
|
||||||
|
* @param thing An object (thing)
|
||||||
|
*/
|
||||||
|
export function isThingWithType(thing: unknown): thing is { type: string; } {
|
||||||
|
return typeof thing === 'object' &&
|
||||||
|
thing !== null &&
|
||||||
|
'type' in thing &&
|
||||||
|
typeof (thing as { type: string; }).type === 'string';
|
||||||
|
}
|
||||||
|
// tslint:enable: completed-docs
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get path that contains a tsconfig.json
|
* Get path that contains a tsconfig.json
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -18,7 +18,13 @@ import {PathLike} from 'fs';
|
|||||||
import {Schema, Validator as JSONSchemaValidator, ValidatorResult} from 'jsonschema';
|
import {Schema, Validator as JSONSchemaValidator, ValidatorResult} from 'jsonschema';
|
||||||
import * as mustache from 'mustache';
|
import * as mustache from 'mustache';
|
||||||
import {basename, join, resolve} from 'path';
|
import {basename, join, resolve} from 'path';
|
||||||
import {ExpectableValidationErrors, globPromisified, readFilePromisified, writeFilePromisified} from './common';
|
import {
|
||||||
|
ExpectableValidationErrors,
|
||||||
|
globPromisified,
|
||||||
|
isThingWithType,
|
||||||
|
readFilePromisified,
|
||||||
|
writeFilePromisified,
|
||||||
|
} from './common';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* StAppsCore validator
|
* StAppsCore validator
|
||||||
@@ -74,12 +80,28 @@ export class Validator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Validates anything against a given schema name
|
* Validates anything against a given schema name or infers schema name from object
|
||||||
*
|
*
|
||||||
* @param instance Instance to validate
|
* @param instance Instance to validate
|
||||||
* @param schema Name of schema to validate instance against or the schema itself
|
* @param schema Name of schema to validate instance against or the schema itself
|
||||||
*/
|
*/
|
||||||
public validate(instance: unknown, schema: string | Schema): ValidatorResult {
|
public validate(instance: unknown, schema?: string | Schema): ValidatorResult {
|
||||||
|
if (typeof schema === 'undefined') {
|
||||||
|
if (isThingWithType(instance)) {
|
||||||
|
// schema name can be infered from type string
|
||||||
|
// tslint:disable-next-line: completed-docs
|
||||||
|
const schemaSuffix = (instance as { type: string; }).type.split(' ')
|
||||||
|
.map((part: string) => {
|
||||||
|
return part.substr(0, 1)
|
||||||
|
.toUpperCase() + part.substr(1);
|
||||||
|
})
|
||||||
|
.join('');
|
||||||
|
const schemaName = `SC${schemaSuffix}`;
|
||||||
|
|
||||||
|
return this.validate(instance, schemaName);
|
||||||
|
}
|
||||||
|
throw new Error('Instance.type does not exist.');
|
||||||
|
}
|
||||||
if (typeof schema === 'string') {
|
if (typeof schema === 'string') {
|
||||||
// if you want to access a schema that is contained in the validator object
|
// if you want to access a schema that is contained in the validator object
|
||||||
if (typeof this.schemas[schema] !== 'object') {
|
if (typeof this.schemas[schema] !== 'object') {
|
||||||
@@ -89,7 +111,6 @@ export class Validator {
|
|||||||
return this.validator.validate(instance, this.schemas[schema]);
|
return this.validator.validate(instance, this.schemas[schema]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if you have a schema and want to validate it directly
|
|
||||||
return this.validator.validate(instance, schema);
|
return this.validator.validate(instance, schema);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user