UNPKG

6.64 kBJavaScriptView Raw
1'use strict';
2Object.defineProperty(exports, "__esModule", { value: true });
3const utils_1 = require("@terascope/utils");
4const config_validators_1 = require("./config-validators");
5const job_schemas_1 = require("./job-schemas");
6const operation_loader_1 = require("./operation-loader");
7const register_apis_1 = require("./register-apis");
8class JobValidator {
9 constructor(context, options = {}) {
10 this.context = context;
11 this.opLoader = new operation_loader_1.OperationLoader({
12 terasliceOpPath: options.terasliceOpPath,
13 assetPath: context.sysconfig.teraslice.assets_directory,
14 });
15 this.schema = job_schemas_1.jobSchema(context);
16 }
17 /** Validate the job configuration, including the Operations and APIs configuration */
18 validateConfig(jobSpec) {
19 // top level job validation occurs, but not operations
20 const jobConfig = config_validators_1.validateJobConfig(this.schema, utils_1.cloneDeep(jobSpec));
21 const assetIds = jobConfig.assets || [];
22 const apis = {};
23 const validateJobFns = [];
24 const handleModule = (opConfig, op) => {
25 const { Schema, API } = op;
26 if (API != null) {
27 apis[opConfig._op] = API;
28 }
29 const schema = new Schema(this.context);
30 validateJobFns.push((job) => {
31 if (!schema.validateJob)
32 return;
33 schema.validateJob(job);
34 });
35 return schema.validate(opConfig);
36 };
37 jobConfig.operations = jobConfig.operations.map((opConfig, index) => {
38 if (index === 0) {
39 return handleModule(opConfig, this.opLoader.loadReader(opConfig._op, assetIds));
40 }
41 return handleModule(opConfig, this.opLoader.loadProcessor(opConfig._op, assetIds));
42 });
43 jobConfig.apis = jobConfig.apis.map((apiConfig) => {
44 const { Schema } = this.opLoader.loadAPI(apiConfig._name, assetIds);
45 const schema = new Schema(this.context, 'api');
46 validateJobFns.push((job) => {
47 if (!schema.validateJob)
48 return;
49 schema.validateJob(job);
50 });
51 return schema.validate(apiConfig);
52 });
53 register_apis_1.registerApis(this.context, jobConfig);
54 validateJobFns.forEach((fn) => { fn(jobConfig); });
55 Object.keys(apis).forEach((name) => {
56 const api = apis[name];
57 this.context.apis.executionContext.addToRegistry(name, api);
58 });
59 return jobConfig;
60 }
61 hasSchema(obj, name) {
62 if (!obj.schema || typeof obj.schema !== 'function') {
63 throw new Error(`${name} needs to have a method named "schema"`);
64 }
65 else if (typeof obj.schema() !== 'object') {
66 throw new Error(`${name} schema needs to return an object`);
67 }
68 }
69}
70exports.JobValidator = JobValidator;
71//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9qb2ItdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFJYiw0Q0FBNkM7QUFDN0MsMkRBQXdEO0FBQ3hELCtDQUEwQztBQUMxQyx5REFBcUQ7QUFDckQsbURBQStDO0FBRy9DLE1BQWEsWUFBWTtJQUtyQixZQUFZLE9BQWdCLEVBQUUsVUFBd0MsRUFBRTtRQUNwRSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksa0NBQWUsQ0FBQztZQUNoQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7WUFDeEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLGdCQUFnQjtTQUMxRCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLHVCQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELHNGQUFzRjtJQUN0RixjQUFjLENBQUMsT0FBa0I7UUFDN0Isc0RBQXNEO1FBQ3RELE1BQU0sU0FBUyxHQUFHLHFDQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsaUJBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUdoQixNQUFNLGNBQWMsR0FBb0IsRUFBRSxDQUFDO1FBRTNDLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBa0IsRUFBRSxFQUFtQixFQUFFLEVBQUU7WUFDN0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFFM0IsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO2dCQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFD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
\No newline at end of file