vest 4.0.1 → 4.0.2

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.
@@ -1,8 +1,7 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('n4s')) :
3
- typeof define === 'function' && define.amd ? define(['n4s'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.n4s));
5
- }(this, (function (n4s) { 'use strict';
1
+ (function (factory) {
2
+ typeof define === 'function' && define.amd ? define(factory) :
3
+ factory();
4
+ }((function () { 'use strict';
6
5
 
7
6
  function mapFirst(array, callback) {
8
7
  var broke = false;
@@ -91,6 +90,626 @@
91
90
  }));
92
91
  }
93
92
 
93
+ var assign = Object.assign;
94
+
95
+ function bindNot(fn) {
96
+ return function () {
97
+ var args = [];
98
+ for (var _i = 0; _i < arguments.length; _i++) {
99
+ args[_i] = arguments[_i];
100
+ }
101
+ return !fn.apply(void 0, args);
102
+ };
103
+ }
104
+
105
+ function isNull(value) {
106
+ return value === null;
107
+ }
108
+ var isNotNull = bindNot(isNull);
109
+
110
+ function isUndefined(value) {
111
+ return value === undefined;
112
+ }
113
+ var isNotUndefined = bindNot(isUndefined);
114
+
115
+ function isNullish(value) {
116
+ return isNull(value) || isUndefined(value);
117
+ }
118
+ var isNotNullish = bindNot(isNullish);
119
+
120
+ function isStringValue(v) {
121
+ return String(v) === v;
122
+ }
123
+
124
+ function endsWith(value, arg1) {
125
+ return isStringValue(value) && isStringValue(arg1) && value.endsWith(arg1);
126
+ }
127
+ var doesNotEndWith = bindNot(endsWith);
128
+
129
+ function equals(value, arg1) {
130
+ return value === arg1;
131
+ }
132
+ var notEquals = bindNot(equals);
133
+
134
+ function isNumeric(value) {
135
+ var str = String(value);
136
+ var num = Number(value);
137
+ var result = !isNaN(parseFloat(str)) && !isNaN(Number(value)) && isFinite(num);
138
+ return Boolean(result);
139
+ }
140
+ var isNotNumeric = bindNot(isNumeric);
141
+
142
+ function greaterThan(value, gt) {
143
+ return isNumeric(value) && isNumeric(gt) && Number(value) > Number(gt);
144
+ }
145
+
146
+ function greaterThanOrEquals(value, gte) {
147
+ return isNumeric(value) && isNumeric(gte) && Number(value) >= Number(gte);
148
+ }
149
+
150
+ // The module is named "isArrayValue" since it
151
+ // is conflicting with a nested npm dependency.
152
+ // We may need to revisit this in the future.
153
+ function isArray(value) {
154
+ return Boolean(Array.isArray(value));
155
+ }
156
+ var isNotArray = bindNot(isArray);
157
+
158
+ function inside(value, arg1) {
159
+ if (isArray(arg1)) {
160
+ return arg1.indexOf(value) !== -1;
161
+ }
162
+ // both value and arg1 are strings
163
+ if (isStringValue(arg1) && isStringValue(value)) {
164
+ return arg1.indexOf(value) !== -1;
165
+ }
166
+ return false;
167
+ }
168
+ var notInside = bindNot(inside);
169
+
170
+ function lessThanOrEquals(value, lte) {
171
+ return isNumeric(value) && isNumeric(lte) && Number(value) <= Number(lte);
172
+ }
173
+
174
+ function isBetween(value, min, max) {
175
+ return greaterThanOrEquals(value, min) && lessThanOrEquals(value, max);
176
+ }
177
+ var isNotBetween = bindNot(isBetween);
178
+
179
+ function isBlank(value) {
180
+ return isNullish(value) || (isStringValue(value) && !value.trim());
181
+ }
182
+ var isNotBlank = bindNot(isBlank);
183
+
184
+ function isBoolean(value) {
185
+ return !!value === value;
186
+ }
187
+
188
+ var isNotBoolean = bindNot(isBoolean);
189
+
190
+ /**
191
+ * A safe hasOwnProperty access
192
+ */
193
+ function hasOwnProperty(obj, key) {
194
+ return Object.prototype.hasOwnProperty.call(obj, key);
195
+ }
196
+
197
+ function isNumber(value) {
198
+ return Boolean(typeof value === 'number');
199
+ }
200
+ var isNotNumber = bindNot(isNumber);
201
+
202
+ function lengthEquals(value, arg1) {
203
+ return value.length === Number(arg1);
204
+ }
205
+ var lengthNotEquals = bindNot(lengthEquals);
206
+
207
+ function isEmpty(value) {
208
+ if (!value) {
209
+ return true;
210
+ }
211
+ else if (isNumber(value)) {
212
+ return value === 0;
213
+ }
214
+ else if (hasOwnProperty(value, 'length')) {
215
+ return lengthEquals(value, 0);
216
+ }
217
+ else if (typeof value === 'object') {
218
+ return lengthEquals(Object.keys(value), 0);
219
+ }
220
+ return true;
221
+ }
222
+ var isNotEmpty = bindNot(isEmpty);
223
+
224
+ /**
225
+ * Validates that a given value is an even number
226
+ */
227
+ var isEven = function (value) {
228
+ if (isNumeric(value)) {
229
+ return value % 2 === 0;
230
+ }
231
+ return false;
232
+ };
233
+
234
+ function isKeyOf(key, obj) {
235
+ return key in obj;
236
+ }
237
+ var isNotKeyOf = bindNot(isKeyOf);
238
+
239
+ function isNaN$1(value) {
240
+ return Number.isNaN(value);
241
+ }
242
+ var isNotNaN = bindNot(isNaN$1);
243
+
244
+ function isNegative(value) {
245
+ if (isNumeric(value)) {
246
+ return Number(value) < 0;
247
+ }
248
+ return false;
249
+ }
250
+ var isPositive = bindNot(isNegative);
251
+
252
+ /**
253
+ * Validates that a given value is an odd number
254
+ */
255
+ var isOdd = function (value) {
256
+ if (isNumeric(value)) {
257
+ return value % 2 !== 0;
258
+ }
259
+ return false;
260
+ };
261
+
262
+ var isNotString = bindNot(isStringValue);
263
+
264
+ function isTruthy(value) {
265
+ return !!value;
266
+ }
267
+ var isFalsy = bindNot(isTruthy);
268
+
269
+ function isValueOf(value, objectToCheck) {
270
+ if (isNullish(objectToCheck)) {
271
+ return false;
272
+ }
273
+ for (var key in objectToCheck) {
274
+ if (objectToCheck[key] === value) {
275
+ return true;
276
+ }
277
+ }
278
+ return false;
279
+ }
280
+ var isNotValueOf = bindNot(isValueOf);
281
+
282
+ function lessThan(value, lt) {
283
+ return isNumeric(value) && isNumeric(lt) && Number(value) < Number(lt);
284
+ }
285
+
286
+ function longerThan(value, arg1) {
287
+ return value.length > Number(arg1);
288
+ }
289
+
290
+ function longerThanOrEquals(value, arg1) {
291
+ return value.length >= Number(arg1);
292
+ }
293
+
294
+ function matches(value, regex) {
295
+ if (regex instanceof RegExp) {
296
+ return regex.test(value);
297
+ }
298
+ else if (isStringValue(regex)) {
299
+ return new RegExp(regex).test(value);
300
+ }
301
+ else {
302
+ return false;
303
+ }
304
+ }
305
+ var notMatches = bindNot(matches);
306
+
307
+ function numberEquals(value, eq) {
308
+ return isNumeric(value) && isNumeric(eq) && Number(value) === Number(eq);
309
+ }
310
+ var numberNotEquals = bindNot(numberEquals);
311
+
312
+ function condition(value, callback) {
313
+ try {
314
+ return callback(value);
315
+ }
316
+ catch (_a) {
317
+ return false;
318
+ }
319
+ }
320
+
321
+ function shorterThan(value, arg1) {
322
+ return value.length < Number(arg1);
323
+ }
324
+
325
+ function shorterThanOrEquals(value, arg1) {
326
+ return value.length <= Number(arg1);
327
+ }
328
+
329
+ function startsWith(value, arg1) {
330
+ return isStringValue(value) && isStringValue(arg1) && value.startsWith(arg1);
331
+ }
332
+ var doesNotStartWith = bindNot(startsWith);
333
+
334
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, max-lines-per-function
335
+ function rules() {
336
+ return {
337
+ condition: condition,
338
+ doesNotEndWith: doesNotEndWith,
339
+ doesNotStartWith: doesNotStartWith,
340
+ endsWith: endsWith,
341
+ equals: equals,
342
+ greaterThan: greaterThan,
343
+ greaterThanOrEquals: greaterThanOrEquals,
344
+ gt: greaterThan,
345
+ gte: greaterThanOrEquals,
346
+ inside: inside,
347
+ isArray: isArray,
348
+ isBetween: isBetween,
349
+ isBlank: isBlank,
350
+ isBoolean: isBoolean,
351
+ isEmpty: isEmpty,
352
+ isEven: isEven,
353
+ isFalsy: isFalsy,
354
+ isKeyOf: isKeyOf,
355
+ isNaN: isNaN$1,
356
+ isNegative: isNegative,
357
+ isNotArray: isNotArray,
358
+ isNotBetween: isNotBetween,
359
+ isNotBlank: isNotBlank,
360
+ isNotBoolean: isNotBoolean,
361
+ isNotEmpty: isNotEmpty,
362
+ isNotKeyOf: isNotKeyOf,
363
+ isNotNaN: isNotNaN,
364
+ isNotNull: isNotNull,
365
+ isNotNullish: isNotNullish,
366
+ isNotNumber: isNotNumber,
367
+ isNotNumeric: isNotNumeric,
368
+ isNotString: isNotString,
369
+ isNotUndefined: isNotUndefined,
370
+ isNotValueOf: isNotValueOf,
371
+ isNull: isNull,
372
+ isNullish: isNullish,
373
+ isNumber: isNumber,
374
+ isNumeric: isNumeric,
375
+ isOdd: isOdd,
376
+ isPositive: isPositive,
377
+ isString: isStringValue,
378
+ isTruthy: isTruthy,
379
+ isUndefined: isUndefined,
380
+ isValueOf: isValueOf,
381
+ lengthEquals: lengthEquals,
382
+ lengthNotEquals: lengthNotEquals,
383
+ lessThan: lessThan,
384
+ lessThanOrEquals: lessThanOrEquals,
385
+ longerThan: longerThan,
386
+ longerThanOrEquals: longerThanOrEquals,
387
+ lt: lessThan,
388
+ lte: lessThanOrEquals,
389
+ matches: matches,
390
+ notEquals: notEquals,
391
+ notInside: notInside,
392
+ notMatches: notMatches,
393
+ numberEquals: numberEquals,
394
+ numberNotEquals: numberNotEquals,
395
+ shorterThan: shorterThan,
396
+ shorterThanOrEquals: shorterThanOrEquals,
397
+ startsWith: startsWith
398
+ };
399
+ }
400
+
401
+ var baseRules = rules();
402
+ function getRule(ruleName) {
403
+ return baseRules[ruleName];
404
+ }
405
+
406
+ function eachEnforceRule(action) {
407
+ for (var ruleName in baseRules) {
408
+ var ruleFn = getRule(ruleName);
409
+ if (isFunction(ruleFn)) {
410
+ action(ruleName, ruleFn);
411
+ }
412
+ }
413
+ }
414
+
415
+ /**
416
+ * Throws a timed out error.
417
+ */
418
+ function throwError(devMessage, productionMessage) {
419
+ throw new Error(devMessage );
420
+ }
421
+
422
+ // eslint-disable-next-line max-lines-per-function
423
+ function createContext(init) {
424
+ var storage = { ancestry: [] };
425
+ return {
426
+ bind: bind,
427
+ run: run,
428
+ use: use,
429
+ useX: useX
430
+ };
431
+ function useX(errorMessage) {
432
+ var _a;
433
+ return ((_a = storage.ctx) !== null && _a !== void 0 ? _a : throwError(defaultTo(errorMessage, 'Context was used after it was closed')));
434
+ }
435
+ function run(ctxRef, fn) {
436
+ var _a;
437
+ var parentContext = use();
438
+ var out = assign({}, parentContext ? parentContext : {}, (_a = optionalFunctionValue(init, ctxRef, parentContext)) !== null && _a !== void 0 ? _a : ctxRef);
439
+ var ctx = set(Object.freeze(out));
440
+ storage.ancestry.unshift(ctx);
441
+ var res = fn(ctx);
442
+ clear();
443
+ return res;
444
+ }
445
+ function bind(ctxRef, fn) {
446
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
447
+ // @ts-ignore - this one's pretty hard to get right
448
+ var returnedFn = function () {
449
+ var runTimeArgs = [];
450
+ for (var _i = 0; _i < arguments.length; _i++) {
451
+ runTimeArgs[_i] = arguments[_i];
452
+ }
453
+ return run(ctxRef, function () {
454
+ return fn.apply(void 0, runTimeArgs);
455
+ });
456
+ };
457
+ return returnedFn;
458
+ }
459
+ function use() {
460
+ return storage.ctx;
461
+ }
462
+ function set(value) {
463
+ return (storage.ctx = value);
464
+ }
465
+ function clear() {
466
+ var _a;
467
+ storage.ancestry.shift();
468
+ set((_a = storage.ancestry[0]) !== null && _a !== void 0 ? _a : null);
469
+ }
470
+ }
471
+
472
+ var ctx = createContext(function (ctxRef, parentContext) {
473
+ var base = {
474
+ value: ctxRef.value,
475
+ meta: ctxRef.meta || {}
476
+ };
477
+ if (!parentContext) {
478
+ return assign(base, {
479
+ parent: emptyParent
480
+ });
481
+ }
482
+ else if (ctxRef.set) {
483
+ return assign(base, {
484
+ parent: function () { return stripContext(parentContext); }
485
+ });
486
+ }
487
+ return parentContext;
488
+ });
489
+ function stripContext(ctx) {
490
+ if (!ctx) {
491
+ return ctx;
492
+ }
493
+ return {
494
+ value: ctx.value,
495
+ meta: ctx.meta,
496
+ parent: ctx.parent
497
+ };
498
+ }
499
+ function emptyParent() {
500
+ return null;
501
+ }
502
+
503
+ /*! *****************************************************************************
504
+ Copyright (c) Microsoft Corporation.
505
+
506
+ Permission to use, copy, modify, and/or distribute this software for any
507
+ purpose with or without fee is hereby granted.
508
+
509
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
510
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
511
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
512
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
513
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
514
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
515
+ PERFORMANCE OF THIS SOFTWARE.
516
+ ***************************************************************************** */
517
+
518
+ function __spreadArray(to, from, pack) {
519
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
520
+ if (ar || !(i in from)) {
521
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
522
+ ar[i] = from[i];
523
+ }
524
+ }
525
+ return to.concat(ar || Array.prototype.slice.call(from));
526
+ }
527
+
528
+ function isProxySupported() {
529
+ try {
530
+ return isFunction(Proxy);
531
+ }
532
+ catch (_a) {
533
+ return false;
534
+ }
535
+ }
536
+
537
+ /**
538
+ * Transform the result of a rule into a standard format
539
+ */
540
+ function transformResult(result, ruleName, value) {
541
+ var args = [];
542
+ for (var _i = 3; _i < arguments.length; _i++) {
543
+ args[_i - 3] = arguments[_i];
544
+ }
545
+ validateResult(result);
546
+ // if result is boolean
547
+ if (isBoolean(result)) {
548
+ return ruleReturn(result);
549
+ }
550
+ else {
551
+ return ruleReturn(result.pass, optionalFunctionValue.apply(void 0, __spreadArray([result.message, ruleName, value], args)));
552
+ }
553
+ }
554
+ function validateResult(result) {
555
+ // if result is boolean, or if result.pass is boolean
556
+ if (isBoolean(result) || (result && isBoolean(result.pass))) {
557
+ return;
558
+ }
559
+ throwError('Incorrect return value for rule: ' + JSON.stringify(result));
560
+ }
561
+
562
+ function enforceEager(value) {
563
+ var target = {};
564
+ if (!isProxySupported()) {
565
+ eachEnforceRule(function (ruleName, ruleFn) {
566
+ target[ruleName] = genRuleCall(target, ruleFn, ruleName);
567
+ });
568
+ return target;
569
+ }
570
+ var proxy = new Proxy(target, {
571
+ get: function (_, ruleName) {
572
+ var rule = getRule(ruleName);
573
+ if (rule) {
574
+ return genRuleCall(proxy, rule, ruleName);
575
+ }
576
+ }
577
+ });
578
+ return proxy;
579
+ function genRuleCall(target, rule, ruleName) {
580
+ return function ruleCall() {
581
+ var args = [];
582
+ for (var _i = 0; _i < arguments.length; _i++) {
583
+ args[_i] = arguments[_i];
584
+ }
585
+ var transformedResult = transformResult.apply(void 0, __spreadArray([ctx.run({ value: value }, function () { return rule.apply(void 0, __spreadArray([value], args)); }),
586
+ ruleName,
587
+ value], args));
588
+ if (!transformedResult.pass) {
589
+ if (isEmpty(transformedResult.message)) {
590
+ throwError("enforce/" + ruleName + " failed with " + JSON.stringify(value));
591
+ }
592
+ else {
593
+ // Explicitly throw a string so that vest.test can pick it up as the validation error message
594
+ throw transformedResult.message;
595
+ }
596
+ }
597
+ return target;
598
+ };
599
+ }
600
+ }
601
+
602
+ // eslint-disable-next-line max-lines-per-function
603
+ function genEnforceLazy(key) {
604
+ var registeredRules = [];
605
+ var lazyMessage;
606
+ return addLazyRule(key);
607
+ // eslint-disable-next-line max-lines-per-function
608
+ function addLazyRule(ruleName) {
609
+ // eslint-disable-next-line max-lines-per-function
610
+ return function () {
611
+ var args = [];
612
+ for (var _i = 0; _i < arguments.length; _i++) {
613
+ args[_i] = arguments[_i];
614
+ }
615
+ var rule = getRule(ruleName);
616
+ registeredRules.push(function (value) {
617
+ return transformResult.apply(void 0, __spreadArray([rule.apply(void 0, __spreadArray([value], args)), ruleName, value], args));
618
+ });
619
+ var proxy = {
620
+ run: function (value) {
621
+ return defaultToPassing(mapFirst(registeredRules, function (rule, breakout) {
622
+ var _a;
623
+ var res = ctx.run({ value: value }, function () { return rule(value); });
624
+ if (!res.pass) {
625
+ breakout(ruleReturn(!!res.pass, (_a = optionalFunctionValue(lazyMessage, value, res.message)) !== null && _a !== void 0 ? _a : res.message));
626
+ }
627
+ }));
628
+ },
629
+ test: function (value) { return proxy.run(value).pass; },
630
+ message: function (message) {
631
+ if (message) {
632
+ lazyMessage = message;
633
+ }
634
+ return proxy;
635
+ }
636
+ };
637
+ if (!isProxySupported()) {
638
+ eachEnforceRule(function (ruleName) {
639
+ proxy[ruleName] = addLazyRule(ruleName);
640
+ });
641
+ return proxy;
642
+ }
643
+ // reassigning the proxy here is not pretty
644
+ // but it's a cleaner way of getting `run` and `test` for free
645
+ proxy = new Proxy(proxy, {
646
+ get: function (target, key) {
647
+ if (getRule(key)) {
648
+ return addLazyRule(key);
649
+ }
650
+ return target[key]; // already has `run` and `test` on it
651
+ }
652
+ });
653
+ return proxy;
654
+ };
655
+ }
656
+ }
657
+
658
+ /**
659
+ * Enforce is quite complicated, I want to explain it in detail.
660
+ * It is dynamic in nature, so a lot of proxy objects are involved.
661
+ *
662
+ * Enforce has two main interfaces
663
+ * 1. eager
664
+ * 2. lazy
665
+ *
666
+ * The eager interface is the most commonly used, and the easier to understand.
667
+ * It throws an error when a rule is not satisfied.
668
+ * The eager interface is declared in enforceEager.ts and it is quite simple to understand.
669
+ * enforce is called with a value, and the return value is a proxy object that points back to all the rules.
670
+ * When a rule is called, the value is mapped as its first argument, and if the rule passes, the same
671
+ * proxy object is returned. Otherwise, an error is thrown.
672
+ *
673
+ * The lazy interface works quite differently. It is declared in genEnforceLazy.ts.
674
+ * Rather than calling enforce directly, the lazy interface has all the rules as "methods" (only by proxy).
675
+ * Calling the first function in the chain will initialize an array of calls. It stores the different rule calls
676
+ * and the parameters passed to them. None of the rules are called yet.
677
+ * The rules are only invoked in sequence once either of these chained functions are called:
678
+ * 1. test(value)
679
+ * 2. run(value)
680
+ *
681
+ * Calling run or test will call all the rules in sequence, with the difference that test will only return a boolean value,
682
+ * while run will return an object with the validation result and an optional message created by the rule.
683
+ */
684
+ function genEnforce() {
685
+ var target = {
686
+ context: function () { return ctx.useX(); },
687
+ extend: function (customRules) {
688
+ assign(baseRules, customRules);
689
+ }
690
+ };
691
+ if (!isProxySupported()) {
692
+ eachEnforceRule(function (ruleName) {
693
+ // Only on the first rule access - start the chain of calls
694
+ target[ruleName] = genEnforceLazy(ruleName);
695
+ });
696
+ return assign(enforceEager, target);
697
+ }
698
+ return new Proxy(assign(enforceEager, target), {
699
+ get: function (target, key) {
700
+ if (key in target) {
701
+ return target[key];
702
+ }
703
+ if (!getRule(key)) {
704
+ return;
705
+ }
706
+ // Only on the first rule access - start the chain of calls
707
+ return genEnforceLazy(key);
708
+ }
709
+ });
710
+ }
711
+ var enforce = genEnforce();
712
+
94
713
  function noneOf(value) {
95
714
  var rules = [];
96
715
  for (var _i = 1; _i < arguments.length; _i++) {
@@ -104,14 +723,6 @@
104
723
  }));
105
724
  }
106
725
 
107
- function lengthEquals(value, arg1) {
108
- return value.length === Number(arg1);
109
- }
110
-
111
- function longerThan(value, arg1) {
112
- return value.length > Number(arg1);
113
- }
114
-
115
726
  var REQUIRED_COUNT = 1;
116
727
  function oneOf(value) {
117
728
  var rules = [];
@@ -131,6 +742,6 @@
131
742
  return ruleReturn(lengthEquals(passing, REQUIRED_COUNT));
132
743
  }
133
744
 
134
- n4s.enforce.extend({ allOf: allOf, anyOf: anyOf, noneOf: noneOf, oneOf: oneOf });
745
+ enforce.extend({ allOf: allOf, anyOf: anyOf, noneOf: noneOf, oneOf: oneOf });
135
746
 
136
747
  })));
@@ -1 +1 @@
1
- "use strict";!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("n4s")):"function"==typeof define&&define.amd?define(["n4s"],e):e((n="undefined"!=typeof globalThis?globalThis:n||self).n4s)}(this,(function(n){function e(n,e){function t(n){r=!0,f=n}for(var r=!1,f=null,o=0;o<n.length;o++)if(e(n[o],t,o),r)return f}function t(n,e){var t;return null!==(t=function(n){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];return"function"==typeof n?n.apply(void 0,e):n}(n))&&void 0!==t?t:e}function r(n,e){return n={pass:n},e&&(n.message=e),n}function f(n,e){try{return n.run(e)}catch(n){return r(!1)}}n.enforce.extend({allOf:function(n){for(var o=[],u=1;u<arguments.length;u++)o[u-1]=arguments[u];return t(e(o,(function(e,t){(e=f(e,n)).pass||t(e)})),r(!0))},anyOf:function(n){for(var o=[],u=1;u<arguments.length;u++)o[u-1]=arguments[u];return t(e(o,(function(e,t){(e=f(e,n)).pass&&t(e)})),r(!1))},noneOf:function(n){for(var o=[],u=1;u<arguments.length;u++)o[u-1]=arguments[u];return t(e(o,(function(e,t){f(e,n).pass&&t(r(!1))})),r(!0))},oneOf:function(n){for(var e=[],t=1;t<arguments.length;t++)e[t-1]=arguments[t];var o=[];return e.some((function(e){if(o.length>Number(1))return!1;(e=f(e,n)).pass&&o.push(e)})),r(o.length===Number(1))}})}));
1
+ "use strict";!function(n){"function"==typeof define&&define.amd?define(n):n()}((function(){function n(n,t){function r(n){e=!0,u=n}for(var e=!1,u=null,i=0;i<n.length;i++)if(t(n[i],r,i),e)return u}function t(n){return"function"==typeof n}function r(n){for(var r=[],e=1;e<arguments.length;e++)r[e-1]=arguments[e];return t(n)?n.apply(void 0,r):n}function e(n,t){var e;return null!==(e=r(n))&&void 0!==e?e:t}function u(n,t){return n={pass:n},t&&(n.message=t),n}function i(n,t){try{return n.run(t)}catch(n){return u(!1)}}function o(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function f(n){return null===n}function s(n){return void 0===n}function a(n){return null===n||s(n)}function c(n){return String(n)===n}function l(n,t){return c(n)&&c(t)&&n.endsWith(t)}function N(n,t){return n===t}function v(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}function h(n,t){return v(n)&&v(t)&&Number(n)>Number(t)}function p(n,t){return v(n)&&v(t)&&Number(n)>=Number(t)}function g(n){return!!Array.isArray(n)}function m(n,t){return!!(g(t)||c(t)&&c(n))&&-1!==t.indexOf(n)}function y(n,t){return v(n)&&v(t)&&Number(n)<=Number(t)}function d(n,t,r){return p(n,t)&&y(n,r)}function b(n){return a(n)||c(n)&&!n.trim()}function O(n){return!!n===n}function E(n){return"number"==typeof n}function x(n,t){return n.length===Number(t)}function w(n){if(n){if(E(n))return 0===n;if(Object.prototype.hasOwnProperty.call(n,"length"))return x(n,0);if("object"==typeof n)return x(Object.keys(n),0)}return!0}function q(n,t){return n in t}function T(n){return Number.isNaN(n)}function S(n){return!!v(n)&&0>Number(n)}function A(n){return!!n}function B(n,t){if(a(t))return!1;for(var r in t)if(t[r]===n)return!0;return!1}function P(n,t){return v(n)&&v(t)&&Number(n)<Number(t)}function W(n,t){return n.length>Number(t)}function j(n,t){return t instanceof RegExp?t.test(n):!!c(t)&&new RegExp(t).test(n)}function k(n,t){return v(n)&&v(t)&&Number(n)===Number(t)}function F(n,t){return c(n)&&c(t)&&n.startsWith(t)}function I(n){for(var r in hn){var e=hn[r];t(e)&&n(r,e)}}function J(n,t){throw Error(e(t,n))}function K(){return null}function R(n,t,r){if(r||2===arguments.length)for(var e,u=0,i=t.length;u<i;u++)!e&&u in t||(e||(e=Array.prototype.slice.call(t,0,u)),e[u]=t[u]);return n.concat(e||Array.prototype.slice.call(t))}function U(){try{return t(Proxy)}catch(n){return!1}}function V(n,t,e){for(var i=[],o=3;o<arguments.length;o++)i[o-3]=arguments[o];return O(n)||n&&O(n.pass)||J("Incorrect return value for rule: "+JSON.stringify(n)),O(n)?u(n):u(n.pass,r.apply(void 0,R([n.message,t,e],i)))}function X(n){function t(t,r,e){return function(){for(var u=[],i=0;i<arguments.length;i++)u[i]=arguments[i];if(!(i=V.apply(void 0,R([pn.run({value:n},(function(){return r.apply(void 0,R([n],u))})),e,n],u))).pass){if(!w(i.message))throw i.message;J("enforce/"+e+" failed with "+JSON.stringify(n))}return t}}var r={};if(!U())return I((function(n,e){r[n]=t(r,e,n)})),r;var e=new Proxy(r,{get:function(n,r){if(n=hn[r])return t(e,n,r)}});return e}function z(t){var i,o=[];return function t(f){return function(){for(var s=[],a=0;a<arguments.length;a++)s[a]=arguments[a];var c=hn[f];o.push((function(n){return V.apply(void 0,R([c.apply(void 0,R([n],s)),f,n],s))}));var l={run:function(t){return e(n(o,(function(n,e){var o,f=pn.run({value:t},(function(){return n(t)}));f.pass||e(u(!!f.pass,null!==(o=r(i,t,f.message))&&void 0!==o?o:f.message))})),u(!0))},test:function(n){return l.run(n).pass},message:function(n){return n&&(i=n),l}};return U()?l=new Proxy(l,{get:function(n,r){return hn[r]?t(r):n[r]}}):(I((function(n){l[n]=t(n)})),l)}}(t)}var C,M=Object.assign,D=o(f),G=o(s),H=o(a),L=o(l),Q=o(N),Y=o(v),Z=o(g),$=o(m),_=o(d),nn=o(b),tn=o(O),rn=o(E),en=o(x),un=o(w),on=o(q),fn=o(T),sn=o(S),an=o(c),cn=o(A),ln=o(B),Nn=o(j),vn=o(k),hn={condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:L,doesNotStartWith:o(F),endsWith:l,equals:N,greaterThan:h,greaterThanOrEquals:p,gt:h,gte:p,inside:m,isArray:g,isBetween:d,isBlank:b,isBoolean:O,isEmpty:w,isEven:function(n){return!!v(n)&&0==n%2},isFalsy:cn,isKeyOf:q,isNaN:T,isNegative:S,isNotArray:Z,isNotBetween:_,isNotBlank:nn,isNotBoolean:tn,isNotEmpty:un,isNotKeyOf:on,isNotNaN:fn,isNotNull:D,isNotNullish:H,isNotNumber:rn,isNotNumeric:Y,isNotString:an,isNotUndefined:G,isNotValueOf:ln,isNull:f,isNullish:a,isNumber:E,isNumeric:v,isOdd:function(n){return!!v(n)&&0!=n%2},isPositive:sn,isString:c,isTruthy:A,isUndefined:s,isValueOf:B,lengthEquals:x,lengthNotEquals:en,lessThan:P,lessThanOrEquals:y,longerThan:W,longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:P,lte:y,matches:j,notEquals:Q,notInside:$,notMatches:Nn,numberEquals:k,numberNotEquals:vn,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:F},pn=function(n){function t(t,e){var o,f,s=u();return t=M({},s||{},null!==(o=r(n,t,s))&&void 0!==o?o:t),o=i.ctx=Object.freeze(t),i.ancestry.unshift(o),e=e(o),i.ancestry.shift(),i.ctx=null!==(f=i.ancestry[0])&&void 0!==f?f:null,e}function u(){return i.ctx}var i={ancestry:[]};return{bind:function(n,r){return function(){for(var e=[],u=0;u<arguments.length;u++)e[u]=arguments[u];return t(n,(function(){return r.apply(void 0,e)}))}},run:t,use:u,useX:function(n){var t;return null!==(t=i.ctx)&&void 0!==t?t:J(e(n,"Context was used after it was closed"))}}}((function(n,t){var r={value:n.value,meta:n.meta||{}};return t?n.set?M(r,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:M(r,{parent:K})}));(C={context:function(){return pn.useX()},extend:function(n){M(hn,n)}},U()?new Proxy(M(X,C),{get:function(n,t){return t in n?n[t]:hn[t]?z(t):void 0}}):(I((function(n){C[n]=z(n)})),M(X,C))).extend({allOf:function(t){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return e(n(r,(function(n,r){(n=i(n,t)).pass||r(n)})),u(!0))},anyOf:function(t){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return e(n(r,(function(n,r){(n=i(n,t)).pass&&r(n)})),u(!1))},noneOf:function(t){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return e(n(r,(function(n,r){i(n,t).pass&&r(u(!1))})),u(!0))},oneOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var e=[];return t.some((function(t){if(W(e,1))return!1;(t=i(t,n)).pass&&e.push(t)})),u(x(e,1))}})}));