payload 2.0.0-beta.13 → 2.0.0-beta.15
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.
- package/dist/admin/components/elements/ArrayAction/index.js +2 -2
- package/dist/admin/components/elements/DocumentControls/index.d.ts.map +1 -1
- package/dist/admin/components/elements/DocumentControls/index.js +1 -2
- package/dist/admin/components/elements/Hamburger/index.scss +2 -2
- package/dist/admin/components/elements/Header/index.d.ts.map +1 -1
- package/dist/admin/components/elements/Header/index.js +6 -6
- package/dist/admin/components/elements/Localizer/index.d.ts.map +1 -1
- package/dist/admin/components/elements/Localizer/index.js +1 -3
- package/dist/admin/components/elements/Nav/context.d.ts +1 -1
- package/dist/admin/components/elements/Nav/context.d.ts.map +1 -1
- package/dist/admin/components/elements/Nav/context.js +12 -7
- package/dist/admin/components/elements/Nav/index.d.ts.map +1 -1
- package/dist/admin/components/elements/Nav/index.js +19 -18
- package/dist/admin/components/elements/WhereBuilder/Condition/index.js +6 -6
- package/dist/admin/components/elements/WhereBuilder/field-types.js +2 -2
- package/dist/admin/components/forms/Form/buildStateFromSchema/addFieldStatePromise.js +5 -5
- package/dist/admin/components/forms/Form/fieldReducer.js +7 -7
- package/dist/admin/components/forms/Form/index.js +3 -3
- package/dist/admin/components/forms/field-types/Array/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Array/index.js +10 -10
- package/dist/admin/components/forms/field-types/Blocks/index.js +8 -8
- package/dist/admin/components/forms/field-types/Select/Input.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Select/Input.js +4 -4
- package/dist/admin/components/icons/MinimizeMaximize/index.d.ts +8 -0
- package/dist/admin/components/icons/MinimizeMaximize/index.d.ts.map +1 -0
- package/dist/admin/components/icons/MinimizeMaximize/index.js +85 -0
- package/dist/admin/components/templates/Default/index.d.ts.map +1 -1
- package/dist/admin/components/templates/Default/index.js +10 -10
- package/dist/admin/components/views/API/index.d.ts +6 -0
- package/dist/admin/components/views/API/index.d.ts.map +1 -0
- package/dist/admin/components/views/API/index.js +281 -0
- package/dist/admin/components/views/API/index.scss +202 -0
- package/dist/admin/components/views/Global/Routes/CustomComponent.d.ts.map +1 -1
- package/dist/admin/components/views/Global/Routes/CustomComponent.js +3 -2
- package/dist/admin/components/views/Global/Routes/index.d.ts.map +1 -1
- package/dist/admin/components/views/Global/Routes/index.js +8 -1
- package/dist/admin/components/views/collections/Edit/Routes/CustomComponent.js +3 -3
- package/dist/admin/components/views/collections/Edit/SetStepNav.js +3 -3
- package/dist/auth/operations/me.d.ts.map +1 -1
- package/dist/auth/operations/me.js +13 -5
- package/dist/auth/strategies/jwt.js +3 -3
- package/dist/bin/build.d.ts.map +1 -1
- package/dist/bin/build.js +2 -5
- package/dist/bin/index.js +2 -2
- package/dist/database/migrations/migrateReset.d.ts.map +1 -1
- package/dist/database/migrations/migrateReset.js +17 -1
- package/dist/database/migrations/migrationsCollection.d.ts.map +1 -1
- package/dist/database/migrations/migrationsCollection.js +1 -5
- package/dist/fields/hooks/beforeChange/promise.d.ts.map +1 -1
- package/dist/fields/hooks/beforeChange/promise.js +2 -9
- package/dist/fields/validations.d.ts.map +1 -1
- package/dist/fields/validations.js +9 -7
- package/package.json +1 -1
- package/dist/admin/components/views/LivePreview/useLivePreview/index.d.ts +0 -9
- package/dist/admin/components/views/LivePreview/useLivePreview/index.d.ts.map +0 -1
- package/dist/admin/components/views/LivePreview/useLivePreview/index.js +0 -53
- package/dist/admin/components/views/LivePreview/useLivePreview/mergeData.d.ts +0 -10
- package/dist/admin/components/views/LivePreview/useLivePreview/mergeData.d.ts.map +0 -1
- package/dist/admin/components/views/LivePreview/useLivePreview/mergeData.js +0 -30
- package/dist/admin/components/views/LivePreview/useLivePreview/promise.d.ts +0 -12
- package/dist/admin/components/views/LivePreview/useLivePreview/promise.d.ts.map +0 -1
- package/dist/admin/components/views/LivePreview/useLivePreview/promise.js +0 -17
- package/dist/admin/components/views/LivePreview/useLivePreview/traverseFields.d.ts +0 -12
- package/dist/admin/components/views/LivePreview/useLivePreview/traverseFields.d.ts.map +0 -1
- package/dist/admin/components/views/LivePreview/useLivePreview/traverseFields.js +0 -179
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "traverseFields", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return traverseFields;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _promise = require("./promise");
|
|
12
|
-
const traverseFields = ({ apiRoute, depth, fieldSchema, incomingData, populationPromises, result, serverURL })=>{
|
|
13
|
-
fieldSchema.forEach((field)=>{
|
|
14
|
-
if ('name' in field && typeof field.name === 'string') {
|
|
15
|
-
// TODO: type this
|
|
16
|
-
const fieldName = field.name;
|
|
17
|
-
switch(field.type){
|
|
18
|
-
case 'array':
|
|
19
|
-
if (Array.isArray(incomingData[fieldName])) {
|
|
20
|
-
result[fieldName] = incomingData[fieldName].map((row, i)=>{
|
|
21
|
-
const hasExistingRow = Array.isArray(result[fieldName]) && typeof result[fieldName][i] === 'object' && result[fieldName][i] !== null;
|
|
22
|
-
const newRow = hasExistingRow ? {
|
|
23
|
-
...result[fieldName][i]
|
|
24
|
-
} : {};
|
|
25
|
-
traverseFields({
|
|
26
|
-
apiRoute,
|
|
27
|
-
depth,
|
|
28
|
-
fieldSchema: field.fields,
|
|
29
|
-
incomingData: row,
|
|
30
|
-
populationPromises,
|
|
31
|
-
result: newRow,
|
|
32
|
-
serverURL
|
|
33
|
-
});
|
|
34
|
-
return newRow;
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
break;
|
|
38
|
-
case 'blocks':
|
|
39
|
-
if (Array.isArray(incomingData[fieldName])) {
|
|
40
|
-
result[fieldName] = incomingData[fieldName].map((row, i)=>{
|
|
41
|
-
const matchedBlock = field.blocks[row.blockType];
|
|
42
|
-
const hasExistingRow = Array.isArray(result[fieldName]) && typeof result[fieldName][i] === 'object' && result[fieldName][i] !== null && result[fieldName][i].blockType === row.blockType;
|
|
43
|
-
const newRow = hasExistingRow ? {
|
|
44
|
-
...result[fieldName][i]
|
|
45
|
-
} : {
|
|
46
|
-
blockType: matchedBlock.slug
|
|
47
|
-
};
|
|
48
|
-
traverseFields({
|
|
49
|
-
apiRoute,
|
|
50
|
-
depth,
|
|
51
|
-
fieldSchema: matchedBlock.fields,
|
|
52
|
-
incomingData: row,
|
|
53
|
-
populationPromises,
|
|
54
|
-
result: newRow,
|
|
55
|
-
serverURL
|
|
56
|
-
});
|
|
57
|
-
return newRow;
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
break;
|
|
61
|
-
case 'tab':
|
|
62
|
-
case 'group':
|
|
63
|
-
if (!result[fieldName]) {
|
|
64
|
-
result[fieldName] = {};
|
|
65
|
-
}
|
|
66
|
-
traverseFields({
|
|
67
|
-
apiRoute,
|
|
68
|
-
depth,
|
|
69
|
-
fieldSchema: field.fields,
|
|
70
|
-
incomingData: incomingData[fieldName] || {},
|
|
71
|
-
populationPromises,
|
|
72
|
-
result: result[fieldName],
|
|
73
|
-
serverURL
|
|
74
|
-
});
|
|
75
|
-
break;
|
|
76
|
-
case 'upload':
|
|
77
|
-
case 'relationship':
|
|
78
|
-
if (field.hasMany && Array.isArray(incomingData[fieldName])) {
|
|
79
|
-
const existingValue = Array.isArray(result[fieldName]) ? [
|
|
80
|
-
...result[fieldName]
|
|
81
|
-
] : [];
|
|
82
|
-
result[fieldName] = Array.isArray(result[fieldName]) ? [
|
|
83
|
-
...result[fieldName]
|
|
84
|
-
].slice(0, incomingData[fieldName].length) : [];
|
|
85
|
-
incomingData[fieldName].forEach((relation, i)=>{
|
|
86
|
-
// Handle `hasMany` polymorphic
|
|
87
|
-
if (Array.isArray(field.relationTo)) {
|
|
88
|
-
const existingID = existingValue[i]?.value?.id;
|
|
89
|
-
if (existingID !== relation.value || existingValue[i]?.relationTo !== relation.relationTo) {
|
|
90
|
-
result[fieldName][i] = {
|
|
91
|
-
relationTo: relation.relationTo
|
|
92
|
-
};
|
|
93
|
-
populationPromises.push((0, _promise.promise)({
|
|
94
|
-
id: relation.value,
|
|
95
|
-
accessor: 'value',
|
|
96
|
-
apiRoute,
|
|
97
|
-
collection: relation.relationTo,
|
|
98
|
-
depth,
|
|
99
|
-
ref: result[fieldName][i],
|
|
100
|
-
serverURL
|
|
101
|
-
}));
|
|
102
|
-
}
|
|
103
|
-
} else {
|
|
104
|
-
// Handle `hasMany` singular
|
|
105
|
-
const existingID = existingValue[i]?.id;
|
|
106
|
-
if (existingID !== relation) {
|
|
107
|
-
populationPromises.push((0, _promise.promise)({
|
|
108
|
-
id: relation,
|
|
109
|
-
accessor: i,
|
|
110
|
-
apiRoute,
|
|
111
|
-
collection: String(field.relationTo),
|
|
112
|
-
depth,
|
|
113
|
-
ref: result[fieldName],
|
|
114
|
-
serverURL
|
|
115
|
-
}));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
} else {
|
|
120
|
-
// Handle `hasOne` polymorphic
|
|
121
|
-
if (Array.isArray(field.relationTo)) {
|
|
122
|
-
const hasNewValue = typeof incomingData[fieldName] === 'object' && incomingData[fieldName] !== null;
|
|
123
|
-
const hasOldValue = typeof result[fieldName] === 'object' && result[fieldName] !== null;
|
|
124
|
-
const newValue = hasNewValue ? incomingData[fieldName].value : '';
|
|
125
|
-
const newRelation = hasNewValue ? incomingData[fieldName].relationTo : '';
|
|
126
|
-
const oldValue = hasOldValue ? result[fieldName].value : '';
|
|
127
|
-
const oldRelation = hasOldValue ? result[fieldName].relationTo : '';
|
|
128
|
-
if (newValue !== oldValue || newRelation !== oldRelation) {
|
|
129
|
-
if (newValue) {
|
|
130
|
-
if (!result[fieldName]) {
|
|
131
|
-
result[fieldName] = {
|
|
132
|
-
relationTo: newRelation
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
populationPromises.push((0, _promise.promise)({
|
|
136
|
-
id: newValue,
|
|
137
|
-
accessor: 'value',
|
|
138
|
-
apiRoute,
|
|
139
|
-
collection: newRelation,
|
|
140
|
-
depth,
|
|
141
|
-
ref: result[fieldName],
|
|
142
|
-
serverURL
|
|
143
|
-
}));
|
|
144
|
-
}
|
|
145
|
-
} else {
|
|
146
|
-
result[fieldName] = null;
|
|
147
|
-
}
|
|
148
|
-
} else {
|
|
149
|
-
const hasNewValue = typeof incomingData[fieldName] === 'object' && incomingData[fieldName] !== null;
|
|
150
|
-
const hasOldValue = typeof result[fieldName] === 'object' && result[fieldName] !== null;
|
|
151
|
-
const newValue = hasNewValue ? incomingData[fieldName].value : '';
|
|
152
|
-
const oldValue = hasOldValue ? result[fieldName].value : '';
|
|
153
|
-
if (newValue !== oldValue) {
|
|
154
|
-
if (newValue) {
|
|
155
|
-
populationPromises.push((0, _promise.promise)({
|
|
156
|
-
id: newValue,
|
|
157
|
-
accessor: fieldName,
|
|
158
|
-
apiRoute,
|
|
159
|
-
collection: String(field.relationTo),
|
|
160
|
-
depth,
|
|
161
|
-
ref: result,
|
|
162
|
-
serverURL
|
|
163
|
-
}));
|
|
164
|
-
}
|
|
165
|
-
} else {
|
|
166
|
-
result[fieldName] = null;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
break;
|
|
171
|
-
default:
|
|
172
|
-
result[fieldName] = incomingData[fieldName];
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
return null;
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL0xpdmVQcmV2aWV3L3VzZUxpdmVQcmV2aWV3L3RyYXZlcnNlRmllbGRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb21pc2UgfSBmcm9tICcuL3Byb21pc2UnXG5cbnR5cGUgQXJnczxUPiA9IHtcbiAgYXBpUm91dGU/OiBzdHJpbmdcbiAgZGVwdGg6IG51bWJlclxuICBmaWVsZFNjaGVtYTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXVxuICBpbmNvbWluZ0RhdGE6IFRcbiAgcG9wdWxhdGlvblByb21pc2VzOiBQcm9taXNlPHZvaWQ+W11cbiAgcmVzdWx0OiBUXG4gIHNlcnZlclVSTDogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCB0cmF2ZXJzZUZpZWxkcyA9IDxUPih7XG4gIGFwaVJvdXRlLFxuICBkZXB0aCxcbiAgZmllbGRTY2hlbWEsXG4gIGluY29taW5nRGF0YSxcbiAgcG9wdWxhdGlvblByb21pc2VzLFxuICByZXN1bHQsXG4gIHNlcnZlclVSTCxcbn06IEFyZ3M8VD4pOiB2b2lkID0+IHtcbiAgZmllbGRTY2hlbWEuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICBpZiAoJ25hbWUnIGluIGZpZWxkICYmIHR5cGVvZiBmaWVsZC5uYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVE9ETzogdHlwZSB0aGlzXG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSBmaWVsZC5uYW1lXG5cbiAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICBjYXNlICdhcnJheSc6XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5jb21pbmdEYXRhW2ZpZWxkTmFtZV0pKSB7XG4gICAgICAgICAgICByZXN1bHRbZmllbGROYW1lXSA9IGluY29taW5nRGF0YVtmaWVsZE5hbWVdLm1hcCgocm93LCBpKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGhhc0V4aXN0aW5nUm93ID1cbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHJlc3VsdFtmaWVsZE5hbWVdKSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHRbZmllbGROYW1lXVtpXSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICAgICByZXN1bHRbZmllbGROYW1lXVtpXSAhPT0gbnVsbFxuXG4gICAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IGhhc0V4aXN0aW5nUm93ID8geyAuLi5yZXN1bHRbZmllbGROYW1lXVtpXSB9IDoge31cblxuICAgICAgICAgICAgICB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgICAgICAgYXBpUm91dGUsXG4gICAgICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICAgICAgZmllbGRTY2hlbWE6IGZpZWxkLmZpZWxkcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCAvLyBUT0RPOiB0eXBlIHRoaXNcbiAgICAgICAgICAgICAgICBpbmNvbWluZ0RhdGE6IHJvdyxcbiAgICAgICAgICAgICAgICBwb3B1bGF0aW9uUHJvbWlzZXMsXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBuZXdSb3csXG4gICAgICAgICAgICAgICAgc2VydmVyVVJMLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIHJldHVybiBuZXdSb3dcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAnYmxvY2tzJzpcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbmNvbWluZ0RhdGFbZmllbGROYW1lXSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFtmaWVsZE5hbWVdID0gaW5jb21pbmdEYXRhW2ZpZWxkTmFtZV0ubWFwKChyb3csIGkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZEJsb2NrID0gZmllbGQuYmxvY2tzW3Jvdy5ibG9ja1R5cGVdXG5cbiAgICAgICAgICAgICAgY29uc3QgaGFzRXhpc3RpbmdSb3cgPVxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocmVzdWx0W2ZpZWxkTmFtZV0pICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIHJlc3VsdFtmaWVsZE5hbWVdW2ldID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgIHJlc3VsdFtmaWVsZE5hbWVdW2ldICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgcmVzdWx0W2ZpZWxkTmFtZV1baV0uYmxvY2tUeXBlID09PSByb3cuYmxvY2tUeXBlXG5cbiAgICAgICAgICAgICAgY29uc3QgbmV3Um93ID0gaGFzRXhpc3RpbmdSb3dcbiAgICAgICAgICAgICAgICA/IHsgLi4ucmVzdWx0W2ZpZWxkTmFtZV1baV0gfVxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBibG9ja1R5cGU6IG1hdGNoZWRCbG9jay5zbHVnLFxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICAgICAgICBhcGlSb3V0ZSxcbiAgICAgICAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICAgICAgICBmaWVsZFNjaGVtYTogbWF0Y2hlZEJsb2NrLmZpZWxkcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCAvLyBUT0RPOiB0eXBlIHRoaXNcbiAgICAgICAgICAgICAgICBpbmNvbWluZ0RhdGE6IHJvdyxcbiAgICAgICAgICAgICAgICBwb3B1bGF0aW9uUHJvbWlzZXMsXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBuZXdSb3csXG4gICAgICAgICAgICAgICAgc2VydmVyVVJMLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIHJldHVybiBuZXdSb3dcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSAndGFiJzpcbiAgICAgICAgY2FzZSAnZ3JvdXAnOlxuICAgICAgICAgIGlmICghcmVzdWx0W2ZpZWxkTmFtZV0pIHtcbiAgICAgICAgICAgIHJlc3VsdFtmaWVsZE5hbWVdID0ge31cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgICBhcGlSb3V0ZSxcbiAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgZmllbGRTY2hlbWE6IGZpZWxkLmZpZWxkcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCAvLyBUT0RPOiB0eXBlIHRoaXNcbiAgICAgICAgICAgIGluY29taW5nRGF0YTogaW5jb21pbmdEYXRhW2ZpZWxkTmFtZV0gfHwge30sXG4gICAgICAgICAgICBwb3B1bGF0aW9uUHJvbWlzZXMsXG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFtmaWVsZE5hbWVdLFxuICAgICAgICAgICAgc2VydmVyVVJMLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBicmVha1xuXG4gICAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgIGNhc2UgJ3JlbGF0aW9uc2hpcCc6XG4gICAgICAgICAgaWYgKGZpZWxkLmhhc01hbnkgJiYgQXJyYXkuaXNBcnJheShpbmNvbWluZ0RhdGFbZmllbGROYW1lXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nVmFsdWUgPSBBcnJheS5pc0FycmF5KHJlc3VsdFtmaWVsZE5hbWVdKSA/IFsuLi5yZXN1bHRbZmllbGROYW1lXV0gOiBbXVxuICAgICAgICAgICAgcmVzdWx0W2ZpZWxkTmFtZV0gPSBBcnJheS5pc0FycmF5KHJlc3VsdFtmaWVsZE5hbWVdKVxuICAgICAgICAgICAgICA/IFsuLi5yZXN1bHRbZmllbGROYW1lXV0uc2xpY2UoMCwgaW5jb21pbmdEYXRhW2ZpZWxkTmFtZV0ubGVuZ3RoKVxuICAgICAgICAgICAgICA6IFtdXG5cbiAgICAgICAgICAgIGluY29taW5nRGF0YVtmaWVsZE5hbWVdLmZvckVhY2goKHJlbGF0aW9uLCBpKSA9PiB7XG4gICAgICAgICAgICAgIC8vIEhhbmRsZSBgaGFzTWFueWAgcG9seW1vcnBoaWNcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQucmVsYXRpb25UbykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lEID0gZXhpc3RpbmdWYWx1ZVtpXT8udmFsdWU/LmlkXG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0lEICE9PSByZWxhdGlvbi52YWx1ZSB8fFxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdWYWx1ZVtpXT8ucmVsYXRpb25UbyAhPT0gcmVsYXRpb24ucmVsYXRpb25Ub1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0W2ZpZWxkTmFtZV1baV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uVG86IHJlbGF0aW9uLnJlbGF0aW9uVG8sXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHBvcHVsYXRpb25Qcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlKHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogcmVsYXRpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3I6ICd2YWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgYXBpUm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbjogcmVsYXRpb24ucmVsYXRpb25UbyxcbiAgICAgICAgICAgICAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICAgICAgICAgICAgICByZWY6IHJlc3VsdFtmaWVsZE5hbWVdW2ldLFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclVSTCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBgaGFzTWFueWAgc2luZ3VsYXJcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lEID0gZXhpc3RpbmdWYWx1ZVtpXT8uaWRcblxuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0lEICE9PSByZWxhdGlvbikge1xuICAgICAgICAgICAgICAgICAgcG9wdWxhdGlvblByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiByZWxhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NvcjogaSxcbiAgICAgICAgICAgICAgICAgICAgICBhcGlSb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBTdHJpbmcoZmllbGQucmVsYXRpb25UbyksXG4gICAgICAgICAgICAgICAgICAgICAgZGVwdGgsXG4gICAgICAgICAgICAgICAgICAgICAgcmVmOiByZXN1bHRbZmllbGROYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJVUkwsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSGFuZGxlIGBoYXNPbmVgIHBvbHltb3JwaGljXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKSkge1xuICAgICAgICAgICAgICBjb25zdCBoYXNOZXdWYWx1ZSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIGluY29taW5nRGF0YVtmaWVsZE5hbWVdID09PSAnb2JqZWN0JyAmJiBpbmNvbWluZ0RhdGFbZmllbGROYW1lXSAhPT0gbnVsbFxuICAgICAgICAgICAgICBjb25zdCBoYXNPbGRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHJlc3VsdFtmaWVsZE5hbWVdID09PSAnb2JqZWN0JyAmJiByZXN1bHRbZmllbGROYW1lXSAhPT0gbnVsbFxuXG4gICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaGFzTmV3VmFsdWUgPyBpbmNvbWluZ0RhdGFbZmllbGROYW1lXS52YWx1ZSA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IG5ld1JlbGF0aW9uID0gaGFzTmV3VmFsdWUgPyBpbmNvbWluZ0RhdGFbZmllbGROYW1lXS5yZWxhdGlvblRvIDogJydcblxuICAgICAgICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IGhhc09sZFZhbHVlID8gcmVzdWx0W2ZpZWxkTmFtZV0udmFsdWUgOiAnJ1xuICAgICAgICAgICAgICBjb25zdCBvbGRSZWxhdGlvbiA9IGhhc09sZFZhbHVlID8gcmVzdWx0W2ZpZWxkTmFtZV0ucmVsYXRpb25UbyA6ICcnXG5cbiAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSB8fCBuZXdSZWxhdGlvbiAhPT0gb2xkUmVsYXRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0W2ZpZWxkTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ZpZWxkTmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25UbzogbmV3UmVsYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcG9wdWxhdGlvblByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHByb21pc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NvcjogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICBhcGlSb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBuZXdSZWxhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICAgICAgICAgICAgICByZWY6IHJlc3VsdFtmaWVsZE5hbWVdLFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclVSTCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtmaWVsZE5hbWVdID0gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBoYXNOZXdWYWx1ZSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIGluY29taW5nRGF0YVtmaWVsZE5hbWVdID09PSAnb2JqZWN0JyAmJiBpbmNvbWluZ0RhdGFbZmllbGROYW1lXSAhPT0gbnVsbFxuICAgICAgICAgICAgICBjb25zdCBoYXNPbGRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHJlc3VsdFtmaWVsZE5hbWVdID09PSAnb2JqZWN0JyAmJiByZXN1bHRbZmllbGROYW1lXSAhPT0gbnVsbFxuXG4gICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gaGFzTmV3VmFsdWUgPyBpbmNvbWluZ0RhdGFbZmllbGROYW1lXS52YWx1ZSA6ICcnXG5cbiAgICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSBoYXNPbGRWYWx1ZSA/IHJlc3VsdFtmaWVsZE5hbWVdLnZhbHVlIDogJydcblxuICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBwb3B1bGF0aW9uUHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSh7XG4gICAgICAgICAgICAgICAgICAgICAgaWQ6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgYXBpUm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbjogU3RyaW5nKGZpZWxkLnJlbGF0aW9uVG8pLFxuICAgICAgICAgICAgICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgICAgICAgICAgICAgIHJlZjogcmVzdWx0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICAgICAgICAgICAgICAgICAgIHNlcnZlclVSTCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtmaWVsZE5hbWVdID0gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlc3VsdFtmaWVsZE5hbWVdID0gaW5jb21pbmdEYXRhW2ZpZWxkTmFtZV1cbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIG51bGxcbn1cbiJdLCJuYW1lcyI6WyJ0cmF2ZXJzZUZpZWxkcyIsImFwaVJvdXRlIiwiZGVwdGgiLCJmaWVsZFNjaGVtYSIsImluY29taW5nRGF0YSIsInBvcHVsYXRpb25Qcm9taXNlcyIsInJlc3VsdCIsInNlcnZlclVSTCIsImZvckVhY2giLCJmaWVsZCIsIm5hbWUiLCJmaWVsZE5hbWUiLCJ0eXBlIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwicm93IiwiaSIsImhhc0V4aXN0aW5nUm93IiwibmV3Um93IiwiZmllbGRzIiwibWF0Y2hlZEJsb2NrIiwiYmxvY2tzIiwiYmxvY2tUeXBlIiwic2x1ZyIsImhhc01hbnkiLCJleGlzdGluZ1ZhbHVlIiwic2xpY2UiLCJsZW5ndGgiLCJyZWxhdGlvbiIsInJlbGF0aW9uVG8iLCJleGlzdGluZ0lEIiwidmFsdWUiLCJpZCIsInB1c2giLCJwcm9taXNlIiwiYWNjZXNzb3IiLCJjb2xsZWN0aW9uIiwicmVmIiwiU3RyaW5nIiwiaGFzTmV3VmFsdWUiLCJoYXNPbGRWYWx1ZSIsIm5ld1ZhbHVlIiwibmV3UmVsYXRpb24iLCJvbGRWYWx1ZSIsIm9sZFJlbGF0aW9uIl0sIm1hcHBpbmdzIjoiOzs7OytCQVlhQTs7O2VBQUFBOzs7eUJBWlc7QUFZakIsTUFBTUEsaUJBQWlCLENBQUksRUFDaENDLFFBQVEsRUFDUkMsS0FBSyxFQUNMQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsa0JBQWtCLEVBQ2xCQyxNQUFNLEVBQ05DLFNBQVMsRUFDRDtJQUNSSixZQUFZSyxPQUFPLENBQUMsQ0FBQ0M7UUFDbkIsSUFBSSxVQUFVQSxTQUFTLE9BQU9BLE1BQU1DLElBQUksS0FBSyxVQUFVO1lBQ3JELGtCQUFrQjtZQUNsQixNQUFNQyxZQUFZRixNQUFNQyxJQUFJO1lBRTVCLE9BQVFELE1BQU1HLElBQUk7Z0JBQ2hCLEtBQUs7b0JBQ0gsSUFBSUMsTUFBTUMsT0FBTyxDQUFDVixZQUFZLENBQUNPLFVBQVUsR0FBRzt3QkFDMUNMLE1BQU0sQ0FBQ0ssVUFBVSxHQUFHUCxZQUFZLENBQUNPLFVBQVUsQ0FBQ0ksR0FBRyxDQUFDLENBQUNDLEtBQUtDOzRCQUNwRCxNQUFNQyxpQkFDSkwsTUFBTUMsT0FBTyxDQUFDUixNQUFNLENBQUNLLFVBQVUsS0FDL0IsT0FBT0wsTUFBTSxDQUFDSyxVQUFVLENBQUNNLEVBQUUsS0FBSyxZQUNoQ1gsTUFBTSxDQUFDSyxVQUFVLENBQUNNLEVBQUUsS0FBSzs0QkFFM0IsTUFBTUUsU0FBU0QsaUJBQWlCO2dDQUFFLEdBQUdaLE1BQU0sQ0FBQ0ssVUFBVSxDQUFDTSxFQUFFOzRCQUFDLElBQUksQ0FBQzs0QkFFL0RqQixlQUFlO2dDQUNiQztnQ0FDQUM7Z0NBQ0FDLGFBQWFNLE1BQU1XLE1BQU07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
|