UNPKG

@iotize/tap

Version:

IoTize Device client for Javascript

76 lines 5.21 kB
import { CommonTypeJsonSchema as ExtrasSchemaDefinition, TapConfigJsonSchema as TapConfiguratorConfigDefinition, TapTypeJsonSchema as TapTypesSchemaDefinition, } from '@iotize/tap/config/schema/v1'; import Ajv from 'ajv'; import { TapConfiguratorError } from './errors'; const TSTYPE_CLASS = { Uint8Array, }; const ɵ0 = (schema) => { const classObject = TSTYPE_CLASS[schema]; return function (data) { return !classObject || data instanceof classObject; }; }; const tsTypeKeyword = { keyword: 'tsType', compile: ɵ0, }; const ipv4Format = /^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/; export function createAjvInstance(schemas) { schemas = schemas || [ TapConfiguratorConfigDefinition, ExtrasSchemaDefinition, TapTypesSchemaDefinition, ]; const ajv8Options = { schemas, strict: false, strictSchema: false, }; const ajv = new Ajv(ajv8Options); ajv.addKeyword(tsTypeKeyword.keyword, tsTypeKeyword); ajv.addFormat('ipv4', ipv4Format); return ajv; } export function getJsonSchemaValidator(schemas) { const ajv = createAjvInstance(); const schemaId = 'http://iotize.com/schemas/v1/tap-config.json'; // TODO config must match schema api file value const validator = ajv.getSchema(schemaId); if (!validator) { throw new Error(`Cannot create JSON validator function from schema ${schemaId}`); } return validator; } // export function checkErrors(config: Object) { // const validator = getJsonSchemaValidator(); // validator(config); // return validator.errors; // } /** * Validate schema. Throw error if schema is not valid * @throws @{link TapConfiguratorError} * @param config the tap config object * @param schemas optial schema used for validation. If not provided, default one will be used * * @returns validator function */ export function validateTapConfiguratorConfig(config, schemas) { const validator = getJsonSchemaValidator(schemas); const valid = validator(config); if (!valid) { throw new TapConfiguratorError.InvalidSchemaError(validator); } return validator; } export function parseTapConfiguratorConfig(input) { let config; try { config = JSON.parse(input); } catch (err) { throw new Error(`Cannot parse Tap configurator config content. ${err.message}`); } validateTapConfiguratorConfig(config); return config; } export { ɵ0 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtdGFwLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2NvbmZpZ3VyYXRvci9zcmMvbGliL3ZhbGlkYXRlLXRhcC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixJQUFJLHNCQUFzQixFQUM5QyxtQkFBbUIsSUFBSSwrQkFBK0IsRUFFdEQsaUJBQWlCLElBQUksd0JBQXdCLEdBQzlDLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxHQUFxRCxNQUFNLEtBQUssQ0FBQztBQUV4RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEQsTUFBTSxZQUFZLEdBQXdCO0lBQ3hDLFVBQVU7Q0FDWCxDQUFDO1dBTVMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUMxQixNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsT0FBTyxVQUFVLElBQUk7UUFDbkIsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLFlBQVksV0FBVyxDQUFDO0lBQ3JELENBQUMsQ0FBQztBQUNKLENBQUM7QUFUSCxNQUFNLGFBQWEsR0FFZjtJQUNGLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLE9BQU8sSUFLTjtDQUNGLENBQUM7QUFFRixNQUFNLFVBQVUsR0FDZCxtRkFBbUYsQ0FBQztBQUV0RixNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBa0I7SUFDbEQsT0FBTyxHQUFHLE9BQU8sSUFBSTtRQUNuQiwrQkFBK0I7UUFDL0Isc0JBQXNCO1FBQ3RCLHdCQUF3QjtLQUN6QixDQUFDO0lBRUYsTUFBTSxXQUFXLEdBR2I7UUFDRixPQUFPO1FBQ1AsTUFBTSxFQUFFLEtBQUs7UUFDYixZQUFZLEVBQUUsS0FBSztLQUNwQixDQUFDO0lBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBaUIsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvRCxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNsQyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBa0I7SUFDdkQsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztJQUNoQyxNQUFNLFFBQVEsR0FBRyw4Q0FBOEMsQ0FBQyxDQUFDLCtDQUErQztJQUNoSCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDZCxNQUFNLElBQUksS0FBSyxDQUNiLHFEQUFxRCxRQUFRLEVBQUUsQ0FDaEUsQ0FBQztLQUNIO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELGdEQUFnRDtBQUNoRCxrREFBa0Q7QUFDbEQseUJBQXlCO0FBQ3pCLCtCQUErQjtBQUMvQixJQUFJO0FBRUo7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FDM0MsTUFBYyxFQUNkLE9BQWtCO0lBRWxCLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsTUFBTSxJQUFJLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzlEO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsS0FBYTtJQUViLElBQUksTUFBVyxDQUFDO0lBQ2hCLElBQUk7UUFDRixNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM1QjtJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FDYixpREFBa0QsR0FBYSxDQUFDLE9BQU8sRUFBRSxDQUMxRSxDQUFDO0tBQ0g7SUFDRCw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxPQUFPLE1BQStCLENBQUM7QUFDekMsQ0FBQyJ9