payload 0.16.1 → 0.16.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.
Files changed (82) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/auth/operations/login.js +6 -8
  3. package/dist/collections/config/types.d.ts +1 -0
  4. package/dist/collections/operations/create.js +21 -20
  5. package/dist/collections/operations/delete.js +6 -7
  6. package/dist/collections/operations/find.js +8 -9
  7. package/dist/collections/operations/findByID.js +7 -9
  8. package/dist/collections/operations/findVersionByID.js +7 -9
  9. package/dist/collections/operations/findVersions.js +8 -10
  10. package/dist/collections/operations/restoreVersion.js +9 -13
  11. package/dist/collections/operations/update.js +26 -33
  12. package/dist/collections/tests/hooks.spec.js +5 -1
  13. package/dist/fields/config/sanitize.d.ts +2 -1
  14. package/dist/fields/config/sanitize.js +5 -5
  15. package/dist/fields/config/sanitize.spec.js +30 -19
  16. package/dist/fields/config/types.d.ts +6 -4
  17. package/dist/fields/config/types.js +6 -2
  18. package/dist/fields/hooks/afterChange/index.d.ts +12 -0
  19. package/dist/fields/hooks/afterChange/index.js +26 -0
  20. package/dist/fields/hooks/afterChange/promise.d.ts +14 -0
  21. package/dist/fields/hooks/afterChange/promise.js +104 -0
  22. package/dist/fields/hooks/afterChange/traverseFields.d.ts +14 -0
  23. package/dist/fields/hooks/afterChange/traverseFields.js +20 -0
  24. package/dist/fields/hooks/afterRead/index.d.ts +16 -0
  25. package/dist/fields/hooks/afterRead/index.js +40 -0
  26. package/dist/fields/hooks/afterRead/promise.d.ts +18 -0
  27. package/dist/fields/hooks/afterRead/promise.js +225 -0
  28. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.d.ts +13 -0
  29. package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +84 -0
  30. package/dist/fields/hooks/afterRead/traverseFields.d.ts +18 -0
  31. package/dist/fields/hooks/afterRead/traverseFields.js +24 -0
  32. package/dist/fields/hooks/beforeChange/index.d.ts +16 -0
  33. package/dist/fields/hooks/beforeChange/index.js +40 -0
  34. package/dist/fields/hooks/beforeChange/promise.d.ts +25 -0
  35. package/dist/fields/hooks/beforeChange/promise.js +236 -0
  36. package/dist/fields/hooks/beforeChange/traverseFields.d.ts +25 -0
  37. package/dist/fields/hooks/beforeChange/traverseFields.js +27 -0
  38. package/dist/fields/hooks/beforeValidate/index.d.ts +14 -0
  39. package/dist/fields/hooks/beforeValidate/index.js +28 -0
  40. package/dist/fields/hooks/beforeValidate/promise.d.ts +16 -0
  41. package/dist/fields/hooks/beforeValidate/promise.js +229 -0
  42. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +16 -0
  43. package/dist/fields/hooks/beforeValidate/traverseFields.js +22 -0
  44. package/dist/fields/richText/populate.d.ts +1 -3
  45. package/dist/fields/richText/populate.js +3 -3
  46. package/dist/fields/richText/recurseNestedFields.d.ts +1 -3
  47. package/dist/fields/richText/recurseNestedFields.js +7 -15
  48. package/dist/fields/richText/relationshipPromise.d.ts +6 -9
  49. package/dist/fields/richText/relationshipPromise.js +11 -15
  50. package/dist/globals/config/types.d.ts +1 -0
  51. package/dist/globals/operations/findOne.js +11 -11
  52. package/dist/globals/operations/findVersionByID.js +5 -8
  53. package/dist/globals/operations/findVersions.js +7 -9
  54. package/dist/globals/operations/restoreVersion.js +12 -14
  55. package/dist/globals/operations/update.js +29 -33
  56. package/dist/graphql/schema/buildObjectType.js +3 -5
  57. package/dist/index.d.ts +0 -2
  58. package/dist/index.js +1 -3
  59. package/dist/versions/drafts/saveCollectionDraft.d.ts +1 -1
  60. package/dist/versions/drafts/saveCollectionDraft.js +1 -1
  61. package/dist/versions/ensurePublishedCollectionVersion.js +5 -7
  62. package/dist/versions/ensurePublishedGlobalVersion.js +5 -6
  63. package/dist/versions/saveCollectionVersion.js +6 -7
  64. package/dist/versions/saveGlobalVersion.js +7 -7
  65. package/docs/fields/overview.mdx +4 -3
  66. package/docs/hooks/collections.mdx +1 -0
  67. package/docs/hooks/fields.mdx +4 -3
  68. package/docs/hooks/globals.mdx +1 -0
  69. package/docs/production/preventing-abuse.mdx +16 -5
  70. package/package.json +4 -1
  71. package/dist/fields/accessPromise.d.ts +0 -22
  72. package/dist/fields/accessPromise.js +0 -39
  73. package/dist/fields/hookPromise.d.ts +0 -16
  74. package/dist/fields/hookPromise.js +0 -53
  75. package/dist/fields/performFieldOperations.d.ts +0 -25
  76. package/dist/fields/performFieldOperations.js +0 -90
  77. package/dist/fields/relationshipPopulationPromise.d.ts +0 -15
  78. package/dist/fields/relationshipPopulationPromise.js +0 -86
  79. package/dist/fields/traverseFields.d.ts +0 -41
  80. package/dist/fields/traverseFields.js +0 -339
  81. package/dist/fields/validationPromise.d.ts +0 -24
  82. package/dist/fields/validationPromise.js +0 -35
@@ -1,339 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const validationPromise_1 = __importDefault(require("./validationPromise"));
7
- const accessPromise_1 = __importDefault(require("./accessPromise"));
8
- const hookPromise_1 = __importDefault(require("./hookPromise"));
9
- const types_1 = require("./config/types");
10
- const relationshipPromise_1 = __importDefault(require("./richText/relationshipPromise"));
11
- const getDefaultValue_1 = __importDefault(require("./getDefaultValue"));
12
- const traverseFields = (args) => {
13
- const { fields, data = {}, originalDoc = {}, path, flattenLocales, locale, fallbackLocale, accessPromises, operation, overrideAccess, req, id, relationshipPopulations, depth, currentDepth, hook, hookPromises, fullOriginalDoc, fullData, valuePromises, validationPromises, errors, payload, showHiddenFields, unflattenLocaleActions, unflattenLocales, transformActions, docWithLocales = {}, skipValidation, isVersion, } = args;
14
- fields.forEach((field) => {
15
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
16
- const dataCopy = data;
17
- if (hook === 'afterRead') {
18
- if (field.type === 'group') {
19
- // Fill groups with empty objects so fields with hooks within groups can populate
20
- // themselves virtually as necessary
21
- if (typeof data[field.name] === 'undefined' && typeof originalDoc[field.name] === 'undefined') {
22
- data[field.name] = {};
23
- }
24
- }
25
- if ((0, types_1.fieldAffectsData)(field) && field.hidden && typeof data[field.name] !== 'undefined' && !showHiddenFields) {
26
- delete data[field.name];
27
- }
28
- if (field.type === 'point') {
29
- transformActions.push(() => {
30
- var _a;
31
- if (((_a = data[field.name]) === null || _a === void 0 ? void 0 : _a.coordinates) && Array.isArray(data[field.name].coordinates) && data[field.name].coordinates.length === 2) {
32
- data[field.name] = data[field.name].coordinates;
33
- }
34
- });
35
- }
36
- }
37
- if ((field.type === 'upload' || field.type === 'relationship')
38
- && (data[field.name] === '' || data[field.name] === 'none' || data[field.name] === 'null')) {
39
- if (field.type === 'relationship' && field.hasMany === true) {
40
- dataCopy[field.name] = [];
41
- }
42
- else {
43
- dataCopy[field.name] = null;
44
- }
45
- }
46
- if (field.type === 'relationship' && field.hasMany && (data[field.name] === '' || data[field.name] === 'none' || data[field.name] === 'null' || data[field.name] === null)) {
47
- dataCopy[field.name] = [];
48
- }
49
- if (field.type === 'number' && typeof data[field.name] === 'string') {
50
- const trimmed = data[field.name].trim();
51
- dataCopy[field.name] = (trimmed.length === 0) ? null : parseFloat(trimmed);
52
- }
53
- if ((0, types_1.fieldAffectsData)(field) && field.name === 'id') {
54
- if (field.type === 'number' && typeof data[field.name] === 'string') {
55
- dataCopy[field.name] = parseFloat(data[field.name]);
56
- }
57
- if (field.type === 'text' && typeof ((_a = data[field.name]) === null || _a === void 0 ? void 0 : _a.toString) === 'function' && typeof data[field.name] !== 'string') {
58
- dataCopy[field.name] = dataCopy[field.name].toString();
59
- }
60
- }
61
- if (field.type === 'checkbox') {
62
- if (data[field.name] === 'true')
63
- dataCopy[field.name] = true;
64
- if (data[field.name] === 'false')
65
- dataCopy[field.name] = false;
66
- if (data[field.name] === '')
67
- dataCopy[field.name] = false;
68
- }
69
- if (field.type === 'richText') {
70
- if (typeof data[field.name] === 'string') {
71
- try {
72
- const richTextJSON = JSON.parse(data[field.name]);
73
- dataCopy[field.name] = richTextJSON;
74
- }
75
- catch {
76
- // Disregard this data as it is not valid.
77
- // Will be reported to user by field validation
78
- }
79
- }
80
- if (((((_c = (_b = field.admin) === null || _b === void 0 ? void 0 : _b.elements) === null || _c === void 0 ? void 0 : _c.includes('relationship')) || ((_e = (_d = field.admin) === null || _d === void 0 ? void 0 : _d.elements) === null || _e === void 0 ? void 0 : _e.includes('upload'))) || !((_f = field === null || field === void 0 ? void 0 : field.admin) === null || _f === void 0 ? void 0 : _f.elements)) && hook === 'afterRead') {
81
- relationshipPopulations.push((0, relationshipPromise_1.default)({
82
- req,
83
- data,
84
- payload,
85
- overrideAccess,
86
- depth,
87
- field,
88
- currentDepth,
89
- showHiddenFields,
90
- }));
91
- }
92
- }
93
- const hasLocalizedValue = (0, types_1.fieldAffectsData)(field)
94
- && (typeof (data === null || data === void 0 ? void 0 : data[field.name]) === 'object' && (data === null || data === void 0 ? void 0 : data[field.name]) !== null)
95
- && field.name
96
- && field.localized
97
- && locale !== 'all'
98
- && flattenLocales;
99
- if (hasLocalizedValue) {
100
- let localizedValue = data[field.name][locale];
101
- if (typeof localizedValue === 'undefined' && fallbackLocale)
102
- localizedValue = data[field.name][fallbackLocale];
103
- if (typeof localizedValue === 'undefined' && field.type === 'group')
104
- localizedValue = {};
105
- if (typeof localizedValue === 'undefined')
106
- localizedValue = null;
107
- dataCopy[field.name] = localizedValue;
108
- }
109
- if ((0, types_1.fieldAffectsData)(field) && field.localized && unflattenLocales) {
110
- unflattenLocaleActions.push(() => {
111
- const localeData = payload.config.localization.locales.reduce((locales, localeID) => {
112
- var _a, _b, _c;
113
- let valueToSet;
114
- if (localeID === locale) {
115
- if (typeof data[field.name] !== 'undefined') {
116
- valueToSet = data[field.name];
117
- }
118
- else if ((_a = docWithLocales === null || docWithLocales === void 0 ? void 0 : docWithLocales[field.name]) === null || _a === void 0 ? void 0 : _a[localeID]) {
119
- valueToSet = (_b = docWithLocales === null || docWithLocales === void 0 ? void 0 : docWithLocales[field.name]) === null || _b === void 0 ? void 0 : _b[localeID];
120
- }
121
- }
122
- else {
123
- valueToSet = (_c = docWithLocales === null || docWithLocales === void 0 ? void 0 : docWithLocales[field.name]) === null || _c === void 0 ? void 0 : _c[localeID];
124
- }
125
- if (typeof valueToSet !== 'undefined') {
126
- return {
127
- ...locales,
128
- [localeID]: valueToSet,
129
- };
130
- }
131
- return locales;
132
- }, {});
133
- // If there are locales with data, set the data
134
- if (Object.keys(localeData).length > 0) {
135
- data[field.name] = localeData;
136
- }
137
- });
138
- }
139
- if ((0, types_1.fieldAffectsData)(field)) {
140
- accessPromises.push(() => (0, accessPromise_1.default)({
141
- data,
142
- fullData,
143
- originalDoc,
144
- field,
145
- operation,
146
- overrideAccess,
147
- req,
148
- id,
149
- relationshipPopulations,
150
- depth,
151
- currentDepth,
152
- hook,
153
- payload,
154
- showHiddenFields,
155
- }));
156
- hookPromises.push(() => (0, hookPromise_1.default)({
157
- data,
158
- field,
159
- hook,
160
- req,
161
- operation,
162
- fullOriginalDoc,
163
- fullData,
164
- flattenLocales,
165
- isVersion,
166
- }));
167
- }
168
- const passesCondition = (((_g = field.admin) === null || _g === void 0 ? void 0 : _g.condition) && hook === 'beforeChange') ? field.admin.condition(fullData, data) : true;
169
- const skipValidationFromHere = skipValidation || !passesCondition;
170
- if ((0, types_1.fieldHasSubFields)(field)) {
171
- if (!(0, types_1.fieldAffectsData)(field)) {
172
- traverseFields({
173
- ...args,
174
- fields: field.fields,
175
- skipValidation: skipValidationFromHere,
176
- });
177
- }
178
- else if ((0, types_1.fieldIsArrayType)(field)) {
179
- if (Array.isArray(data[field.name])) {
180
- for (let i = 0; i < data[field.name].length; i += 1) {
181
- if (typeof (data[field.name][i]) === 'undefined') {
182
- data[field.name][i] = {};
183
- }
184
- traverseFields({
185
- ...args,
186
- fields: field.fields,
187
- data: data[field.name][i] || {},
188
- originalDoc: (_h = originalDoc === null || originalDoc === void 0 ? void 0 : originalDoc[field.name]) === null || _h === void 0 ? void 0 : _h[i],
189
- docWithLocales: (_j = docWithLocales === null || docWithLocales === void 0 ? void 0 : docWithLocales[field.name]) === null || _j === void 0 ? void 0 : _j[i],
190
- path: `${path}${field.name}.${i}.`,
191
- skipValidation: skipValidationFromHere,
192
- showHiddenFields,
193
- });
194
- }
195
- }
196
- }
197
- else {
198
- traverseFields({
199
- ...args,
200
- fields: field.fields,
201
- data: data[field.name],
202
- originalDoc: originalDoc[field.name],
203
- docWithLocales: docWithLocales === null || docWithLocales === void 0 ? void 0 : docWithLocales[field.name],
204
- path: `${path}${field.name}.`,
205
- skipValidation: skipValidationFromHere,
206
- showHiddenFields,
207
- });
208
- }
209
- }
210
- if ((0, types_1.fieldIsBlockType)(field)) {
211
- if (Array.isArray(data[field.name])) {
212
- data[field.name].forEach((rowData, i) => {
213
- var _a, _b;
214
- const block = field.blocks.find((blockType) => blockType.slug === rowData.blockType);
215
- if (block) {
216
- traverseFields({
217
- ...args,
218
- fields: block.fields,
219
- data: rowData || {},
220
- originalDoc: (_a = originalDoc === null || originalDoc === void 0 ? void 0 : originalDoc[field.name]) === null || _a === void 0 ? void 0 : _a[i],
221
- docWithLocales: (_b = docWithLocales === null || docWithLocales === void 0 ? void 0 : docWithLocales[field.name]) === null || _b === void 0 ? void 0 : _b[i],
222
- path: `${path}${field.name}.${i}.`,
223
- skipValidation: skipValidationFromHere,
224
- showHiddenFields,
225
- });
226
- }
227
- });
228
- }
229
- }
230
- if (hook === 'beforeChange' && (0, types_1.fieldAffectsData)(field)) {
231
- const updatedData = data;
232
- if ((data === null || data === void 0 ? void 0 : data[field.name]) === undefined && (originalDoc === null || originalDoc === void 0 ? void 0 : originalDoc[field.name]) === undefined && field.defaultValue) {
233
- valuePromises.push(async () => {
234
- let valueToUpdate = data === null || data === void 0 ? void 0 : data[field.name];
235
- if (typeof valueToUpdate === 'undefined' && typeof (originalDoc === null || originalDoc === void 0 ? void 0 : originalDoc[field.name]) !== 'undefined') {
236
- valueToUpdate = originalDoc === null || originalDoc === void 0 ? void 0 : originalDoc[field.name];
237
- }
238
- const value = await (0, getDefaultValue_1.default)({ value: valueToUpdate, defaultValue: field.defaultValue, locale, user: req.user });
239
- updatedData[field.name] = value;
240
- });
241
- }
242
- if (field.type === 'relationship' || field.type === 'upload') {
243
- if (Array.isArray(field.relationTo)) {
244
- if (Array.isArray(dataCopy[field.name])) {
245
- dataCopy[field.name].forEach((relatedDoc, i) => {
246
- const relatedCollection = payload.config.collections.find((collection) => collection.slug === relatedDoc.relationTo);
247
- const relationshipIDField = relatedCollection.fields.find((collectionField) => (0, types_1.fieldAffectsData)(collectionField) && collectionField.name === 'id');
248
- if ((relationshipIDField === null || relationshipIDField === void 0 ? void 0 : relationshipIDField.type) === 'number') {
249
- dataCopy[field.name][i] = { ...relatedDoc, value: parseFloat(relatedDoc.value) };
250
- }
251
- });
252
- }
253
- if (field.type === 'relationship' && field.hasMany !== true && ((_k = dataCopy[field.name]) === null || _k === void 0 ? void 0 : _k.relationTo)) {
254
- const relatedCollection = payload.config.collections.find((collection) => collection.slug === dataCopy[field.name].relationTo);
255
- const relationshipIDField = relatedCollection.fields.find((collectionField) => (0, types_1.fieldAffectsData)(collectionField) && collectionField.name === 'id');
256
- if ((relationshipIDField === null || relationshipIDField === void 0 ? void 0 : relationshipIDField.type) === 'number') {
257
- dataCopy[field.name] = { ...dataCopy[field.name], value: parseFloat(dataCopy[field.name].value) };
258
- }
259
- }
260
- }
261
- else {
262
- if (Array.isArray(dataCopy[field.name])) {
263
- dataCopy[field.name].forEach((relatedDoc, i) => {
264
- const relatedCollection = payload.config.collections.find((collection) => collection.slug === field.relationTo);
265
- const relationshipIDField = relatedCollection.fields.find((collectionField) => (0, types_1.fieldAffectsData)(collectionField) && collectionField.name === 'id');
266
- if ((relationshipIDField === null || relationshipIDField === void 0 ? void 0 : relationshipIDField.type) === 'number') {
267
- dataCopy[field.name][i] = parseFloat(relatedDoc);
268
- }
269
- });
270
- }
271
- if (field.type === 'relationship' && field.hasMany !== true && dataCopy[field.name]) {
272
- const relatedCollection = payload.config.collections.find((collection) => collection.slug === field.relationTo);
273
- const relationshipIDField = relatedCollection.fields.find((collectionField) => (0, types_1.fieldAffectsData)(collectionField) && collectionField.name === 'id');
274
- if ((relationshipIDField === null || relationshipIDField === void 0 ? void 0 : relationshipIDField.type) === 'number') {
275
- dataCopy[field.name] = parseFloat(dataCopy[field.name]);
276
- }
277
- }
278
- }
279
- }
280
- if (field.type === 'point' && data[field.name]) {
281
- transformActions.push(() => {
282
- if (Array.isArray(data[field.name]) && data[field.name][0] !== null && data[field.name][1] !== null) {
283
- data[field.name] = {
284
- type: 'Point',
285
- coordinates: [
286
- parseFloat(data[field.name][0]),
287
- parseFloat(data[field.name][1]),
288
- ],
289
- };
290
- }
291
- });
292
- }
293
- if (field.type === 'array' || field.type === 'blocks') {
294
- const hasRowsOfNewData = Array.isArray(data[field.name]);
295
- const newRowCount = hasRowsOfNewData ? data[field.name].length : undefined;
296
- // Handle cases of arrays being intentionally set to 0
297
- if (data[field.name] === '0' || data[field.name] === 0 || data[field.name] === null) {
298
- updatedData[field.name] = [];
299
- }
300
- const hasRowsOfExistingData = Array.isArray(originalDoc[field.name]);
301
- const existingRowCount = hasRowsOfExistingData ? originalDoc[field.name].length : 0;
302
- validationPromises.push(() => (0, validationPromise_1.default)({
303
- errors,
304
- hook,
305
- data: { [field.name]: newRowCount },
306
- fullData,
307
- originalDoc: { [field.name]: existingRowCount },
308
- fullOriginalDoc,
309
- field,
310
- path,
311
- skipValidation: skipValidationFromHere,
312
- payload: req.payload,
313
- user: req.user,
314
- operation,
315
- id,
316
- }));
317
- }
318
- else if ((0, types_1.fieldAffectsData)(field)) {
319
- validationPromises.push(() => (0, validationPromise_1.default)({
320
- errors,
321
- hook,
322
- data,
323
- fullData,
324
- originalDoc,
325
- fullOriginalDoc,
326
- field,
327
- path,
328
- skipValidation: skipValidationFromHere,
329
- user: req.user,
330
- operation,
331
- id,
332
- payload: req.payload,
333
- }));
334
- }
335
- }
336
- });
337
- };
338
- exports.default = traverseFields;
339
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVyc2VGaWVsZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmllbGRzL3RyYXZlcnNlRmllbGRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNEVBQW9EO0FBQ3BELG9FQUE0QztBQUM1QyxnRUFBd0M7QUFDeEMsMENBT3dCO0FBSXhCLHlGQUF5RTtBQUN6RSx3RUFBb0Q7QUFtQ3BELE1BQU0sY0FBYyxHQUFHLENBQUMsSUFBZSxFQUFRLEVBQUU7SUFDL0MsTUFBTSxFQUNKLE1BQU0sRUFDTixJQUFJLEdBQUcsRUFBRSxFQUNULFdBQVcsR0FBRyxFQUFFLEVBQ2hCLElBQUksRUFDSixjQUFjLEVBQ2QsTUFBTSxFQUNOLGNBQWMsRUFDZCxjQUFjLEVBQ2QsU0FBUyxFQUNULGNBQWMsRUFDZCxHQUFHLEVBQ0gsRUFBRSxFQUNGLHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsWUFBWSxFQUNaLElBQUksRUFDSixZQUFZLEVBQ1osZUFBZSxFQUNmLFFBQVEsRUFDUixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLE1BQU0sRUFDTixPQUFPLEVBQ1AsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGNBQWMsR0FBRyxFQUFFLEVBQ25CLGNBQWMsRUFDZCxTQUFTLEdBQ1YsR0FBRyxJQUFJLENBQUM7SUFFVCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7O1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQztRQUV0QixJQUFJLElBQUksS0FBSyxXQUFXLEVBQUU7WUFDeEIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDMUIsaUZBQWlGO2dCQUNqRixvQ0FBb0M7Z0JBQ3BDLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLFdBQVcsSUFBSSxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssV0FBVyxFQUFFO29CQUM3RixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztpQkFDdkI7YUFDRjtZQUVELElBQUksSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxXQUFXLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDM0csT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3pCO1lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDMUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs7b0JBQ3pCLElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDBDQUFFLFdBQVcsS0FBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTt3QkFDN0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQztxQkFDakQ7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDO2VBQ3pELENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsRUFBRTtZQUM1RixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFO2dCQUMzRCxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUMzQjtpQkFBTTtnQkFDTCxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQzthQUM3QjtTQUNGO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRTtZQUMxSyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMzQjtRQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRTtZQUNuRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3hDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM1RTtRQUVELElBQUksSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtZQUNsRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ25FLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNyRDtZQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksT0FBTyxDQUFBLE1BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsMENBQUUsUUFBUSxDQUFBLEtBQUssVUFBVSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQ3JILFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN4RDtTQUNGO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTTtnQkFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM3RCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssT0FBTztnQkFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUMvRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUMzRDtRQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7WUFDN0IsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUN4QyxJQUFJO29CQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQVcsQ0FBQyxDQUFDO29CQUM1RCxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQztpQkFDckM7Z0JBQUMsTUFBTTtvQkFDTiwwQ0FBMEM7b0JBQzFDLCtDQUErQztpQkFDaEQ7YUFDRjtZQUVELElBQUksQ0FBQyxDQUFDLENBQUEsTUFBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLFFBQVEsMENBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFJLE1BQUEsTUFBQSxLQUFLLENBQUMsS0FBSywwQ0FBRSxRQUFRLDBDQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQSxDQUFDLElBQUksQ0FBQyxDQUFBLE1BQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLEtBQUssMENBQUUsUUFBUSxDQUFBLENBQUMsSUFBSSxJQUFJLEtBQUssV0FBVyxFQUFFO2dCQUN2Six1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBQSw2QkFBMkIsRUFBQztvQkFDdkQsR0FBRztvQkFDSCxJQUFJO29CQUNKLE9BQU87b0JBQ1AsY0FBYztvQkFDZCxLQUFLO29CQUNMLEtBQUs7b0JBQ0wsWUFBWTtvQkFDWixnQkFBZ0I7aUJBQ2pCLENBQUMsQ0FBQyxDQUFDO2FBQ0w7U0FDRjtRQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLENBQUM7ZUFDNUMsQ0FBQyxPQUFPLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQSxLQUFLLFFBQVEsSUFBSSxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQUssSUFBSSxDQUFDO2VBQ3ZFLEtBQUssQ0FBQyxJQUFJO2VBQ1YsS0FBSyxDQUFDLFNBQVM7ZUFDZixNQUFNLEtBQUssS0FBSztlQUNoQixjQUFjLENBQUM7UUFFcEIsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLElBQUksT0FBTyxjQUFjLEtBQUssV0FBVyxJQUFJLGNBQWM7Z0JBQUUsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0csSUFBSSxPQUFPLGNBQWMsS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPO2dCQUFFLGNBQWMsR0FBRyxFQUFFLENBQUM7WUFDekYsSUFBSSxPQUFPLGNBQWMsS0FBSyxXQUFXO2dCQUFFLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDakUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxjQUFjLENBQUM7U0FDdkM7UUFFRCxJQUFJLElBQUEsd0JBQWdCLEVBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxnQkFBZ0IsRUFBRTtZQUNsRSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUMvQixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFOztvQkFDbEYsSUFBSSxVQUFVLENBQUM7b0JBRWYsSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFO3dCQUN2QixJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxXQUFXLEVBQUU7NEJBQzNDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUMvQjs2QkFBTSxJQUFJLE1BQUEsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsMENBQUcsUUFBUSxDQUFDLEVBQUU7NEJBQ25ELFVBQVUsR0FBRyxNQUFBLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLDBDQUFHLFFBQVEsQ0FBQyxDQUFDO3lCQUN2RDtxQkFDRjt5QkFBTTt3QkFDTCxVQUFVLEdBQUcsTUFBQSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUcsS0FBSyxDQUFDLElBQUksQ0FBQywwQ0FBRyxRQUFRLENBQUMsQ0FBQztxQkFDdkQ7b0JBRUQsSUFBSSxPQUFPLFVBQVUsS0FBSyxXQUFXLEVBQUU7d0JBQ3JDLE9BQU87NEJBQ0wsR0FBRyxPQUFPOzRCQUNWLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVTt5QkFDdkIsQ0FBQztxQkFDSDtvQkFFRCxPQUFPLE9BQU8sQ0FBQztnQkFDakIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUVQLCtDQUErQztnQkFDL0MsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO2lCQUMvQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLElBQUEsd0JBQWdCLEVBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLHVCQUFhLEVBQUM7Z0JBQ3RDLElBQUk7Z0JBQ0osUUFBUTtnQkFDUixXQUFXO2dCQUNYLEtBQUs7Z0JBQ0wsU0FBUztnQkFDVCxjQUFjO2dCQUNkLEdBQUc7Z0JBQ0gsRUFBRTtnQkFDRix1QkFBdUI7Z0JBQ3ZCLEtBQUs7Z0JBQ0wsWUFBWTtnQkFDWixJQUFJO2dCQUNKLE9BQU87Z0JBQ1AsZ0JBQWdCO2FBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBRUosWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLHFCQUFXLEVBQUM7Z0JBQ2xDLElBQUk7Z0JBQ0osS0FBSztnQkFDTCxJQUFJO2dCQUNKLEdBQUc7Z0JBQ0gsU0FBUztnQkFDVCxlQUFlO2dCQUNmLFFBQVE7Z0JBQ1IsY0FBYztnQkFDZCxTQUFTO2FBQ1YsQ0FBQyxDQUFDLENBQUM7U0FDTDtRQUdELE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLDBDQUFFLFNBQVMsS0FBSSxJQUFJLEtBQUssY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzNILE1BQU0sc0JBQXNCLEdBQUcsY0FBYyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBRWxFLElBQUksSUFBQSx5QkFBaUIsRUFBQyxLQUFLLENBQUMsRUFBRTtZQUM1QixJQUFJLENBQUMsSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLENBQUMsRUFBRTtnQkFDNUIsY0FBYyxDQUFDO29CQUNiLEdBQUcsSUFBSTtvQkFDUCxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07b0JBQ3BCLGNBQWMsRUFBRSxzQkFBc0I7aUJBQ3ZDLENBQUMsQ0FBQzthQUNKO2lCQUFNLElBQUksSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtvQkFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ25ELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxXQUFXLEVBQUU7NEJBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO3lCQUMxQjt3QkFFRCxjQUFjLENBQUM7NEJBQ2IsR0FBRyxJQUFJOzRCQUNQLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTs0QkFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTs0QkFDL0IsV0FBVyxFQUFFLE1BQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsMENBQUcsQ0FBQyxDQUFDOzRCQUMzQyxjQUFjLEVBQUUsTUFBQSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUcsS0FBSyxDQUFDLElBQUksQ0FBQywwQ0FBRyxDQUFDLENBQUM7NEJBQ2pELElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRzs0QkFDbEMsY0FBYyxFQUFFLHNCQUFzQjs0QkFDdEMsZ0JBQWdCO3lCQUNqQixDQUFDLENBQUM7cUJBQ0o7aUJBQ0Y7YUFDRjtpQkFBTTtnQkFDTCxjQUFjLENBQUM7b0JBQ2IsR0FBRyxJQUFJO29CQUNQLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtvQkFDcEIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUE0QjtvQkFDakQsV0FBVyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO29CQUNwQyxjQUFjLEVBQUUsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQzVDLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHO29CQUM3QixjQUFjLEVBQUUsc0JBQXNCO29CQUN0QyxnQkFBZ0I7aUJBQ2pCLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxJQUFJLElBQUEsd0JBQWdCLEVBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQStCLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFOztvQkFDckUsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUVyRixJQUFJLEtBQUssRUFBRTt3QkFDVCxjQUFjLENBQUM7NEJBQ2IsR0FBRyxJQUFJOzRCQUNQLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTs0QkFDcEIsSUFBSSxFQUFFLE9BQU8sSUFBSSxFQUFFOzRCQUNuQixXQUFXLEVBQUUsTUFBQSxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUcsS0FBSyxDQUFDLElBQUksQ0FBQywwQ0FBRyxDQUFDLENBQUM7NEJBQzNDLGNBQWMsRUFBRSxNQUFBLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLDBDQUFHLENBQUMsQ0FBQzs0QkFDakQsSUFBSSxFQUFFLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHOzRCQUNsQyxjQUFjLEVBQUUsc0JBQXNCOzRCQUN0QyxnQkFBZ0I7eUJBQ2pCLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxJQUFJLElBQUksS0FBSyxjQUFjLElBQUksSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLENBQUMsRUFBRTtZQUN0RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFFekIsSUFBSSxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQUssU0FBUyxJQUFJLENBQUEsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBSyxTQUFTLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtnQkFDckcsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDNUIsSUFBSSxhQUFhLEdBQUcsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFFdkMsSUFBSSxPQUFPLGFBQWEsS0FBSyxXQUFXLElBQUksT0FBTyxDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUEsS0FBSyxXQUFXLEVBQUU7d0JBQzVGLGFBQWEsR0FBRyxXQUFXLGFBQVgsV0FBVyx1QkFBWCxXQUFXLENBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUMzQztvQkFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUEseUJBQW1CLEVBQUMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQzVILFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUNsQyxDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDNUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDbkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTt3QkFDdkMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFrRCxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUNyRixNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3JILE1BQU0sbUJBQW1CLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsSUFBQSx3QkFBZ0IsRUFBQyxlQUFlLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDOzRCQUNuSixJQUFJLENBQUEsbUJBQW1CLGFBQW5CLG1CQUFtQix1QkFBbkIsbUJBQW1CLENBQUUsSUFBSSxNQUFLLFFBQVEsRUFBRTtnQ0FDMUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQWUsQ0FBQyxFQUFFLENBQUM7NkJBQzVGO3dCQUNILENBQUMsQ0FBQyxDQUFDO3FCQUNKO29CQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLEtBQUksTUFBQSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQywwQ0FBRSxVQUFVLENBQUEsRUFBRTt3QkFDL0YsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDL0gsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxJQUFBLHdCQUFnQixFQUFDLGVBQWUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7d0JBQ25KLElBQUksQ0FBQSxtQkFBbUIsYUFBbkIsbUJBQW1CLHVCQUFuQixtQkFBbUIsQ0FBRSxJQUFJLE1BQUssUUFBUSxFQUFFOzRCQUMxQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFlLENBQUMsRUFBRSxDQUFDO3lCQUM3RztxQkFDRjtpQkFDRjtxQkFBTTtvQkFDTCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO3dCQUN2QyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQW1CLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ3RELE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQzs0QkFDaEgsTUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxJQUFBLHdCQUFnQixFQUFDLGVBQWUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7NEJBQ25KLElBQUksQ0FBQSxtQkFBbUIsYUFBbkIsbUJBQW1CLHVCQUFuQixtQkFBbUIsQ0FBRSxJQUFJLE1BQUssUUFBUSxFQUFFO2dDQUMxQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxVQUFvQixDQUFDLENBQUM7NkJBQzVEO3dCQUNILENBQUMsQ0FBQyxDQUFDO3FCQUNKO29CQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDbkYsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUNoSCxNQUFNLG1CQUFtQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLElBQUEsd0JBQWdCLEVBQUMsZUFBZSxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQzt3QkFDbkosSUFBSSxDQUFBLG1CQUFtQixhQUFuQixtQkFBbUIsdUJBQW5CLG1CQUFtQixDQUFFLElBQUksTUFBSyxRQUFRLEVBQUU7NEJBQzFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt5QkFDekQ7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDOUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTt3QkFDbkcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRzs0QkFDakIsSUFBSSxFQUFFLE9BQU87NEJBQ2IsV0FBVyxFQUFFO2dDQUNYLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUMvQixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs2QkFDaEM7eUJBQ0YsQ0FBQztxQkFDSDtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDckQsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDekQsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUErQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUUxRyxzREFBc0Q7Z0JBQ3RELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7b0JBQ25GLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2lCQUM5QjtnQkFFRCxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNyRSxNQUFNLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVwRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwyQkFBaUIsRUFBQztvQkFDOUMsTUFBTTtvQkFDTixJQUFJO29CQUNKLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLFdBQVcsRUFBRTtvQkFDbkMsUUFBUTtvQkFDUixXQUFXLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxnQkFBZ0IsRUFBRTtvQkFDL0MsZUFBZTtvQkFDZixLQUFLO29CQUNMLElBQUk7b0JBQ0osY0FBYyxFQUFFLHNCQUFzQjtvQkFDdEMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO29CQUNwQixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7b0JBQ2QsU0FBUztvQkFDVCxFQUFFO2lCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0w7aUJBQU0sSUFBSSxJQUFBLHdCQUFnQixFQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNsQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwyQkFBaUIsRUFBQztvQkFDOUMsTUFBTTtvQkFDTixJQUFJO29CQUNKLElBQUk7b0JBQ0osUUFBUTtvQkFDUixXQUFXO29CQUNYLGVBQWU7b0JBQ2YsS0FBSztvQkFDTCxJQUFJO29CQUNKLGNBQWMsRUFBRSxzQkFBc0I7b0JBQ3RDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtvQkFDZCxTQUFTO29CQUNULEVBQUU7b0JBQ0YsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO2lCQUNyQixDQUFDLENBQUMsQ0FBQzthQUNMO1NBQ0Y7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLGtCQUFlLGNBQWMsQ0FBQyJ9
@@ -1,24 +0,0 @@
1
- import { Payload } from '..';
2
- import { User } from '../auth';
3
- import { Operation } from '../types';
4
- import { HookName, FieldAffectingData } from './config/types';
5
- declare type Arguments = {
6
- hook: HookName;
7
- field: FieldAffectingData;
8
- path: string;
9
- errors: {
10
- message: string;
11
- field: string;
12
- }[];
13
- data: Record<string, unknown>;
14
- fullData: Record<string, unknown>;
15
- originalDoc: Record<string, unknown>;
16
- fullOriginalDoc: Record<string, unknown>;
17
- id?: string | number;
18
- skipValidation?: boolean;
19
- user: User;
20
- operation: Operation;
21
- payload: Payload;
22
- };
23
- declare const validationPromise: ({ errors, hook, originalDoc, fullOriginalDoc, data, fullData, id, field, path, skipValidation, user, operation, payload, }: Arguments) => Promise<string | boolean>;
24
- export default validationPromise;
@@ -1,35 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const deepmerge_1 = __importDefault(require("deepmerge"));
7
- const validationPromise = async ({ errors, hook, originalDoc, fullOriginalDoc, data, fullData, id, field, path, skipValidation, user, operation, payload, }) => {
8
- if (hook !== 'beforeChange' || skipValidation)
9
- return true;
10
- const hasCondition = field.admin && field.admin.condition;
11
- const shouldValidate = field.validate && !hasCondition;
12
- let valueToValidate = data === null || data === void 0 ? void 0 : data[field.name];
13
- if (valueToValidate === undefined)
14
- valueToValidate = originalDoc === null || originalDoc === void 0 ? void 0 : originalDoc[field.name];
15
- if (valueToValidate === undefined)
16
- valueToValidate = field.defaultValue;
17
- const result = shouldValidate ? await field.validate(valueToValidate, {
18
- ...field,
19
- data: (0, deepmerge_1.default)(fullOriginalDoc, fullData),
20
- siblingData: (0, deepmerge_1.default)(originalDoc, data),
21
- id,
22
- operation,
23
- user,
24
- payload,
25
- }) : true;
26
- if (typeof result === 'string') {
27
- errors.push({
28
- message: result,
29
- field: `${path}${field.name}`,
30
- });
31
- }
32
- return result;
33
- };
34
- exports.default = validationPromise;
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvblByb21pc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmllbGRzL3ZhbGlkYXRpb25Qcm9taXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMERBQThCO0FBc0I5QixNQUFNLGlCQUFpQixHQUFHLEtBQUssRUFBRSxFQUMvQixNQUFNLEVBQ04sSUFBSSxFQUNKLFdBQVcsRUFDWCxlQUFlLEVBQ2YsSUFBSSxFQUNKLFFBQVEsRUFDUixFQUFFLEVBQ0YsS0FBSyxFQUNMLElBQUksRUFDSixjQUFjLEVBQ2QsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLEdBQ0csRUFBNkIsRUFBRTtJQUN6QyxJQUFJLElBQUksS0FBSyxjQUFjLElBQUksY0FBYztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRTNELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDMUQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLFlBQVksQ0FBQztJQUV2RCxJQUFJLGVBQWUsR0FBRyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLElBQUksZUFBZSxLQUFLLFNBQVM7UUFBRSxlQUFlLEdBQUcsV0FBVyxhQUFYLFdBQVcsdUJBQVgsV0FBVyxDQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRSxJQUFJLGVBQWUsS0FBSyxTQUFTO1FBQUUsZUFBZSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFFeEUsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFO1FBQ3BFLEdBQUcsS0FBSztRQUNSLElBQUksRUFBRSxJQUFBLG1CQUFLLEVBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQztRQUN0QyxXQUFXLEVBQUUsSUFBQSxtQkFBSyxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7UUFDckMsRUFBRTtRQUNGLFNBQVM7UUFDVCxJQUFJO1FBQ0osT0FBTztLQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRVYsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLE9BQU8sRUFBRSxNQUFNO1lBQ2YsS0FBSyxFQUFFLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUU7U0FDOUIsQ0FBQyxDQUFDO0tBQ0o7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixrQkFBZSxpQkFBaUIsQ0FBQyJ9