1 | 'use strict';
|
2 |
|
3 | const Base = require('areto/validator/Validator');
|
4 |
|
5 | module.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 |
|
70 | const CommonHelper = require('areto/helper/CommonHelper'); |
\ | No newline at end of file |