payload 0.15.1 → 0.15.4

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 (115) hide show
  1. package/.eslintrc.js +6 -0
  2. package/CHANGELOG.md +35 -0
  3. package/dist/admin/components/elements/WhereBuilder/field-types.d.ts +2 -2
  4. package/dist/admin/components/elements/WhereBuilder/field-types.js +11 -7
  5. package/dist/admin/components/elements/elements.spec.d.ts +1 -0
  6. package/dist/admin/components/elements/elements.spec.js +12 -0
  7. package/dist/admin/components/forms/DraggableSection/index.js +2 -3
  8. package/dist/admin/components/forms/Form/buildStateFromSchema.d.ts +10 -1
  9. package/dist/admin/components/forms/Form/buildStateFromSchema.js +14 -6
  10. package/dist/admin/components/forms/Form/getDataByPath.js +6 -11
  11. package/dist/admin/components/forms/Form/getSiblingData.js +12 -14
  12. package/dist/admin/components/forms/Form/index.js +23 -6
  13. package/dist/admin/components/forms/Form/reduceFieldsToValues.d.ts +1 -1
  14. package/dist/admin/components/forms/Form/reduceFieldsToValues.js +1 -2
  15. package/dist/admin/components/forms/Form/types.d.ts +3 -2
  16. package/dist/admin/components/forms/RenderFields/index.d.ts +1 -2
  17. package/dist/admin/components/forms/RenderFields/index.js +6 -16
  18. package/dist/admin/components/forms/RenderFields/types.d.ts +0 -5
  19. package/dist/admin/components/forms/field-types/Array/Array.js +18 -9
  20. package/dist/admin/components/forms/field-types/Blocks/Blocks.js +21 -15
  21. package/dist/admin/components/forms/field-types/Checkbox/index.js +3 -4
  22. package/dist/admin/components/forms/field-types/Code/Code.js +4 -5
  23. package/dist/admin/components/forms/field-types/DateTime/index.js +2 -3
  24. package/dist/admin/components/forms/field-types/Email/index.js +2 -3
  25. package/dist/admin/components/forms/field-types/Number/index.js +3 -4
  26. package/dist/admin/components/forms/field-types/Password/index.js +2 -2
  27. package/dist/admin/components/forms/field-types/Point/index.js +2 -3
  28. package/dist/admin/components/forms/field-types/RadioGroup/index.js +3 -4
  29. package/dist/admin/components/forms/field-types/Relationship/index.js +49 -17
  30. package/dist/admin/components/forms/field-types/RichText/RichText.js +3 -4
  31. package/dist/admin/components/forms/field-types/RichText/elements/upload/Element/EditModal/index.js +4 -2
  32. package/dist/admin/components/forms/field-types/Row/index.js +7 -2
  33. package/dist/admin/components/forms/field-types/Select/index.js +4 -5
  34. package/dist/admin/components/forms/field-types/Text/index.js +6 -3
  35. package/dist/admin/components/forms/field-types/Textarea/index.js +4 -5
  36. package/dist/admin/components/forms/field-types/Upload/Add/index.js +1 -1
  37. package/dist/admin/components/forms/field-types/Upload/Input.d.ts +2 -1
  38. package/dist/admin/components/forms/field-types/Upload/Input.js +3 -1
  39. package/dist/admin/components/forms/field-types/Upload/SelectExisting/index.js +27 -4
  40. package/dist/admin/components/forms/field-types/Upload/SelectExisting/types.d.ts +3 -0
  41. package/dist/admin/components/forms/field-types/Upload/index.js +4 -5
  42. package/dist/admin/components/forms/field-types/getFilterOptionsQuery.d.ts +5 -0
  43. package/dist/admin/components/forms/field-types/getFilterOptionsQuery.js +11 -0
  44. package/dist/admin/components/forms/useField/index.js +39 -8
  45. package/dist/admin/components/utilities/OperationProvider/index.d.ts +4 -0
  46. package/dist/admin/components/utilities/OperationProvider/index.js +3 -0
  47. package/dist/admin/components/views/Account/Default.js +41 -39
  48. package/dist/admin/components/views/Account/index.js +4 -2
  49. package/dist/admin/components/views/CreateFirstUser/index.js +1 -1
  50. package/dist/admin/components/views/Global/Default.js +45 -43
  51. package/dist/admin/components/views/Global/index.js +5 -5
  52. package/dist/admin/components/views/collections/Edit/Auth/APIKey.js +1 -1
  53. package/dist/admin/components/views/collections/Edit/Default.js +55 -53
  54. package/dist/admin/components/views/collections/Edit/index.js +5 -5
  55. package/dist/auth/auth.spec.d.ts +1 -0
  56. package/dist/auth/auth.spec.js +198 -0
  57. package/dist/collections/graphql/resolvers/resolvers.spec.d.ts +1 -0
  58. package/dist/collections/graphql/resolvers/resolvers.spec.js +360 -0
  59. package/dist/collections/operations/local/local.spec.d.ts +1 -0
  60. package/dist/collections/operations/local/local.spec.js +175 -0
  61. package/dist/collections/tests/collections.spec.d.ts +1 -0
  62. package/dist/collections/tests/collections.spec.js +725 -0
  63. package/dist/collections/tests/hooks.spec.d.ts +1 -0
  64. package/dist/collections/tests/hooks.spec.js +152 -0
  65. package/dist/collections/tests/pointField.spec.d.ts +1 -0
  66. package/dist/collections/tests/pointField.spec.js +219 -0
  67. package/dist/collections/tests/relationships.spec.d.ts +1 -0
  68. package/dist/collections/tests/relationships.spec.js +194 -0
  69. package/dist/collections/tests/uploads.spec.d.ts +1 -0
  70. package/dist/collections/tests/uploads.spec.js +328 -0
  71. package/dist/config/load.d.ts +3 -1
  72. package/dist/config/load.js +5 -3
  73. package/dist/config/types.d.ts +3 -0
  74. package/dist/config/types.js +1 -1
  75. package/dist/config/validate.d.ts +2 -1
  76. package/dist/config/validate.js +2 -4
  77. package/dist/email/build.d.ts +2 -1
  78. package/dist/email/build.js +7 -9
  79. package/dist/errors/errors.spec.d.ts +1 -0
  80. package/dist/errors/errors.spec.js +29 -0
  81. package/dist/express/middleware/errorHandler.spec.d.ts +1 -0
  82. package/dist/express/middleware/errorHandler.spec.js +91 -0
  83. package/dist/fields/config/sanitize.js +2 -2
  84. package/dist/fields/config/schema.js +3 -1
  85. package/dist/fields/config/types.d.ts +25 -1
  86. package/dist/fields/config/types.js +1 -1
  87. package/dist/fields/performFieldOperations.js +3 -3
  88. package/dist/fields/traverseFields.js +15 -5
  89. package/dist/fields/validationPromise.d.ts +10 -3
  90. package/dist/fields/validationPromise.js +16 -5
  91. package/dist/fields/validations.d.ts +33 -35
  92. package/dist/fields/validations.js +130 -76
  93. package/dist/fields/validations.spec.js +115 -43
  94. package/dist/globals/requestHandlers/globals.spec.d.ts +4 -0
  95. package/dist/globals/requestHandlers/globals.spec.js +161 -0
  96. package/dist/graphql/schema/buildMutationInputType.js +2 -2
  97. package/dist/graphql/schema/fieldToSchemaMap.js +7 -7
  98. package/dist/index.d.ts +2 -2
  99. package/dist/index.js +5 -5
  100. package/dist/mongoose/buildQuery.js +2 -2
  101. package/dist/mongoose/connect.d.ts +2 -1
  102. package/dist/mongoose/connect.js +2 -4
  103. package/dist/mongoose/sanitizeFormattedValue.js +12 -3
  104. package/dist/preferences/graphql/resolvers.spec.d.ts +1 -0
  105. package/dist/preferences/graphql/resolvers.spec.js +115 -0
  106. package/dist/utilities/logger.d.ts +1 -1
  107. package/dist/utilities/logger.js +10 -6
  108. package/dist/versions/drafts/appendVersionToQueryKey.js +8 -5
  109. package/dist/webpack/getBaseConfig.js +2 -1
  110. package/docs/fields/overview.mdx +39 -3
  111. package/docs/fields/relationship.mdx +45 -0
  112. package/docs/fields/upload.mdx +1 -0
  113. package/docs/getting-started/installation.mdx +14 -10
  114. package/docs/queries/overview.mdx +2 -1
  115. package/package.json +1 -1
@@ -3,34 +3,36 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.point = exports.blocks = exports.radio = exports.select = exports.array = exports.relationship = exports.upload = exports.date = exports.checkbox = exports.richText = exports.code = exports.wysiwyg = exports.textarea = exports.email = exports.password = exports.text = exports.number = void 0;
6
+ exports.point = exports.blocks = exports.radio = exports.select = exports.array = exports.relationship = exports.upload = exports.date = exports.checkbox = exports.richText = exports.code = exports.textarea = exports.email = exports.password = exports.text = exports.number = void 0;
7
7
  const defaultValue_1 = __importDefault(require("./richText/defaultValue"));
8
+ const canUseDOM_1 = __importDefault(require("../utilities/canUseDOM"));
9
+ const index_1 = __importDefault(require("../index"));
8
10
  const defaultMessage = 'This field is required.';
9
- const number = (value, options = {}) => {
11
+ const number = (value, { required, min, max }) => {
10
12
  const parsedValue = parseInt(value, 10);
11
- if ((value && typeof parsedValue !== 'number') || (options.required && Number.isNaN(parsedValue))) {
13
+ if ((value && typeof parsedValue !== 'number') || (required && Number.isNaN(parsedValue))) {
12
14
  return 'Please enter a valid number.';
13
15
  }
14
- if (options.max && parsedValue > options.max) {
15
- return `"${value}" is greater than the max allowed value of ${options.max}.`;
16
+ if (max && parsedValue > max) {
17
+ return `"${value}" is greater than the max allowed value of ${max}.`;
16
18
  }
17
- if (options.min && parsedValue < options.min) {
18
- return `"${value}" is less than the min allowed value of ${options.min}.`;
19
+ if (min && parsedValue < min) {
20
+ return `"${value}" is less than the min allowed value of ${min}.`;
19
21
  }
20
- if (options.required && typeof parsedValue !== 'number') {
22
+ if (required && typeof parsedValue !== 'number') {
21
23
  return defaultMessage;
22
24
  }
23
25
  return true;
24
26
  };
25
27
  exports.number = number;
26
- const text = (value, options = {}) => {
27
- if (value && options.maxLength && value.length > options.maxLength) {
28
- return `This value must be shorter than the max length of ${options.maxLength} characters.`;
28
+ const text = (value, { minLength, maxLength, required }) => {
29
+ if (value && maxLength && value.length > maxLength) {
30
+ return `This value must be shorter than the max length of ${maxLength} characters.`;
29
31
  }
30
- if (value && options.minLength && (value === null || value === void 0 ? void 0 : value.length) < options.minLength) {
31
- return `This value must be longer than the minimum length of ${options.minLength} characters.`;
32
+ if (value && minLength && (value === null || value === void 0 ? void 0 : value.length) < minLength) {
33
+ return `This value must be longer than the minimum length of ${minLength} characters.`;
32
34
  }
33
- if (options.required) {
35
+ if (required) {
34
36
  if (typeof value !== 'string' || (value === null || value === void 0 ? void 0 : value.length) === 0) {
35
37
  return defaultMessage;
36
38
  }
@@ -38,56 +40,49 @@ const text = (value, options = {}) => {
38
40
  return true;
39
41
  };
40
42
  exports.text = text;
41
- const password = (value, options = {}) => {
42
- if (value && options.maxLength && value.length > options.maxLength) {
43
- return `This value must be shorter than the max length of ${options.maxLength} characters.`;
43
+ const password = (value, { required, maxLength, minLength }) => {
44
+ if (value && maxLength && value.length > maxLength) {
45
+ return `This value must be shorter than the max length of ${maxLength} characters.`;
44
46
  }
45
- if (value && options.minLength && value.length < options.minLength) {
46
- return `This value must be longer than the minimum length of ${options.minLength} characters.`;
47
+ if (value && minLength && value.length < minLength) {
48
+ return `This value must be longer than the minimum length of ${minLength} characters.`;
47
49
  }
48
- if (options.required && !value) {
50
+ if (required && !value) {
49
51
  return defaultMessage;
50
52
  }
51
53
  return true;
52
54
  };
53
55
  exports.password = password;
54
- const email = (value, options = {}) => {
56
+ const email = (value, { required }) => {
55
57
  if ((value && !/\S+@\S+\.\S+/.test(value))
56
- || (!value && options.required)) {
58
+ || (!value && required)) {
57
59
  return 'Please enter a valid email address.';
58
60
  }
59
61
  return true;
60
62
  };
61
63
  exports.email = email;
62
- const textarea = (value, options = {}) => {
63
- if (value && options.maxLength && value.length > options.maxLength) {
64
- return `This value must be shorter than the max length of ${options.maxLength} characters.`;
64
+ const textarea = (value, { required, maxLength, minLength, }) => {
65
+ if (value && maxLength && value.length > maxLength) {
66
+ return `This value must be shorter than the max length of ${maxLength} characters.`;
65
67
  }
66
- if (value && options.minLength && value.length < options.minLength) {
67
- return `This value must be longer than the minimum length of ${options.minLength} characters.`;
68
+ if (value && minLength && value.length < minLength) {
69
+ return `This value must be longer than the minimum length of ${minLength} characters.`;
68
70
  }
69
- if (options.required && !value) {
71
+ if (required && !value) {
70
72
  return defaultMessage;
71
73
  }
72
74
  return true;
73
75
  };
74
76
  exports.textarea = textarea;
75
- const wysiwyg = (value, options = {}) => {
76
- if (options.required && !value) {
77
- return defaultMessage;
78
- }
79
- return true;
80
- };
81
- exports.wysiwyg = wysiwyg;
82
- const code = (value, options = {}) => {
83
- if (options.required && value === undefined) {
77
+ const code = (value, { required }) => {
78
+ if (required && value === undefined) {
84
79
  return defaultMessage;
85
80
  }
86
81
  return true;
87
82
  };
88
83
  exports.code = code;
89
- const richText = (value, options = {}) => {
90
- if (options.required) {
84
+ const richText = (value, { required }) => {
85
+ if (required) {
91
86
  const stringifiedDefaultValue = JSON.stringify(defaultValue_1.default);
92
87
  if (value && JSON.stringify(value) !== stringifiedDefaultValue)
93
88
  return true;
@@ -96,96 +91,156 @@ const richText = (value, options = {}) => {
96
91
  return true;
97
92
  };
98
93
  exports.richText = richText;
99
- const checkbox = (value, options = {}) => {
94
+ const checkbox = (value, { required }) => {
100
95
  if ((value && typeof value !== 'boolean')
101
- || (options.required && typeof value !== 'boolean')) {
96
+ || (required && typeof value !== 'boolean')) {
102
97
  return 'This field can only be equal to true or false.';
103
98
  }
104
99
  return true;
105
100
  };
106
101
  exports.checkbox = checkbox;
107
- const date = (value, options = {}) => {
102
+ const date = (value, { required }) => {
108
103
  if (value && !isNaN(Date.parse(value.toString()))) { /* eslint-disable-line */
109
104
  return true;
110
105
  }
111
106
  if (value) {
112
107
  return `"${value}" is not a valid date.`;
113
108
  }
114
- if (options.required) {
109
+ if (required) {
115
110
  return defaultMessage;
116
111
  }
117
112
  return true;
118
113
  };
119
114
  exports.date = date;
120
- const upload = (value, options = {}) => {
121
- if (value || !options.required)
115
+ const validateFilterOptions = async (value, { filterOptions, id, user, data, siblingData, relationTo }) => {
116
+ if (!canUseDOM_1.default && typeof filterOptions !== 'undefined' && value) {
117
+ const options = {};
118
+ const collections = typeof relationTo === 'string' ? [relationTo] : relationTo;
119
+ const values = Array.isArray(value) ? value : [value];
120
+ await Promise.all(collections.map(async (collection) => {
121
+ const optionFilter = typeof filterOptions === 'function' ? filterOptions({
122
+ id,
123
+ data,
124
+ siblingData,
125
+ user,
126
+ relationTo: collection,
127
+ }) : filterOptions;
128
+ const valueIDs = [];
129
+ values.forEach((val) => {
130
+ if (typeof val === 'object' && (val === null || val === void 0 ? void 0 : val.value)) {
131
+ valueIDs.push(val.value);
132
+ }
133
+ if (typeof val === 'string' || typeof val === 'number') {
134
+ valueIDs.push(val);
135
+ }
136
+ });
137
+ const result = await index_1.default.find({
138
+ collection,
139
+ depth: 0,
140
+ where: {
141
+ and: [
142
+ { id: { in: valueIDs } },
143
+ optionFilter,
144
+ ],
145
+ },
146
+ });
147
+ options[collection] = result.docs.map((doc) => doc.id);
148
+ }));
149
+ const invalidRelationships = values.filter((val) => {
150
+ let collection;
151
+ let requestedID;
152
+ if (typeof relationTo === 'string') {
153
+ collection = relationTo;
154
+ if (typeof val === 'string' || typeof val === 'number') {
155
+ requestedID = val;
156
+ }
157
+ }
158
+ if (Array.isArray(relationTo) && typeof val === 'object' && (val === null || val === void 0 ? void 0 : val.relationTo)) {
159
+ collection = val.relationTo;
160
+ requestedID = val.value;
161
+ }
162
+ return options[collection].indexOf(requestedID) === -1;
163
+ });
164
+ if (invalidRelationships.length > 0) {
165
+ return invalidRelationships.reduce((err, invalid, i) => {
166
+ return `${err} ${JSON.stringify(invalid)}${invalidRelationships.length === i + 1 ? ',' : ''} `;
167
+ }, 'This field has the following invalid selections:');
168
+ }
122
169
  return true;
123
- return defaultMessage;
170
+ }
171
+ return true;
172
+ };
173
+ const upload = (value, options) => {
174
+ if (!value && options.required) {
175
+ return defaultMessage;
176
+ }
177
+ return validateFilterOptions(value, options);
124
178
  };
125
179
  exports.upload = upload;
126
- const relationship = (value, options = {}) => {
127
- if (value || !options.required)
128
- return true;
129
- return defaultMessage;
180
+ const relationship = async (value, options) => {
181
+ if ((!value || (Array.isArray(value) && value.length === 0)) && options.required) {
182
+ return defaultMessage;
183
+ }
184
+ return validateFilterOptions(value, options);
130
185
  };
131
186
  exports.relationship = relationship;
132
- const array = (value, options = {}) => {
133
- if (options.minRows && value < options.minRows) {
134
- return `This field requires at least ${options.minRows} row(s).`;
187
+ const array = (value, { minRows, maxRows, required }) => {
188
+ if (minRows && value < minRows) {
189
+ return `This field requires at least ${minRows} row(s).`;
135
190
  }
136
- if (options.maxRows && value > options.maxRows) {
137
- return `This field requires no more than ${options.maxRows} row(s).`;
191
+ if (maxRows && value > maxRows) {
192
+ return `This field requires no more than ${maxRows} row(s).`;
138
193
  }
139
- if (!value && options.required) {
194
+ if (!value && required) {
140
195
  return 'This field requires at least one row.';
141
196
  }
142
197
  return true;
143
198
  };
144
199
  exports.array = array;
145
- const select = (value, options = {}) => {
200
+ const select = (value, { options, hasMany, required }) => {
146
201
  var _a;
147
- if (Array.isArray(value) && value.some((input) => !options.options.some((option) => (option === input || option.value === input)))) {
202
+ if (Array.isArray(value) && value.some((input) => !options.some((option) => (option === input || (typeof option !== 'string' && (option === null || option === void 0 ? void 0 : option.value) === input))))) {
148
203
  return 'This field has an invalid selection';
149
204
  }
150
- if (typeof value === 'string' && !options.options.some((option) => (option === value || option.value === value))) {
205
+ if (typeof value === 'string' && !options.some((option) => (option === value || (typeof option !== 'string' && option.value === value)))) {
151
206
  return 'This field has an invalid selection';
152
207
  }
153
- if (options.required && ((typeof value === 'undefined' || value === null) || (options.hasMany && Array.isArray(value) && ((_a = value) === null || _a === void 0 ? void 0 : _a.length) === 0))) {
208
+ if (required && ((typeof value === 'undefined' || value === null) || (hasMany && Array.isArray(value) && ((_a = value) === null || _a === void 0 ? void 0 : _a.length) === 0))) {
154
209
  return defaultMessage;
155
210
  }
156
211
  return true;
157
212
  };
158
213
  exports.select = select;
159
- const radio = (value, options = {}) => {
214
+ const radio = (value, { options, required }) => {
160
215
  const stringValue = String(value);
161
- if ((typeof value !== 'undefined' || !options.required) && (options.options.find((option) => String(option.value) === stringValue)))
216
+ if ((typeof value !== 'undefined' || !required) && (options.find((option) => String(typeof option !== 'string' && (option === null || option === void 0 ? void 0 : option.value)) === stringValue)))
162
217
  return true;
163
218
  return defaultMessage;
164
219
  };
165
220
  exports.radio = radio;
166
- const blocks = (value, options = {}) => {
167
- if (options.minRows && value < options.minRows) {
168
- return `This field requires at least ${options.minRows} row(s).`;
221
+ const blocks = (value, { maxRows, minRows, required }) => {
222
+ if (minRows && value < minRows) {
223
+ return `This field requires at least ${minRows} row(s).`;
169
224
  }
170
- if (options.maxRows && value > options.maxRows) {
171
- return `This field requires no more than ${options.maxRows} row(s).`;
225
+ if (maxRows && value > maxRows) {
226
+ return `This field requires no more than ${maxRows} row(s).`;
172
227
  }
173
- if (!value && options.required) {
228
+ if (!value && required) {
174
229
  return 'This field requires at least one row.';
175
230
  }
176
231
  return true;
177
232
  };
178
233
  exports.blocks = blocks;
179
- const point = (value = ['', ''], options = {}) => {
234
+ const point = (value = ['', ''], { required }) => {
180
235
  const lng = parseFloat(String(value[0]));
181
236
  const lat = parseFloat(String(value[1]));
182
- if ((value[0] && value[1] && typeof lng !== 'number' && typeof lat !== 'number')
183
- || (options.required && (Number.isNaN(lng) || Number.isNaN(lat)))
184
- || (Array.isArray(value) && value.length !== 2)) {
237
+ if (required && ((value[0] && value[1] && typeof lng !== 'number' && typeof lat !== 'number')
238
+ || (Number.isNaN(lng) || Number.isNaN(lat))
239
+ || (Array.isArray(value) && value.length !== 2))) {
185
240
  return 'This field requires two numbers';
186
241
  }
187
- if (!options.required && typeof value[0] !== typeof value[1]) {
188
- return 'This field requires two numbers or both can be empty';
242
+ if ((value[1] && Number.isNaN(lng)) || (value[0] && Number.isNaN(lat))) {
243
+ return 'This field has an invalid input';
189
244
  }
190
245
  return true;
191
246
  };
@@ -197,7 +252,6 @@ exports.default = {
197
252
  email: exports.email,
198
253
  textarea: exports.textarea,
199
254
  code: exports.code,
200
- wysiwyg: exports.wysiwyg,
201
255
  richText: exports.richText,
202
256
  checkbox: exports.checkbox,
203
257
  date: exports.date,
@@ -209,4 +263,4 @@ exports.default = {
209
263
  blocks: exports.blocks,
210
264
  point: exports.point,
211
265
  };
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmllbGRzL3ZhbGlkYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJFQUEyRDtBQUczRCxNQUFNLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQztBQUUxQyxNQUFNLE1BQU0sR0FBYSxDQUFDLEtBQWEsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDOUQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV4QyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7UUFDakcsT0FBTyw4QkFBOEIsQ0FBQztLQUN2QztJQUVELElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUM1QyxPQUFPLElBQUksS0FBSyw4Q0FBOEMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQzlFO0lBRUQsSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQzVDLE9BQU8sSUFBSSxLQUFLLDJDQUEyQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDM0U7SUFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFO1FBQ3ZELE9BQU8sY0FBYyxDQUFDO0tBQ3ZCO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFwQlcsUUFBQSxNQUFNLFVBb0JqQjtBQUVLLE1BQU0sSUFBSSxHQUFhLENBQUMsS0FBYSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRTtJQUM1RCxJQUFJLEtBQUssSUFBSSxP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
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmllbGRzL3ZhbGlkYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJFQUEyRDtBQXFCM0QsdUVBQStDO0FBQy9DLHFEQUErQjtBQUUvQixNQUFNLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQztBQUUxQyxNQUFNLE1BQU0sR0FBNEMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDdkcsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV4QyxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRTtRQUN6RixPQUFPLDhCQUE4QixDQUFDO0tBQ3ZDO0lBRUQsSUFBSSxHQUFHLElBQUksV0FBVyxHQUFHLEdBQUcsRUFBRTtRQUM1QixPQUFPLElBQUksS0FBSyw4Q0FBOEMsR0FBRyxHQUFHLENBQUM7S0FDdEU7SUFFRCxJQUFJLEdBQUcsSUFBSSxXQUFXLEdBQUcsR0FBRyxFQUFFO1FBQzVCLE9BQU8sSUFBSSxLQUFLLDJDQUEyQyxHQUFHLEdBQUcsQ0FBQztLQUNuRTtJQUVELElBQUksUUFBUSxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsRUFBRTtRQUMvQyxPQUFPLGNBQWMsQ0FBQztLQUN2QjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBcEJXLFFBQUEsTUFBTSxVQW9CakI7QUFFSyxNQUFNLElBQUksR0FBMEMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7SUFDL0csSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLEtB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