@payloadcms/db-postgres 3.0.0-alpha.41 → 3.0.0-alpha.42
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/connect.js +1 -1
- package/dist/connect.js.map +1 -0
- package/dist/create.js +1 -1
- package/dist/create.js.map +1 -0
- package/dist/createGlobal.js +1 -1
- package/dist/createGlobal.js.map +1 -0
- package/dist/createGlobalVersion.js +1 -1
- package/dist/createGlobalVersion.js.map +1 -0
- package/dist/createMigration.js +1 -1
- package/dist/createMigration.js.map +1 -0
- package/dist/createVersion.js +1 -1
- package/dist/createVersion.js.map +1 -0
- package/dist/deleteMany.js +1 -1
- package/dist/deleteMany.js.map +1 -0
- package/dist/deleteOne.js +1 -1
- package/dist/deleteOne.js.map +1 -0
- package/dist/deleteVersions.js +1 -1
- package/dist/deleteVersions.js.map +1 -0
- package/dist/destroy.js +1 -1
- package/dist/destroy.js.map +1 -0
- package/dist/find/buildFindManyArgs.js +1 -1
- package/dist/find/buildFindManyArgs.js.map +1 -0
- package/dist/find/chainMethods.js +1 -1
- package/dist/find/chainMethods.js.map +1 -0
- package/dist/find/findMany.js +1 -1
- package/dist/find/findMany.js.map +1 -0
- package/dist/find/traverseFields.js +1 -1
- package/dist/find/traverseFields.js.map +1 -0
- package/dist/find.js +1 -1
- package/dist/find.js.map +1 -0
- package/dist/findGlobal.js +1 -1
- package/dist/findGlobal.js.map +1 -0
- package/dist/findGlobalVersions.js +1 -1
- package/dist/findGlobalVersions.js.map +1 -0
- package/dist/findOne.js +1 -1
- package/dist/findOne.js.map +1 -0
- package/dist/findVersions.js +1 -1
- package/dist/findVersions.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -0
- package/dist/init.js +1 -1
- package/dist/init.js.map +1 -0
- package/dist/migrate.js +1 -1
- package/dist/migrate.js.map +1 -0
- package/dist/migrateDown.js +1 -1
- package/dist/migrateDown.js.map +1 -0
- package/dist/migrateFresh.js +1 -1
- package/dist/migrateFresh.js.map +1 -0
- package/dist/migrateRefresh.js +1 -1
- package/dist/migrateRefresh.js.map +1 -0
- package/dist/migrateReset.js +1 -1
- package/dist/migrateReset.js.map +1 -0
- package/dist/migrateStatus.js +1 -1
- package/dist/migrateStatus.js.map +1 -0
- package/dist/queries/buildAndOrConditions.js +1 -1
- package/dist/queries/buildAndOrConditions.js.map +1 -0
- package/dist/queries/buildQuery.js +1 -1
- package/dist/queries/buildQuery.js.map +1 -0
- package/dist/queries/createJSONQuery/convertPathToJSONTraversal.js +1 -1
- package/dist/queries/createJSONQuery/convertPathToJSONTraversal.js.map +1 -0
- package/dist/queries/createJSONQuery/formatJSONPathSegment.js +1 -1
- package/dist/queries/createJSONQuery/formatJSONPathSegment.js.map +1 -0
- package/dist/queries/createJSONQuery/index.js +1 -1
- package/dist/queries/createJSONQuery/index.js.map +1 -0
- package/dist/queries/getTableColumnFromPath.js +1 -1
- package/dist/queries/getTableColumnFromPath.js.map +1 -0
- package/dist/queries/operatorMap.js +1 -1
- package/dist/queries/operatorMap.js.map +1 -0
- package/dist/queries/parseParams.js +1 -1
- package/dist/queries/parseParams.js.map +1 -0
- package/dist/queries/sanitizeQueryValue.js +1 -1
- package/dist/queries/sanitizeQueryValue.js.map +1 -0
- package/dist/queryDrafts.js +1 -1
- package/dist/queryDrafts.js.map +1 -0
- package/dist/schema/build.js +1 -1
- package/dist/schema/build.js.map +1 -0
- package/dist/schema/createIndex.js +1 -1
- package/dist/schema/createIndex.js.map +1 -0
- package/dist/schema/idToUUID.js +1 -1
- package/dist/schema/idToUUID.js.map +1 -0
- package/dist/schema/parentIDColumnMap.js +1 -1
- package/dist/schema/parentIDColumnMap.js.map +1 -0
- package/dist/schema/setColumnID.js +1 -1
- package/dist/schema/setColumnID.js.map +1 -0
- package/dist/schema/traverseFields.js +1 -1
- package/dist/schema/traverseFields.js.map +1 -0
- package/dist/schema/validateExistingBlockIsIdentical.js +1 -1
- package/dist/schema/validateExistingBlockIsIdentical.js.map +1 -0
- package/dist/transactions/beginTransaction.js +1 -1
- package/dist/transactions/beginTransaction.js.map +1 -0
- package/dist/transactions/commitTransaction.js +1 -1
- package/dist/transactions/commitTransaction.js.map +1 -0
- package/dist/transactions/rollbackTransaction.js +1 -1
- package/dist/transactions/rollbackTransaction.js.map +1 -0
- package/dist/transform/read/hasManyNumber.js +1 -1
- package/dist/transform/read/hasManyNumber.js.map +1 -0
- package/dist/transform/read/hasManyText.js +1 -1
- package/dist/transform/read/hasManyText.js.map +1 -0
- package/dist/transform/read/index.js +1 -1
- package/dist/transform/read/index.js.map +1 -0
- package/dist/transform/read/relationship.js +1 -1
- package/dist/transform/read/relationship.js.map +1 -0
- package/dist/transform/read/traverseFields.js +1 -1
- package/dist/transform/read/traverseFields.js.map +1 -0
- package/dist/transform/write/array.js +1 -1
- package/dist/transform/write/array.js.map +1 -0
- package/dist/transform/write/blocks.js +1 -1
- package/dist/transform/write/blocks.js.map +1 -0
- package/dist/transform/write/index.js +1 -1
- package/dist/transform/write/index.js.map +1 -0
- package/dist/transform/write/numbers.js +1 -1
- package/dist/transform/write/numbers.js.map +1 -0
- package/dist/transform/write/relationships.js +1 -1
- package/dist/transform/write/relationships.js.map +1 -0
- package/dist/transform/write/selects.js +1 -1
- package/dist/transform/write/selects.js.map +1 -0
- package/dist/transform/write/texts.js +1 -1
- package/dist/transform/write/texts.js.map +1 -0
- package/dist/transform/write/traverseFields.js +1 -1
- package/dist/transform/write/traverseFields.js.map +1 -0
- package/dist/transform/write/types.js +1 -1
- package/dist/transform/write/types.js.map +1 -0
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -0
- package/dist/update.js +1 -1
- package/dist/update.js.map +1 -0
- package/dist/updateGlobal.js +1 -1
- package/dist/updateGlobal.js.map +1 -0
- package/dist/updateGlobalVersion.js +1 -1
- package/dist/updateGlobalVersion.js.map +1 -0
- package/dist/updateVersion.js +1 -1
- package/dist/updateVersion.js.map +1 -0
- package/dist/upsertRow/deleteExistingArrayRows.js +1 -1
- package/dist/upsertRow/deleteExistingArrayRows.js.map +1 -0
- package/dist/upsertRow/deleteExistingRowsByPath.js +1 -1
- package/dist/upsertRow/deleteExistingRowsByPath.js.map +1 -0
- package/dist/upsertRow/index.js +1 -1
- package/dist/upsertRow/index.js.map +1 -0
- package/dist/upsertRow/insertArrays.js +1 -1
- package/dist/upsertRow/insertArrays.js.map +1 -0
- package/dist/upsertRow/types.js +1 -1
- package/dist/upsertRow/types.js.map +1 -0
- package/dist/utilities/appendPrefixToKeys.js +1 -1
- package/dist/utilities/appendPrefixToKeys.js.map +1 -0
- package/dist/utilities/createBlocksMap.js +1 -1
- package/dist/utilities/createBlocksMap.js.map +1 -0
- package/dist/utilities/createMigrationTable.js +1 -1
- package/dist/utilities/createMigrationTable.js.map +1 -0
- package/dist/utilities/createRelationshipMap.js +1 -1
- package/dist/utilities/createRelationshipMap.js.map +1 -0
- package/dist/utilities/hasLocalesTable.js +1 -1
- package/dist/utilities/hasLocalesTable.js.map +1 -0
- package/dist/utilities/isArrayOfRows.js +1 -1
- package/dist/utilities/isArrayOfRows.js.map +1 -0
- package/dist/utilities/migrationTableExists.js +1 -1
- package/dist/utilities/migrationTableExists.js.map +1 -0
- package/dist/utilities/parseError.js +1 -1
- package/dist/utilities/parseError.js.map +1 -0
- package/dist/utilities/pushDevSchema.js +1 -1
- package/dist/utilities/pushDevSchema.js.map +1 -0
- package/package.json +3 -3
@@ -179,4 +179,4 @@ export async function parseParams({ adapter, fields, joinAliases, joins, locale,
|
|
179
179
|
return result;
|
180
180
|
}
|
181
181
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyaWVzL3BhcnNlUGFyYW1zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cbmltcG9ydCB0eXBlIHsgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgdHlwZSB7IEZpZWxkLCBPcGVyYXRvciwgV2hlcmUgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyBhbmQsIGlsaWtlLCBpc05vdE51bGwsIGlzTnVsbCwgbmUsIG5vdEluQXJyYXksIG9yLCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7IFF1ZXJ5RXJyb3IgfSBmcm9tICdwYXlsb2FkL2Vycm9ycydcbmltcG9ydCB7IHZhbGlkT3BlcmF0b3JzIH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmljQ29sdW1uLCBQb3N0Z3Jlc0FkYXB0ZXIgfSBmcm9tICcuLi90eXBlcy5qcydcbmltcG9ydCB0eXBlIHsgQnVpbGRRdWVyeUpvaW5BbGlhc2VzLCBCdWlsZFF1ZXJ5Sm9pbnMgfSBmcm9tICcuL2J1aWxkUXVlcnkuanMnXG5cbmltcG9ydCB7IGJ1aWxkQW5kT3JDb25kaXRpb25zIH0gZnJvbSAnLi9idWlsZEFuZE9yQ29uZGl0aW9ucy5qcydcbmltcG9ydCB7IGNyZWF0ZUpTT05RdWVyeSB9IGZyb20gJy4vY3JlYXRlSlNPTlF1ZXJ5L2luZGV4LmpzJ1xuaW1wb3J0IHsgY29udmVydFBhdGhUb0pTT05UcmF2ZXJzYWwgfSBmcm9tICcuL2NyZWF0ZUpTT05RdWVyeS9jb252ZXJ0UGF0aFRvSlNPTlRyYXZlcnNhbC5qcydcbmltcG9ydCB7IGdldFRhYmxlQ29sdW1uRnJvbVBhdGggfSBmcm9tICcuL2dldFRhYmxlQ29sdW1uRnJvbVBhdGguanMnXG5pbXBvcnQgeyBvcGVyYXRvck1hcCB9IGZyb20gJy4vb3BlcmF0b3JNYXAuanMnXG5pbXBvcnQgeyBzYW5pdGl6ZVF1ZXJ5VmFsdWUgfSBmcm9tICcuL3Nhbml0aXplUXVlcnlWYWx1ZS5qcydcblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgZmllbGRzOiBGaWVsZFtdXG4gIGpvaW5BbGlhc2VzOiBCdWlsZFF1ZXJ5Sm9pbkFsaWFzZXNcbiAgam9pbnM6IEJ1aWxkUXVlcnlKb2luc1xuICBsb2NhbGU6IHN0cmluZ1xuICBzZWxlY3RGaWVsZHM6IFJlY29yZDxzdHJpbmcsIEdlbmVyaWNDb2x1bW4+XG4gIHRhYmxlTmFtZTogc3RyaW5nXG4gIHdoZXJlOiBXaGVyZVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VQYXJhbXMoe1xuICBhZGFwdGVyLFxuICBmaWVsZHMsXG4gIGpvaW5BbGlhc2VzLFxuICBqb2lucyxcbiAgbG9jYWxlLFxuICBzZWxlY3RGaWVsZHMsXG4gIHRhYmxlTmFtZSxcbiAgd2hlcmUsXG59OiBBcmdzKTogUHJvbWlzZTxTUUw+IHtcbiAgbGV0IHJlc3VsdDogU1FMXG4gIGNvbnN0IGNvbnN0cmFpbnRzOiBTUUxbXSA9IFtdXG5cbiAgaWYgKHR5cGVvZiB3aGVyZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMod2hlcmUpLmxlbmd0aCA+IDApIHtcbiAgICAvLyBXZSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGUgd2hlcmVLZXkgaXMgYW4gQU5ELCBPUiwgb3IgYSBzY2hlbWEgcGF0aFxuICAgIGZvciAoY29uc3QgcmVsYXRpb25PclBhdGggb2YgT2JqZWN0LmtleXMod2hlcmUpKSB7XG4gICAgICBpZiAocmVsYXRpb25PclBhdGgpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gd2hlcmVbcmVsYXRpb25PclBhdGhdXG4gICAgICAgIGxldCBjb25kaXRpb25PcGVyYXRvcjogJ2FuZCcgfCAnb3InXG4gICAgICAgIGlmIChyZWxhdGlvbk9yUGF0aC50b0xvd2VyQ2FzZSgpID09PSAnYW5kJykge1xuICAgICAgICAgIGNvbmRpdGlvbk9wZXJhdG9yID0gJ2FuZCdcbiAgICAgICAgfSBlbHNlIGlmIChyZWxhdGlvbk9yUGF0aC50b0xvd2VyQ2FzZSgpID09PSAnb3InKSB7XG4gICAgICAgICAgY29uZGl0aW9uT3BlcmF0b3IgPSAnb3InXG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZGl0aW9uKSkge1xuICAgICAgICAgIGNvbnN0IGJ1aWx0Q29uZGl0aW9ucyA9IGF3YWl0IGJ1aWxkQW5kT3JDb25kaXRpb25zKHtcbiAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICBqb2luQWxpYXNlcyxcbiAgICAgICAgICAgIGpvaW5zLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgc2VsZWN0RmllbGRzLFxuICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgd2hlcmU6IGNvbmRpdGlvbixcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChidWlsdENvbmRpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gb3BlcmF0b3JNYXBbY29uZGl0aW9uT3BlcmF0b3JdKC4uLmJ1aWx0Q29uZGl0aW9ucylcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSXQncyBhIHBhdGggLSBhbmQgdGhlcmUgY2FuIGJlIG11bHRpcGxlIGNvbXBhcmlzb25zIG9uIGEgc2luZ2xlIHBhdGguXG4gICAgICAgICAgLy8gRm9yIGV4YW1wbGUgLSB0aXRsZSBsaWtlICd0ZXN0JyBhbmQgdGl0bGUgbm90IGVxdWFsIHRvICd0ZXN0ZXInXG4gICAgICAgICAgLy8gU28gd2UgbmVlZCB0byBsb29wIG9uIGtleXMgYWdhaW4gaGVyZSB0byBoYW5kbGUgZWFjaCBvcGVyYXRvciBpbmRlcGVuZGVudGx5XG4gICAgICAgICAgY29uc3QgcGF0aE9wZXJhdG9ycyA9IHdoZXJlW3JlbGF0aW9uT3JQYXRoXVxuICAgICAgICAgIGlmICh0eXBlb2YgcGF0aE9wZXJhdG9ycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3BlcmF0b3Igb2YgT2JqZWN0LmtleXMocGF0aE9wZXJhdG9ycykpIHtcbiAgICAgICAgICAgICAgaWYgKHZhbGlkT3BlcmF0b3JzLmluY2x1ZGVzKG9wZXJhdG9yIGFzIE9wZXJhdG9yKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHdoZXJlW3JlbGF0aW9uT3JQYXRoXVtvcGVyYXRvcl1cbiAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICAgICAgY29uc3RyYWludHM6IHF1ZXJ5Q29uc3RyYWludHMsXG4gICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgIGdldE5vdE51bGxDb2x1bW5CeVZhbHVlLFxuICAgICAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzLFxuICAgICAgICAgICAgICAgICAgcmF3Q29sdW1uLFxuICAgICAgICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICAgICAgfSA9IGdldFRhYmxlQ29sdW1uRnJvbVBhdGgoe1xuICAgICAgICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25QYXRoOiByZWxhdGlvbk9yUGF0aCxcbiAgICAgICAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgICAgICAgIGpvaW5BbGlhc2VzLFxuICAgICAgICAgICAgICAgICAgam9pbnMsXG4gICAgICAgICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICAgICAgICBwYXRoU2VnbWVudHM6IHJlbGF0aW9uT3JQYXRoLnJlcGxhY2UoL19fL2csICcuJykuc3BsaXQoJy4nKSxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdEZpZWxkcyxcbiAgICAgICAgICAgICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHF1ZXJ5Q29uc3RyYWludHMuZm9yRWFjaCgoeyBjb2x1bW5OYW1lOiBjb2wsIHRhYmxlOiBjb25zdHJhaW50VGFibGUsIHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmluZGV4T2YoJyUnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gob3BlcmF0b3JNYXAubGlrZShjb25zdHJhaW50VGFibGVbY29sXSwgdmFsdWUpKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChvcGVyYXRvck1hcC5lcXVhbHMoY29uc3RyYWludFRhYmxlW2NvbF0sIHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgWydqc29uJywgJ3JpY2hUZXh0J10uaW5jbHVkZXMoZmllbGQudHlwZSkgJiZcbiAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocGF0aFNlZ21lbnRzKSAmJlxuICAgICAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aFNlZ21lbnRzLnNsaWNlKDEpXG4gICAgICAgICAgICAgICAgICBzZWdtZW50cy51bnNoaWZ0KHRhYmxlW2NvbHVtbk5hbWVdLm5hbWUpXG5cbiAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAncmljaFRleHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25RdWVyeSA9IGNyZWF0ZUpTT05RdWVyeSh7XG4gICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgcGF0aFNlZ21lbnRzOiBzZWdtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICB0cmVhdEFzQXJyYXk6IFsnY2hpbGRyZW4nXSxcbiAgICAgICAgICAgICAgICAgICAgICB0cmVhdFJvb3RBc0FycmF5OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChzcWwucmF3KGpzb25RdWVyeSkpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25RdWVyeSA9IGNvbnZlcnRQYXRoVG9KU09OVHJhdmVyc2FsKHBhdGhTZWdtZW50cylcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdG9yS2V5cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbnM6IHsgb3BlcmF0b3I6ICdpbGlrZScsIHdpbGRjYXJkOiAnJScgfSxcbiAgICAgICAgICAgICAgICAgICAgZXF1YWxzOiB7IG9wZXJhdG9yOiAnPScsIHdpbGRjYXJkOiAnJyB9LFxuICAgICAgICAgICAgICAgICAgICBleGlzdHM6IHsgb3BlcmF0b3I6IHZhbCA9PT0gdHJ1ZSA/ICdpcyBub3QgbnVsbCcgOiAnaXMgbnVsbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgbGlrZTogeyBvcGVyYXRvcjogJ2xpa2UnLCB3aWxkY2FyZDogJyUnIH0sXG4gICAgICAgICAgICAgICAgICAgIG5vdF9lcXVhbHM6IHsgb3BlcmF0b3I6ICc8PicsIHdpbGRjYXJkOiAnJyB9LFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdHRlZFZhbHVlID0gYCcke29wZXJhdG9yS2V5c1tvcGVyYXRvcl0ud2lsZGNhcmR9JHt2YWx9JHtvcGVyYXRvcktleXNbb3BlcmF0b3JdLndpbGRjYXJkfSdgXG5cbiAgICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gJ2V4aXN0cycpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSAnJ1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBzcWwucmF3KFxuICAgICAgICAgICAgICAgICAgICAgIGAke3RhYmxlW2NvbHVtbk5hbWVdLm5hbWV9JHtqc29uUXVlcnl9ICR7b3BlcmF0b3JLZXlzW29wZXJhdG9yXS5vcGVyYXRvcn0gJHtmb3JtYXR0ZWRWYWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChnZXROb3ROdWxsQ29sdW1uQnlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uTmFtZSA9IGdldE5vdE51bGxDb2x1bW5CeVZhbHVlKHZhbClcbiAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goaXNOb3ROdWxsKHRhYmxlW2NvbHVtbk5hbWVdKSlcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKFt7IHBhdGg6IHJlbGF0aW9uT3JQYXRoIH1dKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IgPT09ICdsaWtlJykge1xuICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgYW5kKC4uLnZhbC5zcGxpdCgnICcpLm1hcCgod29yZCkgPT4gaWxpa2UodGFibGVbY29sdW1uTmFtZV0sIGAlJHt3b3JkfSVgKSkpLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzYW5pdGl6ZWRRdWVyeVZhbHVlID0gc2FuaXRpemVRdWVyeVZhbHVlKHtcbiAgICAgICAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgcmVsYXRpb25PclBhdGgsXG4gICAgICAgICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGlmIChzYW5pdGl6ZWRRdWVyeVZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgb3BlcmF0b3I6IHF1ZXJ5T3BlcmF0b3IsIHZhbHVlOiBxdWVyeVZhbHVlIH0gPSBzYW5pdGl6ZWRRdWVyeVZhbHVlXG5cbiAgICAgICAgICAgICAgICBpZiAocXVlcnlPcGVyYXRvciA9PT0gJ25vdF9lcXVhbHMnICYmIHF1ZXJ5VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIG9yKFxuICAgICAgICAgICAgICAgICAgICAgIGlzTnVsbChyYXdDb2x1bW4gfHwgdGFibGVbY29sdW1uTmFtZV0pLFxuICAgICAgICAgICAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbiAgICAgICAgICAgICAgICAgICAgICBuZTxhbnk+KHJhd0NvbHVtbiB8fCB0YWJsZVtjb2x1bW5OYW1lXSwgcXVlcnlWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIChmaWVsZC50eXBlID09PSAncmVsYXRpb25zaGlwJyB8fCBmaWVsZC50eXBlID09PSAndXBsb2FkJykgJiZcbiAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocXVlcnlWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yID09PSAnbm90X2luJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgc3FsYCR7bm90SW5BcnJheSh0YWJsZVtjb2x1bW5OYW1lXSwgcXVlcnlWYWx1ZSl9IE9SXG4gICAgICAgICAgICAgICAgICAgICR7dGFibGVbY29sdW1uTmFtZV19XG4gICAgICAgICAgICAgICAgICAgIElTXG4gICAgICAgICAgICAgICAgICAgIE5VTExgLFxuICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gJ2VxdWFscycgJiYgcXVlcnlWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChpc051bGwocmF3Q29sdW1uIHx8IHRhYmxlW2NvbHVtbk5hbWVdKSlcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yID09PSAnbm90X2VxdWFscycgJiYgcXVlcnlWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChpc05vdE51bGwocmF3Q29sdW1uIHx8IHRhYmxlW2NvbHVtbk5hbWVdKSlcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTWFwW3F1ZXJ5T3BlcmF0b3JdKHJhd0NvbHVtbiB8fCB0YWJsZVtjb2x1bW5OYW1lXSwgcXVlcnlWYWx1ZSksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjb25zdHJhaW50cy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmVzdWx0ID0gYW5kKHJlc3VsdCwgLi4uY29uc3RyYWludHMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGFuZCguLi5jb25zdHJhaW50cylcbiAgICB9XG4gIH1cbiAgaWYgKGNvbnN0cmFpbnRzLmxlbmd0aCA9PT0gMSAmJiAhcmVzdWx0KSB7XG4gICAgO1tyZXN1bHRdID0gY29uc3RyYWludHNcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cbiJdLCJuYW1lcyI6WyJhbmQiLCJpbGlrZSIsImlzTm90TnVsbCIsImlzTnVsbCIsIm5lIiwibm90SW5BcnJheSIsIm9yIiwic3FsIiwiUXVlcnlFcnJvciIsInZhbGlkT3BlcmF0b3JzIiwiYnVpbGRBbmRPckNvbmRpdGlvbnMiLCJjcmVhdGVKU09OUXVlcnkiLCJjb252ZXJ0UGF0aFRvSlNPTlRyYXZlcnNhbCIsImdldFRhYmxlQ29sdW1uRnJvbVBhdGgiLCJvcGVyYXRvck1hcCIsInNhbml0aXplUXVlcnlWYWx1ZSIsInBhcnNlUGFyYW1zIiwiYWRhcHRlciIsImZpZWxkcyIsImpvaW5BbGlhc2VzIiwiam9pbnMiLCJsb2NhbGUiLCJzZWxlY3RGaWVsZHMiLCJ0YWJsZU5hbWUiLCJ3aGVyZSIsInJlc3VsdCIsImNvbnN0cmFpbnRzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInJlbGF0aW9uT3JQYXRoIiwiY29uZGl0aW9uIiwiY29uZGl0aW9uT3BlcmF0b3IiLCJ0b0xvd2VyQ2FzZSIsIkFycmF5IiwiaXNBcnJheSIsImJ1aWx0Q29uZGl0aW9ucyIsInBhdGhPcGVyYXRvcnMiLCJvcGVyYXRvciIsImluY2x1ZGVzIiwidmFsIiwiY29sdW1uTmFtZSIsInF1ZXJ5Q29uc3RyYWludHMiLCJmaWVsZCIsImdldE5vdE51bGxDb2x1bW5CeVZhbHVlIiwicGF0aFNlZ21lbnRzIiwicmF3Q29sdW1uIiwidGFibGUiLCJjb2xsZWN0aW9uUGF0aCIsInJlcGxhY2UiLCJzcGxpdCIsInZhbHVlIiwiZm9yRWFjaCIsImNvbCIsImNvbnN0cmFpbnRUYWJsZSIsImluZGV4T2YiLCJwdXNoIiwibGlrZSIsImVxdWFscyIsInR5cGUiLCJzZWdtZW50cyIsInNsaWNlIiwidW5zaGlmdCIsIm5hbWUiLCJqc29uUXVlcnkiLCJ0cmVhdEFzQXJyYXkiLCJ0cmVhdFJvb3RBc0FycmF5IiwicmF3Iiwib3BlcmF0b3JLZXlzIiwiY29udGFpbnMiLCJ3aWxkY2FyZCIsImV4aXN0cyIsIm5vdF9lcXVhbHMiLCJmb3JtYXR0ZWRWYWx1ZSIsInBhdGgiLCJtYXAiLCJ3b3JkIiwic2FuaXRpemVkUXVlcnlWYWx1ZSIsInF1ZXJ5T3BlcmF0b3IiLCJxdWVyeVZhbHVlIl0sIm1hcHBpbmdzIjoiQUFBQSxtQ0FBbUMsR0FJbkMsU0FBU0EsR0FBRyxFQUFFQyxLQUFLLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxFQUFFLEVBQUVDLFVBQVUsRUFBRUMsRUFBRSxFQUFFQyxHQUFHLFFBQVEsY0FBYTtBQUNwRixTQUFTQyxVQUFVLFFBQVEsaUJBQWdCO0FBQzNDLFNBQVNDLGNBQWMsUUFBUSxnQkFBZTtBQUs5QyxTQUFTQyxvQkFBb0IsUUFBUSw0QkFBMkI7QUFDaEUsU0FBU0MsZUFBZSxRQUFRLDZCQUE0QjtBQUM1RCxTQUFTQywwQkFBMEIsUUFBUSxrREFBaUQ7QUFDNUYsU0FBU0Msc0JBQXNCLFFBQVEsOEJBQTZCO0FBQ3BFLFNBQVNDLFdBQVcsUUFBUSxtQkFBa0I7QUFDOUMsU0FBU0Msa0JBQWtCLFFBQVEsMEJBQXlCO0FBYTVELE9BQU8sZUFBZUMsWUFBWSxFQUNoQ0MsT0FBTyxFQUNQQyxNQUFNLEVBQ05DLFdBQVcsRUFDWEMsS0FBSyxFQUNMQyxNQUFNLEVBQ05DLFlBQVksRUFDWkMsU0FBUyxFQUNUQyxLQUFLLEVBQ0E7SUFDTCxJQUFJQztJQUNKLE1BQU1DLGNBQXFCLEVBQUU7SUFFN0IsSUFBSSxPQUFPRixVQUFVLFlBQVlHLE9BQU9DLElBQUksQ0FBQ0osT0FBT0ssTUFBTSxHQUFHLEdBQUc7UUFDOUQsdUVBQXVFO1FBQ3ZFLEtBQUssTUFBTUMsa0JBQWtCSCxPQUFPQyxJQUFJLENBQUNKLE9BQVE7WUFDL0MsSUFBSU0sZ0JBQWdCO2dCQUNsQixNQUFNQyxZQUFZUCxLQUFLLENBQUNNLGVBQWU7Z0JBQ3ZDLElBQUlFO2dCQUNKLElBQUlGLGVBQWVHLFdBQVcsT0FBTyxPQUFPO29CQUMxQ0Qsb0JBQW9CO2dCQUN0QixPQUFPLElBQUlGLGVBQWVHLFdBQVcsT0FBTyxNQUFNO29CQUNoREQsb0JBQW9CO2dCQUN0QjtnQkFDQSxJQUFJRSxNQUFNQyxPQUFPLENBQUNKLFlBQVk7b0JBQzVCLE1BQU1LLGtCQUFrQixNQUFNMUIscUJBQXFCO3dCQUNqRE87d0JBQ0FDO3dCQUNBQzt3QkFDQUM7d0JBQ0FDO3dCQUNBQzt3QkFDQUM7d0JBQ0FDLE9BQU9PO29CQUNUO29CQUNBLElBQUlLLGdCQUFnQlAsTUFBTSxHQUFHLEdBQUc7d0JBQzlCSixTQUFTWCxXQUFXLENBQUNrQixrQkFBa0IsSUFBSUk7b0JBQzdDO2dCQUNGLE9BQU87b0JBQ0wsd0VBQXdFO29CQUN4RSxrRUFBa0U7b0JBQ2xFLDhFQUE4RTtvQkFDOUUsTUFBTUMsZ0JBQWdCYixLQUFLLENBQUNNLGVBQWU7b0JBQzNDLElBQUksT0FBT08sa0JBQWtCLFVBQVU7d0JBQ3JDLEtBQUssTUFBTUMsWUFBWVgsT0FBT0MsSUFBSSxDQUFDUyxlQUFnQjs0QkFDakQsSUFBSTVCLGVBQWU4QixRQUFRLENBQUNELFdBQXVCO2dDQUNqRCxNQUFNRSxNQUFNaEIsS0FBSyxDQUFDTSxlQUFlLENBQUNRLFNBQVM7Z0NBQzNDLE1BQU0sRUFDSkcsVUFBVSxFQUNWZixhQUFhZ0IsZ0JBQWdCLEVBQzdCQyxLQUFLLEVBQ0xDLHVCQUF1QixFQUN2QkMsWUFBWSxFQUNaQyxTQUFTLEVBQ1RDLEtBQUssRUFDTixHQUFHbEMsdUJBQXVCO29DQUN6Qkk7b0NBQ0ErQixnQkFBZ0JsQjtvQ0FDaEJaO29DQUNBQztvQ0FDQUM7b0NBQ0FDO29DQUNBd0IsY0FBY2YsZUFBZW1CLE9BQU8sQ0FBQyxPQUFPLEtBQUtDLEtBQUssQ0FBQztvQ0FDdkQ1QjtvQ0FDQUM7b0NBQ0E0QixPQUFPWDtnQ0FDVDtnQ0FFQUUsaUJBQWlCVSxPQUFPLENBQUMsQ0FBQyxFQUFFWCxZQUFZWSxHQUFHLEVBQUVOLE9BQU9PLGVBQWUsRUFBRUgsS0FBSyxFQUFFO29DQUMxRSxJQUFJLE9BQU9BLFVBQVUsWUFBWUEsTUFBTUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHO3dDQUN4RDdCLFlBQVk4QixJQUFJLENBQUMxQyxZQUFZMkMsSUFBSSxDQUFDSCxlQUFlLENBQUNELElBQUksRUFBRUY7b0NBQzFELE9BQU87d0NBQ0x6QixZQUFZOEIsSUFBSSxDQUFDMUMsWUFBWTRDLE1BQU0sQ0FBQ0osZUFBZSxDQUFDRCxJQUFJLEVBQUVGO29DQUM1RDtnQ0FDRjtnQ0FFQSxJQUNFO29DQUFDO29DQUFRO2lDQUFXLENBQUNaLFFBQVEsQ0FBQ0ksTUFBTWdCLElBQUksS0FDeEN6QixNQUFNQyxPQUFPLENBQUNVLGlCQUNkQSxhQUFhaEIsTUFBTSxHQUFHLEdBQ3RCO29DQUNBLE1BQU0rQixXQUFXZixhQUFhZ0IsS0FBSyxDQUFDO29DQUNwQ0QsU0FBU0UsT0FBTyxDQUFDZixLQUFLLENBQUNOLFdBQVcsQ0FBQ3NCLElBQUk7b0NBRXZDLElBQUlwQixNQUFNZ0IsSUFBSSxLQUFLLFlBQVk7d0NBQzdCLE1BQU1LLFlBQVlyRCxnQkFBZ0I7NENBQ2hDMkI7NENBQ0FPLGNBQWNlOzRDQUNkSyxjQUFjO2dEQUFDOzZDQUFXOzRDQUMxQkMsa0JBQWtCOzRDQUNsQmYsT0FBT1g7d0NBQ1Q7d0NBRUFkLFlBQVk4QixJQUFJLENBQUNqRCxJQUFJNEQsR0FBRyxDQUFDSDt3Q0FDekI7b0NBQ0Y7b0NBRUEsTUFBTUEsWUFBWXBELDJCQUEyQmlDO29DQUM3QyxNQUFNdUIsZUFBZTt3Q0FDbkJDLFVBQVU7NENBQUUvQixVQUFVOzRDQUFTZ0MsVUFBVTt3Q0FBSTt3Q0FDN0NaLFFBQVE7NENBQUVwQixVQUFVOzRDQUFLZ0MsVUFBVTt3Q0FBRzt3Q0FDdENDLFFBQVE7NENBQUVqQyxVQUFVRSxRQUFRLE9BQU8sZ0JBQWdCO3dDQUFVO3dDQUM3RGlCLE1BQU07NENBQUVuQixVQUFVOzRDQUFRZ0MsVUFBVTt3Q0FBSTt3Q0FDeENFLFlBQVk7NENBQUVsQyxVQUFVOzRDQUFNZ0MsVUFBVTt3Q0FBRztvQ0FDN0M7b0NBQ0EsSUFBSUcsaUJBQWlCLENBQUMsQ0FBQyxFQUFFTCxZQUFZLENBQUM5QixTQUFTLENBQUNnQyxRQUFRLENBQUMsRUFBRTlCLElBQUksRUFBRTRCLFlBQVksQ0FBQzlCLFNBQVMsQ0FBQ2dDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0NBRW5HLElBQUloQyxhQUFhLFVBQVU7d0NBQ3pCbUMsaUJBQWlCO29DQUNuQjtvQ0FFQS9DLFlBQVk4QixJQUFJLENBQ2RqRCxJQUFJNEQsR0FBRyxDQUNMLENBQUMsRUFBRXBCLEtBQUssQ0FBQ04sV0FBVyxDQUFDc0IsSUFBSSxDQUFDLEVBQUVDLFVBQVUsQ0FBQyxFQUFFSSxZQUFZLENBQUM5QixTQUFTLENBQUNBLFFBQVEsQ0FBQyxDQUFDLEVBQUVtQyxlQUFlLENBQUM7b0NBSWhHO2dDQUNGO2dDQUVBLElBQUk3Qix5QkFBeUI7b0NBQzNCLE1BQU1ILGFBQWFHLHdCQUF3Qko7b0NBQzNDLElBQUlDLFlBQVk7d0NBQ2RmLFlBQVk4QixJQUFJLENBQUN0RCxVQUFVNkMsS0FBSyxDQUFDTixXQUFXO29DQUM5QyxPQUFPO3dDQUNMLE1BQU0sSUFBSWpDLFdBQVc7NENBQUM7Z0RBQUVrRSxNQUFNNUM7NENBQWU7eUNBQUU7b0NBQ2pEO29DQUNBO2dDQUNGO2dDQUVBLElBQUlRLGFBQWEsUUFBUTtvQ0FDdkJaLFlBQVk4QixJQUFJLENBQ2R4RCxPQUFPd0MsSUFBSVUsS0FBSyxDQUFDLEtBQUt5QixHQUFHLENBQUMsQ0FBQ0MsT0FBUzNFLE1BQU04QyxLQUFLLENBQUNOLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRW1DLEtBQUssQ0FBQyxDQUFDO29DQUUxRTtnQ0FDRjtnQ0FFQSxNQUFNQyxzQkFBc0I5RCxtQkFBbUI7b0NBQzdDRTtvQ0FDQTBCO29DQUNBTDtvQ0FDQVI7b0NBQ0FVO2dDQUNGO2dDQUVBLElBQUlxQyx3QkFBd0IsTUFBTTtvQ0FDaEM7Z0NBQ0Y7Z0NBRUEsTUFBTSxFQUFFdkMsVUFBVXdDLGFBQWEsRUFBRTNCLE9BQU80QixVQUFVLEVBQUUsR0FBR0Y7Z0NBRXZELElBQUlDLGtCQUFrQixnQkFBZ0JDLGVBQWUsTUFBTTtvQ0FDekRyRCxZQUFZOEIsSUFBSSxDQUNkbEQsR0FDRUgsT0FBTzJDLGFBQWFDLEtBQUssQ0FBQ04sV0FBVyxHQUNyQyxxREFBcUQsR0FDckRyQyxHQUFRMEMsYUFBYUMsS0FBSyxDQUFDTixXQUFXLEVBQUVzQztvQ0FHNUM7Z0NBQ0Y7Z0NBRUEsSUFDRSxBQUFDcEMsQ0FBQUEsTUFBTWdCLElBQUksS0FBSyxrQkFBa0JoQixNQUFNZ0IsSUFBSSxLQUFLLFFBQU8sS0FDeER6QixNQUFNQyxPQUFPLENBQUM0QyxlQUNkekMsYUFBYSxVQUNiO29DQUNBWixZQUFZOEIsSUFBSSxDQUNkakQsR0FBRyxDQUFDLEVBQUVGLFdBQVcwQyxLQUFLLENBQUNOLFdBQVcsRUFBRXNDLFlBQVk7b0JBQ2hELEVBQUVoQyxLQUFLLENBQUNOLFdBQVcsQ0FBQzs7d0JBRWhCLENBQUM7b0NBR1A7Z0NBQ0Y7Z0NBRUEsSUFBSUgsYUFBYSxZQUFZeUMsZUFBZSxNQUFNO29DQUNoRHJELFlBQVk4QixJQUFJLENBQUNyRCxPQUFPMkMsYUFBYUMsS0FBSyxDQUFDTixXQUFXO29DQUN0RDtnQ0FDRjtnQ0FFQSxJQUFJSCxhQUFhLGdCQUFnQnlDLGVBQWUsTUFBTTtvQ0FDcERyRCxZQUFZOEIsSUFBSSxDQUFDdEQsVUFBVTRDLGFBQWFDLEtBQUssQ0FBQ04sV0FBVztvQ0FDekQ7Z0NBQ0Y7Z0NBRUFmLFlBQVk4QixJQUFJLENBQ2QxQyxXQUFXLENBQUNnRSxjQUFjLENBQUNoQyxhQUFhQyxLQUFLLENBQUNOLFdBQVcsRUFBRXNDOzRCQUUvRDt3QkFDRjtvQkFDRjtnQkFDRjtZQUNGO1FBQ0Y7SUFDRjtJQUNBLElBQUlyRCxZQUFZRyxNQUFNLEdBQUcsR0FBRztRQUMxQixJQUFJSixRQUFRO1lBQ1ZBLFNBQVN6QixJQUFJeUIsV0FBV0M7UUFDMUIsT0FBTztZQUNMRCxTQUFTekIsT0FBTzBCO1FBQ2xCO0lBQ0Y7SUFDQSxJQUFJQSxZQUFZRyxNQUFNLEtBQUssS0FBSyxDQUFDSixRQUFRO1FBQ3RDLENBQUNBLE9BQU8sR0FBR0M7SUFDZDtJQUVBLE9BQU9EO0FBQ1QifQ==
|
182
|
+
//# sourceMappingURL=parseParams.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/queries/parseParams.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\nimport type { SQL } from 'drizzle-orm'\nimport type { Field, Operator, Where } from 'payload/types'\n\nimport { and, ilike, isNotNull, isNull, ne, notInArray, or, sql } from 'drizzle-orm'\nimport { QueryError } from 'payload/errors'\nimport { validOperators } from 'payload/types'\n\nimport type { GenericColumn, PostgresAdapter } from '../types.js'\nimport type { BuildQueryJoinAliases, BuildQueryJoins } from './buildQuery.js'\n\nimport { buildAndOrConditions } from './buildAndOrConditions.js'\nimport { createJSONQuery } from './createJSONQuery/index.js'\nimport { convertPathToJSONTraversal } from './createJSONQuery/convertPathToJSONTraversal.js'\nimport { getTableColumnFromPath } from './getTableColumnFromPath.js'\nimport { operatorMap } from './operatorMap.js'\nimport { sanitizeQueryValue } from './sanitizeQueryValue.js'\n\ntype Args = {\n adapter: PostgresAdapter\n fields: Field[]\n joinAliases: BuildQueryJoinAliases\n joins: BuildQueryJoins\n locale: string\n selectFields: Record<string, GenericColumn>\n tableName: string\n where: Where\n}\n\nexport async function parseParams({\n adapter,\n fields,\n joinAliases,\n joins,\n locale,\n selectFields,\n tableName,\n where,\n}: Args): Promise<SQL> {\n let result: SQL\n const constraints: SQL[] = []\n\n if (typeof where === 'object' && Object.keys(where).length > 0) {\n // We need to determine if the whereKey is an AND, OR, or a schema path\n for (const relationOrPath of Object.keys(where)) {\n if (relationOrPath) {\n const condition = where[relationOrPath]\n let conditionOperator: 'and' | 'or'\n if (relationOrPath.toLowerCase() === 'and') {\n conditionOperator = 'and'\n } else if (relationOrPath.toLowerCase() === 'or') {\n conditionOperator = 'or'\n }\n if (Array.isArray(condition)) {\n const builtConditions = await buildAndOrConditions({\n adapter,\n fields,\n joinAliases,\n joins,\n locale,\n selectFields,\n tableName,\n where: condition,\n })\n if (builtConditions.length > 0) {\n result = operatorMap[conditionOperator](...builtConditions)\n }\n } else {\n // It's a path - and there can be multiple comparisons on a single path.\n // For example - title like 'test' and title not equal to 'tester'\n // So we need to loop on keys again here to handle each operator independently\n const pathOperators = where[relationOrPath]\n if (typeof pathOperators === 'object') {\n for (const operator of Object.keys(pathOperators)) {\n if (validOperators.includes(operator as Operator)) {\n const val = where[relationOrPath][operator]\n const {\n columnName,\n constraints: queryConstraints,\n field,\n getNotNullColumnByValue,\n pathSegments,\n rawColumn,\n table,\n } = getTableColumnFromPath({\n adapter,\n collectionPath: relationOrPath,\n fields,\n joinAliases,\n joins,\n locale,\n pathSegments: relationOrPath.replace(/__/g, '.').split('.'),\n selectFields,\n tableName,\n value: val,\n })\n\n queryConstraints.forEach(({ columnName: col, table: constraintTable, value }) => {\n if (typeof value === 'string' && value.indexOf('%') > -1) {\n constraints.push(operatorMap.like(constraintTable[col], value))\n } else {\n constraints.push(operatorMap.equals(constraintTable[col], value))\n }\n })\n\n if (\n ['json', 'richText'].includes(field.type) &&\n Array.isArray(pathSegments) &&\n pathSegments.length > 1\n ) {\n const segments = pathSegments.slice(1)\n segments.unshift(table[columnName].name)\n\n if (field.type === 'richText') {\n const jsonQuery = createJSONQuery({\n operator,\n pathSegments: segments,\n treatAsArray: ['children'],\n treatRootAsArray: true,\n value: val,\n })\n\n constraints.push(sql.raw(jsonQuery))\n break\n }\n\n const jsonQuery = convertPathToJSONTraversal(pathSegments)\n const operatorKeys = {\n contains: { operator: 'ilike', wildcard: '%' },\n equals: { operator: '=', wildcard: '' },\n exists: { operator: val === true ? 'is not null' : 'is null' },\n like: { operator: 'like', wildcard: '%' },\n not_equals: { operator: '<>', wildcard: '' },\n }\n let formattedValue = `'${operatorKeys[operator].wildcard}${val}${operatorKeys[operator].wildcard}'`\n\n if (operator === 'exists') {\n formattedValue = ''\n }\n\n constraints.push(\n sql.raw(\n `${table[columnName].name}${jsonQuery} ${operatorKeys[operator].operator} ${formattedValue}`,\n ),\n )\n\n break\n }\n\n if (getNotNullColumnByValue) {\n const columnName = getNotNullColumnByValue(val)\n if (columnName) {\n constraints.push(isNotNull(table[columnName]))\n } else {\n throw new QueryError([{ path: relationOrPath }])\n }\n break\n }\n\n if (operator === 'like') {\n constraints.push(\n and(...val.split(' ').map((word) => ilike(table[columnName], `%${word}%`))),\n )\n break\n }\n\n const sanitizedQueryValue = sanitizeQueryValue({\n adapter,\n field,\n operator,\n relationOrPath,\n val,\n })\n\n if (sanitizedQueryValue === null) {\n break\n }\n\n const { operator: queryOperator, value: queryValue } = sanitizedQueryValue\n\n if (queryOperator === 'not_equals' && queryValue !== null) {\n constraints.push(\n or(\n isNull(rawColumn || table[columnName]),\n /* eslint-disable @typescript-eslint/no-explicit-any */\n ne<any>(rawColumn || table[columnName], queryValue),\n ),\n )\n break\n }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n Array.isArray(queryValue) &&\n operator === 'not_in'\n ) {\n constraints.push(\n sql`${notInArray(table[columnName], queryValue)} OR\n ${table[columnName]}\n IS\n NULL`,\n )\n\n break\n }\n\n if (operator === 'equals' && queryValue === null) {\n constraints.push(isNull(rawColumn || table[columnName]))\n break\n }\n\n if (operator === 'not_equals' && queryValue === null) {\n constraints.push(isNotNull(rawColumn || table[columnName]))\n break\n }\n\n constraints.push(\n operatorMap[queryOperator](rawColumn || table[columnName], queryValue),\n )\n }\n }\n }\n }\n }\n }\n }\n if (constraints.length > 0) {\n if (result) {\n result = and(result, ...constraints)\n } else {\n result = and(...constraints)\n }\n }\n if (constraints.length === 1 && !result) {\n ;[result] = constraints\n }\n\n return result\n}\n"],"names":["and","ilike","isNotNull","isNull","ne","notInArray","or","sql","QueryError","validOperators","buildAndOrConditions","createJSONQuery","convertPathToJSONTraversal","getTableColumnFromPath","operatorMap","sanitizeQueryValue","parseParams","adapter","fields","joinAliases","joins","locale","selectFields","tableName","where","result","constraints","Object","keys","length","relationOrPath","condition","conditionOperator","toLowerCase","Array","isArray","builtConditions","pathOperators","operator","includes","val","columnName","queryConstraints","field","getNotNullColumnByValue","pathSegments","rawColumn","table","collectionPath","replace","split","value","forEach","col","constraintTable","indexOf","push","like","equals","type","segments","slice","unshift","name","jsonQuery","treatAsArray","treatRootAsArray","raw","operatorKeys","contains","wildcard","exists","not_equals","formattedValue","path","map","word","sanitizedQueryValue","queryOperator","queryValue"],"mappings":"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"}
|
@@ -84,4 +84,4 @@ export const sanitizeQueryValue = ({ adapter, field, operator: operatorArg, rela
|
|
84
84
|
};
|
85
85
|
};
|
86
86
|
|
87
|
-
//# sourceMappingURL=
|
87
|
+
//# sourceMappingURL=sanitizeQueryValue.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/queries/sanitizeQueryValue.ts"],"sourcesContent":["import { APIError } from 'payload/errors'\nimport { type Field, type TabAsField, fieldAffectsData } from 'payload/types'\nimport { createArrayFromCommaDelineated } from 'payload/utilities'\n\nimport type { PostgresAdapter } from '../types.js'\n\ntype SanitizeQueryValueArgs = {\n adapter: PostgresAdapter\n field: Field | TabAsField\n operator: string\n relationOrPath: string\n val: any\n}\n\nexport const sanitizeQueryValue = ({\n adapter,\n field,\n operator: operatorArg,\n relationOrPath,\n val,\n}: SanitizeQueryValueArgs): { operator: string; value: unknown } => {\n let operator = operatorArg\n let formattedValue = val\n\n if (!fieldAffectsData(field)) return { operator, value: formattedValue }\n\n if (\n (field.type === 'relationship' || field.type === 'upload') &&\n !relationOrPath.endsWith('relationTo') &&\n Array.isArray(formattedValue)\n ) {\n const allPossibleIDTypes: (number | string)[] = []\n formattedValue.forEach((val) => {\n if (adapter.idType !== 'uuid' && typeof val === 'string') {\n allPossibleIDTypes.push(val, parseInt(val))\n } else if (typeof val === 'string') {\n allPossibleIDTypes.push(val)\n } else {\n allPossibleIDTypes.push(val, String(val))\n }\n })\n formattedValue = allPossibleIDTypes\n }\n\n // Cast incoming values as proper searchable types\n if (field.type === 'checkbox' && typeof val === 'string') {\n if (val.toLowerCase() === 'true') formattedValue = true\n if (val.toLowerCase() === 'false') formattedValue = false\n }\n\n if (['all', 'in', 'not_in'].includes(operator)) {\n if (typeof formattedValue === 'string') {\n formattedValue = createArrayFromCommaDelineated(formattedValue)\n\n if (field.type === 'number') {\n formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal))\n }\n }\n\n if (!Array.isArray(formattedValue) || formattedValue.length === 0) {\n return null\n }\n }\n\n if (field.type === 'number' && typeof formattedValue === 'string') {\n formattedValue = Number(val)\n }\n\n if (field.type === 'date') {\n if (typeof val === 'string') {\n formattedValue = new Date(val)\n if (Number.isNaN(Date.parse(formattedValue))) {\n return { operator, value: undefined }\n }\n }\n\n if (typeof val === 'number') {\n formattedValue = new Date(val)\n }\n }\n\n if (['relationship', 'upload'].includes(field.type)) {\n if (val === 'null') {\n formattedValue = null\n }\n }\n\n if (operator === 'near' || operator === 'within' || operator === 'intersects') {\n throw new APIError(\n `Querying with '${operator}' is not supported with the postgres database adapter.`,\n )\n }\n\n if (operator === 'contains') {\n formattedValue = `%${formattedValue}%`\n }\n\n if (operator === 'exists') {\n formattedValue = formattedValue === 'true' || formattedValue === true\n if (formattedValue === false) {\n operator = 'isNull'\n }\n }\n\n return { operator, value: formattedValue }\n}\n"],"names":["APIError","fieldAffectsData","createArrayFromCommaDelineated","sanitizeQueryValue","adapter","field","operator","operatorArg","relationOrPath","val","formattedValue","value","type","endsWith","Array","isArray","allPossibleIDTypes","forEach","idType","push","parseInt","String","toLowerCase","includes","map","arrayVal","parseFloat","length","Number","Date","isNaN","parse","undefined"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,iBAAgB;AACzC,SAAsCC,gBAAgB,QAAQ,gBAAe;AAC7E,SAASC,8BAA8B,QAAQ,oBAAmB;AAYlE,OAAO,MAAMC,qBAAqB,CAAC,EACjCC,OAAO,EACPC,KAAK,EACLC,UAAUC,WAAW,EACrBC,cAAc,EACdC,GAAG,EACoB;IACvB,IAAIH,WAAWC;IACf,IAAIG,iBAAiBD;IAErB,IAAI,CAACR,iBAAiBI,QAAQ,OAAO;QAAEC;QAAUK,OAAOD;IAAe;IAEvE,IACE,AAACL,CAAAA,MAAMO,IAAI,KAAK,kBAAkBP,MAAMO,IAAI,KAAK,QAAO,KACxD,CAACJ,eAAeK,QAAQ,CAAC,iBACzBC,MAAMC,OAAO,CAACL,iBACd;QACA,MAAMM,qBAA0C,EAAE;QAClDN,eAAeO,OAAO,CAAC,CAACR;YACtB,IAAIL,QAAQc,MAAM,KAAK,UAAU,OAAOT,QAAQ,UAAU;gBACxDO,mBAAmBG,IAAI,CAACV,KAAKW,SAASX;YACxC,OAAO,IAAI,OAAOA,QAAQ,UAAU;gBAClCO,mBAAmBG,IAAI,CAACV;YAC1B,OAAO;gBACLO,mBAAmBG,IAAI,CAACV,KAAKY,OAAOZ;YACtC;QACF;QACAC,iBAAiBM;IACnB;IAEA,kDAAkD;IAClD,IAAIX,MAAMO,IAAI,KAAK,cAAc,OAAOH,QAAQ,UAAU;QACxD,IAAIA,IAAIa,WAAW,OAAO,QAAQZ,iBAAiB;QACnD,IAAID,IAAIa,WAAW,OAAO,SAASZ,iBAAiB;IACtD;IAEA,IAAI;QAAC;QAAO;QAAM;KAAS,CAACa,QAAQ,CAACjB,WAAW;QAC9C,IAAI,OAAOI,mBAAmB,UAAU;YACtCA,iBAAiBR,+BAA+BQ;YAEhD,IAAIL,MAAMO,IAAI,KAAK,UAAU;gBAC3BF,iBAAiBA,eAAec,GAAG,CAAC,CAACC,WAAaC,WAAWD;YAC/D;QACF;QAEA,IAAI,CAACX,MAAMC,OAAO,CAACL,mBAAmBA,eAAeiB,MAAM,KAAK,GAAG;YACjE,OAAO;QACT;IACF;IAEA,IAAItB,MAAMO,IAAI,KAAK,YAAY,OAAOF,mBAAmB,UAAU;QACjEA,iBAAiBkB,OAAOnB;IAC1B;IAEA,IAAIJ,MAAMO,IAAI,KAAK,QAAQ;QACzB,IAAI,OAAOH,QAAQ,UAAU;YAC3BC,iBAAiB,IAAImB,KAAKpB;YAC1B,IAAImB,OAAOE,KAAK,CAACD,KAAKE,KAAK,CAACrB,kBAAkB;gBAC5C,OAAO;oBAAEJ;oBAAUK,OAAOqB;gBAAU;YACtC;QACF;QAEA,IAAI,OAAOvB,QAAQ,UAAU;YAC3BC,iBAAiB,IAAImB,KAAKpB;QAC5B;IACF;IAEA,IAAI;QAAC;QAAgB;KAAS,CAACc,QAAQ,CAAClB,MAAMO,IAAI,GAAG;QACnD,IAAIH,QAAQ,QAAQ;YAClBC,iBAAiB;QACnB;IACF;IAEA,IAAIJ,aAAa,UAAUA,aAAa,YAAYA,aAAa,cAAc;QAC7E,MAAM,IAAIN,SACR,CAAC,eAAe,EAAEM,SAAS,sDAAsD,CAAC;IAEtF;IAEA,IAAIA,aAAa,YAAY;QAC3BI,iBAAiB,CAAC,CAAC,EAAEA,eAAe,CAAC,CAAC;IACxC;IAEA,IAAIJ,aAAa,UAAU;QACzBI,iBAAiBA,mBAAmB,UAAUA,mBAAmB;QACjE,IAAIA,mBAAmB,OAAO;YAC5BJ,WAAW;QACb;IACF;IAEA,OAAO;QAAEA;QAAUK,OAAOD;IAAe;AAC3C,EAAC"}
|
package/dist/queryDrafts.js
CHANGED
@@ -38,4 +38,4 @@ export const queryDrafts = async function queryDrafts({ collection, limit, local
|
|
38
38
|
};
|
39
39
|
};
|
40
40
|
|
41
|
-
//# sourceMappingURL=
|
41
|
+
//# sourceMappingURL=queryDrafts.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/queryDrafts.ts"],"sourcesContent":["import type { PayloadRequest, SanitizedCollectionConfig } from 'payload/types'\n\nimport { type QueryDrafts, combineQueries } from 'payload/database'\nimport { buildVersionCollectionFields } from 'payload/versions'\nimport toSnakeCase from 'to-snake-case'\n\nimport { findMany } from './find/findMany.js'\n\nexport const queryDrafts: QueryDrafts = async function queryDrafts({\n collection,\n limit,\n locale,\n page = 1,\n pagination,\n req = {} as PayloadRequest,\n sort,\n where,\n}) {\n const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config\n const tableName = `_${toSnakeCase(collection)}_v`\n const fields = buildVersionCollectionFields(collectionConfig)\n\n const combinedWhere = combineQueries({ latest: { equals: true } }, where)\n\n const result = await findMany({\n adapter: this,\n fields,\n limit,\n locale,\n page,\n pagination,\n req,\n sort,\n tableName,\n where: combinedWhere,\n })\n\n return {\n ...result,\n docs: result.docs.map((doc) => {\n // eslint-disable-next-line no-param-reassign\n doc = {\n id: doc.parent,\n ...doc.version,\n createdAt: doc.createdAt,\n updatedAt: doc.updatedAt,\n }\n\n return doc\n }),\n }\n}\n"],"names":["combineQueries","buildVersionCollectionFields","toSnakeCase","findMany","queryDrafts","collection","limit","locale","page","pagination","req","sort","where","collectionConfig","payload","collections","config","tableName","fields","combinedWhere","latest","equals","result","adapter","docs","map","doc","id","parent","version","createdAt","updatedAt"],"mappings":"AAEA,SAA2BA,cAAc,QAAQ,mBAAkB;AACnE,SAASC,4BAA4B,QAAQ,mBAAkB;AAC/D,OAAOC,iBAAiB,gBAAe;AAEvC,SAASC,QAAQ,QAAQ,qBAAoB;AAE7C,OAAO,MAAMC,cAA2B,eAAeA,YAAY,EACjEC,UAAU,EACVC,KAAK,EACLC,MAAM,EACNC,OAAO,CAAC,EACRC,UAAU,EACVC,MAAM,CAAC,CAAmB,EAC1BC,IAAI,EACJC,KAAK,EACN;IACC,MAAMC,mBAA8C,IAAI,CAACC,OAAO,CAACC,WAAW,CAACV,WAAW,CAACW,MAAM;IAC/F,MAAMC,YAAY,CAAC,CAAC,EAAEf,YAAYG,YAAY,EAAE,CAAC;IACjD,MAAMa,SAASjB,6BAA6BY;IAE5C,MAAMM,gBAAgBnB,eAAe;QAAEoB,QAAQ;YAAEC,QAAQ;QAAK;IAAE,GAAGT;IAEnE,MAAMU,SAAS,MAAMnB,SAAS;QAC5BoB,SAAS,IAAI;QACbL;QACAZ;QACAC;QACAC;QACAC;QACAC;QACAC;QACAM;QACAL,OAAOO;IACT;IAEA,OAAO;QACL,GAAGG,MAAM;QACTE,MAAMF,OAAOE,IAAI,CAACC,GAAG,CAAC,CAACC;YACrB,6CAA6C;YAC7CA,MAAM;gBACJC,IAAID,IAAIE,MAAM;gBACd,GAAGF,IAAIG,OAAO;gBACdC,WAAWJ,IAAII,SAAS;gBACxBC,WAAWL,IAAIK,SAAS;YAC1B;YAEA,OAAOL;QACT;IACF;AACF,EAAC"}
|
package/dist/schema/build.js
CHANGED
@@ -273,4 +273,4 @@ export const buildTable = ({ adapter, baseColumns = {}, baseExtraConfig = {}, bu
|
|
273
273
|
};
|
274
274
|
};
|
275
275
|
|
276
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvYnVpbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHtcbiAgSW5kZXhCdWlsZGVyLFxuICBQZ0NvbHVtbkJ1aWxkZXIsXG4gIFBnVGFibGVXaXRoQ29sdW1ucyxcbiAgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgdHlwZSB7IEZpZWxkIH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHsgcmVsYXRpb25zIH0gZnJvbSAnZHJpenpsZS1vcm0nXG5pbXBvcnQgeyBpbmRleCwgaW50ZWdlciwgbnVtZXJpYywgc2VyaWFsLCB0aW1lc3RhbXAsIHVuaXF1ZSwgdmFyY2hhciB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB0b1NuYWtlQ2FzZSBmcm9tICd0by1zbmFrZS1jYXNlJ1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyaWNDb2x1bW5zLCBHZW5lcmljVGFibGUsIElEVHlwZSwgUG9zdGdyZXNBZGFwdGVyIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5cbmltcG9ydCB7IHBhcmVudElEQ29sdW1uTWFwIH0gZnJvbSAnLi9wYXJlbnRJRENvbHVtbk1hcC5qcydcbmltcG9ydCB7IHNldENvbHVtbklEIH0gZnJvbSAnLi9zZXRDb2x1bW5JRC5qcydcbmltcG9ydCB7IHRyYXZlcnNlRmllbGRzIH0gZnJvbSAnLi90cmF2ZXJzZUZpZWxkcy5qcydcblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgYmFzZUNvbHVtbnM/OiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+XG4gIGJhc2VFeHRyYUNvbmZpZz86IFJlY29yZDxzdHJpbmcsIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXI+XG4gIGJ1aWxkTnVtYmVycz86IGJvb2xlYW5cbiAgYnVpbGRSZWxhdGlvbnNoaXBzPzogYm9vbGVhblxuICBidWlsZFRleHRzPzogYm9vbGVhblxuICBkaXNhYmxlTm90TnVsbDogYm9vbGVhblxuICBkaXNhYmxlVW5pcXVlOiBib29sZWFuXG4gIGZpZWxkczogRmllbGRbXVxuICByb290UmVsYXRpb25zVG9CdWlsZD86IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcm9vdFJlbGF0aW9uc2hpcHM/OiBTZXQ8c3RyaW5nPlxuICByb290VGFibGVJRENvbFR5cGU/OiBzdHJpbmdcbiAgcm9vdFRhYmxlTmFtZT86IHN0cmluZ1xuICB0YWJsZU5hbWU6IHN0cmluZ1xuICB0aW1lc3RhbXBzPzogYm9vbGVhblxufVxuXG50eXBlIFJlc3VsdCA9IHtcbiAgaGFzTWFueU51bWJlckZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhblxuICBoYXNNYW55VGV4dEZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhblxuICByZWxhdGlvbnNUb0J1aWxkOiBNYXA8c3RyaW5nLCBzdHJpbmc+XG59XG5cbmV4cG9ydCBjb25zdCBidWlsZFRhYmxlID0gKHtcbiAgYWRhcHRlcixcbiAgYmFzZUNvbHVtbnMgPSB7fSxcbiAgYmFzZUV4dHJhQ29uZmlnID0ge30sXG4gIGJ1aWxkTnVtYmVycyxcbiAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICBidWlsZFRleHRzLFxuICBkaXNhYmxlTm90TnVsbCxcbiAgZGlzYWJsZVVuaXF1ZSA9IGZhbHNlLFxuICBmaWVsZHMsXG4gIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICByb290UmVsYXRpb25zaGlwcyxcbiAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICByb290VGFibGVOYW1lOiBpbmNvbWluZ1Jvb3RUYWJsZU5hbWUsXG4gIHRhYmxlTmFtZSxcbiAgdGltZXN0YW1wcyxcbn06IEFyZ3MpOiBSZXN1bHQgPT4ge1xuICBjb25zdCByb290VGFibGVOYW1lID0gaW5jb21pbmdSb290VGFibGVOYW1lIHx8IHRhYmxlTmFtZVxuICBjb25zdCBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0gYmFzZUNvbHVtbnNcbiAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+ID0ge31cblxuICBsZXQgaGFzTG9jYWxpemVkRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSBmYWxzZVxuICBsZXQgaGFzTWFueVRleHRGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgaGFzTWFueU51bWJlckZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhbiA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gZmFsc2VcbiAgbGV0IGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IGZhbHNlXG5cbiAgY29uc3QgbG9jYWxlc0NvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7fVxuICBjb25zdCBsb2NhbGVzSW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+ID0ge31cbiAgbGV0IGxvY2FsZXNUYWJsZTogR2VuZXJpY1RhYmxlIHwgUGdUYWJsZVdpdGhDb2x1bW5zPGFueT5cbiAgbGV0IHRleHRzVGFibGU6IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG4gIGxldCBudW1iZXJzVGFibGU6IEdlbmVyaWNUYWJsZSB8IFBnVGFibGVXaXRoQ29sdW1uczxhbnk+XG5cbiAgLy8gUmVsYXRpb25zaGlwcyB0byB0aGUgYmFzZSBjb2xsZWN0aW9uXG4gIGNvbnN0IHJlbGF0aW9uc2hpcHM6IFNldDxzdHJpbmc+ID0gcm9vdFJlbGF0aW9uc2hpcHMgfHwgbmV3IFNldCgpXG5cbiAgbGV0IHJlbGF0aW9uc2hpcHNUYWJsZTogR2VuZXJpY1RhYmxlIHwgUGdUYWJsZVdpdGhDb2x1bW5zPGFueT5cblxuICAvLyBEcml6emxlIHJlbGF0aW9uc1xuICBjb25zdCByZWxhdGlvbnNUb0J1aWxkOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpXG5cbiAgY29uc3QgaWRDb2xUeXBlOiBJRFR5cGUgPSBzZXRDb2x1bW5JRCh7IGFkYXB0ZXIsIGNvbHVtbnMsIGZpZWxkcyB9KVxuXG4gIDsoe1xuICAgIGhhc0xvY2FsaXplZEZpZWxkLFxuICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkLFxuICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgIGhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICBoYXNNYW55VGV4dEZpZWxkLFxuICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgIGFkYXB0ZXIsXG4gICAgYnVpbGROdW1iZXJzLFxuICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICBidWlsZFRleHRzLFxuICAgIGNvbHVtbnMsXG4gICAgZGlzYWJsZU5vdE51bGwsXG4gICAgZGlzYWJsZVVuaXF1ZSxcbiAgICBmaWVsZHMsXG4gICAgaW5kZXhlcyxcbiAgICBsb2NhbGVzQ29sdW1ucyxcbiAgICBsb2NhbGVzSW5kZXhlcyxcbiAgICBuZXdUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICBwYXJlbnRUYWJsZU5hbWU6IHRhYmxlTmFtZSxcbiAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQ6IHJvb3RSZWxhdGlvbnNUb0J1aWxkIHx8IHJlbGF0aW9uc1RvQnVpbGQsXG4gICAgcm9vdFRhYmxlSURDb2xUeXBlOiByb290VGFibGVJRENvbFR5cGUgfHwgaWRDb2xUeXBlLFxuICAgIHJvb3RUYWJsZU5hbWUsXG4gIH0pKVxuXG4gIGlmICh0aW1lc3RhbXBzKSB7XG4gICAgY29sdW1ucy5jcmVhdGVkQXQgPSB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7XG4gICAgICBtb2RlOiAnc3RyaW5nJyxcbiAgICAgIHByZWNpc2lvbjogMyxcbiAgICAgIHdpdGhUaW1lem9uZTogdHJ1ZSxcbiAgICB9KVxuICAgICAgLmRlZmF1bHROb3coKVxuICAgICAgLm5vdE51bGwoKVxuICAgIGNvbHVtbnMudXBkYXRlZEF0ID0gdGltZXN0YW1wKCd1cGRhdGVkX2F0Jywge1xuICAgICAgbW9kZTogJ3N0cmluZycsXG4gICAgICBwcmVjaXNpb246IDMsXG4gICAgICB3aXRoVGltZXpvbmU6IHRydWUsXG4gICAgfSlcbiAgICAgIC5kZWZhdWx0Tm93KClcbiAgICAgIC5ub3ROdWxsKClcbiAgfVxuXG4gIGNvbnN0IHRhYmxlID0gYWRhcHRlci5wZ1NjaGVtYS50YWJsZSh0YWJsZU5hbWUsIGNvbHVtbnMsIChjb2xzKSA9PiB7XG4gICAgY29uc3QgZXh0cmFDb25maWcgPSBPYmplY3QuZW50cmllcyhiYXNlRXh0cmFDb25maWcpLnJlZHVjZSgoY29uZmlnLCBba2V5LCBmdW5jXSkgPT4ge1xuICAgICAgY29uZmlnW2tleV0gPSBmdW5jKGNvbHMpXG4gICAgICByZXR1cm4gY29uZmlnXG4gICAgfSwge30pXG5cbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoaW5kZXhlcykucmVkdWNlKChhY2MsIFtjb2xOYW1lLCBmdW5jXSkgPT4ge1xuICAgICAgYWNjW2NvbE5hbWVdID0gZnVuYyhjb2xzKVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIGV4dHJhQ29uZmlnKVxuICB9KVxuXG4gIGFkYXB0ZXIudGFibGVzW3RhYmxlTmFtZV0gPSB0YWJsZVxuXG4gIGlmIChoYXNMb2NhbGl6ZWRGaWVsZCkge1xuICAgIGNvbnN0IGxvY2FsZVRhYmxlTmFtZSA9IGAke3RhYmxlTmFtZX1fbG9jYWxlc2BcbiAgICBsb2NhbGVzQ29sdW1ucy5pZCA9IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KClcbiAgICBsb2NhbGVzQ29sdW1ucy5fbG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdfbG9jYWxlJykubm90TnVsbCgpXG4gICAgbG9jYWxlc0NvbHVtbnMuX3BhcmVudElEID0gcGFyZW50SURDb2x1bW5NYXBbaWRDb2xUeXBlXSgnX3BhcmVudF9pZCcpXG4gICAgICAucmVmZXJlbmNlcygoKSA9PiB0YWJsZS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAubm90TnVsbCgpXG5cbiAgICBsb2NhbGVzVGFibGUgPSBhZGFwdGVyLnBnU2NoZW1hLnRhYmxlKGxvY2FsZVRhYmxlTmFtZSwgbG9jYWxlc0NvbHVtbnMsIChjb2xzKSA9PiB7XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMobG9jYWxlc0luZGV4ZXMpLnJlZHVjZShcbiAgICAgICAgKGFjYywgW2NvbE5hbWUsIGZ1bmNdKSA9PiB7XG4gICAgICAgICAgYWNjW2NvbE5hbWVdID0gZnVuYyhjb2xzKVxuICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIF9sb2NhbGVQYXJlbnQ6IHVuaXF1ZShgJHtsb2NhbGVUYWJsZU5hbWV9X2xvY2FsZV9wYXJlbnRfaWRfdW5pcXVlYCkub24oXG4gICAgICAgICAgICBjb2xzLl9sb2NhbGUsXG4gICAgICAgICAgICBjb2xzLl9wYXJlbnRJRCxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgKVxuICAgIH0pXG5cbiAgICBhZGFwdGVyLnRhYmxlc1tsb2NhbGVUYWJsZU5hbWVdID0gbG9jYWxlc1RhYmxlXG5cbiAgICBjb25zdCBsb2NhbGVzVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMobG9jYWxlc1RhYmxlLCAoeyBvbmUgfSkgPT4gKHtcbiAgICAgIF9wYXJlbnRJRDogb25lKHRhYmxlLCB7XG4gICAgICAgIGZpZWxkczogW2xvY2FsZXNUYWJsZS5fcGFyZW50SURdLFxuICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgfSksXG4gICAgfSkpXG5cbiAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7bG9jYWxlVGFibGVOYW1lfWBdID0gbG9jYWxlc1RhYmxlUmVsYXRpb25zXG4gIH1cblxuICBpZiAoaGFzTWFueVRleHRGaWVsZCAmJiBidWlsZFRleHRzKSB7XG4gICAgY29uc3QgdGV4dHNUYWJsZU5hbWUgPSBgJHtyb290VGFibGVOYW1lfV90ZXh0c2BcbiAgICBjb25zdCBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0ge1xuICAgICAgaWQ6IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KCksXG4gICAgICBvcmRlcjogaW50ZWdlcignb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IHRhYmxlLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgIHBhdGg6IHZhcmNoYXIoJ3BhdGgnKS5ub3ROdWxsKCksXG4gICAgICB0ZXh0OiB2YXJjaGFyKCd0ZXh0JyksXG4gICAgfVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIHtcbiAgICAgIGNvbHVtbnMubG9jYWxlID0gYWRhcHRlci5lbnVtcy5lbnVtX19sb2NhbGVzKCdsb2NhbGUnKVxuICAgIH1cblxuICAgIHRleHRzVGFibGUgPSBhZGFwdGVyLnBnU2NoZW1hLnRhYmxlKHRleHRzVGFibGVOYW1lLCBjb2x1bW5zLCAoY29scykgPT4ge1xuICAgICAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgSW5kZXhCdWlsZGVyPiA9IHtcbiAgICAgICAgb3JkZXJQYXJlbnRJZHg6IGluZGV4KGAke3RleHRzVGFibGVOYW1lfV9vcmRlcl9wYXJlbnRfaWR4YCkub24oY29scy5vcmRlciwgY29scy5wYXJlbnQpLFxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTWFueVRleHRGaWVsZCA9PT0gJ2luZGV4Jykge1xuICAgICAgICBpbmRleGVzLnRleHRfaWR4ID0gaW5kZXgoYCR7dGV4dHNUYWJsZU5hbWV9X3RleHRfaWR4YCkub24oY29scy50ZXh0KVxuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCkge1xuICAgICAgICBpbmRleGVzLmxvY2FsZVBhcmVudCA9IGluZGV4KGAke3RleHRzVGFibGVOYW1lfV9sb2NhbGVfcGFyZW50YCkub24oY29scy5sb2NhbGUsIGNvbHMucGFyZW50KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXhlc1xuICAgIH0pXG5cbiAgICBhZGFwdGVyLnRhYmxlc1t0ZXh0c1RhYmxlTmFtZV0gPSB0ZXh0c1RhYmxlXG5cbiAgICBjb25zdCB0ZXh0c1RhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKHRleHRzVGFibGUsICh7IG9uZSB9KSA9PiAoe1xuICAgICAgcGFyZW50OiBvbmUodGFibGUsIHtcbiAgICAgICAgZmllbGRzOiBbdGV4dHNUYWJsZS5wYXJlbnRdLFxuICAgICAgICByZWZlcmVuY2VzOiBbdGFibGUuaWRdLFxuICAgICAgfSksXG4gICAgfSkpXG5cbiAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7dGV4dHNUYWJsZU5hbWV9YF0gPSB0ZXh0c1RhYmxlUmVsYXRpb25zXG4gIH1cblxuICBpZiAoaGFzTWFueU51bWJlckZpZWxkICYmIGJ1aWxkTnVtYmVycykge1xuICAgIGNvbnN0IG51bWJlcnNUYWJsZU5hbWUgPSBgJHtyb290VGFibGVOYW1lfV9udW1iZXJzYFxuICAgIGNvbnN0IGNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIFBnQ29sdW1uQnVpbGRlcj4gPSB7XG4gICAgICBpZDogc2VyaWFsKCdpZCcpLnByaW1hcnlLZXkoKSxcbiAgICAgIG51bWJlcjogbnVtZXJpYygnbnVtYmVyJyksXG4gICAgICBvcmRlcjogaW50ZWdlcignb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgIC5yZWZlcmVuY2VzKCgpID0+IHRhYmxlLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgIHBhdGg6IHZhcmNoYXIoJ3BhdGgnKS5ub3ROdWxsKCksXG4gICAgfVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgY29sdW1ucy5sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ2xvY2FsZScpXG4gICAgfVxuXG4gICAgbnVtYmVyc1RhYmxlID0gYWRhcHRlci5wZ1NjaGVtYS50YWJsZShudW1iZXJzVGFibGVOYW1lLCBjb2x1bW5zLCAoY29scykgPT4ge1xuICAgICAgY29uc3QgaW5kZXhlczogUmVjb3JkPHN0cmluZywgSW5kZXhCdWlsZGVyPiA9IHtcbiAgICAgICAgb3JkZXJQYXJlbnRJZHg6IGluZGV4KGAke251bWJlcnNUYWJsZU5hbWV9X29yZGVyX3BhcmVudF9pZHhgKS5vbihjb2xzLm9yZGVyLCBjb2xzLnBhcmVudCksXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNNYW55TnVtYmVyRmllbGQgPT09ICdpbmRleCcpIHtcbiAgICAgICAgaW5kZXhlcy5udW1iZXJJZHggPSBpbmRleChgJHtudW1iZXJzVGFibGVOYW1lfV9udW1iZXJfaWR4YCkub24oY29scy5udW1iZXIpXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIHtcbiAgICAgICAgaW5kZXhlcy5sb2NhbGVQYXJlbnQgPSBpbmRleChgJHtudW1iZXJzVGFibGVOYW1lfV9sb2NhbGVfcGFyZW50YCkub24oXG4gICAgICAgICAgY29scy5sb2NhbGUsXG4gICAgICAgICAgY29scy5wYXJlbnQsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZGV4ZXNcbiAgICB9KVxuXG4gICAgYWRhcHRlci50YWJsZXNbbnVtYmVyc1RhYmxlTmFtZV0gPSBudW1iZXJzVGFibGVcblxuICAgIGNvbnN0IG51bWJlcnNUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhudW1iZXJzVGFibGUsICh7IG9uZSB9KSA9PiAoe1xuICAgICAgcGFyZW50OiBvbmUodGFibGUsIHtcbiAgICAgICAgZmllbGRzOiBbbnVtYmVyc1RhYmxlLnBhcmVudF0sXG4gICAgICAgIHJlZmVyZW5jZXM6IFt0YWJsZS5pZF0sXG4gICAgICB9KSxcbiAgICB9KSlcblxuICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHtudW1iZXJzVGFibGVOYW1lfWBdID0gbnVtYmVyc1RhYmxlUmVsYXRpb25zXG4gIH1cblxuICBpZiAoYnVpbGRSZWxhdGlvbnNoaXBzKSB7XG4gICAgaWYgKHJlbGF0aW9uc2hpcHMuc2l6ZSkge1xuICAgICAgY29uc3QgcmVsYXRpb25zaGlwQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgaWQ6IHNlcmlhbCgnaWQnKS5wcmltYXJ5S2V5KCksXG4gICAgICAgIG9yZGVyOiBpbnRlZ2VyKCdvcmRlcicpLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudElEQ29sdW1uTWFwW2lkQ29sVHlwZV0oJ3BhcmVudF9pZCcpXG4gICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gdGFibGUuaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgIHBhdGg6IHZhcmNoYXIoJ3BhdGgnKS5ub3ROdWxsKCksXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCkge1xuICAgICAgICByZWxhdGlvbnNoaXBDb2x1bW5zLmxvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnbG9jYWxlJylcbiAgICAgIH1cblxuICAgICAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKChyZWxhdGlvblRvKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFJlbGF0aW9uVG8gPSB0b1NuYWtlQ2FzZShyZWxhdGlvblRvKVxuICAgICAgICBsZXQgY29sVHlwZSA9IGFkYXB0ZXIuaWRUeXBlID09PSAndXVpZCcgPyAndXVpZCcgOiAnaW50ZWdlcidcbiAgICAgICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb25DdXN0b21JRCA9IGFkYXB0ZXIucGF5bG9hZC5jb2xsZWN0aW9uc1tcbiAgICAgICAgICByZWxhdGlvblRvXG4gICAgICAgIF0uY29uZmlnLmZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJylcbiAgICAgICAgaWYgKHJlbGF0ZWRDb2xsZWN0aW9uQ3VzdG9tSUQ/LnR5cGUgPT09ICdudW1iZXInKSBjb2xUeXBlID0gJ251bWVyaWMnXG4gICAgICAgIGlmIChyZWxhdGVkQ29sbGVjdGlvbkN1c3RvbUlEPy50eXBlID09PSAndGV4dCcpIGNvbFR5cGUgPSAndmFyY2hhcidcblxuICAgICAgICByZWxhdGlvbnNoaXBDb2x1bW5zW2Ake3JlbGF0aW9uVG99SURgXSA9IHBhcmVudElEQ29sdW1uTWFwW2NvbFR5cGVdKFxuICAgICAgICAgIGAke2Zvcm1hdHRlZFJlbGF0aW9uVG99X2lkYCxcbiAgICAgICAgKS5yZWZlcmVuY2VzKCgpID0+IGFkYXB0ZXIudGFibGVzW2Zvcm1hdHRlZFJlbGF0aW9uVG9dLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHNUYWJsZU5hbWUgPSBgJHt0YWJsZU5hbWV9X3JlbHNgXG5cbiAgICAgIHJlbGF0aW9uc2hpcHNUYWJsZSA9IGFkYXB0ZXIucGdTY2hlbWEudGFibGUoXG4gICAgICAgIHJlbGF0aW9uc2hpcHNUYWJsZU5hbWUsXG4gICAgICAgIHJlbGF0aW9uc2hpcENvbHVtbnMsXG4gICAgICAgIChjb2xzKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgICAgICAgIG9yZGVyOiBpbmRleChgJHtyZWxhdGlvbnNoaXBzVGFibGVOYW1lfV9vcmRlcl9pZHhgKS5vbihjb2xzLm9yZGVyKSxcbiAgICAgICAgICAgIHBhcmVudElkeDogaW5kZXgoYCR7cmVsYXRpb25zaGlwc1RhYmxlTmFtZX1fcGFyZW50X2lkeGApLm9uKGNvbHMucGFyZW50KSxcbiAgICAgICAgICAgIHBhdGhJZHg6IGluZGV4KGAke3JlbGF0aW9uc2hpcHNUYWJsZU5hbWV9X3BhdGhfaWR4YCkub24oY29scy5wYXRoKSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5sb2NhbGVJZHggPSBpbmRleChgJHtyZWxhdGlvbnNoaXBzVGFibGVOYW1lfV9sb2NhbGVfaWR4YCkub24oY29scy5sb2NhbGUpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBhZGFwdGVyLnRhYmxlc1tyZWxhdGlvbnNoaXBzVGFibGVOYW1lXSA9IHJlbGF0aW9uc2hpcHNUYWJsZVxuXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnMgPSByZWxhdGlvbnMocmVsYXRpb25zaGlwc1RhYmxlLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlbGF0aW9uPHN0cmluZz4+ID0ge1xuICAgICAgICAgIHBhcmVudDogb25lKHRhYmxlLCB7XG4gICAgICAgICAgICBmaWVsZHM6IFtyZWxhdGlvbnNoaXBzVGFibGUucGFyZW50XSxcbiAgICAgICAgICAgIHJlZmVyZW5jZXM6IFt0YWJsZS5pZF0sXG4gICAgICAgICAgICByZWxhdGlvbk5hbWU6ICdfcmVscycsXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cblxuICAgICAgICByZWxhdGlvbnNoaXBzLmZvckVhY2goKHJlbGF0aW9uVG8pID0+IHtcbiAgICAgICAgICBjb25zdCByZWxhdGVkVGFibGVOYW1lID0gdG9TbmFrZUNhc2UocmVsYXRpb25UbylcbiAgICAgICAgICBjb25zdCBpZENvbHVtbk5hbWUgPSBgJHtyZWxhdGlvblRvfUlEYFxuICAgICAgICAgIHJlc3VsdFtpZENvbHVtbk5hbWVdID0gb25lKGFkYXB0ZXIudGFibGVzW3JlbGF0ZWRUYWJsZU5hbWVdLCB7XG4gICAgICAgICAgICBmaWVsZHM6IFtyZWxhdGlvbnNoaXBzVGFibGVbaWRDb2x1bW5OYW1lXV0sXG4gICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcmVsYXRlZFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSlcblxuICAgICAgYWRhcHRlci5yZWxhdGlvbnNbYHJlbGF0aW9uc18ke3JlbGF0aW9uc2hpcHNUYWJsZU5hbWV9YF0gPSByZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnNcbiAgICB9XG4gIH1cblxuICBjb25zdCB0YWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyh0YWJsZSwgKHsgbWFueSB9KSA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHt9XG5cbiAgICByZWxhdGlvbnNUb0J1aWxkLmZvckVhY2goKHZhbCwga2V5KSA9PiB7XG4gICAgICByZXN1bHRba2V5XSA9IG1hbnkoYWRhcHRlci50YWJsZXNbdmFsXSlcbiAgICB9KVxuXG4gICAgaWYgKGhhc0xvY2FsaXplZEZpZWxkKSB7XG4gICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KGxvY2FsZXNUYWJsZSlcbiAgICB9XG5cbiAgICBpZiAoaGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgcmVzdWx0Ll90ZXh0cyA9IG1hbnkodGV4dHNUYWJsZSlcbiAgICB9XG4gICAgaWYgKGhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgcmVzdWx0Ll9udW1iZXJzID0gbWFueShudW1iZXJzVGFibGUpXG4gICAgfVxuXG4gICAgaWYgKHJlbGF0aW9uc2hpcHMuc2l6ZSAmJiByZWxhdGlvbnNoaXBzVGFibGUpIHtcbiAgICAgIHJlc3VsdC5fcmVscyA9IG1hbnkocmVsYXRpb25zaGlwc1RhYmxlLCB7XG4gICAgICAgIHJlbGF0aW9uTmFtZTogJ19yZWxzJyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KVxuXG4gIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHt0YWJsZU5hbWV9YF0gPSB0YWJsZVJlbGF0aW9uc1xuXG4gIHJldHVybiB7IGhhc01hbnlOdW1iZXJGaWVsZCwgaGFzTWFueVRleHRGaWVsZCwgcmVsYXRpb25zVG9CdWlsZCB9XG59XG4iXSwibmFtZXMiOlsicmVsYXRpb25zIiwiaW5kZXgiLCJpbnRlZ2VyIiwibnVtZXJpYyIsInNlcmlhbCIsInRpbWVzdGFtcCIsInVuaXF1ZSIsInZhcmNoYXIiLCJmaWVsZEFmZmVjdHNEYXRhIiwidG9TbmFrZUNhc2UiLCJwYXJlbnRJRENvbHVtbk1hcCIsInNldENvbHVtbklEIiwidHJhdmVyc2VGaWVsZHMiLCJidWlsZFRhYmxlIiwiYWRhcHRlciIsImJhc2VDb2x1bW5zIiwiYmFzZUV4dHJhQ29uZmlnIiwiYnVpbGROdW1iZXJzIiwiYnVpbGRSZWxhdGlvbnNoaXBzIiwiYnVpbGRUZXh0cyIsImRpc2FibGVOb3ROdWxsIiwiZGlzYWJsZVVuaXF1ZSIsImZpZWxkcyIsInJvb3RSZWxhdGlvbnNUb0J1aWxkIiwicm9vdFJlbGF0aW9uc2hpcHMiLCJyb290VGFibGVJRENvbFR5cGUiLCJyb290VGFibGVOYW1lIiwiaW5jb21pbmdSb290VGFibGVOYW1lIiwidGFibGVOYW1lIiwidGltZXN0YW1wcyIsImNvbHVtbnMiLCJpbmRleGVzIiwiaGFzTG9jYWxpemVkRmllbGQiLCJoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsImhhc01hbnlUZXh0RmllbGQiLCJoYXNNYW55TnVtYmVyRmllbGQiLCJoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkIiwiaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwibG9jYWxlc0NvbHVtbnMiLCJsb2NhbGVzSW5kZXhlcyIsImxvY2FsZXNUYWJsZSIsInRleHRzVGFibGUiLCJudW1iZXJzVGFibGUiLCJyZWxhdGlvbnNoaXBzIiwiU2V0IiwicmVsYXRpb25zaGlwc1RhYmxlIiwicmVsYXRpb25zVG9CdWlsZCIsIk1hcCIsImlkQ29sVHlwZSIsIm5ld1RhYmxlTmFtZSIsInBhcmVudFRhYmxlTmFtZSIsImNyZWF0ZWRBdCIsIm1vZGUiLCJwcmVjaXNpb24iLCJ3aXRoVGltZXpvbmUiLCJkZWZhdWx0Tm93Iiwibm90TnVsbCIsInVwZGF0ZWRBdCIsInRhYmxlIiwicGdTY2hlbWEiLCJjb2xzIiwiZXh0cmFDb25maWciLCJPYmplY3QiLCJlbnRyaWVzIiwicmVkdWNlIiwiY29uZmlnIiwia2V5IiwiZnVuYyIsImFjYyIsImNvbE5hbWUiLCJ0YWJsZXMiLCJsb2NhbGVUYWJsZU5hbWUiLCJpZCIsInByaW1hcnlLZXkiLCJfbG9jYWxlIiwiZW51bXMiLCJlbnVtX19sb2NhbGVzIiwiX3BhcmVudElEIiwicmVmZXJlbmNlcyIsIm9uRGVsZXRlIiwiX2xvY2FsZVBhcmVudCIsIm9uIiwibG9jYWxlc1RhYmxlUmVsYXRpb25zIiwib25lIiwidGV4dHNUYWJsZU5hbWUiLCJvcmRlciIsInBhcmVudCIsInBhdGgiLCJ0ZXh0IiwibG9jYWxlIiwib3JkZXJQYXJlbnRJZHgiLCJ0ZXh0X2lkeCIsImxvY2FsZVBhcmVudCIsInRleHRzVGFibGVSZWxhdGlvbnMiLCJudW1iZXJzVGFibGVOYW1lIiwibnVtYmVyIiwibnVtYmVySWR4IiwibnVtYmVyc1RhYmxlUmVsYXRpb25zIiwic2l6ZSIsInJlbGF0aW9uc2hpcENvbHVtbnMiLCJmb3JFYWNoIiwicmVsYXRpb25UbyIsImZvcm1hdHRlZFJlbGF0aW9uVG8iLCJjb2xUeXBlIiwiaWRUeXBlIiwicmVsYXRlZENvbGxlY3Rpb25DdXN0b21JRCIsInBheWxvYWQiLCJjb2xsZWN0aW9ucyIsImZpbmQiLCJmaWVsZCIsIm5hbWUiLCJ0eXBlIiwicmVsYXRpb25zaGlwc1RhYmxlTmFtZSIsInJlc3VsdCIsInBhcmVudElkeCIsInBhdGhJZHgiLCJsb2NhbGVJZHgiLCJyZWxhdGlvbnNoaXBzVGFibGVSZWxhdGlvbnMiLCJyZWxhdGlvbk5hbWUiLCJyZWxhdGVkVGFibGVOYW1lIiwiaWRDb2x1bW5OYW1lIiwidGFibGVSZWxhdGlvbnMiLCJtYW55IiwidmFsIiwiX2xvY2FsZXMiLCJfdGV4dHMiLCJfbnVtYmVycyIsIl9yZWxzIl0sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0MsR0FVcEMsU0FBU0EsU0FBUyxRQUFRLGNBQWE7QUFDdkMsU0FBU0MsS0FBSyxFQUFFQyxPQUFPLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxRQUFRLHNCQUFxQjtBQUNqRyxTQUFTQyxnQkFBZ0IsUUFBUSxnQkFBZTtBQUNoRCxPQUFPQyxpQkFBaUIsZ0JBQWU7QUFJdkMsU0FBU0MsaUJBQWlCLFFBQVEseUJBQXdCO0FBQzFELFNBQVNDLFdBQVcsUUFBUSxtQkFBa0I7QUFDOUMsU0FBU0MsY0FBYyxRQUFRLHNCQUFxQjtBQTBCcEQsT0FBTyxNQUFNQyxhQUFhLENBQUMsRUFDekJDLE9BQU8sRUFDUEMsY0FBYyxDQUFDLENBQUMsRUFDaEJDLGtCQUFrQixDQUFDLENBQUMsRUFDcEJDLFlBQVksRUFDWkMsa0JBQWtCLEVBQ2xCQyxVQUFVLEVBQ1ZDLGNBQWMsRUFDZEMsZ0JBQWdCLEtBQUssRUFDckJDLE1BQU0sRUFDTkMsb0JBQW9CLEVBQ3BCQyxpQkFBaUIsRUFDakJDLGtCQUFrQixFQUNsQkMsZUFBZUMscUJBQXFCLEVBQ3BDQyxTQUFTLEVBQ1RDLFVBQVUsRUFDTDtJQUNMLE1BQU1ILGdCQUFnQkMseUJBQXlCQztJQUMvQyxNQUFNRSxVQUEyQ2Y7SUFDakQsTUFBTWdCLFVBQWtFLENBQUM7SUFFekUsSUFBSUMsb0JBQW9CO0lBQ3hCLElBQUlDLGdDQUFnQztJQUNwQyxJQUFJQyxtQkFBc0M7SUFDMUMsSUFBSUMscUJBQXdDO0lBQzVDLElBQUlDLDRCQUE0QjtJQUNoQyxJQUFJQyw4QkFBOEI7SUFFbEMsTUFBTUMsaUJBQWtELENBQUM7SUFDekQsTUFBTUMsaUJBQXlFLENBQUM7SUFDaEYsSUFBSUM7SUFDSixJQUFJQztJQUNKLElBQUlDO0lBRUosdUNBQXVDO0lBQ3ZDLE1BQU1DLGdCQUE2Qm5CLHFCQUFxQixJQUFJb0I7SUFFNUQsSUFBSUM7SUFFSixvQkFBb0I7SUFDcEIsTUFBTUMsbUJBQXdDLElBQUlDO0lBRWxELE1BQU1DLFlBQW9CckMsWUFBWTtRQUFFRztRQUFTZ0I7UUFBU1I7SUFBTztJQUUvRCxDQUFBLEVBQ0FVLGlCQUFpQixFQUNqQkssMkJBQTJCLEVBQzNCRCx5QkFBeUIsRUFDekJILDZCQUE2QixFQUM3QkUsa0JBQWtCLEVBQ2xCRCxnQkFBZ0IsRUFDakIsR0FBR3RCLGVBQWU7UUFDakJFO1FBQ0FHO1FBQ0FDO1FBQ0FDO1FBQ0FXO1FBQ0FWO1FBQ0FDO1FBQ0FDO1FBQ0FTO1FBQ0FPO1FBQ0FDO1FBQ0FVLGNBQWNyQjtRQUNkc0IsaUJBQWlCdEI7UUFDakJrQjtRQUNBSDtRQUNBcEIsc0JBQXNCQSx3QkFBd0J1QjtRQUM5Q3JCLG9CQUFvQkEsc0JBQXNCdUI7UUFDMUN0QjtJQUNGLEVBQUM7SUFFRCxJQUFJRyxZQUFZO1FBQ2RDLFFBQVFxQixTQUFTLEdBQUc5QyxVQUFVLGNBQWM7WUFDMUMrQyxNQUFNO1lBQ05DLFdBQVc7WUFDWEMsY0FBYztRQUNoQixHQUNHQyxVQUFVLEdBQ1ZDLE9BQU87UUFDVjFCLFFBQVEyQixTQUFTLEdBQUdwRCxVQUFVLGNBQWM7WUFDMUMrQyxNQUFNO1lBQ05DLFdBQVc7WUFDWEMsY0FBYztRQUNoQixHQUNHQyxVQUFVLEdBQ1ZDLE9BQU87SUFDWjtJQUVBLE1BQU1FLFFBQVE1QyxRQUFRNkMsUUFBUSxDQUFDRCxLQUFLLENBQUM5QixXQUFXRSxTQUFTLENBQUM4QjtRQUN4RCxNQUFNQyxjQUFjQyxPQUFPQyxPQUFPLENBQUMvQyxpQkFBaUJnRCxNQUFNLENBQUMsQ0FBQ0MsUUFBUSxDQUFDQyxLQUFLQyxLQUFLO1lBQzdFRixNQUFNLENBQUNDLElBQUksR0FBR0MsS0FBS1A7WUFDbkIsT0FBT0s7UUFDVCxHQUFHLENBQUM7UUFFSixPQUFPSCxPQUFPQyxPQUFPLENBQUNoQyxTQUFTaUMsTUFBTSxDQUFDLENBQUNJLEtBQUssQ0FBQ0MsU0FBU0YsS0FBSztZQUN6REMsR0FBRyxDQUFDQyxRQUFRLEdBQUdGLEtBQUtQO1lBQ3BCLE9BQU9RO1FBQ1QsR0FBR1A7SUFDTDtJQUVBL0MsUUFBUXdELE1BQU0sQ0FBQzFDLFVBQVUsR0FBRzhCO0lBRTVCLElBQUkxQixtQkFBbUI7UUFDckIsTUFBTXVDLGtCQUFrQixDQUFDLEVBQUUzQyxVQUFVLFFBQVEsQ0FBQztRQUM5Q1UsZUFBZWtDLEVBQUUsR0FBR3BFLE9BQU8sTUFBTXFFLFVBQVU7UUFDM0NuQyxlQUFlb0MsT0FBTyxHQUFHNUQsUUFBUTZELEtBQUssQ0FBQ0MsYUFBYSxDQUFDLFdBQVdwQixPQUFPO1FBQ3ZFbEIsZUFBZXVDLFNBQVMsR0FBR25FLGlCQUFpQixDQUFDc0MsVUFBVSxDQUFDLGNBQ3JEOEIsVUFBVSxDQUFDLElBQU1wQixNQUFNYyxFQUFFLEVBQUU7WUFBRU8sVUFBVTtRQUFVLEdBQ2pEdkIsT0FBTztRQUVWaEIsZUFBZTFCLFFBQVE2QyxRQUFRLENBQUNELEtBQUssQ0FBQ2EsaUJBQWlCakMsZ0JBQWdCLENBQUNzQjtZQUN0RSxPQUFPRSxPQUFPQyxPQUFPLENBQUN4QixnQkFBZ0J5QixNQUFNLENBQzFDLENBQUNJLEtBQUssQ0FBQ0MsU0FBU0YsS0FBSztnQkFDbkJDLEdBQUcsQ0FBQ0MsUUFBUSxHQUFHRixLQUFLUDtnQkFDcEIsT0FBT1E7WUFDVCxHQUNBO2dCQUNFWSxlQUFlMUUsT0FBTyxDQUFDLEVBQUVpRSxnQkFBZ0Isd0JBQXdCLENBQUMsRUFBRVUsRUFBRSxDQUNwRXJCLEtBQUtjLE9BQU8sRUFDWmQsS0FBS2lCLFNBQVM7WUFFbEI7UUFFSjtRQUVBL0QsUUFBUXdELE1BQU0sQ0FBQ0MsZ0JBQWdCLEdBQUcvQjtRQUVsQyxNQUFNMEMsd0JBQXdCbEYsVUFBVXdDLGNBQWMsQ0FBQyxFQUFFMkMsR0FBRyxFQUFFLEdBQU0sQ0FBQTtnQkFDbEVOLFdBQVdNLElBQUl6QixPQUFPO29CQUNwQnBDLFFBQVE7d0JBQUNrQixhQUFhcUMsU0FBUztxQkFBQztvQkFDaENDLFlBQVk7d0JBQUNwQixNQUFNYyxFQUFFO3FCQUFDO2dCQUN4QjtZQUNGLENBQUE7UUFFQTFELFFBQVFkLFNBQVMsQ0FBQyxDQUFDLFVBQVUsRUFBRXVFLGdCQUFnQixDQUFDLENBQUMsR0FBR1c7SUFDdEQ7SUFFQSxJQUFJaEQsb0JBQW9CZixZQUFZO1FBQ2xDLE1BQU1pRSxpQkFBaUIsQ0FBQyxFQUFFMUQsY0FBYyxNQUFNLENBQUM7UUFDL0MsTUFBTUksVUFBMkM7WUFDL0MwQyxJQUFJcEUsT0FBTyxNQUFNcUUsVUFBVTtZQUMzQlksT0FBT25GLFFBQVEsU0FBU3NELE9BQU87WUFDL0I4QixRQUFRNUUsaUJBQWlCLENBQUNzQyxVQUFVLENBQUMsYUFDbEM4QixVQUFVLENBQUMsSUFBTXBCLE1BQU1jLEVBQUUsRUFBRTtnQkFBRU8sVUFBVTtZQUFVLEdBQ2pEdkIsT0FBTztZQUNWK0IsTUFBTWhGLFFBQVEsUUFBUWlELE9BQU87WUFDN0JnQyxNQUFNakYsUUFBUTtRQUNoQjtRQUVBLElBQUk2QiwyQkFBMkI7WUFDN0JOLFFBQVEyRCxNQUFNLEdBQUczRSxRQUFRNkQsS0FBSyxDQUFDQyxhQUFhLENBQUM7UUFDL0M7UUFFQW5DLGFBQWEzQixRQUFRNkMsUUFBUSxDQUFDRCxLQUFLLENBQUMwQixnQkFBZ0J0RCxTQUFTLENBQUM4QjtZQUM1RCxNQUFNN0IsVUFBd0M7Z0JBQzVDMkQsZ0JBQWdCekYsTUFBTSxDQUFDLEVBQUVtRixlQUFlLGlCQUFpQixDQUFDLEVBQUVILEVBQUUsQ0FBQ3JCLEtBQUt5QixLQUFLLEVBQUV6QixLQUFLMEIsTUFBTTtZQUN4RjtZQUVBLElBQUlwRCxxQkFBcUIsU0FBUztnQkFDaENILFFBQVE0RCxRQUFRLEdBQUcxRixNQUFNLENBQUMsRUFBRW1GLGVBQWUsU0FBUyxDQUFDLEVBQUVILEVBQUUsQ0FBQ3JCLEtBQUs0QixJQUFJO1lBQ3JFO1lBRUEsSUFBSXBELDJCQUEyQjtnQkFDN0JMLFFBQVE2RCxZQUFZLEdBQUczRixNQUFNLENBQUMsRUFBRW1GLGVBQWUsY0FBYyxDQUFDLEVBQUVILEVBQUUsQ0FBQ3JCLEtBQUs2QixNQUFNLEVBQUU3QixLQUFLMEIsTUFBTTtZQUM3RjtZQUVBLE9BQU92RDtRQUNUO1FBRUFqQixRQUFRd0QsTUFBTSxDQUFDYyxlQUFlLEdBQUczQztRQUVqQyxNQUFNb0Qsc0JBQXNCN0YsVUFBVXlDLFlBQVksQ0FBQyxFQUFFMEMsR0FBRyxFQUFFLEdBQU0sQ0FBQTtnQkFDOURHLFFBQVFILElBQUl6QixPQUFPO29CQUNqQnBDLFFBQVE7d0JBQUNtQixXQUFXNkMsTUFBTTtxQkFBQztvQkFDM0JSLFlBQVk7d0JBQUNwQixNQUFNYyxFQUFFO3FCQUFDO2dCQUN4QjtZQUNGLENBQUE7UUFFQTFELFFBQVFkLFNBQVMsQ0FBQyxDQUFDLFVBQVUsRUFBRW9GLGVBQWUsQ0FBQyxDQUFDLEdBQUdTO0lBQ3JEO0lBRUEsSUFBSTFELHNCQUFzQmxCLGNBQWM7UUFDdEMsTUFBTTZFLG1CQUFtQixDQUFDLEVBQUVwRSxjQUFjLFFBQVEsQ0FBQztRQUNuRCxNQUFNSSxVQUEyQztZQUMvQzBDLElBQUlwRSxPQUFPLE1BQU1xRSxVQUFVO1lBQzNCc0IsUUFBUTVGLFFBQVE7WUFDaEJrRixPQUFPbkYsUUFBUSxTQUFTc0QsT0FBTztZQUMvQjhCLFFBQVE1RSxpQkFBaUIsQ0FBQ3NDLFVBQVUsQ0FBQyxhQUNsQzhCLFVBQVUsQ0FBQyxJQUFNcEIsTUFBTWMsRUFBRSxFQUFFO2dCQUFFTyxVQUFVO1lBQVUsR0FDakR2QixPQUFPO1lBQ1YrQixNQUFNaEYsUUFBUSxRQUFRaUQsT0FBTztRQUMvQjtRQUVBLElBQUluQiw2QkFBNkI7WUFDL0JQLFFBQVEyRCxNQUFNLEdBQUczRSxRQUFRNkQsS0FBSyxDQUFDQyxhQUFhLENBQUM7UUFDL0M7UUFFQWxDLGVBQWU1QixRQUFRNkMsUUFBUSxDQUFDRCxLQUFLLENBQUNvQyxrQkFBa0JoRSxTQUFTLENBQUM4QjtZQUNoRSxNQUFNN0IsVUFBd0M7Z0JBQzVDMkQsZ0JBQWdCekYsTUFBTSxDQUFDLEVBQUU2RixpQkFBaUIsaUJBQWlCLENBQUMsRUFBRWIsRUFBRSxDQUFDckIsS0FBS3lCLEtBQUssRUFBRXpCLEtBQUswQixNQUFNO1lBQzFGO1lBRUEsSUFBSW5ELHVCQUF1QixTQUFTO2dCQUNsQ0osUUFBUWlFLFNBQVMsR0FBRy9GLE1BQU0sQ0FBQyxFQUFFNkYsaUJBQWlCLFdBQVcsQ0FBQyxFQUFFYixFQUFFLENBQUNyQixLQUFLbUMsTUFBTTtZQUM1RTtZQUVBLElBQUkxRCw2QkFBNkI7Z0JBQy9CTixRQUFRNkQsWUFBWSxHQUFHM0YsTUFBTSxDQUFDLEVBQUU2RixpQkFBaUIsY0FBYyxDQUFDLEVBQUViLEVBQUUsQ0FDbEVyQixLQUFLNkIsTUFBTSxFQUNYN0IsS0FBSzBCLE1BQU07WUFFZjtZQUVBLE9BQU92RDtRQUNUO1FBRUFqQixRQUFRd0QsTUFBTSxDQUFDd0IsaUJBQWlCLEdBQUdwRDtRQUVuQyxNQUFNdUQsd0JBQXdCakcsVUFBVTBDLGNBQWMsQ0FBQyxFQUFFeUMsR0FBRyxFQUFFLEdBQU0sQ0FBQTtnQkFDbEVHLFFBQVFILElBQUl6QixPQUFPO29CQUNqQnBDLFFBQVE7d0JBQUNvQixhQUFhNEMsTUFBTTtxQkFBQztvQkFDN0JSLFlBQVk7d0JBQUNwQixNQUFNYyxFQUFFO3FCQUFDO2dCQUN4QjtZQUNGLENBQUE7UUFFQTFELFFBQVFkLFNBQVMsQ0FBQyxDQUFDLFVBQVUsRUFBRThGLGlCQUFpQixDQUFDLENBQUMsR0FBR0c7SUFDdkQ7SUFFQSxJQUFJL0Usb0JBQW9CO1FBQ3RCLElBQUl5QixjQUFjdUQsSUFBSSxFQUFFO1lBQ3RCLE1BQU1DLHNCQUF1RDtnQkFDM0QzQixJQUFJcEUsT0FBTyxNQUFNcUUsVUFBVTtnQkFDM0JZLE9BQU9uRixRQUFRO2dCQUNmb0YsUUFBUTVFLGlCQUFpQixDQUFDc0MsVUFBVSxDQUFDLGFBQ2xDOEIsVUFBVSxDQUFDLElBQU1wQixNQUFNYyxFQUFFLEVBQUU7b0JBQUVPLFVBQVU7Z0JBQVUsR0FDakR2QixPQUFPO2dCQUNWK0IsTUFBTWhGLFFBQVEsUUFBUWlELE9BQU87WUFDL0I7WUFFQSxJQUFJdkIsK0JBQStCO2dCQUNqQ2tFLG9CQUFvQlYsTUFBTSxHQUFHM0UsUUFBUTZELEtBQUssQ0FBQ0MsYUFBYSxDQUFDO1lBQzNEO1lBRUFqQyxjQUFjeUQsT0FBTyxDQUFDLENBQUNDO2dCQUNyQixNQUFNQyxzQkFBc0I3RixZQUFZNEY7Z0JBQ3hDLElBQUlFLFVBQVV6RixRQUFRMEYsTUFBTSxLQUFLLFNBQVMsU0FBUztnQkFDbkQsTUFBTUMsNEJBQTRCM0YsUUFBUTRGLE9BQU8sQ0FBQ0MsV0FBVyxDQUMzRE4sV0FDRCxDQUFDcEMsTUFBTSxDQUFDM0MsTUFBTSxDQUFDc0YsSUFBSSxDQUFDLENBQUNDLFFBQVVyRyxpQkFBaUJxRyxVQUFVQSxNQUFNQyxJQUFJLEtBQUs7Z0JBQzFFLElBQUlMLDJCQUEyQk0sU0FBUyxVQUFVUixVQUFVO2dCQUM1RCxJQUFJRSwyQkFBMkJNLFNBQVMsUUFBUVIsVUFBVTtnQkFFMURKLG1CQUFtQixDQUFDLENBQUMsRUFBRUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxHQUFHM0YsaUJBQWlCLENBQUM2RixRQUFRLENBQ2pFLENBQUMsRUFBRUQsb0JBQW9CLEdBQUcsQ0FBQyxFQUMzQnhCLFVBQVUsQ0FBQyxJQUFNaEUsUUFBUXdELE1BQU0sQ0FBQ2dDLG9CQUFvQixDQUFDOUIsRUFBRSxFQUFFO29CQUFFTyxVQUFVO2dCQUFVO1lBQ25GO1lBRUEsTUFBTWlDLHlCQUF5QixDQUFDLEVBQUVwRixVQUFVLEtBQUssQ0FBQztZQUVsRGlCLHFCQUFxQi9CLFFBQVE2QyxRQUFRLENBQUNELEtBQUssQ0FDekNzRCx3QkFDQWIscUJBQ0EsQ0FBQ3ZDO2dCQUNDLE1BQU1xRCxTQUFrQztvQkFDdEM1QixPQUFPcEYsTUFBTSxDQUFDLEVBQUUrRyx1QkFBdUIsVUFBVSxDQUFDLEVBQUUvQixFQUFFLENBQUNyQixLQUFLeUIsS0FBSztvQkFDakU2QixXQUFXakgsTUFBTSxDQUFDLEVBQUUrRyx1QkFBdUIsV0FBVyxDQUFDLEVBQUUvQixFQUFFLENBQUNyQixLQUFLMEIsTUFBTTtvQkFDdkU2QixTQUFTbEgsTUFBTSxDQUFDLEVBQUUrRyx1QkFBdUIsU0FBUyxDQUFDLEVBQUUvQixFQUFFLENBQUNyQixLQUFLMkIsSUFBSTtnQkFDbkU7Z0JBRUEsSUFBSXRELCtCQUErQjtvQkFDakNnRixPQUFPRyxTQUFTLEdBQUduSCxNQUFNLENBQUMsRUFBRStHLHVCQUF1QixXQUFXLENBQUMsRUFBRS9CLEVBQUUsQ0FBQ3JCLEtBQUs2QixNQUFNO2dCQUNqRjtnQkFFQSxPQUFPd0I7WUFDVDtZQUdGbkcsUUFBUXdELE1BQU0sQ0FBQzBDLHVCQUF1QixHQUFHbkU7WUFFekMsTUFBTXdFLDhCQUE4QnJILFVBQVU2QyxvQkFBb0IsQ0FBQyxFQUFFc0MsR0FBRyxFQUFFO2dCQUN4RSxNQUFNOEIsU0FBMkM7b0JBQy9DM0IsUUFBUUgsSUFBSXpCLE9BQU87d0JBQ2pCcEMsUUFBUTs0QkFBQ3VCLG1CQUFtQnlDLE1BQU07eUJBQUM7d0JBQ25DUixZQUFZOzRCQUFDcEIsTUFBTWMsRUFBRTt5QkFBQzt3QkFDdEI4QyxjQUFjO29CQUNoQjtnQkFDRjtnQkFFQTNFLGNBQWN5RCxPQUFPLENBQUMsQ0FBQ0M7b0JBQ3JCLE1BQU1rQixtQkFBbUI5RyxZQUFZNEY7b0JBQ3JDLE1BQU1tQixlQUFlLENBQUMsRUFBRW5CLFdBQVcsRUFBRSxDQUFDO29CQUN0Q1ksTUFBTSxDQUFDTyxhQUFhLEdBQUdyQyxJQUFJckUsUUFBUXdELE1BQU0sQ0FBQ2lELGlCQUFpQixFQUFFO3dCQUMzRGpHLFFBQVE7NEJBQUN1QixrQkFBa0IsQ0FBQzJFLGFBQWE7eUJBQUM7d0JBQzFDMUMsWUFBWTs0QkFBQ2hFLFFBQVF3RCxNQUFNLENBQUNpRCxpQkFBaUIsQ0FBQy9DLEVBQUU7eUJBQUM7b0JBQ25EO2dCQUNGO2dCQUVBLE9BQU95QztZQUNUO1lBRUFuRyxRQUFRZCxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUVnSCx1QkFBdUIsQ0FBQyxDQUFDLEdBQUdLO1FBQzdEO0lBQ0Y7SUFFQSxNQUFNSSxpQkFBaUJ6SCxVQUFVMEQsT0FBTyxDQUFDLEVBQUVnRSxJQUFJLEVBQUU7UUFDL0MsTUFBTVQsU0FBMkMsQ0FBQztRQUVsRG5FLGlCQUFpQnNELE9BQU8sQ0FBQyxDQUFDdUIsS0FBS3pEO1lBQzdCK0MsTUFBTSxDQUFDL0MsSUFBSSxHQUFHd0QsS0FBSzVHLFFBQVF3RCxNQUFNLENBQUNxRCxJQUFJO1FBQ3hDO1FBRUEsSUFBSTNGLG1CQUFtQjtZQUNyQmlGLE9BQU9XLFFBQVEsR0FBR0YsS0FBS2xGO1FBQ3pCO1FBRUEsSUFBSU4sa0JBQWtCO1lBQ3BCK0UsT0FBT1ksTUFBTSxHQUFHSCxLQUFLakY7UUFDdkI7UUFDQSxJQUFJTixvQkFBb0I7WUFDdEI4RSxPQUFPYSxRQUFRLEdBQUdKLEtBQUtoRjtRQUN6QjtRQUVBLElBQUlDLGNBQWN1RCxJQUFJLElBQUlyRCxvQkFBb0I7WUFDNUNvRSxPQUFPYyxLQUFLLEdBQUdMLEtBQUs3RSxvQkFBb0I7Z0JBQ3RDeUUsY0FBYztZQUNoQjtRQUNGO1FBRUEsT0FBT0w7SUFDVDtJQUVBbkcsUUFBUWQsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFNEIsVUFBVSxDQUFDLENBQUMsR0FBRzZGO0lBRTlDLE9BQU87UUFBRXRGO1FBQW9CRDtRQUFrQlk7SUFBaUI7QUFDbEUsRUFBQyJ9
|
276
|
+
//# sourceMappingURL=build.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/schema/build.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { Relation } from 'drizzle-orm'\nimport type {\n IndexBuilder,\n PgColumnBuilder,\n PgTableWithColumns,\n UniqueConstraintBuilder,\n} from 'drizzle-orm/pg-core'\nimport type { Field } from 'payload/types'\n\nimport { relations } from 'drizzle-orm'\nimport { index, integer, numeric, serial, timestamp, unique, varchar } from 'drizzle-orm/pg-core'\nimport { fieldAffectsData } from 'payload/types'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { GenericColumns, GenericTable, IDType, PostgresAdapter } from '../types.js'\n\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { setColumnID } from './setColumnID.js'\nimport { traverseFields } from './traverseFields.js'\n\ntype Args = {\n adapter: PostgresAdapter\n baseColumns?: Record<string, PgColumnBuilder>\n baseExtraConfig?: Record<string, (cols: GenericColumns) => IndexBuilder | UniqueConstraintBuilder>\n buildNumbers?: boolean\n buildRelationships?: boolean\n buildTexts?: boolean\n disableNotNull: boolean\n disableUnique: boolean\n fields: Field[]\n rootRelationsToBuild?: Map<string, string>\n rootRelationships?: Set<string>\n rootTableIDColType?: string\n rootTableName?: string\n tableName: string\n timestamps?: boolean\n}\n\ntype Result = {\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n relationsToBuild: Map<string, string>\n}\n\nexport const buildTable = ({\n adapter,\n baseColumns = {},\n baseExtraConfig = {},\n buildNumbers,\n buildRelationships,\n buildTexts,\n disableNotNull,\n disableUnique = false,\n fields,\n rootRelationsToBuild,\n rootRelationships,\n rootTableIDColType,\n rootTableName: incomingRootTableName,\n tableName,\n timestamps,\n}: Args): Result => {\n const rootTableName = incomingRootTableName || tableName\n const columns: Record<string, PgColumnBuilder> = baseColumns\n const indexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasLocalizedManyNumberField = false\n\n const localesColumns: Record<string, PgColumnBuilder> = {}\n const localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder> = {}\n let localesTable: GenericTable | PgTableWithColumns<any>\n let textsTable: GenericTable | PgTableWithColumns<any>\n let numbersTable: GenericTable | PgTableWithColumns<any>\n\n // Relationships to the base collection\n const relationships: Set<string> = rootRelationships || new Set()\n\n let relationshipsTable: GenericTable | PgTableWithColumns<any>\n\n // Drizzle relations\n const relationsToBuild: Map<string, string> = new Map()\n\n const idColType: IDType = setColumnID({ adapter, columns, fields })\n\n ;({\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n } = traverseFields({\n adapter,\n buildNumbers,\n buildRelationships,\n buildTexts,\n columns,\n disableNotNull,\n disableUnique,\n fields,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: tableName,\n parentTableName: tableName,\n relationsToBuild,\n relationships,\n rootRelationsToBuild: rootRelationsToBuild || relationsToBuild,\n rootTableIDColType: rootTableIDColType || idColType,\n rootTableName,\n }))\n\n if (timestamps) {\n columns.createdAt = timestamp('created_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n columns.updatedAt = timestamp('updated_at', {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n .defaultNow()\n .notNull()\n }\n\n const table = adapter.pgSchema.table(tableName, columns, (cols) => {\n const extraConfig = Object.entries(baseExtraConfig).reduce((config, [key, func]) => {\n config[key] = func(cols)\n return config\n }, {})\n\n return Object.entries(indexes).reduce((acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n }, extraConfig)\n })\n\n adapter.tables[tableName] = table\n\n if (hasLocalizedField) {\n const localeTableName = `${tableName}_locales`\n localesColumns.id = serial('id').primaryKey()\n localesColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id')\n .references(() => table.id, { onDelete: 'cascade' })\n .notNull()\n\n localesTable = adapter.pgSchema.table(localeTableName, localesColumns, (cols) => {\n return Object.entries(localesIndexes).reduce(\n (acc, [colName, func]) => {\n acc[colName] = func(cols)\n return acc\n },\n {\n _localeParent: unique(`${localeTableName}_locale_parent_id_unique`).on(\n cols._locale,\n cols._parentID,\n ),\n },\n )\n })\n\n adapter.tables[localeTableName] = localesTable\n\n const localesTableRelations = relations(localesTable, ({ one }) => ({\n _parentID: one(table, {\n fields: [localesTable._parentID],\n references: [table.id],\n }),\n }))\n\n adapter.relations[`relations_${localeTableName}`] = localesTableRelations\n }\n\n if (hasManyTextField && buildTexts) {\n const textsTableName = `${rootTableName}_texts`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id')\n .references(() => table.id, { onDelete: 'cascade' })\n .notNull(),\n path: varchar('path').notNull(),\n text: varchar('text'),\n }\n\n if (hasLocalizedManyTextField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n textsTable = adapter.pgSchema.table(textsTableName, columns, (cols) => {\n const indexes: Record<string, IndexBuilder> = {\n orderParentIdx: index(`${textsTableName}_order_parent_idx`).on(cols.order, cols.parent),\n }\n\n if (hasManyTextField === 'index') {\n indexes.text_idx = index(`${textsTableName}_text_idx`).on(cols.text)\n }\n\n if (hasLocalizedManyTextField) {\n indexes.localeParent = index(`${textsTableName}_locale_parent`).on(cols.locale, cols.parent)\n }\n\n return indexes\n })\n\n adapter.tables[textsTableName] = textsTable\n\n const textsTableRelations = relations(textsTable, ({ one }) => ({\n parent: one(table, {\n fields: [textsTable.parent],\n references: [table.id],\n }),\n }))\n\n adapter.relations[`relations_${textsTableName}`] = textsTableRelations\n }\n\n if (hasManyNumberField && buildNumbers) {\n const numbersTableName = `${rootTableName}_numbers`\n const columns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n number: numeric('number'),\n order: integer('order').notNull(),\n parent: parentIDColumnMap[idColType]('parent_id')\n .references(() => table.id, { onDelete: 'cascade' })\n .notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedManyNumberField) {\n columns.locale = adapter.enums.enum__locales('locale')\n }\n\n numbersTable = adapter.pgSchema.table(numbersTableName, columns, (cols) => {\n const indexes: Record<string, IndexBuilder> = {\n orderParentIdx: index(`${numbersTableName}_order_parent_idx`).on(cols.order, cols.parent),\n }\n\n if (hasManyNumberField === 'index') {\n indexes.numberIdx = index(`${numbersTableName}_number_idx`).on(cols.number)\n }\n\n if (hasLocalizedManyNumberField) {\n indexes.localeParent = index(`${numbersTableName}_locale_parent`).on(\n cols.locale,\n cols.parent,\n )\n }\n\n return indexes\n })\n\n adapter.tables[numbersTableName] = numbersTable\n\n const numbersTableRelations = relations(numbersTable, ({ one }) => ({\n parent: one(table, {\n fields: [numbersTable.parent],\n references: [table.id],\n }),\n }))\n\n adapter.relations[`relations_${numbersTableName}`] = numbersTableRelations\n }\n\n if (buildRelationships) {\n if (relationships.size) {\n const relationshipColumns: Record<string, PgColumnBuilder> = {\n id: serial('id').primaryKey(),\n order: integer('order'),\n parent: parentIDColumnMap[idColType]('parent_id')\n .references(() => table.id, { onDelete: 'cascade' })\n .notNull(),\n path: varchar('path').notNull(),\n }\n\n if (hasLocalizedRelationshipField) {\n relationshipColumns.locale = adapter.enums.enum__locales('locale')\n }\n\n relationships.forEach((relationTo) => {\n const formattedRelationTo = toSnakeCase(relationTo)\n let colType = adapter.idType === 'uuid' ? 'uuid' : 'integer'\n const relatedCollectionCustomID = adapter.payload.collections[\n relationTo\n ].config.fields.find((field) => fieldAffectsData(field) && field.name === 'id')\n if (relatedCollectionCustomID?.type === 'number') colType = 'numeric'\n if (relatedCollectionCustomID?.type === 'text') colType = 'varchar'\n\n relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType](\n `${formattedRelationTo}_id`,\n ).references(() => adapter.tables[formattedRelationTo].id, { onDelete: 'cascade' })\n })\n\n const relationshipsTableName = `${tableName}_rels`\n\n relationshipsTable = adapter.pgSchema.table(\n relationshipsTableName,\n relationshipColumns,\n (cols) => {\n const result: Record<string, unknown> = {\n order: index(`${relationshipsTableName}_order_idx`).on(cols.order),\n parentIdx: index(`${relationshipsTableName}_parent_idx`).on(cols.parent),\n pathIdx: index(`${relationshipsTableName}_path_idx`).on(cols.path),\n }\n\n if (hasLocalizedRelationshipField) {\n result.localeIdx = index(`${relationshipsTableName}_locale_idx`).on(cols.locale)\n }\n\n return result\n },\n )\n\n adapter.tables[relationshipsTableName] = relationshipsTable\n\n const relationshipsTableRelations = relations(relationshipsTable, ({ one }) => {\n const result: Record<string, Relation<string>> = {\n parent: one(table, {\n fields: [relationshipsTable.parent],\n references: [table.id],\n relationName: '_rels',\n }),\n }\n\n relationships.forEach((relationTo) => {\n const relatedTableName = toSnakeCase(relationTo)\n const idColumnName = `${relationTo}ID`\n result[idColumnName] = one(adapter.tables[relatedTableName], {\n fields: [relationshipsTable[idColumnName]],\n references: [adapter.tables[relatedTableName].id],\n })\n })\n\n return result\n })\n\n adapter.relations[`relations_${relationshipsTableName}`] = relationshipsTableRelations\n }\n }\n\n const tableRelations = relations(table, ({ many }) => {\n const result: Record<string, Relation<string>> = {}\n\n relationsToBuild.forEach((val, key) => {\n result[key] = many(adapter.tables[val])\n })\n\n if (hasLocalizedField) {\n result._locales = many(localesTable)\n }\n\n if (hasManyTextField) {\n result._texts = many(textsTable)\n }\n if (hasManyNumberField) {\n result._numbers = many(numbersTable)\n }\n\n if (relationships.size && relationshipsTable) {\n result._rels = many(relationshipsTable, {\n relationName: '_rels',\n })\n }\n\n return result\n })\n\n adapter.relations[`relations_${tableName}`] = tableRelations\n\n return { hasManyNumberField, hasManyTextField, relationsToBuild }\n}\n"],"names":["relations","index","integer","numeric","serial","timestamp","unique","varchar","fieldAffectsData","toSnakeCase","parentIDColumnMap","setColumnID","traverseFields","buildTable","adapter","baseColumns","baseExtraConfig","buildNumbers","buildRelationships","buildTexts","disableNotNull","disableUnique","fields","rootRelationsToBuild","rootRelationships","rootTableIDColType","rootTableName","incomingRootTableName","tableName","timestamps","columns","indexes","hasLocalizedField","hasLocalizedRelationshipField","hasManyTextField","hasManyNumberField","hasLocalizedManyTextField","hasLocalizedManyNumberField","localesColumns","localesIndexes","localesTable","textsTable","numbersTable","relationships","Set","relationshipsTable","relationsToBuild","Map","idColType","newTableName","parentTableName","createdAt","mode","precision","withTimezone","defaultNow","notNull","updatedAt","table","pgSchema","cols","extraConfig","Object","entries","reduce","config","key","func","acc","colName","tables","localeTableName","id","primaryKey","_locale","enums","enum__locales","_parentID","references","onDelete","_localeParent","on","localesTableRelations","one","textsTableName","order","parent","path","text","locale","orderParentIdx","text_idx","localeParent","textsTableRelations","numbersTableName","number","numberIdx","numbersTableRelations","size","relationshipColumns","forEach","relationTo","formattedRelationTo","colType","idType","relatedCollectionCustomID","payload","collections","find","field","name","type","relationshipsTableName","result","parentIdx","pathIdx","localeIdx","relationshipsTableRelations","relationName","relatedTableName","idColumnName","tableRelations","many","val","_locales","_texts","_numbers","_rels"],"mappings":"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"}
|
@@ -15,4 +15,4 @@ export const createIndex = ({ name, columnName, tableName, unique })=>{
|
|
15
15
|
};
|
16
16
|
};
|
17
17
|
|
18
|
-
//# sourceMappingURL=
|
18
|
+
//# sourceMappingURL=createIndex.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/schema/createIndex.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport { index, uniqueIndex } from 'drizzle-orm/pg-core'\n\nimport type { GenericColumn } from '../types.js'\n\ntype CreateIndexArgs = {\n columnName: string\n name: string | string[]\n tableName: string\n unique?: boolean\n}\n\nexport const createIndex = ({ name, columnName, tableName, unique }: CreateIndexArgs) => {\n return (table: { [x: string]: GenericColumn }) => {\n let columns\n if (Array.isArray(name)) {\n columns = name\n .map((columnName) => table[columnName])\n // exclude fields were included in compound indexes but do not exist on the table\n .filter((col) => typeof col !== 'undefined')\n } else {\n columns = [table[name]]\n }\n if (unique)\n return uniqueIndex(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1))\n return index(`${tableName}_${columnName}_idx`).on(columns[0], ...columns.slice(1))\n }\n}\n"],"names":["index","uniqueIndex","createIndex","name","columnName","tableName","unique","table","columns","Array","isArray","map","filter","col","on","slice"],"mappings":"AAAA,oCAAoC,GACpC,SAASA,KAAK,EAAEC,WAAW,QAAQ,sBAAqB;AAWxD,OAAO,MAAMC,cAAc,CAAC,EAAEC,IAAI,EAAEC,UAAU,EAAEC,SAAS,EAAEC,MAAM,EAAmB;IAClF,OAAO,CAACC;QACN,IAAIC;QACJ,IAAIC,MAAMC,OAAO,CAACP,OAAO;YACvBK,UAAUL,KACPQ,GAAG,CAAC,CAACP,aAAeG,KAAK,CAACH,WAAW,CACtC,iFAAiF;aAChFQ,MAAM,CAAC,CAACC,MAAQ,OAAOA,QAAQ;QACpC,OAAO;YACLL,UAAU;gBAACD,KAAK,CAACJ,KAAK;aAAC;QACzB;QACA,IAAIG,QACF,OAAOL,YAAY,CAAC,EAAEI,UAAU,CAAC,EAAED,WAAW,IAAI,CAAC,EAAEU,EAAE,CAACN,OAAO,CAAC,EAAE,KAAKA,QAAQO,KAAK,CAAC;QACvF,OAAOf,MAAM,CAAC,EAAEK,UAAU,CAAC,EAAED,WAAW,IAAI,CAAC,EAAEU,EAAE,CAACN,OAAO,CAAC,EAAE,KAAKA,QAAQO,KAAK,CAAC;IACjF;AACF,EAAC"}
|
package/dist/schema/idToUUID.js
CHANGED
@@ -8,4 +8,4 @@ export const idToUUID = (fields)=>fields.map((field)=>{
|
|
8
8
|
return field;
|
9
9
|
});
|
10
10
|
|
11
|
-
//# sourceMappingURL=
|
11
|
+
//# sourceMappingURL=idToUUID.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/schema/idToUUID.ts"],"sourcesContent":["import type { Field } from 'payload/types'\n\nexport const idToUUID = (fields: Field[]): Field[] =>\n fields.map((field) => {\n if ('name' in field && field.name === 'id') {\n return {\n ...field,\n name: '_uuid',\n }\n }\n\n return field\n })\n"],"names":["idToUUID","fields","map","field","name"],"mappings":"AAEA,OAAO,MAAMA,WAAW,CAACC,SACvBA,OAAOC,GAAG,CAAC,CAACC;QACV,IAAI,UAAUA,SAASA,MAAMC,IAAI,KAAK,MAAM;YAC1C,OAAO;gBACL,GAAGD,KAAK;gBACRC,MAAM;YACR;QACF;QAEA,OAAOD;IACT,GAAE"}
|
@@ -6,4 +6,4 @@ export const parentIDColumnMap = {
|
|
6
6
|
varchar
|
7
7
|
};
|
8
8
|
|
9
|
-
//# sourceMappingURL=
|
9
|
+
//# sourceMappingURL=parentIDColumnMap.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/schema/parentIDColumnMap.ts"],"sourcesContent":["import { integer, numeric, uuid, varchar } from 'drizzle-orm/pg-core'\n\nimport type { IDType } from '../types.js'\n\nexport const parentIDColumnMap: Record<\n IDType,\n typeof integer<string> | typeof numeric<string> | typeof uuid<string> | typeof varchar\n> = {\n integer,\n numeric,\n uuid,\n varchar,\n}\n"],"names":["integer","numeric","uuid","varchar","parentIDColumnMap"],"mappings":"AAAA,SAASA,OAAO,EAAEC,OAAO,EAAEC,IAAI,EAAEC,OAAO,QAAQ,sBAAqB;AAIrE,OAAO,MAAMC,oBAGT;IACFJ;IACAC;IACAC;IACAC;AACF,EAAC"}
|
@@ -21,4 +21,4 @@ export const setColumnID = ({ adapter, columns, fields })=>{
|
|
21
21
|
return 'integer';
|
22
22
|
};
|
23
23
|
|
24
|
-
//# sourceMappingURL=
|
24
|
+
//# sourceMappingURL=setColumnID.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/schema/setColumnID.ts"],"sourcesContent":["import type { PgColumnBuilder } from 'drizzle-orm/pg-core'\n\nimport { numeric, serial, uuid, varchar } from 'drizzle-orm/pg-core'\nimport { type Field, fieldAffectsData } from 'payload/types'\nimport { flattenTopLevelFields } from 'payload/utilities'\n\nimport type { IDType, PostgresAdapter } from '../types.js'\n\ntype Args = { adapter: PostgresAdapter; columns: Record<string, PgColumnBuilder>; fields: Field[] }\nexport const setColumnID = ({ adapter, columns, fields }: Args): IDType => {\n const idField = flattenTopLevelFields(fields).find(\n (field) => fieldAffectsData(field) && field.name === 'id',\n )\n if (idField) {\n if (idField.type === 'number') {\n columns.id = numeric('id').primaryKey()\n return 'numeric'\n }\n\n if (idField.type === 'text') {\n columns.id = varchar('id').primaryKey()\n return 'varchar'\n }\n }\n\n if (adapter.idType === 'uuid') {\n columns.id = uuid('id').defaultRandom().primaryKey()\n return 'uuid'\n }\n\n columns.id = serial('id').primaryKey()\n return 'integer'\n}\n"],"names":["numeric","serial","uuid","varchar","fieldAffectsData","flattenTopLevelFields","setColumnID","adapter","columns","fields","idField","find","field","name","type","id","primaryKey","idType","defaultRandom"],"mappings":"AAEA,SAASA,OAAO,EAAEC,MAAM,EAAEC,IAAI,EAAEC,OAAO,QAAQ,sBAAqB;AACpE,SAAqBC,gBAAgB,QAAQ,gBAAe;AAC5D,SAASC,qBAAqB,QAAQ,oBAAmB;AAKzD,OAAO,MAAMC,cAAc,CAAC,EAAEC,OAAO,EAAEC,OAAO,EAAEC,MAAM,EAAQ;IAC5D,MAAMC,UAAUL,sBAAsBI,QAAQE,IAAI,CAChD,CAACC,QAAUR,iBAAiBQ,UAAUA,MAAMC,IAAI,KAAK;IAEvD,IAAIH,SAAS;QACX,IAAIA,QAAQI,IAAI,KAAK,UAAU;YAC7BN,QAAQO,EAAE,GAAGf,QAAQ,MAAMgB,UAAU;YACrC,OAAO;QACT;QAEA,IAAIN,QAAQI,IAAI,KAAK,QAAQ;YAC3BN,QAAQO,EAAE,GAAGZ,QAAQ,MAAMa,UAAU;YACrC,OAAO;QACT;IACF;IAEA,IAAIT,QAAQU,MAAM,KAAK,QAAQ;QAC7BT,QAAQO,EAAE,GAAGb,KAAK,MAAMgB,aAAa,GAAGF,UAAU;QAClD,OAAO;IACT;IAEAR,QAAQO,EAAE,GAAGd,OAAO,MAAMe,UAAU;IACpC,OAAO;AACT,EAAC"}
|
@@ -490,4 +490,4 @@ export const traverseFields = ({ adapter, buildNumbers, buildRelationships, buil
|
|
490
490
|
};
|
491
491
|
};
|
492
492
|
|
493
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvdHJhdmVyc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCB0eXBlIHsgUmVsYXRpb24gfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB0eXBlIHsgSW5kZXhCdWlsZGVyLCBQZ0NvbHVtbkJ1aWxkZXIsIFVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSdcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG5pbXBvcnQgeyByZWxhdGlvbnMgfSBmcm9tICdkcml6emxlLW9ybSdcbmltcG9ydCB7XG4gIFBnTnVtZXJpY0J1aWxkZXIsXG4gIFBnVVVJREJ1aWxkZXIsXG4gIFBnVmFyY2hhckJ1aWxkZXIsXG4gIGJvb2xlYW4sXG4gIGluZGV4LFxuICBpbnRlZ2VyLFxuICBqc29uYixcbiAgbnVtZXJpYyxcbiAgcGdFbnVtLFxuICB0ZXh0LFxuICB0aW1lc3RhbXAsXG4gIHZhcmNoYXIsXG59IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnXG5pbXBvcnQgeyBJbnZhbGlkQ29uZmlndXJhdGlvbiB9IGZyb20gJ3BheWxvYWQvZXJyb3JzJ1xuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSwgb3B0aW9uSXNPYmplY3QgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuaW1wb3J0IHRvU25ha2VDYXNlIGZyb20gJ3RvLXNuYWtlLWNhc2UnXG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY0NvbHVtbnMsIElEVHlwZSwgUG9zdGdyZXNBZGFwdGVyIH0gZnJvbSAnLi4vdHlwZXMuanMnXG5cbmltcG9ydCB7IGhhc0xvY2FsZXNUYWJsZSB9IGZyb20gJy4uL3V0aWxpdGllcy9oYXNMb2NhbGVzVGFibGUuanMnXG5pbXBvcnQgeyBidWlsZFRhYmxlIH0gZnJvbSAnLi9idWlsZC5qcydcbmltcG9ydCB7IGNyZWF0ZUluZGV4IH0gZnJvbSAnLi9jcmVhdGVJbmRleC5qcydcbmltcG9ydCB7IGlkVG9VVUlEIH0gZnJvbSAnLi9pZFRvVVVJRC5qcydcbmltcG9ydCB7IHBhcmVudElEQ29sdW1uTWFwIH0gZnJvbSAnLi9wYXJlbnRJRENvbHVtbk1hcC5qcydcbmltcG9ydCB7IHZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsIH0gZnJvbSAnLi92YWxpZGF0ZUV4aXN0aW5nQmxvY2tJc0lkZW50aWNhbC5qcydcblxudHlwZSBBcmdzID0ge1xuICBhZGFwdGVyOiBQb3N0Z3Jlc0FkYXB0ZXJcbiAgYnVpbGROdW1iZXJzOiBib29sZWFuXG4gIGJ1aWxkUmVsYXRpb25zaGlwczogYm9vbGVhblxuICBidWlsZFRleHRzOiBib29sZWFuXG4gIGNvbHVtblByZWZpeD86IHN0cmluZ1xuICBjb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+XG4gIGRpc2FibGVOb3ROdWxsOiBib29sZWFuXG4gIGRpc2FibGVVbmlxdWU/OiBib29sZWFuXG4gIGZpZWxkUHJlZml4Pzogc3RyaW5nXG4gIGZpZWxkczogKEZpZWxkIHwgVGFiQXNGaWVsZClbXVxuICBmb3JjZUxvY2FsaXplZD86IGJvb2xlYW5cbiAgaW5kZXhlczogUmVjb3JkPHN0cmluZywgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXI+XG4gIGxvY2FsZXNDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+XG4gIGxvY2FsZXNJbmRleGVzOiBSZWNvcmQ8c3RyaW5nLCAoY29sczogR2VuZXJpY0NvbHVtbnMpID0+IEluZGV4QnVpbGRlcj5cbiAgbmV3VGFibGVOYW1lOiBzdHJpbmdcbiAgcGFyZW50VGFibGVOYW1lOiBzdHJpbmdcbiAgcmVsYXRpb25zVG9CdWlsZDogTWFwPHN0cmluZywgc3RyaW5nPlxuICByZWxhdGlvbnNoaXBzOiBTZXQ8c3RyaW5nPlxuICByb290UmVsYXRpb25zVG9CdWlsZD86IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgcm9vdFRhYmxlSURDb2xUeXBlOiBzdHJpbmdcbiAgcm9vdFRhYmxlTmFtZTogc3RyaW5nXG59XG5cbnR5cGUgUmVzdWx0ID0ge1xuICBoYXNMb2NhbGl6ZWRGaWVsZDogYm9vbGVhblxuICBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQ6IGJvb2xlYW5cbiAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogYm9vbGVhblxuICBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZDogYm9vbGVhblxuICBoYXNNYW55TnVtYmVyRmllbGQ6ICdpbmRleCcgfCBib29sZWFuXG4gIGhhc01hbnlUZXh0RmllbGQ6ICdpbmRleCcgfCBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCB0cmF2ZXJzZUZpZWxkcyA9ICh7XG4gIGFkYXB0ZXIsXG4gIGJ1aWxkTnVtYmVycyxcbiAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICBidWlsZFRleHRzLFxuICBjb2x1bW5QcmVmaXgsXG4gIGNvbHVtbnMsXG4gIGRpc2FibGVOb3ROdWxsLFxuICBkaXNhYmxlVW5pcXVlID0gZmFsc2UsXG4gIGZpZWxkUHJlZml4LFxuICBmaWVsZHMsXG4gIGZvcmNlTG9jYWxpemVkLFxuICBpbmRleGVzLFxuICBsb2NhbGVzQ29sdW1ucyxcbiAgbG9jYWxlc0luZGV4ZXMsXG4gIG5ld1RhYmxlTmFtZSxcbiAgcGFyZW50VGFibGVOYW1lLFxuICByZWxhdGlvbnNUb0J1aWxkLFxuICByZWxhdGlvbnNoaXBzLFxuICByb290UmVsYXRpb25zVG9CdWlsZCxcbiAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICByb290VGFibGVOYW1lLFxufTogQXJncyk6IFJlc3VsdCA9PiB7XG4gIGxldCBoYXNMb2NhbGl6ZWRGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IGZhbHNlXG4gIGxldCBoYXNNYW55VGV4dEZpZWxkOiAnaW5kZXgnIHwgYm9vbGVhbiA9IGZhbHNlXG4gIGxldCBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gZmFsc2VcbiAgbGV0IGhhc01hbnlOdW1iZXJGaWVsZDogJ2luZGV4JyB8IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gZmFsc2VcblxuICBsZXQgcGFyZW50SURDb2xUeXBlOiBJRFR5cGUgPSAnaW50ZWdlcidcbiAgaWYgKGNvbHVtbnMuaWQgaW5zdGFuY2VvZiBQZ1VVSURCdWlsZGVyKSBwYXJlbnRJRENvbFR5cGUgPSAndXVpZCdcbiAgaWYgKGNvbHVtbnMuaWQgaW5zdGFuY2VvZiBQZ051bWVyaWNCdWlsZGVyKSBwYXJlbnRJRENvbFR5cGUgPSAnbnVtZXJpYydcbiAgaWYgKGNvbHVtbnMuaWQgaW5zdGFuY2VvZiBQZ1ZhcmNoYXJCdWlsZGVyKSBwYXJlbnRJRENvbFR5cGUgPSAndmFyY2hhcidcblxuICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICBpZiAoJ25hbWUnIGluIGZpZWxkICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpIHJldHVyblxuICAgIGxldCBjb2x1bW5OYW1lOiBzdHJpbmdcbiAgICBsZXQgZmllbGROYW1lOiBzdHJpbmdcblxuICAgIGxldCB0YXJnZXRUYWJsZSA9IGNvbHVtbnNcbiAgICBsZXQgdGFyZ2V0SW5kZXhlcyA9IGluZGV4ZXNcblxuICAgIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgICAgY29sdW1uTmFtZSA9IGAke2NvbHVtblByZWZpeCB8fCAnJ30ke2ZpZWxkLm5hbWVbMF0gPT09ICdfJyA/ICdfJyA6ICcnfSR7dG9TbmFrZUNhc2UoXG4gICAgICAgIGZpZWxkLm5hbWUsXG4gICAgICApfWBcbiAgICAgIGZpZWxkTmFtZSA9IGAke2ZpZWxkUHJlZml4Py5yZXBsYWNlKCcuJywgJ18nKSB8fCAnJ30ke2ZpZWxkLm5hbWV9YFxuXG4gICAgICAvLyBJZiBmaWVsZCBpcyBsb2NhbGl6ZWQsXG4gICAgICAvLyBhZGQgdGhlIGNvbHVtbiB0byB0aGUgbG9jYWxlIHRhYmxlIGluc3RlYWQgb2YgbWFpbiB0YWJsZVxuICAgICAgaWYgKGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uICYmIChmaWVsZC5sb2NhbGl6ZWQgfHwgZm9yY2VMb2NhbGl6ZWQpKSB7XG4gICAgICAgIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICB0YXJnZXRUYWJsZSA9IGxvY2FsZXNDb2x1bW5zXG4gICAgICAgIHRhcmdldEluZGV4ZXMgPSBsb2NhbGVzSW5kZXhlc1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIChmaWVsZC51bmlxdWUgfHwgZmllbGQuaW5kZXgpICYmXG4gICAgICAgICFbJ2FycmF5JywgJ2Jsb2NrcycsICdncm91cCcsICdwb2ludCcsICdyZWxhdGlvbnNoaXAnLCAndXBsb2FkJ10uaW5jbHVkZXMoZmllbGQudHlwZSkgJiZcbiAgICAgICAgISgnaGFzTWFueScgaW4gZmllbGQgJiYgZmllbGQuaGFzTWFueSA9PT0gdHJ1ZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCB1bmlxdWUgPSBkaXNhYmxlVW5pcXVlICE9PSB0cnVlICYmIGZpZWxkLnVuaXF1ZVxuICAgICAgICBpZiAodW5pcXVlKSB7XG4gICAgICAgICAgY29uc3QgY29uc3RyYWludFZhbHVlID0gYCR7ZmllbGRQcmVmaXggfHwgJyd9JHtmaWVsZC5uYW1lfWBcbiAgICAgICAgICBpZiAoIWFkYXB0ZXIuZmllbGRDb25zdHJhaW50cz8uW3Jvb3RUYWJsZU5hbWVdKSB7XG4gICAgICAgICAgICBhZGFwdGVyLmZpZWxkQ29uc3RyYWludHNbcm9vdFRhYmxlTmFtZV0gPSB7fVxuICAgICAgICAgIH1cbiAgICAgICAgICBhZGFwdGVyLmZpZWxkQ29uc3RyYWludHNbcm9vdFRhYmxlTmFtZV1bYCR7Y29sdW1uTmFtZX1faWR4YF0gPSBjb25zdHJhaW50VmFsdWVcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRJbmRleGVzW2Ake25ld1RhYmxlTmFtZX1fJHtmaWVsZC5uYW1lfUlkeGBdID0gY3JlYXRlSW5kZXgoe1xuICAgICAgICAgIG5hbWU6IGZpZWxkTmFtZSxcbiAgICAgICAgICBjb2x1bW5OYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZTogbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHVuaXF1ZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RleHQnOiB7XG4gICAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQuaW5kZXgpIHtcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSAnaW5kZXgnXG4gICAgICAgICAgfSBlbHNlIGlmICghaGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgICAgICAgaGFzTWFueVRleHRGaWVsZCA9IHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmllbGQudW5pcXVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENvbmZpZ3VyYXRpb24oXG4gICAgICAgICAgICAgICdVbmlxdWUgaXMgbm90IHN1cHBvcnRlZCBpbiBQb3N0Z3JlcyBmb3IgaGFzTWFueSB0ZXh0IGZpZWxkcy4nLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0gdmFyY2hhcihjb2x1bW5OYW1lKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBjYXNlICdlbWFpbCc6XG4gICAgICBjYXNlICdjb2RlJzpcbiAgICAgIGNhc2UgJ3RleHRhcmVhJzoge1xuICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0gdmFyY2hhcihjb2x1bW5OYW1lKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdudW1iZXInOiB7XG4gICAgICAgIGlmIChmaWVsZC5oYXNNYW55KSB7XG4gICAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCkge1xuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5pbmRleCkge1xuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkID0gJ2luZGV4J1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC51bmlxdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ29uZmlndXJhdGlvbihcbiAgICAgICAgICAgICAgJ1VuaXF1ZSBpcyBub3Qgc3VwcG9ydGVkIGluIFBvc3RncmVzIGZvciBoYXNNYW55IG51bWJlciBmaWVsZHMuJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IG51bWVyaWMoY29sdW1uTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyaWNoVGV4dCc6XG4gICAgICBjYXNlICdqc29uJzoge1xuICAgICAgICB0YXJnZXRUYWJsZVtmaWVsZE5hbWVdID0ganNvbmIoY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnZGF0ZSc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IHRpbWVzdGFtcChjb2x1bW5OYW1lLCB7XG4gICAgICAgICAgbW9kZTogJ3N0cmluZycsXG4gICAgICAgICAgcHJlY2lzaW9uOiAzLFxuICAgICAgICAgIHdpdGhUaW1lem9uZTogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncG9pbnQnOiB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3JhZGlvJzpcbiAgICAgIGNhc2UgJ3NlbGVjdCc6IHtcbiAgICAgICAgY29uc3QgZW51bU5hbWUgPSBgZW51bV8ke25ld1RhYmxlTmFtZX1fJHt0b1NuYWtlQ2FzZShmaWVsZC5uYW1lKX1gXG5cbiAgICAgICAgYWRhcHRlci5lbnVtc1tlbnVtTmFtZV0gPSBwZ0VudW0oXG4gICAgICAgICAgZW51bU5hbWUsXG4gICAgICAgICAgZmllbGQub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbklzT2JqZWN0KG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfSkgYXMgW3N0cmluZywgLi4uc3RyaW5nW11dLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdzZWxlY3QnICYmIGZpZWxkLmhhc01hbnkpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZU5hbWUgPSBgJHtuZXdUYWJsZU5hbWV9XyR7dG9TbmFrZUNhc2UoZmllbGQubmFtZSl9YFxuICAgICAgICAgIGNvbnN0IGJhc2VDb2x1bW5zOiBSZWNvcmQ8c3RyaW5nLCBQZ0NvbHVtbkJ1aWxkZXI+ID0ge1xuICAgICAgICAgICAgb3JkZXI6IGludGVnZXIoJ29yZGVyJykubm90TnVsbCgpLFxuICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRJRENvbHVtbk1hcFtwYXJlbnRJRENvbFR5cGVdKCdwYXJlbnRfaWQnKVxuICAgICAgICAgICAgICAucmVmZXJlbmNlcygoKSA9PiBhZGFwdGVyLnRhYmxlc1twYXJlbnRUYWJsZU5hbWVdLmlkLCB7IG9uRGVsZXRlOiAnY2FzY2FkZScgfSlcbiAgICAgICAgICAgICAgLm5vdE51bGwoKSxcbiAgICAgICAgICAgIHZhbHVlOiBhZGFwdGVyLmVudW1zW2VudW1OYW1lXSgndmFsdWUnKSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBiYXNlRXh0cmFDb25maWc6IFJlY29yZDxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXJcbiAgICAgICAgICA+ID0ge1xuICAgICAgICAgICAgb3JkZXJJZHg6IChjb2xzKSA9PiBpbmRleChgJHtzZWxlY3RUYWJsZU5hbWV9X29yZGVyX2lkeGApLm9uKGNvbHMub3JkZXIpLFxuICAgICAgICAgICAgcGFyZW50SWR4OiAoY29scykgPT4gaW5kZXgoYCR7c2VsZWN0VGFibGVOYW1lfV9wYXJlbnRfaWR4YCkub24oY29scy5wYXJlbnQpLFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGJhc2VDb2x1bW5zLmxvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnbG9jYWxlJykubm90TnVsbCgpXG4gICAgICAgICAgICBiYXNlRXh0cmFDb25maWcubG9jYWxlSWR4ID0gKGNvbHMpID0+XG4gICAgICAgICAgICAgIGluZGV4KGAke3NlbGVjdFRhYmxlTmFtZX1fbG9jYWxlX2lkeGApLm9uKGNvbHMubG9jYWxlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmaWVsZC5pbmRleCkge1xuICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLnZhbHVlID0gKGNvbHMpID0+IGluZGV4KGAke3NlbGVjdFRhYmxlTmFtZX1fdmFsdWVfaWR4YCkub24oY29scy52YWx1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWlsZFRhYmxlKHtcbiAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICAgIGJhc2VFeHRyYUNvbmZpZyxcbiAgICAgICAgICAgIGRpc2FibGVOb3ROdWxsLFxuICAgICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICAgIGZpZWxkczogW10sXG4gICAgICAgICAgICB0YWJsZU5hbWU6IHNlbGVjdFRhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmVsYXRpb25zVG9CdWlsZC5zZXQoZmllbGROYW1lLCBzZWxlY3RUYWJsZU5hbWUpXG5cbiAgICAgICAgICBjb25zdCBzZWxlY3RUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhhZGFwdGVyLnRhYmxlc1tzZWxlY3RUYWJsZU5hbWVdLCAoeyBvbmUgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbjxzdHJpbmc+PiA9IHtcbiAgICAgICAgICAgICAgcGFyZW50OiBvbmUoYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICAgIGZpZWxkczogW2FkYXB0ZXIudGFibGVzW3NlbGVjdFRhYmxlTmFtZV0ucGFyZW50XSxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiBbYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZF0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbl8ke3NlbGVjdFRhYmxlTmFtZX1gXSA9IHNlbGVjdFRhYmxlUmVsYXRpb25zXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGFkYXB0ZXIuZW51bXNbZW51bU5hbWVdKGZpZWxkTmFtZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSA9IGJvb2xlYW4oY29sdW1uTmFtZSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3QgYXJyYXlUYWJsZU5hbWUgPSBgJHtuZXdUYWJsZU5hbWV9XyR7dG9TbmFrZUNhc2UoZmllbGQubmFtZSl9YFxuICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICBfb3JkZXI6IGludGVnZXIoJ19vcmRlcicpLm5vdE51bGwoKSxcbiAgICAgICAgICBfcGFyZW50SUQ6IHBhcmVudElEQ29sdW1uTWFwW3BhcmVudElEQ29sVHlwZV0oJ19wYXJlbnRfaWQnKVxuICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXS5pZCwgeyBvbkRlbGV0ZTogJ2Nhc2NhZGUnIH0pXG4gICAgICAgICAgICAubm90TnVsbCgpLFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgIChjb2xzOiBHZW5lcmljQ29sdW1ucykgPT4gSW5kZXhCdWlsZGVyIHwgVW5pcXVlQ29uc3RyYWludEJ1aWxkZXJcbiAgICAgICAgPiA9IHtcbiAgICAgICAgICBfb3JkZXJJZHg6IChjb2xzKSA9PiBpbmRleChgJHthcnJheVRhYmxlTmFtZX1fb3JkZXJfaWR4YCkub24oY29scy5fb3JkZXIpLFxuICAgICAgICAgIF9wYXJlbnRJRElkeDogKGNvbHMpID0+IGluZGV4KGAke2FycmF5VGFibGVOYW1lfV9wYXJlbnRfaWRfaWR4YCkub24oY29scy5fcGFyZW50SUQpLFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkLmxvY2FsaXplZCAmJiBhZGFwdGVyLnBheWxvYWQuY29uZmlnLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgIGJhc2VDb2x1bW5zLl9sb2NhbGUgPSBhZGFwdGVyLmVudW1zLmVudW1fX2xvY2FsZXMoJ19sb2NhbGUnKS5ub3ROdWxsKClcbiAgICAgICAgICBiYXNlRXh0cmFDb25maWcuX2xvY2FsZUlkeCA9IChjb2xzKSA9PlxuICAgICAgICAgICAgaW5kZXgoYCR7YXJyYXlUYWJsZU5hbWV9X2xvY2FsZV9pZHhgKS5vbihjb2xzLl9sb2NhbGUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBzdWJIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogc3ViSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkOiBzdWJSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICB9ID0gYnVpbGRUYWJsZSh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICBiYXNlRXh0cmFDb25maWcsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZHM6IGRpc2FibGVVbmlxdWUgPyBpZFRvVVVJRChmaWVsZC5maWVsZHMpIDogZmllbGQuZmllbGRzLFxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJvb3RSZWxhdGlvbnNoaXBzOiByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIHJvb3RUYWJsZUlEQ29sVHlwZSxcbiAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgIHRhYmxlTmFtZTogYXJyYXlUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHN1Ykhhc01hbnlUZXh0RmllbGQpIHtcbiAgICAgICAgICBpZiAoIWhhc01hbnlUZXh0RmllbGQgfHwgc3ViSGFzTWFueVRleHRGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQgPSBzdWJIYXNNYW55VGV4dEZpZWxkXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN1Ykhhc01hbnlOdW1iZXJGaWVsZCkge1xuICAgICAgICAgIGlmICghaGFzTWFueU51bWJlckZpZWxkIHx8IHN1Ykhhc01hbnlOdW1iZXJGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZCA9IHN1Ykhhc01hbnlOdW1iZXJGaWVsZFxuICAgICAgICB9XG5cbiAgICAgICAgcmVsYXRpb25zVG9CdWlsZC5zZXQoZmllbGROYW1lLCBhcnJheVRhYmxlTmFtZSlcblxuICAgICAgICBjb25zdCBhcnJheVRhYmxlUmVsYXRpb25zID0gcmVsYXRpb25zKGFkYXB0ZXIudGFibGVzW2FycmF5VGFibGVOYW1lXSwgKHsgbWFueSwgb25lIH0pID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIFJlbGF0aW9uPHN0cmluZz4+ID0ge1xuICAgICAgICAgICAgX3BhcmVudElEOiBvbmUoYWRhcHRlci50YWJsZXNbcGFyZW50VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICBmaWVsZHM6IFthZGFwdGVyLnRhYmxlc1thcnJheVRhYmxlTmFtZV0uX3BhcmVudElEXSxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlczogW2FkYXB0ZXIudGFibGVzW3BhcmVudFRhYmxlTmFtZV0uaWRdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGhhc0xvY2FsZXNUYWJsZShmaWVsZC5maWVsZHMpKSB7XG4gICAgICAgICAgICByZXN1bHQuX2xvY2FsZXMgPSBtYW55KGFkYXB0ZXIudGFibGVzW2Ake2FycmF5VGFibGVOYW1lfV9sb2NhbGVzYF0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3ViUmVsYXRpb25zVG9CdWlsZC5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBtYW55KGFkYXB0ZXIudGFibGVzW3ZhbF0pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSlcblxuICAgICAgICBhZGFwdGVyLnJlbGF0aW9uc1tgcmVsYXRpb25zXyR7YXJyYXlUYWJsZU5hbWV9YF0gPSBhcnJheVRhYmxlUmVsYXRpb25zXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYmxvY2tzJzoge1xuICAgICAgICBjb25zdCBkaXNhYmxlTm90TnVsbEZyb21IZXJlID0gQm9vbGVhbihmaWVsZC5hZG1pbj8uY29uZGl0aW9uKSB8fCBkaXNhYmxlTm90TnVsbFxuXG4gICAgICAgIGZpZWxkLmJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgICAgIGNvbnN0IGJsb2NrVGFibGVOYW1lID0gYCR7cm9vdFRhYmxlTmFtZX1fYmxvY2tzXyR7dG9TbmFrZUNhc2UoYmxvY2suc2x1Zyl9YFxuICAgICAgICAgIGlmICghYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdKSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlQ29sdW1uczogUmVjb3JkPHN0cmluZywgUGdDb2x1bW5CdWlsZGVyPiA9IHtcbiAgICAgICAgICAgICAgX29yZGVyOiBpbnRlZ2VyKCdfb3JkZXInKS5ub3ROdWxsKCksXG4gICAgICAgICAgICAgIF9wYXJlbnRJRDogcGFyZW50SURDb2x1bW5NYXBbcm9vdFRhYmxlSURDb2xUeXBlXSgnX3BhcmVudF9pZCcpXG4gICAgICAgICAgICAgICAgLnJlZmVyZW5jZXMoKCkgPT4gYWRhcHRlci50YWJsZXNbcm9vdFRhYmxlTmFtZV0uaWQsIHsgb25EZWxldGU6ICdjYXNjYWRlJyB9KVxuICAgICAgICAgICAgICAgIC5ub3ROdWxsKCksXG4gICAgICAgICAgICAgIF9wYXRoOiB0ZXh0KCdfcGF0aCcpLm5vdE51bGwoKSxcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmFzZUV4dHJhQ29uZmlnOiBSZWNvcmQ8XG4gICAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgICAgKGNvbHM6IEdlbmVyaWNDb2x1bW5zKSA9PiBJbmRleEJ1aWxkZXIgfCBVbmlxdWVDb25zdHJhaW50QnVpbGRlclxuICAgICAgICAgICAgPiA9IHtcbiAgICAgICAgICAgICAgX29yZGVySWR4OiAoY29scykgPT4gaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X29yZGVyX2lkeGApLm9uKGNvbHMuX29yZGVyKSxcbiAgICAgICAgICAgICAgX3BhcmVudElESWR4OiAoY29scykgPT4gaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X3BhcmVudF9pZF9pZHhgKS5vbihjb2xzLl9wYXJlbnRJRCksXG4gICAgICAgICAgICAgIF9wYXRoSWR4OiAoY29scykgPT4gaW5kZXgoYCR7YmxvY2tUYWJsZU5hbWV9X3BhdGhfaWR4YCkub24oY29scy5fcGF0aCksXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaWVsZC5sb2NhbGl6ZWQgJiYgYWRhcHRlci5wYXlsb2FkLmNvbmZpZy5sb2NhbGl6YXRpb24pIHtcbiAgICAgICAgICAgICAgYmFzZUNvbHVtbnMuX2xvY2FsZSA9IGFkYXB0ZXIuZW51bXMuZW51bV9fbG9jYWxlcygnX2xvY2FsZScpLm5vdE51bGwoKVxuICAgICAgICAgICAgICBiYXNlRXh0cmFDb25maWcuX2xvY2FsZUlkeCA9IChjb2xzKSA9PlxuICAgICAgICAgICAgICAgIGluZGV4KGAke2Jsb2NrVGFibGVOYW1lfV9sb2NhbGVfaWR4YCkub24oY29scy5fbG9jYWxlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogc3ViSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkOiBzdWJIYXNNYW55VGV4dEZpZWxkLFxuICAgICAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkOiBzdWJSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgfSA9IGJ1aWxkVGFibGUoe1xuICAgICAgICAgICAgICBhZGFwdGVyLFxuICAgICAgICAgICAgICBiYXNlQ29sdW1ucyxcbiAgICAgICAgICAgICAgYmFzZUV4dHJhQ29uZmlnLFxuICAgICAgICAgICAgICBkaXNhYmxlTm90TnVsbDogZGlzYWJsZU5vdE51bGxGcm9tSGVyZSxcbiAgICAgICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICAgICAgZmllbGRzOiBkaXNhYmxlVW5pcXVlID8gaWRUb1VVSUQoYmxvY2suZmllbGRzKSA6IGJsb2NrLmZpZWxkcyxcbiAgICAgICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNoaXBzOiByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgICAgICByb290VGFibGVJRENvbFR5cGUsXG4gICAgICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgICAgICAgIHRhYmxlTmFtZTogYmxvY2tUYWJsZU5hbWUsXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpZiAoc3ViSGFzTWFueVRleHRGaWVsZCkge1xuICAgICAgICAgICAgICBpZiAoIWhhc01hbnlUZXh0RmllbGQgfHwgc3ViSGFzTWFueVRleHRGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgICAgICBoYXNNYW55VGV4dEZpZWxkID0gc3ViSGFzTWFueVRleHRGaWVsZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3ViSGFzTWFueU51bWJlckZpZWxkKSB7XG4gICAgICAgICAgICAgIGlmICghaGFzTWFueU51bWJlckZpZWxkIHx8IHN1Ykhhc01hbnlOdW1iZXJGaWVsZCA9PT0gJ2luZGV4JylcbiAgICAgICAgICAgICAgICBoYXNNYW55TnVtYmVyRmllbGQgPSBzdWJIYXNNYW55TnVtYmVyRmllbGRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYmxvY2tUYWJsZVJlbGF0aW9ucyA9IHJlbGF0aW9ucyhcbiAgICAgICAgICAgICAgYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdLFxuICAgICAgICAgICAgICAoeyBtYW55LCBvbmUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgUmVsYXRpb248c3RyaW5nPj4gPSB7XG4gICAgICAgICAgICAgICAgICBfcGFyZW50SUQ6IG9uZShhZGFwdGVyLnRhYmxlc1tyb290VGFibGVOYW1lXSwge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHM6IFthZGFwdGVyLnRhYmxlc1tibG9ja1RhYmxlTmFtZV0uX3BhcmVudElEXSxcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlczogW2FkYXB0ZXIudGFibGVzW3Jvb3RUYWJsZU5hbWVdLmlkXSxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChoYXNMb2NhbGVzVGFibGUoYmxvY2suZmllbGRzKSkge1xuICAgICAgICAgICAgICAgICAgcmVzdWx0Ll9sb2NhbGVzID0gbWFueShhZGFwdGVyLnRhYmxlc1tgJHtibG9ja1RhYmxlTmFtZX1fbG9jYWxlc2BdKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN1YlJlbGF0aW9uc1RvQnVpbGQuZm9yRWFjaCgodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gbWFueShhZGFwdGVyLnRhYmxlc1t2YWxdKVxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGFkYXB0ZXIucmVsYXRpb25zW2ByZWxhdGlvbnNfJHtibG9ja1RhYmxlTmFtZX1gXSA9IGJsb2NrVGFibGVSZWxhdGlvbnNcbiAgICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsKHtcbiAgICAgICAgICAgICAgYmxvY2ssXG4gICAgICAgICAgICAgIGxvY2FsaXplZDogZmllbGQubG9jYWxpemVkLFxuICAgICAgICAgICAgICByb290VGFibGVOYW1lLFxuICAgICAgICAgICAgICB0YWJsZTogYWRhcHRlci50YWJsZXNbYmxvY2tUYWJsZU5hbWVdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByb290UmVsYXRpb25zVG9CdWlsZC5zZXQoYF9ibG9ja3NfJHtibG9jay5zbHVnfWAsIGJsb2NrVGFibGVOYW1lKVxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RhYic6XG4gICAgICBjYXNlICdncm91cCc6IHtcbiAgICAgICAgaWYgKCEoJ25hbWUnIGluIGZpZWxkKSkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiBncm91cEhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkOiBncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IGdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCxcbiAgICAgICAgICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgICAgaGFzTWFueU51bWJlckZpZWxkOiBncm91cEhhc01hbnlOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IGdyb3VwSGFzTWFueVRleHRGaWVsZCxcbiAgICAgICAgICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICAgIGJ1aWxkTnVtYmVycyxcbiAgICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgICBjb2x1bW5QcmVmaXgsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgZGlzYWJsZU5vdE51bGwsXG4gICAgICAgICAgICBkaXNhYmxlVW5pcXVlLFxuICAgICAgICAgICAgZmllbGRQcmVmaXgsXG4gICAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgICAgaW5kZXhlcyxcbiAgICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgICBuZXdUYWJsZU5hbWUsXG4gICAgICAgICAgICBwYXJlbnRUYWJsZU5hbWUsXG4gICAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIHJvb3RSZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgICAgcm9vdFRhYmxlTmFtZSxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgICBpZiAoZ3JvdXBIYXNNYW55VGV4dEZpZWxkKSBoYXNNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUgPSBCb29sZWFuKGZpZWxkLmFkbWluPy5jb25kaXRpb24pIHx8IGRpc2FibGVOb3ROdWxsXG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhhc0xvY2FsaXplZEZpZWxkOiBncm91cEhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZDogZ3JvdXBIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkOiBncm91cEhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogZ3JvdXBIYXNNYW55TnVtYmVyRmllbGQsXG4gICAgICAgICAgaGFzTWFueVRleHRGaWVsZDogZ3JvdXBIYXNNYW55VGV4dEZpZWxkLFxuICAgICAgICB9ID0gdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgYnVpbGROdW1iZXJzLFxuICAgICAgICAgIGJ1aWxkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICBidWlsZFRleHRzLFxuICAgICAgICAgIGNvbHVtblByZWZpeDogYCR7Y29sdW1uTmFtZX1fYCxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGRpc2FibGVOb3ROdWxsOiBkaXNhYmxlTm90TnVsbEZyb21IZXJlLFxuICAgICAgICAgIGRpc2FibGVVbmlxdWUsXG4gICAgICAgICAgZmllbGRQcmVmaXg6IGAke2ZpZWxkTmFtZX0uYCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZUxvY2FsaXplZDogZmllbGQubG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lOiBgJHtwYXJlbnRUYWJsZU5hbWV9XyR7Y29sdW1uTmFtZX1gLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGdyb3VwSGFzTG9jYWxpemVkRmllbGQpIGhhc0xvY2FsaXplZEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCkgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQpIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChncm91cEhhc01hbnlOdW1iZXJGaWVsZCkgaGFzTWFueU51bWJlckZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAoZ3JvdXBIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAndGFicyc6IHtcbiAgICAgICAgY29uc3QgZGlzYWJsZU5vdE51bGxGcm9tSGVyZSA9IEJvb2xlYW4oZmllbGQuYWRtaW4/LmNvbmRpdGlvbikgfHwgZGlzYWJsZU5vdE51bGxcblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IHRhYkhhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogdGFiSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IHRhYkhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IHRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogdGFiSGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IHRhYkhhc01hbnlUZXh0RmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZE51bWJlcnMsXG4gICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLnRhYnMubWFwKCh0YWIpID0+ICh7IC4uLnRhYiwgdHlwZTogJ3RhYicgfSkpLFxuICAgICAgICAgIGZvcmNlTG9jYWxpemVkLFxuICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgbG9jYWxlc0NvbHVtbnMsXG4gICAgICAgICAgbG9jYWxlc0luZGV4ZXMsXG4gICAgICAgICAgbmV3VGFibGVOYW1lLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHRhYkhhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAodGFiSGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmICh0YWJIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncm93JzpcbiAgICAgIGNhc2UgJ2NvbGxhcHNpYmxlJzoge1xuICAgICAgICBjb25zdCBkaXNhYmxlTm90TnVsbEZyb21IZXJlID0gQm9vbGVhbihmaWVsZC5hZG1pbj8uY29uZGl0aW9uKSB8fCBkaXNhYmxlTm90TnVsbFxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkRmllbGQ6IHJvd0hhc0xvY2FsaXplZEZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZDogcm93SGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQ6IHJvd0hhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQ6IHJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkLFxuICAgICAgICAgIGhhc01hbnlOdW1iZXJGaWVsZDogcm93SGFzTWFueU51bWJlckZpZWxkLFxuICAgICAgICAgIGhhc01hbnlUZXh0RmllbGQ6IHJvd0hhc01hbnlUZXh0RmllbGQsXG4gICAgICAgIH0gPSB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgYWRhcHRlcixcbiAgICAgICAgICBidWlsZE51bWJlcnMsXG4gICAgICAgICAgYnVpbGRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgIGJ1aWxkVGV4dHMsXG4gICAgICAgICAgY29sdW1uUHJlZml4LFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgZGlzYWJsZU5vdE51bGw6IGRpc2FibGVOb3ROdWxsRnJvbUhlcmUsXG4gICAgICAgICAgZGlzYWJsZVVuaXF1ZSxcbiAgICAgICAgICBmaWVsZFByZWZpeCxcbiAgICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgICBmb3JjZUxvY2FsaXplZCxcbiAgICAgICAgICBpbmRleGVzLFxuICAgICAgICAgIGxvY2FsZXNDb2x1bW5zLFxuICAgICAgICAgIGxvY2FsZXNJbmRleGVzLFxuICAgICAgICAgIG5ld1RhYmxlTmFtZTogcGFyZW50VGFibGVOYW1lLFxuICAgICAgICAgIHBhcmVudFRhYmxlTmFtZSxcbiAgICAgICAgICByZWxhdGlvbnNUb0J1aWxkLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgcm9vdFJlbGF0aW9uc1RvQnVpbGQsXG4gICAgICAgICAgcm9vdFRhYmxlSURDb2xUeXBlLFxuICAgICAgICAgIHJvb3RUYWJsZU5hbWUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZEZpZWxkKSBoYXNMb2NhbGl6ZWRGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkKSBoYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCA9IHRydWVcbiAgICAgICAgaWYgKHJvd0hhc01hbnlUZXh0RmllbGQpIGhhc01hbnlUZXh0RmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkKSBoYXNMb2NhbGl6ZWRNYW55VGV4dEZpZWxkID0gdHJ1ZVxuICAgICAgICBpZiAocm93SGFzTWFueU51bWJlckZpZWxkKSBoYXNNYW55TnVtYmVyRmllbGQgPSB0cnVlXG4gICAgICAgIGlmIChyb3dIYXNMb2NhbGl6ZWRNYW55TnVtYmVyRmllbGQpIGhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgICAgZmllbGQucmVsYXRpb25Uby5mb3JFYWNoKChyZWxhdGlvbikgPT4gcmVsYXRpb25zaGlwcy5hZGQocmVsYXRpb24pKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlbGF0aW9uc2hpcHMuYWRkKGZpZWxkLnJlbGF0aW9uVG8pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQubG9jYWxpemVkICYmIGFkYXB0ZXIucGF5bG9hZC5jb25maWcubG9jYWxpemF0aW9uKSB7XG4gICAgICAgICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb25zdCBjb25kaXRpb24gPSBmaWVsZC5hZG1pbiAmJiBmaWVsZC5hZG1pbi5jb25kaXRpb25cblxuICAgIGlmIChcbiAgICAgICFkaXNhYmxlTm90TnVsbCAmJlxuICAgICAgdGFyZ2V0VGFibGVbZmllbGROYW1lXSAmJlxuICAgICAgJ3JlcXVpcmVkJyBpbiBmaWVsZCAmJlxuICAgICAgZmllbGQucmVxdWlyZWQgJiZcbiAgICAgICFjb25kaXRpb25cbiAgICApIHtcbiAgICAgIHRhcmdldFRhYmxlW2ZpZWxkTmFtZV0ubm90TnVsbCgpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgaGFzTG9jYWxpemVkRmllbGQsXG4gICAgaGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkLFxuICAgIGhhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQsXG4gICAgaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQsXG4gICAgaGFzTWFueU51bWJlckZpZWxkLFxuICAgIGhhc01hbnlUZXh0RmllbGQsXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJyZWxhdGlvbnMiLCJQZ051bWVyaWNCdWlsZGVyIiwiUGdVVUlEQnVpbGRlciIsIlBnVmFyY2hhckJ1aWxkZXIiLCJib29sZWFuIiwiaW5kZXgiLCJpbnRlZ2VyIiwianNvbmIiLCJudW1lcmljIiwicGdFbnVtIiwidGV4dCIsInRpbWVzdGFtcCIsInZhcmNoYXIiLCJJbnZhbGlkQ29uZmlndXJhdGlvbiIsImZpZWxkQWZmZWN0c0RhdGEiLCJvcHRpb25Jc09iamVjdCIsInRvU25ha2VDYXNlIiwiaGFzTG9jYWxlc1RhYmxlIiwiYnVpbGRUYWJsZSIsImNyZWF0ZUluZGV4IiwiaWRUb1VVSUQiLCJwYXJlbnRJRENvbHVtbk1hcCIsInZhbGlkYXRlRXhpc3RpbmdCbG9ja0lzSWRlbnRpY2FsIiwidHJhdmVyc2VGaWVsZHMiLCJhZGFwdGVyIiwiYnVpbGROdW1iZXJzIiwiYnVpbGRSZWxhdGlvbnNoaXBzIiwiYnVpbGRUZXh0cyIsImNvbHVtblByZWZpeCIsImNvbHVtbnMiLCJkaXNhYmxlTm90TnVsbCIsImRpc2FibGVVbmlxdWUiLCJmaWVsZFByZWZpeCIsImZpZWxkcyIsImZvcmNlTG9jYWxpemVkIiwiaW5kZXhlcyIsImxvY2FsZXNDb2x1bW5zIiwibG9jYWxlc0luZGV4ZXMiLCJuZXdUYWJsZU5hbWUiLCJwYXJlbnRUYWJsZU5hbWUiLCJyZWxhdGlvbnNUb0J1aWxkIiwicmVsYXRpb25zaGlwcyIsInJvb3RSZWxhdGlvbnNUb0J1aWxkIiwicm9vdFRhYmxlSURDb2xUeXBlIiwicm9vdFRhYmxlTmFtZSIsImhhc0xvY2FsaXplZEZpZWxkIiwiaGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJoYXNNYW55VGV4dEZpZWxkIiwiaGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsImhhc01hbnlOdW1iZXJGaWVsZCIsImhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsInBhcmVudElEQ29sVHlwZSIsImlkIiwiZm9yRWFjaCIsImZpZWxkIiwibmFtZSIsImNvbHVtbk5hbWUiLCJmaWVsZE5hbWUiLCJ0YXJnZXRUYWJsZSIsInRhcmdldEluZGV4ZXMiLCJyZXBsYWNlIiwicGF5bG9hZCIsImNvbmZpZyIsImxvY2FsaXphdGlvbiIsImxvY2FsaXplZCIsInVuaXF1ZSIsImluY2x1ZGVzIiwidHlwZSIsImhhc01hbnkiLCJjb25zdHJhaW50VmFsdWUiLCJmaWVsZENvbnN0cmFpbnRzIiwidGFibGVOYW1lIiwibW9kZSIsInByZWNpc2lvbiIsIndpdGhUaW1lem9uZSIsImVudW1OYW1lIiwiZW51bXMiLCJvcHRpb25zIiwibWFwIiwib3B0aW9uIiwidmFsdWUiLCJzZWxlY3RUYWJsZU5hbWUiLCJiYXNlQ29sdW1ucyIsIm9yZGVyIiwibm90TnVsbCIsInBhcmVudCIsInJlZmVyZW5jZXMiLCJ0YWJsZXMiLCJvbkRlbGV0ZSIsImJhc2VFeHRyYUNvbmZpZyIsIm9yZGVySWR4IiwiY29scyIsIm9uIiwicGFyZW50SWR4IiwibG9jYWxlIiwiZW51bV9fbG9jYWxlcyIsImxvY2FsZUlkeCIsInNldCIsInNlbGVjdFRhYmxlUmVsYXRpb25zIiwib25lIiwicmVzdWx0IiwiZGlzYWJsZU5vdE51bGxGcm9tSGVyZSIsIkJvb2xlYW4iLCJhZG1pbiIsImNvbmRpdGlvbiIsImFycmF5VGFibGVOYW1lIiwiX29yZGVyIiwiX3BhcmVudElEIiwiX29yZGVySWR4IiwiX3BhcmVudElESWR4IiwiX2xvY2FsZSIsIl9sb2NhbGVJZHgiLCJzdWJIYXNNYW55TnVtYmVyRmllbGQiLCJzdWJIYXNNYW55VGV4dEZpZWxkIiwic3ViUmVsYXRpb25zVG9CdWlsZCIsInJvb3RSZWxhdGlvbnNoaXBzIiwiYXJyYXlUYWJsZVJlbGF0aW9ucyIsIm1hbnkiLCJfbG9jYWxlcyIsInZhbCIsImtleSIsImJsb2NrcyIsImJsb2NrIiwiYmxvY2tUYWJsZU5hbWUiLCJzbHVnIiwiX3BhdGgiLCJfcGF0aElkeCIsImJsb2NrVGFibGVSZWxhdGlvbnMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJ0YWJsZSIsImdyb3VwSGFzTG9jYWxpemVkRmllbGQiLCJncm91cEhhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsImdyb3VwSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsImdyb3VwSGFzTG9jYWxpemVkUmVsYXRpb25zaGlwRmllbGQiLCJncm91cEhhc01hbnlOdW1iZXJGaWVsZCIsImdyb3VwSGFzTWFueVRleHRGaWVsZCIsInRhYkhhc0xvY2FsaXplZEZpZWxkIiwidGFiSGFzTG9jYWxpemVkTWFueU51bWJlckZpZWxkIiwidGFiSGFzTG9jYWxpemVkTWFueVRleHRGaWVsZCIsInRhYkhhc0xvY2FsaXplZFJlbGF0aW9uc2hpcEZpZWxkIiwidGFiSGFzTWFueU51bWJlckZpZWxkIiwidGFiSGFzTWFueVRleHRGaWVsZCIsInRhYnMiLCJ0YWIiLCJyb3dIYXNMb2NhbGl6ZWRGaWVsZCIsInJvd0hhc0xvY2FsaXplZE1hbnlOdW1iZXJGaWVsZCIsInJvd0hhc0xvY2FsaXplZE1hbnlUZXh0RmllbGQiLCJyb3dIYXNMb2NhbGl6ZWRSZWxhdGlvbnNoaXBGaWVsZCIsInJvd0hhc01hbnlOdW1iZXJGaWVsZCIsInJvd0hhc01hbnlUZXh0RmllbGQiLCJBcnJheSIsImlzQXJyYXkiLCJyZWxhdGlvblRvIiwicmVsYXRpb24iLCJhZGQiLCJyZXF1aXJlZCJdLCJtYXBwaW5ncyI6IkFBQUEsb0NBQW9DLEdBS3BDLFNBQVNBLFNBQVMsUUFBUSxjQUFhO0FBQ3ZDLFNBQ0VDLGdCQUFnQixFQUNoQkMsYUFBYSxFQUNiQyxnQkFBZ0IsRUFDaEJDLE9BQU8sRUFDUEMsS0FBSyxFQUNMQyxPQUFPLEVBQ1BDLEtBQUssRUFDTEMsT0FBTyxFQUNQQyxNQUFNLEVBQ05DLElBQUksRUFDSkMsU0FBUyxFQUNUQyxPQUFPLFFBQ0Ysc0JBQXFCO0FBQzVCLFNBQVNDLG9CQUFvQixRQUFRLGlCQUFnQjtBQUNyRCxTQUFTQyxnQkFBZ0IsRUFBRUMsY0FBYyxRQUFRLGdCQUFlO0FBQ2hFLE9BQU9DLGlCQUFpQixnQkFBZTtBQUl2QyxTQUFTQyxlQUFlLFFBQVEsa0NBQWlDO0FBQ2pFLFNBQVNDLFVBQVUsUUFB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
|
493
|
+
//# sourceMappingURL=traverseFields.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/schema/traverseFields.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport type { Relation } from 'drizzle-orm'\nimport type { IndexBuilder, PgColumnBuilder, UniqueConstraintBuilder } from 'drizzle-orm/pg-core'\nimport type { Field, TabAsField } from 'payload/types'\n\nimport { relations } from 'drizzle-orm'\nimport {\n PgNumericBuilder,\n PgUUIDBuilder,\n PgVarcharBuilder,\n boolean,\n index,\n integer,\n jsonb,\n numeric,\n pgEnum,\n text,\n timestamp,\n varchar,\n} from 'drizzle-orm/pg-core'\nimport { InvalidConfiguration } from 'payload/errors'\nimport { fieldAffectsData, optionIsObject } from 'payload/types'\nimport toSnakeCase from 'to-snake-case'\n\nimport type { GenericColumns, IDType, PostgresAdapter } from '../types.js'\n\nimport { hasLocalesTable } from '../utilities/hasLocalesTable.js'\nimport { buildTable } from './build.js'\nimport { createIndex } from './createIndex.js'\nimport { idToUUID } from './idToUUID.js'\nimport { parentIDColumnMap } from './parentIDColumnMap.js'\nimport { validateExistingBlockIsIdentical } from './validateExistingBlockIsIdentical.js'\n\ntype Args = {\n adapter: PostgresAdapter\n buildNumbers: boolean\n buildRelationships: boolean\n buildTexts: boolean\n columnPrefix?: string\n columns: Record<string, PgColumnBuilder>\n disableNotNull: boolean\n disableUnique?: boolean\n fieldPrefix?: string\n fields: (Field | TabAsField)[]\n forceLocalized?: boolean\n indexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n localesColumns: Record<string, PgColumnBuilder>\n localesIndexes: Record<string, (cols: GenericColumns) => IndexBuilder>\n newTableName: string\n parentTableName: string\n relationsToBuild: Map<string, string>\n relationships: Set<string>\n rootRelationsToBuild?: Map<string, string>\n rootTableIDColType: string\n rootTableName: string\n}\n\ntype Result = {\n hasLocalizedField: boolean\n hasLocalizedManyNumberField: boolean\n hasLocalizedManyTextField: boolean\n hasLocalizedRelationshipField: boolean\n hasManyNumberField: 'index' | boolean\n hasManyTextField: 'index' | boolean\n}\n\nexport const traverseFields = ({\n adapter,\n buildNumbers,\n buildRelationships,\n buildTexts,\n columnPrefix,\n columns,\n disableNotNull,\n disableUnique = false,\n fieldPrefix,\n fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationsToBuild,\n relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n}: Args): Result => {\n let hasLocalizedField = false\n let hasLocalizedRelationshipField = false\n let hasManyTextField: 'index' | boolean = false\n let hasLocalizedManyTextField = false\n let hasManyNumberField: 'index' | boolean = false\n let hasLocalizedManyNumberField = false\n\n let parentIDColType: IDType = 'integer'\n if (columns.id instanceof PgUUIDBuilder) parentIDColType = 'uuid'\n if (columns.id instanceof PgNumericBuilder) parentIDColType = 'numeric'\n if (columns.id instanceof PgVarcharBuilder) parentIDColType = 'varchar'\n\n fields.forEach((field) => {\n if ('name' in field && field.name === 'id') return\n let columnName: string\n let fieldName: string\n\n let targetTable = columns\n let targetIndexes = indexes\n\n if (fieldAffectsData(field)) {\n columnName = `${columnPrefix || ''}${field.name[0] === '_' ? '_' : ''}${toSnakeCase(\n field.name,\n )}`\n fieldName = `${fieldPrefix?.replace('.', '_') || ''}${field.name}`\n\n // If field is localized,\n // add the column to the locale table instead of main table\n if (adapter.payload.config.localization && (field.localized || forceLocalized)) {\n hasLocalizedField = true\n targetTable = localesColumns\n targetIndexes = localesIndexes\n }\n\n if (\n (field.unique || field.index) &&\n !['array', 'blocks', 'group', 'point', 'relationship', 'upload'].includes(field.type) &&\n !('hasMany' in field && field.hasMany === true)\n ) {\n const unique = disableUnique !== true && field.unique\n if (unique) {\n const constraintValue = `${fieldPrefix || ''}${field.name}`\n if (!adapter.fieldConstraints?.[rootTableName]) {\n adapter.fieldConstraints[rootTableName] = {}\n }\n adapter.fieldConstraints[rootTableName][`${columnName}_idx`] = constraintValue\n }\n targetIndexes[`${newTableName}_${field.name}Idx`] = createIndex({\n name: fieldName,\n columnName,\n tableName: newTableName,\n unique,\n })\n }\n }\n\n switch (field.type) {\n case 'text': {\n if (field.hasMany) {\n if (field.localized) {\n hasLocalizedManyTextField = true\n }\n\n if (field.index) {\n hasManyTextField = 'index'\n } else if (!hasManyTextField) {\n hasManyTextField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany text fields.',\n )\n }\n } else {\n targetTable[fieldName] = varchar(columnName)\n }\n break\n }\n case 'email':\n case 'code':\n case 'textarea': {\n targetTable[fieldName] = varchar(columnName)\n break\n }\n\n case 'number': {\n if (field.hasMany) {\n if (field.localized) {\n hasLocalizedManyNumberField = true\n }\n\n if (field.index) {\n hasManyNumberField = 'index'\n } else if (!hasManyNumberField) {\n hasManyNumberField = true\n }\n\n if (field.unique) {\n throw new InvalidConfiguration(\n 'Unique is not supported in Postgres for hasMany number fields.',\n )\n }\n } else {\n targetTable[fieldName] = numeric(columnName)\n }\n break\n }\n\n case 'richText':\n case 'json': {\n targetTable[fieldName] = jsonb(columnName)\n break\n }\n\n case 'date': {\n targetTable[fieldName] = timestamp(columnName, {\n mode: 'string',\n precision: 3,\n withTimezone: true,\n })\n break\n }\n\n case 'point': {\n break\n }\n\n case 'radio':\n case 'select': {\n const enumName = `enum_${newTableName}_${toSnakeCase(field.name)}`\n\n adapter.enums[enumName] = pgEnum(\n enumName,\n field.options.map((option) => {\n if (optionIsObject(option)) {\n return option.value\n }\n\n return option\n }) as [string, ...string[]],\n )\n\n if (field.type === 'select' && field.hasMany) {\n const selectTableName = `${newTableName}_${toSnakeCase(field.name)}`\n const baseColumns: Record<string, PgColumnBuilder> = {\n order: integer('order').notNull(),\n parent: parentIDColumnMap[parentIDColType]('parent_id')\n .references(() => adapter.tables[parentTableName].id, { onDelete: 'cascade' })\n .notNull(),\n value: adapter.enums[enumName]('value'),\n }\n\n const baseExtraConfig: Record<\n string,\n (cols: GenericColumns) => IndexBuilder | UniqueConstraintBuilder\n > = {\n orderIdx: (cols) => index(`${selectTableName}_order_idx`).on(cols.order),\n parentIdx: (cols) => index(`${selectTableName}_parent_idx`).on(cols.parent),\n }\n\n if (field.localized) {\n baseColumns.locale = adapter.enums.enum__locales('locale').notNull()\n baseExtraConfig.localeIdx = (cols) =>\n index(`${selectTableName}_locale_idx`).on(cols.locale)\n }\n\n if (field.index) {\n baseExtraConfig.value = (cols) => index(`${selectTableName}_value_idx`).on(cols.value)\n }\n\n buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull,\n disableUnique,\n fields: [],\n tableName: selectTableName,\n })\n\n relationsToBuild.set(fieldName, selectTableName)\n\n const selectTableRelations = relations(adapter.tables[selectTableName], ({ one }) => {\n const result: Record<string, Relation<string>> = {\n parent: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[selectTableName].parent],\n references: [adapter.tables[parentTableName].id],\n }),\n }\n\n return result\n })\n\n adapter.relations[`relation_${selectTableName}`] = selectTableRelations\n } else {\n targetTable[fieldName] = adapter.enums[enumName](fieldName)\n }\n break\n }\n\n case 'checkbox': {\n targetTable[fieldName] = boolean(columnName)\n break\n }\n\n case 'array': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const arrayTableName = `${newTableName}_${toSnakeCase(field.name)}`\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[parentIDColType]('_parent_id')\n .references(() => adapter.tables[parentTableName].id, { onDelete: 'cascade' })\n .notNull(),\n }\n\n const baseExtraConfig: Record<\n string,\n (cols: GenericColumns) => IndexBuilder | UniqueConstraintBuilder\n > = {\n _orderIdx: (cols) => index(`${arrayTableName}_order_idx`).on(cols._order),\n _parentIDIdx: (cols) => index(`${arrayTableName}_parent_id_idx`).on(cols._parentID),\n }\n\n if (field.localized && adapter.payload.config.localization) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${arrayTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fields: disableUnique ? idToUUID(field.fields) : field.fields,\n rootRelationsToBuild,\n rootRelationships: relationships,\n rootTableIDColType,\n rootTableName,\n tableName: arrayTableName,\n })\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index')\n hasManyTextField = subHasManyTextField\n }\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index')\n hasManyNumberField = subHasManyNumberField\n }\n\n relationsToBuild.set(fieldName, arrayTableName)\n\n const arrayTableRelations = relations(adapter.tables[arrayTableName], ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[parentTableName], {\n fields: [adapter.tables[arrayTableName]._parentID],\n references: [adapter.tables[parentTableName].id],\n }),\n }\n\n if (hasLocalesTable(field.fields)) {\n result._locales = many(adapter.tables[`${arrayTableName}_locales`])\n }\n\n subRelationsToBuild.forEach((val, key) => {\n result[key] = many(adapter.tables[val])\n })\n\n return result\n })\n\n adapter.relations[`relations_${arrayTableName}`] = arrayTableRelations\n\n break\n }\n\n case 'blocks': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n field.blocks.forEach((block) => {\n const blockTableName = `${rootTableName}_blocks_${toSnakeCase(block.slug)}`\n if (!adapter.tables[blockTableName]) {\n const baseColumns: Record<string, PgColumnBuilder> = {\n _order: integer('_order').notNull(),\n _parentID: parentIDColumnMap[rootTableIDColType]('_parent_id')\n .references(() => adapter.tables[rootTableName].id, { onDelete: 'cascade' })\n .notNull(),\n _path: text('_path').notNull(),\n }\n\n const baseExtraConfig: Record<\n string,\n (cols: GenericColumns) => IndexBuilder | UniqueConstraintBuilder\n > = {\n _orderIdx: (cols) => index(`${blockTableName}_order_idx`).on(cols._order),\n _parentIDIdx: (cols) => index(`${blockTableName}_parent_id_idx`).on(cols._parentID),\n _pathIdx: (cols) => index(`${blockTableName}_path_idx`).on(cols._path),\n }\n\n if (field.localized && adapter.payload.config.localization) {\n baseColumns._locale = adapter.enums.enum__locales('_locale').notNull()\n baseExtraConfig._localeIdx = (cols) =>\n index(`${blockTableName}_locale_idx`).on(cols._locale)\n }\n\n const {\n hasManyNumberField: subHasManyNumberField,\n hasManyTextField: subHasManyTextField,\n relationsToBuild: subRelationsToBuild,\n } = buildTable({\n adapter,\n baseColumns,\n baseExtraConfig,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fields: disableUnique ? idToUUID(block.fields) : block.fields,\n rootRelationsToBuild,\n rootRelationships: relationships,\n rootTableIDColType,\n rootTableName,\n tableName: blockTableName,\n })\n\n if (subHasManyTextField) {\n if (!hasManyTextField || subHasManyTextField === 'index')\n hasManyTextField = subHasManyTextField\n }\n\n if (subHasManyNumberField) {\n if (!hasManyNumberField || subHasManyNumberField === 'index')\n hasManyNumberField = subHasManyNumberField\n }\n\n const blockTableRelations = relations(\n adapter.tables[blockTableName],\n ({ many, one }) => {\n const result: Record<string, Relation<string>> = {\n _parentID: one(adapter.tables[rootTableName], {\n fields: [adapter.tables[blockTableName]._parentID],\n references: [adapter.tables[rootTableName].id],\n }),\n }\n\n if (hasLocalesTable(block.fields)) {\n result._locales = many(adapter.tables[`${blockTableName}_locales`])\n }\n\n subRelationsToBuild.forEach((val, key) => {\n result[key] = many(adapter.tables[val])\n })\n\n return result\n },\n )\n\n adapter.relations[`relations_${blockTableName}`] = blockTableRelations\n } else if (process.env.NODE_ENV !== 'production') {\n validateExistingBlockIsIdentical({\n block,\n localized: field.localized,\n rootTableName,\n table: adapter.tables[blockTableName],\n })\n }\n\n rootRelationsToBuild.set(`_blocks_${block.slug}`, blockTableName)\n })\n\n break\n }\n\n case 'tab':\n case 'group': {\n if (!('name' in field)) {\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n buildNumbers,\n buildRelationships,\n buildTexts,\n columnPrefix,\n columns,\n disableNotNull,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationsToBuild,\n relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n })\n\n if (groupHasLocalizedField) hasLocalizedField = true\n if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true\n if (groupHasManyTextField) hasManyTextField = true\n if (groupHasLocalizedManyTextField) hasLocalizedManyTextField = true\n if (groupHasManyNumberField) hasManyNumberField = true\n if (groupHasLocalizedManyNumberField) hasLocalizedManyNumberField = true\n break\n }\n\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: groupHasLocalizedField,\n hasLocalizedManyNumberField: groupHasLocalizedManyNumberField,\n hasLocalizedManyTextField: groupHasLocalizedManyTextField,\n hasLocalizedRelationshipField: groupHasLocalizedRelationshipField,\n hasManyNumberField: groupHasManyNumberField,\n hasManyTextField: groupHasManyTextField,\n } = traverseFields({\n adapter,\n buildNumbers,\n buildRelationships,\n buildTexts,\n columnPrefix: `${columnName}_`,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix: `${fieldName}.`,\n fields: field.fields,\n forceLocalized: field.localized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: `${parentTableName}_${columnName}`,\n parentTableName,\n relationsToBuild,\n relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n })\n\n if (groupHasLocalizedField) hasLocalizedField = true\n if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true\n if (groupHasManyTextField) hasManyTextField = true\n if (groupHasLocalizedManyTextField) hasLocalizedManyTextField = true\n if (groupHasManyNumberField) hasManyNumberField = true\n if (groupHasLocalizedManyNumberField) hasLocalizedManyNumberField = true\n break\n }\n\n case 'tabs': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n\n const {\n hasLocalizedField: tabHasLocalizedField,\n hasLocalizedManyNumberField: tabHasLocalizedManyNumberField,\n hasLocalizedManyTextField: tabHasLocalizedManyTextField,\n hasLocalizedRelationshipField: tabHasLocalizedRelationshipField,\n hasManyNumberField: tabHasManyNumberField,\n hasManyTextField: tabHasManyTextField,\n } = traverseFields({\n adapter,\n buildNumbers,\n buildRelationships,\n buildTexts,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.tabs.map((tab) => ({ ...tab, type: 'tab' })),\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName,\n parentTableName,\n relationsToBuild,\n relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n })\n\n if (tabHasLocalizedField) hasLocalizedField = true\n if (tabHasLocalizedRelationshipField) hasLocalizedRelationshipField = true\n if (tabHasManyTextField) hasManyTextField = true\n if (tabHasLocalizedManyTextField) hasLocalizedManyTextField = true\n if (tabHasManyNumberField) hasManyNumberField = true\n if (tabHasLocalizedManyNumberField) hasLocalizedManyNumberField = true\n break\n }\n\n case 'row':\n case 'collapsible': {\n const disableNotNullFromHere = Boolean(field.admin?.condition) || disableNotNull\n const {\n hasLocalizedField: rowHasLocalizedField,\n hasLocalizedManyNumberField: rowHasLocalizedManyNumberField,\n hasLocalizedManyTextField: rowHasLocalizedManyTextField,\n hasLocalizedRelationshipField: rowHasLocalizedRelationshipField,\n hasManyNumberField: rowHasManyNumberField,\n hasManyTextField: rowHasManyTextField,\n } = traverseFields({\n adapter,\n buildNumbers,\n buildRelationships,\n buildTexts,\n columnPrefix,\n columns,\n disableNotNull: disableNotNullFromHere,\n disableUnique,\n fieldPrefix,\n fields: field.fields,\n forceLocalized,\n indexes,\n localesColumns,\n localesIndexes,\n newTableName: parentTableName,\n parentTableName,\n relationsToBuild,\n relationships,\n rootRelationsToBuild,\n rootTableIDColType,\n rootTableName,\n })\n\n if (rowHasLocalizedField) hasLocalizedField = true\n if (rowHasLocalizedRelationshipField) hasLocalizedRelationshipField = true\n if (rowHasManyTextField) hasManyTextField = true\n if (rowHasLocalizedManyTextField) hasLocalizedManyTextField = true\n if (rowHasManyNumberField) hasManyNumberField = true\n if (rowHasLocalizedManyNumberField) hasLocalizedManyNumberField = true\n break\n }\n\n case 'relationship':\n case 'upload':\n if (Array.isArray(field.relationTo)) {\n field.relationTo.forEach((relation) => relationships.add(relation))\n } else {\n relationships.add(field.relationTo)\n }\n\n if (field.localized && adapter.payload.config.localization) {\n hasLocalizedRelationshipField = true\n }\n break\n\n default:\n break\n }\n\n const condition = field.admin && field.admin.condition\n\n if (\n !disableNotNull &&\n targetTable[fieldName] &&\n 'required' in field &&\n field.required &&\n !condition\n ) {\n targetTable[fieldName].notNull()\n }\n })\n\n return {\n hasLocalizedField,\n hasLocalizedManyNumberField,\n hasLocalizedManyTextField,\n hasLocalizedRelationshipField,\n hasManyNumberField,\n hasManyTextField,\n }\n}\n"],"names":["relations","PgNumericBuilder","PgUUIDBuilder","PgVarcharBuilder","boolean","index","integer","jsonb","numeric","pgEnum","text","timestamp","varchar","InvalidConfiguration","fieldAffectsData","optionIsObject","toSnakeCase","hasLocalesTable","buildTable","createIndex","idToUUID","parentIDColumnMap","validateExistingBlockIsIdentical","traverseFields","adapter","buildNumbers","buildRelationships","buildTexts","columnPrefix","columns","disableNotNull","disableUnique","fieldPrefix","fields","forceLocalized","indexes","localesColumns","localesIndexes","newTableName","parentTableName","relationsToBuild","relationships","rootRelationsToBuild","rootTableIDColType","rootTableName","hasLocalizedField","hasLocalizedRelationshipField","hasManyTextField","hasLocalizedManyTextField","hasManyNumberField","hasLocalizedManyNumberField","parentIDColType","id","forEach","field","name","columnName","fieldName","targetTable","targetIndexes","replace","payload","config","localization","localized","unique","includes","type","hasMany","constraintValue","fieldConstraints","tableName","mode","precision","withTimezone","enumName","enums","options","map","option","value","selectTableName","baseColumns","order","notNull","parent","references","tables","onDelete","baseExtraConfig","orderIdx","cols","on","parentIdx","locale","enum__locales","localeIdx","set","selectTableRelations","one","result","disableNotNullFromHere","Boolean","admin","condition","arrayTableName","_order","_parentID","_orderIdx","_parentIDIdx","_locale","_localeIdx","subHasManyNumberField","subHasManyTextField","subRelationsToBuild","rootRelationships","arrayTableRelations","many","_locales","val","key","blocks","block","blockTableName","slug","_path","_pathIdx","blockTableRelations","process","env","NODE_ENV","table","groupHasLocalizedField","groupHasLocalizedManyNumberField","groupHasLocalizedManyTextField","groupHasLocalizedRelationshipField","groupHasManyNumberField","groupHasManyTextField","tabHasLocalizedField","tabHasLocalizedManyNumberField","tabHasLocalizedManyTextField","tabHasLocalizedRelationshipField","tabHasManyNumberField","tabHasManyTextField","tabs","tab","rowHasLocalizedField","rowHasLocalizedManyNumberField","rowHasLocalizedManyTextField","rowHasLocalizedRelationshipField","rowHasManyNumberField","rowHasManyTextField","Array","isArray","relationTo","relation","add","required"],"mappings":"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"}
|