1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.ArrayPredicate = void 0;
|
4 | const isEqual = require("lodash.isequal");
|
5 | const predicate_1 = require("./predicate");
|
6 | const __1 = require("..");
|
7 | const match_shape_1 = require("../utils/match-shape");
|
8 | class ArrayPredicate extends predicate_1.Predicate {
|
9 | |
10 |
|
11 |
|
12 | constructor(options) {
|
13 | super('array', options);
|
14 | }
|
15 | |
16 |
|
17 |
|
18 |
|
19 |
|
20 | length(length) {
|
21 | return this.addValidator({
|
22 | message: (value, label) => `Expected ${label} to have length \`${length}\`, got \`${value.length}\``,
|
23 | validator: value => value.length === length
|
24 | });
|
25 | }
|
26 | |
27 |
|
28 |
|
29 |
|
30 |
|
31 | minLength(length) {
|
32 | return this.addValidator({
|
33 | message: (value, label) => `Expected ${label} to have a minimum length of \`${length}\`, got \`${value.length}\``,
|
34 | validator: value => value.length >= length,
|
35 | negatedMessage: (value, label) => `Expected ${label} to have a maximum length of \`${length - 1}\`, got \`${value.length}\``
|
36 | });
|
37 | }
|
38 | |
39 |
|
40 |
|
41 |
|
42 |
|
43 | maxLength(length) {
|
44 | return this.addValidator({
|
45 | message: (value, label) => `Expected ${label} to have a maximum length of \`${length}\`, got \`${value.length}\``,
|
46 | validator: value => value.length <= length,
|
47 | negatedMessage: (value, label) => `Expected ${label} to have a minimum length of \`${length + 1}\`, got \`${value.length}\``
|
48 | });
|
49 | }
|
50 | |
51 |
|
52 |
|
53 |
|
54 |
|
55 | startsWith(searchElement) {
|
56 | return this.addValidator({
|
57 | message: (value, label) => `Expected ${label} to start with \`${searchElement}\`, got \`${value[0]}\``,
|
58 | validator: value => value[0] === searchElement
|
59 | });
|
60 | }
|
61 | |
62 |
|
63 |
|
64 |
|
65 |
|
66 | endsWith(searchElement) {
|
67 | return this.addValidator({
|
68 | message: (value, label) => `Expected ${label} to end with \`${searchElement}\`, got \`${value[value.length - 1]}\``,
|
69 | validator: value => value[value.length - 1] === searchElement
|
70 | });
|
71 | }
|
72 | |
73 |
|
74 |
|
75 |
|
76 |
|
77 | includes(...searchElements) {
|
78 | return this.addValidator({
|
79 | message: (value, label) => `Expected ${label} to include all elements of \`${JSON.stringify(searchElements)}\`, got \`${JSON.stringify(value)}\``,
|
80 | validator: value => searchElements.every(element => value.includes(element))
|
81 | });
|
82 | }
|
83 | |
84 |
|
85 |
|
86 |
|
87 |
|
88 | includesAny(...searchElements) {
|
89 | return this.addValidator({
|
90 | message: (value, label) => `Expected ${label} to include any element of \`${JSON.stringify(searchElements)}\`, got \`${JSON.stringify(value)}\``,
|
91 | validator: value => searchElements.some(element => value.includes(element))
|
92 | });
|
93 | }
|
94 | |
95 |
|
96 |
|
97 | get empty() {
|
98 | return this.addValidator({
|
99 | message: (value, label) => `Expected ${label} to be empty, got \`${JSON.stringify(value)}\``,
|
100 | validator: value => value.length === 0
|
101 | });
|
102 | }
|
103 | |
104 |
|
105 |
|
106 | get nonEmpty() {
|
107 | return this.addValidator({
|
108 | message: (_, label) => `Expected ${label} to not be empty`,
|
109 | validator: value => value.length > 0
|
110 | });
|
111 | }
|
112 | |
113 |
|
114 |
|
115 |
|
116 |
|
117 | deepEqual(expected) {
|
118 | return this.addValidator({
|
119 | message: (value, label) => `Expected ${label} to be deeply equal to \`${JSON.stringify(expected)}\`, got \`${JSON.stringify(value)}\``,
|
120 | validator: value => isEqual(value, expected)
|
121 | });
|
122 | }
|
123 | |
124 |
|
125 |
|
126 |
|
127 |
|
128 |
|
129 |
|
130 |
|
131 |
|
132 |
|
133 | ofType(predicate) {
|
134 | let error;
|
135 |
|
136 | return this.addValidator({
|
137 | message: (_, label) => `(${label}) ${error}`,
|
138 | validator: value => {
|
139 | try {
|
140 | for (const item of value) {
|
141 | __1.default(item, predicate);
|
142 | }
|
143 | return true;
|
144 | }
|
145 | catch (error_) {
|
146 | error = error_.message;
|
147 | return false;
|
148 | }
|
149 | }
|
150 | });
|
151 | }
|
152 | |
153 |
|
154 |
|
155 |
|
156 |
|
157 |
|
158 |
|
159 |
|
160 |
|
161 |
|
162 | exactShape(predicates) {
|
163 | const shape = predicates;
|
164 | return this.addValidator({
|
165 | message: (_, label, message) => `${message.replace('Expected', 'Expected element')} in ${label}`,
|
166 | validator: object => match_shape_1.exact(object, shape, undefined, true)
|
167 | });
|
168 | }
|
169 | }
|
170 | exports.ArrayPredicate = ArrayPredicate;
|