@payloadcms/next 3.0.0-alpha.31 → 3.0.0-alpha.33
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/elements/ClearRouteCache/index.d.ts +3 -0
- package/dist/elements/ClearRouteCache/index.d.ts.map +1 -0
- package/dist/elements/ClearRouteCache/index.js +16 -0
- package/dist/layouts/Root/index.d.ts.map +1 -1
- package/dist/layouts/Root/index.js +9 -8
- package/dist/next-fileupload/fileFactory.d.ts +1 -1
- package/dist/next-fileupload/fileFactory.d.ts.map +1 -1
- package/dist/next-fileupload/fileFactory.js +1 -1
- package/dist/next-fileupload/handlers.d.ts +1 -1
- package/dist/next-fileupload/handlers.d.ts.map +1 -1
- package/dist/next-fileupload/handlers.js +1 -1
- package/dist/routes/index.d.ts +0 -1
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +1 -2
- package/dist/routes/rest/auth/access.d.ts +1 -1
- package/dist/routes/rest/auth/access.d.ts.map +1 -1
- package/dist/routes/rest/auth/access.js +1 -1
- package/dist/routes/rest/auth/forgotPassword.d.ts +1 -1
- package/dist/routes/rest/auth/forgotPassword.d.ts.map +1 -1
- package/dist/routes/rest/auth/forgotPassword.js +1 -1
- package/dist/routes/rest/auth/init.d.ts +1 -1
- package/dist/routes/rest/auth/init.d.ts.map +1 -1
- package/dist/routes/rest/auth/init.js +1 -1
- package/dist/routes/rest/auth/login.d.ts +1 -1
- package/dist/routes/rest/auth/login.d.ts.map +1 -1
- package/dist/routes/rest/auth/login.js +1 -1
- package/dist/routes/rest/auth/logout.d.ts +1 -1
- package/dist/routes/rest/auth/logout.d.ts.map +1 -1
- package/dist/routes/rest/auth/logout.js +1 -1
- package/dist/routes/rest/auth/me.d.ts +1 -1
- package/dist/routes/rest/auth/me.d.ts.map +1 -1
- package/dist/routes/rest/auth/me.js +1 -1
- package/dist/routes/rest/auth/refresh.d.ts +1 -1
- package/dist/routes/rest/auth/refresh.d.ts.map +1 -1
- package/dist/routes/rest/auth/refresh.js +1 -1
- package/dist/routes/rest/auth/registerFirstUser.d.ts +1 -1
- package/dist/routes/rest/auth/registerFirstUser.d.ts.map +1 -1
- package/dist/routes/rest/auth/registerFirstUser.js +1 -1
- package/dist/routes/rest/auth/resetPassword.d.ts +1 -1
- package/dist/routes/rest/auth/resetPassword.d.ts.map +1 -1
- package/dist/routes/rest/auth/resetPassword.js +1 -1
- package/dist/routes/rest/auth/unlock.d.ts +1 -1
- package/dist/routes/rest/auth/unlock.d.ts.map +1 -1
- package/dist/routes/rest/auth/unlock.js +1 -1
- package/dist/routes/rest/auth/verifyEmail.d.ts +1 -1
- package/dist/routes/rest/auth/verifyEmail.d.ts.map +1 -1
- package/dist/routes/rest/auth/verifyEmail.js +1 -1
- package/dist/routes/rest/collections/create.d.ts +1 -1
- package/dist/routes/rest/collections/create.d.ts.map +1 -1
- package/dist/routes/rest/collections/create.js +1 -1
- package/dist/routes/rest/collections/delete.d.ts +1 -1
- package/dist/routes/rest/collections/delete.d.ts.map +1 -1
- package/dist/routes/rest/collections/delete.js +2 -5
- package/dist/routes/rest/collections/deleteByID.d.ts +1 -1
- package/dist/routes/rest/collections/deleteByID.d.ts.map +1 -1
- package/dist/routes/rest/collections/deleteByID.js +1 -1
- package/dist/routes/rest/collections/docAccess.d.ts +1 -1
- package/dist/routes/rest/collections/docAccess.d.ts.map +1 -1
- package/dist/routes/rest/collections/docAccess.js +1 -1
- package/dist/routes/rest/collections/find.d.ts +1 -1
- package/dist/routes/rest/collections/find.d.ts.map +1 -1
- package/dist/routes/rest/collections/find.js +2 -5
- package/dist/routes/rest/collections/findByID.d.ts +1 -1
- package/dist/routes/rest/collections/findByID.d.ts.map +1 -1
- package/dist/routes/rest/collections/findByID.js +1 -1
- package/dist/routes/rest/collections/findVersionByID.d.ts +1 -1
- package/dist/routes/rest/collections/findVersionByID.d.ts.map +1 -1
- package/dist/routes/rest/collections/findVersionByID.js +1 -1
- package/dist/routes/rest/collections/findVersions.d.ts +1 -1
- package/dist/routes/rest/collections/findVersions.d.ts.map +1 -1
- package/dist/routes/rest/collections/findVersions.js +2 -5
- package/dist/routes/rest/collections/restoreVersion.d.ts +1 -1
- package/dist/routes/rest/collections/restoreVersion.d.ts.map +1 -1
- package/dist/routes/rest/collections/restoreVersion.js +1 -1
- package/dist/routes/rest/collections/update.d.ts +1 -1
- package/dist/routes/rest/collections/update.d.ts.map +1 -1
- package/dist/routes/rest/collections/update.js +2 -5
- package/dist/routes/rest/collections/updateByID.d.ts +1 -1
- package/dist/routes/rest/collections/updateByID.d.ts.map +1 -1
- package/dist/routes/rest/collections/updateByID.js +1 -1
- package/dist/routes/rest/files/checkFileAccess.d.ts +7 -0
- package/dist/routes/rest/files/checkFileAccess.d.ts.map +1 -0
- package/dist/routes/rest/files/checkFileAccess.js +50 -0
- package/dist/routes/rest/files/getFile.d.ts +9 -0
- package/dist/routes/rest/files/getFile.d.ts.map +1 -0
- package/dist/routes/rest/files/getFile.js +52 -0
- package/dist/routes/rest/globals/docAccess.d.ts +1 -1
- package/dist/routes/rest/globals/docAccess.d.ts.map +1 -1
- package/dist/routes/rest/globals/docAccess.js +1 -1
- package/dist/routes/rest/globals/findOne.d.ts +1 -1
- package/dist/routes/rest/globals/findOne.d.ts.map +1 -1
- package/dist/routes/rest/globals/findOne.js +1 -1
- package/dist/routes/rest/globals/findVersionByID.d.ts +1 -1
- package/dist/routes/rest/globals/findVersionByID.d.ts.map +1 -1
- package/dist/routes/rest/globals/findVersionByID.js +1 -1
- package/dist/routes/rest/globals/findVersions.d.ts +1 -1
- package/dist/routes/rest/globals/findVersions.d.ts.map +1 -1
- package/dist/routes/rest/globals/findVersions.js +2 -5
- package/dist/routes/rest/globals/restoreVersion.d.ts +1 -1
- package/dist/routes/rest/globals/restoreVersion.d.ts.map +1 -1
- package/dist/routes/rest/globals/restoreVersion.js +1 -1
- package/dist/routes/rest/globals/update.d.ts +1 -1
- package/dist/routes/rest/globals/update.d.ts.map +1 -1
- package/dist/routes/rest/globals/update.js +1 -1
- package/dist/routes/rest/index.d.ts.map +1 -1
- package/dist/routes/rest/index.js +11 -2
- package/dist/utilities/createPayloadRequest.d.ts.map +1 -1
- package/dist/utilities/createPayloadRequest.js +4 -1
- package/dist/utilities/getDataAndFile.js +2 -2
- package/dist/views/API/index.client.d.ts.map +1 -1
- package/dist/views/API/index.client.js +1 -3
- package/dist/views/Account/index.d.ts +1 -1
- package/dist/views/Account/index.d.ts.map +1 -1
- package/dist/views/Account/index.js +22 -9
- package/dist/views/Account/meta.d.ts +1 -1
- package/dist/views/Account/meta.d.ts.map +1 -1
- package/dist/views/Account/meta.js +1 -1
- package/dist/views/CreateFirstUser/index.d.ts +1 -1
- package/dist/views/CreateFirstUser/index.d.ts.map +1 -1
- package/dist/views/CreateFirstUser/index.js +1 -1
- package/dist/views/CreateFirstUser/meta.d.ts +1 -1
- package/dist/views/CreateFirstUser/meta.d.ts.map +1 -1
- package/dist/views/CreateFirstUser/meta.js +1 -1
- package/dist/views/Dashboard/index.d.ts +1 -1
- package/dist/views/Dashboard/index.d.ts.map +1 -1
- package/dist/views/Dashboard/index.js +1 -1
- package/dist/views/Dashboard/meta.d.ts +1 -1
- package/dist/views/Dashboard/meta.d.ts.map +1 -1
- package/dist/views/Dashboard/meta.js +1 -1
- package/dist/views/Document/getMetaBySegment.d.ts +1 -1
- package/dist/views/Document/getMetaBySegment.d.ts.map +1 -1
- package/dist/views/Document/getMetaBySegment.js +1 -1
- package/dist/views/Document/index.d.ts +2 -2
- package/dist/views/Document/index.d.ts.map +1 -1
- package/dist/views/Document/index.js +15 -14
- package/dist/views/Edit/Default/Auth/index.d.ts +1 -1
- package/dist/views/Edit/Default/Auth/index.d.ts.map +1 -1
- package/dist/views/Edit/Default/Auth/index.js +1 -1
- package/dist/views/Edit/Default/SetDocumentTitle/formatTitle.d.ts.map +1 -1
- package/dist/views/Edit/Default/SetDocumentTitle/formatTitle.js +4 -1
- package/dist/views/Edit/Default/SetDocumentTitle/index.d.ts.map +1 -1
- package/dist/views/Edit/Default/SetDocumentTitle/index.js +7 -2
- package/dist/views/Edit/Default/SetStepNav/index.d.ts +0 -1
- package/dist/views/Edit/Default/SetStepNav/index.d.ts.map +1 -1
- package/dist/views/Edit/Default/SetStepNav/index.js +3 -3
- package/dist/views/Edit/Default/index.js +9 -9
- package/dist/views/Edit/index.client.d.ts.map +1 -1
- package/dist/views/Edit/index.client.js +2 -3
- package/dist/views/List/Default/index.js +1 -1
- package/dist/views/List/index.d.ts +1 -1
- package/dist/views/List/index.d.ts.map +1 -1
- package/dist/views/List/index.js +1 -1
- package/dist/views/List/meta.d.ts +1 -1
- package/dist/views/List/meta.d.ts.map +1 -1
- package/dist/views/List/meta.js +1 -1
- package/dist/views/LivePreview/Context/context.d.ts +2 -2
- package/dist/views/LivePreview/Context/context.d.ts.map +1 -1
- package/dist/views/LivePreview/Context/context.js +1 -1
- package/dist/views/LivePreview/Context/index.d.ts +1 -1
- package/dist/views/LivePreview/Context/index.d.ts.map +1 -1
- package/dist/views/LivePreview/Context/index.js +1 -1
- package/dist/views/LivePreview/index.client.d.ts.map +1 -1
- package/dist/views/LivePreview/index.client.js +1 -2
- package/dist/views/LivePreview/meta.d.ts +1 -1
- package/dist/views/LivePreview/meta.d.ts.map +1 -1
- package/dist/views/LivePreview/meta.js +1 -1
- package/dist/views/Unauthorized/index.d.ts +1 -1
- package/dist/views/Unauthorized/index.d.ts.map +1 -1
- package/dist/views/Unauthorized/index.js +1 -1
- package/dist/views/Unauthorized/meta.d.ts +1 -1
- package/dist/views/Unauthorized/meta.d.ts.map +1 -1
- package/dist/views/Unauthorized/meta.js +1 -1
- package/dist/views/Verify/index.d.ts +1 -1
- package/dist/views/Verify/index.d.ts.map +1 -1
- package/dist/views/Verify/index.js +1 -1
- package/dist/views/Verify/meta.d.ts +1 -1
- package/dist/views/Verify/meta.d.ts.map +1 -1
- package/dist/views/Verify/meta.js +1 -1
- package/dist/views/Version/Default/index.d.ts +1 -1
- package/dist/views/Version/Default/index.d.ts.map +1 -1
- package/dist/views/Version/Default/index.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.d.ts +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.d.ts +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Nested/index.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.d.ts +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/DiffViewer/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/DiffViewer/index.js +2 -3
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.d.ts +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/DiffViewer/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/DiffViewer/index.js +2 -3
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.d.ts +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/index.d.ts +1 -1
- package/dist/views/Version/RenderFieldsToDiff/index.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/index.js +1 -1
- package/dist/views/Version/RenderFieldsToDiff/types.d.ts +1 -1
- package/dist/views/Version/RenderFieldsToDiff/types.d.ts.map +1 -1
- package/dist/views/Version/RenderFieldsToDiff/types.js +1 -1
- package/dist/views/Version/Restore/index.d.ts +1 -1
- package/dist/views/Version/Restore/index.d.ts.map +1 -1
- package/dist/views/Version/Restore/index.js +1 -1
- package/dist/views/Version/SelectComparison/index.d.ts +1 -1
- package/dist/views/Version/SelectComparison/index.d.ts.map +1 -1
- package/dist/views/Version/SelectComparison/index.js +1 -1
- package/dist/views/Version/SelectComparison/types.d.ts +1 -1
- package/dist/views/Version/SelectComparison/types.d.ts.map +1 -1
- package/dist/views/Version/SelectComparison/types.js +1 -1
- package/dist/views/Version/SelectLocales/index.d.ts +1 -1
- package/dist/views/Version/SelectLocales/index.d.ts.map +1 -1
- package/dist/views/Version/SelectLocales/index.js +1 -1
- package/dist/views/Version/meta.d.ts +1 -1
- package/dist/views/Version/meta.d.ts.map +1 -1
- package/dist/views/Version/meta.js +1 -1
- package/dist/views/Versions/index.d.ts.map +1 -1
- package/dist/views/Versions/index.js +1 -2
- package/dist/views/Versions/meta.d.ts +1 -1
- package/dist/views/Versions/meta.d.ts.map +1 -1
- package/dist/views/Versions/meta.js +1 -1
- package/package.json +7 -7
- package/dist/routes/rest/[collection]/file/[filename]/route.d.ts +0 -8
- package/dist/routes/rest/[collection]/file/[filename]/route.d.ts.map +0 -1
- package/dist/routes/rest/[collection]/file/[filename]/route.js +0 -110
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import fsPromises from 'fs/promises';
|
|
2
|
-
import httpStatus from 'http-status';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import { executeAccess } from 'payload/auth';
|
|
5
|
-
import { APIError, Forbidden } from 'payload/errors';
|
|
6
|
-
import { streamFile } from '../../../../../next-stream-file/index.js';
|
|
7
|
-
import { createPayloadRequest } from '../../../../../utilities/createPayloadRequest.js';
|
|
8
|
-
import { RouteError } from '../../../RouteError.js';
|
|
9
|
-
import { endpointsAreDisabled } from '../../../checkEndpoints.js';
|
|
10
|
-
async function checkFileAccess({ collection, filename, req }) {
|
|
11
|
-
const { config } = collection;
|
|
12
|
-
const disableEndpoints = endpointsAreDisabled({
|
|
13
|
-
endpoints: config.endpoints,
|
|
14
|
-
request: req
|
|
15
|
-
});
|
|
16
|
-
if (disableEndpoints) return disableEndpoints;
|
|
17
|
-
const accessResult = await executeAccess({
|
|
18
|
-
isReadingStaticFile: true,
|
|
19
|
-
req
|
|
20
|
-
}, config.access.read);
|
|
21
|
-
if (typeof accessResult === 'object') {
|
|
22
|
-
const queryToBuild = {
|
|
23
|
-
and: [
|
|
24
|
-
{
|
|
25
|
-
or: [
|
|
26
|
-
{
|
|
27
|
-
filename: {
|
|
28
|
-
equals: filename
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
]
|
|
32
|
-
},
|
|
33
|
-
accessResult
|
|
34
|
-
]
|
|
35
|
-
};
|
|
36
|
-
if (config.upload.imageSizes) {
|
|
37
|
-
config.upload.imageSizes.forEach(({ name })=>{
|
|
38
|
-
queryToBuild.and[0].or.push({
|
|
39
|
-
[`sizes.${name}.filename`]: {
|
|
40
|
-
equals: filename
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
const doc = await req.payload.db.findOne({
|
|
46
|
-
collection: config.slug,
|
|
47
|
-
req,
|
|
48
|
-
where: queryToBuild
|
|
49
|
-
});
|
|
50
|
-
if (!doc) {
|
|
51
|
-
throw new Forbidden(req.t);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
export const GET = (config)=>async (request, { params })=>{
|
|
56
|
-
const { collection: collectionSlug, filename } = params;
|
|
57
|
-
let req;
|
|
58
|
-
let collection;
|
|
59
|
-
try {
|
|
60
|
-
req = await createPayloadRequest({
|
|
61
|
-
config,
|
|
62
|
-
params: {
|
|
63
|
-
collection: collectionSlug
|
|
64
|
-
},
|
|
65
|
-
request
|
|
66
|
-
});
|
|
67
|
-
collection = req.payload.collections?.[collectionSlug];
|
|
68
|
-
if (!collection) {
|
|
69
|
-
throw new APIError(`Media collection not found: ${collectionSlug}`, httpStatus.BAD_REQUEST);
|
|
70
|
-
}
|
|
71
|
-
if (!collection.config.upload) {
|
|
72
|
-
throw new APIError(`This collection is not an upload collection: ${collectionSlug}`, httpStatus.BAD_REQUEST);
|
|
73
|
-
}
|
|
74
|
-
if (collection.config.upload.disableLocalStorage && !collection.config.upload.handlers) {
|
|
75
|
-
throw new APIError(`This collection has local storage disabled: ${collectionSlug}`, httpStatus.BAD_REQUEST);
|
|
76
|
-
}
|
|
77
|
-
await checkFileAccess({
|
|
78
|
-
collection,
|
|
79
|
-
filename,
|
|
80
|
-
req
|
|
81
|
-
});
|
|
82
|
-
let response = null;
|
|
83
|
-
if (collection.config.upload.handlers?.length) {
|
|
84
|
-
for (const handler of collection.config.upload.handlers){
|
|
85
|
-
response = await handler(req, {
|
|
86
|
-
params
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
return response;
|
|
90
|
-
}
|
|
91
|
-
const fileDir = collection.config.upload?.staticDir || collection.config.slug;
|
|
92
|
-
const filePath = path.resolve(`${fileDir}/${filename}`);
|
|
93
|
-
const stats = await fsPromises.stat(filePath);
|
|
94
|
-
const data = streamFile(filePath);
|
|
95
|
-
return new Response(data, {
|
|
96
|
-
headers: new Headers({
|
|
97
|
-
'content-length': stats.size + ''
|
|
98
|
-
}),
|
|
99
|
-
status: httpStatus.OK
|
|
100
|
-
});
|
|
101
|
-
} catch (error) {
|
|
102
|
-
return RouteError({
|
|
103
|
-
collection,
|
|
104
|
-
err: error,
|
|
105
|
-
req
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yb3V0ZXMvcmVzdC9bY29sbGVjdGlvbl0vZmlsZS9bZmlsZW5hbWVdL3JvdXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29sbGVjdGlvbiwgUGF5bG9hZFJlcXVlc3QsIFNhbml0aXplZENvbmZpZywgV2hlcmUgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgZnNQcm9taXNlcyBmcm9tICdmcy9wcm9taXNlcydcbmltcG9ydCBodHRwU3RhdHVzIGZyb20gJ2h0dHAtc3RhdHVzJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IGV4ZWN1dGVBY2Nlc3MgfSBmcm9tICdwYXlsb2FkL2F1dGgnXG5pbXBvcnQgeyBBUElFcnJvciwgRm9yYmlkZGVuIH0gZnJvbSAncGF5bG9hZC9lcnJvcnMnXG5cbmltcG9ydCB7IHN0cmVhbUZpbGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9uZXh0LXN0cmVhbS1maWxlL2luZGV4LmpzJ1xuaW1wb3J0IHsgY3JlYXRlUGF5bG9hZFJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsaXRpZXMvY3JlYXRlUGF5bG9hZFJlcXVlc3QuanMnXG5pbXBvcnQgeyBSb3V0ZUVycm9yIH0gZnJvbSAnLi4vLi4vLi4vUm91dGVFcnJvci5qcydcbmltcG9ydCB7IGVuZHBvaW50c0FyZURpc2FibGVkIH0gZnJvbSAnLi4vLi4vLi4vY2hlY2tFbmRwb2ludHMuanMnXG5cbmFzeW5jIGZ1bmN0aW9uIGNoZWNrRmlsZUFjY2Vzcyh7XG4gIGNvbGxlY3Rpb24sXG4gIGZpbGVuYW1lLFxuICByZXEsXG59OiB7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb25cbiAgZmlsZW5hbWU6IHN0cmluZ1xuICByZXE6IFBheWxvYWRSZXF1ZXN0XG59KSB7XG4gIGNvbnN0IHsgY29uZmlnIH0gPSBjb2xsZWN0aW9uXG4gIGNvbnN0IGRpc2FibGVFbmRwb2ludHMgPSBlbmRwb2ludHNBcmVEaXNhYmxlZCh7IGVuZHBvaW50czogY29uZmlnLmVuZHBvaW50cywgcmVxdWVzdDogcmVxIH0pXG4gIGlmIChkaXNhYmxlRW5kcG9pbnRzKSByZXR1cm4gZGlzYWJsZUVuZHBvaW50c1xuXG4gIGNvbnN0IGFjY2Vzc1Jlc3VsdCA9IGF3YWl0IGV4ZWN1dGVBY2Nlc3MoeyBpc1JlYWRpbmdTdGF0aWNGaWxlOiB0cnVlLCByZXEgfSwgY29uZmlnLmFjY2Vzcy5yZWFkKVxuXG4gIGlmICh0eXBlb2YgYWNjZXNzUmVzdWx0ID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHF1ZXJ5VG9CdWlsZDogV2hlcmUgPSB7XG4gICAgICBhbmQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG9yOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpbGVuYW1lOiB7XG4gICAgICAgICAgICAgICAgZXF1YWxzOiBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgYWNjZXNzUmVzdWx0LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLnVwbG9hZC5pbWFnZVNpemVzKSB7XG4gICAgICBjb25maWcudXBsb2FkLmltYWdlU2l6ZXMuZm9yRWFjaCgoeyBuYW1lIH0pID0+IHtcbiAgICAgICAgcXVlcnlUb0J1aWxkLmFuZFswXS5vci5wdXNoKHtcbiAgICAgICAgICBbYHNpemVzLiR7bmFtZX0uZmlsZW5hbWVgXToge1xuICAgICAgICAgICAgZXF1YWxzOiBmaWxlbmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBkb2MgPSBhd2FpdCByZXEucGF5bG9hZC5kYi5maW5kT25lKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbmZpZy5zbHVnLFxuICAgICAgcmVxLFxuICAgICAgd2hlcmU6IHF1ZXJ5VG9CdWlsZCxcbiAgICB9KVxuXG4gICAgaWYgKCFkb2MpIHtcbiAgICAgIHRocm93IG5ldyBGb3JiaWRkZW4ocmVxLnQpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBHRVQgPVxuICAoY29uZmlnOiBQcm9taXNlPFNhbml0aXplZENvbmZpZz4pID0+XG4gIGFzeW5jIChyZXF1ZXN0OiBSZXF1ZXN0LCB7IHBhcmFtcyB9OiB7IHBhcmFtczogeyBjb2xsZWN0aW9uOiBzdHJpbmc7IGZpbGVuYW1lOiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgY29uc3QgeyBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uU2x1ZywgZmlsZW5hbWUgfSA9IHBhcmFtc1xuICAgIGxldCByZXE6IFBheWxvYWRSZXF1ZXN0XG4gICAgbGV0IGNvbGxlY3Rpb246IENvbGxlY3Rpb25cblxuICAgIHRyeSB7XG4gICAgICByZXEgPSBhd2FpdCBjcmVhdGVQYXlsb2FkUmVxdWVzdCh7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcGFyYW1zOiB7IGNvbGxlY3Rpb246IGNvbGxlY3Rpb25TbHVnIH0sXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICB9KVxuXG4gICAgICBjb2xsZWN0aW9uID0gcmVxLnBheWxvYWQuY29sbGVjdGlvbnM/Lltjb2xsZWN0aW9uU2x1Z11cblxuICAgICAgaWYgKCFjb2xsZWN0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBBUElFcnJvcihgTWVkaWEgY29sbGVjdGlvbiBub3QgZm91bmQ6ICR7Y29sbGVjdGlvblNsdWd9YCwgaHR0cFN0YXR1cy5CQURfUkVRVUVTVClcbiAgICAgIH1cblxuICAgICAgaWYgKCFjb2xsZWN0aW9uLmNvbmZpZy51cGxvYWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKFxuICAgICAgICAgIGBUaGlzIGNvbGxlY3Rpb24gaXMgbm90IGFuIHVwbG9hZCBjb2xsZWN0aW9uOiAke2NvbGxlY3Rpb25TbHVnfWAsXG4gICAgICAgICAgaHR0cFN0YXR1cy5CQURfUkVRVUVTVCxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoY29sbGVjdGlvbi5jb25maWcudXBsb2FkLmRpc2FibGVMb2NhbFN0b3JhZ2UgJiYgIWNvbGxlY3Rpb24uY29uZmlnLnVwbG9hZC5oYW5kbGVycykge1xuICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoXG4gICAgICAgICAgYFRoaXMgY29sbGVjdGlvbiBoYXMgbG9jYWwgc3RvcmFnZSBkaXNhYmxlZDogJHtjb2xsZWN0aW9uU2x1Z31gLFxuICAgICAgICAgIGh0dHBTdGF0dXMuQkFEX1JFUVVFU1QsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgYXdhaXQgY2hlY2tGaWxlQWNjZXNzKHtcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgZmlsZW5hbWUsXG4gICAgICAgIHJlcSxcbiAgICAgIH0pXG5cbiAgICAgIGxldCByZXNwb25zZTogUmVzcG9uc2UgPSBudWxsXG4gICAgICBpZiAoY29sbGVjdGlvbi5jb25maWcudXBsb2FkLmhhbmRsZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGNvbGxlY3Rpb24uY29uZmlnLnVwbG9hZC5oYW5kbGVycykge1xuICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgaGFuZGxlcihyZXEsIHsgcGFyYW1zIH0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZURpciA9IGNvbGxlY3Rpb24uY29uZmlnLnVwbG9hZD8uc3RhdGljRGlyIHx8IGNvbGxlY3Rpb24uY29uZmlnLnNsdWdcbiAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGAke2ZpbGVEaXJ9LyR7ZmlsZW5hbWV9YClcblxuICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBmc1Byb21pc2VzLnN0YXQoZmlsZVBhdGgpXG4gICAgICBjb25zdCBkYXRhID0gc3RyZWFtRmlsZShmaWxlUGF0aClcblxuICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZShkYXRhLCB7XG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgICAnY29udGVudC1sZW5ndGgnOiBzdGF0cy5zaXplICsgJycsXG4gICAgICAgIH0pLFxuICAgICAgICBzdGF0dXM6IGh0dHBTdGF0dXMuT0ssXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUm91dGVFcnJvcih7XG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGVycjogZXJyb3IsXG4gICAgICAgIHJlcSxcbiAgICAgIH0pXG4gICAgfVxuICB9XG4iXSwibmFtZXMiOlsiZnNQcm9taXNlcyIsImh0dHBTdGF0dXMiLCJwYXRoIiwiZXhlY3V0ZUFjY2VzcyIsIkFQSUVycm9yIiwiRm9yYmlkZGVuIiwic3RyZWFtRmlsZSIsImNyZWF0ZVBheWxvYWRSZXF1ZXN0IiwiUm91dGVFcnJvciIsImVuZHBvaW50c0FyZURpc2FibGVkIiwiY2hlY2tGaWxlQWNjZXNzIiwiY29sbGVjdGlvbiIsImZpbGVuYW1lIiwicmVxIiwiY29uZmlnIiwiZGlzYWJsZUVuZHBvaW50cyIsImVuZHBvaW50cyIsInJlcXVlc3QiLCJhY2Nlc3NSZXN1bHQiLCJpc1JlYWRpbmdTdGF0aWNGaWxlIiwiYWNjZXNzIiwicmVhZCIsInF1ZXJ5VG9CdWlsZCIsImFuZCIsIm9yIiwiZXF1YWxzIiwidXBsb2FkIiwiaW1hZ2VTaXplcyIsImZvckVhY2giLCJuYW1lIiwicHVzaCIsImRvYyIsInBheWxvYWQiLCJkYiIsImZpbmRPbmUiLCJzbHVnIiwid2hlcmUiLCJ0IiwiR0VUIiwicGFyYW1zIiwiY29sbGVjdGlvblNsdWciLCJjb2xsZWN0aW9ucyIsIkJBRF9SRVFVRVNUIiwiZGlzYWJsZUxvY2FsU3RvcmFnZSIsImhhbmRsZXJzIiwicmVzcG9uc2UiLCJsZW5ndGgiLCJoYW5kbGVyIiwiZmlsZURpciIsInN0YXRpY0RpciIsImZpbGVQYXRoIiwicmVzb2x2ZSIsInN0YXRzIiwic3RhdCIsImRhdGEiLCJS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
|