@payloadcms/db-postgres 3.0.0-alpha.18 → 3.0.0-alpha.20
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/connect.js +17 -32
- package/dist/create.js +6 -21
- package/dist/createGlobal.js +6 -21
- package/dist/createGlobalVersion.js +10 -25
- package/dist/createMigration.js +11 -26
- package/dist/createVersion.js +10 -25
- package/dist/deleteMany.js +8 -23
- package/dist/deleteOne.js +10 -25
- package/dist/deleteVersions.js +10 -25
- package/dist/destroy.js +2 -12
- package/dist/find/buildFindManyArgs.js +6 -14
- package/dist/find/chainMethods.js +2 -11
- package/dist/find/findMany.js +14 -29
- package/dist/find/traverseFields.js +8 -23
- package/dist/find.js +6 -21
- package/dist/findGlobal.js +6 -21
- package/dist/findGlobalVersions.js +8 -23
- package/dist/findOne.js +6 -21
- package/dist/findVersions.js +8 -23
- package/dist/index.js +72 -87
- package/dist/init.js +17 -32
- package/dist/migrate.js +15 -30
- package/dist/migrateDown.js +12 -22
- package/dist/migrateFresh.js +15 -28
- package/dist/migrateRefresh.js +18 -26
- package/dist/migrateReset.js +13 -21
- package/dist/migrateStatus.js +9 -19
- package/dist/queries/buildAndOrConditions.js +4 -14
- package/dist/queries/buildQuery.js +10 -20
- package/dist/queries/createJSONQuery/convertPathToJSONTraversal.js +4 -14
- package/dist/queries/createJSONQuery/formatJSONPathSegment.js +2 -12
- package/dist/queries/createJSONQuery/index.js +6 -16
- package/dist/queries/getTableColumnFromPath.js +38 -49
- package/dist/queries/operatorMap.js +17 -27
- package/dist/queries/parseParams.js +32 -42
- package/dist/queries/sanitizeQueryValue.js +8 -18
- package/dist/queryDrafts.js +10 -25
- package/dist/schema/build.js +49 -64
- package/dist/schema/createIndex.js +5 -15
- package/dist/schema/idToUUID.js +2 -12
- package/dist/schema/parentIDColumnMap.js +7 -17
- package/dist/schema/setColumnID.js +10 -20
- package/dist/schema/traverseFields.js +62 -77
- package/dist/schema/validateExistingBlockIsIdentical.js +9 -19
- package/dist/transactions/beginTransaction.js +4 -14
- package/dist/transactions/commitTransaction.js +2 -12
- package/dist/transactions/rollbackTransaction.js +2 -12
- package/dist/transform/read/hasManyNumber.js +2 -12
- package/dist/transform/read/hasManyText.js +2 -12
- package/dist/transform/read/index.js +12 -20
- package/dist/transform/read/relationship.js +2 -12
- package/dist/transform/read/traverseFields.js +15 -23
- package/dist/transform/write/array.js +6 -16
- package/dist/transform/write/blocks.js +6 -21
- package/dist/transform/write/index.js +4 -14
- package/dist/transform/write/numbers.js +2 -12
- package/dist/transform/write/relationships.js +4 -14
- package/dist/transform/write/selects.js +4 -14
- package/dist/transform/write/texts.js +2 -12
- package/dist/transform/write/traverseFields.js +30 -45
- package/dist/transform/write/types.js +2 -5
- package/dist/types.js +2 -5
- package/dist/update.js +11 -26
- package/dist/updateGlobal.js +6 -21
- package/dist/updateGlobalVersion.js +10 -25
- package/dist/updateVersion.js +10 -25
- package/dist/upsertRow/deleteExistingArrayRows.js +5 -15
- package/dist/upsertRow/deleteExistingRowsByPath.js +9 -19
- package/dist/upsertRow/index.js +24 -34
- package/dist/upsertRow/insertArrays.js +2 -12
- package/dist/upsertRow/types.js +2 -5
- package/dist/utilities/appendPrefixToKeys.js +2 -12
- package/dist/utilities/createBlocksMap.js +2 -12
- package/dist/utilities/createMigrationTable.js +4 -14
- package/dist/utilities/createRelationshipMap.js +2 -12
- package/dist/utilities/hasLocalesTable.js +5 -15
- package/dist/utilities/isArrayOfRows.js +2 -12
- package/dist/utilities/migrationTableExists.js +4 -14
- package/dist/utilities/parseError.js +6 -14
- package/package.json +5 -4
@@ -1,15 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
value: true
|
4
|
-
});
|
5
|
-
Object.defineProperty(exports, "createJSONQuery", {
|
6
|
-
enumerable: true,
|
7
|
-
get: function() {
|
8
|
-
return createJSONQuery;
|
9
|
-
}
|
10
|
-
});
|
11
|
-
const _convertPathToJSONTraversal = require("./convertPathToJSONTraversal");
|
12
|
-
const _formatJSONPathSegment = require("./formatJSONPathSegment");
|
1
|
+
import { convertPathToJSONTraversal } from './convertPathToJSONTraversal';
|
2
|
+
import { formatJSONPathSegment } from './formatJSONPathSegment';
|
13
3
|
const operatorMap = {
|
14
4
|
contains: '~*',
|
15
5
|
equals: '=',
|
@@ -19,7 +9,7 @@ const fromArray = ({ isRoot, operator, pathSegments, treatAsArray, value })=>{
|
|
19
9
|
const newPathSegments = pathSegments.slice(isRoot ? 1 : 2);
|
20
10
|
const alias = `${pathSegments[isRoot ? 0 : 1]}_alias_${newPathSegments.length}`;
|
21
11
|
newPathSegments.unshift(alias);
|
22
|
-
const arrayElements = isRoot ? pathSegments[0] : `${pathSegments[0]} -> ${
|
12
|
+
const arrayElements = isRoot ? pathSegments[0] : `${pathSegments[0]} -> ${formatJSONPathSegment(pathSegments[1])}`;
|
23
13
|
return `EXISTS (
|
24
14
|
SELECT 1
|
25
15
|
FROM jsonb_array_elements(${arrayElements}) AS ${alias}
|
@@ -32,10 +22,10 @@ const fromArray = ({ isRoot, operator, pathSegments, treatAsArray, value })=>{
|
|
32
22
|
)`;
|
33
23
|
};
|
34
24
|
const createConstraint = ({ operator, pathSegments, value })=>{
|
35
|
-
const jsonQuery =
|
25
|
+
const jsonQuery = convertPathToJSONTraversal(pathSegments);
|
36
26
|
return `${pathSegments[0]}${jsonQuery} ${operatorMap[operator]} '${value}'`;
|
37
27
|
};
|
38
|
-
const createJSONQuery = ({ operator, pathSegments, treatAsArray, treatRootAsArray, value })=>{
|
28
|
+
export const createJSONQuery = ({ operator, pathSegments, treatAsArray, treatRootAsArray, value })=>{
|
39
29
|
if (treatRootAsArray) {
|
40
30
|
return fromArray({
|
41
31
|
isRoot: true,
|
@@ -61,4 +51,4 @@ const createJSONQuery = ({ operator, pathSegments, treatAsArray, treatRootAsArra
|
|
61
51
|
});
|
62
52
|
};
|
63
53
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9xdWVyaWVzL2NyZWF0ZUpTT05RdWVyeS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb252ZXJ0UGF0aFRvSlNPTlRyYXZlcnNhbCB9IGZyb20gJy4vY29udmVydFBhdGhUb0pTT05UcmF2ZXJzYWwnXG5pbXBvcnQgeyBmb3JtYXRKU09OUGF0aFNlZ21lbnQgfSBmcm9tICcuL2Zvcm1hdEpTT05QYXRoU2VnbWVudCdcblxuY29uc3Qgb3BlcmF0b3JNYXAgPSB7XG4gIGNvbnRhaW5zOiAnfionLFxuICBlcXVhbHM6ICc9JyxcbiAgbGlrZTogJ34qJyxcbn1cblxudHlwZSBGcm9tQXJyYXlBcmdzID0ge1xuICBpc1Jvb3Q/OiB0cnVlXG4gIG9wZXJhdG9yOiBzdHJpbmdcbiAgcGF0aFNlZ21lbnRzOiBzdHJpbmdbXVxuICB0cmVhdEFzQXJyYXk/OiBzdHJpbmdbXVxuICB2YWx1ZTogdW5rbm93blxufVxuXG5jb25zdCBmcm9tQXJyYXkgPSAoeyBpc1Jvb3QsIG9wZXJhdG9yLCBwYXRoU2VnbWVudHMsIHRyZWF0QXNBcnJheSwgdmFsdWUgfTogRnJvbUFycmF5QXJncykgPT4ge1xuICBjb25zdCBuZXdQYXRoU2VnbWVudHMgPSBwYXRoU2VnbWVudHMuc2xpY2UoaXNSb290ID8gMSA6IDIpXG4gIGNvbnN0IGFsaWFzID0gYCR7cGF0aFNlZ21lbnRzW2lzUm9vdCA/IDAgOiAxXX1fYWxpYXNfJHtuZXdQYXRoU2VnbWVudHMubGVuZ3RofWBcblxuICBuZXdQYXRoU2VnbWVudHMudW5zaGlmdChhbGlhcylcblxuICBjb25zdCBhcnJheUVsZW1lbnRzID0gaXNSb290XG4gICAgPyBwYXRoU2VnbWVudHNbMF1cbiAgICA6IGAke3BhdGhTZWdtZW50c1swXX0gLT4gJHtmb3JtYXRKU09OUGF0aFNlZ21lbnQocGF0aFNlZ21lbnRzWzFdKX1gXG5cbiAgcmV0dXJuIGBFWElTVFMgKFxuICAgIFNFTEVDVCAxXG4gICAgRlJPTSBqc29uYl9hcnJheV9lbGVtZW50cygke2FycmF5RWxlbWVudHN9KSBBUyAke2FsaWFzfVxuICAgIFdIRVJFICR7Y3JlYXRlSlNPTlF1ZXJ5KHtcbiAgICAgIG9wZXJhdG9yLFxuICAgICAgcGF0aFNlZ21lbnRzOiBuZXdQYXRoU2VnbWVudHMsXG4gICAgICB0cmVhdEFzQXJyYXksXG4gICAgICB2YWx1ZSxcbiAgICB9KX1cbiAgKWBcbn1cblxudHlwZSBDcmVhdGVDb25zdHJhaW50QXJncyA9IHtcbiAgb3BlcmF0b3I6IHN0cmluZ1xuICBwYXRoU2VnbWVudHM6IHN0cmluZ1tdXG4gIHRyZWF0QXNBcnJheT86IHN0cmluZ1tdXG4gIHZhbHVlOiB1bmtub3duXG59XG5cbmNvbnN0IGNyZWF0ZUNvbnN0cmFpbnQgPSAoeyBvcGVyYXRvciwgcGF0aFNlZ21lbnRzLCB2YWx1ZSB9OiBDcmVhdGVDb25zdHJhaW50QXJncyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGpzb25RdWVyeSA9IGNvbnZlcnRQYXRoVG9KU09OVHJhdmVyc2FsKHBhdGhTZWdtZW50cylcbiAgcmV0dXJuIGAke3BhdGhTZWdtZW50c1swXX0ke2pzb25RdWVyeX0gJHtvcGVyYXRvck1hcFtvcGVyYXRvcl19ICcke3ZhbHVlfSdgXG59XG5cbnR5cGUgQXJncyA9IHtcbiAgb3BlcmF0b3I6IHN0cmluZ1xuICBwYXRoU2VnbWVudHM6IHN0cmluZ1tdXG4gIHRyZWF0QXNBcnJheT86IHN0cmluZ1tdXG4gIHRyZWF0Um9vdEFzQXJyYXk/
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9xdWVyaWVzL2NyZWF0ZUpTT05RdWVyeS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb252ZXJ0UGF0aFRvSlNPTlRyYXZlcnNhbCB9IGZyb20gJy4vY29udmVydFBhdGhUb0pTT05UcmF2ZXJzYWwnXG5pbXBvcnQgeyBmb3JtYXRKU09OUGF0aFNlZ21lbnQgfSBmcm9tICcuL2Zvcm1hdEpTT05QYXRoU2VnbWVudCdcblxuY29uc3Qgb3BlcmF0b3JNYXAgPSB7XG4gIGNvbnRhaW5zOiAnfionLFxuICBlcXVhbHM6ICc9JyxcbiAgbGlrZTogJ34qJyxcbn1cblxudHlwZSBGcm9tQXJyYXlBcmdzID0ge1xuICBpc1Jvb3Q/OiB0cnVlXG4gIG9wZXJhdG9yOiBzdHJpbmdcbiAgcGF0aFNlZ21lbnRzOiBzdHJpbmdbXVxuICB0cmVhdEFzQXJyYXk/OiBzdHJpbmdbXVxuICB2YWx1ZTogdW5rbm93blxufVxuXG5jb25zdCBmcm9tQXJyYXkgPSAoeyBpc1Jvb3QsIG9wZXJhdG9yLCBwYXRoU2VnbWVudHMsIHRyZWF0QXNBcnJheSwgdmFsdWUgfTogRnJvbUFycmF5QXJncykgPT4ge1xuICBjb25zdCBuZXdQYXRoU2VnbWVudHMgPSBwYXRoU2VnbWVudHMuc2xpY2UoaXNSb290ID8gMSA6IDIpXG4gIGNvbnN0IGFsaWFzID0gYCR7cGF0aFNlZ21lbnRzW2lzUm9vdCA/IDAgOiAxXX1fYWxpYXNfJHtuZXdQYXRoU2VnbWVudHMubGVuZ3RofWBcblxuICBuZXdQYXRoU2VnbWVudHMudW5zaGlmdChhbGlhcylcblxuICBjb25zdCBhcnJheUVsZW1lbnRzID0gaXNSb290XG4gICAgPyBwYXRoU2VnbWVudHNbMF1cbiAgICA6IGAke3BhdGhTZWdtZW50c1swXX0gLT4gJHtmb3JtYXRKU09OUGF0aFNlZ21lbnQocGF0aFNlZ21lbnRzWzFdKX1gXG5cbiAgcmV0dXJuIGBFWElTVFMgKFxuICAgIFNFTEVDVCAxXG4gICAgRlJPTSBqc29uYl9hcnJheV9lbGVtZW50cygke2FycmF5RWxlbWVudHN9KSBBUyAke2FsaWFzfVxuICAgIFdIRVJFICR7Y3JlYXRlSlNPTlF1ZXJ5KHtcbiAgICAgIG9wZXJhdG9yLFxuICAgICAgcGF0aFNlZ21lbnRzOiBuZXdQYXRoU2VnbWVudHMsXG4gICAgICB0cmVhdEFzQXJyYXksXG4gICAgICB2YWx1ZSxcbiAgICB9KX1cbiAgKWBcbn1cblxudHlwZSBDcmVhdGVDb25zdHJhaW50QXJncyA9IHtcbiAgb3BlcmF0b3I6IHN0cmluZ1xuICBwYXRoU2VnbWVudHM6IHN0cmluZ1tdXG4gIHRyZWF0QXNBcnJheT86IHN0cmluZ1tdXG4gIHZhbHVlOiB1bmtub3duXG59XG5cbmNvbnN0IGNyZWF0ZUNvbnN0cmFpbnQgPSAoeyBvcGVyYXRvciwgcGF0aFNlZ21lbnRzLCB2YWx1ZSB9OiBDcmVhdGVDb25zdHJhaW50QXJncyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGpzb25RdWVyeSA9IGNvbnZlcnRQYXRoVG9KU09OVHJhdmVyc2FsKHBhdGhTZWdtZW50cylcbiAgcmV0dXJuIGAke3BhdGhTZWdtZW50c1swXX0ke2pzb25RdWVyeX0gJHtvcGVyYXRvck1hcFtvcGVyYXRvcl19ICcke3ZhbHVlfSdgXG59XG5cbnR5cGUgQXJncyA9IHtcbiAgb3BlcmF0b3I6IHN0cmluZ1xuICBwYXRoU2VnbWVudHM6IHN0cmluZ1tdXG4gIHRyZWF0QXNBcnJheT86IHN0cmluZ1tdXG4gIHRyZWF0Um9vdEFzQXJyYXk/OiBib29sZWFuXG4gIHZhbHVlOiB1bmtub3duXG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVKU09OUXVlcnkgPSAoe1xuICBvcGVyYXRvcixcbiAgcGF0aFNlZ21lbnRzLFxuICB0cmVhdEFzQXJyYXksXG4gIHRyZWF0Um9vdEFzQXJyYXksXG4gIHZhbHVlLFxufTogQXJncyk6IHN0cmluZyA9PiB7XG4gIGlmICh0cmVhdFJvb3RBc0FycmF5KSB7XG4gICAgcmV0dXJuIGZyb21BcnJheSh7XG4gICAgICBpc1Jvb3Q6IHRydWUsXG4gICAgICBvcGVyYXRvcixcbiAgICAgIHBhdGhTZWdtZW50cyxcbiAgICAgIHRyZWF0QXNBcnJheSxcbiAgICAgIHZhbHVlLFxuICAgIH0pXG4gIH1cblxuICBpZiAodHJlYXRBc0FycmF5LmluY2x1ZGVzKHBhdGhTZWdtZW50c1sxXSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5KHtcbiAgICAgIG9wZXJhdG9yLFxuICAgICAgcGF0aFNlZ21lbnRzLFxuICAgICAgdHJlYXRBc0FycmF5LFxuICAgICAgdmFsdWUsXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVDb25zdHJhaW50KHsgb3BlcmF0b3IsIHBhdGhTZWdtZW50cywgdHJlYXRBc0FycmF5LCB2YWx1ZSB9KVxufVxuIl0sIm5hbWVzIjpbImNvbnZlcnRQYXRoVG9KU09OVHJhdmVyc2FsIiwiZm9ybWF0SlNPTlBhdGhTZWdtZW50Iiwib3BlcmF0b3JNYXAiLCJjb250YWlucyIsImVxdWFscyIsImxpa2UiLCJmcm9tQXJyYXkiLCJpc1Jvb3QiLCJvcGVyYXRvciIsInBhdGhTZWdtZW50cyIsInRyZWF0QXNBcnJheSIsInZhbHVlIiwibmV3UGF0aFNlZ21lbnRzIiwic2xpY2UiLCJhbGlhcyIsImxlbmd0aCIsInVuc2hpZnQiLCJhcnJheUVsZW1lbnRzIiwiY3JlYXRlSlNPTlF1ZXJ5IiwiY3JlYXRlQ29uc3RyYWludCIsImpzb25RdWVyeSIsInRyZWF0Um9vdEFzQXJyYXkiLCJpbmNsdWRlcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsMEJBQTBCLFFBQVEsK0JBQThCO0FBQ3pFLFNBQVNDLHFCQUFxQixRQUFRLDBCQUF5QjtBQUUvRCxNQUFNQyxjQUFjO0lBQ2xCQyxVQUFVO0lBQ1ZDLFFBQVE7SUFDUkMsTUFBTTtBQUNSO0FBVUEsTUFBTUMsWUFBWSxDQUFDLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxZQUFZLEVBQUVDLFlBQVksRUFBRUMsS0FBSyxFQUFpQjtJQUN2RixNQUFNQyxrQkFBa0JILGFBQWFJLEtBQUssQ0FBQ04sU0FBUyxJQUFJO0lBQ3hELE1BQU1PLFFBQVEsQ0FBQyxFQUFFTCxZQUFZLENBQUNGLFNBQVMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFSyxnQkFBZ0JHLE1BQU0sQ0FBQyxDQUFDO0lBRS9FSCxnQkFBZ0JJLE9BQU8sQ0FBQ0Y7SUFFeEIsTUFBTUcsZ0JBQWdCVixTQUNsQkUsWUFBWSxDQUFDLEVBQUUsR0FDZixDQUFDLEVBQUVBLFlBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFUixzQkFBc0JRLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUVyRSxPQUFPLENBQUM7OzhCQUVvQixFQUFFUSxjQUFjLEtBQUssRUFBRUgsTUFBTTtVQUNqRCxFQUFFSSxnQkFBZ0I7UUFDdEJWO1FBQ0FDLGNBQWNHO1FBQ2RGO1FBQ0FDO0lBQ0YsR0FBRztHQUNKLENBQUM7QUFDSjtBQVNBLE1BQU1RLG1CQUFtQixDQUFDLEVBQUVYLFFBQVEsRUFBRUMsWUFBWSxFQUFFRSxLQUFLLEVBQXdCO0lBQy9FLE1BQU1TLFlBQVlwQiwyQkFBMkJTO0lBQzdDLE9BQU8sQ0FBQyxFQUFFQSxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUVXLFVBQVUsQ0FBQyxFQUFFbEIsV0FBVyxDQUFDTSxTQUFTLENBQUMsRUFBRSxFQUFFRyxNQUFNLENBQUMsQ0FBQztBQUM3RTtBQVVBLE9BQU8sTUFBTU8sa0JBQWtCLENBQUMsRUFDOUJWLFFBQVEsRUFDUkMsWUFBWSxFQUNaQyxZQUFZLEVBQ1pXLGdCQUFnQixFQUNoQlYsS0FBSyxFQUNBO0lBQ0wsSUFBSVUsa0JBQWtCO1FBQ3BCLE9BQU9mLFVBQVU7WUFDZkMsUUFBUTtZQUNSQztZQUNBQztZQUNBQztZQUNBQztRQUNGO0lBQ0Y7SUFFQSxJQUFJRCxhQUFhWSxRQUFRLENBQUNiLFlBQVksQ0FBQyxFQUFFLEdBQUc7UUFDMUMsT0FBT0gsVUFBVTtZQUNmRTtZQUNBQztZQUNBQztZQUNBQztRQUNGO0lBQ0Y7SUFFQSxPQUFPUSxpQkFBaUI7UUFBRVg7UUFBVUM7UUFBY0M7UUFBY0M7SUFBTTtBQUN4RSxFQUFDIn0=
|
@@ -1,31 +1,20 @@
|
|
1
|
-
/* eslint-disable no-param-reassign */
|
2
|
-
|
3
|
-
|
4
|
-
}
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
const
|
13
|
-
const _errors = require("payload/errors");
|
14
|
-
const _types = require("payload/types");
|
15
|
-
const _utilities = require("payload/utilities");
|
16
|
-
const _tosnakecase = /*#__PURE__*/ _interop_require_default(require("to-snake-case"));
|
17
|
-
const _uuid = require("uuid");
|
18
|
-
function _interop_require_default(obj) {
|
19
|
-
return obj && obj.__esModule ? obj : {
|
20
|
-
default: obj
|
21
|
-
};
|
22
|
-
}
|
23
|
-
const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPrefix = '', constraintPath: incomingConstraintPath, constraints = [], fields, joinAliases, joins, locale: incomingLocale, pathSegments: incomingSegments, rootTableName: incomingRootTableName, selectFields, tableName, tableNameSuffix = '', value })=>{
|
1
|
+
/* eslint-disable no-param-reassign */ import { and, eq, like, sql } from 'drizzle-orm';
|
2
|
+
import { alias } from 'drizzle-orm/pg-core';
|
3
|
+
import { APIError } from 'payload/errors';
|
4
|
+
import { fieldAffectsData, tabHasName } from 'payload/types';
|
5
|
+
import { flattenTopLevelFields } from 'payload/utilities';
|
6
|
+
import toSnakeCase from 'to-snake-case';
|
7
|
+
import { v4 as uuid } from 'uuid';
|
8
|
+
/**
|
9
|
+
* Transforms path to table and column name
|
10
|
+
* Adds tables to `join`
|
11
|
+
* @returns TableColumn
|
12
|
+
*/ export const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPrefix = '', constraintPath: incomingConstraintPath, constraints = [], fields, joinAliases, joins, locale: incomingLocale, pathSegments: incomingSegments, rootTableName: incomingRootTableName, selectFields, tableName, tableNameSuffix = '', value })=>{
|
24
13
|
const fieldPath = incomingSegments[0];
|
25
14
|
let locale = incomingLocale;
|
26
15
|
const rootTableName = incomingRootTableName || tableName;
|
27
16
|
let constraintPath = incomingConstraintPath || '';
|
28
|
-
const field =
|
17
|
+
const field = flattenTopLevelFields(fields).find((fieldToFind)=>fieldAffectsData(fieldToFind) && fieldToFind.name === fieldPath);
|
29
18
|
let newTableName = tableName;
|
30
19
|
if (!field && fieldPath === 'id') {
|
31
20
|
selectFields.id = adapter.tables[newTableName].id;
|
@@ -79,7 +68,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
79
68
|
}
|
80
69
|
case 'tab':
|
81
70
|
{
|
82
|
-
if (
|
71
|
+
if (tabHasName(field)) {
|
83
72
|
return getTableColumnFromPath({
|
84
73
|
adapter,
|
85
74
|
aliasTable,
|
@@ -95,7 +84,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
95
84
|
rootTableName,
|
96
85
|
selectFields,
|
97
86
|
tableName: newTableName,
|
98
|
-
tableNameSuffix: `${tableNameSuffix}${(
|
87
|
+
tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,
|
99
88
|
value
|
100
89
|
});
|
101
90
|
}
|
@@ -122,7 +111,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
122
111
|
{
|
123
112
|
if (locale && field.localized && adapter.payload.config.localization) {
|
124
113
|
newTableName = `${tableName}_locales`;
|
125
|
-
joins[tableName] =
|
114
|
+
joins[tableName] = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
|
126
115
|
if (locale !== 'all') {
|
127
116
|
constraints.push({
|
128
117
|
columnName: '_locale',
|
@@ -146,16 +135,16 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
146
135
|
rootTableName,
|
147
136
|
selectFields,
|
148
137
|
tableName: newTableName,
|
149
|
-
tableNameSuffix: `${tableNameSuffix}${(
|
138
|
+
tableNameSuffix: `${tableNameSuffix}${toSnakeCase(field.name)}_`,
|
150
139
|
value
|
151
140
|
});
|
152
141
|
}
|
153
142
|
case 'array':
|
154
143
|
{
|
155
|
-
newTableName = `${tableName}_${tableNameSuffix}${(
|
144
|
+
newTableName = `${tableName}_${tableNameSuffix}${toSnakeCase(field.name)}`;
|
156
145
|
constraintPath = `${constraintPath}${field.name}.%.`;
|
157
146
|
if (locale && field.localized && adapter.payload.config.localization) {
|
158
|
-
joins[newTableName] =
|
147
|
+
joins[newTableName] = and(eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID), eq(adapter.tables[newTableName]._locale, locale));
|
159
148
|
if (locale !== 'all') {
|
160
149
|
constraints.push({
|
161
150
|
columnName: '_locale',
|
@@ -164,7 +153,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
164
153
|
});
|
165
154
|
}
|
166
155
|
} else {
|
167
|
-
joins[newTableName] =
|
156
|
+
joins[newTableName] = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
|
168
157
|
}
|
169
158
|
return getTableColumnFromPath({
|
170
159
|
adapter,
|
@@ -194,8 +183,8 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
194
183
|
];
|
195
184
|
blockTypes.forEach((blockType)=>{
|
196
185
|
const block = field.blocks.find((block)=>block.slug === blockType);
|
197
|
-
newTableName = `${tableName}_blocks_${(
|
198
|
-
joins[newTableName] =
|
186
|
+
newTableName = `${tableName}_blocks_${toSnakeCase(block.slug)}`;
|
187
|
+
joins[newTableName] = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
|
199
188
|
constraints.push({
|
200
189
|
columnName: '_path',
|
201
190
|
table: adapter.tables[newTableName],
|
@@ -210,7 +199,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
210
199
|
};
|
211
200
|
}
|
212
201
|
const hasBlockField = field.blocks.some((block)=>{
|
213
|
-
newTableName = `${tableName}_blocks_${(
|
202
|
+
newTableName = `${tableName}_blocks_${toSnakeCase(block.slug)}`;
|
214
203
|
constraintPath = `${constraintPath}${field.name}.%.`;
|
215
204
|
let result;
|
216
205
|
const blockConstraints = [];
|
@@ -244,7 +233,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
244
233
|
...blockSelectFields
|
245
234
|
};
|
246
235
|
if (field.localized && adapter.payload.config.localization) {
|
247
|
-
joins[newTableName] =
|
236
|
+
joins[newTableName] = and(eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID), eq(adapter.tables[newTableName]._locale, locale));
|
248
237
|
if (locale) {
|
249
238
|
constraints.push({
|
250
239
|
columnName: '_locale',
|
@@ -253,7 +242,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
253
242
|
});
|
254
243
|
}
|
255
244
|
} else {
|
256
|
-
joins[newTableName] =
|
245
|
+
joins[newTableName] = eq(adapter.tables[tableName].id, adapter.tables[newTableName]._parentID);
|
257
246
|
}
|
258
247
|
return true;
|
259
248
|
});
|
@@ -275,22 +264,22 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
275
264
|
let relationshipFields;
|
276
265
|
const relationTableName = `${rootTableName}_rels`;
|
277
266
|
const newCollectionPath = pathSegments.slice(1).join('.');
|
278
|
-
const aliasRelationshipTableName = (
|
279
|
-
const aliasRelationshipTable =
|
267
|
+
const aliasRelationshipTableName = uuid();
|
268
|
+
const aliasRelationshipTable = alias(adapter.tables[relationTableName], aliasRelationshipTableName);
|
280
269
|
// Join in the relationships table
|
281
270
|
joinAliases.push({
|
282
|
-
condition:
|
271
|
+
condition: and(eq((aliasTable || adapter.tables[rootTableName]).id, aliasRelationshipTable.parent), like(aliasRelationshipTable.path, `${constraintPath}${field.name}`)),
|
283
272
|
table: aliasRelationshipTable
|
284
273
|
});
|
285
274
|
selectFields[`${relationTableName}.path`] = aliasRelationshipTable.path;
|
286
275
|
let newAliasTable;
|
287
276
|
if (typeof field.relationTo === 'string') {
|
288
|
-
newTableName = `${(
|
277
|
+
newTableName = `${toSnakeCase(field.relationTo)}`;
|
289
278
|
// parent to relationship join table
|
290
279
|
relationshipFields = adapter.payload.collections[field.relationTo].config.fields;
|
291
|
-
newAliasTable =
|
280
|
+
newAliasTable = alias(adapter.tables[newTableName], toSnakeCase(uuid()));
|
292
281
|
joinAliases.push({
|
293
|
-
condition:
|
282
|
+
condition: eq(newAliasTable.id, aliasRelationshipTable[`${field.relationTo}ID`]),
|
294
283
|
table: newAliasTable
|
295
284
|
});
|
296
285
|
if (newCollectionPath === '' || newCollectionPath === 'id') {
|
@@ -302,11 +291,11 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
302
291
|
};
|
303
292
|
}
|
304
293
|
} else if (newCollectionPath === 'value') {
|
305
|
-
const tableColumnsNames = field.relationTo.map((relationTo)=>`"${aliasRelationshipTableName}"."${(
|
294
|
+
const tableColumnsNames = field.relationTo.map((relationTo)=>`"${aliasRelationshipTableName}"."${toSnakeCase(relationTo)}_id"`);
|
306
295
|
return {
|
307
296
|
constraints,
|
308
297
|
field,
|
309
|
-
rawColumn:
|
298
|
+
rawColumn: sql.raw(`COALESCE(${tableColumnsNames.join(', ')})`),
|
310
299
|
table: aliasRelationshipTable
|
311
300
|
};
|
312
301
|
} else if (newCollectionPath === 'relationTo') {
|
@@ -324,7 +313,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
324
313
|
table: aliasRelationshipTable
|
325
314
|
};
|
326
315
|
} else {
|
327
|
-
throw new
|
316
|
+
throw new APIError('Not supported');
|
328
317
|
}
|
329
318
|
return getTableColumnFromPath({
|
330
319
|
adapter,
|
@@ -344,13 +333,13 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
344
333
|
}
|
345
334
|
default:
|
346
335
|
{
|
347
|
-
if (
|
336
|
+
if (fieldAffectsData(field)) {
|
348
337
|
if (field.localized && adapter.payload.config.localization) {
|
349
338
|
// If localized, we go to localized table and set aliasTable to undefined
|
350
339
|
// so it is not picked up below to be used as targetTable
|
351
340
|
newTableName = `${tableName}_locales`;
|
352
341
|
const parentTable = aliasTable || adapter.tables[tableName];
|
353
|
-
joins[newTableName] =
|
342
|
+
joins[newTableName] = eq(parentTable.id, adapter.tables[newTableName]._parentID);
|
354
343
|
aliasTable = undefined;
|
355
344
|
if (locale !== 'all') {
|
356
345
|
constraints.push({
|
@@ -373,7 +362,7 @@ const getTableColumnFromPath = ({ adapter, aliasTable, collectionPath, columnPre
|
|
373
362
|
}
|
374
363
|
}
|
375
364
|
}
|
376
|
-
throw new
|
365
|
+
throw new APIError(`Cannot find field for path at ${fieldPath}`);
|
377
366
|
};
|
378
367
|
|
379
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL2dldFRhYmxlQ29sdW1uRnJvbVBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgdHlwZSB7IFBnVGFibGVXaXRoQ29sdW1ucyB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEsIE51bWJlckZpZWxkLCBUYWJBc0ZpZWxkLCBUZXh0RmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBhbmQsIGVxLCBsaWtlLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7IGFsaWFzIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAncGF5bG9hZC9lcnJvcnMnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyB9IGZyb20gJ3BheWxvYWQvdXRpbGl0aWVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCdcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1uLCBHZW5lcmljVGFibGUsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBCdWlsZFF1ZXJ5Sm9pbkFsaWFzZXMsIEJ1aWxkUXVlcnlKb2lucyB9IGZyb20gJy4vYnVpbGRRdWVyeSdcblxudHlwZSBDb25zdHJhaW50ID0ge1xuICBjb2x1bW5OYW1lOiBzdHJpbmdcbiAgdGFibGU6IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG4gIHZhbHVlOiB1bmtub3duXG59XG5cbnR5cGUgVGFibGVDb2x1bW4gPSB7XG4gIGNvbHVtbk5hbWU/OiBzdHJpbmdcbiAgY29uc3RyYWludHM6IENvbnN0cmFpbnRbXVxuICBmaWVsZDogRmllbGRBZmZlY3RpbmdEYXRhXG4gIGdldE5vdE51bGxDb2x1bW5CeVZhbHVlPzogKHZhbDogdW5rbm93bikgPT4gc3RyaW5nXG4gIHBhdGhTZWdtZW50cz86IHN0cmluZ1tdXG4gIHJhd0NvbHVtbj86IFNRTFxuICB0YWJsZTogR2VuZXJpY1RhYmxlIHwgUGdUYWJsZVdpdGhDb2x1bW5zPGFueT5cbn1cblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgYWxpYXNUYWJsZT86IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG4gIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmdcbiAgY29sdW1uUHJlZml4Pzogc3RyaW5nXG4gIGNvbnN0cmFpbnRQYXRoPzogc3RyaW5nXG4gIGNvbnN0cmFpbnRzPzogQ29uc3RyYWludFtdXG4gIGZpZWxkczogKEZpZWxkIHwgVGFiQXNGaWVsZClbXVxuICBqb2luQWxpYXNlczogQnVpbGRRdWVyeUpvaW5BbGlhc2VzXG4gIGpvaW5zOiBCdWlsZFF1ZXJ5Sm9pbnNcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHBhdGhTZWdtZW50czogc3RyaW5nW11cbiAgcm9vdFRhYmxlTmFtZT86IHN0cmluZ1xuICBzZWxlY3RGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEdlbmVyaWNDb2x1bW4+XG4gIHRhYmxlTmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBJZiBjcmVhdGluZyBhIG5ldyB0YWJsZSBuYW1lIGZvciBhcnJheXMgYW5kIGJsb2NrcywgdGhpcyBzdWZmaXggc2hvdWxkIGJlIGFwcGVuZGVkIHRvIHRoZSB0YWJsZSBuYW1lXG4gICAqL1xuICB0YWJsZU5hbWVTdWZmaXg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSByYXcgdmFsdWUgb2YgdGhlIHF1ZXJ5IGJlZm9yZSBzYW5pdGl6YXRpb25cbiAgICovXG4gIHZhbHVlOiB1bmtub3duXG59XG4vKipcbiAqIFRyYW5zZm9ybXMgcGF0aCB0byB0YWJsZSBhbmQgY29sdW1uIG5hbWVcbiAqIEFkZHMgdGFibGVzIHRvIGBqb2luYFxuICogQHJldHVybnMgVGFibGVDb2x1bW5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRhYmxlQ29sdW1uRnJvbVBhdGggPSAoe1xuICBhZGFwdGVyLFxuICBhbGlhc1RhYmxlLFxuICBjb2xsZWN0aW9uUGF0aCxcbiAgY29sdW1uUHJlZml4ID0gJycsXG4gIGNvbnN0cmFpbnRQYXRoOiBpbmNvbWluZ0NvbnN0cmFpbnRQYXRoLFxuICBjb25zdHJhaW50cyA9IFtdLFxuICBmaWVsZHMsXG4gIGpvaW5BbGlhc2VzLFxuICBqb2lucyxcbiAgbG9jYWxlOiBpbmNvbWluZ0xvY2FsZSxcbiAgcGF0aFNlZ21lbnRzOiBpbmNvbWluZ1NlZ21lbnRzLFxuICByb290VGFibGVOYW1lOiBpbmNvbWluZ1Jvb3RUYWJsZU5hbWUsXG4gIHNlbGVjdEZpZWxkcyxcbiAgdGFibGVOYW1lLFxuICB0YWJsZU5hbWVTdWZmaXggPSAnJyxcbiAgdmFsdWUsXG59OiBBcmdzKTogVGFibGVDb2x1bW4gPT4ge1xuICBjb25zdCBmaWVsZFBhdGggPSBpbmNvbWluZ1NlZ21lbnRzWzBdXG4gIGxldCBsb2NhbGUgPSBpbmNvbWluZ0xvY2FsZVxuICBjb25zdCByb290VGFibGVOYW1lID0gaW5jb21pbmdSb290VGFibGVOYW1lIHx8IHRhYmxlTmFtZVxuICBsZXQgY29uc3RyYWludFBhdGggPSBpbmNvbWluZ0NvbnN0cmFpbnRQYXRoIHx8ICcnXG5cbiAgY29uc3QgZmllbGQgPSBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMoZmllbGRzIGFzIEZpZWxkW10pLmZpbmQoXG4gICAgKGZpZWxkVG9GaW5kKSA9PiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkVG9GaW5kKSAmJiBmaWVsZFRvRmluZC5uYW1lID09PSBmaWVsZFBhdGgsXG4gICkgYXMgRmllbGQgfCBUYWJBc0ZpZWxkXG4gIGxldCBuZXdUYWJsZU5hbWUgPSB0YWJsZU5hbWVcblxuICBpZiAoIWZpZWxkICYmIGZpZWxkUGF0aCA9PT0gJ2lkJykge1xuICAgIHNlbGVjdEZpZWxkcy5pZCA9IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uaWRcbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uTmFtZTogJ2lkJyxcbiAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgZmllbGQ6IHtcbiAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgdHlwZTogYWRhcHRlci5pZFR5cGUgPT09ICd1dWlkJyA/ICd0ZXh0JyA6ICdudW1iZXInLFxuICAgICAgfSBhcyBUZXh0RmllbGQgfCBOdW1iZXJGaWVsZCxcbiAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgIH1cbiAgfVxuXG4gIGlmIChmaWVsZCkge1xuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IFsuLi5pbmNvbWluZ1NlZ21lbnRzXVxuXG4gICAgLy8gSWYgbmV4dCBzZWdtZW50IGlzIGEgbG9jYWxlLFxuICAgIC8vIHdlIG5lZWQgdG8gdGFrZSBpdCBvdXQgYW5kIHVzZSBpdCBhcyB0aGUgbG9jYWxlIGZyb20gdGhpcyBwb2ludCBvblxuICAgIGlmICgnbG9jYWxpemVkJyBpbiBmaWVsZCAmJiBmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgIGNvbnN0IG1hdGNoZWRMb2NhbGUgPSBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbi5sb2NhbGVDb2Rlcy5maW5kKFxuICAgICAgICAobG9jYWxlKSA9PiBsb2NhbGUgPT09IHBhdGhTZWdtZW50c1sxXSxcbiAgICAgIClcblxuICAgICAgaWYgKG1hdGNoZWRMb2NhbGUpIHtcbiAgICAgICAgbG9jYWxlID0gbWF0Y2hlZExvY2FsZVxuICAgICAgICBwYXRoU2VnbWVudHMuc3BsaWNlKDEsIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbHVtblByZWZpeCxcbiAgICAgICAgICBjb25zdHJhaW50UGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7XG4gICAgICAgICAgICAuLi50YWIsXG4gICAgICAgICAgICB0eXBlOiAndGFiJyxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZVN1ZmZpeCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhYic6IHtcbiAgICAgICAgaWYgKHRhYkhhc05hbWUoZmllbGQpKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGFsaWFzVGFibGUsXG4gICAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1fYCxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRQYXRoOiBgJHtjb25zdHJhaW50UGF0aH0ke2ZpZWxkLm5hbWV9LmAsXG4gICAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgICBqb2lucyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgdGFibGVOYW1lU3VmZml4OiBgJHt0YWJsZU5hbWVTdWZmaXh9JHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1fYCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYWxpYXNUYWJsZSxcbiAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgY29uc3RyYWludFBhdGgsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZVN1ZmZpeCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2FzZSAnZ3JvdXAnOiB7XG4gICAgICAgIGlmIChsb2NhbGUgJiYgZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgbmV3VGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV9sb2NhbGVzYFxuXG4gICAgICAgICAgam9pbnNbdGFibGVOYW1lXSA9IGVxKFxuICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCxcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElELFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAobG9jYWxlICE9PSAnYWxsJykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaCh7XG4gICAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdfbG9jYWxlJyxcbiAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgIHZhbHVlOiBsb2NhbGUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1fYCxcbiAgICAgICAgICBjb25zdHJhaW50UGF0aDogYCR7Y29uc3RyYWludFBhdGh9JHtmaWVsZC5uYW1lfS5gLFxuICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGpvaW5BbGlhc2VzLFxuICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB0YWJsZU5hbWVTdWZmaXg6IGAke3RhYmxlTmFtZVN1ZmZpeH0ke3RvU25ha2VDYXNlKGZpZWxkLm5hbWUpfV9gLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgICAgbmV3VGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV8ke3RhYmxlTmFtZVN1ZmZpeH0ke3RvU25ha2VDYXNlKGZpZWxkLm5hbWUpfWBcbiAgICAgICAgY29uc3RyYWludFBhdGggPSBgJHtjb25zdHJhaW50UGF0aH0ke2ZpZWxkLm5hbWV9LiUuYFxuICAgICAgICBpZiAobG9jYWxlICYmIGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBhbmQoXG4gICAgICAgICAgICBlcShhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLmlkLCBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCksXG4gICAgICAgICAgICBlcShhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9sb2NhbGUsIGxvY2FsZSksXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChsb2NhbGUgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgY29sdW1uTmFtZTogJ19sb2NhbGUnLFxuICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBlcShcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsXG4gICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgY29sbGVjdGlvblBhdGgsXG4gICAgICAgICAgY29uc3RyYWludFBhdGgsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIGxldCBibG9ja1RhYmxlQ29sdW1uOiBUYWJsZUNvbHVtblxuICAgICAgICBsZXQgbmV3VGFibGVOYW1lOiBzdHJpbmdcblxuICAgICAgICAvLyBoYW5kbGUgYmxvY2tUeXBlIHF1ZXJpZXNcbiAgICAgICAgaWYgKHBhdGhTZWdtZW50c1sxXSA9PT0gJ2Jsb2NrVHlwZScpIHtcbiAgICAgICAgICAvLyBmaW5kIHRoZSBibG9jayBjb25maWcgdXNpbmcgdGhlIHZhbHVlXG4gICAgICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdXG4gICAgICAgICAgYmxvY2tUeXBlcy5mb3JFYWNoKChibG9ja1R5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gZmllbGQuYmxvY2tzLmZpbmQoKGJsb2NrKSA9PiBibG9jay5zbHVnID09PSBibG9ja1R5cGUpXG4gICAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2Jsb2Nrc18ke3RvU25ha2VDYXNlKGJsb2NrLnNsdWcpfWBcbiAgICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBlcShcbiAgICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCxcbiAgICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fcGFyZW50SUQsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgY29sdW1uTmFtZTogJ19wYXRoJyxcbiAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgIHZhbHVlOiBwYXRoU2VnbWVudHNbMF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZTogKCkgPT4gJ2lkJyxcbiAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhc0Jsb2NrRmllbGQgPSBmaWVsZC5ibG9ja3Muc29tZSgoYmxvY2spID0+IHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2Jsb2Nrc18ke3RvU25ha2VDYXNlKGJsb2NrLnNsdWcpfWBcbiAgICAgICAgICBjb25zdHJhaW50UGF0aCA9IGAke2NvbnN0cmFpbnRQYXRofSR7ZmllbGQubmFtZX0uJS5gXG4gICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgIGNvbnN0IGJsb2NrQ29uc3RyYWludHMgPSBbXVxuICAgICAgICAgIGNvbnN0IGJsb2NrU2VsZWN0RmllbGRzID0ge31cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgICAgICBjb25zdHJhaW50UGF0aCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHM6IGJsb2NrQ29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkczogYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgICAgam9pbnMsXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHNlbGVjdEZpZWxkczogYmxvY2tTZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgZmluZSwgbm90IGV2ZXJ5IGJsb2NrIHdpbGwgaGF2ZSB0aGUgZmllbGRcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBibG9ja1RhYmxlQ29sdW1uID0gcmVzdWx0XG4gICAgICAgICAgY29uc3RyYWludHMgPSBjb25zdHJhaW50cy5jb25jYXQoYmxvY2tDb25zdHJhaW50cylcbiAgICAgICAgICBzZWxlY3RGaWVsZHMgPSB7IC4uLnNlbGVjdEZpZWxkcywgLi4uYmxvY2tTZWxlY3RGaWVsZHMgfVxuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBhbmQoXG4gICAgICAgICAgICAgIGVxKGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElEKSxcbiAgICAgICAgICAgICAgZXEoYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fbG9jYWxlLCBsb2NhbGUpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGVxKFxuICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLmlkLFxuICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGhhc0Jsb2NrRmllbGQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sdW1uTmFtZTogYmxvY2tUYWJsZUNvbHVtbi5jb2x1bW5OYW1lLFxuICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICBmaWVsZDogYmxvY2tUYWJsZUNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgICAgcmF3Q29sdW1uOiBibG9ja1RhYmxlQ29sdW1uLnJhd0NvbHVtbixcbiAgICAgICAgICAgIHRhYmxlOiBibG9ja1RhYmxlQ29sdW1uLnRhYmxlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyZWxhdGlvbnNoaXAnOlxuICAgICAgY2FzZSAndXBsb2FkJzoge1xuICAgICAgICBsZXQgcmVsYXRpb25zaGlwRmllbGRzXG4gICAgICAgIGNvbnN0IHJlbGF0aW9uVGFibGVOYW1lID0gYCR7cm9vdFRhYmxlTmFtZX1fcmVsc2BcbiAgICAgICAgY29uc3QgbmV3Q29sbGVjdGlvblBhdGggPSBwYXRoU2VnbWVudHMuc2xpY2UoMSkuam9pbignLicpXG4gICAgICAgIGNvbnN0IGFsaWFzUmVsYXRpb25zaGlwVGFibGVOYW1lID0gdXVpZCgpXG4gICAgICAgIGNvbnN0IGFsaWFzUmVsYXRpb25zaGlwVGFibGUgPSBhbGlhcyhcbiAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tyZWxhdGlvblRhYmxlTmFtZV0sXG4gICAgICAgICAgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWUsXG4gICAgICAgIClcblxuICAgICAgICAvLyBKb2luIGluIHRoZSByZWxhdGlvbnNoaXBzIHRhYmxlXG4gICAgICAgIGpvaW5BbGlhc2VzLnB1c2goe1xuICAgICAgICAgIGNvbmRpdGlvbjogYW5kKFxuICAgICAgICAgICAgZXEoKGFsaWFzVGFibGUgfHwgYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0pLmlkLCBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlLnBhcmVudCksXG4gICAgICAgICAgICBsaWtlKGFsaWFzUmVsYXRpb25zaGlwVGFibGUucGF0aCwgYCR7Y29uc3RyYWludFBhdGh9JHtmaWVsZC5uYW1lfWApLFxuICAgICAgICAgICksXG4gICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgc2VsZWN0RmllbGRzW2Ake3JlbGF0aW9uVGFibGVOYW1lfS5wYXRoYF0gPSBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlLnBhdGhcblxuICAgICAgICBsZXQgbmV3QWxpYXNUYWJsZVxuXG4gICAgICAgIGlmICh0eXBlb2YgZmllbGQucmVsYXRpb25UbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0b1NuYWtlQ2FzZShmaWVsZC5yZWxhdGlvblRvKX1gXG4gICAgICAgICAgLy8gcGFyZW50IHRvIHJlbGF0aW9uc2hpcCBqb2luIHRhYmxlXG4gICAgICAgICAgcmVsYXRpb25zaGlwRmllbGRzID0gYWRhcHRlci5wYXlsb2FkLmNvbGxlY3Rpb25zW2ZpZWxkLnJlbGF0aW9uVG9dLmNvbmZpZy5maWVsZHNcblxuICAgICAgICAgIG5ld0FsaWFzVGFibGUgPSBhbGlhcyhhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLCB0b1NuYWtlQ2FzZSh1dWlkKCkpKVxuXG4gICAgICAgICAgam9pbkFsaWFzZXMucHVzaCh7XG4gICAgICAgICAgICBjb25kaXRpb246IGVxKG5ld0FsaWFzVGFibGUuaWQsIGFsaWFzUmVsYXRpb25zaGlwVGFibGVbYCR7ZmllbGQucmVsYXRpb25Ub31JRGBdKSxcbiAgICAgICAgICAgIHRhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICcnIHx8IG5ld0NvbGxlY3Rpb25QYXRoID09PSAnaWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHtmaWVsZC5yZWxhdGlvblRvfUlEYCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnNOYW1lcyA9IGZpZWxkLnJlbGF0aW9uVG8ubWFwKFxuICAgICAgICAgICAgKHJlbGF0aW9uVG8pID0+IGBcIiR7YWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWV9XCIuXCIke3RvU25ha2VDYXNlKHJlbGF0aW9uVG8pfV9pZFwiYCxcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICByYXdDb2x1bW46IHNxbC5yYXcoYENPQUxFU0NFKCR7dGFibGVDb2x1bW5zTmFtZXMuam9pbignLCAnKX0pYCksXG4gICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICdyZWxhdGlvblRvJykge1xuICAgICAgICAgIGNvbnN0IHJlbGF0aW9uVG8gPSBBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pID8gZmllbGQucmVsYXRpb25UbyA6IFtmaWVsZC5yZWxhdGlvblRvXVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkUmVsYXRpb24gPSByZWxhdGlvblRvLmZpbmQoKHJlbGF0aW9uKSA9PiByZWxhdGlvbiA9PT0gdmFsKVxuICAgICAgICAgICAgICBpZiAobWF0Y2hlZFJlbGF0aW9uKSByZXR1cm4gYCR7bWF0Y2hlZFJlbGF0aW9ufUlEYFxuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBBUElFcnJvcignTm90IHN1cHBvcnRlZCcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoOiBuZXdDb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IHJlbGF0aW9uc2hpcEZpZWxkcyxcbiAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICBqb2lucyxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgICAvLyBJZiBsb2NhbGl6ZWQsIHdlIGdvIHRvIGxvY2FsaXplZCB0YWJsZSBhbmQgc2V0IGFsaWFzVGFibGUgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAvLyBzbyBpdCBpcyBub3QgcGlja2VkIHVwIGJlbG93IHRvIGJlIHVzZWQgYXMgdGFyZ2V0VGFibGVcbiAgICAgICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fbG9jYWxlc2BcblxuICAgICAgICAgICAgY29uc3QgcGFyZW50VGFibGUgPSBhbGlhc1RhYmxlIHx8IGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV1cblxuICAgICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGVxKHBhcmVudFRhYmxlLmlkLCBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRClcblxuICAgICAgICAgICAgYWxpYXNUYWJsZSA9IHVuZGVmaW5lZFxuXG4gICAgICAgICAgICBpZiAobG9jYWxlICE9PSAnYWxsJykge1xuICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXRUYWJsZSA9IGFsaWFzVGFibGUgfHwgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXVxuXG4gICAgICAgICAgc2VsZWN0RmllbGRzW2Ake25ld1RhYmxlTmFtZX0uJHtjb2x1bW5QcmVmaXh9JHtmaWVsZC5uYW1lfWBdID1cbiAgICAgICAgICAgIHRhcmdldFRhYmxlW2Ake2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9YF1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHtjb2x1bW5QcmVmaXh9JHtmaWVsZC5uYW1lfWAsXG4gICAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzLFxuICAgICAgICAgICAgdGFibGU6IHRhcmdldFRhYmxlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBBUElFcnJvcihgQ2Fubm90IGZpbmQgZmllbGQgZm9yIHBhdGggYXQgJHtmaWVsZFBhdGh9YClcbn1cbiJdLCJuYW1lcyI6WyJnZXRUYWJsZUNvbHVtbkZyb21QYXRoIiwiYWRhcHRlciIsImFsaWFzVGFibGUiLCJjb2xsZWN0aW9uUGF0aCIsImNvbHVtblByZWZpeCIsImNvbnN0cmFpbnRQYXRoIiwiaW5jb21pbmdDb25zdHJhaW50UGF0aCIsImNvbnN0cmFpbnRzIiwiZmllbGRzIiwiam9pbkFsaWFzZXMiLCJqb2lucyIsImxvY2FsZSIsImluY29taW5nTG9jYWxlIiwicGF0aFNlZ21lbnRzIiwiaW5jb21pbmdTZWdtZW50cyIsInJvb3RUYWJsZU5hbWUiLCJpbmNvbWluZ1Jvb3RUYWJsZU5hbWUiLCJzZWxlY3RGaWVsZHMiLCJ0YWJsZU5hbWUiLCJ0YWJsZU5hbWVTdWZmaXgiLCJ2YWx1ZSIsImZpZWxkUGF0aCIsImZpZWxkIiwiZmxhdHRlblRvcExldmVsRmllbGRzIiwiZmluZCIsImZpZWxkVG9GaW5kIiwiZmllbGRBZmZlY3RzRGF0YSIsIm5hbWUiLCJuZXdUYWJsZU5hbWUiLCJpZCIsInRhYmxlcyIsImNvbHVtbk5hbWUiLCJ0eXBlIiwiaWRUeXBlIiwidGFibGUiLCJsb2NhbGl6ZWQiLCJwYXlsb2FkIiwiY29uZmlnIiwibG9jYWxpemF0aW9uIiwibWF0Y2hlZExvY2FsZSIsImxvY2FsZUNvZGVzIiwic3BsaWNlIiwidGFicyIsIm1hcCIsInRhYiIsInNsaWNlIiwidGFiSGFzTmFtZSIsInRvU25ha2VDYXNlIiwiZXEiLCJfcGFyZW50SUQiLCJwdXNoIiwiYW5kIiwiX2xvY2FsZSIsImJsb2NrVGFibGVDb2x1bW4iLCJibG9ja1R5cGVzIiwiQXJyYXkiLCJpc0FycmF5IiwiZm9yRWFjaCIsImJsb2NrVHlwZSIsImJsb2NrIiwiYmxvY2tzIiwic2x1ZyIsImdldE5vdE51bGxDb2x1bW5CeVZhbHVlIiwiaGFzQmxvY2tGaWVsZCIsInNvbWUiLCJyZXN1bHQiLCJibG9ja0NvbnN0cmFpbnRzIiwiYmxvY2tTZWxlY3RGaWVsZHMiLCJlcnJvciIsImNvbmNhdCIsInJhd0NvbHVtbiIsInJlbGF0aW9uc2hpcEZpZWxkcyIsInJlbGF0aW9uVGFibGVOYW1lIiwibmV3Q29sbGVjdGlvblBhdGgiLCJqb2luIiwiYWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWUiLCJ1dWlkIiwiYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSIsImFsaWFzIiwiY29uZGl0aW9uIiwicGFyZW50IiwibGlrZSIsInBhdGgiLCJuZXdBbGlhc1RhYmxlIiwicmVsYXRpb25UbyIsImNvbGxlY3Rpb25zIiwidGFibGVDb2x1bW5zTmFtZXMiLCJzcWwiLCJyYXciLCJ2YWwiLCJtYXRjaGVkUmVsYXRpb24iLCJyZWxhdGlvbiIsInVuZGVmaW5lZCIsIkFQSUVycm9yIiwicGFyZW50VGFibGUiLCJ0YXJnZXRUYWJsZSJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DOzs7OytCQTZEdkJBOzs7ZUFBQUE7Ozs0QkF4RHNCO3dCQUNiO3dCQUNHO3VCQUNvQjsyQkFDUDtvRUFDZDtzQkFDRzs7Ozs7O0FBa0RwQixNQUFNQSx5QkFBeUIsQ0FBQyxFQUNyQ0MsT0FBTyxFQUNQQyxVQUFVLEVBQ1ZDLGNBQWMsRUFDZEMsZUFBZSxFQUFFLEVBQ2pCQyxnQkFBZ0JDLHNCQUFzQixFQUN0Q0MsY0FBYyxFQUFFLEVBQ2hCQyxNQUFNLEVBQ05DLFdBQVcsRUFDWEMsS0FBSyxFQUNMQyxRQUFRQyxjQUFjLEVBQ3RCQyxjQUFjQyxnQkFBZ0IsRUFDOUJDLGVBQWVDLHFC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
|
368
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL2dldFRhYmxlQ29sdW1uRnJvbVBhdGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgdHlwZSB7IFBnVGFibGVXaXRoQ29sdW1ucyB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBGaWVsZEFmZmVjdGluZ0RhdGEsIE51bWJlckZpZWxkLCBUYWJBc0ZpZWxkLCBUZXh0RmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBhbmQsIGVxLCBsaWtlLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7IGFsaWFzIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAncGF5bG9hZC9lcnJvcnMnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhLCB0YWJIYXNOYW1lIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IGZsYXR0ZW5Ub3BMZXZlbEZpZWxkcyB9IGZyb20gJ3BheWxvYWQvdXRpbGl0aWVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCdcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1uLCBHZW5lcmljVGFibGUsIFBvc3RncmVzQWRhcHRlciB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBCdWlsZFF1ZXJ5Sm9pbkFsaWFzZXMsIEJ1aWxkUXVlcnlKb2lucyB9IGZyb20gJy4vYnVpbGRRdWVyeSdcblxudHlwZSBDb25zdHJhaW50ID0ge1xuICBjb2x1bW5OYW1lOiBzdHJpbmdcbiAgdGFibGU6IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG4gIHZhbHVlOiB1bmtub3duXG59XG5cbnR5cGUgVGFibGVDb2x1bW4gPSB7XG4gIGNvbHVtbk5hbWU/OiBzdHJpbmdcbiAgY29uc3RyYWludHM6IENvbnN0cmFpbnRbXVxuICBmaWVsZDogRmllbGRBZmZlY3RpbmdEYXRhXG4gIGdldE5vdE51bGxDb2x1bW5CeVZhbHVlPzogKHZhbDogdW5rbm93bikgPT4gc3RyaW5nXG4gIHBhdGhTZWdtZW50cz86IHN0cmluZ1tdXG4gIHJhd0NvbHVtbj86IFNRTFxuICB0YWJsZTogR2VuZXJpY1RhYmxlIHwgUGdUYWJsZVdpdGhDb2x1bW5zPGFueT5cbn1cblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgYWxpYXNUYWJsZT86IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG4gIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmdcbiAgY29sdW1uUHJlZml4Pzogc3RyaW5nXG4gIGNvbnN0cmFpbnRQYXRoPzogc3RyaW5nXG4gIGNvbnN0cmFpbnRzPzogQ29uc3RyYWludFtdXG4gIGZpZWxkczogKEZpZWxkIHwgVGFiQXNGaWVsZClbXVxuICBqb2luQWxpYXNlczogQnVpbGRRdWVyeUpvaW5BbGlhc2VzXG4gIGpvaW5zOiBCdWlsZFF1ZXJ5Sm9pbnNcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHBhdGhTZWdtZW50czogc3RyaW5nW11cbiAgcm9vdFRhYmxlTmFtZT86IHN0cmluZ1xuICBzZWxlY3RGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEdlbmVyaWNDb2x1bW4+XG4gIHRhYmxlTmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBJZiBjcmVhdGluZyBhIG5ldyB0YWJsZSBuYW1lIGZvciBhcnJheXMgYW5kIGJsb2NrcywgdGhpcyBzdWZmaXggc2hvdWxkIGJlIGFwcGVuZGVkIHRvIHRoZSB0YWJsZSBuYW1lXG4gICAqL1xuICB0YWJsZU5hbWVTdWZmaXg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSByYXcgdmFsdWUgb2YgdGhlIHF1ZXJ5IGJlZm9yZSBzYW5pdGl6YXRpb25cbiAgICovXG4gIHZhbHVlOiB1bmtub3duXG59XG4vKipcbiAqIFRyYW5zZm9ybXMgcGF0aCB0byB0YWJsZSBhbmQgY29sdW1uIG5hbWVcbiAqIEFkZHMgdGFibGVzIHRvIGBqb2luYFxuICogQHJldHVybnMgVGFibGVDb2x1bW5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFRhYmxlQ29sdW1uRnJvbVBhdGggPSAoe1xuICBhZGFwdGVyLFxuICBhbGlhc1RhYmxlLFxuICBjb2xsZWN0aW9uUGF0aCxcbiAgY29sdW1uUHJlZml4ID0gJycsXG4gIGNvbnN0cmFpbnRQYXRoOiBpbmNvbWluZ0NvbnN0cmFpbnRQYXRoLFxuICBjb25zdHJhaW50cyA9IFtdLFxuICBmaWVsZHMsXG4gIGpvaW5BbGlhc2VzLFxuICBqb2lucyxcbiAgbG9jYWxlOiBpbmNvbWluZ0xvY2FsZSxcbiAgcGF0aFNlZ21lbnRzOiBpbmNvbWluZ1NlZ21lbnRzLFxuICByb290VGFibGVOYW1lOiBpbmNvbWluZ1Jvb3RUYWJsZU5hbWUsXG4gIHNlbGVjdEZpZWxkcyxcbiAgdGFibGVOYW1lLFxuICB0YWJsZU5hbWVTdWZmaXggPSAnJyxcbiAgdmFsdWUsXG59OiBBcmdzKTogVGFibGVDb2x1bW4gPT4ge1xuICBjb25zdCBmaWVsZFBhdGggPSBpbmNvbWluZ1NlZ21lbnRzWzBdXG4gIGxldCBsb2NhbGUgPSBpbmNvbWluZ0xvY2FsZVxuICBjb25zdCByb290VGFibGVOYW1lID0gaW5jb21pbmdSb290VGFibGVOYW1lIHx8IHRhYmxlTmFtZVxuICBsZXQgY29uc3RyYWludFBhdGggPSBpbmNvbWluZ0NvbnN0cmFpbnRQYXRoIHx8ICcnXG5cbiAgY29uc3QgZmllbGQgPSBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMoZmllbGRzIGFzIEZpZWxkW10pLmZpbmQoXG4gICAgKGZpZWxkVG9GaW5kKSA9PiBmaWVsZEFmZmVjdHNEYXRhKGZpZWxkVG9GaW5kKSAmJiBmaWVsZFRvRmluZC5uYW1lID09PSBmaWVsZFBhdGgsXG4gICkgYXMgRmllbGQgfCBUYWJBc0ZpZWxkXG4gIGxldCBuZXdUYWJsZU5hbWUgPSB0YWJsZU5hbWVcblxuICBpZiAoIWZpZWxkICYmIGZpZWxkUGF0aCA9PT0gJ2lkJykge1xuICAgIHNlbGVjdEZpZWxkcy5pZCA9IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uaWRcbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uTmFtZTogJ2lkJyxcbiAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgZmllbGQ6IHtcbiAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgdHlwZTogYWRhcHRlci5pZFR5cGUgPT09ICd1dWlkJyA/ICd0ZXh0JyA6ICdudW1iZXInLFxuICAgICAgfSBhcyBUZXh0RmllbGQgfCBOdW1iZXJGaWVsZCxcbiAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLFxuICAgIH1cbiAgfVxuXG4gIGlmIChmaWVsZCkge1xuICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IFsuLi5pbmNvbWluZ1NlZ21lbnRzXVxuXG4gICAgLy8gSWYgbmV4dCBzZWdtZW50IGlzIGEgbG9jYWxlLFxuICAgIC8vIHdlIG5lZWQgdG8gdGFrZSBpdCBvdXQgYW5kIHVzZSBpdCBhcyB0aGUgbG9jYWxlIGZyb20gdGhpcyBwb2ludCBvblxuICAgIGlmICgnbG9jYWxpemVkJyBpbiBmaWVsZCAmJiBmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgIGNvbnN0IG1hdGNoZWRMb2NhbGUgPSBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbi5sb2NhbGVDb2Rlcy5maW5kKFxuICAgICAgICAobG9jYWxlKSA9PiBsb2NhbGUgPT09IHBhdGhTZWdtZW50c1sxXSxcbiAgICAgIClcblxuICAgICAgaWYgKG1hdGNoZWRMb2NhbGUpIHtcbiAgICAgICAgbG9jYWxlID0gbWF0Y2hlZExvY2FsZVxuICAgICAgICBwYXRoU2VnbWVudHMuc3BsaWNlKDEsIDEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICd0YWJzJzoge1xuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbHVtblByZWZpeCxcbiAgICAgICAgICBjb25zdHJhaW50UGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7XG4gICAgICAgICAgICAuLi50YWIsXG4gICAgICAgICAgICB0eXBlOiAndGFiJyxcbiAgICAgICAgICB9KSksXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZVN1ZmZpeCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhYic6IHtcbiAgICAgICAgaWYgKHRhYkhhc05hbWUoZmllbGQpKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGFsaWFzVGFibGUsXG4gICAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1fYCxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRQYXRoOiBgJHtjb25zdHJhaW50UGF0aH0ke2ZpZWxkLm5hbWV9LmAsXG4gICAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgICBqb2lucyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgdGFibGVOYW1lU3VmZml4OiBgJHt0YWJsZU5hbWVTdWZmaXh9JHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1fYCxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYWxpYXNUYWJsZSxcbiAgICAgICAgICBjb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgY29uc3RyYWludFBhdGgsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZVN1ZmZpeCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY2FzZSAnZ3JvdXAnOiB7XG4gICAgICAgIGlmIChsb2NhbGUgJiYgZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgbmV3VGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV9sb2NhbGVzYFxuXG4gICAgICAgICAgam9pbnNbdGFibGVOYW1lXSA9IGVxKFxuICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCxcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElELFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAobG9jYWxlICE9PSAnYWxsJykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaCh7XG4gICAgICAgICAgICAgIGNvbHVtbk5hbWU6ICdfbG9jYWxlJyxcbiAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgIHZhbHVlOiBsb2NhbGUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uUHJlZml4fSR7ZmllbGQubmFtZX1fYCxcbiAgICAgICAgICBjb25zdHJhaW50UGF0aDogYCR7Y29uc3RyYWludFBhdGh9JHtmaWVsZC5uYW1lfS5gLFxuICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgIGpvaW5BbGlhc2VzLFxuICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBwYXRoU2VnbWVudHM6IHBhdGhTZWdtZW50cy5zbGljZSgxKSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB0YWJsZU5hbWVTdWZmaXg6IGAke3RhYmxlTmFtZVN1ZmZpeH0ke3RvU25ha2VDYXNlKGZpZWxkLm5hbWUpfV9gLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgICAgbmV3VGFibGVOYW1lID0gYCR7dGFibGVOYW1lfV8ke3RhYmxlTmFtZVN1ZmZpeH0ke3RvU25ha2VDYXNlKGZpZWxkLm5hbWUpfWBcbiAgICAgICAgY29uc3RyYWludFBhdGggPSBgJHtjb25zdHJhaW50UGF0aH0ke2ZpZWxkLm5hbWV9LiUuYFxuICAgICAgICBpZiAobG9jYWxlICYmIGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBhbmQoXG4gICAgICAgICAgICBlcShhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLmlkLCBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCksXG4gICAgICAgICAgICBlcShhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9sb2NhbGUsIGxvY2FsZSksXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChsb2NhbGUgIT09ICdhbGwnKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgY29sdW1uTmFtZTogJ19sb2NhbGUnLFxuICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXSxcbiAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBlcShcbiAgICAgICAgICAgIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsXG4gICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgY29sbGVjdGlvblBhdGgsXG4gICAgICAgICAgY29uc3RyYWludFBhdGgsXG4gICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgam9pbkFsaWFzZXMsXG4gICAgICAgICAgam9pbnMsXG4gICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIGxldCBibG9ja1RhYmxlQ29sdW1uOiBUYWJsZUNvbHVtblxuICAgICAgICBsZXQgbmV3VGFibGVOYW1lOiBzdHJpbmdcblxuICAgICAgICAvLyBoYW5kbGUgYmxvY2tUeXBlIHF1ZXJpZXNcbiAgICAgICAgaWYgKHBhdGhTZWdtZW50c1sxXSA9PT0gJ2Jsb2NrVHlwZScpIHtcbiAgICAgICAgICAvLyBmaW5kIHRoZSBibG9jayBjb25maWcgdXNpbmcgdGhlIHZhbHVlXG4gICAgICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdXG4gICAgICAgICAgYmxvY2tUeXBlcy5mb3JFYWNoKChibG9ja1R5cGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gZmllbGQuYmxvY2tzLmZpbmQoKGJsb2NrKSA9PiBibG9jay5zbHVnID09PSBibG9ja1R5cGUpXG4gICAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2Jsb2Nrc18ke3RvU25ha2VDYXNlKGJsb2NrLnNsdWcpfWBcbiAgICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBlcShcbiAgICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbdGFibGVOYW1lXS5pZCxcbiAgICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fcGFyZW50SUQsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgY29sdW1uTmFtZTogJ19wYXRoJyxcbiAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgIHZhbHVlOiBwYXRoU2VnbWVudHNbMF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZTogKCkgPT4gJ2lkJyxcbiAgICAgICAgICAgIHRhYmxlOiBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhc0Jsb2NrRmllbGQgPSBmaWVsZC5ibG9ja3Muc29tZSgoYmxvY2spID0+IHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X2Jsb2Nrc18ke3RvU25ha2VDYXNlKGJsb2NrLnNsdWcpfWBcbiAgICAgICAgICBjb25zdHJhaW50UGF0aCA9IGAke2NvbnN0cmFpbnRQYXRofSR7ZmllbGQubmFtZX0uJS5gXG4gICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgIGNvbnN0IGJsb2NrQ29uc3RyYWludHMgPSBbXVxuICAgICAgICAgIGNvbnN0IGJsb2NrU2VsZWN0RmllbGRzID0ge31cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb25QYXRoLFxuICAgICAgICAgICAgICBjb25zdHJhaW50UGF0aCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHM6IGJsb2NrQ29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkczogYmxvY2suZmllbGRzLFxuICAgICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgICAgam9pbnMsXG4gICAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHNlbGVjdEZpZWxkczogYmxvY2tTZWxlY3RGaWVsZHMsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgZmluZSwgbm90IGV2ZXJ5IGJsb2NrIHdpbGwgaGF2ZSB0aGUgZmllbGRcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBibG9ja1RhYmxlQ29sdW1uID0gcmVzdWx0XG4gICAgICAgICAgY29uc3RyYWludHMgPSBjb25zdHJhaW50cy5jb25jYXQoYmxvY2tDb25zdHJhaW50cylcbiAgICAgICAgICBzZWxlY3RGaWVsZHMgPSB7IC4uLnNlbGVjdEZpZWxkcywgLi4uYmxvY2tTZWxlY3RGaWVsZHMgfVxuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgIGpvaW5zW25ld1RhYmxlTmFtZV0gPSBhbmQoXG4gICAgICAgICAgICAgIGVxKGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0uaWQsIGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0uX3BhcmVudElEKSxcbiAgICAgICAgICAgICAgZXEoYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXS5fbG9jYWxlLCBsb2NhbGUpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGVxKFxuICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1t0YWJsZU5hbWVdLmlkLFxuICAgICAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGhhc0Jsb2NrRmllbGQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sdW1uTmFtZTogYmxvY2tUYWJsZUNvbHVtbi5jb2x1bW5OYW1lLFxuICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICBmaWVsZDogYmxvY2tUYWJsZUNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgIHBhdGhTZWdtZW50czogcGF0aFNlZ21lbnRzLnNsaWNlKDEpLFxuICAgICAgICAgICAgcmF3Q29sdW1uOiBibG9ja1RhYmxlQ29sdW1uLnJhd0NvbHVtbixcbiAgICAgICAgICAgIHRhYmxlOiBibG9ja1RhYmxlQ29sdW1uLnRhYmxlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyZWxhdGlvbnNoaXAnOlxuICAgICAgY2FzZSAndXBsb2FkJzoge1xuICAgICAgICBsZXQgcmVsYXRpb25zaGlwRmllbGRzXG4gICAgICAgIGNvbnN0IHJlbGF0aW9uVGFibGVOYW1lID0gYCR7cm9vdFRhYmxlTmFtZX1fcmVsc2BcbiAgICAgICAgY29uc3QgbmV3Q29sbGVjdGlvblBhdGggPSBwYXRoU2VnbWVudHMuc2xpY2UoMSkuam9pbignLicpXG4gICAgICAgIGNvbnN0IGFsaWFzUmVsYXRpb25zaGlwVGFibGVOYW1lID0gdXVpZCgpXG4gICAgICAgIGNvbnN0IGFsaWFzUmVsYXRpb25zaGlwVGFibGUgPSBhbGlhcyhcbiAgICAgICAgICBhZGFwdGVyLnRhYmxlc1tyZWxhdGlvblRhYmxlTmFtZV0sXG4gICAgICAgICAgYWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWUsXG4gICAgICAgIClcblxuICAgICAgICAvLyBKb2luIGluIHRoZSByZWxhdGlvbnNoaXBzIHRhYmxlXG4gICAgICAgIGpvaW5BbGlhc2VzLnB1c2goe1xuICAgICAgICAgIGNvbmRpdGlvbjogYW5kKFxuICAgICAgICAgICAgZXEoKGFsaWFzVGFibGUgfHwgYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0pLmlkLCBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlLnBhcmVudCksXG4gICAgICAgICAgICBsaWtlKGFsaWFzUmVsYXRpb25zaGlwVGFibGUucGF0aCwgYCR7Y29uc3RyYWludFBhdGh9JHtmaWVsZC5uYW1lfWApLFxuICAgICAgICAgICksXG4gICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgc2VsZWN0RmllbGRzW2Ake3JlbGF0aW9uVGFibGVOYW1lfS5wYXRoYF0gPSBhbGlhc1JlbGF0aW9uc2hpcFRhYmxlLnBhdGhcblxuICAgICAgICBsZXQgbmV3QWxpYXNUYWJsZVxuXG4gICAgICAgIGlmICh0eXBlb2YgZmllbGQucmVsYXRpb25UbyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBuZXdUYWJsZU5hbWUgPSBgJHt0b1NuYWtlQ2FzZShmaWVsZC5yZWxhdGlvblRvKX1gXG4gICAgICAgICAgLy8gcGFyZW50IHRvIHJlbGF0aW9uc2hpcCBqb2luIHRhYmxlXG4gICAgICAgICAgcmVsYXRpb25zaGlwRmllbGRzID0gYWRhcHRlci5wYXlsb2FkLmNvbGxlY3Rpb25zW2ZpZWxkLnJlbGF0aW9uVG9dLmNvbmZpZy5maWVsZHNcblxuICAgICAgICAgIG5ld0FsaWFzVGFibGUgPSBhbGlhcyhhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLCB0b1NuYWtlQ2FzZSh1dWlkKCkpKVxuXG4gICAgICAgICAgam9pbkFsaWFzZXMucHVzaCh7XG4gICAgICAgICAgICBjb25kaXRpb246IGVxKG5ld0FsaWFzVGFibGUuaWQsIGFsaWFzUmVsYXRpb25zaGlwVGFibGVbYCR7ZmllbGQucmVsYXRpb25Ub31JRGBdKSxcbiAgICAgICAgICAgIHRhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICcnIHx8IG5ld0NvbGxlY3Rpb25QYXRoID09PSAnaWQnKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHtmaWVsZC5yZWxhdGlvblRvfUlEYCxcbiAgICAgICAgICAgICAgY29uc3RyYWludHMsXG4gICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICd2YWx1ZScpIHtcbiAgICAgICAgICBjb25zdCB0YWJsZUNvbHVtbnNOYW1lcyA9IGZpZWxkLnJlbGF0aW9uVG8ubWFwKFxuICAgICAgICAgICAgKHJlbGF0aW9uVG8pID0+IGBcIiR7YWxpYXNSZWxhdGlvbnNoaXBUYWJsZU5hbWV9XCIuXCIke3RvU25ha2VDYXNlKHJlbGF0aW9uVG8pfV9pZFwiYCxcbiAgICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICByYXdDb2x1bW46IHNxbC5yYXcoYENPQUxFU0NFKCR7dGFibGVDb2x1bW5zTmFtZXMuam9pbignLCAnKX0pYCksXG4gICAgICAgICAgICB0YWJsZTogYWxpYXNSZWxhdGlvbnNoaXBUYWJsZSxcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3Q29sbGVjdGlvblBhdGggPT09ICdyZWxhdGlvblRvJykge1xuICAgICAgICAgIGNvbnN0IHJlbGF0aW9uVG8gPSBBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pID8gZmllbGQucmVsYXRpb25UbyA6IFtmaWVsZC5yZWxhdGlvblRvXVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZTogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVkUmVsYXRpb24gPSByZWxhdGlvblRvLmZpbmQoKHJlbGF0aW9uKSA9PiByZWxhdGlvbiA9PT0gdmFsKVxuICAgICAgICAgICAgICBpZiAobWF0Y2hlZFJlbGF0aW9uKSByZXR1cm4gYCR7bWF0Y2hlZFJlbGF0aW9ufUlEYFxuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGFibGU6IGFsaWFzUmVsYXRpb25zaGlwVGFibGUsXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBBUElFcnJvcignTm90IHN1cHBvcnRlZCcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0VGFibGVDb2x1bW5Gcm9tUGF0aCh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBhbGlhc1RhYmxlOiBuZXdBbGlhc1RhYmxlLFxuICAgICAgICAgIGNvbGxlY3Rpb25QYXRoOiBuZXdDb2xsZWN0aW9uUGF0aCxcbiAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICBmaWVsZHM6IHJlbGF0aW9uc2hpcEZpZWxkcyxcbiAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICBqb2lucyxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgcGF0aFNlZ21lbnRzOiBwYXRoU2VnbWVudHMuc2xpY2UoMSksXG4gICAgICAgICAgcm9vdFRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICB0YWJsZU5hbWU6IG5ld1RhYmxlTmFtZSxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBpZiAoZmllbGRBZmZlY3RzRGF0YShmaWVsZCkpIHtcbiAgICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgICAvLyBJZiBsb2NhbGl6ZWQsIHdlIGdvIHRvIGxvY2FsaXplZCB0YWJsZSBhbmQgc2V0IGFsaWFzVGFibGUgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAvLyBzbyBpdCBpcyBub3QgcGlja2VkIHVwIGJlbG93IHRvIGJlIHVzZWQgYXMgdGFyZ2V0VGFibGVcbiAgICAgICAgICAgIG5ld1RhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fbG9jYWxlc2BcblxuICAgICAgICAgICAgY29uc3QgcGFyZW50VGFibGUgPSBhbGlhc1RhYmxlIHx8IGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV1cblxuICAgICAgICAgICAgam9pbnNbbmV3VGFibGVOYW1lXSA9IGVxKHBhcmVudFRhYmxlLmlkLCBhZGFwdGVyLnRhYmxlc1tuZXdUYWJsZU5hbWVdLl9wYXJlbnRJRClcblxuICAgICAgICAgICAgYWxpYXNUYWJsZSA9IHVuZGVmaW5lZFxuXG4gICAgICAgICAgICBpZiAobG9jYWxlICE9PSAnYWxsJykge1xuICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiAnX2xvY2FsZScsXG4gICAgICAgICAgICAgICAgdGFibGU6IGFkYXB0ZXIudGFibGVzW25ld1RhYmxlTmFtZV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGxvY2FsZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXRUYWJsZSA9IGFsaWFzVGFibGUgfHwgYWRhcHRlci50YWJsZXNbbmV3VGFibGVOYW1lXVxuXG4gICAgICAgICAgc2VsZWN0RmllbGRzW2Ake25ld1RhYmxlTmFtZX0uJHtjb2x1bW5QcmVmaXh9JHtmaWVsZC5uYW1lfWBdID1cbiAgICAgICAgICAgIHRhcmdldFRhYmxlW2Ake2NvbHVtblByZWZpeH0ke2ZpZWxkLm5hbWV9YF1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2x1bW5OYW1lOiBgJHtjb2x1bW5QcmVmaXh9JHtmaWVsZC5uYW1lfWAsXG4gICAgICAgICAgICBjb25zdHJhaW50cyxcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgcGF0aFNlZ21lbnRzLFxuICAgICAgICAgICAgdGFibGU6IHRhcmdldFRhYmxlLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBBUElFcnJvcihgQ2Fubm90IGZpbmQgZmllbGQgZm9yIHBhdGggYXQgJHtmaWVsZFBhdGh9YClcbn1cbiJdLCJuYW1lcyI6WyJhbmQiLCJlcSIsImxpa2UiLCJzcWwiLCJhbGlhcyIsIkFQSUVycm9yIiwiZmllbGRBZmZlY3RzRGF0YSIsInRhYkhhc05hbWUiLCJmbGF0dGVuVG9wTGV2ZWxGaWVsZHMiLCJ0b1NuYWtlQ2FzZSIsInY0IiwidXVpZCIsImdldFRhYmxlQ29sdW1uRnJvbVBhdGgiLCJhZGFwdGVyIiwiYWxpYXNUYWJsZSIsImNvbGxlY3Rpb25QYXRoIiwiY29sdW1uUHJlZml4IiwiY29uc3RyYWludFBhdGgiLCJpbmNvbWluZ0NvbnN0cmFpbnRQYXRoIiwiY29uc3RyYWludHMiLCJmaWVsZHMiLCJqb2luQWxpYXNlcyIsImpvaW5zIiwibG9jYWxlIiwiaW5jb21pbmdMb2NhbGUiLCJwYXRoU2VnbWVudHMiLCJpbmNvbWluZ1NlZ21lbnRzIiwicm9vdFRhYmxlTmFtZSIsImluY29taW5nUm9vdFRhYmxlTmFtZSIsInNlbGVjdEZpZWxkcyIsInRhYmxlTmFtZSIsInRhYmxlTmFtZVN1ZmZpeCIsInZhbHVlIiwiZmllbGRQYXRoIiwiZmllbGQiLCJmaW5kIiwiZmllbGRUb0ZpbmQiLCJuYW1lIiwibmV3VGFibGVOYW1lIiwiaWQiLCJ0YWJsZXMiLCJjb2x1bW5OYW1lIiwidHlwZSIsImlkVHlwZSIsInRhYmxlIiwibG9jYWxpemVkIiwicGF5bG9hZCIsImNvbmZpZyIsImxvY2FsaXphdGlvbiIsIm1hdGNoZWRMb2NhbGUiLCJsb2NhbGVDb2RlcyIsInNwbGljZSIsInRhYnMiLCJtYXAiLCJ0YWIiLCJzbGljZSIsIl9wYXJlbnRJRCIsInB1c2giLCJfbG9jYWxlIiwiYmxvY2tUYWJsZUNvbHVtbiIsImJsb2NrVHlwZXMiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwiYmxvY2tUeXBlIiwiYmxvY2siLCJibG9ja3MiLCJzbHVnIiwiZ2V0Tm90TnVsbENvbHVtbkJ5VmFsdWUiLCJoYXNCbG9ja0ZpZWxkIiwic29tZSIsInJlc3VsdCIsImJsb2NrQ29uc3RyYWludHMiLCJibG9ja1NlbGVjdEZpZWxkcyIsImVycm9yIiwiY29uY2F0IiwicmF3Q29sdW1uIiwicmVsYXRpb25zaGlwRmllbGRzIiwicmVsYXRpb25UYWJsZU5hbWUiLCJuZXdDb2xsZWN0aW9uUGF0aCIsImpvaW4iLCJhbGlhc1JlbGF0aW9uc2hpcFRhYmxlTmFtZSIsImFsaWFzUmVsYXRpb25zaGlwVGFibGUiLCJjb25kaXRpb24iLCJwYXJlbnQiLCJwYXRoIiwibmV3QWxpYXNUYWJsZSIsInJlbGF0aW9uVG8iLCJjb2xsZWN0aW9ucyIsInRhYmxlQ29sdW1uc05hbWVzIiwicmF3IiwidmFsIiwibWF0Y2hlZFJlbGF0aW9uIiwicmVsYXRpb24iLCJ1bmRlZmluZWQiLCJwYXJlbnRUYWJsZSIsInRhcmdldFRhYmxlIl0sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0MsR0FLcEMsU0FBU0EsR0FBRyxFQUFFQyxFQUFFLEVBQUVDLElBQUksRUFBRUMsR0FBRyxRQUFRLGNBQWE7QUFDaEQsU0FBU0MsS0FBSyxRQUFRLHNCQUFxQjtBQUMzQyxTQUFTQyxRQUFRLFFBQVEsaUJBQWdCO0FBQ3pDLFNBQVNDLGdCQUFnQixFQUFFQyxVQUFVLFFBQVEsZ0JBQWU7QUFDNUQsU0FBU0MscUJBQXFCLFFBQVEsb0JBQW1CO0FBQ3pELE9BQU9DLGlCQUFpQixnQkFBZTtBQUN2QyxTQUFTQyxNQUFNQyxJQUFJLFFBQVEsT0FBTTtBQTZDakM7Ozs7Q0FJQyxHQUNE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
|
@@ -1,34 +1,24 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
value: true
|
4
|
-
});
|
5
|
-
Object.defineProperty(exports, "operatorMap", {
|
6
|
-
enumerable: true,
|
7
|
-
get: function() {
|
8
|
-
return operatorMap;
|
9
|
-
}
|
10
|
-
});
|
11
|
-
const _drizzleorm = require("drizzle-orm");
|
12
|
-
const operatorMap = {
|
1
|
+
import { and, eq, gt, gte, ilike, inArray, isNotNull, isNull, lt, lte, ne, notInArray, or } from 'drizzle-orm';
|
2
|
+
export const operatorMap = {
|
13
3
|
// intersects: intersects,
|
14
|
-
and
|
15
|
-
contains:
|
16
|
-
equals:
|
17
|
-
exists:
|
18
|
-
greater_than:
|
19
|
-
greater_than_equal:
|
20
|
-
in:
|
21
|
-
isNull
|
22
|
-
less_than:
|
23
|
-
less_than_equal:
|
24
|
-
like:
|
25
|
-
not_equals:
|
4
|
+
and,
|
5
|
+
contains: ilike,
|
6
|
+
equals: eq,
|
7
|
+
exists: isNotNull,
|
8
|
+
greater_than: gt,
|
9
|
+
greater_than_equal: gte,
|
10
|
+
in: inArray,
|
11
|
+
isNull,
|
12
|
+
less_than: lt,
|
13
|
+
less_than_equal: lte,
|
14
|
+
like: ilike,
|
15
|
+
not_equals: ne,
|
26
16
|
// TODO: geojson queries
|
27
17
|
// near: near,
|
28
18
|
// within: within,
|
29
19
|
// all: all,
|
30
|
-
not_in:
|
31
|
-
or
|
20
|
+
not_in: notInArray,
|
21
|
+
or
|
32
22
|
};
|
33
23
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL29wZXJhdG9yTWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFuZCxcbiAgZXEsXG4gIGd0LFxuICBndGUsXG4gIGlsaWtlLFxuICBpbkFycmF5LFxuICBpc05vdE51bGwsXG4gIGlzTnVsbCxcbiAgbHQsXG4gIGx0ZSxcbiAgbmUsXG4gIG5vdEluQXJyYXksXG4gIG9yLFxufSBmcm9tICdkcml6emxlLW9ybSdcblxuZXhwb3J0IGNvbnN0IG9wZXJhdG9yTWFwID0ge1xuICAvLyBpbnRlcnNlY3RzOiBpbnRlcnNlY3RzLFxuICBhbmQsXG4gIGNvbnRhaW5zOiBpbGlrZSxcbiAgZXF1YWxzOiBlcSxcbiAgZXhpc3RzOiBpc05vdE51bGwsXG4gIGdyZWF0ZXJfdGhhbjogZ3QsXG4gIGdyZWF0ZXJfdGhhbl9lcXVhbDogZ3RlLFxuICBpbjogaW5BcnJheSxcbiAgaXNOdWxsLCAvLyBoYW5kbGVzIGV4aXN0czogZmFsc2VcbiAgbGVzc190aGFuOiBsdCxcbiAgbGVzc190aGFuX2VxdWFsOiBsdGUsXG4gIGxpa2U6IGlsaWtlLFxuICBub3RfZXF1YWxzOiBuZSxcbiAgLy8gVE9ETzogZ2VvanNvbiBxdWVyaWVzXG4gIC8vIG5lYXI6IG5lYXIsXG4gIC8vIHdpdGhpbjogd2l0aGluLFxuICAvLyBhbGw6IGFsbCxcbiAgbm90X2luOiBub3RJbkFycmF5LFxuICBvcixcbn1cbiJdLCJuYW1lcyI6WyJhbmQiLCJlcSIsImd0IiwiZ3RlIiwiaWxpa2UiLCJpbkFycmF5IiwiaXNOb3ROdWxsIiwiaXNOdWxsIiwibHQiLCJsdGUiLCJuZSIsIm5vdEluQXJyYXkiLCJvciIsIm9wZXJhdG9yTWFwIiwiY29udGFpbnMiLCJlcXVhbHMiLCJleGlzdHMiLCJncmVhdGVyX3RoYW4iLCJncmVhdGVyX3RoYW5fZXF1YWwiLCJpbiIsImxlc3NfdGhhbiIsImxlc3NfdGhhbl9lcXVhbCIsImxpa2UiLCJub3RfZXF1YWxzIiwibm90X2luIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSxHQUFHLEVBQ0hDLEVBQUUsRUFDRkMsRUFBRSxFQUNGQyxHQUFHLEVBQ0hDLEtBQUssRUFDTEMsT0FBTyxFQUNQQyxTQUFTLEVBQ1RDLE1BQU0sRUFDTkMsRUFBRSxFQUNGQyxHQUFHLEVBQ0hDLEVBQUUsRUFDRkMsVUFBVSxFQUNWQyxFQUFFLFFBQ0csY0FBYTtBQUVwQixPQUFPLE1BQU1DLGNBQWM7SUFDekIsMEJBQTBCO0lBQzFCYjtJQUNBYyxVQUFVVjtJQUNWVyxRQUFRZDtJQUNSZSxRQUFRVjtJQUNSVyxjQUFjZjtJQUNkZ0Isb0JBQW9CZjtJQUNwQmdCLElBQUlkO0lBQ0pFO0lBQ0FhLFdBQVdaO0lBQ1hhLGlCQUFpQlo7SUFDakJhLE1BQU1sQjtJQUNObUIsWUFBWWI7SUFDWix3QkFBd0I7SUFDeEIsY0FBYztJQUNkLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1pjLFFBQVFiO0lBQ1JDO0FBQ0YsRUFBQyJ9
|