payload 2.9.0 → 2.10.0

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 (110) hide show
  1. package/components/index.js +1 -1
  2. package/dist/admin/components/elements/DeleteDocument/index.js +2 -2
  3. package/dist/admin/components/elements/DocumentControls/index.d.ts +1 -1
  4. package/dist/admin/components/elements/DocumentControls/index.d.ts.map +1 -1
  5. package/dist/admin/components/elements/DocumentControls/index.js +1 -1
  6. package/dist/admin/components/forms/Form/buildStateFromSchema/addFieldStatePromise.d.ts +34 -3
  7. package/dist/admin/components/forms/Form/buildStateFromSchema/addFieldStatePromise.d.ts.map +1 -1
  8. package/dist/admin/components/forms/Form/buildStateFromSchema/addFieldStatePromise.js +87 -32
  9. package/dist/admin/components/forms/Form/buildStateFromSchema/iterateFields.d.ts +48 -7
  10. package/dist/admin/components/forms/Form/buildStateFromSchema/iterateFields.d.ts.map +1 -1
  11. package/dist/admin/components/forms/Form/buildStateFromSchema/iterateFields.js +15 -6
  12. package/dist/admin/components/forms/Form/reduceFieldsToValues.d.ts +8 -1
  13. package/dist/admin/components/forms/Form/reduceFieldsToValues.d.ts.map +1 -1
  14. package/dist/admin/components/forms/Form/reduceFieldsToValues.js +9 -3
  15. package/dist/admin/components/forms/Form/types.d.ts +1 -0
  16. package/dist/admin/components/forms/Form/types.d.ts.map +1 -1
  17. package/dist/admin/components/forms/field-types/RichText/types.d.ts +5 -1
  18. package/dist/admin/components/forms/field-types/RichText/types.d.ts.map +1 -1
  19. package/dist/admin/components/utilities/DocumentInfo/index.d.ts.map +1 -1
  20. package/dist/admin/components/utilities/DocumentInfo/index.js +9 -10
  21. package/dist/admin/components/utilities/DocumentInfo/types.d.ts +1 -1
  22. package/dist/admin/components/utilities/DocumentInfo/types.d.ts.map +1 -1
  23. package/dist/auth/operations/forgotPassword.d.ts.map +1 -1
  24. package/dist/auth/operations/forgotPassword.js +17 -16
  25. package/dist/auth/operations/local/forgotPassword.d.ts.map +1 -1
  26. package/dist/auth/operations/local/forgotPassword.js +4 -11
  27. package/dist/auth/operations/local/login.d.ts.map +1 -1
  28. package/dist/auth/operations/local/login.js +4 -19
  29. package/dist/auth/operations/local/resetPassword.d.ts.map +1 -1
  30. package/dist/auth/operations/local/resetPassword.js +4 -11
  31. package/dist/auth/operations/local/unlock.d.ts.map +1 -1
  32. package/dist/auth/operations/local/unlock.js +4 -11
  33. package/dist/auth/operations/local/verifyEmail.d.ts.map +1 -1
  34. package/dist/auth/operations/local/verifyEmail.js +4 -8
  35. package/dist/auth/operations/login.d.ts.map +1 -1
  36. package/dist/auth/operations/login.js +17 -16
  37. package/dist/auth/operations/refresh.d.ts.map +1 -1
  38. package/dist/auth/operations/refresh.js +90 -79
  39. package/dist/bin/generateTypes.d.ts.map +1 -1
  40. package/dist/bin/generateTypes.js +6 -2
  41. package/dist/bin/index.js +2 -2
  42. package/dist/collections/config/types.d.ts +1 -0
  43. package/dist/collections/config/types.d.ts.map +1 -1
  44. package/dist/collections/config/types.js +1 -1
  45. package/dist/collections/operations/create.d.ts.map +1 -1
  46. package/dist/collections/operations/create.js +17 -16
  47. package/dist/collections/operations/delete.js +17 -16
  48. package/dist/collections/operations/deleteByID.d.ts.map +1 -1
  49. package/dist/collections/operations/deleteByID.js +17 -16
  50. package/dist/collections/operations/find.d.ts.map +1 -1
  51. package/dist/collections/operations/find.js +17 -16
  52. package/dist/collections/operations/findByID.d.ts.map +1 -1
  53. package/dist/collections/operations/findByID.js +18 -17
  54. package/dist/collections/operations/local/create.d.ts.map +1 -1
  55. package/dist/collections/operations/local/create.js +14 -21
  56. package/dist/collections/operations/local/delete.d.ts.map +1 -1
  57. package/dist/collections/operations/local/delete.js +4 -21
  58. package/dist/collections/operations/local/find.d.ts.map +1 -1
  59. package/dist/collections/operations/local/find.js +4 -18
  60. package/dist/collections/operations/local/findByID.d.ts.map +1 -1
  61. package/dist/collections/operations/local/findByID.js +4 -18
  62. package/dist/collections/operations/local/findVersionByID.d.ts.map +1 -1
  63. package/dist/collections/operations/local/findVersionByID.js +4 -17
  64. package/dist/collections/operations/local/findVersions.d.ts.map +1 -1
  65. package/dist/collections/operations/local/findVersions.js +4 -22
  66. package/dist/collections/operations/local/restoreVersion.d.ts.map +1 -1
  67. package/dist/collections/operations/local/restoreVersion.js +4 -22
  68. package/dist/collections/operations/local/update.d.ts.map +1 -1
  69. package/dist/collections/operations/local/update.js +14 -25
  70. package/dist/collections/operations/update.d.ts.map +1 -1
  71. package/dist/collections/operations/update.js +17 -16
  72. package/dist/collections/operations/updateByID.d.ts.map +1 -1
  73. package/dist/collections/operations/updateByID.js +17 -16
  74. package/dist/collections/operations/utils.d.ts +6 -21
  75. package/dist/collections/operations/utils.d.ts.map +1 -1
  76. package/dist/collections/operations/utils.js +2 -1
  77. package/dist/config/types.d.ts +6 -0
  78. package/dist/config/types.d.ts.map +1 -1
  79. package/dist/config/types.js +1 -1
  80. package/dist/exports/utilities.d.ts +1 -1
  81. package/dist/exports/utilities.d.ts.map +1 -1
  82. package/dist/exports/utilities.js +4 -1
  83. package/dist/fields/config/types.d.ts +2 -1
  84. package/dist/fields/config/types.d.ts.map +1 -1
  85. package/dist/fields/config/types.js +1 -1
  86. package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
  87. package/dist/fields/hooks/beforeChange/promise.js +3 -1
  88. package/dist/globals/operations/local/findOne.d.ts.map +1 -1
  89. package/dist/globals/operations/local/findOne.js +6 -22
  90. package/dist/globals/operations/local/findVersionByID.d.ts.map +1 -1
  91. package/dist/globals/operations/local/findVersionByID.js +4 -21
  92. package/dist/globals/operations/local/findVersions.d.ts.map +1 -1
  93. package/dist/globals/operations/local/findVersions.js +4 -21
  94. package/dist/globals/operations/local/restoreVersion.d.ts.map +1 -1
  95. package/dist/globals/operations/local/restoreVersion.js +4 -21
  96. package/dist/globals/operations/local/update.d.ts.map +1 -1
  97. package/dist/globals/operations/local/update.js +6 -23
  98. package/dist/payload.d.ts.map +1 -1
  99. package/dist/payload.js +2 -2
  100. package/dist/preferences/preferencesCollection.d.ts.map +1 -1
  101. package/dist/preferences/preferencesCollection.js +8 -6
  102. package/dist/utilities/configToJSONSchema.d.ts +13 -0
  103. package/dist/utilities/configToJSONSchema.d.ts.map +1 -1
  104. package/dist/utilities/configToJSONSchema.js +12 -3
  105. package/dist/utilities/createLocalReq.d.ts +13 -0
  106. package/dist/utilities/createLocalReq.d.ts.map +1 -0
  107. package/dist/utilities/createLocalReq.js +53 -0
  108. package/package.json +2 -2
  109. package/utilities.d.ts +1 -1
  110. package/utilities.js +4 -1
@@ -17,10 +17,12 @@ function _interop_require_default(obj) {
17
17
  default: obj
18
18
  };
19
19
  }
20
- const addFieldStatePromise = async ({ id, config, data, field, fullData, locale, operation, passesCondition, path, preferences, state, t, user })=>{
20
+ const addFieldStatePromise = async (args)=>{
21
+ const { id, anyParentLocalized = false, config, data, field, filter, forceFullValue = false, fullData, includeSchema = false, locale, omitParents = false, operation, passesCondition, path, preferences, skipConditionChecks = false, skipValidation = false, state, t, user } = args;
21
22
  if ((0, _types.fieldAffectsData)(field)) {
22
23
  const fieldState = {
23
24
  condition: field.admin?.condition,
25
+ fieldSchema: includeSchema ? field : undefined,
24
26
  initialValue: undefined,
25
27
  passesCondition,
26
28
  valid: true,
@@ -37,7 +39,7 @@ const addFieldStatePromise = async ({ id, config, data, field, fullData, locale,
37
39
  data[field.name] = valueWithDefault;
38
40
  }
39
41
  let validationResult = true;
40
- if (typeof fieldState.validate === 'function') {
42
+ if (typeof fieldState.validate === 'function' && !skipValidation) {
41
43
  validationResult = await fieldState.validate(data?.[field.name], {
42
44
  ...field,
43
45
  id,
@@ -62,22 +64,32 @@ const addFieldStatePromise = async ({ id, config, data, field, fullData, locale,
62
64
  const { promises, rowMetadata } = arrayValue.reduce((acc, row, i)=>{
63
65
  const rowPath = `${path}${field.name}.${i}.`;
64
66
  row.id = row?.id || new _bsonobjectid.default().toHexString();
65
- state[`${rowPath}id`] = {
66
- initialValue: row.id,
67
- valid: true,
68
- value: row.id
69
- };
67
+ if (!omitParents && (!filter || filter(args))) {
68
+ state[`${rowPath}id`] = {
69
+ fieldSchema: includeSchema ? field.fields.find((field)=>'name' in field && field.name === 'id') : undefined,
70
+ initialValue: row.id,
71
+ valid: true,
72
+ value: row.id
73
+ };
74
+ }
70
75
  acc.promises.push((0, _iterateFields.iterateFields)({
71
76
  id,
77
+ anyParentLocalized: field.localized || anyParentLocalized,
72
78
  config,
73
79
  data: row,
74
80
  fields: field.fields,
81
+ filter,
82
+ forceFullValue,
75
83
  fullData,
84
+ includeSchema,
76
85
  locale,
86
+ omitParents,
77
87
  operation,
78
88
  parentPassesCondition: passesCondition,
79
89
  path: rowPath,
80
90
  preferences,
91
+ skipConditionChecks,
92
+ skipValidation,
81
93
  state,
82
94
  t,
83
95
  user
@@ -99,15 +111,17 @@ const addFieldStatePromise = async ({ id, config, data, field, fullData, locale,
99
111
  fieldState.value = null;
100
112
  fieldState.initialValue = null;
101
113
  } else {
102
- fieldState.value = arrayValue.length;
103
- fieldState.initialValue = arrayValue.length;
114
+ fieldState.value = forceFullValue ? arrayValue : arrayValue.length;
115
+ fieldState.initialValue = forceFullValue ? arrayValue : arrayValue.length;
104
116
  if (arrayValue.length > 0) {
105
117
  fieldState.disableFormData = true;
106
118
  }
107
119
  }
108
120
  fieldState.rows = rowMetadata;
109
121
  // Add field to state
110
- state[`${path}${field.name}`] = fieldState;
122
+ if (!omitParents && (!filter || filter(args))) {
123
+ state[`${path}${field.name}`] = fieldState;
124
+ }
111
125
  break;
112
126
  }
113
127
  case 'blocks':
@@ -118,32 +132,44 @@ const addFieldStatePromise = async ({ id, config, data, field, fullData, locale,
118
132
  const rowPath = `${path}${field.name}.${i}.`;
119
133
  if (block) {
120
134
  row.id = row?.id || new _bsonobjectid.default().toHexString();
121
- state[`${rowPath}id`] = {
122
- initialValue: row.id,
123
- valid: true,
124
- value: row.id
125
- };
126
- state[`${rowPath}blockType`] = {
127
- initialValue: row.blockType,
128
- valid: true,
129
- value: row.blockType
130
- };
131
- state[`${rowPath}blockName`] = {
132
- initialValue: row.blockName,
133
- valid: true,
134
- value: row.blockName
135
- };
135
+ if (!omitParents && (!filter || filter(args))) {
136
+ state[`${rowPath}id`] = {
137
+ fieldSchema: includeSchema ? block.fields.find((blockField)=>'name' in blockField && blockField.name === 'id') : undefined,
138
+ initialValue: row.id,
139
+ valid: true,
140
+ value: row.id
141
+ };
142
+ state[`${rowPath}blockType`] = {
143
+ fieldSchema: includeSchema ? block.fields.find((blockField)=>'name' in blockField && blockField.name === 'blockType') : undefined,
144
+ initialValue: row.blockType,
145
+ valid: true,
146
+ value: row.blockType
147
+ };
148
+ state[`${rowPath}blockName`] = {
149
+ fieldSchema: includeSchema ? block.fields.find((blockField)=>'name' in blockField && blockField.name === 'blockName') : undefined,
150
+ initialValue: row.blockName,
151
+ valid: true,
152
+ value: row.blockName
153
+ };
154
+ }
136
155
  acc.promises.push((0, _iterateFields.iterateFields)({
137
156
  id,
157
+ anyParentLocalized: field.localized || anyParentLocalized,
138
158
  config,
139
159
  data: row,
140
160
  fields: block.fields,
161
+ filter,
162
+ forceFullValue,
141
163
  fullData,
164
+ includeSchema,
142
165
  locale,
166
+ omitParents,
143
167
  operation,
144
168
  parentPassesCondition: passesCondition,
145
169
  path: rowPath,
146
170
  preferences,
171
+ skipConditionChecks,
172
+ skipValidation,
147
173
  state,
148
174
  t,
149
175
  user
@@ -167,30 +193,39 @@ const addFieldStatePromise = async ({ id, config, data, field, fullData, locale,
167
193
  fieldState.value = null;
168
194
  fieldState.initialValue = null;
169
195
  } else {
170
- fieldState.value = blocksValue.length;
171
- fieldState.initialValue = blocksValue.length;
196
+ fieldState.value = forceFullValue ? blocksValue : blocksValue.length;
197
+ fieldState.initialValue = forceFullValue ? blocksValue : blocksValue.length;
172
198
  if (blocksValue.length > 0) {
173
199
  fieldState.disableFormData = true;
174
200
  }
175
201
  }
176
202
  fieldState.rows = rowMetadata;
177
203
  // Add field to state
178
- state[`${path}${field.name}`] = fieldState;
204
+ if (!omitParents && (!filter || filter(args))) {
205
+ state[`${path}${field.name}`] = fieldState;
206
+ }
179
207
  break;
180
208
  }
181
209
  case 'group':
182
210
  {
183
211
  await (0, _iterateFields.iterateFields)({
184
212
  id,
213
+ anyParentLocalized: field.localized || anyParentLocalized,
185
214
  config,
186
215
  data: data?.[field.name] || {},
187
216
  fields: field.fields,
217
+ filter,
218
+ forceFullValue,
188
219
  fullData,
220
+ includeSchema,
189
221
  locale,
222
+ omitParents,
190
223
  operation,
191
224
  parentPassesCondition: passesCondition,
192
225
  path: `${path}${field.name}.`,
193
226
  preferences,
227
+ skipConditionChecks,
228
+ skipValidation,
194
229
  state,
195
230
  t,
196
231
  user
@@ -229,7 +264,9 @@ const addFieldStatePromise = async ({ id, config, data, field, fullData, locale,
229
264
  fieldState.value = relationshipValue;
230
265
  fieldState.initialValue = relationshipValue;
231
266
  }
232
- state[`${path}${field.name}`] = fieldState;
267
+ if (!filter || filter(args)) {
268
+ state[`${path}${field.name}`] = fieldState;
269
+ }
233
270
  break;
234
271
  }
235
272
  case 'upload':
@@ -237,7 +274,9 @@ const addFieldStatePromise = async ({ id, config, data, field, fullData, locale,
237
274
  const relationshipValue = valueWithDefault && typeof valueWithDefault === 'object' && 'id' in valueWithDefault ? valueWithDefault.id : valueWithDefault;
238
275
  fieldState.value = relationshipValue;
239
276
  fieldState.initialValue = relationshipValue;
240
- state[`${path}${field.name}`] = fieldState;
277
+ if (!filter || filter(args)) {
278
+ state[`${path}${field.name}`] = fieldState;
279
+ }
241
280
  break;
242
281
  }
243
282
  default:
@@ -245,7 +284,9 @@ const addFieldStatePromise = async ({ id, config, data, field, fullData, locale,
245
284
  fieldState.value = valueWithDefault;
246
285
  fieldState.initialValue = valueWithDefault;
247
286
  // Add field to state
248
- state[`${path}${field.name}`] = fieldState;
287
+ if (!filter || filter(args)) {
288
+ state[`${path}${field.name}`] = fieldState;
289
+ }
249
290
  break;
250
291
  }
251
292
  }
@@ -253,15 +294,22 @@ const addFieldStatePromise = async ({ id, config, data, field, fullData, locale,
253
294
  // Handle field types that do not use names (row, etc)
254
295
  await (0, _iterateFields.iterateFields)({
255
296
  id,
297
+ anyParentLocalized: field.localized || anyParentLocalized,
256
298
  config,
257
299
  data,
258
300
  fields: field.fields,
301
+ filter,
302
+ forceFullValue,
259
303
  fullData,
304
+ includeSchema,
260
305
  locale,
306
+ omitParents,
261
307
  operation,
262
308
  parentPassesCondition: passesCondition,
263
309
  path,
264
310
  preferences,
311
+ skipConditionChecks,
312
+ skipValidation,
265
313
  state,
266
314
  t,
267
315
  user
@@ -269,15 +317,22 @@ const addFieldStatePromise = async ({ id, config, data, field, fullData, locale,
269
317
  } else if (field.type === 'tabs') {
270
318
  const promises = field.tabs.map((tab)=>(0, _iterateFields.iterateFields)({
271
319
  id,
320
+ anyParentLocalized: tab.localized || anyParentLocalized,
272
321
  config,
273
322
  data: (0, _types.tabHasName)(tab) ? data?.[tab.name] : data,
274
323
  fields: tab.fields,
324
+ filter,
325
+ forceFullValue,
275
326
  fullData,
327
+ includeSchema,
276
328
  locale,
329
+ omitParents,
277
330
  operation,
278
331
  parentPassesCondition: passesCondition,
279
332
  path: (0, _types.tabHasName)(tab) ? `${path}${tab.name}.` : path,
280
333
  preferences,
334
+ skipConditionChecks,
335
+ skipValidation,
281
336
  state,
282
337
  t,
283
338
  user
@@ -286,4 +341,4 @@ const addFieldStatePromise = async ({ id, config, data, field, fullData, locale,
286
341
  }
287
342
  };
288
343
 
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL0Zvcm0vYnVpbGRTdGF0ZUZyb21TY2hlbWEvYWRkRmllbGRTdGF0ZVByb21pc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgVEZ1bmN0aW9uIH0gZnJvbSAnaTE4bmV4dCdcblxuaW1wb3J0IE9iamVjdElEIGZyb20gJ2Jzb24tb2JqZWN0aWQnXG5cbmltcG9ydCB0eXBlIHsgVXNlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2F1dGgnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgTm9uUHJlc2VudGF0aW9uYWxGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERhdGEsIEZpZWxkcywgRm9ybUZpZWxkIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCB7IGZpZWxkQWZmZWN0c0RhdGEsIGZpZWxkSGFzU3ViRmllbGRzLCB0YWJIYXNOYW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCBnZXRWYWx1ZVdpdGhEZWZhdWx0IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ZpZWxkcy9nZXREZWZhdWx0VmFsdWUnXG5pbXBvcnQgeyBpdGVyYXRlRmllbGRzIH0gZnJvbSAnLi9pdGVyYXRlRmllbGRzJ1xuXG50eXBlIEFyZ3MgPSB7XG4gIGNvbmZpZzogU2FuaXRpemVkQ29uZmlnXG4gIGRhdGE6IERhdGFcbiAgZmllbGQ6IE5vblByZXNlbnRhdGlvbmFsRmllbGRcbiAgZnVsbERhdGE6IERhdGFcbiAgaWQ6IG51bWJlciB8IHN0cmluZ1xuICBsb2NhbGU6IHN0cmluZ1xuICBvcGVyYXRpb246ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgcGFzc2VzQ29uZGl0aW9uOiBib29sZWFuXG4gIHBhdGg6IHN0cmluZ1xuICBwcmVmZXJlbmNlczoge1xuICAgIFtrZXk6IHN0cmluZ106IHVua25vd25cbiAgfVxuICBzdGF0ZTogRmllbGRzXG4gIHQ6IFRGdW5jdGlvblxuICB1c2VyOiBVc2VyXG59XG5cbmV4cG9ydCBjb25zdCBhZGRGaWVsZFN0YXRlUHJvbWlzZSA9IGFzeW5jICh7XG4gIGlkLFxuICBjb25maWcsXG4gIGRhdGEsXG4gIGZpZWxkLFxuICBmdWxsRGF0YSxcbiAgbG9jYWxlLFxuICBvcGVyYXRpb24sXG4gIHBhc3Nlc0NvbmRpdGlvbixcbiAgcGF0aCxcbiAgcHJlZmVyZW5jZXMsXG4gIHN0YXRlLFxuICB0LFxuICB1c2VyLFxufTogQXJncyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICBjb25zdCBmaWVsZFN0YXRlOiBGb3JtRmllbGQgPSB7XG4gICAgICBjb25kaXRpb246IGZpZWxkLmFkbWluPy5jb25kaXRpb24sXG4gICAgICBpbml0aWFsVmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIHBhc3Nlc0NvbmRpdGlvbixcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgdmFsaWRhdGU6IGZpZWxkLnZhbGlkYXRlLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZVdpdGhEZWZhdWx0ID0gYXdhaXQgZ2V0VmFsdWVXaXRoRGVmYXVsdCh7XG4gICAgICBkZWZhdWx0VmFsdWU6IGZpZWxkLmRlZmF1bHRWYWx1ZSxcbiAgICAgIGxvY2FsZSxcbiAgICAgIHVzZXIsXG4gICAgICB2YWx1ZTogZGF0YT8uW2ZpZWxkLm5hbWVdLFxuICAgIH0pXG5cbiAgICBpZiAoZGF0YT8uW2ZpZWxkLm5hbWVdKSB7XG4gICAgICBkYXRhW2ZpZWxkLm5hbWVdID0gdmFsdWVXaXRoRGVmYXVsdFxuICAgIH1cblxuICAgIGxldCB2YWxpZGF0aW9uUmVzdWx0OiBib29sZWFuIHwgc3RyaW5nID0gdHJ1ZVxuXG4gICAgaWYgKHR5cGVvZiBmaWVsZFN0YXRlLnZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YWxpZGF0aW9uUmVzdWx0ID0gYXdhaXQgZmllbGRTdGF0ZS52YWxpZGF0ZShkYXRhPy5bZmllbGQubmFtZV0sIHtcbiAgICAgICAgLi4uZmllbGQsXG4gICAgICAgIGlkLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGRhdGE6IGZ1bGxEYXRhLFxuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIHNpYmxpbmdEYXRhOiBkYXRhLFxuICAgICAgICB0LFxuICAgICAgICB1c2VyLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbGlkYXRpb25SZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBmaWVsZFN0YXRlLmVycm9yTWVzc2FnZSA9IHZhbGlkYXRpb25SZXN1bHRcbiAgICAgIGZpZWxkU3RhdGUudmFsaWQgPSBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICBmaWVsZFN0YXRlLnZhbGlkID0gdHJ1ZVxuICAgIH1cblxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIGNvbnN0IGFycmF5VmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlV2l0aERlZmF1bHQpID8gdmFsdWVXaXRoRGVmYXVsdCA6IFtdXG4gICAgICAgIGNvbnN0IHsgcHJvbWlzZXMsIHJvd01ldGFkYXRhIH0gPSBhcnJheVZhbHVlLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCByb3csIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd1BhdGggPSBgJHtwYXRofSR7ZmllbGQubmFtZX0uJHtpfS5gXG4gICAgICAgICAgICByb3cuaWQgPSByb3c/LmlkIHx8IG5ldyBPYmplY3RJRCgpLnRvSGV4U3RyaW5nKClcblxuICAgICAgICAgICAgc3RhdGVbYCR7cm93UGF0aH1pZGBdID0ge1xuICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJvdy5pZCxcbiAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgIHZhbHVlOiByb3cuaWQsXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFjYy5wcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICBpdGVyYXRlRmllbGRzKHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgZGF0YTogcm93LFxuICAgICAgICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgICAgICAgIGZ1bGxEYXRhLFxuICAgICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgICAgICAgICAgcGFyZW50UGFzc2VzQ29uZGl0aW9uOiBwYXNzZXNDb25kaXRpb24sXG4gICAgICAgICAgICAgICAgcGF0aDogcm93UGF0aCxcbiAgICAgICAgICAgICAgICBwcmVmZXJlbmNlcyxcbiAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBjb25zdCBjb2xsYXBzZWRSb3dJRHMgPSBwcmVmZXJlbmNlcz8uZmllbGRzPy5bYCR7cGF0aH0ke2ZpZWxkLm5hbWV9YF0/LmNvbGxhcHNlZFxuXG4gICAgICAgICAgICBhY2Mucm93TWV0YWRhdGEucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiByb3cuaWQsXG4gICAgICAgICAgICAgIGNoaWxkRXJyb3JQYXRoczogbmV3IFNldCgpLFxuICAgICAgICAgICAgICBjb2xsYXBzZWQ6XG4gICAgICAgICAgICAgICAgY29sbGFwc2VkUm93SURzID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgID8gZmllbGQuYWRtaW4uaW5pdENvbGxhcHNlZFxuICAgICAgICAgICAgICAgICAgOiBjb2xsYXBzZWRSb3dJRHMuaW5jbHVkZXMocm93LmlkKSxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb21pc2VzOiBbXSxcbiAgICAgICAgICAgIHJvd01ldGFkYXRhOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG5cbiAgICAgICAgLy8gQWRkIHZhbHVlcyB0byBmaWVsZCBzdGF0ZVxuICAgICAgICBpZiAodmFsdWVXaXRoRGVmYXVsdCA9PT0gbnVsbCkge1xuICAgICAgICAgIGZpZWxkU3RhdGUudmFsdWUgPSBudWxsXG4gICAgICAgICAgZmllbGRTdGF0ZS5pbml0aWFsVmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRTdGF0ZS52YWx1ZSA9IGFycmF5VmFsdWUubGVuZ3RoXG4gICAgICAgICAgZmllbGRTdGF0ZS5pbml0aWFsVmFsdWUgPSBhcnJheVZhbHVlLmxlbmd0aFxuXG4gICAgICAgICAgaWYgKGFycmF5VmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZmllbGRTdGF0ZS5kaXNhYmxlRm9ybURhdGEgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZmllbGRTdGF0ZS5yb3dzID0gcm93TWV0YWRhdGFcblxuICAgICAgICAvLyBBZGQgZmllbGQgdG8gc3RhdGVcbiAgICAgICAgc3RhdGVbYCR7cGF0aH0ke2ZpZWxkLm5hbWV9YF0gPSBmaWVsZFN0YXRlXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYmxvY2tzJzoge1xuICAgICAgICBjb25zdCBibG9ja3NWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWVXaXRoRGVmYXVsdCkgPyB2YWx1ZVdpdGhEZWZhdWx0IDogW11cblxuICAgICAgICBjb25zdCB7IHByb21pc2VzLCByb3dNZXRhZGF0YSB9ID0gYmxvY2tzVmFsdWUucmVkdWNlKFxuICAgICAgICAgIChhY2MsIHJvdywgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBmaWVsZC5ibG9ja3MuZmluZCgoYmxvY2tUeXBlKSA9PiBibG9ja1R5cGUuc2x1ZyA9PT0gcm93LmJsb2NrVHlwZSlcbiAgICAgICAgICAgIGNvbnN0IHJvd1BhdGggPSBgJHtwYXRofSR7ZmllbGQubmFtZX0uJHtpfS5gXG5cbiAgICAgICAgICAgIGlmIChibG9jaykge1xuICAgICAgICAgICAgICByb3cuaWQgPSByb3c/LmlkIHx8IG5ldyBPYmplY3RJRCgpLnRvSGV4U3RyaW5nKClcblxuICAgICAgICAgICAgICBzdGF0ZVtgJHtyb3dQYXRofWlkYF0gPSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiByb3cuaWQsXG4gICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJvdy5pZCxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN0YXRlW2Ake3Jvd1BhdGh9YmxvY2tUeXBlYF0gPSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiByb3cuYmxvY2tUeXBlLFxuICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByb3cuYmxvY2tUeXBlLFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3RhdGVbYCR7cm93UGF0aH1ibG9ja05hbWVgXSA9IHtcbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJvdy5ibG9ja05hbWUsXG4gICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJvdy5ibG9ja05hbWUsXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBhY2MucHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICBpdGVyYXRlRmllbGRzKHtcbiAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgICAgZGF0YTogcm93LFxuICAgICAgICAgICAgICAgICAgZmllbGRzOiBibG9jay5maWVsZHMsXG4gICAgICAgICAgICAgICAgICBmdWxsRGF0YSxcbiAgICAgICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgICAgIHBhcmVudFBhc3Nlc0NvbmRpdGlvbjogcGFzc2VzQ29uZGl0aW9uLFxuICAgICAgICAgICAgICAgICAgcGF0aDogcm93UGF0aCxcbiAgICAgICAgICAgICAgICAgIHByZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGNvbnN0IGNvbGxhcHNlZFJvd0lEcyA9IHByZWZlcmVuY2VzPy5maWVsZHM/LltgJHtwYXRofSR7ZmllbGQubmFtZX1gXT8uY29sbGFwc2VkXG5cbiAgICAgICAgICAgICAgYWNjLnJvd01ldGFkYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiByb3cuaWQsXG4gICAgICAgICAgICAgICAgYmxvY2tUeXBlOiByb3cuYmxvY2tUeXBlLFxuICAgICAgICAgICAgICAgIGNoaWxkRXJyb3JQYXRoczogbmV3IFNldCgpLFxuICAgICAgICAgICAgICAgIGNvbGxhcHNlZDpcbiAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZFJvd0lEcyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gZmllbGQuYWRtaW4uaW5pdENvbGxhcHNlZFxuICAgICAgICAgICAgICAgICAgICA6IGNvbGxhcHNlZFJvd0lEcy5pbmNsdWRlcyhyb3cuaWQpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9taXNlczogW10sXG4gICAgICAgICAgICByb3dNZXRhZGF0YTogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuXG4gICAgICAgIC8vIEFkZCB2YWx1ZXMgdG8gZmllbGQgc3RhdGVcbiAgICAgICAgaWYgKHZhbHVlV2l0aERlZmF1bHQgPT09IG51bGwpIHtcbiAgICAgICAgICBmaWVsZFN0YXRlLnZhbHVlID0gbnVsbFxuICAgICAgICAgIGZpZWxkU3RhdGUuaW5pdGlhbFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkU3RhdGUudmFsdWUgPSBibG9ja3NWYWx1ZS5sZW5ndGhcbiAgICAgICAgICBmaWVsZFN0YXRlLmluaXRpYWxWYWx1ZSA9IGJsb2Nrc1ZhbHVlLmxlbmd0aFxuXG4gICAgICAgICAgaWYgKGJsb2Nrc1ZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpZWxkU3RhdGUuZGlzYWJsZUZvcm1EYXRhID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkU3RhdGUucm93cyA9IHJvd01ldGFkYXRhXG5cbiAgICAgICAgLy8gQWRkIGZpZWxkIHRvIHN0YXRlXG4gICAgICAgIHN0YXRlW2Ake3BhdGh9JHtmaWVsZC5uYW1lfWBdID0gZmllbGRTdGF0ZVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2dyb3VwJzoge1xuICAgICAgICBhd2FpdCBpdGVyYXRlRmllbGRzKHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZGF0YTogZGF0YT8uW2ZpZWxkLm5hbWVdIHx8IHt9LFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGZ1bGxEYXRhLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgICAgcGFyZW50UGFzc2VzQ29uZGl0aW9uOiBwYXNzZXNDb25kaXRpb24sXG4gICAgICAgICAgcGF0aDogYCR7cGF0aH0ke2ZpZWxkLm5hbWV9LmAsXG4gICAgICAgICAgcHJlZmVyZW5jZXMsXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgdCxcbiAgICAgICAgICB1c2VyLFxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3JlbGF0aW9uc2hpcCc6IHtcbiAgICAgICAgaWYgKGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgICBjb25zdCByZWxhdGlvbnNoaXBWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWVXaXRoRGVmYXVsdClcbiAgICAgICAgICAgID8gdmFsdWVXaXRoRGVmYXVsdC5tYXAoKHJlbGF0aW9uc2hpcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZWxhdGlvblRvOiByZWxhdGlvbnNoaXAucmVsYXRpb25UbyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwLnZhbHVlICYmIHR5cGVvZiByZWxhdGlvbnNoaXAudmFsdWUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJlbGF0aW9uc2hpcC52YWx1ZT8uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcmVsYXRpb25zaGlwLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlbGF0aW9uc2hpcCA9PT0gJ29iamVjdCcgJiYgcmVsYXRpb25zaGlwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcmVsYXRpb25zaGlwLmlkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZWxhdGlvbnNoaXBcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgICAgICBmaWVsZFN0YXRlLnZhbHVlID0gcmVsYXRpb25zaGlwVmFsdWVcbiAgICAgICAgICBmaWVsZFN0YXRlLmluaXRpYWxWYWx1ZSA9IHJlbGF0aW9uc2hpcFZhbHVlXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKSkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHZhbHVlV2l0aERlZmF1bHQgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZVdpdGhEZWZhdWx0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgJ3JlbGF0aW9uVG8nIGluIHZhbHVlV2l0aERlZmF1bHQgJiZcbiAgICAgICAgICAgICd2YWx1ZScgaW4gdmFsdWVXaXRoRGVmYXVsdFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAgICAgICB0eXBlb2YgdmFsdWVXaXRoRGVmYXVsdD8udmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgIHZhbHVlV2l0aERlZmF1bHQ/LnZhbHVlICYmXG4gICAgICAgICAgICAgICdpZCcgaW4gdmFsdWVXaXRoRGVmYXVsdC52YWx1ZVxuICAgICAgICAgICAgICAgID8gdmFsdWVXaXRoRGVmYXVsdC52YWx1ZS5pZFxuICAgICAgICAgICAgICAgIDogdmFsdWVXaXRoRGVmYXVsdC52YWx1ZVxuICAgICAgICAgICAgY29uc3QgcmVsYXRpb25zaGlwVmFsdWUgPSB7XG4gICAgICAgICAgICAgIHJlbGF0aW9uVG86IHZhbHVlV2l0aERlZmF1bHQ/LnJlbGF0aW9uVG8sXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmllbGRTdGF0ZS52YWx1ZSA9IHJlbGF0aW9uc2hpcFZhbHVlXG4gICAgICAgICAgICBmaWVsZFN0YXRlLmluaXRpYWxWYWx1ZSA9IHJlbGF0aW9uc2hpcFZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcFZhbHVlID1cbiAgICAgICAgICAgIHZhbHVlV2l0aERlZmF1bHQgJiYgdHlwZW9mIHZhbHVlV2l0aERlZmF1bHQgPT09ICdvYmplY3QnICYmICdpZCcgaW4gdmFsdWVXaXRoRGVmYXVsdFxuICAgICAgICAgICAgICA/IHZhbHVlV2l0aERlZmF1bHQuaWRcbiAgICAgICAgICAgICAgOiB2YWx1ZVdpdGhEZWZhdWx0XG4gICAgICAgICAgZmllbGRTdGF0ZS52YWx1ZSA9IHJlbGF0aW9uc2hpcFZhbHVlXG4gICAgICAgICAgZmllbGRTdGF0ZS5pbml0aWFsVmFsdWUgPSByZWxhdGlvbnNoaXBWYWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGVbYCR7cGF0aH0ke2ZpZWxkLm5hbWV9YF0gPSBmaWVsZFN0YXRlXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAndXBsb2FkJzoge1xuICAgICAgICBjb25zdCByZWxhdGlvbnNoaXBWYWx1ZSA9XG4gICAgICAgICAgdmFsdWVXaXRoRGVmYXVsdCAmJiB0eXBlb2YgdmFsdWVXaXRoRGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgJ2lkJyBpbiB2YWx1ZVdpdGhEZWZhdWx0XG4gICAgICAgICAgICA/IHZhbHVlV2l0aERlZmF1bHQuaWRcbiAgICAgICAgICAgIDogdmFsdWVXaXRoRGVmYXVsdFxuICAgICAgICBmaWVsZFN0YXRlLnZhbHVlID0gcmVsYXRpb25zaGlwVmFsdWVcbiAgICAgICAgZmllbGRTdGF0ZS5pbml0aWFsVmFsdWUgPSByZWxhdGlvbnNoaXBWYWx1ZVxuXG4gICAgICAgIHN0YXRlW2Ake3BhdGh9JHtmaWVsZC5uYW1lfWBdID0gZmllbGRTdGF0ZVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgZmllbGRTdGF0ZS52YWx1ZSA9IHZhbHVlV2l0aERlZmF1bHRcbiAgICAgICAgZmllbGRTdGF0ZS5pbml0aWFsVmFsdWUgPSB2YWx1ZVdpdGhEZWZhdWx0XG5cbiAgICAgICAgLy8gQWRkIGZpZWxkIHRvIHN0YXRlXG4gICAgICAgIHN0YXRlW2Ake3BhdGh9JHtmaWVsZC5uYW1lfWBdID0gZmllbGRTdGF0ZVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGZpZWxkSGFzU3ViRmllbGRzKGZpZWxkKSkge1xuICAgIC8vIEhhbmRsZSBmaWVsZCB0eXBlcyB0aGF0IGRvIG5vdCB1c2UgbmFtZXMgKHJvdywgZXRjKVxuICAgIGF3YWl0IGl0ZXJhdGVGaWVsZHMoe1xuICAgICAgaWQsXG4gICAgICBjb25maWcsXG4gICAgICBkYXRhLFxuICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICBmdWxsRGF0YSxcbiAgICAgIGxvY2FsZSxcbiAgICAgIG9wZXJhdGlvbixcbiAgICAgIHBhcmVudFBhc3Nlc0NvbmRpdGlvbjogcGFzc2VzQ29uZGl0aW9uLFxuICAgICAgcGF0aCxcbiAgICAgIHByZWZlcmVuY2VzLFxuICAgICAgc3RhdGUsXG4gICAgICB0LFxuICAgICAgdXNlcixcbiAgICB9KVxuICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJzJykge1xuICAgIGNvbnN0IHByb21pc2VzID0gZmllbGQudGFicy5tYXAoKHRhYikgPT5cbiAgICAgIGl0ZXJhdGVGaWVsZHMoe1xuICAgICAgICBpZCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkYXRhOiB0YWJIYXNOYW1lKHRhYikgPyBkYXRhPy5bdGFiLm5hbWVdIDogZGF0YSxcbiAgICAgICAgZmllbGRzOiB0YWIuZmllbGRzLFxuICAgICAgICBmdWxsRGF0YSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIHBhcmVudFBhc3Nlc0NvbmRpdGlvbjogcGFzc2VzQ29uZGl0aW9uLFxuICAgICAgICBwYXRoOiB0YWJIYXNOYW1lKHRhYikgPyBgJHtwYXRofSR7dGFiLm5hbWV9LmAgOiBwYXRoLFxuICAgICAgICBwcmVmZXJlbmNlcyxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHQsXG4gICAgICAgIHVzZXIsXG4gICAgICB9KSxcbiAgICApXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgfVxufVxuIl0sIm5hbWVzIjpbImFkZEZpZWxkU3RhdGVQcm9taXNlIiwiaWQiLCJjb25maWciLCJkYXRhIiwiZmllbGQiLCJmdWxsRGF0YSIsImxvY2FsZSIsIm9wZXJhdGlvbiIsInBhc3Nlc0NvbmRpdGlvbiIsInBhdGgiLCJwcmVmZXJlbmNlcyIsInN0YXRlIiwidCIsInVzZXIiLCJmaWVsZEFmZmVjdHNEYXRhIiwiZmllbGRTdGF0ZSIsImNvbmRpdGlvbiIsImFkbWluIiwiaW5pdGlhbFZhbHVlIiwidW5kZWZpbmVkIiwidmFsaWQiLCJ2YWxpZGF0ZSIsInZhbHVlIiwidmFsdWVXaXRoRGVmYXVsdCIsImdldFZhbHVlV2l0aERlZmF1bHQiLCJkZWZhdWx0VmFsdWUiLCJuYW1lIiwidmFsaWRhdGlvblJlc3VsdCIsInNpYmxpbmdEYXRhIiwiZXJyb3JNZXNzYWdlIiwidHlwZSIsImFycmF5VmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJwcm9taXNlcyIsInJvd01ldGFkYXRhIiwicmVkdWNlIiwiYWNjIiwicm93IiwiaSIsInJvd1BhdGgiLCJPYmplY3RJRCIsInRvSGV4U3RyaW5nIiwicHVzaCIsIml0ZXJhdGVGaWVsZHMiLCJmaWVsZHMiLCJwYXJlbnRQYXNzZXNDb25kaXRpb24iLCJjb2xsYXBzZWRSb3dJRHMiLCJjb2xsYXBzZWQiLCJjaGlsZEVycm9yUGF0aHMiLCJTZXQiLCJpbml0Q29sbGFwc2VkIiwiaW5jbHVkZXMiLCJQcm9taXNlIiwiYWxsIiwibGVuZ3RoIiwiZGlzYWJsZUZvcm1EYXRhIiwicm93cyIsImJsb2Nrc1ZhbHVlIiwiYmxvY2siLCJibG9ja3MiLCJmaW5kIiwiYmxvY2tUeXBlIiwic2x1ZyIsImJsb2NrTmFtZSIsImhhc01hbnkiLCJyZWxhdGlvbnNoaXBWYWx1ZSIsIm1hcCIsInJlbGF0aW9uc2hpcCIsInJlbGF0aW9uVG8iLCJmaWVsZEhhc1N1YkZpZWxkcyIsInRhYnMiLCJ0YWIiLCJ0YWJIYXNOYW1lIl0sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7Ozs7K0JBZ0N2QkE7OztlQUFBQTs7O3FFQTdCUTt1QkFPMkM7d0VBQ2hDOytCQUNGOzs7Ozs7QUFvQnZCLE1BQU1BLHVCQUF1QixPQUFPLEVBQ3pDQyxFQUFFLEVBQ0ZDLE1BQU0sRUFDTkMsSUFBSSxFQUNKQyxLQUFLLEVBQ0xDLFFBQVEsRUFDUkMsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLGVBQWUsRUFDZkMsSUFBSSxFQUNKQyxXQUFXLEVBQ1hDLEtBQUssRUFDTEMsQ0FBQyxFQUNEQyxJQUFJLEVBQ0M7SUFDTCxJQUFJQyxJQUFBQSx1QkFBZ0IsRUFBQ1YsUUFBUTtRQUMzQixNQUFNVyxhQUF3QjtZQUM1QkMsV0FBV1osTUFBTWEsS0FBSyxFQUFFRDtZQUN4QkUsY0FBY0M7WUFDZFg7WUFDQVksT0FBTztZQUNQQyxVQUFVakIsTUFBTWlCLFFBQVE7WUFDeEJDLE9BQU9IO1FBQ1Q7UUFFQSxNQUFNSSxtQkFBbUIsTUFBTUMsSUFBQUEsd0JBQW1CLEVBQUM7WUFDakRDLGNBQWNyQixNQUFNcUIsWUFBWTtZQUNoQ25CO1lBQ0FPO1lBQ0FTLE9BQU9uQixNQUFNLENBQUNDLE1BQU1zQixJQUFJLENBQUM7UUFDM0I7UUFFQSxJQUFJdkIsTUFBTSxDQUFDQyxN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
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL0Zvcm0vYnVpbGRTdGF0ZUZyb21TY2hlbWEvYWRkRmllbGRTdGF0ZVByb21pc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgVEZ1bmN0aW9uIH0gZnJvbSAnaTE4bmV4dCdcblxuaW1wb3J0IE9iamVjdElEIGZyb20gJ2Jzb24tb2JqZWN0aWQnXG5cbmltcG9ydCB0eXBlIHsgVXNlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2F1dGgnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgTm9uUHJlc2VudGF0aW9uYWxGaWVsZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERhdGEsIEZpZWxkcywgRm9ybUZpZWxkIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmltcG9ydCB7IGZpZWxkQWZmZWN0c0RhdGEsIGZpZWxkSGFzU3ViRmllbGRzLCB0YWJIYXNOYW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZmllbGRzL2NvbmZpZy90eXBlcydcbmltcG9ydCBnZXRWYWx1ZVdpdGhEZWZhdWx0IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ZpZWxkcy9nZXREZWZhdWx0VmFsdWUnXG5pbXBvcnQgeyBpdGVyYXRlRmllbGRzIH0gZnJvbSAnLi9pdGVyYXRlRmllbGRzJ1xuXG5leHBvcnQgdHlwZSBBZGRGaWVsZFN0YXRlUHJvbWlzZUFyZ3MgPSB7XG4gIC8qKlxuICAgKiBpZiBhbGwgcGFyZW50cyBhcmUgbG9jYWxpemVkLCB0aGVuIHRoZSBmaWVsZCBpcyBsb2NhbGl6ZWRcbiAgICovXG4gIGFueVBhcmVudExvY2FsaXplZD86IGJvb2xlYW5cbiAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWdcbiAgZGF0YTogRGF0YVxuICBmaWVsZDogTm9uUHJlc2VudGF0aW9uYWxGaWVsZFxuICAvKipcbiAgICogWW91IGNhbiB1c2UgdGhpcyB0byBmaWx0ZXIgZG93biB0byBvbmx5IGBsb2NhbGl6ZWRgIGZpZWxkcyB0aGF0IHJlcXVpcmUgdHJhbnNhbGF0aW9uICh0eXBlOiB0ZXh0LCB0ZXh0YXJlYSwgZXRjLikuIEFub3RoZXIgcGx1Z2luIG1pZ2h0IHdhbnQgdG8gbG9vayBmb3Igb25seSBgcG9pbnRgIHR5cGUgZmllbGRzIHRvIGRvIHNvbWUgR0lTIGZ1bmN0aW9uLiBXaXRoIHRoZSBmaWx0ZXIgZnVuY3Rpb24geW91IGNhbiBnbyBpbiBsaWtlIGEgc3VyZ2Vvbi5cbiAgICovXG4gIGZpbHRlcj86IChhcmdzOiBBZGRGaWVsZFN0YXRlUHJvbWlzZUFyZ3MpID0+IGJvb2xlYW5cbiAgLyoqXG4gICAqIEZvcmNlIHRoZSB2YWx1ZSBvZiBmaWVsZHMgbGlrZSBhcnJheXMgb3IgYmxvY2tzIHRvIGJlIHRoZSBmdWxsIHZhbHVlIGluc3RlYWQgb2YgdGhlIGxlbmd0aCBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZm9yY2VGdWxsVmFsdWU/OiBib29sZWFuXG4gIGZ1bGxEYXRhOiBEYXRhXG4gIGlkOiBudW1iZXIgfCBzdHJpbmdcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZpZWxkIHNjaGVtYSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHN0YXRlXG4gICAqL1xuICBpbmNsdWRlU2NoZW1hPzogYm9vbGVhblxuICBsb2NhbGU6IHN0cmluZ1xuICAvKipcbiAgICogV2hldGhlciB0byBvbWl0IHBhcmVudCBmaWVsZHMgaW4gdGhlIHN0YXRlLiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgb21pdFBhcmVudHM/OiBib29sZWFuXG4gIG9wZXJhdGlvbjogJ2NyZWF0ZScgfCAndXBkYXRlJ1xuICBwYXNzZXNDb25kaXRpb246IGJvb2xlYW5cbiAgcGF0aDogc3RyaW5nXG4gIHByZWZlcmVuY2VzOiB7XG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93blxuICB9XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNraXAgY2hlY2tpbmcgdGhlIGZpZWxkJ3MgY29uZGl0aW9uLiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2tpcENvbmRpdGlvbkNoZWNrcz86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2tpcCB2YWxpZGF0aW5nIHRoZSBmaWVsZC4gQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNraXBWYWxpZGF0aW9uPzogYm9vbGVhblxuICBzdGF0ZTogRmllbGRzXG4gIHQ6IFRGdW5jdGlvblxuICB1c2VyOiBVc2VyXG59XG5cbi8qKlxuICogRmxhdHRlbnMgdGhlIGZpZWxkcyBzY2hlbWEgYW5kIGZpZWxkcyBkYXRhLlxuICogVGhlIG91dHB1dCBpcyB0aGUgZmllbGQgcGF0aCAoZS5nLiBhcnJheS4wLm5hbWUpIG1hcHBlZCB0byBhIEZvcm1GaWVsZCBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRGaWVsZFN0YXRlUHJvbWlzZSA9IGFzeW5jIChhcmdzOiBBZGRGaWVsZFN0YXRlUHJvbWlzZUFyZ3MpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIGFueVBhcmVudExvY2FsaXplZCA9IGZhbHNlLFxuICAgIGNvbmZpZyxcbiAgICBkYXRhLFxuICAgIGZpZWxkLFxuICAgIGZpbHRlcixcbiAgICBmb3JjZUZ1bGxWYWx1ZSA9IGZhbHNlLFxuICAgIGZ1bGxEYXRhLFxuICAgIGluY2x1ZGVTY2hlbWEgPSBmYWxzZSxcbiAgICBsb2NhbGUsXG4gICAgb21pdFBhcmVudHMgPSBmYWxzZSxcbiAgICBvcGVyYXRpb24sXG4gICAgcGFzc2VzQ29uZGl0aW9uLFxuICAgIHBhdGgsXG4gICAgcHJlZmVyZW5jZXMsXG4gICAgc2tpcENvbmRpdGlvbkNoZWNrcyA9IGZhbHNlLFxuICAgIHNraXBWYWxpZGF0aW9uID0gZmFsc2UsXG4gICAgc3RhdGUsXG4gICAgdCxcbiAgICB1c2VyLFxuICB9ID0gYXJnc1xuICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICBjb25zdCBmaWVsZFN0YXRlOiBGb3JtRmllbGQgPSB7XG4gICAgICBjb25kaXRpb246IGZpZWxkLmFkbWluPy5jb25kaXRpb24sXG4gICAgICBmaWVsZFNjaGVtYTogaW5jbHVkZVNjaGVtYSA/IGZpZWxkIDogdW5kZWZpbmVkLFxuICAgICAgaW5pdGlhbFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBwYXNzZXNDb25kaXRpb24sXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRlOiBmaWVsZC52YWxpZGF0ZSxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVXaXRoRGVmYXVsdCA9IGF3YWl0IGdldFZhbHVlV2l0aERlZmF1bHQoe1xuICAgICAgZGVmYXVsdFZhbHVlOiBmaWVsZC5kZWZhdWx0VmFsdWUsXG4gICAgICBsb2NhbGUsXG4gICAgICB1c2VyLFxuICAgICAgdmFsdWU6IGRhdGE/LltmaWVsZC5uYW1lXSxcbiAgICB9KVxuXG4gICAgaWYgKGRhdGE/LltmaWVsZC5uYW1lXSkge1xuICAgICAgZGF0YVtmaWVsZC5uYW1lXSA9IHZhbHVlV2l0aERlZmF1bHRcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGlvblJlc3VsdDogc3RyaW5nIHwgdHJ1ZSA9IHRydWVcblxuICAgIGlmICh0eXBlb2YgZmllbGRTdGF0ZS52YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCBmaWVsZFN0YXRlLnZhbGlkYXRlKGRhdGE/LltmaWVsZC5uYW1lXSwge1xuICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZGF0YTogZnVsbERhdGEsXG4gICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgc2libGluZ0RhdGE6IGRhdGEsXG4gICAgICAgIHQsXG4gICAgICAgIHVzZXIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvblJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZpZWxkU3RhdGUuZXJyb3JNZXNzYWdlID0gdmFsaWRhdGlvblJlc3VsdFxuICAgICAgZmllbGRTdGF0ZS52YWxpZCA9IGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkU3RhdGUudmFsaWQgPSB0cnVlXG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgICAgY29uc3QgYXJyYXlWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWVXaXRoRGVmYXVsdCkgPyB2YWx1ZVdpdGhEZWZhdWx0IDogW11cbiAgICAgICAgY29uc3QgeyBwcm9taXNlcywgcm93TWV0YWRhdGEgfSA9IGFycmF5VmFsdWUucmVkdWNlKFxuICAgICAgICAgIChhY2MsIHJvdywgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93UGF0aCA9IGAke3BhdGh9JHtmaWVsZC5uYW1lfS4ke2l9LmBcbiAgICAgICAgICAgIHJvdy5pZCA9IHJvdz8uaWQgfHwgbmV3IE9iamVjdElEKCkudG9IZXhTdHJpbmcoKVxuXG4gICAgICAgICAgICBpZiAoIW9taXRQYXJlbnRzICYmICghZmlsdGVyIHx8IGZpbHRlcihhcmdzKSkpIHtcbiAgICAgICAgICAgICAgc3RhdGVbYCR7cm93UGF0aH1pZGBdID0ge1xuICAgICAgICAgICAgICAgIGZpZWxkU2NoZW1hOiBpbmNsdWRlU2NoZW1hXG4gICAgICAgICAgICAgICAgICA/IGZpZWxkLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gJ25hbWUnIGluIGZpZWxkICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJvdy5pZCxcbiAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcm93LmlkLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFjYy5wcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICBpdGVyYXRlRmllbGRzKHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBhbnlQYXJlbnRMb2NhbGl6ZWQ6IGZpZWxkLmxvY2FsaXplZCB8fCBhbnlQYXJlbnRMb2NhbGl6ZWQsXG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHJvdyxcbiAgICAgICAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICAgICAgICBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgZm9yY2VGdWxsVmFsdWUsXG4gICAgICAgICAgICAgICAgZnVsbERhdGEsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNjaGVtYSxcbiAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgb21pdFBhcmVudHMsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgICAgICAgIHBhcmVudFBhc3Nlc0NvbmRpdGlvbjogcGFzc2VzQ29uZGl0aW9uLFxuICAgICAgICAgICAgICAgIHBhdGg6IHJvd1BhdGgsXG4gICAgICAgICAgICAgICAgcHJlZmVyZW5jZXMsXG4gICAgICAgICAgICAgICAgc2tpcENvbmRpdGlvbkNoZWNrcyxcbiAgICAgICAgICAgICAgICBza2lwVmFsaWRhdGlvbixcbiAgICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBjb25zdCBjb2xsYXBzZWRSb3dJRHMgPSBwcmVmZXJlbmNlcz8uZmllbGRzPy5bYCR7cGF0aH0ke2ZpZWxkLm5hbWV9YF0/LmNvbGxhcHNlZFxuXG4gICAgICAgICAgICBhY2Mucm93TWV0YWRhdGEucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiByb3cuaWQsXG4gICAgICAgICAgICAgIGNoaWxkRXJyb3JQYXRoczogbmV3IFNldCgpLFxuICAgICAgICAgICAgICBjb2xsYXBzZWQ6XG4gICAgICAgICAgICAgICAgY29sbGFwc2VkUm93SURzID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgID8gZmllbGQuYWRtaW4uaW5pdENvbGxhcHNlZFxuICAgICAgICAgICAgICAgICAgOiBjb2xsYXBzZWRSb3dJRHMuaW5jbHVkZXMocm93LmlkKSxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb21pc2VzOiBbXSxcbiAgICAgICAgICAgIHJvd01ldGFkYXRhOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICApXG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG5cbiAgICAgICAgLy8gQWRkIHZhbHVlcyB0byBmaWVsZCBzdGF0ZVxuICAgICAgICBpZiAodmFsdWVXaXRoRGVmYXVsdCA9PT0gbnVsbCkge1xuICAgICAgICAgIGZpZWxkU3RhdGUudmFsdWUgPSBudWxsXG4gICAgICAgICAgZmllbGRTdGF0ZS5pbml0aWFsVmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRTdGF0ZS52YWx1ZSA9IGZvcmNlRnVsbFZhbHVlID8gYXJyYXlWYWx1ZSA6IGFycmF5VmFsdWUubGVuZ3RoXG4gICAgICAgICAgZmllbGRTdGF0ZS5pbml0aWFsVmFsdWUgPSBmb3JjZUZ1bGxWYWx1ZSA/IGFycmF5VmFsdWUgOiBhcnJheVZhbHVlLmxlbmd0aFxuXG4gICAgICAgICAgaWYgKGFycmF5VmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZmllbGRTdGF0ZS5kaXNhYmxlRm9ybURhdGEgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZmllbGRTdGF0ZS5yb3dzID0gcm93TWV0YWRhdGFcblxuICAgICAgICAvLyBBZGQgZmllbGQgdG8gc3RhdGVcbiAgICAgICAgaWYgKCFvbWl0UGFyZW50cyAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoYXJncykpKSB7XG4gICAgICAgICAgc3RhdGVbYCR7cGF0aH0ke2ZpZWxkLm5hbWV9YF0gPSBmaWVsZFN0YXRlXG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIGNvbnN0IGJsb2Nrc1ZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZVdpdGhEZWZhdWx0KSA/IHZhbHVlV2l0aERlZmF1bHQgOiBbXVxuXG4gICAgICAgIGNvbnN0IHsgcHJvbWlzZXMsIHJvd01ldGFkYXRhIH0gPSBibG9ja3NWYWx1ZS5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgcm93LCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBibG9jayA9IGZpZWxkLmJsb2Nrcy5maW5kKChibG9ja1R5cGUpID0+IGJsb2NrVHlwZS5zbHVnID09PSByb3cuYmxvY2tUeXBlKVxuICAgICAgICAgICAgY29uc3Qgcm93UGF0aCA9IGAke3BhdGh9JHtmaWVsZC5uYW1lfS4ke2l9LmBcblxuICAgICAgICAgICAgaWYgKGJsb2NrKSB7XG4gICAgICAgICAgICAgIHJvdy5pZCA9IHJvdz8uaWQgfHwgbmV3IE9iamVjdElEKCkudG9IZXhTdHJpbmcoKVxuXG4gICAgICAgICAgICAgIGlmICghb21pdFBhcmVudHMgJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKGFyZ3MpKSkge1xuICAgICAgICAgICAgICAgIHN0YXRlW2Ake3Jvd1BhdGh9aWRgXSA9IHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkU2NoZW1hOiBpbmNsdWRlU2NoZW1hXG4gICAgICAgICAgICAgICAgICAgID8gYmxvY2suZmllbGRzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmxvY2tGaWVsZCkgPT4gJ25hbWUnIGluIGJsb2NrRmllbGQgJiYgYmxvY2tGaWVsZC5uYW1lID09PSAnaWQnLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJvdy5pZCxcbiAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHJvdy5pZCxcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdGF0ZVtgJHtyb3dQYXRofWJsb2NrVHlwZWBdID0ge1xuICAgICAgICAgICAgICAgICAgZmllbGRTY2hlbWE6IGluY2x1ZGVTY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgPyBibG9jay5maWVsZHMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIChibG9ja0ZpZWxkKSA9PiAnbmFtZScgaW4gYmxvY2tGaWVsZCAmJiBibG9ja0ZpZWxkLm5hbWUgPT09ICdibG9ja1R5cGUnLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHJvdy5ibG9ja1R5cGUsXG4gICAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiByb3cuYmxvY2tUeXBlLFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0YXRlW2Ake3Jvd1BhdGh9YmxvY2tOYW1lYF0gPSB7XG4gICAgICAgICAgICAgICAgICBmaWVsZFNjaGVtYTogaW5jbHVkZVNjaGVtYVxuICAgICAgICAgICAgICAgICAgICA/IGJsb2NrLmZpZWxkcy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsb2NrRmllbGQpID0+ICduYW1lJyBpbiBibG9ja0ZpZWxkICYmIGJsb2NrRmllbGQubmFtZSA9PT0gJ2Jsb2NrTmFtZScsXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogcm93LmJsb2NrTmFtZSxcbiAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHJvdy5ibG9ja05hbWUsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYWNjLnByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgaXRlcmF0ZUZpZWxkcyh7XG4gICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgIGFueVBhcmVudExvY2FsaXplZDogZmllbGQubG9jYWxpemVkIHx8IGFueVBhcmVudExvY2FsaXplZCxcbiAgICAgICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHJvdyxcbiAgICAgICAgICAgICAgICAgIGZpZWxkczogYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgICAgICAgICAgZm9yY2VGdWxsVmFsdWUsXG4gICAgICAgICAgICAgICAgICBmdWxsRGF0YSxcbiAgICAgICAgICAgICAgICAgIGluY2x1ZGVTY2hlbWEsXG4gICAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgICBvbWl0UGFyZW50cyxcbiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgICAgIHBhcmVudFBhc3Nlc0NvbmRpdGlvbjogcGFzc2VzQ29uZGl0aW9uLFxuICAgICAgICAgICAgICAgICAgcGF0aDogcm93UGF0aCxcbiAgICAgICAgICAgICAgICAgIHByZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgc2tpcENvbmRpdGlvbkNoZWNrcyxcbiAgICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uLFxuICAgICAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGNvbnN0IGNvbGxhcHNlZFJvd0lEcyA9IHByZWZlcmVuY2VzPy5maWVsZHM/LltgJHtwYXRofSR7ZmllbGQubmFtZX1gXT8uY29sbGFwc2VkXG5cbiAgICAgICAgICAgICAgYWNjLnJvd01ldGFkYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiByb3cuaWQsXG4gICAgICAgICAgICAgICAgYmxvY2tUeXBlOiByb3cuYmxvY2tUeXBlLFxuICAgICAgICAgICAgICAgIGNoaWxkRXJyb3JQYXRoczogbmV3IFNldCgpLFxuICAgICAgICAgICAgICAgIGNvbGxhcHNlZDpcbiAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZFJvd0lEcyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gZmllbGQuYWRtaW4uaW5pdENvbGxhcHNlZFxuICAgICAgICAgICAgICAgICAgICA6IGNvbGxhcHNlZFJvd0lEcy5pbmNsdWRlcyhyb3cuaWQpLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm9taXNlczogW10sXG4gICAgICAgICAgICByb3dNZXRhZGF0YTogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuXG4gICAgICAgIC8vIEFkZCB2YWx1ZXMgdG8gZmllbGQgc3RhdGVcbiAgICAgICAgaWYgKHZhbHVlV2l0aERlZmF1bHQgPT09IG51bGwpIHtcbiAgICAgICAgICBmaWVsZFN0YXRlLnZhbHVlID0gbnVsbFxuICAgICAgICAgIGZpZWxkU3RhdGUuaW5pdGlhbFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkU3RhdGUudmFsdWUgPSBmb3JjZUZ1bGxWYWx1ZSA/IGJsb2Nrc1ZhbHVlIDogYmxvY2tzVmFsdWUubGVuZ3RoXG4gICAgICAgICAgZmllbGRTdGF0ZS5pbml0aWFsVmFsdWUgPSBmb3JjZUZ1bGxWYWx1ZSA/IGJsb2Nrc1ZhbHVlIDogYmxvY2tzVmFsdWUubGVuZ3RoXG5cbiAgICAgICAgICBpZiAoYmxvY2tzVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZmllbGRTdGF0ZS5kaXNhYmxlRm9ybURhdGEgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZmllbGRTdGF0ZS5yb3dzID0gcm93TWV0YWRhdGFcblxuICAgICAgICAvLyBBZGQgZmllbGQgdG8gc3RhdGVcbiAgICAgICAgaWYgKCFvbWl0UGFyZW50cyAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoYXJncykpKSB7XG4gICAgICAgICAgc3RhdGVbYCR7cGF0aH0ke2ZpZWxkLm5hbWV9YF0gPSBmaWVsZFN0YXRlXG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdncm91cCc6IHtcbiAgICAgICAgYXdhaXQgaXRlcmF0ZUZpZWxkcyh7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgYW55UGFyZW50TG9jYWxpemVkOiBmaWVsZC5sb2NhbGl6ZWQgfHwgYW55UGFyZW50TG9jYWxpemVkLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBkYXRhOiBkYXRhPy5bZmllbGQubmFtZV0gfHwge30sXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgIGZvcmNlRnVsbFZhbHVlLFxuICAgICAgICAgIGZ1bGxEYXRhLFxuICAgICAgICAgIGluY2x1ZGVTY2hlbWEsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIG9taXRQYXJlbnRzLFxuICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICBwYXJlbnRQYXNzZXNDb25kaXRpb246IHBhc3Nlc0NvbmRpdGlvbixcbiAgICAgICAgICBwYXRoOiBgJHtwYXRofSR7ZmllbGQubmFtZX0uYCxcbiAgICAgICAgICBwcmVmZXJlbmNlcyxcbiAgICAgICAgICBza2lwQ29uZGl0aW9uQ2hlY2tzLFxuICAgICAgICAgIHNraXBWYWxpZGF0aW9uLFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIHQsXG4gICAgICAgICAgdXNlcixcbiAgICAgICAgfSlcblxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyZWxhdGlvbnNoaXAnOiB7XG4gICAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgY29uc3QgcmVsYXRpb25zaGlwVmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlV2l0aERlZmF1bHQpXG4gICAgICAgICAgICA/IHZhbHVlV2l0aERlZmF1bHQubWFwKChyZWxhdGlvbnNoaXApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25UbzogcmVsYXRpb25zaGlwLnJlbGF0aW9uVG8sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcC52YWx1ZSAmJiB0eXBlb2YgcmVsYXRpb25zaGlwLnZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgPyByZWxhdGlvbnNoaXAudmFsdWU/LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJlbGF0aW9uc2hpcC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWxhdGlvbnNoaXAgPT09ICdvYmplY3QnICYmIHJlbGF0aW9uc2hpcCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGF0aW9uc2hpcC5pZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVsYXRpb25zaGlwXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICAgICAgZmllbGRTdGF0ZS52YWx1ZSA9IHJlbGF0aW9uc2hpcFZhbHVlXG4gICAgICAgICAgZmllbGRTdGF0ZS5pbml0aWFsVmFsdWUgPSByZWxhdGlvbnNoaXBWYWx1ZVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQucmVsYXRpb25UbykpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB2YWx1ZVdpdGhEZWZhdWx0ICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWVXaXRoRGVmYXVsdCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICdyZWxhdGlvblRvJyBpbiB2YWx1ZVdpdGhEZWZhdWx0ICYmXG4gICAgICAgICAgICAndmFsdWUnIGluIHZhbHVlV2l0aERlZmF1bHRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlV2l0aERlZmF1bHQ/LnZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICB2YWx1ZVdpdGhEZWZhdWx0Py52YWx1ZSAmJlxuICAgICAgICAgICAgICAnaWQnIGluIHZhbHVlV2l0aERlZmF1bHQudmFsdWVcbiAgICAgICAgICAgICAgICA/IHZhbHVlV2l0aERlZmF1bHQudmFsdWUuaWRcbiAgICAgICAgICAgICAgICA6IHZhbHVlV2l0aERlZmF1bHQudmFsdWVcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcFZhbHVlID0ge1xuICAgICAgICAgICAgICByZWxhdGlvblRvOiB2YWx1ZVdpdGhEZWZhdWx0Py5yZWxhdGlvblRvLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkU3RhdGUudmFsdWUgPSByZWxhdGlvbnNoaXBWYWx1ZVxuICAgICAgICAgICAgZmllbGRTdGF0ZS5pbml0aWFsVmFsdWUgPSByZWxhdGlvbnNoaXBWYWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCByZWxhdGlvbnNoaXBWYWx1ZSA9XG4gICAgICAgICAgICB2YWx1ZVdpdGhEZWZhdWx0ICYmIHR5cGVvZiB2YWx1ZVdpdGhEZWZhdWx0ID09PSAnb2JqZWN0JyAmJiAnaWQnIGluIHZhbHVlV2l0aERlZmF1bHRcbiAgICAgICAgICAgICAgPyB2YWx1ZVdpdGhEZWZhdWx0LmlkXG4gICAgICAgICAgICAgIDogdmFsdWVXaXRoRGVmYXVsdFxuICAgICAgICAgIGZpZWxkU3RhdGUudmFsdWUgPSByZWxhdGlvbnNoaXBWYWx1ZVxuICAgICAgICAgIGZpZWxkU3RhdGUuaW5pdGlhbFZhbHVlID0gcmVsYXRpb25zaGlwVmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihhcmdzKSkge1xuICAgICAgICAgIHN0YXRlW2Ake3BhdGh9JHtmaWVsZC5uYW1lfWBdID0gZmllbGRTdGF0ZVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAndXBsb2FkJzoge1xuICAgICAgICBjb25zdCByZWxhdGlvbnNoaXBWYWx1ZSA9XG4gICAgICAgICAgdmFsdWVXaXRoRGVmYXVsdCAmJiB0eXBlb2YgdmFsdWVXaXRoRGVmYXVsdCA9PT0gJ29iamVjdCcgJiYgJ2lkJyBpbiB2YWx1ZVdpdGhEZWZhdWx0XG4gICAgICAgICAgICA/IHZhbHVlV2l0aERlZmF1bHQuaWRcbiAgICAgICAgICAgIDogdmFsdWVXaXRoRGVmYXVsdFxuICAgICAgICBmaWVsZFN0YXRlLnZhbHVlID0gcmVsYXRpb25zaGlwVmFsdWVcbiAgICAgICAgZmllbGRTdGF0ZS5pbml0aWFsVmFsdWUgPSByZWxhdGlvbnNoaXBWYWx1ZVxuXG4gICAgICAgIGlmICghZmlsdGVyIHx8IGZpbHRlcihhcmdzKSkge1xuICAgICAgICAgIHN0YXRlW2Ake3BhdGh9JHtmaWVsZC5uYW1lfWBdID0gZmllbGRTdGF0ZVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBmaWVsZFN0YXRlLnZhbHVlID0gdmFsdWVXaXRoRGVmYXVsdFxuICAgICAgICBmaWVsZFN0YXRlLmluaXRpYWxWYWx1ZSA9IHZhbHVlV2l0aERlZmF1bHRcblxuICAgICAgICAvLyBBZGQgZmllbGQgdG8gc3RhdGVcbiAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGFyZ3MpKSB7XG4gICAgICAgICAgc3RhdGVbYCR7cGF0aH0ke2ZpZWxkLm5hbWV9YF0gPSBmaWVsZFN0YXRlXG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChmaWVsZEhhc1N1YkZpZWxkcyhmaWVsZCkpIHtcbiAgICAvLyBIYW5kbGUgZmllbGQgdHlwZXMgdGhhdCBkbyBub3QgdXNlIG5hbWVzIChyb3csIGV0YylcbiAgICBhd2FpdCBpdGVyYXRlRmllbGRzKHtcbiAgICAgIGlkLFxuICAgICAgYW55UGFyZW50TG9jYWxpemVkOiBmaWVsZC5sb2NhbGl6ZWQgfHwgYW55UGFyZW50TG9jYWxpemVkLFxuICAgICAgY29uZmlnLFxuICAgICAgZGF0YSxcbiAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgZmlsdGVyLFxuICAgICAgZm9yY2VGdWxsVmFsdWUsXG4gICAgICBmdWxsRGF0YSxcbiAgICAgIGluY2x1ZGVTY2hlbWEsXG4gICAgICBsb2NhbGUsXG4gICAgICBvbWl0UGFyZW50cyxcbiAgICAgIG9wZXJhdGlvbixcbiAgICAgIHBhcmVudFBhc3Nlc0NvbmRpdGlvbjogcGFzc2VzQ29uZGl0aW9uLFxuICAgICAgcGF0aCxcbiAgICAgIHByZWZlcmVuY2VzLFxuICAgICAgc2tpcENvbmRpdGlvbkNoZWNrcyxcbiAgICAgIHNraXBWYWxpZGF0aW9uLFxuICAgICAgc3RhdGUsXG4gICAgICB0LFxuICAgICAgdXNlcixcbiAgICB9KVxuICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICd0YWJzJykge1xuICAgIGNvbnN0IHByb21pc2VzID0gZmllbGQudGFicy5tYXAoKHRhYikgPT5cbiAgICAgIGl0ZXJhdGVGaWVsZHMoe1xuICAgICAgICBpZCxcbiAgICAgICAgYW55UGFyZW50TG9jYWxpemVkOiB0YWIubG9jYWxpemVkIHx8IGFueVBhcmVudExvY2FsaXplZCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkYXRhOiB0YWJIYXNOYW1lKHRhYikgPyBkYXRhPy5bdGFiLm5hbWVdIDogZGF0YSxcbiAgICAgICAgZmllbGRzOiB0YWIuZmllbGRzLFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIGZvcmNlRnVsbFZhbHVlLFxuICAgICAgICBmdWxsRGF0YSxcbiAgICAgICAgaW5jbHVkZVNjaGVtYSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBvbWl0UGFyZW50cyxcbiAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICBwYXJlbnRQYXNzZXNDb25kaXRpb246IHBhc3Nlc0NvbmRpdGlvbixcbiAgICAgICAgcGF0aDogdGFiSGFzTmFtZSh0YWIpID8gYCR7cGF0aH0ke3RhYi5uYW1lfS5gIDogcGF0aCxcbiAgICAgICAgcHJlZmVyZW5jZXMsXG4gICAgICAgIHNraXBDb25kaXRpb25DaGVja3MsXG4gICAgICAgIHNraXBWYWxpZGF0aW9uLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgdCxcbiAgICAgICAgdXNlcixcbiAgICAgIH0pLFxuICAgIClcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICB9XG59XG4iXSwibmFtZXMiOlsiYWRkRmllbGRTdGF0ZVByb21pc2UiLCJhcmdzIiwiaWQiLCJhbnlQYXJlbnRMb2NhbGl6ZWQiLCJjb25maWciLCJkYXRhIiwiZmllbGQiLCJmaWx0ZXIiLCJmb3JjZUZ1bGxWYWx1ZSIsImZ1bGxEYXRhIiwiaW5jbHVkZVNjaGVtYSIsImxvY2FsZSIsIm9taXRQYXJlbnRzIiwib3BlcmF0aW9uIiwicGFzc2VzQ29uZGl0aW9uIiwicGF0aCIsInByZWZlcmVuY2VzIiwic2tpcENvbmRpdGlvbkNoZWNrcyIsInNraXBWYWxpZGF0aW9uIiwic3RhdGUiLCJ0IiwidXNlciIsImZpZWxkQWZmZWN0c0RhdGEiLCJmaWVsZFN0YXRlIiwiY29uZGl0aW9uIiwiYWRtaW4iLCJmaWVsZFNjaGVtYSIsInVuZGVmaW5lZCIsImluaXRpYWxWYWx1ZSIsInZhbGlkIiwidmFsaWRhdGUiLCJ2YWx1ZSIsInZhbHVlV2l0aERlZmF1bHQiLCJnZXRWYWx1ZVdpdGhEZWZhdWx0IiwiZGVmYXVsdFZhbHVlIiwibmFtZSIsInZhbGlkYXRpb25SZXN1bHQiLCJzaWJsaW5nRGF0YSIsImVycm9yTWVzc2FnZSIsInR5cGUiLCJhcnJheVZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwicHJvbWlzZXMiLCJyb3dNZXRhZGF0YSIsInJlZHVjZSIsImFjYyIsInJvdyIsImkiLCJyb3dQYXRoIiwiT2JqZWN0SUQiLCJ0b0hleFN0cmluZyIsImZpZWxkcyIsImZpbmQiLCJwdXNoIiwiaXRlcmF0ZUZpZWxkcyIsImxvY2FsaXplZCIsInBhcmVudFBhc3Nlc0NvbmRpdGlvbiIsImNvbGxhcHNlZFJvd0lEcyIsImNvbGxhcHNlZCIsImNoaWxkRXJyb3JQYXRocyIsIlNldCIsImluaXRDb2xsYXBzZWQiLCJpbmNsdWRlcyIsIlByb21pc2UiLCJhbGwiLCJsZW5ndGgiLCJkaXNhYmxlRm9ybURhdGEiLCJyb3dzIiwiYmxvY2tzVmFsdWUiLCJibG9jayIsImJsb2NrcyIsImJsb2NrVHlwZSIsInNsdWciLCJibG9ja0ZpZWxkIiwiYmxvY2tOYW1lIiwiaGFzTWFueSIsInJlbGF0aW9uc2hpcFZhbHVlIiwibWFwIiwicmVsYXRpb25zaGlwIiwicmVsYXRpb25UbyIsImZpZWxkSGFzU3ViRmllbGRzIiwidGFicyIsInRhYiIsInRhYkhhc05hbWUiXSwibWFwcGluZ3MiOiJBQUFBLG9DQUFvQzs7OzsrQkFnRXZCQTs7O2VBQUFBOzs7cUVBN0RRO3VCQU8yQzt3RUFDaEM7K0JBQ0Y7Ozs7OztBQW9EdkIsTUFBTUEsdUJBQXVCLE9BQU9DO0lBQ3pDLE1BQU0sRUFDSkMsRUFBRSxFQUNGQyxxQkFBcUIsS0FBSyxFQUMxQkMsTUFBTSxFQUNOQyxJQUFJLEVBQ0pDLEtBQUssRUFDTEMsTUFBTSxFQUNOQyxpQkFBaUIsS0FBSyxFQUN0QkMsUUFBUSxFQUNSQyxnQkFBZ0IsS0FBSyxFQUNyQkMsTUFBTSxFQUNOQyxjQUFjLEtBQUssRUFDbkJDLFNBQVMsRUFDVEMsZUFBZSxFQUNmQyxJQUFJLEVBQ0pDLFdBQVcsRUFDWEMsc0JBQXNCLEtBQUssRUFDM0JDLGlCQUFpQixLQUFLLEVBQ3RCQyxLQUFLLEVBQ0xDLENBQUMsRUFDREMsSUFBSSxFQUNMLEdBQUdwQjtJQUNKLElBQUlxQixJQUFBQSx1QkFBZ0IsRUFBQ2hCLFFBQVE7UUFDM0IsTUFBTWlCLGFBQXdCO1lBQzVCQyxXQUFXbEIsTUFBTW1CLEtBQUssRUFBRUQ7WUFDeEJFLGFBQWFoQixnQkFBZ0JKLFFBQVFxQjtZQUNyQ0MsY0FBY0Q7WUFDZGI7WUFDQWUsT0FBTztZQUNQQyxVQUFVeEIsTUFBTXdCLFFBQVE7WUFDeEJDLE9BQU9KO1FBQ1Q7UUFFQSxNQUFNSyxtQkFBbUIsTUFBTUMsSUFBQUEsd0JBQW1CLEVBQUM7WUFDakRDLGNBQWM1QixNQUFNNEIsWUFBWTtZQUNoQ3ZCO1lBQ0FVO1lBQ0FVLE9BQU8xQixNQUFN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
@@ -3,23 +3,64 @@ import type { User } from '../../../../../auth';
3
3
  import type { SanitizedConfig } from '../../../../../config/types';
4
4
  import type { Field as FieldSchema } from '../../../../../fields/config/types';
5
5
  import type { Data, Fields } from '../types';
6
+ import type { AddFieldStatePromiseArgs } from './addFieldStatePromise';
6
7
  type Args = {
7
- config: SanitizedConfig;
8
+ /**
9
+ * if any parents is localized, then the field is localized. @default false
10
+ */
11
+ anyParentLocalized?: boolean;
12
+ /**
13
+ * config is only needed for validation
14
+ */
15
+ config?: SanitizedConfig;
8
16
  data: Data;
9
17
  fields: FieldSchema[];
18
+ filter?: (args: AddFieldStatePromiseArgs) => boolean;
19
+ /**
20
+ * Force the value of fields like arrays or blocks to be the full value instead of the length @default false
21
+ */
22
+ forceFullValue?: boolean;
10
23
  fullData: Data;
11
- id: number | string;
24
+ id?: number | string;
25
+ /**
26
+ * Whether the field schema should be included in the state. @default false
27
+ */
28
+ includeSchema?: boolean;
29
+ /**
30
+ * operation is only needed for checking field conditions
31
+ */
12
32
  locale: string;
33
+ /**
34
+ * Whether to omit parent fields in the state. @default false
35
+ */
36
+ omitParents?: boolean;
37
+ /**
38
+ * operation is only needed for validation
39
+ */
13
40
  operation: 'create' | 'update';
14
- parentPassesCondition: boolean;
15
- path: string;
16
- preferences: {
41
+ parentPassesCondition?: boolean;
42
+ /**
43
+ * The initial path of the field. @default ''
44
+ */
45
+ path?: string;
46
+ preferences?: {
17
47
  [key: string]: unknown;
18
48
  };
19
- state: Fields;
49
+ /**
50
+ * Whether to skip checking the field's condition. @default false
51
+ */
52
+ skipConditionChecks?: boolean;
53
+ /**
54
+ * Whether to skip validating the field. @default false
55
+ */
56
+ skipValidation?: boolean;
57
+ state?: Fields;
20
58
  t: TFunction;
21
59
  user: User;
22
60
  };
23
- export declare const iterateFields: ({ id, config, data, fields, fullData, locale, operation, parentPassesCondition, path, preferences, state, t, user, }: Args) => Promise<void>;
61
+ /**
62
+ * Flattens the fields schema and fields data
63
+ */
64
+ export declare const iterateFields: ({ id, anyParentLocalized, config, data, fields, filter, forceFullValue, fullData, includeSchema, locale, omitParents, operation, parentPassesCondition, path, preferences, skipConditionChecks, skipValidation, state, t, user, }: Args) => Promise<void>;
24
65
  export {};
25
66
  //# sourceMappingURL=iterateFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"iterateFields.d.ts","sourceRoot":"","sources":["../../../../../../src/admin/components/forms/Form/buildStateFromSchema/iterateFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAC9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAK5C,KAAK,IAAI,GAAG;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,QAAQ,EAAE,IAAI,CAAA;IACd,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,qBAAqB,EAAE,OAAO,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE;QACX,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD,KAAK,EAAE,MAAM,CAAA;IACb,CAAC,EAAE,SAAS,CAAA;IACZ,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAED,eAAO,MAAM,aAAa,yHAcvB,IAAI,KAAG,QAAQ,IAAI,CA+BrB,CAAA"}
1
+ {"version":3,"file":"iterateFields.d.ts","sourceRoot":"","sources":["../../../../../../src/admin/components/forms/Form/buildStateFromSchema/iterateFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAExC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAC9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AAKtE,KAAK,IAAI,GAAG;IACV;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,OAAO,CAAA;IACpD;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,IAAI,CAAA;IACd,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE;QACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAA;IACD;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,CAAC,EAAE,SAAS,CAAA;IACZ,IAAI,EAAE,IAAI,CAAA;CACX,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,sOAqBvB,IAAI,KAAG,QAAQ,IAAI,CAwCrB,CAAA"}
@@ -10,25 +10,34 @@ Object.defineProperty(exports, "iterateFields", {
10
10
  });
11
11
  const _types = require("../../../../../fields/config/types");
12
12
  const _addFieldStatePromise = require("./addFieldStatePromise");
13
- const iterateFields = async ({ id, config, data, fields, fullData, locale, operation, parentPassesCondition, path = '', preferences, state, t, user })=>{
13
+ const iterateFields = async ({ id, anyParentLocalized = false, config, data, fields, filter, forceFullValue = false, fullData, includeSchema = false, locale, omitParents = false, operation, parentPassesCondition = true, path = '', preferences, skipConditionChecks = false, skipValidation = false, state = {}, t, user })=>{
14
14
  const promises = [];
15
15
  fields.forEach((field)=>{
16
- const initialData = data;
17
16
  if (!(0, _types.fieldIsPresentationalOnly)(field) && !field?.admin?.disabled) {
18
- const passesCondition = Boolean((field?.admin?.condition ? Boolean(field.admin.condition(fullData || {}, initialData || {}, {
19
- user
20
- })) : true) && parentPassesCondition);
17
+ let passesCondition = true;
18
+ if (!skipConditionChecks) {
19
+ passesCondition = Boolean((field?.admin?.condition ? Boolean(field.admin.condition(fullData || {}, data || {}, {
20
+ user
21
+ })) : true) && parentPassesCondition);
22
+ }
21
23
  promises.push((0, _addFieldStatePromise.addFieldStatePromise)({
22
24
  id,
25
+ anyParentLocalized,
23
26
  config,
24
27
  data,
25
28
  field,
29
+ filter,
30
+ forceFullValue,
26
31
  fullData,
32
+ includeSchema,
27
33
  locale,
34
+ omitParents,
28
35
  operation,
29
36
  passesCondition,
30
37
  path,
31
38
  preferences,
39
+ skipConditionChecks,
40
+ skipValidation,
32
41
  state,
33
42
  t,
34
43
  user
@@ -38,4 +47,4 @@ const iterateFields = async ({ id, config, data, fields, fullData, locale, opera
38
47
  await Promise.all(promises);
39
48
  };
40
49
 
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL0Zvcm0vYnVpbGRTdGF0ZUZyb21TY2hlbWEvaXRlcmF0ZUZpZWxkcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRGdW5jdGlvbiB9IGZyb20gJ2kxOG5leHQnXG5cbmltcG9ydCB0eXBlIHsgVXNlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2F1dGgnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgRmllbGQgYXMgRmllbGRTY2hlbWEgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXRhLCBGaWVsZHMgfSBmcm9tICcuLi90eXBlcydcblxuaW1wb3J0IHsgZmllbGRJc1ByZXNlbnRhdGlvbmFsT25seSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5pbXBvcnQgeyBhZGRGaWVsZFN0YXRlUHJvbWlzZSB9IGZyb20gJy4vYWRkRmllbGRTdGF0ZVByb21pc2UnXG5cbnR5cGUgQXJncyA9IHtcbiAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWdcbiAgZGF0YTogRGF0YVxuICBmaWVsZHM6IEZpZWxkU2NoZW1hW11cbiAgZnVsbERhdGE6IERhdGFcbiAgaWQ6IG51bWJlciB8IHN0cmluZ1xuICBsb2NhbGU6IHN0cmluZ1xuICBvcGVyYXRpb246ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgcGFyZW50UGFzc2VzQ29uZGl0aW9uOiBib29sZWFuXG4gIHBhdGg6IHN0cmluZ1xuICBwcmVmZXJlbmNlczoge1xuICAgIFtrZXk6IHN0cmluZ106IHVua25vd25cbiAgfVxuICBzdGF0ZTogRmllbGRzXG4gIHQ6IFRGdW5jdGlvblxuICB1c2VyOiBVc2VyXG59XG5cbmV4cG9ydCBjb25zdCBpdGVyYXRlRmllbGRzID0gYXN5bmMgKHtcbiAgaWQsXG4gIGNvbmZpZyxcbiAgZGF0YSxcbiAgZmllbGRzLFxuICBmdWxsRGF0YSxcbiAgbG9jYWxlLFxuICBvcGVyYXRpb24sXG4gIHBhcmVudFBhc3Nlc0NvbmRpdGlvbixcbiAgcGF0aCA9ICcnLFxuICBwcmVmZXJlbmNlcyxcbiAgc3RhdGUsXG4gIHQsXG4gIHVzZXIsXG59OiBBcmdzKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHByb21pc2VzID0gW11cbiAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgY29uc3QgaW5pdGlhbERhdGEgPSBkYXRhXG4gICAgaWYgKCFmaWVsZElzUHJlc2VudGF0aW9uYWxPbmx5KGZpZWxkKSAmJiAhZmllbGQ/LmFkbWluPy5kaXNhYmxlZCkge1xuICAgICAgY29uc3QgcGFzc2VzQ29uZGl0aW9uID0gQm9vbGVhbihcbiAgICAgICAgKGZpZWxkPy5hZG1pbj8uY29uZGl0aW9uXG4gICAgICAgICAgPyBCb29sZWFuKGZpZWxkLmFkbWluLmNvbmRpdGlvbihmdWxsRGF0YSB8fCB7fSwgaW5pdGlhbERhdGEgfHwge30sIHsgdXNlciB9KSlcbiAgICAgICAgICA6IHRydWUpICYmIHBhcmVudFBhc3Nlc0NvbmRpdGlvbixcbiAgICAgIClcblxuICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgYWRkRmllbGRTdGF0ZVByb21pc2Uoe1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIGZ1bGxEYXRhLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgICAgcGFzc2VzQ29uZGl0aW9uLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgcHJlZmVyZW5jZXMsXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgdCxcbiAgICAgICAgICB1c2VyLFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICB9XG4gIH0pXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuIl0sIm5hbWVzIjpbIml0ZXJhdGVGaWVsZHMiLCJpZCIsImNvbmZpZyIsImRhdGEiLCJmaWVsZHMiLCJmdWxsRGF0YSIsImxvY2FsZSIsIm9wZXJhdGlvbiIsInBhcmVudFBhc3Nlc0NvbmRpdGlvbiIsInBhdGgiLCJwcmVmZXJlbmNlcyIsInN0YXRlIiwidCIsInVzZXIiLCJwcm9taXNlcyIsImZvckVhY2giLCJmaWVsZCIsImluaXRpYWxEYXRhIiwiZmllbGRJc1ByZXNlbnRhdGlvbmFsT25seSIsImFkbWluIiwiZGlzYWJsZWQiLCJwYXNzZXNDb25kaXRpb24iLCJCb29sZWFuIiwiY29uZGl0aW9uIiwicHVzaCIsImFkZEZpZWxkU3RhdGVQcm9taXNlIiwiUHJvbWlzZSIsImFsbCJdLCJtYXBwaW5ncyI6Ijs7OzsrQkE0QmFBOzs7ZUFBQUE7Ozt1QkFyQjZCO3NDQUNMO0FBb0I5QixNQUFNQSxnQkFBZ0IsT0FBTyxFQUNsQ0MsRUFBRSxFQUNGQyxNQUFNLEVBQ05DLElBQUksRUFDSkMsTUFBTSxFQUNOQyxRQUFRLEVBQ1JDLE1BQU0sRUFDTkMsU0FBUyxFQUNUQyxxQkFBcUIsRUFDckJDLE9BQU8sRUFBRSxFQUNUQyxXQUFXLEVBQ1hDLEtBQUssRUFDTEMsQ0FBQyxFQUNEQyxJQUFJLEVBQ0M7SUFDTCxNQUFNQyxXQUFXLEVBQUU7SUFDbkJWLE9BQU9XLE9BQU8sQ0FBQyxDQUFDQztRQUNkLE1BQU1DLGNBQWNkO1FBQ3BCLElBQUksQ0FBQ2UsSUFBQUEsZ0NBQXlCLEVBQUNGLFVBQVUsQ0FBQ0EsT0FBT0csT0FBT0MsVUFBVTtZQUNoRSxNQUFNQyxrQkFBa0JDLFFBQ3RCLEFBQUNOLENBQUFBLE9BQU9HLE9BQU9JLFlBQ1hELFFBQVFOLE1BQU1HLEtBQUssQ0FBQ0ksU0FBUyxDQUFDbEIsWUFBWSxDQUFDLEdBQUdZLGVBQWUsQ0FBQyxHQUFHO2dCQUFFSjtZQUFLLE1BQ3hFLElBQUcsS0FBTUw7WUFHZk0sU0FBU1UsSUFBSSxDQUNYQyxJQUFBQSwwQ0FBb0IsRUFBQztnQkFDbkJ4QjtnQkFDQUM7Z0JBQ0FDO2dCQUNBYTtnQkFDQVg7Z0JBQ0FDO2dCQUNBQztnQkFDQWM7Z0JBQ0FaO2dCQUNBQztnQkFDQUM7Z0JBQ0FDO2dCQUNBQztZQUNGO1FBRUo7SUFDRjtJQUNBLE1BQU1hLFFBQVFDLEdBQUcsQ0FBQ2I7QUFDcEIifQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL0Zvcm0vYnVpbGRTdGF0ZUZyb21TY2hlbWEvaXRlcmF0ZUZpZWxkcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRGdW5jdGlvbiB9IGZyb20gJ2kxOG5leHQnXG5cbmltcG9ydCB0eXBlIHsgVXNlciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2F1dGgnXG5pbXBvcnQgdHlwZSB7IFNhbml0aXplZENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgRmllbGQgYXMgRmllbGRTY2hlbWEgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9maWVsZHMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXRhLCBGaWVsZHMgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB0eXBlIHsgQWRkRmllbGRTdGF0ZVByb21pc2VBcmdzIH0gZnJvbSAnLi9hZGRGaWVsZFN0YXRlUHJvbWlzZSdcblxuaW1wb3J0IHsgZmllbGRJc1ByZXNlbnRhdGlvbmFsT25seSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5pbXBvcnQgeyBhZGRGaWVsZFN0YXRlUHJvbWlzZSB9IGZyb20gJy4vYWRkRmllbGRTdGF0ZVByb21pc2UnXG5cbnR5cGUgQXJncyA9IHtcbiAgLyoqXG4gICAqIGlmIGFueSBwYXJlbnRzIGlzIGxvY2FsaXplZCwgdGhlbiB0aGUgZmllbGQgaXMgbG9jYWxpemVkLiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYW55UGFyZW50TG9jYWxpemVkPzogYm9vbGVhblxuICAvKipcbiAgICogY29uZmlnIGlzIG9ubHkgbmVlZGVkIGZvciB2YWxpZGF0aW9uXG4gICAqL1xuICBjb25maWc/OiBTYW5pdGl6ZWRDb25maWdcbiAgZGF0YTogRGF0YVxuICBmaWVsZHM6IEZpZWxkU2NoZW1hW11cbiAgZmlsdGVyPzogKGFyZ3M6IEFkZEZpZWxkU3RhdGVQcm9taXNlQXJncykgPT4gYm9vbGVhblxuICAvKipcbiAgICogRm9yY2UgdGhlIHZhbHVlIG9mIGZpZWxkcyBsaWtlIGFycmF5cyBvciBibG9ja3MgdG8gYmUgdGhlIGZ1bGwgdmFsdWUgaW5zdGVhZCBvZiB0aGUgbGVuZ3RoIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb3JjZUZ1bGxWYWx1ZT86IGJvb2xlYW5cbiAgZnVsbERhdGE6IERhdGFcbiAgaWQ/OiBudW1iZXIgfCBzdHJpbmdcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZpZWxkIHNjaGVtYSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHN0YXRlLiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5jbHVkZVNjaGVtYT86IGJvb2xlYW5cblxuICAvKipcbiAgICogb3BlcmF0aW9uIGlzIG9ubHkgbmVlZGVkIGZvciBjaGVja2luZyBmaWVsZCBjb25kaXRpb25zXG4gICAqL1xuICBsb2NhbGU6IHN0cmluZ1xuICAvKipcbiAgICogV2hldGhlciB0byBvbWl0IHBhcmVudCBmaWVsZHMgaW4gdGhlIHN0YXRlLiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgb21pdFBhcmVudHM/OiBib29sZWFuXG4gIC8qKlxuICAgKiBvcGVyYXRpb24gaXMgb25seSBuZWVkZWQgZm9yIHZhbGlkYXRpb25cbiAgICovXG4gIG9wZXJhdGlvbjogJ2NyZWF0ZScgfCAndXBkYXRlJ1xuICBwYXJlbnRQYXNzZXNDb25kaXRpb24/OiBib29sZWFuXG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCBwYXRoIG9mIHRoZSBmaWVsZC4gQGRlZmF1bHQgJydcbiAgICovXG4gIHBhdGg/OiBzdHJpbmdcbiAgcHJlZmVyZW5jZXM/OiB7XG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93blxuICB9XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNraXAgY2hlY2tpbmcgdGhlIGZpZWxkJ3MgY29uZGl0aW9uLiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc2tpcENvbmRpdGlvbkNoZWNrcz86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2tpcCB2YWxpZGF0aW5nIHRoZSBmaWVsZC4gQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNraXBWYWxpZGF0aW9uPzogYm9vbGVhblxuICBzdGF0ZT86IEZpZWxkc1xuICB0OiBURnVuY3Rpb25cbiAgdXNlcjogVXNlclxufVxuXG4vKipcbiAqIEZsYXR0ZW5zIHRoZSBmaWVsZHMgc2NoZW1hIGFuZCBmaWVsZHMgZGF0YVxuICovXG5leHBvcnQgY29uc3QgaXRlcmF0ZUZpZWxkcyA9IGFzeW5jICh7XG4gIGlkLFxuICBhbnlQYXJlbnRMb2NhbGl6ZWQgPSBmYWxzZSxcbiAgY29uZmlnLFxuICBkYXRhLFxuICBmaWVsZHMsXG4gIGZpbHRlcixcbiAgZm9yY2VGdWxsVmFsdWUgPSBmYWxzZSxcbiAgZnVsbERhdGEsXG4gIGluY2x1ZGVTY2hlbWEgPSBmYWxzZSxcbiAgbG9jYWxlLFxuICBvbWl0UGFyZW50cyA9IGZhbHNlLFxuICBvcGVyYXRpb24sXG4gIHBhcmVudFBhc3Nlc0NvbmRpdGlvbiA9IHRydWUsXG4gIHBhdGggPSAnJyxcbiAgcHJlZmVyZW5jZXMsXG4gIHNraXBDb25kaXRpb25DaGVja3MgPSBmYWxzZSxcbiAgc2tpcFZhbGlkYXRpb24gPSBmYWxzZSxcbiAgc3RhdGUgPSB7fSxcbiAgdCxcbiAgdXNlcixcbn06IEFyZ3MpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICBpZiAoIWZpZWxkSXNQcmVzZW50YXRpb25hbE9ubHkoZmllbGQpICYmICFmaWVsZD8uYWRtaW4/LmRpc2FibGVkKSB7XG4gICAgICBsZXQgcGFzc2VzQ29uZGl0aW9uID0gdHJ1ZVxuICAgICAgaWYgKCFza2lwQ29uZGl0aW9uQ2hlY2tzKSB7XG4gICAgICAgIHBhc3Nlc0NvbmRpdGlvbiA9IEJvb2xlYW4oXG4gICAgICAgICAgKGZpZWxkPy5hZG1pbj8uY29uZGl0aW9uXG4gICAgICAgICAgICA/IEJvb2xlYW4oZmllbGQuYWRtaW4uY29uZGl0aW9uKGZ1bGxEYXRhIHx8IHt9LCBkYXRhIHx8IHt9LCB7IHVzZXIgfSkpXG4gICAgICAgICAgICA6IHRydWUpICYmIHBhcmVudFBhc3Nlc0NvbmRpdGlvbixcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICBhZGRGaWVsZFN0YXRlUHJvbWlzZSh7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgYW55UGFyZW50TG9jYWxpemVkLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICBmb3JjZUZ1bGxWYWx1ZSxcbiAgICAgICAgICBmdWxsRGF0YSxcbiAgICAgICAgICBpbmNsdWRlU2NoZW1hLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBvbWl0UGFyZW50cyxcbiAgICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgICAgcGFzc2VzQ29uZGl0aW9uLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgcHJlZmVyZW5jZXMsXG4gICAgICAgICAgc2tpcENvbmRpdGlvbkNoZWNrcyxcbiAgICAgICAgICBza2lwVmFsaWRhdGlvbixcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICB0LFxuICAgICAgICAgIHVzZXIsXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgIH1cbiAgfSlcbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG4iXSwibmFtZXMiOlsiaXRlcmF0ZUZpZWxkcyIsImlkIiwiYW55UGFyZW50TG9jYWxpemVkIiwiY29uZmlnIiwiZGF0YSIsImZpZWxkcyIsImZpbHRlciIsImZvcmNlRnVsbFZhbHVlIiwiZnVsbERhdGEiLCJpbmNsdWRlU2NoZW1hIiwibG9jYWxlIiwib21pdFBhcmVudHMiLCJvcGVyYXRpb24iLCJwYXJlbnRQYXNzZXNDb25kaXRpb24iLCJwYXRoIiwicHJlZmVyZW5jZXMiLCJza2lwQ29uZGl0aW9uQ2hlY2tzIiwic2tpcFZhbGlkYXRpb24iLCJzdGF0ZSIsInQiLCJ1c2VyIiwicHJvbWlzZXMiLCJmb3JFYWNoIiwiZmllbGQiLCJmaWVsZElzUHJlc2VudGF0aW9uYWxPbmx5IiwiYWRtaW4iLCJkaXNhYmxlZCIsInBhc3Nlc0NvbmRpdGlvbiIsIkJvb2xlYW4iLCJjb25kaXRpb24iLCJwdXNoIiwiYWRkRmllbGRTdGF0ZVByb21pc2UiLCJQcm9taXNlIiwiYWxsIl0sIm1hcHBpbmdzIjoiOzs7OytCQXNFYUE7OztlQUFBQTs7O3VCQTlENkI7c0NBQ0w7QUE2RDlCLE1BQU1BLGdCQUFnQixPQUFPLEVBQ2xDQyxFQUFFLEVBQ0ZDLHFCQUFxQixLQUFLLEVBQzFCQyxNQUFNLEVBQ05DLElBQUksRUFDSkMsTUFBTSxFQUNOQyxNQUFNLEVBQ05DLGlCQUFpQixLQUFLLEVBQ3RCQyxRQUFRLEVBQ1JDLGdCQUFnQixLQUFLLEVBQ3JCQyxNQUFNLEVBQ05DLGNBQWMsS0FBSyxFQUNuQkMsU0FBUyxFQUNUQyx3QkFBd0IsSUFBSSxFQUM1QkMsT0FBTyxFQUFFLEVBQ1RDLFdBQVcsRUFDWEMsc0JBQXNCLEtBQUssRUFDM0JDLGlCQUFpQixLQUFLLEVBQ3RCQyxRQUFRLENBQUMsQ0FBQyxFQUNWQyxDQUFDLEVBQ0RDLElBQUksRUFDQztJQUNMLE1BQU1DLFdBQVcsRUFBRTtJQUNuQmhCLE9BQU9pQixPQUFPLENBQUMsQ0FBQ0M7UUFDZCxJQUFJLENBQUNDLElBQUFBLGdDQUF5QixFQUFDRCxVQUFVLENBQUNBLE9BQU9FLE9BQU9DLFVBQVU7WUFDaEUsSUFBSUMsa0JBQWtCO1lBQ3RCLElBQUksQ0FBQ1gscUJBQXFCO2dCQUN4Qlcsa0JBQWtCQyxRQUNoQixBQUFDTCxDQUFBQSxPQUFPRSxPQUFPSSxZQUNYRCxRQUFRTCxNQUFNRSxLQUFLLENBQUNJLFNBQVMsQ0FBQ3JCLFlBQVksQ0FBQyxHQUFHSixRQUFRLENBQUMsR0FBRztvQkFBRWdCO2dCQUFLLE1BQ2pFLElBQUcsS0FBTVA7WUFFakI7WUFFQVEsU0FBU1MsSUFBSSxDQUNYQyxJQUFBQSwwQ0FBb0IsRUFBQztnQkFDbkI5QjtnQkFDQUM7Z0JBQ0FDO2dCQUNBQztnQkFDQW1CO2dCQUNBakI7Z0JBQ0FDO2dCQUNBQztnQkFDQUM7Z0JBQ0FDO2dCQUNBQztnQkFDQUM7Z0JBQ0FlO2dCQUNBYjtnQkFDQUM7Z0JBQ0FDO2dCQUNBQztnQkFDQUM7Z0JBQ0FDO2dCQUNBQztZQUNGO1FBRUo7SUFDRjtJQUNBLE1BQU1ZLFFBQVFDLEdBQUcsQ0FBQ1o7QUFDcEIifQ==
@@ -1,4 +1,11 @@
1
1
  import type { Data, Fields } from './types';
2
- declare const reduceFieldsToValues: (fields: Fields, unflatten?: boolean) => Data;
2
+ /**
3
+ * Reduce flattened form fields (Fields) to just map to the respective values instead of the full FormField object
4
+ *
5
+ * @param unflatten This also unflattens the data if `unflatten` is true. The unflattened data should match the original data structure
6
+ * @param ignoreDisableFormData - if true, will include fields that have `disableFormData` set to true, for example, blocks or arrays fields.
7
+ *
8
+ */
9
+ declare const reduceFieldsToValues: (fields: Fields, unflatten?: boolean, ignoreDisableFormData?: boolean) => Data;
3
10
  export default reduceFieldsToValues;
4
11
  //# sourceMappingURL=reduceFieldsToValues.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reduceFieldsToValues.d.ts","sourceRoot":"","sources":["../../../../../src/admin/components/forms/Form/reduceFieldsToValues.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAE3C,QAAA,MAAM,oBAAoB,WAAY,MAAM,cAAc,OAAO,KAAG,IAcnE,CAAA;AAED,eAAe,oBAAoB,CAAA"}
1
+ {"version":3,"file":"reduceFieldsToValues.d.ts","sourceRoot":"","sources":["../../../../../src/admin/components/forms/Form/reduceFieldsToValues.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAE3C;;;;;;GAMG;AACH,QAAA,MAAM,oBAAoB,WAChB,MAAM,cACF,OAAO,0BACK,OAAO,KAC9B,IAcF,CAAA;AAED,eAAe,oBAAoB,CAAA"}
@@ -9,10 +9,16 @@ Object.defineProperty(exports, "default", {
9
9
  }
10
10
  });
11
11
  const _flatley = require("flatley");
12
- const reduceFieldsToValues = (fields, unflatten)=>{
12
+ /**
13
+ * Reduce flattened form fields (Fields) to just map to the respective values instead of the full FormField object
14
+ *
15
+ * @param unflatten This also unflattens the data if `unflatten` is true. The unflattened data should match the original data structure
16
+ * @param ignoreDisableFormData - if true, will include fields that have `disableFormData` set to true, for example, blocks or arrays fields.
17
+ *
18
+ */ const reduceFieldsToValues = (fields, unflatten, ignoreDisableFormData)=>{
13
19
  const data = {};
14
20
  Object.keys(fields).forEach((key)=>{
15
- if (!fields[key].disableFormData) {
21
+ if (ignoreDisableFormData === true || !fields[key].disableFormData) {
16
22
  data[key] = fields[key].value;
17
23
  }
18
24
  });
@@ -25,4 +31,4 @@ const reduceFieldsToValues = (fields, unflatten)=>{
25
31
  };
26
32
  const _default = reduceFieldsToValues;
27
33
 
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL0Zvcm0vcmVkdWNlRmllbGRzVG9WYWx1ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5mbGF0dGVuIGFzIGZsYXRsZXlVbmZsYXR0ZW4gfSBmcm9tICdmbGF0bGV5J1xuXG5pbXBvcnQgdHlwZSB7IERhdGEsIEZpZWxkcyB9IGZyb20gJy4vdHlwZXMnXG5cbmNvbnN0IHJlZHVjZUZpZWxkc1RvVmFsdWVzID0gKGZpZWxkczogRmllbGRzLCB1bmZsYXR0ZW4/OiBib29sZWFuKTogRGF0YSA9PiB7XG4gIGNvbnN0IGRhdGEgPSB7fVxuXG4gIE9iamVjdC5rZXlzKGZpZWxkcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKCFmaWVsZHNba2V5XS5kaXNhYmxlRm9ybURhdGEpIHtcbiAgICAgIGRhdGFba2V5XSA9IGZpZWxkc1trZXldLnZhbHVlXG4gICAgfVxuICB9KVxuXG4gIGlmICh1bmZsYXR0ZW4pIHtcbiAgICByZXR1cm4gZmxhdGxleVVuZmxhdHRlbihkYXRhLCB7IHNhZmU6IHRydWUgfSlcbiAgfVxuXG4gIHJldHVybiBkYXRhXG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlZHVjZUZpZWxkc1RvVmFsdWVzXG4iXSwibmFtZXMiOlsicmVkdWNlRmllbGRzVG9WYWx1ZXMiLCJmaWVsZHMiLCJ1bmZsYXR0ZW4iLCJkYXRhIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJrZXkiLCJkaXNhYmxlRm9ybURhdGEiLCJ2YWx1ZSIsImZsYXRsZXlVbmZsYXR0ZW4iLCJzYWZlIl0sIm1hcHBpbmdzIjoiOzs7OytCQW9CQTs7O2VBQUE7Ozt5QkFwQjhDO0FBSTlDLE1BQU1BLHVCQUF1QixDQUFDQyxRQUFnQkM7SUFDNUMsTUFBTUMsT0FBTyxDQUFDO0lBRWRDLE9BQU9DLElBQUksQ0FBQ0osUUFBUUssT0FBTyxDQUFDLENBQUNDO1FBQzNCLElBQUksQ0FBQ04sTUFBTSxDQUFDTSxJQUFJLENBQUNDLGVBQWUsRUFBRTtZQUNoQ0wsSUFBSSxDQUFDSSxJQUFJLEdBQUdOLE1BQU0sQ0FBQ00sSUFBSSxDQUFDRSxLQUFLO1FBQy9CO0lBQ0Y7SUFFQSxJQUFJUCxXQUFXO1FBQ2IsT0FBT1EsSUFBQUEsa0JBQWdCLEVBQUNQLE1BQU07WUFBRVEsTUFBTTtRQUFLO0lBQzdDO0lBRUEsT0FBT1I7QUFDVDtNQUVBLFdBQWVIIn0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL2Zvcm1zL0Zvcm0vcmVkdWNlRmllbGRzVG9WYWx1ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5mbGF0dGVuIGFzIGZsYXRsZXlVbmZsYXR0ZW4gfSBmcm9tICdmbGF0bGV5J1xuXG5pbXBvcnQgdHlwZSB7IERhdGEsIEZpZWxkcyB9IGZyb20gJy4vdHlwZXMnXG5cbi8qKlxuICogUmVkdWNlIGZsYXR0ZW5lZCBmb3JtIGZpZWxkcyAoRmllbGRzKSB0byBqdXN0IG1hcCB0byB0aGUgcmVzcGVjdGl2ZSB2YWx1ZXMgaW5zdGVhZCBvZiB0aGUgZnVsbCBGb3JtRmllbGQgb2JqZWN0XG4gKlxuICogQHBhcmFtIHVuZmxhdHRlbiBUaGlzIGFsc28gdW5mbGF0dGVucyB0aGUgZGF0YSBpZiBgdW5mbGF0dGVuYCBpcyB0cnVlLiBUaGUgdW5mbGF0dGVuZWQgZGF0YSBzaG91bGQgbWF0Y2ggdGhlIG9yaWdpbmFsIGRhdGEgc3RydWN0dXJlXG4gKiBAcGFyYW0gaWdub3JlRGlzYWJsZUZvcm1EYXRhIC0gaWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIGZpZWxkcyB0aGF0IGhhdmUgYGRpc2FibGVGb3JtRGF0YWAgc2V0IHRvIHRydWUsIGZvciBleGFtcGxlLCBibG9ja3Mgb3IgYXJyYXlzIGZpZWxkcy5cbiAqXG4gKi9cbmNvbnN0IHJlZHVjZUZpZWxkc1RvVmFsdWVzID0gKFxuICBmaWVsZHM6IEZpZWxkcyxcbiAgdW5mbGF0dGVuPzogYm9vbGVhbixcbiAgaWdub3JlRGlzYWJsZUZvcm1EYXRhPzogYm9vbGVhbixcbik6IERhdGEgPT4ge1xuICBjb25zdCBkYXRhID0ge31cblxuICBPYmplY3Qua2V5cyhmaWVsZHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChpZ25vcmVEaXNhYmxlRm9ybURhdGEgPT09IHRydWUgfHwgIWZpZWxkc1trZXldLmRpc2FibGVGb3JtRGF0YSkge1xuICAgICAgZGF0YVtrZXldID0gZmllbGRzW2tleV0udmFsdWVcbiAgICB9XG4gIH0pXG5cbiAgaWYgKHVuZmxhdHRlbikge1xuICAgIHJldHVybiBmbGF0bGV5VW5mbGF0dGVuKGRhdGEsIHsgc2FmZTogdHJ1ZSB9KVxuICB9XG5cbiAgcmV0dXJuIGRhdGFcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVkdWNlRmllbGRzVG9WYWx1ZXNcbiJdLCJuYW1lcyI6WyJyZWR1Y2VGaWVsZHNUb1ZhbHVlcyIsImZpZWxkcyIsInVuZmxhdHRlbiIsImlnbm9yZURpc2FibGVGb3JtRGF0YSIsImRhdGEiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImRpc2FibGVGb3JtRGF0YSIsInZhbHVlIiwiZmxhdGxleVVuZmxhdHRlbiIsInNhZmUiXSwibWFwcGluZ3MiOiI7Ozs7K0JBK0JBOzs7ZUFBQTs7O3lCQS9COEM7QUFJOUM7Ozs7OztDQU1DLEdBQ0QsTUFBTUEsdUJBQXVCLENBQzNCQyxRQUNBQyxXQUNBQztJQUVBLE1BQU1DLE9BQU8sQ0FBQztJQUVkQyxPQUFPQyxJQUFJLENBQUNMLFFBQVFNLE9BQU8sQ0FBQyxDQUFDQztRQUMzQixJQUFJTCwwQkFBMEIsUUFBUSxDQUFDRixNQUFNLENBQUNPLElBQUksQ0FBQ0MsZUFBZSxFQUFFO1lBQ2xFTCxJQUFJLENBQUNJLElBQUksR0FBR1AsTUFBTSxDQUFDTyxJQUFJLENBQUNFLEtBQUs7UUFDL0I7SUFDRjtJQUVBLElBQUlSLFdBQVc7UUFDYixPQUFPUyxJQUFBQSxrQkFBZ0IsRUFBQ1AsTUFBTTtZQUFFUSxNQUFNO1FBQUs7SUFDN0M7SUFFQSxPQUFPUjtBQUNUO01BRUEsV0FBZUoifQ==
@@ -12,6 +12,7 @@ export type FormField = {
12
12
  condition?: Condition;
13
13
  disableFormData?: boolean;
14
14
  errorMessage?: string;
15
+ fieldSchema?: FieldConfig;
15
16
  initialValue: unknown;
16
17
  passesCondition?: boolean;
17
18
  rows?: Row[];