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 | 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 |
|
73 | const CommonHelper = require('areto/helper/CommonHelper'); |
\ | No newline at end of file |