payload 2.0.15 → 2.1.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.
- package/README.md +3 -4
- package/components/hooks.d.ts +1 -0
- package/components/hooks.js +5 -1
- package/dist/admin/components/elements/EditUpload/index.js +2 -2
- package/dist/admin/components/elements/Localizer/LocalizerLabel/index.d.ts +1 -1
- package/dist/admin/components/elements/Localizer/LocalizerLabel/index.d.ts.map +1 -1
- package/dist/admin/components/elements/Localizer/LocalizerLabel/index.js +8 -6
- package/dist/admin/components/elements/Localizer/index.d.ts.map +1 -1
- package/dist/admin/components/elements/Localizer/index.js +8 -3
- package/dist/admin/components/elements/WhereBuilder/Condition/Date/index.js +3 -2
- package/dist/admin/components/elements/WhereBuilder/Condition/Date/types.d.ts +1 -0
- package/dist/admin/components/elements/WhereBuilder/Condition/Date/types.d.ts.map +1 -1
- package/dist/admin/components/elements/WhereBuilder/Condition/Number/index.d.ts.map +1 -1
- package/dist/admin/components/elements/WhereBuilder/Condition/Number/index.js +3 -2
- package/dist/admin/components/elements/WhereBuilder/Condition/Number/types.d.ts +1 -0
- package/dist/admin/components/elements/WhereBuilder/Condition/Number/types.d.ts.map +1 -1
- package/dist/admin/components/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
- package/dist/admin/components/elements/WhereBuilder/Condition/Relationship/index.js +3 -2
- package/dist/admin/components/elements/WhereBuilder/Condition/Relationship/types.d.ts +1 -0
- package/dist/admin/components/elements/WhereBuilder/Condition/Relationship/types.d.ts.map +1 -1
- package/dist/admin/components/elements/WhereBuilder/Condition/Select/index.d.ts.map +1 -1
- package/dist/admin/components/elements/WhereBuilder/Condition/Select/index.js +3 -2
- package/dist/admin/components/elements/WhereBuilder/Condition/Select/types.d.ts +1 -0
- package/dist/admin/components/elements/WhereBuilder/Condition/Select/types.d.ts.map +1 -1
- package/dist/admin/components/elements/WhereBuilder/Condition/Text/index.d.ts.map +1 -1
- package/dist/admin/components/elements/WhereBuilder/Condition/Text/index.js +3 -2
- package/dist/admin/components/elements/WhereBuilder/Condition/Text/types.d.ts +1 -0
- package/dist/admin/components/elements/WhereBuilder/Condition/Text/types.d.ts.map +1 -1
- package/dist/admin/components/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
- package/dist/admin/components/elements/WhereBuilder/Condition/index.js +27 -17
- package/dist/admin/components/elements/WhereBuilder/reducer.js +6 -6
- package/dist/admin/components/forms/Form/buildStateFromSchema/addFieldStatePromise.js +2 -2
- package/dist/admin/components/forms/field-types/Checkbox/Input.d.ts +4 -0
- package/dist/admin/components/forms/field-types/Checkbox/Input.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Checkbox/Input.js +6 -5
- package/dist/admin/components/forms/field-types/Checkbox/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Checkbox/index.js +7 -3
- package/dist/admin/components/forms/field-types/Code/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Code/index.js +6 -4
- package/dist/admin/components/forms/field-types/DateTime/Input.d.ts +6 -0
- package/dist/admin/components/forms/field-types/DateTime/Input.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/DateTime/Input.js +8 -6
- package/dist/admin/components/forms/field-types/DateTime/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/DateTime/index.js +3 -2
- package/dist/admin/components/forms/field-types/Email/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Email/index.js +10 -6
- package/dist/admin/components/forms/field-types/JSON/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/JSON/index.js +6 -4
- package/dist/admin/components/forms/field-types/Number/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Number/index.js +10 -6
- package/dist/admin/components/forms/field-types/Point/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Point/index.js +14 -8
- package/dist/admin/components/forms/field-types/RadioGroup/Input.d.ts +2 -0
- package/dist/admin/components/forms/field-types/RadioGroup/Input.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/RadioGroup/Input.js +6 -4
- package/dist/admin/components/forms/field-types/RadioGroup/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/RadioGroup/index.js +5 -3
- package/dist/admin/components/forms/field-types/Relationship/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Relationship/index.js +7 -5
- package/dist/admin/components/forms/field-types/Select/Input.d.ts +2 -0
- package/dist/admin/components/forms/field-types/Select/Input.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Select/Input.js +6 -4
- package/dist/admin/components/forms/field-types/Select/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Select/index.js +5 -3
- package/dist/admin/components/forms/field-types/Text/Input.d.ts +4 -0
- package/dist/admin/components/forms/field-types/Text/Input.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Text/Input.js +10 -6
- package/dist/admin/components/forms/field-types/Text/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Text/index.js +7 -3
- package/dist/admin/components/forms/field-types/Textarea/Input.d.ts +4 -0
- package/dist/admin/components/forms/field-types/Textarea/Input.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Textarea/Input.js +8 -6
- package/dist/admin/components/forms/field-types/Textarea/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Textarea/index.js +7 -3
- package/dist/admin/components/forms/field-types/Upload/Input.d.ts +2 -0
- package/dist/admin/components/forms/field-types/Upload/Input.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Upload/Input.js +6 -4
- package/dist/admin/components/forms/field-types/Upload/index.d.ts.map +1 -1
- package/dist/admin/components/forms/field-types/Upload/index.js +5 -3
- package/dist/admin/components/utilities/Auth/index.d.ts +1 -3
- package/dist/admin/components/utilities/Auth/index.d.ts.map +1 -1
- package/dist/admin/components/utilities/Auth/index.js +1 -1
- package/dist/admin/components/views/API/index.d.ts.map +1 -1
- package/dist/admin/components/views/API/index.js +6 -6
- package/dist/auth/graphql/resolvers/access.d.ts.map +1 -1
- package/dist/auth/graphql/resolvers/access.js +4 -2
- package/dist/auth/graphql/resolvers/forgotPassword.d.ts.map +1 -1
- package/dist/auth/graphql/resolvers/forgotPassword.js +4 -2
- package/dist/auth/graphql/resolvers/init.d.ts.map +1 -1
- package/dist/auth/graphql/resolvers/init.js +4 -2
- package/dist/auth/graphql/resolvers/login.d.ts.map +1 -1
- package/dist/auth/graphql/resolvers/login.js +4 -2
- package/dist/auth/graphql/resolvers/logout.d.ts.map +1 -1
- package/dist/auth/graphql/resolvers/logout.js +4 -2
- package/dist/auth/graphql/resolvers/me.d.ts.map +1 -1
- package/dist/auth/graphql/resolvers/me.js +4 -2
- package/dist/auth/graphql/resolvers/refresh.d.ts.map +1 -1
- package/dist/auth/graphql/resolvers/refresh.js +4 -2
- package/dist/auth/graphql/resolvers/resetPassword.d.ts.map +1 -1
- package/dist/auth/graphql/resolvers/resetPassword.js +4 -2
- package/dist/auth/graphql/resolvers/unlock.d.ts.map +1 -1
- package/dist/auth/graphql/resolvers/unlock.js +4 -2
- package/dist/auth/graphql/resolvers/verifyEmail.d.ts.map +1 -1
- package/dist/auth/graphql/resolvers/verifyEmail.js +4 -2
- package/dist/auth/operations/refresh.js +2 -2
- package/dist/collections/graphql/resolvers/create.js +4 -2
- package/dist/collections/graphql/resolvers/delete.js +4 -2
- package/dist/collections/graphql/resolvers/docAccess.js +4 -2
- package/dist/collections/graphql/resolvers/find.js +4 -2
- package/dist/collections/graphql/resolvers/findVersionByID.js +4 -2
- package/dist/collections/graphql/resolvers/findVersions.js +4 -2
- package/dist/collections/graphql/resolvers/restoreVersion.js +4 -2
- package/dist/collections/graphql/resolvers/update.js +4 -2
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +4 -2
- package/dist/config/types.d.ts +1 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +1 -1
- package/dist/exports/components/hooks.d.ts +1 -0
- package/dist/exports/components/hooks.d.ts.map +1 -1
- package/dist/exports/components/hooks.js +5 -1
- package/dist/fields/config/schema.d.ts.map +1 -1
- package/dist/fields/config/schema.js +90 -10
- package/dist/fields/config/types.d.ts +66 -0
- package/dist/fields/config/types.d.ts.map +1 -1
- package/dist/fields/config/types.js +1 -1
- package/dist/fields/validations.d.ts +4 -0
- package/dist/fields/validations.d.ts.map +1 -1
- package/dist/globals/graphql/resolvers/docAccess.js +4 -2
- package/dist/globals/graphql/resolvers/findOne.d.ts.map +1 -1
- package/dist/globals/graphql/resolvers/findOne.js +4 -2
- package/dist/globals/graphql/resolvers/findVersionByID.js +4 -2
- package/dist/globals/graphql/resolvers/findVersions.js +4 -2
- package/dist/globals/graphql/resolvers/restoreVersion.js +4 -2
- package/dist/globals/graphql/resolvers/update.js +4 -2
- package/dist/uploads/generateFileData.js +4 -4
- package/dist/uploads/imageResizer.d.ts.map +1 -1
- package/dist/uploads/imageResizer.js +87 -55
- package/dist/utilities/fieldSchemaToJSON.d.ts.map +1 -1
- package/dist/utilities/fieldSchemaToJSON.js +21 -3
- package/package.json +2 -2
|
@@ -91,32 +91,71 @@ function _interop_require_default(obj) {
|
|
|
91
91
|
*
|
|
92
92
|
* @param resizeConfig - object containing the requested dimensions and resize options
|
|
93
93
|
* @param original - the original image size
|
|
94
|
-
* @returns true if
|
|
95
|
-
*/ const
|
|
96
|
-
//
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
94
|
+
* @returns true if resizing is not needed, false otherwise
|
|
95
|
+
*/ const preventResize = ({ height: desiredHeight, width: desiredWidth, withoutEnlargement, withoutReduction }, original)=>{
|
|
96
|
+
// default is to allow reduction
|
|
97
|
+
if (withoutReduction !== undefined) {
|
|
98
|
+
return false // needs resize
|
|
99
|
+
;
|
|
100
|
+
}
|
|
101
|
+
// default is to prevent enlargement
|
|
102
|
+
if (withoutEnlargement !== undefined) {
|
|
103
|
+
return false // needs resize
|
|
100
104
|
;
|
|
101
105
|
}
|
|
102
106
|
const isWidthOrHeightNotDefined = !desiredHeight || !desiredWidth;
|
|
103
107
|
if (isWidthOrHeightNotDefined) {
|
|
104
108
|
// If with and height are not defined, it means there is a format conversion
|
|
105
109
|
// and the image needs to be "resized" (transformed).
|
|
106
|
-
return
|
|
110
|
+
return false // needs resize
|
|
107
111
|
;
|
|
108
112
|
}
|
|
109
|
-
const hasInsufficientWidth = original.width
|
|
110
|
-
const hasInsufficientHeight = original.height
|
|
113
|
+
const hasInsufficientWidth = desiredWidth > original.width;
|
|
114
|
+
const hasInsufficientHeight = desiredHeight > original.height;
|
|
111
115
|
if (hasInsufficientWidth && hasInsufficientHeight) {
|
|
112
116
|
// doesn't need resize - prevent enlargement. This should only happen if both width and height are insufficient.
|
|
113
117
|
// if only one dimension is insufficient and the other is sufficient, resizing needs to happen, as the image
|
|
114
118
|
// should be resized to the sufficient dimension.
|
|
115
|
-
return
|
|
119
|
+
return true // do not create a new size
|
|
120
|
+
;
|
|
116
121
|
}
|
|
117
|
-
return
|
|
122
|
+
return false // needs resize
|
|
118
123
|
;
|
|
119
124
|
};
|
|
125
|
+
/**
|
|
126
|
+
* Check if the image should be passed directly to sharp without payload adjusting properties.
|
|
127
|
+
*
|
|
128
|
+
* @param resizeConfig - object containing the requested dimensions and resize options
|
|
129
|
+
* @param original - the original image size
|
|
130
|
+
* @returns true if the image should passed directly to sharp
|
|
131
|
+
*/ const applyPayloadAdjustments = ({ height, width, withoutEnlargement, withoutReduction }, original)=>{
|
|
132
|
+
if (!(0, _isNumber.isNumber)(height) && !(0, _isNumber.isNumber)(width)) return false;
|
|
133
|
+
const targetAspectRatio = width / height;
|
|
134
|
+
const originalAspectRatio = original.width / original.height;
|
|
135
|
+
if (originalAspectRatio === targetAspectRatio) return false;
|
|
136
|
+
const skipEnlargement = withoutEnlargement && (original.height < height || original.width < width);
|
|
137
|
+
const skipReduction = withoutReduction && (original.height > height || original.width > width);
|
|
138
|
+
if (skipEnlargement || skipReduction) return false;
|
|
139
|
+
return true;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* Sanitize the resize config. If the resize config has the `withoutReduction`
|
|
143
|
+
* property set to true, the `fit` and `position` properties will be set to `contain`
|
|
144
|
+
* and `top left` respectively.
|
|
145
|
+
*
|
|
146
|
+
* @param resizeConfig - the resize config
|
|
147
|
+
* @returns a sanitized resize config
|
|
148
|
+
*/ const sanitizeResizeConfig = (resizeConfig)=>{
|
|
149
|
+
if (resizeConfig.withoutReduction) {
|
|
150
|
+
return {
|
|
151
|
+
...resizeConfig,
|
|
152
|
+
// Why fit `contain` should also be set to https://github.com/lovell/sharp/issues/3595
|
|
153
|
+
fit: resizeConfig?.fit || 'contain',
|
|
154
|
+
position: resizeConfig?.position || 'left top'
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
return resizeConfig;
|
|
158
|
+
};
|
|
120
159
|
async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType, req, savedFilename, staticPath }) {
|
|
121
160
|
const { imageSizes } = config.upload;
|
|
122
161
|
// Noting to resize here so return as early as possible
|
|
@@ -127,55 +166,48 @@ async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType
|
|
|
127
166
|
const sharpBase = (0, _sharp.default)(file.tempFilePath || file.data).rotate() // pass rotate() to auto-rotate based on EXIF data. https://github.com/payloadcms/payload/pull/3081
|
|
128
167
|
;
|
|
129
168
|
const results = await Promise.all(imageSizes.map(async (imageResizeConfig)=>{
|
|
169
|
+
imageResizeConfig = sanitizeResizeConfig(imageResizeConfig);
|
|
130
170
|
// This checks if a resize should happen. If not, the resized image will be
|
|
131
171
|
// skipped COMPLETELY and thus will not be included in the resulting images.
|
|
132
172
|
// All further format/trim options will thus be skipped as well.
|
|
133
|
-
if (
|
|
173
|
+
if (preventResize(imageResizeConfig, dimensions)) {
|
|
134
174
|
return createResult(imageResizeConfig.name);
|
|
135
175
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (
|
|
139
|
-
const { height, width } = imageResizeConfig;
|
|
140
|
-
const
|
|
176
|
+
const imageToResize = sharpBase.clone();
|
|
177
|
+
let resized = imageToResize.resize(imageResizeConfig);
|
|
178
|
+
if (req.query?.uploadEdits?.focalPoint && applyPayloadAdjustments(imageResizeConfig, dimensions)) {
|
|
179
|
+
const { height: resizeHeight, width: resizeWidth } = imageResizeConfig;
|
|
180
|
+
const resizeAspectRatio = resizeWidth / resizeHeight;
|
|
141
181
|
const originalAspectRatio = dimensions.width / dimensions.height;
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
height,
|
|
172
|
-
left: offsetX,
|
|
173
|
-
top: offsetY,
|
|
174
|
-
width
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
} else {
|
|
178
|
-
resized = resized.resize(imageResizeConfig);
|
|
182
|
+
const prioritizeHeight = resizeAspectRatio < originalAspectRatio;
|
|
183
|
+
// Scale the image up or down to fit the resize dimensions
|
|
184
|
+
const scaledImage = imageToResize.resize({
|
|
185
|
+
height: prioritizeHeight ? resizeHeight : null,
|
|
186
|
+
width: prioritizeHeight ? null : resizeWidth
|
|
187
|
+
});
|
|
188
|
+
const { info: scaledImageInfo } = await scaledImage.toBuffer({
|
|
189
|
+
resolveWithObject: true
|
|
190
|
+
});
|
|
191
|
+
// Focal point adjustments
|
|
192
|
+
const focalPoint = {
|
|
193
|
+
x: (0, _isNumber.isNumber)(req.query.uploadEdits.focalPoint?.x) ? req.query.uploadEdits.focalPoint.x : 50,
|
|
194
|
+
y: (0, _isNumber.isNumber)(req.query.uploadEdits.focalPoint?.y) ? req.query.uploadEdits.focalPoint.y : 50
|
|
195
|
+
};
|
|
196
|
+
const safeResizeWidth = resizeWidth ?? scaledImageInfo.width;
|
|
197
|
+
const maxOffsetX = scaledImageInfo.width - safeResizeWidth;
|
|
198
|
+
const leftFocalEdge = Math.round(scaledImageInfo.width * (focalPoint.x / 100) - safeResizeWidth / 2);
|
|
199
|
+
const safeOffsetX = Math.min(Math.max(0, leftFocalEdge), maxOffsetX);
|
|
200
|
+
const safeResizeHeight = resizeHeight ?? scaledImageInfo.height;
|
|
201
|
+
const maxOffsetY = scaledImageInfo.height - safeResizeHeight;
|
|
202
|
+
const topFocalEdge = Math.round(scaledImageInfo.height * (focalPoint.y / 100) - safeResizeHeight / 2);
|
|
203
|
+
const safeOffsetY = Math.min(Math.max(0, topFocalEdge), maxOffsetY);
|
|
204
|
+
// extract the focal area from the scaled image
|
|
205
|
+
resized = scaledImage.extract({
|
|
206
|
+
height: safeResizeHeight,
|
|
207
|
+
left: safeOffsetX,
|
|
208
|
+
top: safeOffsetY,
|
|
209
|
+
width: safeResizeWidth
|
|
210
|
+
});
|
|
179
211
|
}
|
|
180
212
|
if (imageResizeConfig.formatOptions) {
|
|
181
213
|
resized = resized.toFormat(imageResizeConfig.formatOptions.format, imageResizeConfig.formatOptions.options);
|
|
@@ -218,4 +250,4 @@ async function resizeAndTransformImageSizes({ config, dimensions, file, mimeType
|
|
|
218
250
|
});
|
|
219
251
|
}
|
|
220
252
|
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2ltYWdlUmVzaXplci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFVwbG9hZGVkRmlsZSB9IGZyb20gJ2V4cHJlc3MtZmlsZXVwbG9hZCdcbmltcG9ydCB0eXBlIHsgT3V0cHV0SW5mbyB9IGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgeyBmcm9tQnVmZmVyIH0gZnJvbSAnZmlsZS10eXBlJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IHNhbml0aXplIGZyb20gJ3Nhbml0aXplLWZpbGVuYW1lJ1xuaW1wb3J0IHNoYXJwIGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgdHlwZSB7IFVwbG9hZEVkaXRzIH0gZnJvbSAnLi4vYWRtaW4vY29tcG9uZW50cy92aWV3cy9jb2xsZWN0aW9ucy9FZGl0L3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAnLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJy4uL2V4cHJlc3MvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEZpbGVTaXplLCBGaWxlU2l6ZXMsIEZpbGVUb1NhdmUsIEltYWdlU2l6ZSwgUHJvYmVkSW1hZ2VTaXplIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICcuLi91dGlsaXRpZXMvaXNOdW1iZXInXG5pbXBvcnQgZmlsZUV4aXN0cyBmcm9tICcuL2ZpbGVFeGlzdHMnXG5cbnR5cGUgUmVzaXplQXJncyA9IHtcbiAgY29uZmlnOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnXG4gIGRpbWVuc2lvbnM6IFByb2JlZEltYWdlU2l6ZVxuICBmaWxlOiBVcGxvYWRlZEZpbGVcbiAgbWltZVR5cGU6IHN0cmluZ1xuICByZXE6IFBheWxvYWRSZXF1ZXN0ICYge1xuICAgIHF1ZXJ5Pzoge1xuICAgICAgdXBsb2FkRWRpdHM/OiBVcGxvYWRFZGl0c1xuICAgIH1cbiAgfVxuICBzYXZlZEZpbGVuYW1lOiBzdHJpbmdcbiAgc3RhdGljUGF0aDogc3RyaW5nXG59XG5cbi8qKiBSZXN1bHQgZnJvbSByZXNpemluZyBhbmQgdHJhbnNmb3JtaW5nIHRoZSByZXF1ZXN0ZWQgaW1hZ2Ugc2l6ZXMgKi9cbnR5cGUgSW1hZ2VTaXplc1Jlc3VsdCA9IHtcbiAgc2l6ZURhdGE6IEZpbGVTaXplc1xuICBzaXplc1RvU2F2ZTogRmlsZVRvU2F2ZVtdXG59XG5cbnR5cGUgU2FuaXRpemVkSW1hZ2VEYXRhID0ge1xuICBleHQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSB0aGUgaW1hZ2UgbmFtZSBhbmQgZXh0cmFjdCB0aGUgZXh0ZW5zaW9uIGZyb20gdGhlIHNvdXJjZSBpbWFnZVxuICpcbiAqIEBwYXJhbSBzb3VyY2VJbWFnZSAtIHRoZSBzb3VyY2UgaW1hZ2VcbiAqIEByZXR1cm5zIHRoZSBzYW5pdGl6ZWQgbmFtZSBhbmQgZXh0ZW5zaW9uXG4gKi9cbmNvbnN0IGdldFNhbml0aXplZEltYWdlRGF0YSA9IChzb3VyY2VJbWFnZTogc3RyaW5nKTogU2FuaXRpemVkSW1hZ2VEYXRhID0+IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gc291cmNlSW1hZ2Uuc3BsaXQoJy4nKS5wb3AoKVxuICBjb25zdCBuYW1lID0gc2FuaXRpemUoc291cmNlSW1hZ2Uuc3Vic3RyaW5nKDAsIHNvdXJjZUltYWdlLmxhc3RJbmRleE9mKCcuJykpIHx8IHNvdXJjZUltYWdlKVxuICByZXR1cm4geyBuYW1lLCBleHQ6IGV4dGVuc2lvbiB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGltYWdlIG5hbWUgYmFzZWQgb24gdGhlIG91dHB1dCBpbWFnZSBuYW1lLCB0aGUgZGltZW5zaW9ucyBhbmRcbiAqIHRoZSBleHRlbnNpb24uXG4gKlxuICogSWdub3JlIHRoZSBmYWN0IHRoYXQgZHVwbGljYXRlIG5hbWVzIGNvdWxkIGhhcHBlbiBpZiB0aGUgdGhlcmUgaXMgb25lXG4gKiBzaXplIHdpdGggYHdpZHRoIEFORCBoZWlnaHRgIGFuZCBvbmUgd2l0aCBvbmx5IGBoZWlnaHQgT1Igd2lkdGhgLiBCZWNhdXNlXG4gKiBzcGFjZSBpcyBleHBlbnNpdmUsIHdlIHdpbGwgcmV1c2UgdGhlIHNhbWUgaW1hZ2UgZm9yIGJvdGggc2l6ZXMuXG4gKlxuICogQHBhcmFtIG91dHB1dEltYWdlTmFtZSAtIHRoZSBzYW5pdGl6ZWQgaW1hZ2UgbmFtZVxuICogQHBhcmFtIGJ1ZmZlckluZm8gLSB0aGUgYnVmZmVyIGluZm9cbiAqIEBwYXJhbSBleHRlbnNpb24gLSB0aGUgZXh0ZW5zaW9uIHRvIHVzZVxuICogQHJldHVybnMgdGhlIG5ldyBpbWFnZSBuYW1lIHRoYXQgaXMgbm90IHRha2VuXG4gKi9cbmNvbnN0IGNyZWF0ZUltYWdlTmFtZSA9IChcbiAgb3V0cHV0SW1hZ2VOYW1lOiBzdHJpbmcsXG4gIHsgaGVpZ2h0LCB3aWR0aCB9OiBPdXRwdXRJbmZvLFxuICBleHRlbnNpb246IHN0cmluZyxcbikgPT4gYCR7b3V0cHV0SW1hZ2VOYW1lfS0ke3dpZHRofXgke2hlaWdodH0uJHtleHRlbnNpb259YFxuXG4vKipcbiAqIENyZWF0ZSB0aGUgcmVzdWx0IG9iamVjdCBmb3IgdGhlIGltYWdlIHJlc2l6ZSBvcGVyYXRpb24gYmFzZWQgb24gdGhlXG4gKiBwcm92aWRlZCBwYXJhbWV0ZXJzLiBJZiB0aGUgbmFtZSBpcyBub3QgcHJvdmlkZWQsIGFuIGVtcHR5IHJlc3VsdCBvYmplY3RcbiAqIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSB0aGUgZmlsZW5hbWUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gd2lkdGggLSB0aGUgd2lkdGggb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gaGVpZ2h0IC0gdGhlIGhlaWdodCBvZiB0aGUgaW1hZ2VcbiAqIEBwYXJhbSBmaWxlc2l6ZSAtIHRoZSBmaWxlc2l6ZSBvZiB0aGUgaW1hZ2VcbiAqIEBwYXJhbSBtaW1lVHlwZSAtIHRoZSBtaW1lIHR5cGUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gc2l6ZXNUb1NhdmUgLSB0aGUgc2l6ZXMgdG8gc2F2ZVxuICogQHJldHVybnMgdGhlIHJlc3VsdCBvYmplY3RcbiAqL1xuY29uc3QgY3JlYXRlUmVzdWx0ID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGZpbGVuYW1lOiBGaWxlU2l6ZVsnZmlsZW5hbWUnXSA9IG51bGwsXG4gIHdpZHRoOiBGaWxlU2l6ZVsnd2lkdGgnXSA9IG51bGwsXG4gIGhlaWdodDogRmlsZVNpemVbJ2hlaWdodCddID0gbnVsbCxcbiAgZmlsZXNpemU6IEZpbGVTaXplWydmaWxlc2l6ZSddID0gbnVsbCxcbiAgbWltZVR5cGU6IEZpbGVTaXplWydtaW1lVHlwZSddID0gbnVsbCxcbiAgc2l6ZXNUb1NhdmU6IEZpbGVUb1NhdmVbXSA9IFtdLFxuKTogSW1hZ2VTaXplc1Jlc3VsdCA9PiAoe1xuICBzaXplRGF0YToge1xuICAgIFtuYW1lXToge1xuICAgICAgZmlsZW5hbWUsXG4gICAgICBmaWxlc2l6ZSxcbiAgICAgIGhlaWdodCxcbiAgICAgIG1pbWVUeXBlLFxuICAgICAgd2lkdGgsXG4gICAgfSxcbiAgfSxcbiAgc2l6ZXNUb1NhdmUsXG59KVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBpbWFnZSBuZWVkcyB0byBiZSByZXNpemVkIGFjY29yZGluZyB0byB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnNcbiAqIGFuZCB0aGUgb3JpZ2luYWwgaW1hZ2Ugc2l6ZS4gSWYgdGhlIHJlc2l6ZSBvcHRpb25zIHdpdGhvdXRFbmxhcmdlbWVudCBvciB3aXRob3V0UmVkdWN0aW9uIGFyZSBwcm92aWRlZCxcbiAqIHRoZSBpbWFnZSB3aWxsIGJlIHJlc2l6ZWQgcmVnYXJkbGVzcyBvZiB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnMsIGdpdmVuIHRoYXQgdGhlXG4gKiB3aWR0aCBvciBoZWlnaHQgdG8gYmUgcmVzaXplZCBpcyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0gcmVzaXplQ29uZmlnIC0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBkaW1lbnNpb25zIGFuZCByZXNpemUgb3B0aW9uc1xuICogQHBhcmFtIG9yaWdpbmFsIC0gdGhlIG9yaWdpbmFsIGltYWdlIHNpemVcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGltYWdlIG5lZWRzIHRvIGJlIHJlc2l6ZWQsIGZhbHNlIG90aGVyd2lzZVxuICovXG5jb25zdCBuZWVkc1Jlc2l6ZSA9IChcbiAgeyBoZWlnaHQ6IGRlc2lyZWRIZWlnaHQsIHdpZHRoOiBkZXNpcmVkV2lkdGgsIHdpdGhvdXRFbmxhcmdlbWVudCwgd2l0aG91dFJlZHVjdGlvbiB9OiBJbWFnZVNpemUsXG4gIG9yaWdpbmFsOiBQcm9iZWRJbWFnZVNpemUsXG4pOiBib29sZWFuID0+IHtcbiAgLy8gYWxsb3cgZW5sYXJnZW1lbnQgb3IgcHJldmVudCByZWR1Y3Rpb24gKG91ciBkZWZhdWx0IGlzIHRvIHByZXZlbnRcbiAgLy8gZW5sYXJnZW1lbnQgYW5kIGFsbG93IHJlZHVjdGlvbilcbiAgaWYgKHdpdGhvdXRFbmxhcmdlbWVudCAhPT0gdW5kZWZpbmVkIHx8IHdpdGhvdXRSZWR1Y3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlIC8vIG5lZWRzIHJlc2l6ZVxuICB9XG5cbiAgY29uc3QgaXNXaWR0aE9ySGVpZ2h0Tm90RGVmaW5lZCA9ICFkZXNpcmVkSGVpZ2h0IHx8ICFkZXNpcmVkV2lkdGhcblxuICBpZiAoaXNXaWR0aE9ySGVpZ2h0Tm90RGVmaW5lZCkge1xuICAgIC8vIElmIHdpdGggYW5kIGhlaWdodCBhcmUgbm90IGRlZmluZWQsIGl0IG1lYW5zIHRoZXJlIGlzIGEgZm9ybWF0IGNvbnZlcnNpb25cbiAgICAvLyBhbmQgdGhlIGltYWdlIG5lZWRzIHRvIGJlIFwicmVzaXplZFwiICh0cmFuc2Zvcm1lZCkuXG4gICAgcmV0dXJuIHRydWUgLy8gbmVlZHMgcmVzaXplXG4gIH1cblxuICBjb25zdCBoYXNJbnN1ZmZpY2llbnRXaWR0aCA9IG9yaWdpbmFsLndpZHRoIDwgZGVzaXJlZFdpZHRoXG4gIGNvbnN0IGhhc0luc3VmZmljaWVudEhlaWdodCA9IG9yaWdpbmFsLmhlaWdodCA8IGRlc2lyZWRIZWlnaHRcbiAgaWYgKGhhc0luc3VmZmljaWVudFdpZHRoICYmIGhhc0luc3VmZmljaWVudEhlaWdodCkge1xuICAgIC8vIGRvZXNuJ3QgbmVlZCByZXNpemUgLSBwcmV2ZW50IGVubGFyZ2VtZW50LiBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiBib3RoIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGluc3VmZmljaWVudC5cbiAgICAvLyBpZiBvbmx5IG9uZSBkaW1lbnNpb24gaXMgaW5zdWZmaWNpZW50IGFuZCB0aGUgb3RoZXIgaXMgc3VmZmljaWVudCwgcmVzaXppbmcgbmVlZHMgdG8gaGFwcGVuLCBhcyB0aGUgaW1hZ2VcbiAgICAvLyBzaG91bGQgYmUgcmVzaXplZCB0byB0aGUgc3VmZmljaWVudCBkaW1lbnNpb24uXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZSAvLyBuZWVkcyByZXNpemVcbn1cblxuLyoqXG4gKiBGb3IgdGhlIHByb3ZpZGVkIGltYWdlIHNpemVzLCBoYW5kbGUgdGhlIHJlc2l6aW5nIGFuZCB0aGUgdHJhbnNmb3Jtc1xuICogKGZvcm1hdCwgdHJpbSwgZXRjLikgb2YgZWFjaCByZXF1ZXN0ZWQgaW1hZ2Ugc2l6ZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2JqZWN0LlxuICogVGhpcyBvbmx5IGhhbmRsZXMgdGhlIGltYWdlIHNpemVzLiBUaGUgdHJhbnNmb3JtcyBvZiB0aGUgb3JpZ2luYWwgaW1hZ2VcbiAqIGFyZSBoYW5kbGVkIGluIHtAbGluayAuL2dlbmVyYXRlRmlsZURhdGEudHN9LlxuICpcbiAqIFRoZSBpbWFnZSB3aWxsIGJlIHJlc2l6ZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZFxuICogcmVzaXplIGNvbmZpZy4gSWYgbm8gaW1hZ2Ugc2l6ZXMgYXJlIHJlcXVlc3RlZCwgdGhlIHJlc29sdmVkIGRhdGEgd2lsbCBiZSBlbXB0eS5cbiAqIEZvciBldmVyeSBpbWFnZSB0aGF0IGRvcyBub3QgbmVlZCB0byBiZSByZXNpemVkLCBhbiByZXN1bHQgb2JqZWN0IHdpdGggYG51bGxgXG4gKiBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHJlc2l6ZUNvbmZpZyAtIHRoZSByZXNpemUgY29uZmlnXG4gKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSByZXNpemUgb3BlcmF0aW9uKHMpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHJlc2l6ZUFuZFRyYW5zZm9ybUltYWdlU2l6ZXMoe1xuICBjb25maWcsXG4gIGRpbWVuc2lvbnMsXG4gIGZpbGUsXG4gIG1pbWVUeXBlLFxuICByZXEsXG4gIHNhdmVkRmlsZW5hbWUsXG4gIHN0YXRpY1BhdGgsXG59OiBSZXNpemVBcmdzKTogUHJvbWlzZTxJbWFnZVNpemVzUmVzdWx0PiB7XG4gIGNvbnN0IHsgaW1hZ2VTaXplcyB9ID0gY29uZmlnLnVwbG9hZFxuICAvLyBOb3RpbmcgdG8gcmVzaXplIGhlcmUgc28gcmV0dXJuIGFzIGVhcmx5IGFzIHBvc3NpYmxlXG4gIGlmICghaW1hZ2VTaXplcykgcmV0dXJuIHsgc2l6ZURhdGE6IHt9LCBzaXplc1RvU2F2ZTogW10gfVxuXG4gIGNvbnN0IHNoYXJwQmFzZSA9IHNoYXJwKGZpbGUudGVtcEZpbGVQYXRoIHx8IGZpbGUuZGF0YSkucm90YXRlKCkgLy8gcGFzcyByb3RhdGUoKSB0byBhdXRvLXJvdGF0ZSBiYXNlZCBvbiBFWElGIGRhdGEuIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvcHVsbC8zMDgxXG5cbiAgY29uc3QgcmVzdWx0czogSW1hZ2VTaXplc1Jlc3VsdFtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgaW1hZ2VTaXplcy5tYXAoYXN5bmMgKGltYWdlUmVzaXplQ29uZmlnKTogUHJvbWlzZTxJbWFnZVNpemVzUmVzdWx0PiA9PiB7XG4gICAgICAvLyBUaGlzIGNoZWNrcyBpZiBhIHJlc2l6ZSBzaG91bGQgaGFwcGVuLiBJZiBub3QsIHRoZSByZXNpemVkIGltYWdlIHdpbGwgYmVcbiAgICAgIC8vIHNraXBwZWQgQ09NUExFVEVMWSBhbmQgdGh1cyB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGltYWdlcy5cbiAgICAgIC8vIEFsbCBmdXJ0aGVyIGZvcm1hdC90cmltIG9wdGlvbnMgd2lsbCB0aHVzIGJlIHNraXBwZWQgYXMgd2VsbC5cbiAgICAgIGlmICghbmVlZHNSZXNpemUoaW1hZ2VSZXNpemVDb25maWcsIGRpbWVuc2lvbnMpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVSZXN1bHQoaW1hZ2VSZXNpemVDb25maWcubmFtZSlcbiAgICAgIH1cbiAgICAgIGxldCByZXNpemVkID0gc2hhcnBCYXNlLmNsb25lKClcblxuICAgICAgY29uc3QgaGFzRWRpdHMgPSByZXEucXVlcnk/LnVwbG9hZEVkaXRzXG5cbiAgICAgIGlmIChoYXNFZGl0cyAmJiBpbWFnZVJlc2l6ZUNvbmZpZy53aWR0aCAmJiBpbWFnZVJlc2l6ZUNvbmZpZy5oZWlnaHQpIHtcbiAgICAgICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSBpbWFnZVJlc2l6ZUNvbmZpZ1xuXG4gICAgICAgIGNvbnN0IHRhcmdldEFzcGVjdFJhdGlvID0gd2lkdGggLyBoZWlnaHRcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxBc3BlY3RSYXRpbyA9IGRpbWVuc2lvbnMud2lkdGggLyBkaW1lbnNpb25zLmhlaWdodFxuXG4gICAgICAgIGlmIChvcmlnaW5hbEFzcGVjdFJhdGlvID09PSB0YXJnZXRBc3BlY3RSYXRpbykge1xuICAgICAgICAgIHJlc2l6ZWQgPSByZXNpemVkLnJlc2l6ZShpbWFnZVJlc2l6ZUNvbmZpZylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmb2NhbFBvaW50ID0ge1xuICAgICAgICAgICAgeDogMC41LFxuICAgICAgICAgICAgeTogMC41LFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZXEucXVlcnkudXBsb2FkRWRpdHM/LmZvY2FsUG9pbnQpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihyZXEucXVlcnkudXBsb2FkRWRpdHMuZm9jYWxQb2ludD8ueCkpIHtcbiAgICAgICAgICAgICAgZm9jYWxQb2ludC54ID0gcmVxLnF1ZXJ5LnVwbG9hZEVkaXRzLmZvY2FsUG9pbnQueFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKHJlcS5xdWVyeS51cGxvYWRFZGl0cy5mb2NhbFBvaW50Py55KSkge1xuICAgICAgICAgICAgICBmb2NhbFBvaW50LnkgPSByZXEucXVlcnkudXBsb2FkRWRpdHMuZm9jYWxQb2ludC55XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcHJpb3JpdGl6ZUhlaWdodCA9IG9yaWdpbmFsQXNwZWN0UmF0aW8gPiB0YXJnZXRBc3BlY3RSYXRpb1xuXG4gICAgICAgICAgY29uc3QgeyBpbmZvIH0gPSBhd2FpdCByZXNpemVkXG4gICAgICAgICAgICAucmVzaXplKHtcbiAgICAgICAgICAgICAgaGVpZ2h0OiBwcmlvcml0aXplSGVpZ2h0ID8gaGVpZ2h0IDogbnVsbCxcbiAgICAgICAgICAgICAgd2lkdGg6IHByaW9yaXRpemVIZWlnaHQgPyBudWxsIDogd2lkdGgsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRvQnVmZmVyKHsgcmVzb2x2ZVdpdGhPYmplY3Q6IHRydWUgfSlcblxuICAgICAgICAgIGNvbnN0IG1heE9mZnNldFggPSBNYXRoLm1heChpbmZvLndpZHRoIC0gd2lkdGgsIDApXG4gICAgICAgICAgY29uc3QgbWF4T2Zmc2V0WSA9IE1hdGgubWF4KGluZm8uaGVpZ2h0IC0gaGVpZ2h0LCAwKVxuXG4gICAgICAgICAgY29uc3QgZm9jYWxQb2ludFggPSBNYXRoLmZsb29yKChpbmZvLndpZHRoIC8gMTAwKSAqIGZvY2FsUG9pbnQueClcbiAgICAgICAgICBjb25zdCBmb2NhbFBvaW50WSA9IE1hdGguZmxvb3IoKGluZm8uaGVpZ2h0IC8gMTAwKSAqIGZvY2FsUG9pbnQueSlcblxuICAgICAgICAgIGNvbnN0IG9mZnNldFggPSBNYXRoLm1pbihNYXRoLm1heChmb2NhbFBvaW50WCAtIHdpZHRoIC8gMiwgMCksIG1heE9mZnNldFgpXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IE1hdGgubWluKE1hdGgubWF4KGZvY2FsUG9pbnRZIC0gaGVpZ2h0IC8gMiwgMCksIG1heE9mZnNldFkpXG5cbiAgICAgICAgICByZXNpemVkID0gcmVzaXplZC5leHRyYWN0KHtcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIGxlZnQ6IG9mZnNldFgsXG4gICAgICAgICAgICB0b3A6IG9mZnNldFksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNpemVkID0gcmVzaXplZC5yZXNpemUoaW1hZ2VSZXNpemVDb25maWcpXG4gICAgICB9XG5cbiAgICAgIGlmIChpbWFnZVJlc2l6ZUNvbmZpZy5mb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIHJlc2l6ZWQgPSByZXNpemVkLnRvRm9ybWF0KFxuICAgICAgICAgIGltYWdlUmVzaXplQ29uZmlnLmZvcm1hdE9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgIGltYWdlUmVzaXplQ29uZmlnLmZvcm1hdE9wdGlvbnMub3B0aW9ucyxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1hZ2VSZXNpemVDb25maWcudHJpbU9wdGlvbnMpIHtcbiAgICAgICAgcmVzaXplZCA9IHJlc2l6ZWQudHJpbShpbWFnZVJlc2l6ZUNvbmZpZy50cmltT3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRhOiBidWZmZXJEYXRhLCBpbmZvOiBidWZmZXJJbmZvIH0gPSBhd2FpdCByZXNpemVkLnRvQnVmZmVyKHtcbiAgICAgICAgcmVzb2x2ZVdpdGhPYmplY3Q6IHRydWUsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBzYW5pdGl6ZWRJbWFnZSA9IGdldFNhbml0aXplZEltYWdlRGF0YShzYXZlZEZpbGVuYW1lKVxuXG4gICAgICBpZiAocmVxLnBheWxvYWRVcGxvYWRTaXplcykge1xuICAgICAgICByZXEucGF5bG9hZFVwbG9hZFNpemVzW2ltYWdlUmVzaXplQ29uZmlnLm5hbWVdID0gYnVmZmVyRGF0YVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW1lSW5mbyA9IGF3YWl0IGZyb21CdWZmZXIoYnVmZmVyRGF0YSlcblxuICAgICAgY29uc3QgaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMgPSBjcmVhdGVJbWFnZU5hbWUoXG4gICAgICAgIHNhbml0aXplZEltYWdlLm5hbWUsXG4gICAgICAgIGJ1ZmZlckluZm8sXG4gICAgICAgIG1pbWVJbmZvPy5leHQgfHwgc2FuaXRpemVkSW1hZ2UuZXh0LFxuICAgICAgKVxuXG4gICAgICBjb25zdCBpbWFnZVBhdGggPSBgJHtzdGF0aWNQYXRofS8ke2ltYWdlTmFtZVdpdGhEaW1lbnNpb25zfWBcblxuICAgICAgaWYgKGF3YWl0IGZpbGVFeGlzdHMoaW1hZ2VQYXRoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZzLnVubGlua1N5bmMoaW1hZ2VQYXRoKVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJZ25vcmUgdW5saW5rIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgaGVpZ2h0LCBzaXplLCB3aWR0aCB9ID0gYnVmZmVySW5mb1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlc3VsdChcbiAgICAgICAgaW1hZ2VSZXNpemVDb25maWcubmFtZSxcbiAgICAgICAgaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIG1pbWVJbmZvPy5taW1lIHx8IG1pbWVUeXBlLFxuICAgICAgICBbeyBidWZmZXI6IGJ1ZmZlckRhdGEsIHBhdGg6IGltYWdlUGF0aCB9XSxcbiAgICAgIClcbiAgICB9KSxcbiAgKVxuXG4gIHJldHVybiByZXN1bHRzLnJlZHVjZShcbiAgICAoYWNjLCByZXN1bHQpID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24oYWNjLnNpemVEYXRhLCByZXN1bHQuc2l6ZURhdGEpXG4gICAgICBhY2Muc2l6ZXNUb1NhdmUucHVzaCguLi5yZXN1bHQuc2l6ZXNUb1NhdmUpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSxcbiAgICB7IHNpemVEYXRhOiB7fSwgc2l6ZXNUb1NhdmU6IFtdIH0sXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJyZXNpemVBbmRUcmFuc2Zvcm1JbWFnZVNpemVzIiwiZ2V0U2FuaXRpemVkSW1hZ2VEYXRhIiwic291cmNlSW1hZ2UiLCJleHRlbnNpb24iLCJzcGxpdCIsInBvcCIsIm5hbWUiLCJzYW5pdGl6ZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiZXh0IiwiY3JlYXRlSW1hZ2VOYW1lIiwib3V0cHV0SW1hZ2VOYW1lIiwiaGVpZ2h0Iiwid2lkdGgiLCJjcmVhdGVSZXN1bHQiLCJmaWxlbmFtZSIsImZpbGVzaXplIiwibWltZVR5cGUiLCJzaXplc1RvU2F2ZSIsInNpemVEYXRhIiwibmVlZHNSZXNpemUiLCJkZXNpcmVkSGVpZ2h0IiwiZGVzaXJlZFdpZHRoIiwid2l0aG91dEVubGFyZ2VtZW50Iiwid2l0aG91dFJlZHVjdGlvbiIsIm9yaWdpbmFsIiwidW5kZWZpbmVkIiwiaXNXaWR0aE9ySGVpZ2h0Tm90RGVmaW5lZCIsImhhc0luc3VmZmljaWVudFdpZHRoIiwiaGFzSW5zdWZmaWNpZW50SGVpZ2h0IiwiY29uZmlnIiwiZGltZW5zaW9ucyIsImZpbGUiLCJyZXEiLCJzYXZlZEZpbGVuYW1lIiwic3RhdGljUGF0aCIsImltYWdlU2l6ZXMiLCJ1cGxvYWQiLCJzaGFycEJhc2UiLCJzaGFycCIsInRlbXBGaWxlUGF0aCIsImRhdGEiLCJyb3RhdGUiLCJyZXN1bHRzIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImltYWdlUmVzaXplQ29uZmlnIiwicmVzaXplZCIsImNsb25lIiwiaGFzRWRpdHMiLCJxdWVyeSIsInVwbG9hZEVkaXRzIiwidGFyZ2V0QXNwZWN0UmF0aW8iLCJvcmlnaW5hbEFzcGVjdFJhdGlvIiwicmVzaXplIiwiZm9jYWxQb2ludCIsIngiLCJ5IiwiaXNOdW1iZXIiLCJwcmlvcml0aXplSGVpZ2h0IiwiaW5mbyIsInRvQnVmZmVyIiwicmVzb2x2ZVdpdGhPYmplY3QiLCJtYXhPZmZzZXRYIiwiTWF0aCIsIm1heCIsIm1heE9mZnNldFkiLCJmb2NhbFBvaW50WCIsImZsb29yIiwiZm9jYWxQb2ludFkiLCJvZmZzZXRYIiwibWluIiwib2Zmc2V0WSIsImV4dHJhY3QiLCJsZWZ0IiwidG9wIiwiZm9ybWF0T3B0aW9ucyIsInRvRm9ybWF0IiwiZm9ybWF0Iiwib3B0aW9ucyIsInRyaW1PcHRpb25zIiwidHJpbSIsImJ1ZmZlckRhdGEiLCJidWZmZXJJbmZvIiwic2FuaXRpemVkSW1hZ2UiLCJwYXlsb2FkVXBsb2FkU2l6ZXMiLCJtaW1lSW5mbyIsImZyb21CdWZmZXIiLCJpbWFnZU5hbWVXaXRoRGltZW5zaW9ucyIsImltYWdlUGF0aCIsImZpbGVFeGlzdHMiLCJmcyIsInVubGlua1N5bmMiLCJzaXplIiwibWltZSIsImJ1ZmZlciIsInBhdGgiLCJyZWR1Y2UiLCJhY2MiLCJyZXN1bHQiLCJPYmplY3QiLCJhc3NpZ24iLCJwdXNoIl0sIm1hcHBpbmdzIjoiOzs7OytCQW1KQTs7Ozs7Ozs7Ozs7OztDQWFDLEdBQ0Q7OztlQUE4QkE7OzswQkE5Skg7MkRBQ1o7eUVBQ007OERBQ0g7MEJBT087bUVBQ0Y7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
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91cGxvYWRzL2ltYWdlUmVzaXplci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFVwbG9hZGVkRmlsZSB9IGZyb20gJ2V4cHJlc3MtZmlsZXVwbG9hZCdcbmltcG9ydCB0eXBlIHsgT3V0cHV0SW5mbyB9IGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgeyBmcm9tQnVmZmVyIH0gZnJvbSAnZmlsZS10eXBlJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzJ1xuaW1wb3J0IHNhbml0aXplIGZyb20gJ3Nhbml0aXplLWZpbGVuYW1lJ1xuaW1wb3J0IHNoYXJwIGZyb20gJ3NoYXJwJ1xuXG5pbXBvcnQgdHlwZSB7IFVwbG9hZEVkaXRzIH0gZnJvbSAnLi4vYWRtaW4vY29tcG9uZW50cy92aWV3cy9jb2xsZWN0aW9ucy9FZGl0L3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAnLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJy4uL2V4cHJlc3MvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IEZpbGVTaXplLCBGaWxlU2l6ZXMsIEZpbGVUb1NhdmUsIEltYWdlU2l6ZSwgUHJvYmVkSW1hZ2VTaXplIH0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICcuLi91dGlsaXRpZXMvaXNOdW1iZXInXG5pbXBvcnQgZmlsZUV4aXN0cyBmcm9tICcuL2ZpbGVFeGlzdHMnXG5cbnR5cGUgUmVzaXplQXJncyA9IHtcbiAgY29uZmlnOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnXG4gIGRpbWVuc2lvbnM6IFByb2JlZEltYWdlU2l6ZVxuICBmaWxlOiBVcGxvYWRlZEZpbGVcbiAgbWltZVR5cGU6IHN0cmluZ1xuICByZXE6IFBheWxvYWRSZXF1ZXN0ICYge1xuICAgIHF1ZXJ5Pzoge1xuICAgICAgdXBsb2FkRWRpdHM/OiBVcGxvYWRFZGl0c1xuICAgIH1cbiAgfVxuICBzYXZlZEZpbGVuYW1lOiBzdHJpbmdcbiAgc3RhdGljUGF0aDogc3RyaW5nXG59XG5cbi8qKiBSZXN1bHQgZnJvbSByZXNpemluZyBhbmQgdHJhbnNmb3JtaW5nIHRoZSByZXF1ZXN0ZWQgaW1hZ2Ugc2l6ZXMgKi9cbnR5cGUgSW1hZ2VTaXplc1Jlc3VsdCA9IHtcbiAgc2l6ZURhdGE6IEZpbGVTaXplc1xuICBzaXplc1RvU2F2ZTogRmlsZVRvU2F2ZVtdXG59XG5cbnR5cGUgU2FuaXRpemVkSW1hZ2VEYXRhID0ge1xuICBleHQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbn1cblxuLyoqXG4gKiBTYW5pdGl6ZSB0aGUgaW1hZ2UgbmFtZSBhbmQgZXh0cmFjdCB0aGUgZXh0ZW5zaW9uIGZyb20gdGhlIHNvdXJjZSBpbWFnZVxuICpcbiAqIEBwYXJhbSBzb3VyY2VJbWFnZSAtIHRoZSBzb3VyY2UgaW1hZ2VcbiAqIEByZXR1cm5zIHRoZSBzYW5pdGl6ZWQgbmFtZSBhbmQgZXh0ZW5zaW9uXG4gKi9cbmNvbnN0IGdldFNhbml0aXplZEltYWdlRGF0YSA9IChzb3VyY2VJbWFnZTogc3RyaW5nKTogU2FuaXRpemVkSW1hZ2VEYXRhID0+IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gc291cmNlSW1hZ2Uuc3BsaXQoJy4nKS5wb3AoKVxuICBjb25zdCBuYW1lID0gc2FuaXRpemUoc291cmNlSW1hZ2Uuc3Vic3RyaW5nKDAsIHNvdXJjZUltYWdlLmxhc3RJbmRleE9mKCcuJykpIHx8IHNvdXJjZUltYWdlKVxuICByZXR1cm4geyBuYW1lLCBleHQ6IGV4dGVuc2lvbiB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGltYWdlIG5hbWUgYmFzZWQgb24gdGhlIG91dHB1dCBpbWFnZSBuYW1lLCB0aGUgZGltZW5zaW9ucyBhbmRcbiAqIHRoZSBleHRlbnNpb24uXG4gKlxuICogSWdub3JlIHRoZSBmYWN0IHRoYXQgZHVwbGljYXRlIG5hbWVzIGNvdWxkIGhhcHBlbiBpZiB0aGUgdGhlcmUgaXMgb25lXG4gKiBzaXplIHdpdGggYHdpZHRoIEFORCBoZWlnaHRgIGFuZCBvbmUgd2l0aCBvbmx5IGBoZWlnaHQgT1Igd2lkdGhgLiBCZWNhdXNlXG4gKiBzcGFjZSBpcyBleHBlbnNpdmUsIHdlIHdpbGwgcmV1c2UgdGhlIHNhbWUgaW1hZ2UgZm9yIGJvdGggc2l6ZXMuXG4gKlxuICogQHBhcmFtIG91dHB1dEltYWdlTmFtZSAtIHRoZSBzYW5pdGl6ZWQgaW1hZ2UgbmFtZVxuICogQHBhcmFtIGJ1ZmZlckluZm8gLSB0aGUgYnVmZmVyIGluZm9cbiAqIEBwYXJhbSBleHRlbnNpb24gLSB0aGUgZXh0ZW5zaW9uIHRvIHVzZVxuICogQHJldHVybnMgdGhlIG5ldyBpbWFnZSBuYW1lIHRoYXQgaXMgbm90IHRha2VuXG4gKi9cbmNvbnN0IGNyZWF0ZUltYWdlTmFtZSA9IChcbiAgb3V0cHV0SW1hZ2VOYW1lOiBzdHJpbmcsXG4gIHsgaGVpZ2h0LCB3aWR0aCB9OiBPdXRwdXRJbmZvLFxuICBleHRlbnNpb246IHN0cmluZyxcbikgPT4gYCR7b3V0cHV0SW1hZ2VOYW1lfS0ke3dpZHRofXgke2hlaWdodH0uJHtleHRlbnNpb259YFxuXG4vKipcbiAqIENyZWF0ZSB0aGUgcmVzdWx0IG9iamVjdCBmb3IgdGhlIGltYWdlIHJlc2l6ZSBvcGVyYXRpb24gYmFzZWQgb24gdGhlXG4gKiBwcm92aWRlZCBwYXJhbWV0ZXJzLiBJZiB0aGUgbmFtZSBpcyBub3QgcHJvdmlkZWQsIGFuIGVtcHR5IHJlc3VsdCBvYmplY3RcbiAqIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSB0aGUgZmlsZW5hbWUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gd2lkdGggLSB0aGUgd2lkdGggb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gaGVpZ2h0IC0gdGhlIGhlaWdodCBvZiB0aGUgaW1hZ2VcbiAqIEBwYXJhbSBmaWxlc2l6ZSAtIHRoZSBmaWxlc2l6ZSBvZiB0aGUgaW1hZ2VcbiAqIEBwYXJhbSBtaW1lVHlwZSAtIHRoZSBtaW1lIHR5cGUgb2YgdGhlIGltYWdlXG4gKiBAcGFyYW0gc2l6ZXNUb1NhdmUgLSB0aGUgc2l6ZXMgdG8gc2F2ZVxuICogQHJldHVybnMgdGhlIHJlc3VsdCBvYmplY3RcbiAqL1xuY29uc3QgY3JlYXRlUmVzdWx0ID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGZpbGVuYW1lOiBGaWxlU2l6ZVsnZmlsZW5hbWUnXSA9IG51bGwsXG4gIHdpZHRoOiBGaWxlU2l6ZVsnd2lkdGgnXSA9IG51bGwsXG4gIGhlaWdodDogRmlsZVNpemVbJ2hlaWdodCddID0gbnVsbCxcbiAgZmlsZXNpemU6IEZpbGVTaXplWydmaWxlc2l6ZSddID0gbnVsbCxcbiAgbWltZVR5cGU6IEZpbGVTaXplWydtaW1lVHlwZSddID0gbnVsbCxcbiAgc2l6ZXNUb1NhdmU6IEZpbGVUb1NhdmVbXSA9IFtdLFxuKTogSW1hZ2VTaXplc1Jlc3VsdCA9PiAoe1xuICBzaXplRGF0YToge1xuICAgIFtuYW1lXToge1xuICAgICAgZmlsZW5hbWUsXG4gICAgICBmaWxlc2l6ZSxcbiAgICAgIGhlaWdodCxcbiAgICAgIG1pbWVUeXBlLFxuICAgICAgd2lkdGgsXG4gICAgfSxcbiAgfSxcbiAgc2l6ZXNUb1NhdmUsXG59KVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBpbWFnZSBuZWVkcyB0byBiZSByZXNpemVkIGFjY29yZGluZyB0byB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnNcbiAqIGFuZCB0aGUgb3JpZ2luYWwgaW1hZ2Ugc2l6ZS4gSWYgdGhlIHJlc2l6ZSBvcHRpb25zIHdpdGhvdXRFbmxhcmdlbWVudCBvciB3aXRob3V0UmVkdWN0aW9uIGFyZSBwcm92aWRlZCxcbiAqIHRoZSBpbWFnZSB3aWxsIGJlIHJlc2l6ZWQgcmVnYXJkbGVzcyBvZiB0aGUgcmVxdWVzdGVkIGRpbWVuc2lvbnMsIGdpdmVuIHRoYXQgdGhlXG4gKiB3aWR0aCBvciBoZWlnaHQgdG8gYmUgcmVzaXplZCBpcyBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0gcmVzaXplQ29uZmlnIC0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBkaW1lbnNpb25zIGFuZCByZXNpemUgb3B0aW9uc1xuICogQHBhcmFtIG9yaWdpbmFsIC0gdGhlIG9yaWdpbmFsIGltYWdlIHNpemVcbiAqIEByZXR1cm5zIHRydWUgaWYgcmVzaXppbmcgaXMgbm90IG5lZWRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmNvbnN0IHByZXZlbnRSZXNpemUgPSAoXG4gIHsgaGVpZ2h0OiBkZXNpcmVkSGVpZ2h0LCB3aWR0aDogZGVzaXJlZFdpZHRoLCB3aXRob3V0RW5sYXJnZW1lbnQsIHdpdGhvdXRSZWR1Y3Rpb24gfTogSW1hZ2VTaXplLFxuICBvcmlnaW5hbDogUHJvYmVkSW1hZ2VTaXplLFxuKTogYm9vbGVhbiA9PiB7XG4gIC8vIGRlZmF1bHQgaXMgdG8gYWxsb3cgcmVkdWN0aW9uXG4gIGlmICh3aXRob3V0UmVkdWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2UgLy8gbmVlZHMgcmVzaXplXG4gIH1cblxuICAvLyBkZWZhdWx0IGlzIHRvIHByZXZlbnQgZW5sYXJnZW1lbnRcbiAgaWYgKHdpdGhvdXRFbmxhcmdlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlIC8vIG5lZWRzIHJlc2l6ZVxuICB9XG5cbiAgY29uc3QgaXNXaWR0aE9ySGVpZ2h0Tm90RGVmaW5lZCA9ICFkZXNpcmVkSGVpZ2h0IHx8ICFkZXNpcmVkV2lkdGhcbiAgaWYgKGlzV2lkdGhPckhlaWdodE5vdERlZmluZWQpIHtcbiAgICAvLyBJZiB3aXRoIGFuZCBoZWlnaHQgYXJlIG5vdCBkZWZpbmVkLCBpdCBtZWFucyB0aGVyZSBpcyBhIGZvcm1hdCBjb252ZXJzaW9uXG4gICAgLy8gYW5kIHRoZSBpbWFnZSBuZWVkcyB0byBiZSBcInJlc2l6ZWRcIiAodHJhbnNmb3JtZWQpLlxuICAgIHJldHVybiBmYWxzZSAvLyBuZWVkcyByZXNpemVcbiAgfVxuXG4gIGNvbnN0IGhhc0luc3VmZmljaWVudFdpZHRoID0gZGVzaXJlZFdpZHRoID4gb3JpZ2luYWwud2lkdGhcbiAgY29uc3QgaGFzSW5zdWZmaWNpZW50SGVpZ2h0ID0gZGVzaXJlZEhlaWdodCA+IG9yaWdpbmFsLmhlaWdodFxuICBpZiAoaGFzSW5zdWZmaWNpZW50V2lkdGggJiYgaGFzSW5zdWZmaWNpZW50SGVpZ2h0KSB7XG4gICAgLy8gZG9lc24ndCBuZWVkIHJlc2l6ZSAtIHByZXZlbnQgZW5sYXJnZW1lbnQuIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIGJvdGggd2lkdGggYW5kIGhlaWdodCBhcmUgaW5zdWZmaWNpZW50LlxuICAgIC8vIGlmIG9ubHkgb25lIGRpbWVuc2lvbiBpcyBpbnN1ZmZpY2llbnQgYW5kIHRoZSBvdGhlciBpcyBzdWZmaWNpZW50LCByZXNpemluZyBuZWVkcyB0byBoYXBwZW4sIGFzIHRoZSBpbWFnZVxuICAgIC8vIHNob3VsZCBiZSByZXNpemVkIHRvIHRoZSBzdWZmaWNpZW50IGRpbWVuc2lvbi5cbiAgICByZXR1cm4gdHJ1ZSAvLyBkbyBub3QgY3JlYXRlIGEgbmV3IHNpemVcbiAgfVxuXG4gIHJldHVybiBmYWxzZSAvLyBuZWVkcyByZXNpemVcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgaW1hZ2Ugc2hvdWxkIGJlIHBhc3NlZCBkaXJlY3RseSB0byBzaGFycCB3aXRob3V0IHBheWxvYWQgYWRqdXN0aW5nIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHJlc2l6ZUNvbmZpZyAtIG9iamVjdCBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgZGltZW5zaW9ucyBhbmQgcmVzaXplIG9wdGlvbnNcbiAqIEBwYXJhbSBvcmlnaW5hbCAtIHRoZSBvcmlnaW5hbCBpbWFnZSBzaXplXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbWFnZSBzaG91bGQgcGFzc2VkIGRpcmVjdGx5IHRvIHNoYXJwXG4gKi9cbmNvbnN0IGFwcGx5UGF5bG9hZEFkanVzdG1lbnRzID0gKFxuICB7IGhlaWdodCwgd2lkdGgsIHdpdGhvdXRFbmxhcmdlbWVudCwgd2l0aG91dFJlZHVjdGlvbiB9OiBJbWFnZVNpemUsXG4gIG9yaWdpbmFsOiBQcm9iZWRJbWFnZVNpemUsXG4pID0+IHtcbiAgaWYgKCFpc051bWJlcihoZWlnaHQpICYmICFpc051bWJlcih3aWR0aCkpIHJldHVybiBmYWxzZVxuXG4gIGNvbnN0IHRhcmdldEFzcGVjdFJhdGlvID0gd2lkdGggLyBoZWlnaHRcbiAgY29uc3Qgb3JpZ2luYWxBc3BlY3RSYXRpbyA9IG9yaWdpbmFsLndpZHRoIC8gb3JpZ2luYWwuaGVpZ2h0XG4gIGlmIChvcmlnaW5hbEFzcGVjdFJhdGlvID09PSB0YXJnZXRBc3BlY3RSYXRpbykgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3Qgc2tpcEVubGFyZ2VtZW50ID0gd2l0aG91dEVubGFyZ2VtZW50ICYmIChvcmlnaW5hbC5oZWlnaHQgPCBoZWlnaHQgfHwgb3JpZ2luYWwud2lkdGggPCB3aWR0aClcbiAgY29uc3Qgc2tpcFJlZHVjdGlvbiA9IHdpdGhvdXRSZWR1Y3Rpb24gJiYgKG9yaWdpbmFsLmhlaWdodCA+IGhlaWdodCB8fCBvcmlnaW5hbC53aWR0aCA+IHdpZHRoKVxuICBpZiAoc2tpcEVubGFyZ2VtZW50IHx8IHNraXBSZWR1Y3Rpb24pIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogU2FuaXRpemUgdGhlIHJlc2l6ZSBjb25maWcuIElmIHRoZSByZXNpemUgY29uZmlnIGhhcyB0aGUgYHdpdGhvdXRSZWR1Y3Rpb25gXG4gKiBwcm9wZXJ0eSBzZXQgdG8gdHJ1ZSwgdGhlIGBmaXRgIGFuZCBgcG9zaXRpb25gIHByb3BlcnRpZXMgd2lsbCBiZSBzZXQgdG8gYGNvbnRhaW5gXG4gKiBhbmQgYHRvcCBsZWZ0YCByZXNwZWN0aXZlbHkuXG4gKlxuICogQHBhcmFtIHJlc2l6ZUNvbmZpZyAtIHRoZSByZXNpemUgY29uZmlnXG4gKiBAcmV0dXJucyBhIHNhbml0aXplZCByZXNpemUgY29uZmlnXG4gKi9cbmNvbnN0IHNhbml0aXplUmVzaXplQ29uZmlnID0gKHJlc2l6ZUNvbmZpZzogSW1hZ2VTaXplKTogSW1hZ2VTaXplID0+IHtcbiAgaWYgKHJlc2l6ZUNvbmZpZy53aXRob3V0UmVkdWN0aW9uKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc2l6ZUNvbmZpZyxcbiAgICAgIC8vIFdoeSBmaXQgYGNvbnRhaW5gIHNob3VsZCBhbHNvIGJlIHNldCB0byBodHRwczovL2dpdGh1Yi5jb20vbG92ZWxsL3NoYXJwL2lzc3Vlcy8zNTk1XG4gICAgICBmaXQ6IHJlc2l6ZUNvbmZpZz8uZml0IHx8ICdjb250YWluJyxcbiAgICAgIHBvc2l0aW9uOiByZXNpemVDb25maWc/LnBvc2l0aW9uIHx8ICdsZWZ0IHRvcCcsXG4gICAgfVxuICB9XG4gIHJldHVybiByZXNpemVDb25maWdcbn1cblxuLyoqXG4gKiBGb3IgdGhlIHByb3ZpZGVkIGltYWdlIHNpemVzLCBoYW5kbGUgdGhlIHJlc2l6aW5nIGFuZCB0aGUgdHJhbnNmb3Jtc1xuICogKGZvcm1hdCwgdHJpbSwgZXRjLikgb2YgZWFjaCByZXF1ZXN0ZWQgaW1hZ2Ugc2l6ZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2JqZWN0LlxuICogVGhpcyBvbmx5IGhhbmRsZXMgdGhlIGltYWdlIHNpemVzLiBUaGUgdHJhbnNmb3JtcyBvZiB0aGUgb3JpZ2luYWwgaW1hZ2VcbiAqIGFyZSBoYW5kbGVkIGluIHtAbGluayAuL2dlbmVyYXRlRmlsZURhdGEudHN9LlxuICpcbiAqIFRoZSBpbWFnZSB3aWxsIGJlIHJlc2l6ZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZFxuICogcmVzaXplIGNvbmZpZy4gSWYgbm8gaW1hZ2Ugc2l6ZXMgYXJlIHJlcXVlc3RlZCwgdGhlIHJlc29sdmVkIGRhdGEgd2lsbCBiZSBlbXB0eS5cbiAqIEZvciBldmVyeSBpbWFnZSB0aGF0IGRvcyBub3QgbmVlZCB0byBiZSByZXNpemVkLCBhbiByZXN1bHQgb2JqZWN0IHdpdGggYG51bGxgXG4gKiBwYXJhbWV0ZXJzIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHJlc2l6ZUNvbmZpZyAtIHRoZSByZXNpemUgY29uZmlnXG4gKiBAcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSByZXNpemUgb3BlcmF0aW9uKHMpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIHJlc2l6ZUFuZFRyYW5zZm9ybUltYWdlU2l6ZXMoe1xuICBjb25maWcsXG4gIGRpbWVuc2lvbnMsXG4gIGZpbGUsXG4gIG1pbWVUeXBlLFxuICByZXEsXG4gIHNhdmVkRmlsZW5hbWUsXG4gIHN0YXRpY1BhdGgsXG59OiBSZXNpemVBcmdzKTogUHJvbWlzZTxJbWFnZVNpemVzUmVzdWx0PiB7XG4gIGNvbnN0IHsgaW1hZ2VTaXplcyB9ID0gY29uZmlnLnVwbG9hZFxuICAvLyBOb3RpbmcgdG8gcmVzaXplIGhlcmUgc28gcmV0dXJuIGFzIGVhcmx5IGFzIHBvc3NpYmxlXG4gIGlmICghaW1hZ2VTaXplcykgcmV0dXJuIHsgc2l6ZURhdGE6IHt9LCBzaXplc1RvU2F2ZTogW10gfVxuXG4gIGNvbnN0IHNoYXJwQmFzZSA9IHNoYXJwKGZpbGUudGVtcEZpbGVQYXRoIHx8IGZpbGUuZGF0YSkucm90YXRlKCkgLy8gcGFzcyByb3RhdGUoKSB0byBhdXRvLXJvdGF0ZSBiYXNlZCBvbiBFWElGIGRhdGEuIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXlsb2FkY21zL3BheWxvYWQvcHVsbC8zMDgxXG5cbiAgY29uc3QgcmVzdWx0czogSW1hZ2VTaXplc1Jlc3VsdFtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgaW1hZ2VTaXplcy5tYXAoYXN5bmMgKGltYWdlUmVzaXplQ29uZmlnKTogUHJvbWlzZTxJbWFnZVNpemVzUmVzdWx0PiA9PiB7XG4gICAgICBpbWFnZVJlc2l6ZUNvbmZpZyA9IHNhbml0aXplUmVzaXplQ29uZmlnKGltYWdlUmVzaXplQ29uZmlnKVxuXG4gICAgICAvLyBUaGlzIGNoZWNrcyBpZiBhIHJlc2l6ZSBzaG91bGQgaGFwcGVuLiBJZiBub3QsIHRoZSByZXNpemVkIGltYWdlIHdpbGwgYmVcbiAgICAgIC8vIHNraXBwZWQgQ09NUExFVEVMWSBhbmQgdGh1cyB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGltYWdlcy5cbiAgICAgIC8vIEFsbCBmdXJ0aGVyIGZvcm1hdC90cmltIG9wdGlvbnMgd2lsbCB0aHVzIGJlIHNraXBwZWQgYXMgd2VsbC5cbiAgICAgIGlmIChwcmV2ZW50UmVzaXplKGltYWdlUmVzaXplQ29uZmlnLCBkaW1lbnNpb25zKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmVzdWx0KGltYWdlUmVzaXplQ29uZmlnLm5hbWUpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGltYWdlVG9SZXNpemUgPSBzaGFycEJhc2UuY2xvbmUoKVxuICAgICAgbGV0IHJlc2l6ZWQgPSBpbWFnZVRvUmVzaXplLnJlc2l6ZShpbWFnZVJlc2l6ZUNvbmZpZylcblxuICAgICAgaWYgKFxuICAgICAgICByZXEucXVlcnk/LnVwbG9hZEVkaXRzPy5mb2NhbFBvaW50ICYmXG4gICAgICAgIGFwcGx5UGF5bG9hZEFkanVzdG1lbnRzKGltYWdlUmVzaXplQ29uZmlnLCBkaW1lbnNpb25zKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHsgaGVpZ2h0OiByZXNpemVIZWlnaHQsIHdpZHRoOiByZXNpemVXaWR0aCB9ID0gaW1hZ2VSZXNpemVDb25maWdcbiAgICAgICAgY29uc3QgcmVzaXplQXNwZWN0UmF0aW8gPSByZXNpemVXaWR0aCAvIHJlc2l6ZUhlaWdodFxuICAgICAgICBjb25zdCBvcmlnaW5hbEFzcGVjdFJhdGlvID0gZGltZW5zaW9ucy53aWR0aCAvIGRpbWVuc2lvbnMuaGVpZ2h0XG4gICAgICAgIGNvbnN0IHByaW9yaXRpemVIZWlnaHQgPSByZXNpemVBc3BlY3RSYXRpbyA8IG9yaWdpbmFsQXNwZWN0UmF0aW9cblxuICAgICAgICAvLyBTY2FsZSB0aGUgaW1hZ2UgdXAgb3IgZG93biB0byBmaXQgdGhlIHJlc2l6ZSBkaW1lbnNpb25zXG4gICAgICAgIGNvbnN0IHNjYWxlZEltYWdlID0gaW1hZ2VUb1Jlc2l6ZS5yZXNpemUoe1xuICAgICAgICAgIGhlaWdodDogcHJpb3JpdGl6ZUhlaWdodCA/IHJlc2l6ZUhlaWdodCA6IG51bGwsXG4gICAgICAgICAgd2lkdGg6IHByaW9yaXRpemVIZWlnaHQgPyBudWxsIDogcmVzaXplV2lkdGgsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHsgaW5mbzogc2NhbGVkSW1hZ2VJbmZvIH0gPSBhd2FpdCBzY2FsZWRJbWFnZS50b0J1ZmZlcih7IHJlc29sdmVXaXRoT2JqZWN0OiB0cnVlIH0pXG5cbiAgICAgICAgLy8gRm9jYWwgcG9pbnQgYWRqdXN0bWVudHNcbiAgICAgICAgY29uc3QgZm9jYWxQb2ludCA9IHtcbiAgICAgICAgICB4OiBpc051bWJlcihyZXEucXVlcnkudXBsb2FkRWRpdHMuZm9jYWxQb2ludD8ueClcbiAgICAgICAgICAgID8gcmVxLnF1ZXJ5LnVwbG9hZEVkaXRzLmZvY2FsUG9pbnQueFxuICAgICAgICAgICAgOiA1MCxcbiAgICAgICAgICB5OiBpc051bWJlcihyZXEucXVlcnkudXBsb2FkRWRpdHMuZm9jYWxQb2ludD8ueSlcbiAgICAgICAgICAgID8gcmVxLnF1ZXJ5LnVwbG9hZEVkaXRzLmZvY2FsUG9pbnQueVxuICAgICAgICAgICAgOiA1MCxcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNhZmVSZXNpemVXaWR0aCA9IHJlc2l6ZVdpZHRoID8/IHNjYWxlZEltYWdlSW5mby53aWR0aFxuICAgICAgICBjb25zdCBtYXhPZmZzZXRYID0gc2NhbGVkSW1hZ2VJbmZvLndpZHRoIC0gc2FmZVJlc2l6ZVdpZHRoXG4gICAgICAgIGNvbnN0IGxlZnRGb2NhbEVkZ2UgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgIHNjYWxlZEltYWdlSW5mby53aWR0aCAqIChmb2NhbFBvaW50LnggLyAxMDApIC0gc2FmZVJlc2l6ZVdpZHRoIC8gMixcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBzYWZlT2Zmc2V0WCA9IE1hdGgubWluKE1hdGgubWF4KDAsIGxlZnRGb2NhbEVkZ2UpLCBtYXhPZmZzZXRYKVxuXG4gICAgICAgIGNvbnN0IHNhZmVSZXNpemVIZWlnaHQgPSByZXNpemVIZWlnaHQgPz8gc2NhbGVkSW1hZ2VJbmZvLmhlaWdodFxuICAgICAgICBjb25zdCBtYXhPZmZzZXRZID0gc2NhbGVkSW1hZ2VJbmZvLmhlaWdodCAtIHNhZmVSZXNpemVIZWlnaHRcbiAgICAgICAgY29uc3QgdG9wRm9jYWxFZGdlID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBzY2FsZWRJbWFnZUluZm8uaGVpZ2h0ICogKGZvY2FsUG9pbnQueSAvIDEwMCkgLSBzYWZlUmVzaXplSGVpZ2h0IC8gMixcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBzYWZlT2Zmc2V0WSA9IE1hdGgubWluKE1hdGgubWF4KDAsIHRvcEZvY2FsRWRnZSksIG1heE9mZnNldFkpXG5cbiAgICAgICAgLy8gZXh0cmFjdCB0aGUgZm9jYWwgYXJlYSBmcm9tIHRoZSBzY2FsZWQgaW1hZ2VcbiAgICAgICAgcmVzaXplZCA9IHNjYWxlZEltYWdlLmV4dHJhY3Qoe1xuICAgICAgICAgIGhlaWdodDogc2FmZVJlc2l6ZUhlaWdodCxcbiAgICAgICAgICBsZWZ0OiBzYWZlT2Zmc2V0WCxcbiAgICAgICAgICB0b3A6IHNhZmVPZmZzZXRZLFxuICAgICAgICAgIHdpZHRoOiBzYWZlUmVzaXplV2lkdGgsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChpbWFnZVJlc2l6ZUNvbmZpZy5mb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIHJlc2l6ZWQgPSByZXNpemVkLnRvRm9ybWF0KFxuICAgICAgICAgIGltYWdlUmVzaXplQ29uZmlnLmZvcm1hdE9wdGlvbnMuZm9ybWF0LFxuICAgICAgICAgIGltYWdlUmVzaXplQ29uZmlnLmZvcm1hdE9wdGlvbnMub3B0aW9ucyxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoaW1hZ2VSZXNpemVDb25maWcudHJpbU9wdGlvbnMpIHtcbiAgICAgICAgcmVzaXplZCA9IHJlc2l6ZWQudHJpbShpbWFnZVJlc2l6ZUNvbmZpZy50cmltT3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRhOiBidWZmZXJEYXRhLCBpbmZvOiBidWZmZXJJbmZvIH0gPSBhd2FpdCByZXNpemVkLnRvQnVmZmVyKHtcbiAgICAgICAgcmVzb2x2ZVdpdGhPYmplY3Q6IHRydWUsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBzYW5pdGl6ZWRJbWFnZSA9IGdldFNhbml0aXplZEltYWdlRGF0YShzYXZlZEZpbGVuYW1lKVxuXG4gICAgICBpZiAocmVxLnBheWxvYWRVcGxvYWRTaXplcykge1xuICAgICAgICByZXEucGF5bG9hZFVwbG9hZFNpemVzW2ltYWdlUmVzaXplQ29uZmlnLm5hbWVdID0gYnVmZmVyRGF0YVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW1lSW5mbyA9IGF3YWl0IGZyb21CdWZmZXIoYnVmZmVyRGF0YSlcblxuICAgICAgY29uc3QgaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMgPSBjcmVhdGVJbWFnZU5hbWUoXG4gICAgICAgIHNhbml0aXplZEltYWdlLm5hbWUsXG4gICAgICAgIGJ1ZmZlckluZm8sXG4gICAgICAgIG1pbWVJbmZvPy5leHQgfHwgc2FuaXRpemVkSW1hZ2UuZXh0LFxuICAgICAgKVxuXG4gICAgICBjb25zdCBpbWFnZVBhdGggPSBgJHtzdGF0aWNQYXRofS8ke2ltYWdlTmFtZVdpdGhEaW1lbnNpb25zfWBcblxuICAgICAgaWYgKGF3YWl0IGZpbGVFeGlzdHMoaW1hZ2VQYXRoKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZzLnVubGlua1N5bmMoaW1hZ2VQYXRoKVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBJZ25vcmUgdW5saW5rIGVycm9yc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgaGVpZ2h0LCBzaXplLCB3aWR0aCB9ID0gYnVmZmVySW5mb1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlc3VsdChcbiAgICAgICAgaW1hZ2VSZXNpemVDb25maWcubmFtZSxcbiAgICAgICAgaW1hZ2VOYW1lV2l0aERpbWVuc2lvbnMsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIG1pbWVJbmZvPy5taW1lIHx8IG1pbWVUeXBlLFxuICAgICAgICBbeyBidWZmZXI6IGJ1ZmZlckRhdGEsIHBhdGg6IGltYWdlUGF0aCB9XSxcbiAgICAgIClcbiAgICB9KSxcbiAgKVxuXG4gIHJldHVybiByZXN1bHRzLnJlZHVjZShcbiAgICAoYWNjLCByZXN1bHQpID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24oYWNjLnNpemVEYXRhLCByZXN1bHQuc2l6ZURhdGEpXG4gICAgICBhY2Muc2l6ZXNUb1NhdmUucHVzaCguLi5yZXN1bHQuc2l6ZXNUb1NhdmUpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSxcbiAgICB7IHNpemVEYXRhOiB7fSwgc2l6ZXNUb1NhdmU6IFtdIH0sXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJyZXNpemVBbmRUcmFuc2Zvcm1JbWFnZVNpemVzIiwiZ2V0U2FuaXRpemVkSW1hZ2VEYXRhIiwic291cmNlSW1hZ2UiLCJleHRlbnNpb24iLCJzcGxpdCIsInBvcCIsIm5hbWUiLCJzYW5pdGl6ZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiZXh0IiwiY3JlYXRlSW1hZ2VOYW1lIiwib3V0cHV0SW1hZ2VOYW1lIiwiaGVpZ2h0Iiwid2lkdGgiLCJjcmVhdGVSZXN1bHQiLCJmaWxlbmFtZSIsImZpbGVzaXplIiwibWltZVR5cGUiLCJzaXplc1RvU2F2ZSIsInNpemVEYXRhIiwicHJldmVudFJlc2l6ZSIsImRlc2lyZWRIZWlnaHQiLCJkZXNpcmVkV2lkdGgiLCJ3aXRob3V0RW5sYXJnZW1lbnQiLCJ3aXRob3V0UmVkdWN0aW9uIiwib3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJpc1dpZHRoT3JIZWlnaHROb3REZWZpbmVkIiwiaGFzSW5zdWZmaWNpZW50V2lkdGgiLCJoYXNJbnN1ZmZpY2llbnRIZWlnaHQiLCJhcHBseVBheWxvYWRBZGp1c3RtZW50cyIsImlzTnVtYmVyIiwidGFyZ2V0QXNwZWN0UmF0aW8iLCJvcmlnaW5hbEFzcGVjdFJhdGlvIiwic2tpcEVubGFyZ2VtZW50Iiwic2tpcFJlZHVjdGlvbiIsInNhbml0aXplUmVzaXplQ29uZmlnIiwicmVzaXplQ29uZmlnIiwiZml0IiwicG9zaXRpb24iLCJjb25maWciLCJkaW1lbnNpb25zIiwiZmlsZSIsInJlcSIsInNhdmVkRmlsZW5hbWUiLCJzdGF0aWNQYXRoIiwiaW1hZ2VTaXplcyIsInVwbG9hZCIsInNoYXJwQmFzZSIsInNoYXJwIiwidGVtcEZpbGVQYXRoIiwiZGF0YSIsInJvdGF0ZSIsInJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwiaW1hZ2VSZXNpemVDb25maWciLCJpbWFnZVRvUmVzaXplIiwiY2xvbmUiLCJyZXNpemVkIiwicmVzaXplIiwicXVlcnkiLCJ1cGxvYWRFZGl0cyIsImZvY2FsUG9pbnQiLCJyZXNpemVIZWlnaHQiLCJyZXNpemVXaWR0aCIsInJlc2l6ZUFzcGVjdFJhdGlvIiwicHJpb3JpdGl6ZUhlaWdodCIsInNjYWxlZEltYWdlIiwiaW5mbyIsInNjYWxlZEltYWdlSW5mbyIsInRvQnVmZmVyIiwicmVzb2x2ZVdpdGhPYmplY3QiLCJ4IiwieSIsInNhZmVSZXNpemVXaWR0aCIsIm1heE9mZnNldFgiLCJsZWZ0Rm9jYWxFZGdlIiwiTWF0aCIsInJvdW5kIiwic2FmZU9mZnNldFgiLCJtaW4iLCJtYXgiLCJzYWZlUmVzaXplSGVpZ2h0IiwibWF4T2Zmc2V0WSIsInRvcEZvY2FsRWRnZSIsInNhZmVPZmZzZXRZIiwiZXh0cmFjdCIsImxlZnQiLCJ0b3AiLCJmb3JtYXRPcHRpb25zIiwidG9Gb3JtYXQiLCJmb3JtYXQiLCJvcHRpb25zIiwidHJpbU9wdGlvbnMiLCJ0cmltIiwiYnVmZmVyRGF0YSIsImJ1ZmZlckluZm8iLCJzYW5pdGl6ZWRJbWFnZSIsInBheWxvYWRVcGxvYWRTaXplcyIsIm1pbWVJbmZvIiwiZnJvbUJ1ZmZlciIsImltYWdlTmFtZVdpdGhEaW1lbnNpb25zIiwiaW1hZ2VQYXRoIiwiZmlsZUV4aXN0cyIsImZzIiwidW5saW5rU3luYyIsInNpemUiLCJtaW1lIiwiYnVmZmVyIiwicGF0aCIsInJlZHVjZSIsImFjYyIsInJlc3VsdCIsIk9iamVjdCIsImFzc2lnbiIsInB1c2giXSwibWFwcGluZ3MiOiI7Ozs7K0JBa01BOzs7Ozs7Ozs7Ozs7O0NBYUMsR0FDRDs7O2VBQThCQTs7OzBCQTdNSDsyREFDWjt5RUFDTTs4REFDSDswQkFPTzttRUFDRjs7Ozs7O0FBMkJ2Qjs7Ozs7Q0FLQyxHQUNELE1BQU1DLHdCQUF3QixDQUFDQztJQUM3QixNQUFNQyxZQUFZRCxZQUFZRSxLQUFLLENBQUMsS0FBS0MsR0FBRztJQUM1QyxNQUFNQyxPQUFPQyxJQUFBQSx5QkFBUSxFQUFDTCxZQUFZTSxTQUFTLENBQUMsR0FBR04sWUFBWU8sV0FBVyxDQUFDLFNBQVNQO0lBQ2hGLE9BQU87UUFBRUk7UUFBTUksS0FBS1A7SUFBVTtBQUNoQztBQUVBOzs7Ozs7Ozs7Ozs7Q0FZQyxHQUNELE1BQU1RLGtCQUFrQixDQUN0QkMsaUJBQ0EsRUFBRUMsTUFBTSxFQUFFQyxLQUFLLEVBQWMsRUFDN0JYLFlBQ0csQ0FBQyxFQUFFUyxnQkFBZ0IsQ0FBQyxFQUFFRSxNQUFNLENBQUMsRUFBRUQsT0FBTyxDQUFDLEVBQUVWLFVBQVUsQ0FBQztBQUV6RDs7Ozs7Ozs7Ozs7OztDQWFDLEdBQ0QsTUFBTVksZUFBZSxDQUNuQlQsTUFDQVUsV0FBaUMsSUFBSSxFQUNyQ0YsUUFBMkIsSUFBSSxFQUMvQkQsU0FBNkIsSUFBSSxFQUNqQ0ksV0FBaUMsSUFBSSxFQUNyQ0MsV0FBaUMsSUFBSSxFQUNyQ0MsY0FBNEIsRUFBRSxHQUNSLENBQUE7UUFDdEJDLFVBQVU7WUFDUixDQUFDZCxLQUFLLEVBQUU7Z0JBQ05VO2dCQUNBQztnQkFDQUo7Z0JBQ0FLO2dCQUNBSjtZQUNGO1FBQ0Y7UUFDQUs7SUFDRixDQUFBO0FBRUE7Ozs7Ozs7OztDQVNDLEdBQ0QsTUFBTUUsZ0JBQWdCLENBQ3BCLEVBQUVSLFFBQVFTLGFBQWEsRUFBRVIsT0FBT1MsWUFBWSxFQUFFQyxrQkFBa0IsRUFBRUMsZ0JBQWdCLEVBQWEsRUFDL0ZDO0lBRUEsZ0NBQWdDO0lBQ2hDLElBQUlELHFCQUFxQkUsV0FBVztRQUNsQyxPQUFPLE1BQU0sZUFBZTs7SUFDOUI7SUFFQSxvQ0FBb0M7SUFDcEMsSUFBSUgsdUJBQXVCRyxXQUFXO1FBQ3BDLE9BQU8sTUFBTSxlQUFlOztJQUM5QjtJQUVBLE1BQU1DLDRCQUE0QixDQUFDTixpQkFBaUIsQ0FBQ0M7SUFDckQsSUFBSUssMkJBQTJCO1FBQzdCLDRFQUE0RTtRQUM1RSxxREFBcUQ7UUFDckQsT0FBTyxNQUFNLGVBQWU7O0lBQzlCO0lBRUEsTUFBTUMsdUJBQXVCTixlQUFlRyxTQUFTWixLQUFLO0lBQzFELE1BQU1nQix3QkFBd0JSLGdCQUFnQkksU0FBU2IsTUFBTTtJQUM3RCxJQUFJZ0Isd0JBQXdCQyx1QkFBdUI7UUFDakQsZ0hBQWdIO1FBQ2hILDRHQUE0RztRQUM1RyxpREFBaUQ7UUFDakQsT0FBTyxLQUFLLDJCQUEyQjs7SUFDekM7SUFFQSxPQUFPLE1BQU0sZUFBZTs7QUFDOUI7QUFFQTs7Ozs7O0NBTUMsR0FDRCxNQUFNQywwQkFBMEIsQ0FDOUIsRUFBRWxCLE1BQU0sRUFBRUMsS0FBSyxFQUFFVSxrQkFBa0IsRUFBRUMsZ0JBQWdCLEVBQWEsRUFDbEVDO0lBRUEsSUFBSSxDQUFDTSxJQUFBQSxrQkFBUSxFQUFDbkIsV0FBVyxDQUFDbUIsSUFBQUEsa0JBQVEsRUFBQ2xCLFFBQVEsT0FBTztJQUVsRCxNQUFNbUIsb0JBQW9CbkIsUUFBUUQ7SUFDbEMsTUFBTXFCLHNCQUFzQlIsU0FBU1osS0FBSyxHQUFHWSxTQUFTYixNQUFNO0lBQzVELElBQUlxQix3QkFBd0JELG1CQUFtQixPQUFPO0lBRXRELE1BQU1FLGtCQUFrQlgsc0JBQXVCRSxDQUFBQSxTQUFTYixNQUFNLEdBQUdBLFVBQVVhLFNBQVNaLEtBQUssR0FBR0EsS0FBSTtJQUNoRyxNQUFNc0IsZ0JBQWdCWCxvQkFBcUJDLENBQUFBLFNBQVNiLE1BQU0sR0FBR0EsVUFBVWEsU0FBU1osS0FBSyxHQUFHQSxLQUFJO0lBQzVGLElBQUlxQixtQkFBbUJDLGVBQWUsT0FBTztJQUU3QyxPQUFPO0FBQ1Q7QUFFQTs7Ozs7OztDQU9DLEdBQ0QsTUFBTUMsdUJBQXVCLENBQUNDO0lBQzVCLElBQUlBLGFBQWFiLGdCQUFnQixFQUFFO1FBQ2pDLE9BQU87WUFDTCxHQUFHYSxZQUFZO1lBQ2Ysc0ZBQXNGO1lBQ3RGQyxLQUFLRCxjQUFjQyxPQUFPO1lBQzFCQyxVQUFVRixjQUFjRSxZQUFZO1FBQ3RDO0lBQ0Y7SUFDQSxPQUFPRjtBQUNUO0FBZ0JlLGVBQWV0Qyw2QkFBNkIsRUFDekR5QyxNQUFNLEVBQ05DLFVBQVUsRUFDVkMsSUFBSSxFQUNKekIsUUFBUSxFQUNSMEIsR0FBRyxFQUNIQyxhQUFhLEVBQ2JDLFVBQVUsRUFDQztJQUNYLE1BQU0sRUFBRUMsVUFBVSxFQUFFLEdBQUdOLE9BQU9PLE1BQU07SUFDcEMsdURBQXVEO0lBQ3ZELElBQUksQ0FBQ0QsWUFBWSxPQUFPO1FBQUUzQixVQUFVLENBQUM7UUFBR0QsYUFBYSxFQUFFO0lBQUM7SUFFeEQsTUFBTThCLFlBQVlDLElBQUFBLGNBQUssRUFBQ1AsS0FBS1EsWUFBWSxJQUFJUixLQUFLUyxJQUFJLEVBQUVDLE1BQU0sR0FBRyxtR0FBbUc7O0lBRXBLLE1BQU1DLFVBQThCLE1BQU1DLFFBQVFDLEdBQUcsQ0FDbkRULFdBQVdVLEdBQUcsQ0FBQyxPQUFPQztRQUNwQkEsb0JBQW9CckIscUJBQXFCcUI7UUFFekMsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSxnRUFBZ0U7UUFDaEUsSUFBSXJDLGNBQWNxQyxtQkFBbUJoQixhQUFhO1lBQ2hELE9BQU8zQixhQUFhMkMsa0JBQWtCcEQsSUFBSTtRQUM1QztRQUVBLE1BQU1xRCxnQkFBZ0JWLFVBQVVXLEtBQUs7UUFDckMsSUFBSUMsVUFBVUYsY0FBY0csTUFBTSxDQUFDSjtRQUVuQyxJQUNFZCxJQUFJbUIsS0FBSyxFQUFFQyxhQUFhQyxjQUN4QmxDLHdCQUF3QjJCLG1CQUFtQmhCLGFBQzNDO1lBQ0EsTUFBTSxFQUFFN0IsUUFBUXFELFlBQVksRUFBRXBELE9BQU9xRCxXQUFXLEVBQUUsR0FBR1Q7WUFDckQsTUFBTVUsb0JBQW9CRCxjQUFjRDtZQUN4QyxNQUFNaEMsc0JBQXNCUSxXQUFXNUIsS0FBSyxHQUFHNEIsV0FBVzdCLE1BQU07WUFDaEUsTUFBTXdELG1CQUFtQkQsb0JBQW9CbEM7WUFFN0MsMERBQTBEO1lBQzFELE1BQU1vQyxjQUFjWCxjQUFjRyxNQUFNLENBQUM7Z0JBQ3ZDakQsUUFBUXdELG1CQUFtQkgsZUFBZTtnQkFDMUNwRCxPQUFPdUQsbUJBQW1CLE9BQU9GO1lBQ25DO1lBQ0EsTUFBTSxFQUFFSSxNQUFNQyxlQUFlLEVBQUUsR0FBRyxNQUFNRixZQUFZRyxRQUFRLENBQUM7Z0JBQUVDLG1CQUFtQjtZQUFLO1lBRXZGLDBCQUEwQjtZQUMxQixNQUFNVCxhQUFhO2dCQUNqQlUsR0FBRzNDLElBQUFBLGtCQUFRLEVBQUNZLElBQUltQixLQUFLLENBQUNDLFdBQVcsQ0FBQ0MsVUFBVSxFQUFFVSxLQUMxQy9CLElBQUltQixLQUFLLENBQUNDLFdBQVcsQ0FBQ0MsVUFBVSxDQUFDVSxDQUFDLEdBQ2xDO2dCQUNKQyxHQUFHNUMsSUFBQUEsa0JBQVEsRUFBQ1ksSUFBSW1CLEtBQUssQ0FBQ0MsV0FBVyxDQUFDQyxVQUFVLEVBQUVXLEtBQzFDaEMsSUFBSW1CLEtBQUssQ0FBQ0MsV0FBVyxDQUFDQyxVQUFVLENBQUNXLENBQUMsR0FDbEM7WUFDTjtZQUVBLE1BQU1DLGtCQUFrQlYsZUFBZUssZ0JBQWdCMUQsS0FBSztZQUM1RCxNQUFNZ0UsYUFBYU4sZ0JBQWdCMUQsS0FBSyxHQUFHK0Q7WUFDM0MsTUFBTUUsZ0JBQWdCQyxLQUFLQyxLQUFLLENBQzlCVCxnQkFBZ0IxRCxLQUFLLEdBQUltRCxDQUFBQSxXQUFXVSxDQUFDLEdBQUcsR0FBRSxJQUFLRSxrQkFBa0I7WUFFbkUsTUFBTUssY0FBY0YsS0FBS0csR0FBRyxDQUFDSCxLQUFLSSxHQUFHLENBQUMsR0FBR0wsZ0JBQWdCRDtZQUV6RCxNQUFNTyxtQkFBbUJuQixnQkFBZ0JNLGdCQUFnQjNELE1BQU07WUFDL0QsTUFBTXlFLGFBQWFkLGdCQUFnQjNELE1BQU0sR0FBR3dFO1lBQzVDLE1BQU1FLGVBQWVQLEtBQUtDLEtBQUssQ0FDN0JULGdCQUFnQjNELE1BQU0sR0FBSW9ELENBQUFBLFdBQVdXLENBQUMsR0FBRyxHQUFFLElBQUtTLG1CQUFtQjtZQUVyRSxNQUFNRyxjQUFjUixLQUFLRyxHQUFHLENBQUNILEtBQUtJLEdBQUcsQ0FBQyxHQUFHRyxlQUFlRDtZQUV4RCwrQ0FBK0M7WUFDL0N6QixVQUFVUyxZQUFZbUIsT0FBTyxDQUFDO2dCQUM1QjVFLFFBQVF3RTtnQkFDUkssTUFBTVI7Z0JBQ05TLEtBQUtIO2dCQUNMMUUsT0FBTytEO1lBQ1Q7UUFDRjtRQUVBLElBQUluQixrQkFBa0JrQyxhQUFhLEVBQUU7WUFDbkMvQixVQUFVQSxRQUFRZ0MsUUFBUSxDQUN4Qm5DLGtCQUFrQmtDLGFBQWEsQ0FBQ0UsTUFBTSxFQUN0Q3BDLGtCQUFrQmtDLGFBQWEsQ0FBQ0csT0FBTztRQUUzQztRQUVBLElBQUlyQyxrQkFBa0JzQyxXQUFXLEVBQUU7WUFDakNuQyxVQUFVQSxRQUFRb0MsSUFBSSxDQUFDdkMsa0JBQWtCc0MsV0FBVztRQUN0RDtRQUVBLE1BQU0sRUFBRTVDLE1BQU04QyxVQUFVLEVBQUUzQixNQUFNNEIsVUFBVSxFQUFFLEdBQUcsTUFBTXRDLFFBQVFZLFFBQVEsQ0FBQztZQUNwRUMsbUJBQW1CO1FBQ3JCO1FBRUEsTUFBTTBCLGlCQUFpQm5HLHNCQUFzQjRDO1FBRTdDLElBQUlELElBQUl5RCxrQkFBa0IsRUFBRTtZQUMxQnpELElBQUl5RCxrQkFBa0IsQ0FBQzNDLGtCQUFrQnBELElBQUksQ0FBQyxHQUFHNEY7UUFDbkQ7UUFFQSxNQUFNSSxXQUFXLE1BQU1DLElBQUFBLG9CQUFVLEVBQUNMO1FBRWxDLE1BQU1NLDBCQUEwQjdGLGdCQUM5QnlGLGVBQWU5RixJQUFJLEVBQ25CNkYsWUFDQUcsVUFBVTVGLE9BQU8wRixlQUFlMUYsR0FBRztRQUdyQyxNQUFNK0YsWUFBWSxDQUFDLEVBQUUzRCxXQUFXLENBQUMsRUFBRTBELHdCQUF3QixDQUFDO1FBRTVELElBQUksTUFBTUUsSUFBQUEsbUJBQVUsRUFBQ0QsWUFBWTtZQUMvQixJQUFJO2dCQUNGRSxXQUFFLENBQUNDLFVBQVUsQ0FBQ0g7WUFDaEIsRUFBRSxPQUFNO1lBQ04sdUJBQXVCO1lBQ3pCO1FBQ0Y7UUFFQSxNQUFNLEVBQUU1RixNQUFNLEVBQUVnRyxJQUFJLEVBQUUvRixLQUFLLEVBQUUsR0FBR3FGO1FBQ2hDLE9BQU9wRixhQUNMMkMsa0JBQWtCcEQsSUFBSSxFQUN0QmtHLHlCQUNBMUYsT0FDQUQsUUFDQWdHLE1BQ0FQLFVBQVVRLFFBQVE1RixVQUNsQjtZQUFDO2dCQUFFNkYsUUFBUWI7Z0JBQVljLE1BQU1QO1lBQVU7U0FBRTtJQUU3QztJQUdGLE9BQU9uRCxRQUFRMkQsTUFBTSxDQUNuQixDQUFDQyxLQUFLQztRQUNKQyxPQUFPQyxNQUFNLENBQUNILElBQUk5RixRQUFRLEVBQUUrRixPQUFPL0YsUUFBUTtRQUMzQzhGLElBQUkvRixXQUFXLENBQUNtRyxJQUFJLElBQUlILE9BQU9oRyxXQUFXO1FBQzFDLE9BQU8rRjtJQUNULEdBQ0E7UUFBRTlGLFVBQVUsQ0FBQztRQUFHRCxhQUFhLEVBQUU7SUFBQztBQUVwQyJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fieldSchemaToJSON.d.ts","sourceRoot":"","sources":["../../src/utilities/fieldSchemaToJSON.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,UAAU,CAAA;CACvB,EAAE,CAAA;AAEH,eAAO,MAAM,iBAAiB,WAAY,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"fieldSchemaToJSON.d.ts","sourceRoot":"","sources":["../../src/utilities/fieldSchemaToJSON.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnD,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,UAAU,CAAA;CACvB,EAAE,CAAA;AAEH,eAAO,MAAM,iBAAiB,WAAY,KAAK,EAAE,oBAkGhD,CAAA"}
|
|
@@ -13,19 +13,37 @@ const fieldSchemaToJSON = (fields)=>{
|
|
|
13
13
|
let result = acc;
|
|
14
14
|
switch(field.type){
|
|
15
15
|
case 'group':
|
|
16
|
-
case 'array':
|
|
17
16
|
acc.push({
|
|
18
17
|
name: field.name,
|
|
19
18
|
fields: fieldSchemaToJSON(field.fields),
|
|
20
19
|
type: field.type
|
|
21
20
|
});
|
|
22
21
|
break;
|
|
22
|
+
case 'array':
|
|
23
|
+
acc.push({
|
|
24
|
+
name: field.name,
|
|
25
|
+
fields: fieldSchemaToJSON([
|
|
26
|
+
...field.fields,
|
|
27
|
+
{
|
|
28
|
+
name: 'id',
|
|
29
|
+
type: 'text'
|
|
30
|
+
}
|
|
31
|
+
]),
|
|
32
|
+
type: field.type
|
|
33
|
+
});
|
|
34
|
+
break;
|
|
23
35
|
case 'blocks':
|
|
24
36
|
acc.push({
|
|
25
37
|
name: field.name,
|
|
26
38
|
blocks: field.blocks.reduce((acc, block)=>{
|
|
27
39
|
acc[block.slug] = {
|
|
28
|
-
fields: fieldSchemaToJSON(
|
|
40
|
+
fields: fieldSchemaToJSON([
|
|
41
|
+
...block.fields,
|
|
42
|
+
{
|
|
43
|
+
name: 'id',
|
|
44
|
+
type: 'text'
|
|
45
|
+
}
|
|
46
|
+
])
|
|
29
47
|
};
|
|
30
48
|
return acc;
|
|
31
49
|
}, {}),
|
|
@@ -74,4 +92,4 @@ const fieldSchemaToJSON = (fields)=>{
|
|
|
74
92
|
}, []);
|
|
75
93
|
};
|
|
76
94
|
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmllbGRTY2hlbWFUb0pTT04udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGaWVsZFR5cGVzIH0gZnJvbSAnLi4vZXhwb3J0cy9jb25maWcnXG5pbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSAnLi4vZmllbGRzL2NvbmZpZy90eXBlcydcblxuZXhwb3J0IHR5cGUgRmllbGRTY2hlbWFKU09OID0ge1xuICBibG9ja3M/
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZmllbGRTY2hlbWFUb0pTT04udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBGaWVsZFR5cGVzIH0gZnJvbSAnLi4vZXhwb3J0cy9jb25maWcnXG5pbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSAnLi4vZmllbGRzL2NvbmZpZy90eXBlcydcblxuZXhwb3J0IHR5cGUgRmllbGRTY2hlbWFKU09OID0ge1xuICBibG9ja3M/OiBGaWVsZFNjaGVtYUpTT04gLy8gVE9ETzogY29uZGl0aW9uYWxseSBhZGQgYmFzZWQgb24gYHR5cGVgXG4gIGZpZWxkcz86IEZpZWxkU2NoZW1hSlNPTiAvLyBUT0RPOiBjb25kaXRpb25hbGx5IGFkZCBiYXNlZCBvbiBgdHlwZWBcbiAgaGFzTWFueT86IGJvb2xlYW4gLy8gVE9ETzogY29uZGl0aW9uYWxseSBhZGQgYmFzZWQgb24gYHR5cGVgXG4gIG5hbWU6IHN0cmluZ1xuICByZWxhdGlvblRvPzogc3RyaW5nIC8vIFRPRE86IGNvbmRpdGlvbmFsbHkgYWRkIGJhc2VkIG9uIGB0eXBlYFxuICBzbHVnPzogc3RyaW5nIC8vIFRPRE86IGNvbmRpdGlvbmFsbHkgYWRkIGJhc2VkIG9uIGB0eXBlYFxuICB0eXBlOiBrZXlvZiBGaWVsZFR5cGVzXG59W11cblxuZXhwb3J0IGNvbnN0IGZpZWxkU2NoZW1hVG9KU09OID0gKGZpZWxkczogRmllbGRbXSk6IEZpZWxkU2NoZW1hSlNPTiA9PiB7XG4gIHJldHVybiBmaWVsZHMucmVkdWNlKChhY2MsIGZpZWxkKSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9IGFjY1xuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICdncm91cCc6XG4gICAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLFxuICAgICAgICAgIGZpZWxkczogZmllbGRTY2hlbWFUb0pTT04oZmllbGQuZmllbGRzKSxcbiAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZFNjaGVtYVRvSlNPTihbXG4gICAgICAgICAgICAuLi5maWVsZC5maWVsZHMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSksXG4gICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgfSlcblxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdibG9ja3MnOlxuICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgICAgICBibG9ja3M6IGZpZWxkLmJsb2Nrcy5yZWR1Y2UoKGFjYywgYmxvY2spID0+IHtcbiAgICAgICAgICAgIGFjY1tibG9jay5zbHVnXSA9IHtcbiAgICAgICAgICAgICAgZmllbGRzOiBmaWVsZFNjaGVtYVRvSlNPTihbXG4gICAgICAgICAgICAgICAgLi4uYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgICB9LCB7fSksXG4gICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgfSlcblxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlICdyb3cnOlxuICAgICAgY2FzZSAnY29sbGFwc2libGUnOlxuICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGZpZWxkU2NoZW1hVG9KU09OKGZpZWxkLmZpZWxkcykpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgJ3RhYnMnOiB7XG4gICAgICAgIGxldCB0YWJGaWVsZHMgPSBbXVxuXG4gICAgICAgIGZpZWxkLnRhYnMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgICAgaWYgKCduYW1lJyBpbiB0YWIpIHtcbiAgICAgICAgICAgIHRhYkZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgbmFtZTogdGFiLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkczogZmllbGRTY2hlbWFUb0pTT04odGFiLmZpZWxkcyksXG4gICAgICAgICAgICAgIHR5cGU6ICd0YWInLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhYkZpZWxkcyA9IHRhYkZpZWxkcy5jb25jYXQoZmllbGRTY2hlbWFUb0pTT04odGFiLmZpZWxkcykpXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdCh0YWJGaWVsZHMpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLFxuICAgICAgICAgIGhhc01hbnk6ICdoYXNNYW55JyBpbiBmaWVsZCA/IEJvb2xlYW4oZmllbGQuaGFzTWFueSkgOiBmYWxzZSwgLy8gVE9ETzogdHlwZSB0aGlzXG4gICAgICAgICAgcmVsYXRpb25UbzogZmllbGQucmVsYXRpb25UbyxcbiAgICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICgnbmFtZScgaW4gZmllbGQpIHtcbiAgICAgICAgICBhY2MucHVzaCh7XG4gICAgICAgICAgICBuYW1lOiBmaWVsZC5uYW1lLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9LCBbXSlcbn1cbiJdLCJuYW1lcyI6WyJmaWVsZFNjaGVtYVRvSlNPTiIsImZpZWxkcyIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwicmVzdWx0IiwidHlwZSIsInB1c2giLCJuYW1lIiwiYmxvY2tzIiwiYmxvY2siLCJzbHVnIiwiY29uY2F0IiwidGFiRmllbGRzIiwidGFicyIsImZvckVhY2giLCJ0YWIiLCJoYXNNYW55IiwiQm9vbGVhbiIsInJlbGF0aW9uVG8iXSwibWFwcGluZ3MiOiI7Ozs7K0JBYWFBOzs7ZUFBQUE7OztBQUFOLE1BQU1BLG9CQUFvQixDQUFDQztJQUNoQyxPQUFPQSxPQUFPQyxNQUFNLENBQUMsQ0FBQ0MsS0FBS0M7UUFDekIsSUFBSUMsU0FBU0Y7UUFFYixPQUFRQyxNQUFNRSxJQUFJO1lBQ2hCLEtBQUs7Z0JBQ0hILElBQUlJLElBQUksQ0FBQztvQkFDUEMsTUFBTUosTUFBTUksSUFBSTtvQkFDaEJQLFFBQVFELGtCQUFrQkksTUFBTUgsTUFBTTtvQkFDdENLLE1BQU1GLE1BQU1FLElBQUk7Z0JBQ2xCO2dCQUVBO1lBRUYsS0FBSztnQkFDSEgsSUFBSUksSUFBSSxDQUFDO29CQUNQQyxNQUFNSixNQUFNSSxJQUFJO29CQUNoQlAsUUFBUUQsa0JBQWtCOzJCQUNyQkksTUFBTUgsTUFBTTt3QkFDZjs0QkFDRU8sTUFBTTs0QkFDTkYsTUFBTTt3QkFDUjtxQkFDRDtvQkFDREEsTUFBTUYsTUFBTUUsSUFBSTtnQkFDbEI7Z0JBRUE7WUFFRixLQUFLO2dCQUNISCxJQUFJSSxJQUFJLENBQUM7b0JBQ1BDLE1BQU1KLE1BQU1JLElBQUk7b0JBQ2hCQyxRQUFRTCxNQUFNSyxNQUFNLENBQUNQLE1BQU0sQ0FBQyxDQUFDQyxLQUFLTzt3QkFDaENQLEdBQUcsQ0FBQ08sTUFBTUMsSUFBSSxDQUFDLEdBQUc7NEJBQ2hCVixRQUFRRCxrQkFBa0I7bUNBQ3JCVSxNQUFNVCxNQUFNO2dDQUNmO29DQUNFTyxNQUFNO29DQUNORixNQUFNO2dDQUNSOzZCQUNEO3dCQUNIO3dCQUVBLE9BQU9IO29CQUNULEdBQUcsQ0FBQztvQkFDSkcsTUFBTUYsTUFBTUUsSUFBSTtnQkFDbEI7Z0JBRUE7WUFFRixLQUFLO1lBQ0wsS0FBSztnQkFDSEQsU0FBU0EsT0FBT08sTUFBTSxDQUFDWixrQkFBa0JJLE1BQU1ILE1BQU07Z0JBQ3JEO1lBRUYsS0FBSztnQkFBUTtvQkFDWCxJQUFJWSxZQUFZLEVBQUU7b0JBRWxCVCxNQUFNVSxJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDQzt3QkFDbEIsSUFBSSxVQUFVQSxLQUFLOzRCQUNqQkgsVUFBVU4sSUFBSSxDQUFDO2dDQUNiQyxNQUFNUSxJQUFJUixJQUFJO2dDQUNkUCxRQUFRRCxrQkFBa0JnQixJQUFJZixNQUFNO2dDQUNwQ0ssTUFBTTs0QkFDUjs0QkFDQTt3QkFDRjt3QkFFQU8sWUFBWUEsVUFBVUQsTUFBTSxDQUFDWixrQkFBa0JnQixJQUFJZixNQUFNO29CQUMzRDtvQkFFQUksU0FBU0EsT0FBT08sTUFBTSxDQUFDQztvQkFFdkI7Z0JBQ0Y7WUFFQSxLQUFLO1lBQ0wsS0FBSztnQkFDSFYsSUFBSUksSUFBSSxDQUFDO29CQUNQQyxNQUFNSixNQUFNSSxJQUFJO29CQUNoQlMsU0FBUyxhQUFhYixRQUFRYyxRQUFRZCxNQUFNYSxPQUFPLElBQUk7b0JBQ3ZERSxZQUFZZixNQUFNZSxVQUFVO29CQUM1QmIsTUFBTUYsTUFBTUUsSUFBSTtnQkFDbEI7Z0JBRUE7WUFFRjtnQkFDRSxJQUFJLFVBQVVGLE9BQU87b0JBQ25CRCxJQUFJSSxJQUFJLENBQUM7d0JBQ1BDLE1BQU1KLE1BQU1JLElBQUk7d0JBQ2hCRixNQUFNRixNQUFNRSxJQUFJO29CQUNsQjtnQkFDRjtRQUNKO1FBRUEsT0FBT0Q7SUFDVCxHQUFHLEVBQUU7QUFDUCJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "payload",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Node, React and MongoDB Headless CMS and Application Framework",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
"terser-webpack-plugin": "5.3.9",
|
|
99
99
|
"ts-essentials": "7.0.3",
|
|
100
100
|
"use-context-selector": "1.4.1",
|
|
101
|
-
"uuid": "
|
|
101
|
+
"uuid": "9.0.1"
|
|
102
102
|
},
|
|
103
103
|
"devDependencies": {
|
|
104
104
|
"@release-it/conventional-changelog": "7.0.0",
|