@fgv/ts-utils 1.2.0-alpha.2 → 1.3.0
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/LICENSE +0 -0
- package/README.md +4 -0
- package/brand.d.ts +2 -0
- package/brand.d.ts.map +1 -0
- package/brand.js +1 -1
- package/converter.d.ts +185 -73
- package/converter.d.ts.map +1 -0
- package/converter.js +104 -51
- package/converters.d.ts +440 -182
- package/converters.d.ts.map +1 -0
- package/converters.js +358 -209
- package/csvHelpers.d.ts +7 -0
- package/csvHelpers.d.ts.map +1 -0
- package/csvHelpers.js +14 -4
- package/extendedArray.d.ts +46 -0
- package/extendedArray.d.ts.map +1 -0
- package/extendedArray.js +53 -8
- package/formatter.d.ts +53 -0
- package/formatter.d.ts.map +1 -0
- package/formatter.js +27 -4
- package/hash.d.ts +51 -0
- package/hash.d.ts.map +1 -0
- package/hash.js +168 -0
- package/index.d.ts +6 -2
- package/index.d.ts.map +1 -0
- package/index.js +15 -5
- package/logger.d.ts +3 -2
- package/logger.d.ts.map +1 -0
- package/logger.js +12 -12
- package/package.json +24 -20
- package/rangeOf.d.ts +96 -0
- package/rangeOf.d.ts.map +1 -0
- package/rangeOf.js +81 -2
- package/result.d.ts +391 -39
- package/result.d.ts.map +1 -0
- package/result.js +257 -49
- package/ts-utils.d.ts +2451 -0
- package/tsdoc-metadata.json +11 -0
- package/utils.d.ts +49 -27
- package/utils.d.ts.map +1 -0
- package/utils.js +53 -36
- package/validation/boolean.d.ts +27 -0
- package/validation/boolean.d.ts.map +1 -0
- package/validation/boolean.js +59 -0
- package/validation/classes.d.ts +5 -1
- package/validation/classes.d.ts.map +1 -0
- package/validation/classes.js +9 -2
- package/validation/field.d.ts +30 -0
- package/validation/field.d.ts.map +1 -0
- package/validation/field.js +23 -5
- package/validation/genericValidator.d.ts +41 -22
- package/validation/genericValidator.d.ts.map +1 -0
- package/validation/genericValidator.js +25 -26
- package/validation/index.d.ts +5 -3
- package/validation/index.d.ts.map +1 -0
- package/validation/index.js +15 -8
- package/validation/number.d.ts +20 -0
- package/validation/number.d.ts.map +1 -0
- package/validation/number.js +17 -2
- package/validation/object.d.ts +76 -11
- package/validation/object.d.ts.map +1 -0
- package/validation/object.js +52 -14
- package/validation/string.d.ts +20 -0
- package/validation/string.d.ts.map +1 -0
- package/validation/string.js +17 -2
- package/validation/traits.d.ts +50 -1
- package/validation/traits.d.ts.map +1 -0
- package/validation/traits.js +15 -2
- package/validation/validator.d.ts +44 -23
- package/validation/validator.d.ts.map +1 -0
- package/validation/validator.js +1 -1
- package/validation/validatorBase.d.ts +16 -1
- package/validation/validatorBase.d.ts.map +1 -0
- package/validation/validatorBase.js +7 -1
- package/validation/validators.d.ts +26 -2
- package/validation/validators.d.ts.map +1 -0
- package/validation/validators.js +26 -8
package/validation/object.js
CHANGED
|
@@ -26,17 +26,20 @@ const result_1 = require("../result");
|
|
|
26
26
|
const validatorBase_1 = require("./validatorBase");
|
|
27
27
|
const field_1 = require("./field");
|
|
28
28
|
/**
|
|
29
|
-
* In-place
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
29
|
+
* In-place {@link Validation.Validator | Validator} for an object of type `<T>`.
|
|
30
|
+
* @remarks
|
|
31
|
+
* By default, succeeds if all of the required fields exist and are validate, and fails if
|
|
32
|
+
* any required fields do not exist or are invalid. See {@link Validation.Classes.ObjectValidatorOptions}
|
|
33
|
+
* for other validation options.
|
|
34
|
+
* @public
|
|
33
35
|
*/
|
|
34
36
|
class ObjectValidator extends validatorBase_1.ValidatorBase {
|
|
35
37
|
/**
|
|
36
|
-
* Constructs a new @
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* @param options An optional @
|
|
38
|
+
* Constructs a new {@link Validation.Classes.ObjectValidator | ObjectValidator<T>}.
|
|
39
|
+
* @param fields - A {@link Validation.Classes.FieldValidators | FieldValidators<T>} containing
|
|
40
|
+
* a {@link Validation.Validator | Validator} for each field.
|
|
41
|
+
* @param options - An optional {@link Validation.Classes.ObjectValidatorOptions} to configure
|
|
42
|
+
* validation.
|
|
40
43
|
*/
|
|
41
44
|
constructor(params) {
|
|
42
45
|
var _a;
|
|
@@ -48,36 +51,71 @@ class ObjectValidator extends validatorBase_1.ValidatorBase {
|
|
|
48
51
|
? new Set(Object.keys(this.fields))
|
|
49
52
|
: undefined;
|
|
50
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Creates the actual {@link Validation.Classes.FieldValidators | FieldValidators<T>} to be
|
|
56
|
+
* used by this converter by applying any options or traits defined in the options
|
|
57
|
+
* to the field converters passed to the constructor.
|
|
58
|
+
* @param fields - The base {@link Validation.Classes.FieldValidators | FieldValidators<T>} passed
|
|
59
|
+
* in to the constructor.
|
|
60
|
+
* @param options - The {@link Validation.Classes.ObjectValidatorOptions | object validator options}
|
|
61
|
+
* passed in to the constructor.
|
|
62
|
+
* @returns A new {@link Validation.Classes.FieldValidators | FieldValidators} with the fully-configured
|
|
63
|
+
* individual {@link Validation.Validator | field validators} to be applied.
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
51
66
|
static _resolveValidators(fields, options) {
|
|
52
67
|
var _a;
|
|
53
68
|
const resolved = {};
|
|
54
69
|
for (const key in fields) {
|
|
55
70
|
if (fields[key]) {
|
|
71
|
+
// istanbul ignore next
|
|
56
72
|
const optional = fields[key].isOptional || ((_a = options === null || options === void 0 ? void 0 : options.optionalFields) === null || _a === void 0 ? void 0 : _a.includes(key));
|
|
57
73
|
resolved[key] = new field_1.FieldValidator(key, fields[key], { optional });
|
|
58
74
|
}
|
|
59
75
|
}
|
|
60
76
|
return resolved;
|
|
61
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Creates a new {@link Validation.Classes.ObjectValidator | ObjectValidator} derived from this one but with
|
|
80
|
+
* new optional properties as specified by a supplied
|
|
81
|
+
* {@link Validation.Classes.ObjectValidatorOptions | ObjectValidatorOptions<T>}.
|
|
82
|
+
* @param options - The {@link Validation.Classes.ObjectValidatorOptions | options} to be applied to the new
|
|
83
|
+
* {@link Validation.Classes.ObjectValidator | validator}.
|
|
84
|
+
* @returns A new {@link Validation.Classes.ObjectValidator | ObjectValidator} with the additional optional
|
|
85
|
+
* source properties.
|
|
86
|
+
*/
|
|
62
87
|
partial(options) {
|
|
88
|
+
// istanbul ignore next
|
|
89
|
+
options = options !== null && options !== void 0 ? options : {};
|
|
63
90
|
return new ObjectValidator({
|
|
64
91
|
fields: this.fields,
|
|
65
92
|
options: {
|
|
66
93
|
...this.options,
|
|
67
|
-
...
|
|
94
|
+
...options,
|
|
68
95
|
},
|
|
69
96
|
traits: this.traits,
|
|
70
97
|
});
|
|
71
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Creates a new {@link Validation.Classes.ObjectValidator | ObjectValidator} derived from this one but with
|
|
101
|
+
* new optional properties as specified by a supplied array of `keyof T`.
|
|
102
|
+
* @param addOptionalProperties - The keys to be made optional.
|
|
103
|
+
* @returns A new {@link Validation.Classes.ObjectValidator | ObjectValidator} with the additional optional
|
|
104
|
+
* source properties.
|
|
105
|
+
*/
|
|
72
106
|
addPartial(addOptionalFields) {
|
|
73
107
|
var _a;
|
|
74
108
|
return this.partial({
|
|
75
|
-
optionalFields: [...(_a = this.options.optionalFields) !== null && _a !== void 0 ? _a : [], ...addOptionalFields],
|
|
109
|
+
optionalFields: [...((_a = this.options.optionalFields) !== null && _a !== void 0 ? _a : []), ...addOptionalFields],
|
|
76
110
|
});
|
|
77
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* {@inheritdoc Validation.ValidatorBase._validate}
|
|
114
|
+
* @internal
|
|
115
|
+
*/
|
|
78
116
|
_validate(from, context) {
|
|
79
117
|
if ((typeof from !== 'object') || (from === null) || Array.isArray(from)) {
|
|
80
|
-
return result_1.fail('source is not an object');
|
|
118
|
+
return (0, result_1.fail)('source is not an object');
|
|
81
119
|
}
|
|
82
120
|
// eslint bug thinks key is used before defined
|
|
83
121
|
// eslint-disable-next-line no-use-before-define
|
|
@@ -95,11 +133,11 @@ class ObjectValidator extends validatorBase_1.ValidatorBase {
|
|
|
95
133
|
}
|
|
96
134
|
}
|
|
97
135
|
if (this._allowedFields) {
|
|
98
|
-
const invalid = Object.keys(from).filter((k) =>
|
|
136
|
+
const invalid = Object.keys(from).filter((k) => !this._allowedFields.has(k));
|
|
99
137
|
invalid.forEach((key) => errors.push((`${key}: unexpected field in source object.`)));
|
|
100
138
|
}
|
|
101
|
-
return (errors.length === 0) ? true : result_1.fail(errors.join('\n'));
|
|
139
|
+
return (errors.length === 0) ? true : (0, result_1.fail)(errors.join('\n'));
|
|
102
140
|
}
|
|
103
141
|
}
|
|
104
142
|
exports.ObjectValidator = ObjectValidator;
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7OztBQUVILHNDQUEwQztBQUUxQyxtREFBZ0Y7QUFFaEYsbUNBQXlDO0FBMkJ6Qzs7Ozs7R0FLRztBQUNILE1BQWEsZUFBK0IsU0FBUSw2QkFBb0I7SUFNcEU7Ozs7O09BS0c7SUFDSCxZQUFtQixNQUErQzs7UUFDOUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBQSxNQUFNLENBQUMsT0FBTyxtQ0FBSSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDO1lBQ2hELENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQWdCLENBQUM7WUFDbEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwQixDQUFDO0lBRVMsTUFBTSxDQUFDLGtCQUFrQixDQUMvQixNQUE4QixFQUM5QixPQUF1Qzs7UUFFdkMsTUFBTSxRQUFRLEdBQW9DLEVBQUUsQ0FBQztRQUNyRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRTtZQUN0QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDYixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxLQUFJLE1BQUEsT0FBTyxh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RkQsMENBaUZDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMSBFcmlrIEZvcnR1bmVcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IEZhaWx1cmUsIGZhaWwgfSBmcm9tICcuLi9yZXN1bHQnO1xuaW1wb3J0IHsgVmFsaWRhdG9yLCBWYWxpZGF0b3JPcHRpb25zIH0gZnJvbSAnLi92YWxpZGF0b3InO1xuaW1wb3J0IHsgVmFsaWRhdG9yQmFzZSwgVmFsaWRhdG9yQmFzZUNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi92YWxpZGF0b3JCYXNlJztcblxuaW1wb3J0IHsgRmllbGRWYWxpZGF0b3IgfSBmcm9tICcuL2ZpZWxkJztcblxuLyoqXG4gKiBQZXItcHJvcGVydHkgdmFsaWRhdG9ycyBmb3IgZWFjaCBvZiB0aGUgcHJvcGVydGllcyBpbiB0eXBlIFRcbiAqL1xuZXhwb3J0IHR5cGUgRmllbGRWYWxpZGF0b3JzPFQsIFRDPXVua25vd24+ID0geyBba2V5IGluIGtleW9mIFRdOiBWYWxpZGF0b3I8VFtrZXldLCBUQz4gfTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBhbiBAc2VlIE9iamVjdFZhbGlkYXRvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYmplY3RWYWxpZGF0b3JPcHRpb25zPFQsIFRDPiBleHRlbmRzIFZhbGlkYXRvck9wdGlvbnM8VEM+IHtcbiAgICAvKipcbiAgICAgKiBJZiBwcmVzZW50LCBsaXN0cyBvcHRpb25hbCBmaWVsZHMuIE1pc3Npbmcgbm9uLW9wdGlvbmFsIGZpZWxkcyBjYXVzZSBhbiBlcnJvci5cbiAgICAgKi9cbiAgICBvcHRpb25hbEZpZWxkcz86IChrZXlvZiBUKVtdO1xuICAgIC8qKlxuICAgICAqIElmIHRydWUsIHVucmVjb2duaXplZCBmaWVsZHMgeWllbGQgYW4gZXJyb3IuICBJZiBmYWxzZSBvciB1bmRlZmluZWQgKGRlZmF1bHQpLFxuICAgICAqIHVucmVjb2duaXplZCBmaWVsZHMgYXJlIGlnbm9yZWQuXG4gICAgICovXG4gICAgc3RyaWN0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPYmplY3RWYWxpZGF0b3JDb25zdHJ1Y3RvclBhcmFtczxULCBUQz4gZXh0ZW5kcyBWYWxpZGF0b3JCYXNlQ29uc3RydWN0b3JQYXJhbXM8VCwgVEM+IHtcbiAgICBmaWVsZHM6IEZpZWxkVmFsaWRhdG9yczxUPixcbiAgICBvcHRpb25zPzogT2JqZWN0VmFsaWRhdG9yT3B0aW9uczxULCBUQz47XG59XG5cbi8qKlxuICogSW4tcGxhY2UgdmFsaWRhdGlvbiBmb3IgYW4gb2JqZWN0IG9mIHR5cGUgVCwgZ2l2ZW4gYSBAc2VlIEZpZWxkVmFsaWRhdG9yczxUPi5cbiAqIElmIGFsbCBvZiB0aGUgcmVxdWlyZWQgZmllbGRzIGV4aXN0IGFuZCBhciB2YWxpZCwgcmV0dXJucyBhIHN0cm9uZ2x5IHR5cGVkIHJlZmVyZW5jZVxuICogdG8gdGhlIG9iamVjdC4gIElmIGFueSByZXF1aXJlZCBmaWVsZHMgZG8gbm90IGV4aXN0IG9yIGFyZSBpbnZhbGlkLCByZXR1cm5zIEBzZWUgRmFpbHVyZVxuICogd2l0aCBhbiBlcnJvciBkZXNjcmlwdGlvbi4gIFNlZSBAc2VlIE9iamVjdFZhbGlkYXRvck9wdGlvbnMgZm9yIG90aGVyIHZhbGlkYXRpb3Jpb24gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIE9iamVjdFZhbGlkYXRvcjxULCBUQz11bmtub3duPiBleHRlbmRzIFZhbGlkYXRvckJhc2U8VCwgVEM+IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmllbGRzOiBGaWVsZFZhbGlkYXRvcnM8VD47XG4gICAgcHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IE9iamVjdFZhbGlkYXRvck9wdGlvbnM8VCwgVEM+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfaW5uZXJWYWxpZGF0b3JzOiBGaWVsZFZhbGlkYXRvcnM8VD47XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9hbGxvd2VkRmllbGRzPzogU2V0PGtleW9mIFQ+O1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyBAc2VlIE9iamVjdFZhbGlkYXRvcjxUPiB1c2luZyBvcHRpb25zIHN1cHBsaWVkIGluIGFuXG4gICAgICogb3B0aW9uYWwgQHNlZSBPYmplY3RWYWxpZGF0b3JPcHRpb25zPFQ+LlxuICAgICAqIEBwYXJhbSBmaWVsZHMgQSBAc2VlIEZpZWxkVmFsaWRhdG9yczxUPiBjb250YWluaW5nIGNvbnZlcnRlcnMgZm9yIGVhY2ggZmllbGRcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBvcHRpb25hbCBAc2VlIE9iamVjdFZhbGlkYXRvck9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBjb252ZXJzaW9uXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogT2JqZWN0VmFsaWRhdG9yQ29uc3RydWN0b3JQYXJhbXM8VCwgVEM+KSB7XG4gICAgICAgIHN1cGVyKHBhcmFtcyk7XG5cbiAgICAgICAgdGhpcy5maWVsZHMgPSBwYXJhbXMuZmllbGRzO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBwYXJhbXMub3B0aW9ucyA/PyB7fTtcbiAgICAgICAgdGhpcy5faW5uZXJWYWxpZGF0b3JzID0gT2JqZWN0VmFsaWRhdG9yLl9yZXNvbHZlVmFsaWRhdG9ycyh0aGlzLmZpZWxkcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5fYWxsb3dlZEZpZWxkcyA9ICh0aGlzLm9wdGlvbnMuc3RyaWN0ID09PSB0cnVlKVxuICAgICAgICAgICAgPyBuZXcgU2V0KE9iamVjdC5rZXlzKHRoaXMuZmllbGRzKSBhcyAoa2V5b2YgVClbXSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzdGF0aWMgX3Jlc29sdmVWYWxpZGF0b3JzPFQsIFRDPihcbiAgICAgICAgZmllbGRzOiBGaWVsZFZhbGlkYXRvcnM8VCwgVEM+LFxuICAgICAgICBvcHRpb25zPzogT2JqZWN0VmFsaWRhdG9yT3B0aW9uczxULCBUQz4sXG4gICAgKTogRmllbGRWYWxpZGF0b3JzPFQsIFRDPiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkOiBQYXJ0aWFsPEZpZWxkVmFsaWRhdG9yczxULCBUQz4+ID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGZpZWxkc1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uYWwgPSBmaWVsZHNba2V5XS5pc09wdGlvbmFsIHx8IG9wdGlvbnM/Lm9wdGlvbmFsRmllbGRzPy5pbmNsdWRlcyhrZXkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmVkW2tleV0gPSBuZXcgRmllbGRWYWxpZGF0b3Ioa2V5LCBmaWVsZHNba2V5XSwgeyBvcHRpb25hbCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWQgYXMgRmllbGRWYWxpZGF0b3JzPFQsIFRDPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFydGlhbChvcHRpb25zOiBPYmplY3RWYWxpZGF0b3JPcHRpb25zPFQsIFRDPik6IE9iamVjdFZhbGlkYXRvcjxQYXJ0aWFsPFQ+LCBUQz4ge1xuICAgICAgICByZXR1cm4gbmV3IE9iamVjdFZhbGlkYXRvcjxQYXJ0aWFsPFQ+LCBUQz4oe1xuICAgICAgICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcyBhcyBGaWVsZFZhbGlkYXRvcnM8UGFydGlhbDxUPiwgVEM+LFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi4ob3B0aW9ucyA/PyB7fSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdHJhaXRzOiB0aGlzLnRyYWl0cyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFBhcnRpYWwoYWRkT3B0aW9uYWxGaWVsZHM6IChrZXlvZiBUKVtdKTogT2JqZWN0VmFsaWRhdG9yPFBhcnRpYWw8VD4sIFRDPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnRpYWwoe1xuICAgICAgICAgICAgb3B0aW9uYWxGaWVsZHM6IFsuLi50aGlzLm9wdGlvbnMub3B0aW9uYWxGaWVsZHMgPz8gW10sIC4uLmFkZE9wdGlvbmFsRmllbGRzXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF92YWxpZGF0ZShmcm9tOiB1bmtub3duLCBjb250ZXh0PzogVEMpOiBib29sZWFuIHwgRmFpbHVyZTxUPiB7XG4gICAgICAgIGlmICgodHlwZW9mIGZyb20gIT09ICdvYmplY3QnKSB8fCAoZnJvbSA9PT0gbnVsbCkgfHwgQXJyYXkuaXNBcnJheShmcm9tKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhaWwoJ3NvdXJjZSBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQgYnVnIHRoaW5rcyBrZXkgaXMgdXNlZCBiZWZvcmUgZGVmaW5lZFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgY29uc3QgY29udmVydGVkID0ge30gYXMgeyBba2V5IGluIGtleW9mIFRdOiBUW2tleV0gfTtcbiAgICAgICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9pbm5lclZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pbm5lclZhbGlkYXRvcnNba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2lubmVyVmFsaWRhdG9yc1trZXldLnZhbGlkYXRlKGZyb20sIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcyAmJiAocmVzdWx0LnZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZFtrZXldID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNGYWlsdXJlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9hbGxvd2VkRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBpbnZhbGlkID0gT2JqZWN0LmtleXMoZnJvbSkuZmlsdGVyKChrKSA9PiAhdGhpcy5fYWxsb3dlZEZpZWxkcz8uaGFzKGsgYXMga2V5b2YgVCkpO1xuICAgICAgICAgICAgaW52YWxpZC5mb3JFYWNoKChrZXkpID0+IGVycm9ycy5wdXNoKChgJHtrZXl9OiB1bmV4cGVjdGVkIGZpZWxkIGluIHNvdXJjZSBvYmplY3QuYCkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGVycm9ycy5sZW5ndGggPT09IDApID8gdHJ1ZSA6IGZhaWwoZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG59XG4iXX0=
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vb2JqZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7OztBQUVILHNDQUEwQztBQUUxQyxtREFBZ0Y7QUFFaEYsbUNBQXlDO0FBMEN6Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxlQUErQixTQUFRLDZCQUFvQjtJQW9CcEU7Ozs7OztPQU1HO0lBQ0gsWUFBbUIsTUFBK0M7O1FBQzlELEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVkLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUEsTUFBTSxDQUFDLE9BQU8sbUNBQUksRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQztZQUNoRCxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFnQixDQUFDO1lBQ2xELENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ08sTUFBTSxDQUFDLGtCQUFrQixDQUMvQixNQUE4QixFQUM5QixPQUF1Qzs7UUFFdkMsTUFBTSxRQUFRLEdBQW9DLEVBQUUsQ0FBQztRQUNyRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRTtZQUN0QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDYix1QkFBdUI7Z0JBQ3ZCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FB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Q0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUEsYUFBSSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0NBQ0o7QUFuSUQsMENBbUlDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMSBFcmlrIEZvcnR1bmVcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IEZhaWx1cmUsIGZhaWwgfSBmcm9tICcuLi9yZXN1bHQnO1xuaW1wb3J0IHsgVmFsaWRhdG9yLCBWYWxpZGF0b3JPcHRpb25zIH0gZnJvbSAnLi92YWxpZGF0b3InO1xuaW1wb3J0IHsgVmFsaWRhdG9yQmFzZSwgVmFsaWRhdG9yQmFzZUNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi92YWxpZGF0b3JCYXNlJztcblxuaW1wb3J0IHsgRmllbGRWYWxpZGF0b3IgfSBmcm9tICcuL2ZpZWxkJztcblxuLyoqXG4gKiBQZXItcHJvcGVydHkge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yIHwgdmFsaWRhdG9yc30gZm9yIGVhY2ggb2YgdGhlIHByb3BlcnRpZXMgaW4gYDxUPmAuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEZpZWxkVmFsaWRhdG9yczxULCBUQz11bmtub3duPiA9IHsgW2tleSBpbiBrZXlvZiBUXTogVmFsaWRhdG9yPFRba2V5XSwgVEM+IH07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYW4ge0BsaW5rIFZhbGlkYXRpb24uQ2xhc3Nlcy5PYmplY3RWYWxpZGF0b3IgfCBPYmplY3RWYWxpZGF0b3J9LlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdFZhbGlkYXRvck9wdGlvbnM8VCwgVEM+IGV4dGVuZHMgVmFsaWRhdG9yT3B0aW9uczxUQz4ge1xuICAgIC8qKlxuICAgICAqIElmIHByZXNlbnQsIGxpc3RzIG9wdGlvbmFsIGZpZWxkcy4gTWlzc2luZyBub24tb3B0aW9uYWwgZmllbGRzIGNhdXNlIGFuIGVycm9yLlxuICAgICAqL1xuICAgIG9wdGlvbmFsRmllbGRzPzogKGtleW9mIFQpW107XG4gICAgLyoqXG4gICAgICogSWYgdHJ1ZSwgdW5yZWNvZ25pemVkIGZpZWxkcyB5aWVsZCBhbiBlcnJvci4gIElmIGZhbHNlIG9yIHVuZGVmaW5lZCAoZGVmYXVsdCksXG4gICAgICogdW5yZWNvZ25pemVkIGZpZWxkcyBhcmUgaWdub3JlZC5cbiAgICAgKi9cbiAgICBzdHJpY3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLk9iamVjdFZhbGlkYXRvciB8IE9iamVjdFZhbGlkYXRvcn0gY29uc3RydWN0b3IuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0VmFsaWRhdG9yQ29uc3RydWN0b3JQYXJhbXM8VCwgVEM+IGV4dGVuZHMgVmFsaWRhdG9yQmFzZUNvbnN0cnVjdG9yUGFyYW1zPFQsIFRDPiB7XG4gICAgLyoqXG4gICAgICogQSB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLkZpZWxkVmFsaWRhdG9ycyB8IEZpZWxkVmFsaWRhdG9yc30gb2JqZWN0IHNwZWNpZnlpbmcgYVxuICAgICAqIHtAbGluayBWYWxpZGF0aW9uLlZhbGlkYXRvciB8IFZhbGlkYXRvcn0gZm9yIGVhY2ggb2YgdGhlIGV4cGVjdGVkIHByb3BlcnRpZXNcbiAgICAgKiBvZiBhIHJlc3VsdCBvYmplY3QuXG4gICAgICovXG4gICAgZmllbGRzOiBGaWVsZFZhbGlkYXRvcnM8VD4sXG4gICAgLyoqXG4gICAgICogT3B0aW9uYWwgYWRkaXRpb25hbCB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLk9iamVjdFZhbGlkYXRvck9wdGlvbnMgfCBWYWxpZGF0b3JPcHRpb25zfSB0b1xuICAgICAqIGNvbmZpZ3VyZSB2YWxpZGF0aW9uLlxuICAgICAqL1xuICAgIG9wdGlvbnM/OiBPYmplY3RWYWxpZGF0b3JPcHRpb25zPFQsIFRDPjtcbn1cblxuLyoqXG4gKiBJbi1wbGFjZSB7QGxpbmsgVmFsaWRhdGlvbi5WYWxpZGF0b3IgfCBWYWxpZGF0b3J9IGZvciBhbiBvYmplY3Qgb2YgdHlwZSBgPFQ+YC5cbiAqIEByZW1hcmtzXG4gKiBCeSBkZWZhdWx0LCBzdWNjZWVkcyBpZiBhbGwgb2YgdGhlIHJlcXVpcmVkIGZpZWxkcyBleGlzdCBhbmQgYXJlIHZhbGlkYXRlLCBhbmQgZmFpbHMgaWZcbiAqIGFueSByZXF1aXJlZCBmaWVsZHMgZG8gbm90IGV4aXN0IG9yIGFyZSBpbnZhbGlkLiAgU2VlIHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuT2JqZWN0VmFsaWRhdG9yT3B0aW9uc31cbiAqIGZvciBvdGhlciB2YWxpZGF0aW9uIG9wdGlvbnMuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjbGFzcyBPYmplY3RWYWxpZGF0b3I8VCwgVEM9dW5rbm93bj4gZXh0ZW5kcyBWYWxpZGF0b3JCYXNlPFQsIFRDPiB7XG4gICAgLyoqXG4gICAgICogQSB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLkZpZWxkVmFsaWRhdG9ycyB8IEZpZWxkVmFsaWRhdG9yc30gb2JqZWN0IHNwZWNpZnlpbmcgYVxuICAgICAqIHtAbGluayBWYWxpZGF0aW9uLlZhbGlkYXRvciB8IFZhbGlkYXRvcn0gZm9yIGVhY2ggb2YgdGhlIGV4cGVjdGVkIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZmllbGRzOiBGaWVsZFZhbGlkYXRvcnM8VD47XG4gICAgLyoqXG4gICAgICoge0BsaW5rIFZhbGlkYXRpb24uQ2xhc3Nlcy5PYmplY3RWYWxpZGF0b3JPcHRpb25zIHwgT3B0aW9uc30gd2hpY2ggYXBwbHkgdG8gdGhpc1xuICAgICAqIHZhbGlkYXRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb3B0aW9uczogT2JqZWN0VmFsaWRhdG9yT3B0aW9uczxULCBUQz47XG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pbm5lclZhbGlkYXRvcnM6IEZpZWxkVmFsaWRhdG9yczxUPjtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2FsbG93ZWRGaWVsZHM/OiBTZXQ8a2V5b2YgVD47XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuT2JqZWN0VmFsaWRhdG9yIHwgT2JqZWN0VmFsaWRhdG9yPFQ+fS5cbiAgICAgKiBAcGFyYW0gZmllbGRzIC0gQSB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLkZpZWxkVmFsaWRhdG9ycyB8IEZpZWxkVmFsaWRhdG9yczxUPn0gY29udGFpbmluZ1xuICAgICAqIGEge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yIHwgVmFsaWRhdG9yfSBmb3IgZWFjaCBmaWVsZC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9wdGlvbmFsIHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuT2JqZWN0VmFsaWRhdG9yT3B0aW9uc30gdG8gY29uZmlndXJlXG4gICAgICogdmFsaWRhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBPYmplY3RWYWxpZGF0b3JDb25zdHJ1Y3RvclBhcmFtczxULCBUQz4pIHtcbiAgICAgICAgc3VwZXIocGFyYW1zKTtcblxuICAgICAgICB0aGlzLmZpZWxkcyA9IHBhcmFtcy5maWVsZHM7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHBhcmFtcy5vcHRpb25zID8/IHt9O1xuICAgICAgICB0aGlzLl9pbm5lclZhbGlkYXRvcnMgPSBPYmplY3RWYWxpZGF0b3IuX3Jlc29sdmVWYWxpZGF0b3JzKHRoaXMuZmllbGRzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9hbGxvd2VkRmllbGRzID0gKHRoaXMub3B0aW9ucy5zdHJpY3QgPT09IHRydWUpXG4gICAgICAgICAgICA/IG5ldyBTZXQoT2JqZWN0LmtleXModGhpcy5maWVsZHMpIGFzIChrZXlvZiBUKVtdKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0aGUgYWN0dWFsIHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuRmllbGRWYWxpZGF0b3JzIHwgRmllbGRWYWxpZGF0b3JzPFQ+fSB0byBiZVxuICAgICAqIHVzZWQgYnkgdGhpcyBjb252ZXJ0ZXIgYnkgYXBwbHlpbmcgYW55IG9wdGlvbnMgb3IgdHJhaXRzIGRlZmluZWQgaW4gdGhlIG9wdGlvbnNcbiAgICAgKiB0byB0aGUgZmllbGQgY29udmVydGVycyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIEBwYXJhbSBmaWVsZHMgLSBUaGUgYmFzZSB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLkZpZWxkVmFsaWRhdG9ycyB8IEZpZWxkVmFsaWRhdG9yczxUPn0gcGFzc2VkXG4gICAgICogaW4gdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuT2JqZWN0VmFsaWRhdG9yT3B0aW9ucyB8IG9iamVjdCB2YWxpZGF0b3Igb3B0aW9uc31cbiAgICAgKiBwYXNzZWQgaW4gdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuRmllbGRWYWxpZGF0b3JzIHwgRmllbGRWYWxpZGF0b3JzfSB3aXRoIHRoZSBmdWxseS1jb25maWd1cmVkXG4gICAgICogaW5kaXZpZHVhbCB7QGxpbmsgVmFsaWRhdGlvbi5WYWxpZGF0b3IgfCBmaWVsZCB2YWxpZGF0b3JzfSB0byBiZSBhcHBsaWVkLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGF0aWMgX3Jlc29sdmVWYWxpZGF0b3JzPFQsIFRDPihcbiAgICAgICAgZmllbGRzOiBGaWVsZFZhbGlkYXRvcnM8VCwgVEM+LFxuICAgICAgICBvcHRpb25zPzogT2JqZWN0VmFsaWRhdG9yT3B0aW9uczxULCBUQz4sXG4gICAgKTogRmllbGRWYWxpZGF0b3JzPFQsIFRDPiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkOiBQYXJ0aWFsPEZpZWxkVmFsaWRhdG9yczxULCBUQz4+ID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGZpZWxkcykge1xuICAgICAgICAgICAgaWYgKGZpZWxkc1trZXldKSB7XG4gICAgICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25hbCA9IGZpZWxkc1trZXldLmlzT3B0aW9uYWwgfHwgb3B0aW9ucz8ub3B0aW9uYWxGaWVsZHM/LmluY2x1ZGVzKGtleSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRba2V5XSA9IG5ldyBGaWVsZFZhbGlkYXRvcihrZXksIGZpZWxkc1trZXldLCB7IG9wdGlvbmFsIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZCBhcyBGaWVsZFZhbGlkYXRvcnM8VCwgVEM+O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIFZhbGlkYXRpb24uQ2xhc3Nlcy5PYmplY3RWYWxpZGF0b3IgfCBPYmplY3RWYWxpZGF0b3J9IGRlcml2ZWQgZnJvbSB0aGlzIG9uZSBidXQgd2l0aFxuICAgICAqIG5ldyBvcHRpb25hbCBwcm9wZXJ0aWVzIGFzIHNwZWNpZmllZCBieSBhIHN1cHBsaWVkXG4gICAgICoge0BsaW5rIFZhbGlkYXRpb24uQ2xhc3Nlcy5PYmplY3RWYWxpZGF0b3JPcHRpb25zIHwgT2JqZWN0VmFsaWRhdG9yT3B0aW9uczxUPn0uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFZhbGlkYXRpb24uQ2xhc3Nlcy5PYmplY3RWYWxpZGF0b3JPcHRpb25zIHwgb3B0aW9uc30gdG8gYmUgYXBwbGllZCB0byB0aGUgbmV3XG4gICAgICoge0BsaW5rIFZhbGlkYXRpb24uQ2xhc3Nlcy5PYmplY3RWYWxpZGF0b3IgfCB2YWxpZGF0b3J9LlxuICAgICAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuT2JqZWN0VmFsaWRhdG9yIHwgT2JqZWN0VmFsaWRhdG9yfSB3aXRoIHRoZSBhZGRpdGlvbmFsIG9wdGlvbmFsXG4gICAgICogc291cmNlIHByb3BlcnRpZXMuXG4gICAgICovXG4gICAgcHVibGljIHBhcnRpYWwob3B0aW9ucz86IE9iamVjdFZhbGlkYXRvck9wdGlvbnM8VCwgVEM+KTogT2JqZWN0VmFsaWRhdG9yPFBhcnRpYWw8VD4sIFRDPiB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuICAgICAgICByZXR1cm4gbmV3IE9iamVjdFZhbGlkYXRvcjxQYXJ0aWFsPFQ+LCBUQz4oe1xuICAgICAgICAgICAgZmllbGRzOiB0aGlzLmZpZWxkcyBhcyBGaWVsZFZhbGlkYXRvcnM8UGFydGlhbDxUPiwgVEM+LFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRyYWl0czogdGhpcy50cmFpdHMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIFZhbGlkYXRpb24uQ2xhc3Nlcy5PYmplY3RWYWxpZGF0b3IgfCBPYmplY3RWYWxpZGF0b3J9IGRlcml2ZWQgZnJvbSB0aGlzIG9uZSBidXQgd2l0aFxuICAgICAqIG5ldyBvcHRpb25hbCBwcm9wZXJ0aWVzIGFzIHNwZWNpZmllZCBieSBhIHN1cHBsaWVkIGFycmF5IG9mIGBrZXlvZiBUYC5cbiAgICAgKiBAcGFyYW0gYWRkT3B0aW9uYWxQcm9wZXJ0aWVzIC0gVGhlIGtleXMgdG8gYmUgbWFkZSBvcHRpb25hbC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLk9iamVjdFZhbGlkYXRvciB8IE9iamVjdFZhbGlkYXRvcn0gd2l0aCB0aGUgYWRkaXRpb25hbCBvcHRpb25hbFxuICAgICAqIHNvdXJjZSBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRQYXJ0aWFsKGFkZE9wdGlvbmFsRmllbGRzOiAoa2V5b2YgVClbXSk6IE9iamVjdFZhbGlkYXRvcjxQYXJ0aWFsPFQ+LCBUQz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJ0aWFsKHtcbiAgICAgICAgICAgIG9wdGlvbmFsRmllbGRzOiBbLi4uKHRoaXMub3B0aW9ucy5vcHRpb25hbEZpZWxkcyA/PyBbXSksIC4uLmFkZE9wdGlvbmFsRmllbGRzXSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIFZhbGlkYXRpb24uVmFsaWRhdG9yQmFzZS5fdmFsaWRhdGV9XG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF92YWxpZGF0ZShmcm9tOiB1bmtub3duLCBjb250ZXh0PzogVEMpOiBib29sZWFuIHwgRmFpbHVyZTxUPiB7XG4gICAgICAgIGlmICgodHlwZW9mIGZyb20gIT09ICdvYmplY3QnKSB8fCAoZnJvbSA9PT0gbnVsbCkgfHwgQXJyYXkuaXNBcnJheShmcm9tKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhaWwoJ3NvdXJjZSBpcyBub3QgYW4gb2JqZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBlc2xpbnQgYnVnIHRoaW5rcyBrZXkgaXMgdXNlZCBiZWZvcmUgZGVmaW5lZFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgY29uc3QgY29udmVydGVkID0ge30gYXMgeyBba2V5IGluIGtleW9mIFRdOiBUW2tleV0gfTtcbiAgICAgICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9pbm5lclZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pbm5lclZhbGlkYXRvcnNba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2lubmVyVmFsaWRhdG9yc1trZXldLnZhbGlkYXRlKGZyb20sIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcyAmJiAocmVzdWx0LnZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZFtrZXldID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNGYWlsdXJlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9hbGxvd2VkRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBpbnZhbGlkID0gT2JqZWN0LmtleXMoZnJvbSkuZmlsdGVyKChrKSA9PiAhdGhpcy5fYWxsb3dlZEZpZWxkcyEuaGFzKGsgYXMga2V5b2YgVCkpO1xuICAgICAgICAgICAgaW52YWxpZC5mb3JFYWNoKChrZXkpID0+IGVycm9ycy5wdXNoKChgJHtrZXl9OiB1bmV4cGVjdGVkIGZpZWxkIGluIHNvdXJjZSBvYmplY3QuYCkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGVycm9ycy5sZW5ndGggPT09IDApID8gdHJ1ZSA6IGZhaWwoZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG59XG4iXX0=
|
package/validation/string.d.ts
CHANGED
|
@@ -1,7 +1,27 @@
|
|
|
1
1
|
import { Failure } from '../result';
|
|
2
2
|
import { GenericValidator, GenericValidatorConstructorParams } from './genericValidator';
|
|
3
|
+
/**
|
|
4
|
+
* Parameters used to construct a {@link Validation.Classes.StringValidator | StringValidator}.
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
3
7
|
export declare type StringValidatorConstructorParams<T extends string = string, TC = unknown> = GenericValidatorConstructorParams<T, TC>;
|
|
8
|
+
/**
|
|
9
|
+
* An in-place {@link Validation.Validator | Validator} for `string` values.
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
4
12
|
export declare class StringValidator<T extends string = string, TC = unknown> extends GenericValidator<T, TC> {
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new {@link Validation.Classes.StringValidator | StringValidator}.
|
|
15
|
+
* @param params - Optional {@link Validation.Classes.StringValidatorConstructorParams | init params}
|
|
16
|
+
* for the new {@link Validation.Classes.StringValidator | StringValidator}.
|
|
17
|
+
*/
|
|
5
18
|
constructor(params?: StringValidatorConstructorParams<T, TC>);
|
|
19
|
+
/**
|
|
20
|
+
* Static method which validates that a supplied `unknown` value is a `string`.
|
|
21
|
+
* @param from - The `unknown` value to be tested.
|
|
22
|
+
* @returns Returns `true` if `from` is a `string`, or {@link Failure} with an error
|
|
23
|
+
* message if not.
|
|
24
|
+
*/
|
|
6
25
|
static validateString<T extends string>(from: unknown): boolean | Failure<T>;
|
|
7
26
|
}
|
|
27
|
+
//# sourceMappingURL=string.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.d.ts","sourceRoot":"","sources":["../../src/validation/string.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,OAAO,EAAQ,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AAEzF;;;GAGG;AACH,oBAAY,gCAAgC,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,OAAO,IAAI,iCAAiC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAEjI;;;GAGG;AACH,qBAAa,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EAAE,GAAG,OAAO,CAAE,SAAQ,gBAAgB,CAAC,CAAC,EAAE,EAAE,CAAC;IACjG;;;;OAIG;gBACgB,MAAM,CAAC,EAAE,gCAAgC,CAAC,CAAC,EAAE,EAAE,CAAC;IAOnE;;;;;OAKG;WACW,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAMtF"}
|
package/validation/string.js
CHANGED
|
@@ -24,19 +24,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
24
24
|
exports.StringValidator = void 0;
|
|
25
25
|
const result_1 = require("../result");
|
|
26
26
|
const genericValidator_1 = require("./genericValidator");
|
|
27
|
+
/**
|
|
28
|
+
* An in-place {@link Validation.Validator | Validator} for `string` values.
|
|
29
|
+
* @public
|
|
30
|
+
*/
|
|
27
31
|
class StringValidator extends genericValidator_1.GenericValidator {
|
|
32
|
+
/**
|
|
33
|
+
* Constructs a new {@link Validation.Classes.StringValidator | StringValidator}.
|
|
34
|
+
* @param params - Optional {@link Validation.Classes.StringValidatorConstructorParams | init params}
|
|
35
|
+
* for the new {@link Validation.Classes.StringValidator | StringValidator}.
|
|
36
|
+
*/
|
|
28
37
|
constructor(params) {
|
|
29
38
|
super({
|
|
30
39
|
validator: StringValidator.validateString,
|
|
31
40
|
...(params !== null && params !== void 0 ? params : {}),
|
|
32
41
|
});
|
|
33
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Static method which validates that a supplied `unknown` value is a `string`.
|
|
45
|
+
* @param from - The `unknown` value to be tested.
|
|
46
|
+
* @returns Returns `true` if `from` is a `string`, or {@link Failure} with an error
|
|
47
|
+
* message if not.
|
|
48
|
+
*/
|
|
34
49
|
static validateString(from) {
|
|
35
50
|
if (typeof from === 'string') {
|
|
36
51
|
return true;
|
|
37
52
|
}
|
|
38
|
-
return result_1.fail(`"${from}": not a string`);
|
|
53
|
+
return (0, result_1.fail)(`"${from}": not a string`);
|
|
39
54
|
}
|
|
40
55
|
}
|
|
41
56
|
exports.StringValidator = StringValidator;
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vc3RyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7OztBQUVILHNDQUEwQztBQUMxQyx5REFBeUY7QUFRekY7OztHQUdHO0FBQ0gsTUFBYSxlQUF5RCxTQUFRLG1DQUF1QjtJQUNqRzs7OztPQUlHO0lBQ0gsWUFBbUIsTUFBZ0Q7UUFDL0QsS0FBSyxDQUFDO1lBQ0YsU0FBUyxFQUFFLGVBQWUsQ0FBQyxjQUFjO1lBQ3pDLEdBQUcsQ0FBQyxNQUFNLGFBQU4sTUFBTSxjQUFOLE1BQU0sR0FBSSxFQUFFLENBQUM7U0FDcEIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBbUIsSUFBYTtRQUN4RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTyxJQUFBLGFBQUksRUFBSSxJQUFJLElBQUksaUJBQWlCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0NBQ0o7QUF6QkQsMENBeUJDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMSBFcmlrIEZvcnR1bmVcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCB7IEZhaWx1cmUsIGZhaWwgfSBmcm9tICcuLi9yZXN1bHQnO1xuaW1wb3J0IHsgR2VuZXJpY1ZhbGlkYXRvciwgR2VuZXJpY1ZhbGlkYXRvckNvbnN0cnVjdG9yUGFyYW1zIH0gZnJvbSAnLi9nZW5lcmljVmFsaWRhdG9yJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIHVzZWQgdG8gY29uc3RydWN0IGEge0BsaW5rIFZhbGlkYXRpb24uQ2xhc3Nlcy5TdHJpbmdWYWxpZGF0b3IgfCBTdHJpbmdWYWxpZGF0b3J9LlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBTdHJpbmdWYWxpZGF0b3JDb25zdHJ1Y3RvclBhcmFtczxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLCBUQyA9IHVua25vd24+ID0gR2VuZXJpY1ZhbGlkYXRvckNvbnN0cnVjdG9yUGFyYW1zPFQsIFRDPjtcblxuLyoqXG4gKiBBbiBpbi1wbGFjZSB7QGxpbmsgVmFsaWRhdGlvbi5WYWxpZGF0b3IgfCBWYWxpZGF0b3J9IGZvciBgc3RyaW5nYCB2YWx1ZXMuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdWYWxpZGF0b3I8VCBleHRlbmRzIHN0cmluZyA9IHN0cmluZywgVEMgPSB1bmtub3duPiBleHRlbmRzIEdlbmVyaWNWYWxpZGF0b3I8VCwgVEM+IHtcbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuU3RyaW5nVmFsaWRhdG9yIHwgU3RyaW5nVmFsaWRhdG9yfS5cbiAgICAgKiBAcGFyYW0gcGFyYW1zIC0gT3B0aW9uYWwge0BsaW5rIFZhbGlkYXRpb24uQ2xhc3Nlcy5TdHJpbmdWYWxpZGF0b3JDb25zdHJ1Y3RvclBhcmFtcyB8IGluaXQgcGFyYW1zfVxuICAgICAqIGZvciB0aGUgbmV3IHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuU3RyaW5nVmFsaWRhdG9yIHwgU3RyaW5nVmFsaWRhdG9yfS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zPzogU3RyaW5nVmFsaWRhdG9yQ29uc3RydWN0b3JQYXJhbXM8VCwgVEM+KSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIHZhbGlkYXRvcjogU3RyaW5nVmFsaWRhdG9yLnZhbGlkYXRlU3RyaW5nLFxuICAgICAgICAgICAgLi4uKHBhcmFtcyA/PyB7fSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0YXRpYyBtZXRob2Qgd2hpY2ggdmFsaWRhdGVzIHRoYXQgYSBzdXBwbGllZCBgdW5rbm93bmAgdmFsdWUgaXMgYSBgc3RyaW5nYC5cbiAgICAgKiBAcGFyYW0gZnJvbSAtIFRoZSBgdW5rbm93bmAgdmFsdWUgdG8gYmUgdGVzdGVkLlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgYHRydWVgIGlmIGBmcm9tYCBpcyBhIGBzdHJpbmdgLCBvciB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhbiBlcnJvclxuICAgICAqIG1lc3NhZ2UgaWYgbm90LlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgdmFsaWRhdGVTdHJpbmc8VCBleHRlbmRzIHN0cmluZz4oZnJvbTogdW5rbm93bik6IGJvb2xlYW4gfCBGYWlsdXJlPFQ+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBmcm9tID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhaWw8VD4oYFwiJHtmcm9tfVwiOiBub3QgYSBzdHJpbmdgKTtcbiAgICB9XG59XG4iXX0=
|
package/validation/traits.d.ts
CHANGED
|
@@ -1,19 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A {@link Validation.ConstraintTrait | ConstraintTrait} indicating that
|
|
3
|
+
* a {@link Validation.Constraint | Constraint<T>} function provides an
|
|
4
|
+
* additional constraint implementation.
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
1
7
|
export interface FunctionConstraintTrait {
|
|
2
8
|
type: 'function';
|
|
3
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Union of all supported constraint traits.
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
4
14
|
export declare type ConstraintTrait = FunctionConstraintTrait;
|
|
15
|
+
/**
|
|
16
|
+
* Interface describing the supported validator traits.
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
5
19
|
export interface ValidatorTraitValues {
|
|
20
|
+
/**
|
|
21
|
+
* Indicates whether the validator accepts `undefined` as
|
|
22
|
+
* a valid value.
|
|
23
|
+
*/
|
|
6
24
|
readonly isOptional: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* If present, indicates that the result will be branded
|
|
27
|
+
* with the corresponding brand.
|
|
28
|
+
*/
|
|
7
29
|
readonly brand?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Zero or more additional {@link Validation.ConstraintTrait | ConstraintTrait}s
|
|
32
|
+
* describing additional constraints applied by this {@link Validation.Validator | Validator}.
|
|
33
|
+
*/
|
|
8
34
|
readonly constraints: ConstraintTrait[];
|
|
9
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Default {@link Validation.ValidatorTraitValues | validation traits}.
|
|
38
|
+
* @public
|
|
39
|
+
*/
|
|
10
40
|
export declare const defaultValidatorTraits: ValidatorTraitValues;
|
|
11
41
|
/**
|
|
12
|
-
*
|
|
42
|
+
* Generic implementation of {@link Validation.ValidatorTraitValues | ValidatorTraitValues}.
|
|
43
|
+
* @public
|
|
13
44
|
*/
|
|
14
45
|
export declare class ValidatorTraits implements ValidatorTraitValues {
|
|
46
|
+
/**
|
|
47
|
+
* {@inheritdoc Validation.ValidatorTraitValues.isOptional}
|
|
48
|
+
*/
|
|
15
49
|
readonly isOptional: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* {@inheritdoc Validation.ValidatorTraitValues.brand}
|
|
52
|
+
*/
|
|
16
53
|
readonly brand?: string;
|
|
54
|
+
/**
|
|
55
|
+
* {@inheritdoc Validation.ValidatorTraitValues.constraints}
|
|
56
|
+
*/
|
|
17
57
|
readonly constraints: ConstraintTrait[];
|
|
58
|
+
/**
|
|
59
|
+
* Constructs a new {@link Validation.ValidatorTraits | ValidatorTraits} optionally
|
|
60
|
+
* initialized with the supplied base and initial values.
|
|
61
|
+
* @remarks
|
|
62
|
+
* Initial values take priority over base values, which fall back to the global default values.
|
|
63
|
+
* @param init - Partial initial values to be set in the resulting {@link Validation.Validator | Validator}.
|
|
64
|
+
* @param base - Base values to be used when no initial values are present.
|
|
65
|
+
*/
|
|
18
66
|
constructor(init?: Partial<ValidatorTraitValues>, base?: ValidatorTraitValues);
|
|
19
67
|
}
|
|
68
|
+
//# sourceMappingURL=traits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traits.d.ts","sourceRoot":"","sources":["../../src/validation/traits.ts"],"names":[],"mappings":"AAsBA;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACpC,IAAI,EAAE,UAAU,CAAC;CACpB;AAED;;;GAGG;AACH,oBAAY,eAAe,GAAG,uBAAuB,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACjC;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,eAAe,EAAE,CAAC;CAC3C;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,oBAGpC,CAAC;AAEF;;;GAGG;AACH,qBAAa,eAAgB,YAAW,oBAAoB;IACxD;;OAEG;IACH,SAAgB,UAAU,EAAE,OAAO,CAAC;IAEpC;;OAEG;IACH,SAAgB,KAAK,CAAC,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,SAAgB,WAAW,EAAE,eAAe,EAAE,CAAC;IAE/C;;;;;;;OAOG;gBAEC,IAAI,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACpC,IAAI,CAAC,EAAE,oBAAoB;CAUlC"}
|
package/validation/traits.js
CHANGED
|
@@ -22,14 +22,27 @@
|
|
|
22
22
|
*/
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
24
|
exports.ValidatorTraits = exports.defaultValidatorTraits = void 0;
|
|
25
|
+
/**
|
|
26
|
+
* Default {@link Validation.ValidatorTraitValues | validation traits}.
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
25
29
|
exports.defaultValidatorTraits = {
|
|
26
30
|
isOptional: false,
|
|
27
31
|
constraints: [],
|
|
28
32
|
};
|
|
29
33
|
/**
|
|
30
|
-
*
|
|
34
|
+
* Generic implementation of {@link Validation.ValidatorTraitValues | ValidatorTraitValues}.
|
|
35
|
+
* @public
|
|
31
36
|
*/
|
|
32
37
|
class ValidatorTraits {
|
|
38
|
+
/**
|
|
39
|
+
* Constructs a new {@link Validation.ValidatorTraits | ValidatorTraits} optionally
|
|
40
|
+
* initialized with the supplied base and initial values.
|
|
41
|
+
* @remarks
|
|
42
|
+
* Initial values take priority over base values, which fall back to the global default values.
|
|
43
|
+
* @param init - Partial initial values to be set in the resulting {@link Validation.Validator | Validator}.
|
|
44
|
+
* @param base - Base values to be used when no initial values are present.
|
|
45
|
+
*/
|
|
33
46
|
constructor(init, base) {
|
|
34
47
|
var _a, _b, _c, _d, _e, _f;
|
|
35
48
|
this.isOptional = (_b = (_a = init === null || init === void 0 ? void 0 : init.isOptional) !== null && _a !== void 0 ? _a : base === null || base === void 0 ? void 0 : base.isOptional) !== null && _b !== void 0 ? _b : exports.defaultValidatorTraits.isOptional;
|
|
@@ -42,4 +55,4 @@ class ValidatorTraits {
|
|
|
42
55
|
}
|
|
43
56
|
}
|
|
44
57
|
exports.ValidatorTraits = ValidatorTraits;
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vdHJhaXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7OztBQTBDSDs7O0dBR0c7QUFDVSxRQUFBLHNCQUFzQixHQUF5QjtJQUN4RCxVQUFVLEVBQUUsS0FBSztJQUNqQixXQUFXLEVBQUUsRUFBRTtDQUNsQixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBYSxlQUFlO0lBZ0J4Qjs7Ozs7OztPQU9HO0lBQ0gsWUFDSSxJQUFvQyxFQUNwQyxJQUEyQjs7UUFFM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFBLE1BQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFVBQVUsbUNBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFVBQVUsbUNBQUksOEJBQXNCLENBQUMsVUFBVSxDQUFDO1FBQzVGLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBQSxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxLQUFLLG1DQUFJLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxLQUFLLG1DQUFJLDhCQUFzQixDQUFDLEtBQUssQ0FBQztRQUN4RSxJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2YsR0FBRyw4QkFBc0IsQ0FBQyxXQUFXO1lBQ3JDLEdBQUcsQ0FBQyxNQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxXQUFXLG1DQUFJLEVBQUUsQ0FBQztZQUM1QixHQUFHLENBQUMsTUFBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsV0FBVyxtQ0FBSSxFQUFFLENBQUM7U0FDL0IsQ0FBQztJQUNOLENBQUM7Q0FDSjtBQXBDRCwwQ0FvQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIxIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuLyoqXG4gKiBBIHtAbGluayBWYWxpZGF0aW9uLkNvbnN0cmFpbnRUcmFpdCB8IENvbnN0cmFpbnRUcmFpdH0gaW5kaWNhdGluZyB0aGF0XG4gKiBhIHtAbGluayBWYWxpZGF0aW9uLkNvbnN0cmFpbnQgfCBDb25zdHJhaW50PFQ+fSBmdW5jdGlvbiBwcm92aWRlcyBhblxuICogYWRkaXRpb25hbCBjb25zdHJhaW50IGltcGxlbWVudGF0aW9uLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uQ29uc3RyYWludFRyYWl0IHtcbiAgICB0eXBlOiAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIFVuaW9uIG9mIGFsbCBzdXBwb3J0ZWQgY29uc3RyYWludCB0cmFpdHMuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIENvbnN0cmFpbnRUcmFpdCA9IEZ1bmN0aW9uQ29uc3RyYWludFRyYWl0O1xuXG4vKipcbiAqIEludGVyZmFjZSBkZXNjcmliaW5nIHRoZSBzdXBwb3J0ZWQgdmFsaWRhdG9yIHRyYWl0cy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0b3JUcmFpdFZhbHVlcyB7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHZhbGlkYXRvciBhY2NlcHRzIGB1bmRlZmluZWRgIGFzXG4gICAgICogYSB2YWxpZCB2YWx1ZS5cbiAgICAgKi9cbiAgICByZWFkb25seSBpc09wdGlvbmFsOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogSWYgcHJlc2VudCwgaW5kaWNhdGVzIHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIGJyYW5kZWRcbiAgICAgKiB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGJyYW5kLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGJyYW5kPzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogWmVybyBvciBtb3JlIGFkZGl0aW9uYWwge0BsaW5rIFZhbGlkYXRpb24uQ29uc3RyYWludFRyYWl0IHwgQ29uc3RyYWludFRyYWl0fXNcbiAgICAgKiBkZXNjcmliaW5nIGFkZGl0aW9uYWwgY29uc3RyYWludHMgYXBwbGllZCBieSB0aGlzIHtAbGluayBWYWxpZGF0aW9uLlZhbGlkYXRvciB8IFZhbGlkYXRvcn0uXG4gICAgICovXG4gICAgcmVhZG9ubHkgY29uc3RyYWludHM6IENvbnN0cmFpbnRUcmFpdFtdO1xufVxuXG4vKipcbiAqIERlZmF1bHQge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yVHJhaXRWYWx1ZXMgfCB2YWxpZGF0aW9uIHRyYWl0c30uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0VmFsaWRhdG9yVHJhaXRzOiBWYWxpZGF0b3JUcmFpdFZhbHVlcyA9IHtcbiAgICBpc09wdGlvbmFsOiBmYWxzZSxcbiAgICBjb25zdHJhaW50czogW10sXG59O1xuXG4vKipcbiAqIEdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yVHJhaXRWYWx1ZXMgfCBWYWxpZGF0b3JUcmFpdFZhbHVlc30uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3JUcmFpdHMgaW1wbGVtZW50cyBWYWxpZGF0b3JUcmFpdFZhbHVlcyB7XG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIFZhbGlkYXRpb24uVmFsaWRhdG9yVHJhaXRWYWx1ZXMuaXNPcHRpb25hbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNPcHRpb25hbDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBWYWxpZGF0aW9uLlZhbGlkYXRvclRyYWl0VmFsdWVzLmJyYW5kfVxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBicmFuZD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBWYWxpZGF0aW9uLlZhbGlkYXRvclRyYWl0VmFsdWVzLmNvbnN0cmFpbnRzfVxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBjb25zdHJhaW50czogQ29uc3RyYWludFRyYWl0W107XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAbGluayBWYWxpZGF0aW9uLlZhbGlkYXRvclRyYWl0cyB8IFZhbGlkYXRvclRyYWl0c30gb3B0aW9uYWxseVxuICAgICAqIGluaXRpYWxpemVkIHdpdGggdGhlIHN1cHBsaWVkIGJhc2UgYW5kIGluaXRpYWwgdmFsdWVzLlxuICAgICAqIEByZW1hcmtzXG4gICAgICogSW5pdGlhbCB2YWx1ZXMgdGFrZSBwcmlvcml0eSBvdmVyIGJhc2UgdmFsdWVzLCB3aGljaCBmYWxsIGJhY2sgdG8gdGhlIGdsb2JhbCBkZWZhdWx0IHZhbHVlcy5cbiAgICAgKiBAcGFyYW0gaW5pdCAtIFBhcnRpYWwgaW5pdGlhbCB2YWx1ZXMgdG8gYmUgc2V0IGluIHRoZSByZXN1bHRpbmcge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yIHwgVmFsaWRhdG9yfS5cbiAgICAgKiBAcGFyYW0gYmFzZSAtIEJhc2UgdmFsdWVzIHRvIGJlIHVzZWQgd2hlbiBubyBpbml0aWFsIHZhbHVlcyBhcmUgcHJlc2VudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGluaXQ/OiBQYXJ0aWFsPFZhbGlkYXRvclRyYWl0VmFsdWVzPixcbiAgICAgICAgYmFzZT86IFZhbGlkYXRvclRyYWl0VmFsdWVzLFxuICAgICkge1xuICAgICAgICB0aGlzLmlzT3B0aW9uYWwgPSBpbml0Py5pc09wdGlvbmFsID8/IGJhc2U/LmlzT3B0aW9uYWwgPz8gZGVmYXVsdFZhbGlkYXRvclRyYWl0cy5pc09wdGlvbmFsO1xuICAgICAgICB0aGlzLmJyYW5kID0gaW5pdD8uYnJhbmQgPz8gYmFzZT8uYnJhbmQgPz8gZGVmYXVsdFZhbGlkYXRvclRyYWl0cy5icmFuZDtcbiAgICAgICAgdGhpcy5jb25zdHJhaW50cyA9IFtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRWYWxpZGF0b3JUcmFpdHMuY29uc3RyYWludHMsXG4gICAgICAgICAgICAuLi4oYmFzZT8uY29uc3RyYWludHMgPz8gW10pLFxuICAgICAgICAgICAgLi4uKGluaXQ/LmNvbnN0cmFpbnRzID8/IFtdKSxcbiAgICAgICAgXTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,61 +1,82 @@
|
|
|
1
1
|
import { ConstraintTrait, ValidatorTraits } from './traits';
|
|
2
2
|
import { Failure, Result } from '../result';
|
|
3
3
|
import { Brand } from '../brand';
|
|
4
|
+
/**
|
|
5
|
+
* Options that apply to any {@link Validation.Validator | Validator}.
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
4
8
|
export interface ValidatorOptions<TC> {
|
|
5
9
|
defaultContext?: TC;
|
|
6
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* A {@link Validation.Constraint | Constraint<T>} function returns
|
|
13
|
+
* `true` if the supplied value meets the constraint. Can return
|
|
14
|
+
* {@link Failure} with an error message or simply return `false`
|
|
15
|
+
* for a default message.
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
7
18
|
export declare type Constraint<T> = (val: T) => boolean | Failure<T>;
|
|
8
19
|
/**
|
|
9
|
-
* In-place validation that a supplied unknown matches
|
|
10
|
-
*
|
|
20
|
+
* In-place validation that a supplied unknown matches some
|
|
21
|
+
* required characteristics (type, values, etc).
|
|
22
|
+
* @public
|
|
11
23
|
*/
|
|
12
24
|
export interface Validator<T, TC = undefined> {
|
|
13
25
|
/**
|
|
14
|
-
* Traits describing this validation
|
|
26
|
+
* {@link Validation.ValidatorTraits | Traits} describing this validation.
|
|
15
27
|
*/
|
|
16
28
|
readonly traits: ValidatorTraits;
|
|
17
29
|
/**
|
|
18
|
-
* Indicates whether this element is explicitly optional
|
|
30
|
+
* Indicates whether this element is explicitly optional.
|
|
19
31
|
*/
|
|
20
32
|
readonly isOptional: boolean;
|
|
21
33
|
/**
|
|
22
|
-
*
|
|
34
|
+
* The brand for a branded type.
|
|
23
35
|
*/
|
|
24
36
|
readonly brand: string | undefined;
|
|
25
37
|
/**
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
38
|
+
* Tests to see if a supplied `unknown` value matches this
|
|
39
|
+
* validation.
|
|
40
|
+
* @param from - The `unknown` value to be tested.
|
|
41
|
+
* @param context - Optional validation context.
|
|
42
|
+
* @returns {@link Success} with the typed, validated value,
|
|
43
|
+
* or {@link Failure} with an error message if validation fails.
|
|
44
|
+
*/
|
|
31
45
|
validate(from: unknown, context?: TC): Result<T>;
|
|
32
46
|
/**
|
|
33
|
-
* Tests to see if a supplied unknown value matches this
|
|
34
|
-
* validation. Accepts undefined
|
|
35
|
-
* @param from The unknown to be tested
|
|
36
|
-
* @param context
|
|
47
|
+
* Tests to see if a supplied `unknown` value matches this
|
|
48
|
+
* validation. Accepts `undefined`.
|
|
49
|
+
* @param from - The `unknown` value to be tested.
|
|
50
|
+
* @param context - Optional validation context.
|
|
51
|
+
* @returns {@link Success} with the typed, validated value,
|
|
52
|
+
* or {@link Failure} with an error message if validation fails.
|
|
37
53
|
*/
|
|
38
54
|
validateOptional(from: unknown, context?: TC): Result<T | undefined>;
|
|
39
55
|
/**
|
|
40
56
|
* Non-throwing type guard
|
|
41
|
-
* @param from The value to be tested
|
|
42
|
-
* @param context Optional context
|
|
57
|
+
* @param from - The value to be tested.
|
|
58
|
+
* @param context - Optional validation context.
|
|
43
59
|
*/
|
|
44
60
|
guard(from: unknown, context?: TC): from is T;
|
|
45
61
|
/**
|
|
46
|
-
* Creates an in-place validator
|
|
62
|
+
* Creates an {@link Validation.Validator | in-place validator}
|
|
63
|
+
* which is derived from this one but which also matches `undefined`.
|
|
47
64
|
*/
|
|
48
65
|
optional(): Validator<T | undefined, TC>;
|
|
49
66
|
/**
|
|
50
|
-
* Creates
|
|
51
|
-
*
|
|
52
|
-
* @param
|
|
67
|
+
* Creates an {@link Validation.Validator | in-place validator}
|
|
68
|
+
* which is derived from this one but which applies additional constraints.
|
|
69
|
+
* @param constraint - the constraint to be applied
|
|
70
|
+
* @param trait - As optional {@link Validation.ConstraintTrait | ConstraintTrait}
|
|
71
|
+
* to be applied to the resulting {@link Validation.Validator | Validator}.
|
|
72
|
+
* @returns A new {@link Validation.Validator | Validator}.
|
|
53
73
|
*/
|
|
54
74
|
withConstraint(constraint: Constraint<T>, trait?: ConstraintTrait): Validator<T, TC>;
|
|
55
75
|
/**
|
|
56
|
-
* Creates a
|
|
57
|
-
*
|
|
58
|
-
* @param brand The brand to be applied
|
|
76
|
+
* Creates a new {@link Validation.Validator | in-place validator} which
|
|
77
|
+
* is derived from this one but which matches a branded result.
|
|
78
|
+
* @param brand - The brand to be applied.
|
|
59
79
|
*/
|
|
60
80
|
withBrand<B extends string>(brand: B): Validator<Brand<T, B>, TC>;
|
|
61
81
|
}
|
|
82
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/validation/validator.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC;;;GAGG;AACH,MAAM,WAAW,gBAAgB,CAAC,EAAE;IAChC,cAAc,CAAC,EAAE,EAAE,CAAC;CACvB;AAED;;;;;;GAMG;AACH,oBAAY,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,EAAE,EAAE,GAAC,SAAS;IAClC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IAEjC;;OAEG;IACF,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE9B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnC;;;;;;;QAOI;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAElD;;;;;;;QAOI;IACJ,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAErE;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAE7C;;;OAGG;IACH,QAAQ,IAAI,SAAS,CAAC,CAAC,GAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAEvC;;;;;;;OAOG;IACH,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAErF;;;;OAIG;IACH,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;CAC1E"}
|
package/validation/validator.js
CHANGED
|
@@ -21,4 +21,4 @@
|
|
|
21
21
|
* SOFTWARE.
|
|
22
22
|
*/
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkciLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIxIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0IHsgQ29uc3RyYWludFRyYWl0LCBWYWxpZGF0b3JUcmFpdHMgfSBmcm9tICcuL3RyYWl0cyc7XG5pbXBvcnQgeyBGYWlsdXJlLCBSZXN1bHQgfSBmcm9tICcuLi9yZXN1bHQnO1xuXG5pbXBvcnQgeyBCcmFuZCB9IGZyb20gJy4uL2JyYW5kJztcblxuLyoqXG4gKiBPcHRpb25zIHRoYXQgYXBwbHkgdG8gYW55IHtAbGluayBWYWxpZGF0aW9uLlZhbGlkYXRvciB8IFZhbGlkYXRvcn0uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdG9yT3B0aW9uczxUQz4ge1xuICAgIGRlZmF1bHRDb250ZXh0PzogVEM7XG59XG5cbi8qKlxuICogQSB7QGxpbmsgVmFsaWRhdGlvbi5Db25zdHJhaW50IHwgQ29uc3RyYWludDxUPn0gZnVuY3Rpb24gcmV0dXJuc1xuICogYHRydWVgIGlmIHRoZSBzdXBwbGllZCB2YWx1ZSBtZWV0cyB0aGUgY29uc3RyYWludC4gQ2FuIHJldHVyblxuICoge0BsaW5rIEZhaWx1cmV9IHdpdGggYW4gZXJyb3IgbWVzc2FnZSBvciBzaW1wbHkgcmV0dXJuIGBmYWxzZWBcbiAqIGZvciBhIGRlZmF1bHQgbWVzc2FnZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgQ29uc3RyYWludDxUPiA9ICh2YWw6IFQpID0+IGJvb2xlYW4gfCBGYWlsdXJlPFQ+O1xuXG4vKipcbiAqIEluLXBsYWNlIHZhbGlkYXRpb24gdGhhdCBhIHN1cHBsaWVkIHVua25vd24gbWF0Y2hlcyBzb21lXG4gKiByZXF1aXJlZCBjaGFyYWN0ZXJpc3RpY3MgKHR5cGUsIHZhbHVlcywgZXRjKS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0b3I8VCwgVEM9dW5kZWZpbmVkPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiB7QGxpbmsgVmFsaWRhdGlvbi5WYWxpZGF0b3JUcmFpdHMgfCBUcmFpdHN9IGRlc2NyaWJpbmcgdGhpcyB2YWxpZGF0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgcmVhZG9ubHkgdHJhaXRzOiBWYWxpZGF0b3JUcmFpdHM7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgZWxlbWVudCBpcyBleHBsaWNpdGx5IG9wdGlvbmFsLlxuICAgICAgICAgKi9cbiAgICAgICAgIHJlYWRvbmx5IGlzT3B0aW9uYWw6IGJvb2xlYW47XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBicmFuZCBmb3IgYSBicmFuZGVkIHR5cGUuXG4gICAgICAgICAqL1xuICAgICAgICByZWFkb25seSBicmFuZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgICogVGVzdHMgdG8gc2VlIGlmIGEgc3VwcGxpZWQgYHVua25vd25gIHZhbHVlIG1hdGNoZXMgdGhpc1xuICAgICAgICAgICogdmFsaWRhdGlvbi5cbiAgICAgICAgICAqIEBwYXJhbSBmcm9tIC0gVGhlIGB1bmtub3duYCB2YWx1ZSB0byBiZSB0ZXN0ZWQuXG4gICAgICAgICAgKiBAcGFyYW0gY29udGV4dCAtIE9wdGlvbmFsIHZhbGlkYXRpb24gY29udGV4dC5cbiAgICAgICAgICAqIEByZXR1cm5zIHtAbGluayBTdWNjZXNzfSB3aXRoIHRoZSB0eXBlZCwgdmFsaWRhdGVkIHZhbHVlLFxuICAgICAgICAgICogb3Ige0BsaW5rIEZhaWx1cmV9IHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpZiB2YWxpZGF0aW9uIGZhaWxzLlxuICAgICAgICAgICovXG4gICAgICAgICB2YWxpZGF0ZShmcm9tOiB1bmtub3duLCBjb250ZXh0PzogVEMpOiBSZXN1bHQ8VD47XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAgKiBUZXN0cyB0byBzZWUgaWYgYSBzdXBwbGllZCBgdW5rbm93bmAgdmFsdWUgbWF0Y2hlcyB0aGlzXG4gICAgICAgICAgKiB2YWxpZGF0aW9uLiAgQWNjZXB0cyBgdW5kZWZpbmVkYC5cbiAgICAgICAgICAqIEBwYXJhbSBmcm9tIC0gVGhlIGB1bmtub3duYCB2YWx1ZSB0byBiZSB0ZXN0ZWQuXG4gICAgICAgICAgKiBAcGFyYW0gY29udGV4dCAtIE9wdGlvbmFsIHZhbGlkYXRpb24gY29udGV4dC5cbiAgICAgICAgICAqIEByZXR1cm5zIHtAbGluayBTdWNjZXNzfSB3aXRoIHRoZSB0eXBlZCwgdmFsaWRhdGVkIHZhbHVlLFxuICAgICAgICAgICogb3Ige0BsaW5rIEZhaWx1cmV9IHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpZiB2YWxpZGF0aW9uIGZhaWxzLlxuICAgICAgICAgICovXG4gICAgICAgIHZhbGlkYXRlT3B0aW9uYWwoZnJvbTogdW5rbm93biwgY29udGV4dD86IFRDKTogUmVzdWx0PFQgfCB1bmRlZmluZWQ+O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBOb24tdGhyb3dpbmcgdHlwZSBndWFyZFxuICAgICAgICAgKiBAcGFyYW0gZnJvbSAtIFRoZSB2YWx1ZSB0byBiZSB0ZXN0ZWQuXG4gICAgICAgICAqIEBwYXJhbSBjb250ZXh0IC0gT3B0aW9uYWwgdmFsaWRhdGlvbiBjb250ZXh0LlxuICAgICAgICAgKi9cbiAgICAgICAgZ3VhcmQoZnJvbTogdW5rbm93biwgY29udGV4dD86IFRDKTogZnJvbSBpcyBUO1xuXG4gICAgICAgICAvKipcbiAgICAgICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yIHwgaW4tcGxhY2UgdmFsaWRhdG9yfVxuICAgICAgICAgICogd2hpY2ggaXMgZGVyaXZlZCBmcm9tIHRoaXMgb25lIGJ1dCB3aGljaCBhbHNvIG1hdGNoZXMgYHVuZGVmaW5lZGAuXG4gICAgICAgICAgKi9cbiAgICAgICAgIG9wdGlvbmFsKCk6IFZhbGlkYXRvcjxUfHVuZGVmaW5lZCwgVEM+O1xuXG4gICAgICAgICAvKipcbiAgICAgICAgICAqIENyZWF0ZXMgYW4ge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yIHwgaW4tcGxhY2UgdmFsaWRhdG9yfVxuICAgICAgICAgICogd2hpY2ggaXMgZGVyaXZlZCBmcm9tIHRoaXMgb25lIGJ1dCB3aGljaCBhcHBsaWVzIGFkZGl0aW9uYWwgY29uc3RyYWludHMuXG4gICAgICAgICAgKiBAcGFyYW0gY29uc3RyYWludCAtIHRoZSBjb25zdHJhaW50IHRvIGJlIGFwcGxpZWRcbiAgICAgICAgICAqIEBwYXJhbSB0cmFpdCAtIEFzIG9wdGlvbmFsIHtAbGluayBWYWxpZGF0aW9uLkNvbnN0cmFpbnRUcmFpdCB8IENvbnN0cmFpbnRUcmFpdH1cbiAgICAgICAgICAqIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHJlc3VsdGluZyB7QGxpbmsgVmFsaWRhdGlvbi5WYWxpZGF0b3IgfCBWYWxpZGF0b3J9LlxuICAgICAgICAgICogQHJldHVybnMgQSBuZXcge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yIHwgVmFsaWRhdG9yfS5cbiAgICAgICAgICAqL1xuICAgICAgICAgd2l0aENvbnN0cmFpbnQoY29uc3RyYWludDogQ29uc3RyYWludDxUPiwgdHJhaXQ/OiBDb25zdHJhaW50VHJhaXQpOiBWYWxpZGF0b3I8VCwgVEM+O1xuXG4gICAgICAgICAvKipcbiAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yIHwgaW4tcGxhY2UgdmFsaWRhdG9yfSB3aGljaFxuICAgICAgICAgICogaXMgZGVyaXZlZCBmcm9tIHRoaXMgb25lIGJ1dCB3aGljaCBtYXRjaGVzIGEgYnJhbmRlZCByZXN1bHQuXG4gICAgICAgICAgKiBAcGFyYW0gYnJhbmQgLSBUaGUgYnJhbmQgdG8gYmUgYXBwbGllZC5cbiAgICAgICAgICAqL1xuICAgICAgICAgd2l0aEJyYW5kPEIgZXh0ZW5kcyBzdHJpbmc+KGJyYW5kOiBCKTogVmFsaWRhdG9yPEJyYW5kPFQsIEI+LCBUQz47XG59XG4iXX0=
|
|
@@ -3,8 +3,23 @@ import { Failure } from '../result';
|
|
|
3
3
|
export declare type ValidatorBaseConstructorParams<T, TC> = Omit<GenericValidatorConstructorParams<T, TC>, 'validator'>;
|
|
4
4
|
/**
|
|
5
5
|
* Abstract base helper class for specific validator implementations
|
|
6
|
+
* @internal
|
|
6
7
|
*/
|
|
7
8
|
export declare abstract class ValidatorBase<T, TC = undefined> extends GenericValidator<T, TC> {
|
|
8
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Inner constructor
|
|
11
|
+
* @param params - Initialization params.
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
protected constructor(params: Partial<ValidatorBaseConstructorParams<T, TC>>);
|
|
15
|
+
/**
|
|
16
|
+
* Abstract validation method to me implemented by derived classes.
|
|
17
|
+
* @param from - Value to be converted.
|
|
18
|
+
* @param context - Optional validation context.
|
|
19
|
+
* @returns `true` if `from` is valid, {@link Failure | Failure<T>}
|
|
20
|
+
* with an error message if `from` is invalid.
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
9
23
|
protected abstract _validate(from: unknown, context?: TC): boolean | Failure<T>;
|
|
10
24
|
}
|
|
25
|
+
//# sourceMappingURL=validatorBase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validatorBase.d.ts","sourceRoot":"","sources":["../../src/validation/validatorBase.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,gBAAgB,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAC;AAEzF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,oBAAY,8BAA8B,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,iCAAiC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;AAEhH;;;GAGG;AACH,8BAAsB,aAAa,CAAC,CAAC,EAAE,EAAE,GAAG,SAAS,CAAE,SAAQ,gBAAgB,CAAC,CAAC,EAAE,EAAE,CAAC;IAClF;;;;OAIG;IACH,SAAS,aAAa,MAAM,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAO5E;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAClF"}
|
|
@@ -25,8 +25,14 @@ exports.ValidatorBase = void 0;
|
|
|
25
25
|
const genericValidator_1 = require("./genericValidator");
|
|
26
26
|
/**
|
|
27
27
|
* Abstract base helper class for specific validator implementations
|
|
28
|
+
* @internal
|
|
28
29
|
*/
|
|
29
30
|
class ValidatorBase extends genericValidator_1.GenericValidator {
|
|
31
|
+
/**
|
|
32
|
+
* Inner constructor
|
|
33
|
+
* @param params - Initialization params.
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
30
36
|
constructor(params) {
|
|
31
37
|
super({
|
|
32
38
|
validator: (from, context) => this._validate(from, context),
|
|
@@ -35,4 +41,4 @@ class ValidatorBase extends genericValidator_1.GenericValidator {
|
|
|
35
41
|
}
|
|
36
42
|
}
|
|
37
43
|
exports.ValidatorBase = ValidatorBase;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL3ZhbGlkYXRvckJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBRUgseURBQXlGO0FBTXpGOzs7R0FHRztBQUNILE1BQXNCLGFBQWlDLFNBQVEsbUNBQXVCO0lBQ2xGOzs7O09BSUc7SUFDSCxZQUFzQixNQUFzRDtRQUN4RSxLQUFLLENBQUM7WUFDRixTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7WUFDM0QsR0FBRyxNQUFNO1NBQ1osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQVdKO0FBdEJELHNDQXNCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjEgRXJpayBGb3J0dW5lXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBHZW5lcmljVmFsaWRhdG9yLCBHZW5lcmljVmFsaWRhdG9yQ29uc3RydWN0b3JQYXJhbXMgfSBmcm9tICcuL2dlbmVyaWNWYWxpZGF0b3InO1xuXG5pbXBvcnQgeyBGYWlsdXJlIH0gZnJvbSAnLi4vcmVzdWx0JztcblxuZXhwb3J0IHR5cGUgVmFsaWRhdG9yQmFzZUNvbnN0cnVjdG9yUGFyYW1zPFQsIFRDPiA9IE9taXQ8R2VuZXJpY1ZhbGlkYXRvckNvbnN0cnVjdG9yUGFyYW1zPFQsIFRDPiwgJ3ZhbGlkYXRvcic+O1xuXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgaGVscGVyIGNsYXNzIGZvciBzcGVjaWZpYyB2YWxpZGF0b3IgaW1wbGVtZW50YXRpb25zXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZhbGlkYXRvckJhc2U8VCwgVEMgPSB1bmRlZmluZWQ+IGV4dGVuZHMgR2VuZXJpY1ZhbGlkYXRvcjxULCBUQz4ge1xuICAgIC8qKlxuICAgICAqIElubmVyIGNvbnN0cnVjdG9yXG4gICAgICogQHBhcmFtIHBhcmFtcyAtIEluaXRpYWxpemF0aW9uIHBhcmFtcy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocGFyYW1zOiBQYXJ0aWFsPFZhbGlkYXRvckJhc2VDb25zdHJ1Y3RvclBhcmFtczxULCBUQz4+KSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIHZhbGlkYXRvcjogKGZyb20sIGNvbnRleHQpID0+IHRoaXMuX3ZhbGlkYXRlKGZyb20sIGNvbnRleHQpLFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBYnN0cmFjdCB2YWxpZGF0aW9uIG1ldGhvZCB0byBtZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG4gICAgICogQHBhcmFtIGZyb20gLSBWYWx1ZSB0byBiZSBjb252ZXJ0ZWQuXG4gICAgICogQHBhcmFtIGNvbnRleHQgLSBPcHRpb25hbCB2YWxpZGF0aW9uIGNvbnRleHQuXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIGBmcm9tYCBpcyB2YWxpZCwge0BsaW5rIEZhaWx1cmUgfCBGYWlsdXJlPFQ+fVxuICAgICAqIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpZiBgZnJvbWAgaXMgaW52YWxpZC5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgX3ZhbGlkYXRlKGZyb206IHVua25vd24sIGNvbnRleHQ/OiBUQyk6IGJvb2xlYW4gfCBGYWlsdXJlPFQ+O1xufVxuIl19
|