UNPKG

2.07 kBJavaScriptView Raw
1'use strict';
2
3const Base = require('areto/validator/Validator');
4
5module.exports = class SpawnValidator extends Base {
6
7 constructor (config) {
8 super({
9 BaseClass: require('areto/base/Base'),
10 ...config
11 });
12 }
13
14 getMessage () {
15 return this.createMessage(this.message, 'Invalid spawn configuration');
16 }
17
18 getBaseClassMessage () {
19 return this.createMessage(this.wrongBaseClass, 'Base class must be {name}', {
20 name: this.BaseClass.name
21 });
22 }
23
24 getBaseClassNotFoundMessage () {
25 return this.createMessage(this.wrongBaseClass, 'Base class not found');
26 }
27
28 getInvalidFileMessage () {
29 return this.createMessage(this.wrongBaseClass, 'Invalid class file');
30 }
31
32 validateAttr (attr, model) {
33 let value = model.get(attr);
34 if (typeof value === 'string') {
35 value = CommonHelper.parseJson(value);
36 }
37 value ? this.validateClass(value, attr, model)
38 : this.addError(model, attr, this.getMessage());
39 }
40
41 validateClass (value, attr, model) {
42 let Class = value.Class;
43 if (typeof Class === 'string') {
44 try {
45 Class = this.module.app.require(Class) || require(Class);
46 } catch (err) {
47 this.addError(model, attr, this.getInvalidFileMessage());
48 this.log('error', err);
49 }
50 }
51 if (!Class) {
52 return this.addError(model, attr, this.getMessage());
53 }
54 const BaseClass = this.getBaseClass();
55 if (BaseClass && !(Class.prototype instanceof BaseClass)) {
56 this.addError(model, attr, this.getBaseClassMessage());
57 }
58 }
59
60 getBaseClass () {
61 if (typeof this.BaseClass !== 'string') {
62 return this.BaseClass;
63 }
64 return this.module.require(this.BaseClass)
65 || this.module.app.require(this.BaseClass)
66 || require(this.BaseClass);
67 }
68};
69
70const CommonHelper = require('areto/helper/CommonHelper');
\No newline at end of file