UNPKG

2.16 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 const BaseClass = this.getBaseClass(model);
43 if (BaseClass === false) {
44 return this.addError(model, attr, this.getBaseClassNotFoundMessage());
45 }
46 try {
47 const Class = typeof value.Class === 'string'
48 ? model.module.app.require(value.Class) || require(value.Class)
49 : value.Class;
50 if (BaseClass && !(Class.prototype instanceof BaseClass)) {
51 this.addError(model, attr, this.getBaseClassMessage());
52 }
53 } catch {
54 this.addError(model, attr, this.getInvalidFileMessage());
55 }
56 }
57
58 getBaseClass (model) {
59 if (typeof this.BaseClass !== 'string') {
60 return this.BaseClass;
61 }
62 try {
63 return model.module.require(this.BaseClass)
64 || model.module.app.require(this.BaseClass)
65 || require(this.BaseClass);
66
67 } catch {
68 return false;
69 }
70 }
71};
72
73const CommonHelper = require('areto/helper/CommonHelper');
\No newline at end of file