vest 5.0.0 → 5.0.1

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.
Files changed (116) hide show
  1. package/LICENSE +2 -2
  2. package/README.md +2 -57
  3. package/SuiteSerializer/package.json +9 -0
  4. package/dist/cjs/SuiteSerializer.development.js +19 -0
  5. package/dist/cjs/SuiteSerializer.js +6 -0
  6. package/dist/cjs/SuiteSerializer.production.js +1 -0
  7. package/dist/cjs/classnames.development.js +37 -17
  8. package/dist/cjs/classnames.js +0 -1
  9. package/dist/cjs/classnames.production.js +1 -1
  10. package/dist/cjs/compose.js +2 -3
  11. package/dist/cjs/compounds.js +2 -3
  12. package/dist/cjs/date.js +6 -0
  13. package/dist/cjs/email.js +6 -0
  14. package/dist/cjs/enforce/compose.development.js +1 -54
  15. package/dist/cjs/enforce/compose.production.js +1 -1
  16. package/dist/cjs/enforce/compounds.development.js +18 -84
  17. package/dist/cjs/enforce/compounds.production.js +1 -1
  18. package/dist/cjs/enforce/date.development.js +26 -0
  19. package/dist/cjs/enforce/date.production.js +1 -0
  20. package/dist/cjs/enforce/email.development.js +26 -0
  21. package/dist/cjs/enforce/email.production.js +1 -0
  22. package/dist/cjs/enforce/isURL.development.js +26 -0
  23. package/dist/cjs/enforce/isURL.production.js +1 -0
  24. package/dist/cjs/enforce/schema.development.js +18 -84
  25. package/dist/cjs/enforce/schema.production.js +1 -1
  26. package/dist/cjs/isURL.js +6 -0
  27. package/dist/cjs/parser.development.js +30 -11
  28. package/dist/cjs/parser.js +0 -1
  29. package/dist/cjs/parser.production.js +1 -1
  30. package/dist/cjs/promisify.development.js +22 -9
  31. package/dist/cjs/promisify.js +0 -1
  32. package/dist/cjs/promisify.production.js +1 -1
  33. package/dist/cjs/schema.js +2 -3
  34. package/dist/cjs/vest.development.js +1410 -1364
  35. package/dist/cjs/vest.js +0 -1
  36. package/dist/cjs/vest.production.js +1 -1
  37. package/dist/es/SuiteSerializer.development.js +17 -0
  38. package/dist/es/SuiteSerializer.production.js +1 -0
  39. package/dist/es/classnames.development.js +39 -19
  40. package/dist/es/classnames.production.js +1 -1
  41. package/dist/es/enforce/compose.development.js +1 -58
  42. package/dist/es/enforce/compose.production.js +1 -1
  43. package/dist/es/enforce/compounds.development.js +2 -90
  44. package/dist/es/enforce/compounds.production.js +1 -1
  45. package/dist/es/enforce/date.development.js +2 -0
  46. package/dist/es/enforce/date.production.js +1 -0
  47. package/dist/es/enforce/email.development.js +2 -0
  48. package/dist/es/enforce/email.production.js +1 -0
  49. package/dist/es/enforce/isURL.development.js +2 -0
  50. package/dist/es/enforce/isURL.production.js +1 -0
  51. package/dist/es/enforce/schema.development.js +2 -88
  52. package/dist/es/enforce/schema.production.js +1 -1
  53. package/dist/es/parser.development.js +31 -10
  54. package/dist/es/parser.production.js +1 -1
  55. package/dist/es/promisify.development.js +23 -10
  56. package/dist/es/promisify.production.js +1 -1
  57. package/dist/es/vest.development.js +1407 -1355
  58. package/dist/es/vest.production.js +1 -1
  59. package/dist/umd/SuiteSerializer.development.js +23 -0
  60. package/dist/umd/SuiteSerializer.production.js +1 -0
  61. package/dist/umd/classnames.development.js +40 -20
  62. package/dist/umd/classnames.production.js +1 -1
  63. package/dist/umd/enforce/compose.development.js +6 -60
  64. package/dist/umd/enforce/compose.production.js +1 -1
  65. package/dist/umd/enforce/compounds.development.js +29 -94
  66. package/dist/umd/enforce/compounds.production.js +1 -1
  67. package/dist/umd/enforce/date.development.js +30 -0
  68. package/dist/umd/enforce/date.production.js +1 -0
  69. package/dist/umd/enforce/email.development.js +30 -0
  70. package/dist/umd/enforce/email.production.js +1 -0
  71. package/dist/umd/enforce/isURL.development.js +30 -0
  72. package/dist/umd/enforce/isURL.production.js +1 -0
  73. package/dist/umd/enforce/schema.development.js +29 -94
  74. package/dist/umd/enforce/schema.production.js +1 -1
  75. package/dist/umd/parser.development.js +33 -14
  76. package/dist/umd/parser.production.js +1 -1
  77. package/dist/umd/promisify.development.js +25 -12
  78. package/dist/umd/promisify.production.js +1 -1
  79. package/dist/umd/vest.development.js +1413 -1368
  80. package/dist/umd/vest.production.js +1 -1
  81. package/enforce/date/package.json +9 -0
  82. package/enforce/email/package.json +9 -0
  83. package/enforce/isURL/package.json +9 -0
  84. package/package.json +259 -141
  85. package/types/SuiteSerializer.d.ts +201 -0
  86. package/types/SuiteSerializer.d.ts.map +1 -0
  87. package/types/classnames.d.ts +110 -17
  88. package/types/classnames.d.ts.map +1 -0
  89. package/types/enforce/compose.d.ts +2 -126
  90. package/types/enforce/compose.d.ts.map +1 -0
  91. package/types/enforce/compounds.d.ts +2 -136
  92. package/types/enforce/compounds.d.ts.map +1 -0
  93. package/types/enforce/date.d.ts +2 -0
  94. package/types/enforce/date.d.ts.map +1 -0
  95. package/types/enforce/email.d.ts +2 -0
  96. package/types/enforce/email.d.ts.map +1 -0
  97. package/types/enforce/isURL.d.ts +2 -0
  98. package/types/enforce/isURL.d.ts.map +1 -0
  99. package/types/enforce/schema.d.ts +2 -144
  100. package/types/enforce/schema.d.ts.map +1 -0
  101. package/types/parser.d.ts +110 -20
  102. package/types/parser.d.ts.map +1 -0
  103. package/types/promisify.d.ts +99 -43
  104. package/types/promisify.d.ts.map +1 -0
  105. package/types/vest.d.ts +272 -260
  106. package/types/vest.d.ts.map +1 -0
  107. package/CHANGELOG.md +0 -87
  108. package/testUtils/__tests__/partition.test.ts +0 -21
  109. package/testUtils/expandStateRef.ts +0 -8
  110. package/testUtils/mockThrowError.ts +0 -14
  111. package/testUtils/partition.ts +0 -13
  112. package/testUtils/runCreateRef.ts +0 -10
  113. package/testUtils/suiteDummy.ts +0 -108
  114. package/testUtils/testDummy.ts +0 -155
  115. package/testUtils/testObjects.ts +0 -6
  116. package/tsconfig.json +0 -8
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 ealush
3
+ Copyright (c) 2022 ealush
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
18
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,58 +1,3 @@
1
- # Vest - Declarative validations framework
1
+ # vest-5
2
2
 
3
- [Vest Documentation](https://vestjs.dev)
4
-
5
- [![Join Discord](https://badgen.net/discord/online-members/WmADZpJnSe?icon=discord&label=Discord)](https://discord.gg/WmADZpJnSe) [![Github Stars](https://badgen.net/github/stars/ealush/vest?color=yellow&label=Github%20🌟)](https://github.com/ealush/vest) [![Version](https://badgen.net/npm/v/vest?&icon=npm)](https://www.npmjs.com/package/vest) [![Downloads](https://badgen.net/npm/dt/vest?label=Downloads)](https://www.npmjs.com/package/vest) [![bundlephobia](https://badgen.net/bundlephobia/minzip/vest)](https://bundlephobia.com/package/vest) [![Status](https://badgen.net/github/status/ealush/vest)](https://github.com/ealush/vest/actions)
6
-
7
- ![Vest](https://cdn.jsdelivr.net/gh/ealush/vest@assets/logo_250.png 'Vest')
8
-
9
- Vest is a form-validation framework inspired by unit testing libraries like Mocha or Jest; It is designed to be easy to use and easy to learn by introducing their declarative syntax.
10
-
11
- The idea behind Vest is that your validations can be described as a suite - a contract that reflects your form or feature structure. Vest is framework agnostic, meaning it can be used with any UI framework, or without any framework at all.
12
-
13
- Using Vest for form validation can reduce bloat, improve feature readability and maintainability.
14
-
15
- ```js
16
- test('username', 'Username is required', () => {
17
- enforce(data.username).isNotBlank();
18
- });
19
-
20
- test('username', 'Username must be at least 3 chars', () => {
21
- enforce(data.username).longerThanOrEquals(3);
22
- });
23
- ```
24
-
25
- ## Installation
26
-
27
- ```
28
- npm i vest
29
- ```
30
-
31
- ## Motivation
32
-
33
- Writing forms is an integral part of building web apps, and even though it may seem trivial at first - as your feature grows over time, so does your validation logic grows in complexity.
34
-
35
- Vest tries to remediate this by separating validation logic from feature logic, so it's easier to maintain over time and refactor when needed.
36
-
37
- # Why Vest?
38
-
39
- 💡 Vest is easy to Learn. Vest adopts the syntax and style of unit testing frameworks, so you can leverage the knowledge you already have to write your form validations.
40
-
41
- 🎨 Vest is framework agnostic. You can use Vest with any UI framework out there.
42
-
43
- 🧠 Vest takes care of all the annoying parts for you. It manages its validation state, handles async validations, and much more.
44
-
45
- 🧩 Vest is extendable. You can easily add new kinds of validations to Vest according to your needs.
46
-
47
- ♻️ Validation logic in Vest can be shared across multiple features in your app.
48
-
49
- # Getting Started
50
-
51
- [Vest Documentation](https://vestjs.dev)
52
-
53
- Here are some code sandboxes to get you started:
54
-
55
- - [React](https://codesandbox.io/s/react-28jwx)
56
- - [Vue](https://codesandbox.io/s/vue-hsyt8)
57
- - [Svelte](https://codesandbox.io/s/svelte-tsfhx)
58
- - [Vanilla](https://codesandbox.io/s/vest-vanilla-js-35u8e)
3
+ Declarative Form Validations Framework
@@ -0,0 +1,9 @@
1
+ {
2
+ "main": "../dist/cjs/SuiteSerializer.js",
3
+ "module": "../dist/es/SuiteSerializer.production.js",
4
+ "unpkg": "../dist/umd/SuiteSerializer.production.js",
5
+ "jsdelivr": "../dist/umd/SuiteSerializer.production.js",
6
+ "name": "SuiteSerializer",
7
+ "types": "../types/SuiteSerializer.d.ts",
8
+ "private": true
9
+ }
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ var vestjsRuntime = require('vestjs-runtime');
4
+
5
+ class SuiteSerializer {
6
+ static serialize(suite) {
7
+ const dump = Object.assign(Object.assign({}, suite.dump()), { output: undefined });
8
+ return vestjsRuntime.IsolateSerializer.serialize(dump);
9
+ }
10
+ static deserialize(serialized) {
11
+ return vestjsRuntime.IsolateSerializer.deserialize(serialized);
12
+ }
13
+ static resume(suite, root) {
14
+ const suiteRoot = SuiteSerializer.deserialize(root);
15
+ suite.resume(suiteRoot);
16
+ }
17
+ }
18
+
19
+ exports.SuiteSerializer = SuiteSerializer;
@@ -0,0 +1,6 @@
1
+ 'use strict'
2
+ if (process.env.NODE_ENV === 'production') {
3
+ module.exports = require('./SuiteSerializer.production.js');
4
+ } else {
5
+ module.exports = require('./SuiteSerializer.development.js');
6
+ }
@@ -0,0 +1 @@
1
+ "use strict";var e=require("vestjs-runtime");class i{static serialize(i){const s=Object.assign(Object.assign({},i.dump()),{output:void 0});return e.IsolateSerializer.serialize(s)}static deserialize(i){return e.IsolateSerializer.deserialize(i)}static resume(e,s){const r=i.deserialize(s);e.resume(r)}}exports.SuiteSerializer=i;
@@ -3,30 +3,51 @@
3
3
  var vestUtils = require('vest-utils');
4
4
  var vest = require('vest');
5
5
 
6
- // eslint-disable-next-line max-statements
6
+ var ErrorStrings;
7
+ (function (ErrorStrings) {
8
+ ErrorStrings["HOOK_CALLED_OUTSIDE"] = "hook called outside of a running suite.";
9
+ ErrorStrings["EXPECTED_VEST_TEST"] = "Expected value to be an instance of IsolateTest";
10
+ ErrorStrings["FIELD_NAME_REQUIRED"] = "Field name must be passed";
11
+ ErrorStrings["SUITE_MUST_BE_INITIALIZED_WITH_FUNCTION"] = "Suite must be initialized with a function";
12
+ ErrorStrings["PROMISIFY_REQUIRE_FUNCTION"] = "Vest.Promisify must be called with a function";
13
+ ErrorStrings["PARSER_EXPECT_RESULT_OBJECT"] = "Vest parser: expected argument at position 0 to be Vest's result object.";
14
+ ErrorStrings["WARN_MUST_BE_CALLED_FROM_TEST"] = "Warn must be called from within the body of a test function";
15
+ ErrorStrings["EACH_CALLBACK_MUST_BE_A_FUNCTION"] = "Each must be called with a function";
16
+ ErrorStrings["INVALID_PARAM_PASSED_TO_FUNCTION"] = "Incompatible params passed to {fn_name} function. \"{param}\" must be of type {expected}";
17
+ ErrorStrings["TESTS_CALLED_IN_DIFFERENT_ORDER"] = "Vest Critical Error: Tests called in different order than previous run.\n expected: {fieldName}\n received: {prevName}\n This can happen on one of two reasons:\n 1. You're using if/else statements to conditionally select tests. Instead, use \"skipWhen\".\n 2. You are iterating over a list of tests, and their order changed. Use \"each\" and a custom key prop so that Vest retains their state.";
18
+ ErrorStrings["UNEXPECTED_TEST_REGISTRATION_ERROR"] = "Unexpected error encountered during test registration.\n Please report this issue to Vest's Github repository.\n Test Object: {testObject}.\n Error: {error}.";
19
+ ErrorStrings["UNEXPECTED_TEST_RUN_ERROR"] = "Unexpected error encountered during test run. Please report this issue to Vest's Github repository.\n Test Object: {testObject}.";
20
+ ErrorStrings["INCLUDE_SELF"] = "Trying to call include.when on the same field.";
21
+ })(ErrorStrings || (ErrorStrings = {}));
22
+
7
23
  function parse(summary) {
8
- vestUtils.invariant(summary && vestUtils.hasOwnProperty(summary, 'valid'), "Vest parser: expected argument at position 0 to be Vest's result object.");
9
- var sel = vest.suiteSelectors(summary);
10
- var testedStorage = {};
11
- var selectors = {
24
+ vestUtils.invariant(summary && vestUtils.hasOwnProperty(summary, 'valid'), ErrorStrings.PARSER_EXPECT_RESULT_OBJECT);
25
+ const sel = vest.suiteSelectors(summary);
26
+ const testedStorage = {};
27
+ const selectors = {
12
28
  invalid: sel.hasErrors,
29
+ pending: sel.isPending,
13
30
  tested: isTested,
14
31
  untested: isUntested,
15
32
  valid: sel.isValid,
16
- warning: sel.hasWarnings
33
+ warning: sel.hasWarnings,
17
34
  };
18
35
  return selectors;
19
36
  // Booleans
20
37
  function isTested(fieldName) {
21
- if (!fieldName) {
38
+ if (vestUtils.isNullish(fieldName)) {
22
39
  return vestUtils.isPositive(summary.testCount);
23
40
  }
24
- if (vestUtils.hasOwnProperty(testedStorage, fieldName))
41
+ if (vestUtils.hasOwnProperty(testedStorage, fieldName)) {
25
42
  return testedStorage[fieldName];
43
+ }
44
+ addFieldToTestedStorage(fieldName);
45
+ return selectors.tested(fieldName);
46
+ }
47
+ function addFieldToTestedStorage(fieldName) {
26
48
  testedStorage[fieldName] =
27
49
  vestUtils.hasOwnProperty(summary.tests, fieldName) &&
28
50
  vestUtils.isPositive(summary.tests[fieldName].testCount);
29
- return selectors.tested(fieldName);
30
51
  }
31
52
  function isUntested(fieldName) {
32
53
  return !(vestUtils.isPositive(summary.testCount) && selectors.tested(fieldName));
@@ -36,14 +57,13 @@ function parse(summary) {
36
57
  /**
37
58
  * Creates a function that returns class names that match the validation result
38
59
  */
39
- function classnames(res, classes) {
40
- if (classes === void 0) { classes = {}; }
41
- var selectors = parse(res);
42
- return function (key) {
43
- var classesArray = [];
44
- for (var selector in classes) {
45
- var sel = selector;
46
- if (vestUtils.isFunction(selectors[sel]) && selectors[sel](key)) {
60
+ function classnames(res, classes = {}) {
61
+ const selectors = parse(res);
62
+ return function cn(fieldName) {
63
+ const classesArray = [];
64
+ for (const selector in classes) {
65
+ const sel = selector;
66
+ if (vestUtils.isFunction(selectors[sel]) && selectors[sel](fieldName)) {
47
67
  classesArray.push(classes[sel]);
48
68
  }
49
69
  }
@@ -1,5 +1,4 @@
1
1
  'use strict'
2
-
3
2
  if (process.env.NODE_ENV === 'production') {
4
3
  module.exports = require('./classnames.production.js');
5
4
  } else {
@@ -1 +1 @@
1
- "use strict";var t=require("vest-utils"),e=require("vest");module.exports=function(s,r){void 0===r&&(r={});var i=function(s){t.invariant(s&&t.hasOwnProperty(s,"valid"),"Vest parser: expected argument at position 0 to be Vest's result object.");var r=e.suiteSelectors(s),i={},n={invalid:r.hasErrors,tested:function(e){return e?t.hasOwnProperty(i,e)?i[e]:(i[e]=t.hasOwnProperty(s.tests,e)&&t.isPositive(s.tests[e].testCount),n.tested(e)):t.isPositive(s.testCount)},untested:function(e){return!(t.isPositive(s.testCount)&&n.tested(e))},valid:r.isValid,warning:r.hasWarnings};return n}(s);return function(e){var s,n=[];for(s in r){var o=s;t.isFunction(i[o])&&i[o](e)&&n.push(r[o])}return n.join(" ")}};
1
+ "use strict";var e,t=require("vest-utils"),s=require("vest");!function(e){e.HOOK_CALLED_OUTSIDE="hook called outside of a running suite.",e.EXPECTED_VEST_TEST="Expected value to be an instance of IsolateTest",e.FIELD_NAME_REQUIRED="Field name must be passed",e.SUITE_MUST_BE_INITIALIZED_WITH_FUNCTION="Suite must be initialized with a function",e.PROMISIFY_REQUIRE_FUNCTION="Vest.Promisify must be called with a function",e.PARSER_EXPECT_RESULT_OBJECT="Vest parser: expected argument at position 0 to be Vest's result object.",e.WARN_MUST_BE_CALLED_FROM_TEST="Warn must be called from within the body of a test function",e.EACH_CALLBACK_MUST_BE_A_FUNCTION="Each must be called with a function",e.INVALID_PARAM_PASSED_TO_FUNCTION='Incompatible params passed to {fn_name} function. "{param}" must be of type {expected}',e.TESTS_CALLED_IN_DIFFERENT_ORDER='Vest Critical Error: Tests called in different order than previous run.\n expected: {fieldName}\n received: {prevName}\n This can happen on one of two reasons:\n 1. You\'re using if/else statements to conditionally select tests. Instead, use "skipWhen".\n 2. You are iterating over a list of tests, and their order changed. Use "each" and a custom key prop so that Vest retains their state.',e.UNEXPECTED_TEST_REGISTRATION_ERROR="Unexpected error encountered during test registration.\n Please report this issue to Vest's Github repository.\n Test Object: {testObject}.\n Error: {error}.",e.UNEXPECTED_TEST_RUN_ERROR="Unexpected error encountered during test run. Please report this issue to Vest's Github repository.\n Test Object: {testObject}.",e.INCLUDE_SELF="Trying to call include.when on the same field."}(e||(e={})),module.exports=function(n,i={}){const r=function(n){t.invariant(n&&t.hasOwnProperty(n,"valid"),e.PARSER_EXPECT_RESULT_OBJECT);const i=s.suiteSelectors(n),r={},o={invalid:i.hasErrors,pending:i.isPending,tested:function(e){return t.isNullish(e)?t.isPositive(n.testCount):t.hasOwnProperty(r,e)?r[e]:(a(e),o.tested(e))},untested:function(e){return!(t.isPositive(n.testCount)&&o.tested(e))},valid:i.isValid,warning:i.hasWarnings};return o;function a(e){r[e]=t.hasOwnProperty(n.tests,e)&&t.isPositive(n.tests[e].testCount)}}(n);return function(e){const s=[];for(const n in i){const o=n;t.isFunction(r[o])&&r[o](e)&&s.push(i[o])}return s.join(" ")}};
@@ -1,7 +1,6 @@
1
1
  'use strict'
2
-
3
2
  if (process.env.NODE_ENV === 'production') {
4
- module.exports = require('./compose.production.js');
3
+ module.exports = require('./enforce/compose.production.js');
5
4
  } else {
6
- module.exports = require('./compose.development.js');
5
+ module.exports = require('./enforce/compose.development.js');
7
6
  }
@@ -1,7 +1,6 @@
1
1
  'use strict'
2
-
3
2
  if (process.env.NODE_ENV === 'production') {
4
- module.exports = require('./compounds.production.js');
3
+ module.exports = require('./enforce/compounds.production.js');
5
4
  } else {
6
- module.exports = require('./compounds.development.js');
5
+ module.exports = require('./enforce/compounds.development.js');
7
6
  }
@@ -0,0 +1,6 @@
1
+ 'use strict'
2
+ if (process.env.NODE_ENV === 'production') {
3
+ module.exports = require('./enforce/date.production.js');
4
+ } else {
5
+ module.exports = require('./enforce/date.development.js');
6
+ }
@@ -0,0 +1,6 @@
1
+ 'use strict'
2
+ if (process.env.NODE_ENV === 'production') {
3
+ module.exports = require('./enforce/email.production.js');
4
+ } else {
5
+ module.exports = require('./enforce/email.development.js');
6
+ }
@@ -1,60 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var n4s = require('n4s');
4
- var vestUtils = require('vest-utils');
3
+ var compose = require('n4s/compose');
5
4
 
6
- function ruleReturn(pass, message) {
7
- var output = { pass: pass };
8
- if (message) {
9
- output.message = message;
10
- }
11
- return output;
12
- }
13
- function failing() {
14
- return ruleReturn(false);
15
- }
16
- function passing() {
17
- return ruleReturn(true);
18
- }
19
- function defaultToPassing(callback) {
20
- return vestUtils.defaultTo(callback, passing());
21
- }
22
5
 
23
- function runLazyRule(lazyRule, currentValue) {
24
- try {
25
- return lazyRule.run(currentValue);
26
- }
27
- catch (_a) {
28
- return failing();
29
- }
30
- }
31
-
32
- /* eslint-disable max-lines-per-function */
33
- function compose() {
34
- var composites = [];
35
- for (var _i = 0; _i < arguments.length; _i++) {
36
- composites[_i] = arguments[_i];
37
- }
38
- return vestUtils.assign(function (value) {
39
- var res = run(value);
40
- vestUtils.invariant(res.pass, vestUtils.StringObject(res.message));
41
- }, {
42
- run: run,
43
- test: function (value) { return run(value).pass; }
44
- });
45
- function run(value) {
46
- return n4s.ctx.run({ value: value }, function () {
47
- return defaultToPassing(vestUtils.mapFirst(composites, function (composite, breakout) {
48
- /* HACK: Just a small white lie. ~~HELP WANTED~~.
49
- The ideal is that instead of `LazyRuleRunners` We would simply use `Lazy` to begin with.
50
- The problem is that lazy rules can't really be passed to this function due to some generic hell
51
- so we're limiting it to a small set of functions.
52
- */
53
- var res = runLazyRule(composite, value);
54
- breakout(!res.pass, res);
55
- }));
56
- });
57
- }
58
- }
59
6
 
60
7
  module.exports = compose;
@@ -1 +1 @@
1
- "use strict";var n=require("n4s"),t=require("vest-utils");function r(n,t){return n={pass:n},t&&(n.message=t),n}function u(n){return t.defaultTo(n,r(!0))}function e(n,t){try{return n.run(t)}catch(n){return r(!1)}}module.exports=function(){function r(r){return n.ctx.run({value:r},(function(){return u(t.mapFirst(s,(function(n,t){t(!(n=e(n,r)).pass,n)})))}))}for(var s=[],i=0;i<arguments.length;i++)s[i]=arguments[i];return t.assign((function(n){n=r(n),t.invariant(n.pass,t.StringObject(n.message))}),{run:r,test:function(n){return r(n).pass}})};
1
+ "use strict";var e=require("n4s/compose");module.exports=e;
@@ -1,92 +1,26 @@
1
1
  'use strict';
2
2
 
3
- var n4s = require('n4s');
4
- var vestUtils = require('vest-utils');
3
+ var compounds = require('n4s/compounds');
5
4
 
6
- function ruleReturn(pass, message) {
7
- var output = { pass: pass };
8
- if (message) {
9
- output.message = message;
10
- }
11
- return output;
12
- }
13
- function failing() {
14
- return ruleReturn(false);
15
- }
16
- function passing() {
17
- return ruleReturn(true);
18
- }
19
- function defaultToFailing(callback) {
20
- return vestUtils.defaultTo(callback, failing());
21
- }
22
- function defaultToPassing(callback) {
23
- return vestUtils.defaultTo(callback, passing());
5
+ function _interopNamespaceDefault(e) {
6
+ var n = Object.create(null);
7
+ if (e) {
8
+ Object.keys(e).forEach(function (k) {
9
+ if (k !== 'default') {
10
+ var d = Object.getOwnPropertyDescriptor(e, k);
11
+ Object.defineProperty(n, k, d.get ? d : {
12
+ enumerable: true,
13
+ get: function () { return e[k]; }
14
+ });
15
+ }
16
+ });
17
+ }
18
+ n.default = e;
19
+ return Object.freeze(n);
24
20
  }
25
21
 
26
- function runLazyRule(lazyRule, currentValue) {
27
- try {
28
- return lazyRule.run(currentValue);
29
- }
30
- catch (_a) {
31
- return failing();
32
- }
33
- }
22
+ var compounds__namespace = /*#__PURE__*/_interopNamespaceDefault(compounds);
34
23
 
35
- function allOf(value) {
36
- var rules = [];
37
- for (var _i = 1; _i < arguments.length; _i++) {
38
- rules[_i - 1] = arguments[_i];
39
- }
40
- return defaultToPassing(vestUtils.mapFirst(rules, function (rule, breakout) {
41
- var res = runLazyRule(rule, value);
42
- breakout(!res.pass, res);
43
- }));
44
- }
45
24
 
46
- function anyOf(value) {
47
- var rules = [];
48
- for (var _i = 1; _i < arguments.length; _i++) {
49
- rules[_i - 1] = arguments[_i];
50
- }
51
- return defaultToFailing(vestUtils.mapFirst(rules, function (rule, breakout) {
52
- var res = runLazyRule(rule, value);
53
- breakout(res.pass, res);
54
- }));
55
- }
56
-
57
- function noneOf(value) {
58
- var rules = [];
59
- for (var _i = 1; _i < arguments.length; _i++) {
60
- rules[_i - 1] = arguments[_i];
61
- }
62
- return defaultToPassing(vestUtils.mapFirst(rules, function (rule, breakout) {
63
- var res = runLazyRule(rule, value);
64
- breakout(res.pass, failing());
65
- }));
66
- }
67
-
68
- function equals(value, arg1) {
69
- return value === arg1;
70
- }
71
- vestUtils.bindNot(equals);
72
-
73
- var REQUIRED_COUNT = 1;
74
- function oneOf(value) {
75
- var rules = [];
76
- for (var _i = 1; _i < arguments.length; _i++) {
77
- rules[_i - 1] = arguments[_i];
78
- }
79
- var passingCount = 0;
80
- rules.some(function (rule) {
81
- var res = runLazyRule(rule, value);
82
- if (res.pass) {
83
- passingCount++;
84
- }
85
- if (vestUtils.greaterThan(passingCount, REQUIRED_COUNT)) {
86
- return false;
87
- }
88
- });
89
- return ruleReturn(equals(passingCount, REQUIRED_COUNT));
90
- }
91
25
 
92
- n4s.enforce.extend({ allOf: allOf, anyOf: anyOf, noneOf: noneOf, oneOf: oneOf });
26
+ exports.compounds = compounds__namespace;
@@ -1 +1 @@
1
- "use strict";var n=require("n4s"),r=require("vest-utils");function t(n,r){return n={pass:n},r&&(n.message=r),n}function e(){return t(!1)}function u(n){return r.defaultTo(n,e())}function f(n){return r.defaultTo(n,t(!0))}function o(n,r){try{return n.run(r)}catch(n){return e()}}function i(n,r){return n===r}r.bindNot(i);n.enforce.extend({allOf:function(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];return f(r.mapFirst(t,(function(r,t){t(!(r=o(r,n)).pass,r)})))},anyOf:function(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];return u(r.mapFirst(t,(function(r,t){t((r=o(r,n)).pass,r)})))},noneOf:function(n){for(var t=[],u=1;u<arguments.length;u++)t[u-1]=arguments[u];return f(r.mapFirst(t,(function(r,t){t((r=o(r,n)).pass,e())})))},oneOf:function(n){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];var f=0;return e.some((function(t){if(o(t,n).pass&&f++,r.greaterThan(f,1))return!1})),t(i(f,1))}});
1
+ "use strict";function e(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var t=e(require("n4s/compounds"));exports.compounds=t;
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ var date = require('n4s/date');
4
+
5
+ function _interopNamespaceDefault(e) {
6
+ var n = Object.create(null);
7
+ if (e) {
8
+ Object.keys(e).forEach(function (k) {
9
+ if (k !== 'default') {
10
+ var d = Object.getOwnPropertyDescriptor(e, k);
11
+ Object.defineProperty(n, k, d.get ? d : {
12
+ enumerable: true,
13
+ get: function () { return e[k]; }
14
+ });
15
+ }
16
+ });
17
+ }
18
+ n.default = e;
19
+ return Object.freeze(n);
20
+ }
21
+
22
+ var date__namespace = /*#__PURE__*/_interopNamespaceDefault(date);
23
+
24
+
25
+
26
+ exports.date = date__namespace;
@@ -0,0 +1 @@
1
+ "use strict";function e(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var t=e(require("n4s/date"));exports.date=t;
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ var email = require('n4s/email');
4
+
5
+ function _interopNamespaceDefault(e) {
6
+ var n = Object.create(null);
7
+ if (e) {
8
+ Object.keys(e).forEach(function (k) {
9
+ if (k !== 'default') {
10
+ var d = Object.getOwnPropertyDescriptor(e, k);
11
+ Object.defineProperty(n, k, d.get ? d : {
12
+ enumerable: true,
13
+ get: function () { return e[k]; }
14
+ });
15
+ }
16
+ });
17
+ }
18
+ n.default = e;
19
+ return Object.freeze(n);
20
+ }
21
+
22
+ var email__namespace = /*#__PURE__*/_interopNamespaceDefault(email);
23
+
24
+
25
+
26
+ exports.email = email__namespace;
@@ -0,0 +1 @@
1
+ "use strict";function e(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var t=e(require("n4s/email"));exports.email=t;
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ var isURL = require('n4s/isURL');
4
+
5
+ function _interopNamespaceDefault(e) {
6
+ var n = Object.create(null);
7
+ if (e) {
8
+ Object.keys(e).forEach(function (k) {
9
+ if (k !== 'default') {
10
+ var d = Object.getOwnPropertyDescriptor(e, k);
11
+ Object.defineProperty(n, k, d.get ? d : {
12
+ enumerable: true,
13
+ get: function () { return e[k]; }
14
+ });
15
+ }
16
+ });
17
+ }
18
+ n.default = e;
19
+ return Object.freeze(n);
20
+ }
21
+
22
+ var isURL__namespace = /*#__PURE__*/_interopNamespaceDefault(isURL);
23
+
24
+
25
+
26
+ exports.isURL = isURL__namespace;
@@ -0,0 +1 @@
1
+ "use strict";function e(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var t=e(require("n4s/isURL"));exports.isURL=t;
@@ -1,92 +1,26 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
3
+ var schema = require('n4s/schema');
4
4
 
5
- var n4s = require('n4s');
6
- var vestUtils = require('vest-utils');
7
-
8
- function ruleReturn(pass, message) {
9
- var output = { pass: pass };
10
- if (message) {
11
- output.message = message;
12
- }
13
- return output;
14
- }
15
- function failing() {
16
- return ruleReturn(false);
17
- }
18
- function passing() {
19
- return ruleReturn(true);
20
- }
21
- function defaultToPassing(callback) {
22
- return vestUtils.defaultTo(callback, passing());
23
- }
24
-
25
- function runLazyRule(lazyRule, currentValue) {
26
- try {
27
- return lazyRule.run(currentValue);
28
- }
29
- catch (_a) {
30
- return failing();
31
- }
32
- }
33
-
34
- function isArrayOf(inputArray, currentRule) {
35
- return defaultToPassing(vestUtils.mapFirst(inputArray, function (currentValue, breakout, index) {
36
- var res = n4s.ctx.run({ value: currentValue, set: true, meta: { index: index } }, function () { return runLazyRule(currentRule, currentValue); });
37
- breakout(!res.pass, res);
38
- }));
39
- }
40
-
41
- function loose(inputObject, shapeObject) {
42
- var _loop_1 = function (key) {
43
- var currentValue = inputObject[key];
44
- var currentRule = shapeObject[key];
45
- var res = n4s.ctx.run({ value: currentValue, set: true, meta: { key: key } }, function () {
46
- return runLazyRule(currentRule, currentValue);
47
- });
48
- if (!res.pass) {
49
- return { value: res };
50
- }
51
- };
52
- for (var key in shapeObject) {
53
- var state_1 = _loop_1(key);
54
- if (typeof state_1 === "object")
55
- return state_1.value;
56
- }
57
- return passing();
5
+ function _interopNamespaceDefault(e) {
6
+ var n = Object.create(null);
7
+ if (e) {
8
+ Object.keys(e).forEach(function (k) {
9
+ if (k !== 'default') {
10
+ var d = Object.getOwnPropertyDescriptor(e, k);
11
+ Object.defineProperty(n, k, d.get ? d : {
12
+ enumerable: true,
13
+ get: function () { return e[k]; }
14
+ });
15
+ }
16
+ });
17
+ }
18
+ n.default = e;
19
+ return Object.freeze(n);
58
20
  }
59
21
 
60
- function optional(value, ruleChain) {
61
- if (vestUtils.isNullish(value)) {
62
- return passing();
63
- }
64
- return runLazyRule(ruleChain, value);
65
- }
22
+ var schema__namespace = /*#__PURE__*/_interopNamespaceDefault(schema);
66
23
 
67
- function shape(inputObject, shapeObject) {
68
- var baseRes = loose(inputObject, shapeObject);
69
- if (!baseRes.pass) {
70
- return baseRes;
71
- }
72
- for (var key in inputObject) {
73
- if (!vestUtils.hasOwnProperty(shapeObject, key)) {
74
- return failing();
75
- }
76
- }
77
- return passing();
78
- }
79
-
80
- // Help needed improving the typings of this file.
81
- // Ideally, we'd be able to extend ShapeObject, but that's not possible.
82
- function partial(shapeObject) {
83
- var output = {};
84
- for (var key in shapeObject) {
85
- output[key] = n4s.enforce.optional(shapeObject[key]);
86
- }
87
- return output;
88
- }
89
24
 
90
- n4s.enforce.extend({ isArrayOf: isArrayOf, loose: loose, optional: optional, shape: shape });
91
25
 
92
- exports.partial = partial;
26
+ exports.schema = schema__namespace;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r=require("n4s"),n=require("vest-utils");function e(r,n){return r={pass:r},n&&(r.message=n),r}function t(){return e(!1)}function u(){return e(!0)}function i(r,n){try{return r.run(n)}catch(r){return t()}}function o(n,e){var t,o=function(t){var u=n[t],o=e[t];if(!(t=r.ctx.run({value:u,set:!0,meta:{key:t}},(function(){return i(o,u)}))).pass)return{value:t}};for(t in e){var a=o(t);if("object"==typeof a)return a.value}return u()}r.enforce.extend({isArrayOf:function(e,t){return function(r){return n.defaultTo(r,u())}(n.mapFirst(e,(function(n,e,u){e(!(u=r.ctx.run({value:n,set:!0,meta:{index:u}},(function(){return i(t,n)}))).pass,u)})))},loose:o,optional:function(r,e){return n.isNullish(r)?u():i(e,r)},shape:function(r,e){var i=o(r,e);if(!i.pass)return i;for(var a in r)if(!n.hasOwnProperty(e,a))return t();return u()}}),exports.partial=function(n){var e,t={};for(e in n)t[e]=r.enforce.optional(n[e]);return t};
1
+ "use strict";function e(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var c=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,c.get?c:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var t=e(require("n4s/schema"));exports.schema=t;