@iotize/tap
Version:
IoTize Device client for Javascript
76 lines • 5.21 kB
JavaScript
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