functional-models 1.0.28 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +1 -0
- package/.eslintrc +9 -15
- package/cucumber.js +10 -0
- package/dist/src/constants.d.ts +14 -0
- package/dist/src/constants.js +19 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/errors.d.ts +9 -0
- package/dist/src/errors.js +15 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +10 -0
- package/dist/src/index.js +41 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interfaces.d.ts +145 -0
- package/dist/src/interfaces.js +5 -0
- package/dist/src/interfaces.js.map +1 -0
- package/dist/src/lazy.d.ts +2 -0
- package/dist/src/lazy.js +37 -0
- package/dist/src/lazy.js.map +1 -0
- package/dist/src/methods.d.ts +4 -0
- package/dist/src/methods.js +18 -0
- package/dist/src/methods.js.map +1 -0
- package/dist/src/models.d.ts +3 -0
- package/dist/src/models.js +128 -0
- package/dist/src/models.js.map +1 -0
- package/dist/src/properties.d.ts +16 -0
- package/dist/src/properties.js +208 -0
- package/dist/src/properties.js.map +1 -0
- package/dist/src/serialization.d.ts +3 -0
- package/dist/src/serialization.js +49 -0
- package/dist/src/serialization.js.map +1 -0
- package/dist/src/utils.d.ts +4 -0
- package/dist/src/utils.js +44 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/src/validation.d.ts +29 -0
- package/dist/src/validation.js +286 -0
- package/dist/src/validation.js.map +1 -0
- package/dist/stepDefinitions/oldSteps.d.ts +1 -0
- package/dist/stepDefinitions/oldSteps.js +191 -0
- package/dist/stepDefinitions/oldSteps.js.map +1 -0
- package/dist/stepDefinitions/tssteps.d.ts +1 -0
- package/dist/stepDefinitions/tssteps.js +96 -0
- package/dist/stepDefinitions/tssteps.js.map +1 -0
- package/dist/test/src/errors.test.d.ts +1 -0
- package/dist/test/src/errors.test.js +33 -0
- package/dist/test/src/errors.test.js.map +1 -0
- package/dist/test/src/lazy.test.d.ts +1 -0
- package/dist/test/src/lazy.test.js +28 -0
- package/dist/test/src/lazy.test.js.map +1 -0
- package/dist/test/src/methods.test.d.ts +1 -0
- package/dist/test/src/methods.test.js +48 -0
- package/dist/test/src/methods.test.js.map +1 -0
- package/dist/test/src/models.test.d.ts +1 -0
- package/dist/test/src/models.test.js +395 -0
- package/dist/test/src/models.test.js.map +1 -0
- package/dist/test/src/properties.test.d.ts +1 -0
- package/dist/test/src/properties.test.js +724 -0
- package/dist/test/src/properties.test.js.map +1 -0
- package/dist/test/src/serialization.test.d.ts +1 -0
- package/dist/test/src/serialization.test.js +91 -0
- package/dist/test/src/serialization.test.js.map +1 -0
- package/dist/test/src/utils.test.d.ts +1 -0
- package/dist/test/src/utils.test.js +81 -0
- package/dist/test/src/utils.test.js.map +1 -0
- package/dist/test/src/validation.test.d.ts +1 -0
- package/dist/test/src/validation.test.js +612 -0
- package/dist/test/src/validation.test.js.map +1 -0
- package/features/arrayFields.feature +7 -7
- package/features/basic-ts.feature +13 -0
- package/features/functions.feature +2 -3
- package/package.json +34 -10
- package/src/constants.ts +15 -0
- package/src/{errors.js → errors.ts} +6 -4
- package/src/index.ts +12 -0
- package/src/interfaces.ts +323 -0
- package/src/{lazy.js → lazy.ts} +7 -9
- package/src/methods.ts +30 -0
- package/src/models.ts +183 -0
- package/src/properties.ts +375 -0
- package/src/serialization.ts +39 -0
- package/src/{utils.js → utils.ts} +16 -26
- package/src/validation.ts +390 -0
- package/{features/stepDefinitions/steps.js → stepDefinitions/oldSteps.ts} +76 -53
- package/stepDefinitions/tssteps.ts +107 -0
- package/test/src/errors.test.ts +31 -0
- package/test/src/{lazy.test.js → lazy.test.ts} +4 -4
- package/test/src/methods.test.ts +45 -0
- package/test/src/models.test.ts +417 -0
- package/test/src/{properties.test.js → properties.test.ts} +251 -58
- package/test/src/serialization.test.ts +80 -0
- package/test/src/{utils.test.js → utils.test.ts} +29 -7
- package/test/src/{validation.test.js → validation.test.ts} +278 -210
- package/tsconfig.json +100 -0
- package/src/constants.js +0 -19
- package/src/functions.js +0 -7
- package/src/index.js +0 -10
- package/src/models.js +0 -152
- package/src/properties.js +0 -313
- package/src/serialization.js +0 -50
- package/src/validation.js +0 -285
- package/test/base/index.test.js +0 -5
- package/test/src/functions.test.js +0 -45
- package/test/src/index.test.js +0 -5
- package/test/src/models.test.js +0 -380
- package/test/src/serialization.test.js +0 -127
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.BooleanProperty = exports.EmailProperty = exports.ObjectProperty = exports.NumberProperty = exports.ConstantValueProperty = exports.TextProperty = exports.IntegerProperty = exports.ReferenceProperty = exports.ArrayProperty = exports.DateProperty = exports.UniqueId = exports.Property = void 0;
|
|
16
|
+
const identity_1 = __importDefault(require("lodash/identity"));
|
|
17
|
+
const merge_1 = __importDefault(require("lodash/merge"));
|
|
18
|
+
const validation_1 = require("./validation");
|
|
19
|
+
const constants_1 = require("./constants");
|
|
20
|
+
const lazy_1 = require("./lazy");
|
|
21
|
+
const utils_1 = require("./utils");
|
|
22
|
+
const EMAIL_REGEX = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/u;
|
|
23
|
+
function _getValidatorFromConfigElseEmpty(input,
|
|
24
|
+
// eslint-disable-next-line no-unused-vars
|
|
25
|
+
validatorGetter) {
|
|
26
|
+
if (input !== undefined) {
|
|
27
|
+
const validator = validatorGetter(input);
|
|
28
|
+
return validator;
|
|
29
|
+
}
|
|
30
|
+
return validation_1.emptyValidator;
|
|
31
|
+
}
|
|
32
|
+
const _mergeValidators = (config, validators) => {
|
|
33
|
+
return [...validators, ...((config === null || config === void 0 ? void 0 : config.validators) ? config.validators : [])];
|
|
34
|
+
};
|
|
35
|
+
function Property(type, config = {}, additionalMetadata = {}) {
|
|
36
|
+
if (!type && !(config === null || config === void 0 ? void 0 : config.type)) {
|
|
37
|
+
throw new Error(`Property type must be provided.`);
|
|
38
|
+
}
|
|
39
|
+
if (config === null || config === void 0 ? void 0 : config.type) {
|
|
40
|
+
type = config.type;
|
|
41
|
+
}
|
|
42
|
+
const getConstantValue = () => ((config === null || config === void 0 ? void 0 : config.value) !== undefined ? config.value : undefined);
|
|
43
|
+
const getDefaultValue = () => ((config === null || config === void 0 ? void 0 : config.defaultValue) !== undefined ? config.defaultValue : undefined);
|
|
44
|
+
const getChoices = () => (config === null || config === void 0 ? void 0 : config.choices) || [];
|
|
45
|
+
const lazyLoadMethod = (config === null || config === void 0 ? void 0 : config.lazyLoadMethod) || false;
|
|
46
|
+
const valueSelector = (config === null || config === void 0 ? void 0 : config.valueSelector) || identity_1.default;
|
|
47
|
+
if (typeof valueSelector !== 'function') {
|
|
48
|
+
throw new Error(`valueSelector must be a function`);
|
|
49
|
+
}
|
|
50
|
+
const r = Object.assign(Object.assign({}, additionalMetadata), { getConfig: () => config || {}, getChoices,
|
|
51
|
+
getDefaultValue,
|
|
52
|
+
getConstantValue, getPropertyType: () => type, createGetter: (instanceValue) => {
|
|
53
|
+
const value = getConstantValue();
|
|
54
|
+
if (value !== undefined) {
|
|
55
|
+
return () => value;
|
|
56
|
+
}
|
|
57
|
+
const defaultValue = getDefaultValue();
|
|
58
|
+
if (defaultValue !== undefined &&
|
|
59
|
+
(instanceValue === null || instanceValue === undefined)) {
|
|
60
|
+
return () => defaultValue;
|
|
61
|
+
}
|
|
62
|
+
const method = lazyLoadMethod
|
|
63
|
+
? // eslint-disable-next-line no-unused-vars
|
|
64
|
+
(0, lazy_1.lazyValue)(lazyLoadMethod)
|
|
65
|
+
: typeof instanceValue === 'function'
|
|
66
|
+
? instanceValue
|
|
67
|
+
: () => instanceValue;
|
|
68
|
+
return () => {
|
|
69
|
+
return valueSelector(method(instanceValue));
|
|
70
|
+
};
|
|
71
|
+
}, getValidator: valueGetter => {
|
|
72
|
+
const validator = (0, validation_1.createPropertyValidator)(valueGetter, config);
|
|
73
|
+
const _propertyValidatorWrapper = (instance, instanceData) => __awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
return validator(instance, instanceData);
|
|
75
|
+
});
|
|
76
|
+
return _propertyValidatorWrapper;
|
|
77
|
+
} });
|
|
78
|
+
return r;
|
|
79
|
+
}
|
|
80
|
+
exports.Property = Property;
|
|
81
|
+
const DateProperty = (config = {}, additionalMetadata = {}) => Property(constants_1.PROPERTY_TYPES.DateProperty, (0, merge_1.default)({
|
|
82
|
+
lazyLoadMethod: (value) => {
|
|
83
|
+
if (!value && (config === null || config === void 0 ? void 0 : config.autoNow)) {
|
|
84
|
+
return new Date();
|
|
85
|
+
}
|
|
86
|
+
return value;
|
|
87
|
+
},
|
|
88
|
+
}, config), additionalMetadata);
|
|
89
|
+
exports.DateProperty = DateProperty;
|
|
90
|
+
const ArrayProperty = (config = {}, additionalMetadata = {}) => Property(constants_1.PROPERTY_TYPES.ArrayProperty, Object.assign(Object.assign({ defaultValue: [] }, config), { isArray: true }), additionalMetadata);
|
|
91
|
+
exports.ArrayProperty = ArrayProperty;
|
|
92
|
+
const ObjectProperty = (config = {}, additionalMetadata = {}) => Property(constants_1.PROPERTY_TYPES.ObjectProperty, (0, merge_1.default)(config, {
|
|
93
|
+
validators: _mergeValidators(config, [(0, validation_1.isType)('object')]),
|
|
94
|
+
}), additionalMetadata);
|
|
95
|
+
exports.ObjectProperty = ObjectProperty;
|
|
96
|
+
const TextProperty = (config = {}, additionalMetadata = {}) => Property(constants_1.PROPERTY_TYPES.TextProperty, (0, merge_1.default)(config, {
|
|
97
|
+
isString: true,
|
|
98
|
+
validators: _mergeValidators(config, [
|
|
99
|
+
_getValidatorFromConfigElseEmpty(config === null || config === void 0 ? void 0 : config.maxLength, (value) => (0, validation_1.maxTextLength)(value)),
|
|
100
|
+
_getValidatorFromConfigElseEmpty(config === null || config === void 0 ? void 0 : config.minLength, (value) => (0, validation_1.minTextLength)(value)),
|
|
101
|
+
]),
|
|
102
|
+
}), additionalMetadata);
|
|
103
|
+
exports.TextProperty = TextProperty;
|
|
104
|
+
const IntegerProperty = (config = {}, additionalMetadata = {}) => Property(constants_1.PROPERTY_TYPES.IntegerProperty, (0, merge_1.default)(config, {
|
|
105
|
+
isInteger: true,
|
|
106
|
+
validators: _mergeValidators(config, [
|
|
107
|
+
_getValidatorFromConfigElseEmpty(config === null || config === void 0 ? void 0 : config.minValue, value => (0, validation_1.minNumber)(value)),
|
|
108
|
+
_getValidatorFromConfigElseEmpty(config === null || config === void 0 ? void 0 : config.maxValue, value => (0, validation_1.maxNumber)(value)),
|
|
109
|
+
]),
|
|
110
|
+
}), additionalMetadata);
|
|
111
|
+
exports.IntegerProperty = IntegerProperty;
|
|
112
|
+
const NumberProperty = (config = {}, additionalMetadata = {}) => Property(constants_1.PROPERTY_TYPES.NumberProperty, (0, merge_1.default)(config, {
|
|
113
|
+
isNumber: true,
|
|
114
|
+
validators: _mergeValidators(config, [
|
|
115
|
+
_getValidatorFromConfigElseEmpty(config === null || config === void 0 ? void 0 : config.minValue, value => (0, validation_1.minNumber)(value)),
|
|
116
|
+
_getValidatorFromConfigElseEmpty(config === null || config === void 0 ? void 0 : config.maxValue, value => (0, validation_1.maxNumber)(value)),
|
|
117
|
+
]),
|
|
118
|
+
}), additionalMetadata);
|
|
119
|
+
exports.NumberProperty = NumberProperty;
|
|
120
|
+
const ConstantValueProperty = (value, config = {}, additionalMetadata = {}) => TextProperty((0, merge_1.default)(config, {
|
|
121
|
+
type: constants_1.PROPERTY_TYPES.ConstantValueProperty,
|
|
122
|
+
value,
|
|
123
|
+
}), additionalMetadata);
|
|
124
|
+
exports.ConstantValueProperty = ConstantValueProperty;
|
|
125
|
+
const EmailProperty = (config = {}, additionalMetadata = {}) => TextProperty((0, merge_1.default)(config, {
|
|
126
|
+
type: constants_1.PROPERTY_TYPES.EmailProperty,
|
|
127
|
+
validators: _mergeValidators(config, [(0, validation_1.meetsRegex)(EMAIL_REGEX)]),
|
|
128
|
+
}), additionalMetadata);
|
|
129
|
+
exports.EmailProperty = EmailProperty;
|
|
130
|
+
const BooleanProperty = (config = {}, additionalMetadata = {}) => Property(constants_1.PROPERTY_TYPES.BooleanProperty, (0, merge_1.default)(config, {
|
|
131
|
+
isBoolean: true,
|
|
132
|
+
}), additionalMetadata);
|
|
133
|
+
exports.BooleanProperty = BooleanProperty;
|
|
134
|
+
const UniqueId = (config = {}, additionalMetadata = {}) => Property(constants_1.PROPERTY_TYPES.UniqueId, (0, merge_1.default)({
|
|
135
|
+
lazyLoadMethod: (value) => {
|
|
136
|
+
if (!value) {
|
|
137
|
+
return (0, utils_1.createUuid)();
|
|
138
|
+
}
|
|
139
|
+
return value;
|
|
140
|
+
},
|
|
141
|
+
}, config), additionalMetadata);
|
|
142
|
+
exports.UniqueId = UniqueId;
|
|
143
|
+
const ReferenceProperty = (model, config = {}, additionalMetadata = {}) => {
|
|
144
|
+
if (!model) {
|
|
145
|
+
throw new Error('Must include the referenced model');
|
|
146
|
+
}
|
|
147
|
+
const _getModel = () => {
|
|
148
|
+
if (typeof model === 'function') {
|
|
149
|
+
return model();
|
|
150
|
+
}
|
|
151
|
+
return model;
|
|
152
|
+
};
|
|
153
|
+
const validators = _mergeValidators(config, [(0, validation_1.referenceTypeMatch)(model)]);
|
|
154
|
+
const _getId = (instanceValues) => () => {
|
|
155
|
+
if (!instanceValues) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
if (typeof instanceValues === 'number') {
|
|
159
|
+
return instanceValues;
|
|
160
|
+
}
|
|
161
|
+
if (typeof instanceValues === 'string') {
|
|
162
|
+
return instanceValues;
|
|
163
|
+
}
|
|
164
|
+
if (instanceValues.getPrimaryKey) {
|
|
165
|
+
return instanceValues.getPrimaryKey();
|
|
166
|
+
}
|
|
167
|
+
const theModel = _getModel();
|
|
168
|
+
const primaryKey = theModel.getPrimaryKeyName();
|
|
169
|
+
// @ts-ignore
|
|
170
|
+
return instanceValues[primaryKey];
|
|
171
|
+
};
|
|
172
|
+
const lazyLoadMethod = (instanceValues) => __awaiter(void 0, void 0, void 0, function* () {
|
|
173
|
+
const valueIsModelInstance = instanceValues && instanceValues.getPrimaryKeyName;
|
|
174
|
+
const _getInstanceReturn = (objToUse) => {
|
|
175
|
+
// We need to determine if the object we just go is an actual model instance to determine if we need to make one.
|
|
176
|
+
const objIsModelInstance = instanceValues && instanceValues.getPrimaryKeyName;
|
|
177
|
+
const instance = objIsModelInstance
|
|
178
|
+
? objToUse
|
|
179
|
+
: _getModel().create(objToUse);
|
|
180
|
+
return (0, merge_1.default)({}, instance, {
|
|
181
|
+
toObj: _getId(instanceValues),
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
if (valueIsModelInstance) {
|
|
185
|
+
return _getInstanceReturn(instanceValues);
|
|
186
|
+
}
|
|
187
|
+
if (config === null || config === void 0 ? void 0 : config.fetcher) {
|
|
188
|
+
const id = yield _getId(instanceValues)();
|
|
189
|
+
const model = _getModel();
|
|
190
|
+
if (id !== null && id !== undefined) {
|
|
191
|
+
const obj = yield config.fetcher(model, id);
|
|
192
|
+
return _getInstanceReturn(obj);
|
|
193
|
+
}
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
return _getId(instanceValues)();
|
|
197
|
+
});
|
|
198
|
+
const p = (0, merge_1.default)(Property(constants_1.PROPERTY_TYPES.ReferenceProperty, (0, merge_1.default)({}, config, {
|
|
199
|
+
validators,
|
|
200
|
+
lazyLoadMethod,
|
|
201
|
+
}), additionalMetadata), {
|
|
202
|
+
getReferencedId: (instanceValues) => _getId(instanceValues)(),
|
|
203
|
+
getReferencedModel: _getModel,
|
|
204
|
+
});
|
|
205
|
+
return p;
|
|
206
|
+
};
|
|
207
|
+
exports.ReferenceProperty = ReferenceProperty;
|
|
208
|
+
//# sourceMappingURL=properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"properties.js","sourceRoot":"","sources":["../../src/properties.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.toJsonAble = void 0;
|
|
16
|
+
const merge_1 = __importDefault(require("lodash/merge"));
|
|
17
|
+
const _getValue = (value) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
if (value === undefined) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
if (value === null) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const type = typeof value;
|
|
25
|
+
const asFunction = value;
|
|
26
|
+
if (type === 'function') {
|
|
27
|
+
return _getValue(yield asFunction());
|
|
28
|
+
}
|
|
29
|
+
// Nested Object
|
|
30
|
+
const asModel = value.toObj;
|
|
31
|
+
if (asModel) {
|
|
32
|
+
return _getValue(yield asModel());
|
|
33
|
+
}
|
|
34
|
+
// Dates
|
|
35
|
+
const asDate = value;
|
|
36
|
+
if (type === 'object' && asDate.toISOString) {
|
|
37
|
+
return _getValue(asDate.toISOString());
|
|
38
|
+
}
|
|
39
|
+
return value;
|
|
40
|
+
});
|
|
41
|
+
const toJsonAble = (keyToFunc) => () => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
|
+
return Object.entries(keyToFunc).reduce((acc, [key, value]) => __awaiter(void 0, void 0, void 0, function* () {
|
|
43
|
+
const realAcc = yield acc;
|
|
44
|
+
const trueValue = yield _getValue(yield value);
|
|
45
|
+
return (0, merge_1.default)(realAcc, { [key]: trueValue });
|
|
46
|
+
}), Promise.resolve({}));
|
|
47
|
+
});
|
|
48
|
+
exports.toJsonAble = toJsonAble;
|
|
49
|
+
//# sourceMappingURL=serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../src/serialization.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yDAAgC;AAGhC,MAAM,SAAS,GAAG,CAAO,KAAU,EAAqB,EAAE;IACxD,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,OAAO,IAAI,CAAA;KACZ;IACD,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,OAAO,IAAI,CAAA;KACZ;IACD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAA;IACzB,MAAM,UAAU,GAAG,KAAiB,CAAA;IACpC,IAAI,IAAI,KAAK,UAAU,EAAE;QACvB,OAAO,SAAS,CAAC,MAAM,UAAU,EAAE,CAAC,CAAA;KACrC;IACD,gBAAgB;IAChB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAA;IAC3B,IAAI,OAAO,EAAE;QACX,OAAO,SAAS,CAAC,MAAM,OAAO,EAAE,CAAC,CAAA;KAClC;IACD,QAAQ;IACR,MAAM,MAAM,GAAG,KAAa,CAAA;IAC5B,IAAI,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE;QAC3C,OAAO,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;KACvC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA,CAAA;AAED,MAAM,UAAU,GACd,CAAC,SAA+B,EAAS,EAAE,CAC3C,GAAS,EAAE;IACT,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAO,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAClE,MAAM,OAAO,GAAG,MAAM,GAAG,CAAA;QACzB,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,MAAM,KAAK,CAAC,CAAA;QAC9C,OAAO,IAAA,eAAK,EAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;IAC7C,CAAC,CAAA,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;AACzB,CAAC,CAAA,CAAA;AAEM,gCAAU"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createUuid = exports.toTitleCase = exports.loweredTitleCase = void 0;
|
|
7
|
+
// @ts-ignore
|
|
8
|
+
const get_random_values_1 = __importDefault(require("get-random-values"));
|
|
9
|
+
const HEX = 16;
|
|
10
|
+
const FOUR = 4;
|
|
11
|
+
const FIFTEEN = 15;
|
|
12
|
+
const getRandomValues = () => {
|
|
13
|
+
const array = new Uint8Array(1);
|
|
14
|
+
if (typeof window !== 'undefined') {
|
|
15
|
+
if (window.crypto) {
|
|
16
|
+
return window.crypto.getRandomValues(array);
|
|
17
|
+
}
|
|
18
|
+
// @ts-ignore
|
|
19
|
+
if (window.msCrypto) {
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
return window.msCrypto.getRandomValues(array);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return (0, get_random_values_1.default)(array);
|
|
25
|
+
};
|
|
26
|
+
const createUuid = () => {
|
|
27
|
+
// eslint-disable-next-line no-magic-numbers,require-unicode-regexp
|
|
28
|
+
// @ts-ignore
|
|
29
|
+
// eslint-disable-next-line no-magic-numbers,require-unicode-regexp
|
|
30
|
+
return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) => {
|
|
31
|
+
const value = getRandomValues()[0] & (FIFTEEN >> (c / FOUR));
|
|
32
|
+
return (c ^ value).toString(HEX);
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
exports.createUuid = createUuid;
|
|
36
|
+
const toTitleCase = (string) => {
|
|
37
|
+
return `${string.slice(0, 1).toUpperCase()}${string.slice(1)}`;
|
|
38
|
+
};
|
|
39
|
+
exports.toTitleCase = toTitleCase;
|
|
40
|
+
const loweredTitleCase = (string) => {
|
|
41
|
+
return `${string.slice(0, 1).toLowerCase()}${string.slice(1)}`;
|
|
42
|
+
};
|
|
43
|
+
exports.loweredTitleCase = loweredTitleCase;
|
|
44
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;;;;AAAA,aAAa;AACb,0EAAmD;AAEnD,MAAM,GAAG,GAAG,EAAE,CAAA;AACd,MAAM,IAAI,GAAG,CAAC,CAAA;AACd,MAAM,OAAO,GAAG,EAAE,CAAA;AAElB,MAAM,eAAe,GAAG,GAAe,EAAE;IACvC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;IAC/B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;SAC5C;QACD,aAAa;QACb,IAAI,MAAM,CAAC,QAAQ,EAAE;YACnB,aAAa;YACb,OAAO,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;SAC9C;KACF;IAED,OAAO,IAAA,2BAAmB,EAAC,KAAK,CAAC,CAAA;AACnC,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,GAAW,EAAE;IAC9B,mEAAmE;IACnE,aAAa;IACb,mEAAmE;IACnE,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAM,EAAE,EAAE;QACvE,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAC5D,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAUuC,gCAAU;AARlD,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,EAAE;IACrC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AAChE,CAAC,CAAA;AAM0B,kCAAW;AAJtC,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,EAAE;IAC1C,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AAChE,CAAC,CAAA;AAEQ,4CAAgB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { FunctionalModel, ModelInstance, Model, ModelComponentValidator, PropertyValidatorComponent, PropertyValidatorComponentType, PropertyValidatorComponentSync, PropertyValidatorComponentTypeAdvanced, PropertyValidator, PropertyConfig, MaybeFunction, PropertyValidators, ValueGetter, FunctionalType, ModelErrors } from './interfaces';
|
|
2
|
+
declare const TYPE_PRIMITIVES: {
|
|
3
|
+
boolean: string;
|
|
4
|
+
string: string;
|
|
5
|
+
object: string;
|
|
6
|
+
number: string;
|
|
7
|
+
integer: string;
|
|
8
|
+
};
|
|
9
|
+
declare const isType: (type: string) => PropertyValidatorComponentSync;
|
|
10
|
+
declare const isNumber: PropertyValidatorComponentSync;
|
|
11
|
+
declare const isInteger: PropertyValidatorComponentSync;
|
|
12
|
+
declare const isBoolean: PropertyValidatorComponentSync;
|
|
13
|
+
declare const isString: PropertyValidatorComponentSync;
|
|
14
|
+
declare const isArray: PropertyValidatorComponentSync;
|
|
15
|
+
declare const arrayType: (type: string) => PropertyValidatorComponentSync;
|
|
16
|
+
declare const meetsRegex: (regex: string | RegExp, flags?: string | undefined, errorMessage?: string) => PropertyValidatorComponentSync;
|
|
17
|
+
declare const choices: (choiceArray: readonly FunctionalType[]) => PropertyValidatorComponentSync;
|
|
18
|
+
declare const isDate: PropertyValidatorComponentType<Date>;
|
|
19
|
+
declare const isRequired: PropertyValidatorComponentSync;
|
|
20
|
+
declare const maxNumber: (max: Number) => PropertyValidatorComponentType<number>;
|
|
21
|
+
declare const minNumber: (min: Number) => PropertyValidatorComponentType<number>;
|
|
22
|
+
declare const maxTextLength: (max: Number) => PropertyValidatorComponentType<string>;
|
|
23
|
+
declare const minTextLength: (min: Number) => PropertyValidatorComponentType<string>;
|
|
24
|
+
declare const referenceTypeMatch: <TModel extends FunctionalModel>(referencedModel: MaybeFunction<Model<TModel>>) => PropertyValidatorComponentTypeAdvanced<ModelInstance<TModel>, TModel>;
|
|
25
|
+
declare const aggregateValidator: (value: any, methodOrMethods: PropertyValidatorComponent | readonly PropertyValidatorComponent[]) => PropertyValidator;
|
|
26
|
+
declare const emptyValidator: PropertyValidatorComponentSync;
|
|
27
|
+
declare const createPropertyValidator: (valueGetter: ValueGetter, config: PropertyConfig) => PropertyValidator;
|
|
28
|
+
declare const createModelValidator: (validators: PropertyValidators, modelValidators?: readonly ModelComponentValidator[] | undefined) => (instance: ModelInstance<any>, options: object) => Promise<ModelErrors>;
|
|
29
|
+
export { isNumber, isBoolean, isString, isInteger, isType, isDate, isArray, isRequired, maxNumber, minNumber, choices, maxTextLength, minTextLength, meetsRegex, aggregateValidator, emptyValidator, createPropertyValidator, createModelValidator, arrayType, referenceTypeMatch, TYPE_PRIMITIVES, };
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.TYPE_PRIMITIVES = exports.referenceTypeMatch = exports.arrayType = exports.createModelValidator = exports.createPropertyValidator = exports.emptyValidator = exports.aggregateValidator = exports.meetsRegex = exports.minTextLength = exports.maxTextLength = exports.choices = exports.minNumber = exports.maxNumber = exports.isRequired = exports.isArray = exports.isDate = exports.isType = exports.isInteger = exports.isString = exports.isBoolean = exports.isNumber = void 0;
|
|
16
|
+
const isEmpty_1 = __importDefault(require("lodash/isEmpty"));
|
|
17
|
+
const merge_1 = __importDefault(require("lodash/merge"));
|
|
18
|
+
const flatMap_1 = __importDefault(require("lodash/flatMap"));
|
|
19
|
+
const TYPE_PRIMITIVES = {
|
|
20
|
+
boolean: 'boolean',
|
|
21
|
+
string: 'string',
|
|
22
|
+
object: 'object',
|
|
23
|
+
number: 'number',
|
|
24
|
+
integer: 'integer',
|
|
25
|
+
};
|
|
26
|
+
exports.TYPE_PRIMITIVES = TYPE_PRIMITIVES;
|
|
27
|
+
const filterEmpty = (array) => {
|
|
28
|
+
return array.filter(x => x);
|
|
29
|
+
};
|
|
30
|
+
const _trueOrError = (method, error) => (value) => {
|
|
31
|
+
if (method(value) === false) {
|
|
32
|
+
return error;
|
|
33
|
+
}
|
|
34
|
+
return undefined;
|
|
35
|
+
};
|
|
36
|
+
const _typeOrError = (type, errorMessage) => (value) => {
|
|
37
|
+
if (typeof value !== type) {
|
|
38
|
+
return errorMessage;
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
};
|
|
42
|
+
const isType = (type) => (value) => {
|
|
43
|
+
// @ts-ignore
|
|
44
|
+
return _typeOrError(type, `Must be a ${type}`)(value);
|
|
45
|
+
};
|
|
46
|
+
exports.isType = isType;
|
|
47
|
+
const isNumber = isType('number');
|
|
48
|
+
exports.isNumber = isNumber;
|
|
49
|
+
const isInteger = _trueOrError(Number.isInteger, 'Must be an integer');
|
|
50
|
+
exports.isInteger = isInteger;
|
|
51
|
+
const isBoolean = isType('boolean');
|
|
52
|
+
exports.isBoolean = isBoolean;
|
|
53
|
+
const isString = isType('string');
|
|
54
|
+
exports.isString = isString;
|
|
55
|
+
const isArray = _trueOrError((v) => Array.isArray(v), 'Value is not an array');
|
|
56
|
+
exports.isArray = isArray;
|
|
57
|
+
const PRIMITIVE_TO_SPECIAL_TYPE_VALIDATOR = {
|
|
58
|
+
[TYPE_PRIMITIVES.boolean]: isBoolean,
|
|
59
|
+
[TYPE_PRIMITIVES.string]: isString,
|
|
60
|
+
[TYPE_PRIMITIVES.integer]: isInteger,
|
|
61
|
+
[TYPE_PRIMITIVES.number]: isNumber,
|
|
62
|
+
};
|
|
63
|
+
const arrayType = (type) => (value) => {
|
|
64
|
+
// @ts-ignore
|
|
65
|
+
const arrayError = isArray(value);
|
|
66
|
+
if (arrayError) {
|
|
67
|
+
return arrayError;
|
|
68
|
+
}
|
|
69
|
+
const validator = PRIMITIVE_TO_SPECIAL_TYPE_VALIDATOR[type] || isType(type);
|
|
70
|
+
return value.reduce((acc, v) => {
|
|
71
|
+
if (acc) {
|
|
72
|
+
return acc;
|
|
73
|
+
}
|
|
74
|
+
// @ts-ignore
|
|
75
|
+
return validator(v);
|
|
76
|
+
}, undefined);
|
|
77
|
+
};
|
|
78
|
+
exports.arrayType = arrayType;
|
|
79
|
+
const meetsRegex = (regex, flags, errorMessage = 'Format was invalid') => (value) => {
|
|
80
|
+
const reg = new RegExp(regex, flags);
|
|
81
|
+
// @ts-ignore
|
|
82
|
+
return _trueOrError((v) => reg.test(v), errorMessage)(value);
|
|
83
|
+
};
|
|
84
|
+
exports.meetsRegex = meetsRegex;
|
|
85
|
+
const choices = (choiceArray) => (value) => {
|
|
86
|
+
if (Array.isArray(value)) {
|
|
87
|
+
const bad = value.find(v => !choiceArray.includes(v));
|
|
88
|
+
if (bad) {
|
|
89
|
+
return `${bad} is not a valid choice`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
if (!choiceArray.includes(value)) {
|
|
94
|
+
return `${value} is not a valid choice`;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
};
|
|
99
|
+
exports.choices = choices;
|
|
100
|
+
const isDate = (value) => {
|
|
101
|
+
if (!value) {
|
|
102
|
+
return 'Date value is empty';
|
|
103
|
+
}
|
|
104
|
+
if (!value.toISOString) {
|
|
105
|
+
return 'Value is not a date';
|
|
106
|
+
}
|
|
107
|
+
return undefined;
|
|
108
|
+
};
|
|
109
|
+
exports.isDate = isDate;
|
|
110
|
+
const isRequired = (value) => {
|
|
111
|
+
if (value === true || value === false) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
// @ts-ignore
|
|
115
|
+
if (isNumber(value) === undefined) {
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
const empty = (0, isEmpty_1.default)(value);
|
|
119
|
+
if (empty) {
|
|
120
|
+
// @ts-ignore
|
|
121
|
+
if (isDate(value)) {
|
|
122
|
+
return 'A value is required';
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return undefined;
|
|
126
|
+
};
|
|
127
|
+
exports.isRequired = isRequired;
|
|
128
|
+
const maxNumber = (max) => (value) => {
|
|
129
|
+
// @ts-ignore
|
|
130
|
+
const numberError = isNumber(value);
|
|
131
|
+
if (numberError) {
|
|
132
|
+
return numberError;
|
|
133
|
+
}
|
|
134
|
+
if (value && value > max) {
|
|
135
|
+
return `The maximum is ${max}`;
|
|
136
|
+
}
|
|
137
|
+
return undefined;
|
|
138
|
+
};
|
|
139
|
+
exports.maxNumber = maxNumber;
|
|
140
|
+
const minNumber = (min) => (value) => {
|
|
141
|
+
// @ts-ignore
|
|
142
|
+
const numberError = isNumber(value);
|
|
143
|
+
if (numberError) {
|
|
144
|
+
return numberError;
|
|
145
|
+
}
|
|
146
|
+
if (value && value < min) {
|
|
147
|
+
return `The minimum is ${min}`;
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
150
|
+
};
|
|
151
|
+
exports.minNumber = minNumber;
|
|
152
|
+
const maxTextLength = (max) => (value) => {
|
|
153
|
+
// @ts-ignore
|
|
154
|
+
const stringError = isString(value);
|
|
155
|
+
if (stringError) {
|
|
156
|
+
return stringError;
|
|
157
|
+
}
|
|
158
|
+
if (value && value.length > max) {
|
|
159
|
+
return `The maximum length is ${max}`;
|
|
160
|
+
}
|
|
161
|
+
return undefined;
|
|
162
|
+
};
|
|
163
|
+
exports.maxTextLength = maxTextLength;
|
|
164
|
+
const minTextLength = (min) => (value) => {
|
|
165
|
+
// @ts-ignore
|
|
166
|
+
const stringError = isString(value);
|
|
167
|
+
if (stringError) {
|
|
168
|
+
return stringError;
|
|
169
|
+
}
|
|
170
|
+
if (value && value.length < min) {
|
|
171
|
+
return `The minimum length is ${min}`;
|
|
172
|
+
}
|
|
173
|
+
return undefined;
|
|
174
|
+
};
|
|
175
|
+
exports.minTextLength = minTextLength;
|
|
176
|
+
const referenceTypeMatch = (referencedModel) => {
|
|
177
|
+
return (value) => {
|
|
178
|
+
if (!value) {
|
|
179
|
+
return 'Must include a value';
|
|
180
|
+
}
|
|
181
|
+
// This needs to stay here, as it delays the creation long enough for
|
|
182
|
+
// self referencing types.
|
|
183
|
+
const model = typeof referencedModel === 'function'
|
|
184
|
+
? referencedModel()
|
|
185
|
+
: referencedModel;
|
|
186
|
+
// Assumption: By the time this is received, value === a model instance.
|
|
187
|
+
const eModel = model.getName();
|
|
188
|
+
const aModel = value.getModel().getName();
|
|
189
|
+
if (eModel !== aModel) {
|
|
190
|
+
return `Model should be ${eModel} instead, received ${aModel}`;
|
|
191
|
+
}
|
|
192
|
+
return undefined;
|
|
193
|
+
};
|
|
194
|
+
};
|
|
195
|
+
exports.referenceTypeMatch = referenceTypeMatch;
|
|
196
|
+
const aggregateValidator = (value, methodOrMethods) => {
|
|
197
|
+
const toDo = Array.isArray(methodOrMethods)
|
|
198
|
+
? methodOrMethods
|
|
199
|
+
: [methodOrMethods];
|
|
200
|
+
const _aggregativeValidator = (instance, instanceData) => __awaiter(void 0, void 0, void 0, function* () {
|
|
201
|
+
const values = yield Promise.all(toDo.map(method => {
|
|
202
|
+
return method(value, instance, instanceData);
|
|
203
|
+
}));
|
|
204
|
+
return filterEmpty(values);
|
|
205
|
+
});
|
|
206
|
+
return _aggregativeValidator;
|
|
207
|
+
};
|
|
208
|
+
exports.aggregateValidator = aggregateValidator;
|
|
209
|
+
const emptyValidator = () => undefined;
|
|
210
|
+
exports.emptyValidator = emptyValidator;
|
|
211
|
+
const _boolChoice = (method) => (configValue) => {
|
|
212
|
+
const func = method(configValue);
|
|
213
|
+
const validatorWrapper = (value, modelInstance, modelData) => {
|
|
214
|
+
return func(value, modelInstance, modelData);
|
|
215
|
+
};
|
|
216
|
+
return validatorWrapper;
|
|
217
|
+
};
|
|
218
|
+
const simpleFuncWrap = (validator) => () => {
|
|
219
|
+
return validator;
|
|
220
|
+
};
|
|
221
|
+
const CONFIG_TO_VALIDATE_METHOD = {
|
|
222
|
+
required: _boolChoice(simpleFuncWrap(isRequired)),
|
|
223
|
+
isInteger: _boolChoice(simpleFuncWrap(isInteger)),
|
|
224
|
+
isNumber: _boolChoice(simpleFuncWrap(isNumber)),
|
|
225
|
+
isString: _boolChoice(simpleFuncWrap(isString)),
|
|
226
|
+
isArray: _boolChoice(simpleFuncWrap(isArray)),
|
|
227
|
+
isBoolean: _boolChoice(simpleFuncWrap(isBoolean)),
|
|
228
|
+
choices: _boolChoice(choices),
|
|
229
|
+
};
|
|
230
|
+
const createPropertyValidator = (valueGetter, config) => {
|
|
231
|
+
const _propertyValidator = (instance, instanceData) => __awaiter(void 0, void 0, void 0, function* () {
|
|
232
|
+
if (!config) {
|
|
233
|
+
config = {};
|
|
234
|
+
}
|
|
235
|
+
const validators = [
|
|
236
|
+
...Object.entries(config).map(([key, value]) => {
|
|
237
|
+
const method = CONFIG_TO_VALIDATE_METHOD[key];
|
|
238
|
+
if (method) {
|
|
239
|
+
return method(value);
|
|
240
|
+
}
|
|
241
|
+
return emptyValidator;
|
|
242
|
+
}),
|
|
243
|
+
...(config.validators ? config.validators : []),
|
|
244
|
+
].filter(x => x);
|
|
245
|
+
const value = yield valueGetter();
|
|
246
|
+
const isRequiredValue = config.required
|
|
247
|
+
? true
|
|
248
|
+
: validators.includes(isRequired);
|
|
249
|
+
if (!value && !isRequiredValue) {
|
|
250
|
+
return [];
|
|
251
|
+
}
|
|
252
|
+
const validator = aggregateValidator(value, validators);
|
|
253
|
+
const errors = yield validator(instance, instanceData);
|
|
254
|
+
return [...new Set((0, flatMap_1.default)(errors))];
|
|
255
|
+
});
|
|
256
|
+
return _propertyValidator;
|
|
257
|
+
};
|
|
258
|
+
exports.createPropertyValidator = createPropertyValidator;
|
|
259
|
+
const createModelValidator = (validators, modelValidators) => {
|
|
260
|
+
const _modelValidator = (instance, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
261
|
+
return Promise.resolve().then(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
262
|
+
if (!instance) {
|
|
263
|
+
throw new Error(`Instance cannot be empty`);
|
|
264
|
+
}
|
|
265
|
+
const keysAndFunctions = Object.entries(validators);
|
|
266
|
+
const instanceData = yield instance.toObj();
|
|
267
|
+
const propertyValidationErrors = yield Promise.all(keysAndFunctions.map(([key, validator]) => __awaiter(void 0, void 0, void 0, function* () {
|
|
268
|
+
return [key, yield validator(instance, instanceData)];
|
|
269
|
+
})));
|
|
270
|
+
const modelValidationErrors = (yield Promise.all(modelValidators
|
|
271
|
+
? modelValidators.map(validator => validator(instance, instanceData, options))
|
|
272
|
+
: [])).filter(x => x);
|
|
273
|
+
const propertyErrors = propertyValidationErrors
|
|
274
|
+
.filter(([, errors]) => Boolean(errors) && errors.length > 0)
|
|
275
|
+
.reduce((acc, [key, errors]) => {
|
|
276
|
+
return (0, merge_1.default)(acc, { [String(key)]: errors });
|
|
277
|
+
}, {});
|
|
278
|
+
return modelValidationErrors.length > 0
|
|
279
|
+
? (0, merge_1.default)(propertyErrors, { overall: modelValidationErrors })
|
|
280
|
+
: propertyErrors;
|
|
281
|
+
}));
|
|
282
|
+
});
|
|
283
|
+
return _modelValidator;
|
|
284
|
+
};
|
|
285
|
+
exports.createModelValidator = createModelValidator;
|
|
286
|
+
//# sourceMappingURL=validation.js.map
|