cmp-aws-database
Version:
The package "cmp-aws-database" is for its database, which defines global tables. These tables are designed to be imported and used across multiple applications of "craft-my-plate."
136 lines • 19.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.requestInvoiceDao = void 0;
const base_dao_1 = require("../../base-dao");
const request_invoice_model_1 = require("./request-invoice-model");
const user_model_1 = require("../user/user-model");
class RequestInvoiceDao extends base_dao_1.GenericDAO {
async fetchUserBaseRequest(userId, isUserDetailsNeeded = false) {
const activeRequestInvoice = [];
let requestInvoiceDetails;
let userDetails;
if (userId) {
const condition = {
userId: userId,
};
// Query using the GSI when userId is provided
requestInvoiceDetails = await base_dao_1.mapper.query(request_invoice_model_1.RequestInvoiceModel, condition, { indexName: "userIdIndex" });
// Fetch user details if needed
if (isUserDetailsNeeded) {
try {
userDetails = new user_model_1.UserModel();
userDetails.userId = userId;
// Check if user exists first
userDetails = await base_dao_1.mapper.get(userDetails);
}
catch (error) {
console.warn(`User details not found for userId: ${userId}`, error);
}
}
}
for await (const request of requestInvoiceDetails || []) {
const requestWithUserDetails = {
...request,
...(isUserDetailsNeeded && userDetails ? { userDetails } : {})
};
activeRequestInvoice.push(requestWithUserDetails);
}
return activeRequestInvoice;
}
async fetchOrderBaseRequest(orderId, isUserDetailsNeeded = false) {
const activeRequestInvoice = [];
let requestInvoiceDetails;
let userDetails;
if (orderId) {
const condition = {
orderId: orderId,
};
// Query using the GSI when orderId is provided
requestInvoiceDetails = await base_dao_1.mapper.query(request_invoice_model_1.RequestInvoiceModel, condition, { indexName: "orderIdIndex" });
}
for await (const request of requestInvoiceDetails || []) {
if (isUserDetailsNeeded) {
try {
userDetails = new user_model_1.UserModel();
userDetails.userId = request.userId;
// Check if user exists first
userDetails = await base_dao_1.mapper.get(userDetails);
}
catch (error) {
console.warn(`User details not found for userId: ${request.userId}`, error);
}
}
const requestWithUserDetails = {
...request,
...(isUserDetailsNeeded && userDetails ? { userDetails } : {})
};
activeRequestInvoice.push(requestWithUserDetails);
}
return activeRequestInvoice;
}
async fetchPlateBaseRequest(plateId, isUserDetailsNeeded = false) {
const activeRequestInvoice = [];
let requestInvoiceDetails;
let userDetails;
if (plateId) {
const condition = {
plateId: plateId,
};
// Query using the GSI when plateId is provided
requestInvoiceDetails = await base_dao_1.mapper.query(request_invoice_model_1.RequestInvoiceModel, condition, { indexName: "plateIdIndex" });
}
for await (const request of requestInvoiceDetails || []) {
if (isUserDetailsNeeded) {
try {
userDetails = new user_model_1.UserModel();
userDetails.userId = request.userId;
// Check if user exists first
userDetails = await base_dao_1.mapper.get(userDetails);
}
catch (error) {
console.warn(`User details not found for userId: ${request.userId}`, error);
}
}
const requestWithUserDetails = {
...request,
...(isUserDetailsNeeded && userDetails ? { userDetails } : {})
};
activeRequestInvoice.push(requestWithUserDetails);
}
return activeRequestInvoice;
}
async fetchOrderAndPlateBaseRequest(orderId, plateId, isUserDetailsNeeded = false) {
const activeRequestInvoice = [];
let requestInvoiceDetails;
let userDetails;
if (orderId && plateId) {
const condition = {
orderId: orderId,
plateId: plateId,
};
// Query using the GSI when both orderId and plateId are provided
requestInvoiceDetails = await base_dao_1.mapper.query(request_invoice_model_1.RequestInvoiceModel, condition, { indexName: "orderAndPlateIdIndex" });
}
for await (const request of requestInvoiceDetails || []) {
if (isUserDetailsNeeded) {
try {
userDetails = new user_model_1.UserModel();
userDetails.userId = request.userId;
// Check if user exists first
userDetails = await base_dao_1.mapper.get(userDetails);
}
catch (error) {
console.warn(`User details not found for userId: ${request.userId}`, error);
}
}
const requestWithUserDetails = {
...request,
...(isUserDetailsNeeded && userDetails ? { userDetails } : {})
};
activeRequestInvoice.push(requestWithUserDetails);
}
return activeRequestInvoice;
}
}
exports.requestInvoiceDao = new RequestInvoiceDao();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1pbnZvaWNlLWRhby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jdXN0b21lci11c2VyL3JlcXVlc3QtSW52b2ljZS9yZXF1ZXN0LWludm9pY2UtZGFvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFvRDtBQUNwRCxtRUFBOEQ7QUFDOUQsbURBQStDO0FBUS9DLE1BQU0saUJBQWtCLFNBQVEscUJBQStCO0lBRTNELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFjLEVBQUUsc0JBQStCLEtBQUs7UUFDM0UsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxxQkFBcUIsQ0FBQztRQUMxQixJQUFJLFdBQVcsQ0FBQztRQUVoQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsTUFBTSxTQUFTLEdBQWlDO2dCQUM1QyxNQUFNLEVBQUUsTUFBTTthQUNqQixDQUFDO1lBQ0YsOENBQThDO1lBQzlDLHFCQUFxQixHQUFHLE1BQU0saUJBQU0sQ0FBQyxLQUFLLENBQUMsMkNBQW1CLEVBQUUsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFFekcsK0JBQStCO1lBQy9CLElBQUksbUJBQW1CLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDO29CQUNELFdBQVcsR0FBRyxJQUFJLHNCQUFTLEVBQUUsQ0FBQztvQkFDOUIsV0FBVyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7b0JBRTVCLDZCQUE2QjtvQkFDN0IsV0FBVyxHQUFHLE1BQU0saUJBQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2hELENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDeEUsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFB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QUFDO29CQUM5QixXQUFXLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBRXBDLDZCQUE2QjtvQkFDN0IsV0FBVyxHQUFHLE1BQU0saUJBQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2hELENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2hGLENBQUM7WUFDTCxDQUFDO1lBRUQsTUFBTSxzQkFBc0IsR0FBRztnQkFDM0IsR0FBRyxPQUFPO2dCQUNWLEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNqRSxDQUFDO1lBQ0Ysb0JBQW9CLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELE9BQU8sb0JBQW9CLENBQUM7SUFDaEMsQ0FBQztDQUNKO0FBRVksUUFBQSxpQkFBaUIsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW5lcmljREFPLCBtYXBwZXIgfSBmcm9tIFwiLi4vLi4vYmFzZS1kYW9cIjtcbmltcG9ydCB7IFJlcXVlc3RJbnZvaWNlTW9kZWwgfSBmcm9tIFwiLi9yZXF1ZXN0LWludm9pY2UtbW9kZWxcIjtcbmltcG9ydCB7IFVzZXJNb2RlbCB9IGZyb20gXCIuLi91c2VyL3VzZXItbW9kZWxcIjtcblxuaW50ZXJmYWNlIFF1ZXJ5Q29uZGl0aW9uUmVxdWVzdEludm9pY2Uge1xuICAgIHVzZXJJZD86IHN0cmluZztcbiAgICBvcmRlcklkPzogc3RyaW5nO1xuICAgIHBsYXRlSWQ/OiBzdHJpbmc7XG59XG5cbmNsYXNzIFJlcXVlc3RJbnZvaWNlRGFvIGV4dGVuZHMgR2VuZXJpY0RBTzxSZXF1ZXN0SW52b2ljZU1vZGVsPiB7XG5cbiAgICBhc3luYyBmZXRjaFVzZXJCYXNlUmVxdWVzdCh1c2VySWQ6IHN0cmluZywgaXNVc2VyRGV0YWlsc05lZWRlZDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxSZXF1ZXN0SW52b2ljZU1vZGVsW10+IHtcbiAgICAgICAgY29uc3QgYWN0aXZlUmVxdWVzdEludm9pY2UgPSBbXTtcbiAgICAgICAgbGV0IHJlcXVlc3RJbnZvaWNlRGV0YWlscztcbiAgICAgICAgbGV0IHVzZXJEZXRhaWxzO1xuXG4gICAgICAgIGlmICh1c2VySWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbjogUXVlcnlDb25kaXRpb25SZXF1ZXN0SW52b2ljZSA9IHtcbiAgICAgICAgICAgICAgICB1c2VySWQ6IHVzZXJJZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBRdWVyeSB1c2luZyB0aGUgR1NJIHdoZW4gdXNlcklkIGlzIHByb3ZpZGVkXG4gICAgICAgICAgICByZXF1ZXN0SW52b2ljZURldGFpbHMgPSBhd2FpdCBtYXBwZXIucXVlcnkoUmVxdWVzdEludm9pY2VNb2RlbCwgY29uZGl0aW9uLCB7IGluZGV4TmFtZTogXCJ1c2VySWRJbmRleFwiIH0pO1xuXG4gICAgICAgICAgICAvLyBGZXRjaCB1c2VyIGRldGFpbHMgaWYgbmVlZGVkXG4gICAgICAgICAgICBpZiAoaXNVc2VyRGV0YWlsc05lZWRlZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzID0gbmV3IFVzZXJNb2RlbCgpO1xuICAgICAgICAgICAgICAgICAgICB1c2VyRGV0YWlscy51c2VySWQgPSB1c2VySWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdXNlciBleGlzdHMgZmlyc3RcbiAgICAgICAgICAgICAgICAgICAgdXNlckRldGFpbHMgPSBhd2FpdCBtYXBwZXIuZ2V0KHVzZXJEZXRhaWxzKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFVzZXIgZGV0YWlscyBub3QgZm91bmQgZm9yIHVzZXJJZDogJHt1c2VySWR9YCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0SW52b2ljZURldGFpbHMgfHwgW10pIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RXaXRoVXNlckRldGFpbHMgPSB7XG4gICAgICAgICAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgICAgICAgICAgICAuLi4oaXNVc2VyRGV0YWlsc05lZWRlZCAmJiB1c2VyRGV0YWlscyA/IHsgdXNlckRldGFpbHMgfSA6IHt9KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjdGl2ZVJlcXVlc3RJbnZvaWNlLnB1c2gocmVxdWVzdFdpdGhVc2VyRGV0YWlscyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGl2ZVJlcXVlc3RJbnZvaWNlO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoT3JkZXJCYXNlUmVxdWVzdChvcmRlcklkOiBzdHJpbmcsIGlzVXNlckRldGFpbHNOZWVkZWQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8UmVxdWVzdEludm9pY2VNb2RlbFtdPiB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVJlcXVlc3RJbnZvaWNlID0gW107XG4gICAgICAgIGxldCByZXF1ZXN0SW52b2ljZURldGFpbHM7XG4gICAgICAgIGxldCB1c2VyRGV0YWlscztcblxuICAgICAgICBpZiAob3JkZXJJZCkge1xuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uOiBRdWVyeUNvbmRpdGlvblJlcXVlc3RJbnZvaWNlID0ge1xuICAgICAgICAgICAgICAgIG9yZGVySWQ6IG9yZGVySWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gUXVlcnkgdXNpbmcgdGhlIEdTSSB3aGVuIG9yZGVySWQgaXMgcHJvdmlkZWRcbiAgICAgICAgICAgIHJlcXVlc3RJbnZvaWNlRGV0YWlscyA9IGF3YWl0IG1hcHBlci5xdWVyeShSZXF1ZXN0SW52b2ljZU1vZGVsLCBjb25kaXRpb24sIHsgaW5kZXhOYW1lOiBcIm9yZGVySWRJbmRleFwiIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RJbnZvaWNlRGV0YWlscyB8fCBbXSkge1xuICAgICAgICAgICAgaWYgKGlzVXNlckRldGFpbHNOZWVkZWQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB1c2VyRGV0YWlscyA9IG5ldyBVc2VyTW9kZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgdXNlckRldGFpbHMudXNlcklkID0gcmVxdWVzdC51c2VySWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdXNlciBleGlzdHMgZmlyc3RcbiAgICAgICAgICAgICAgICAgICAgdXNlckRldGFpbHMgPSBhd2FpdCBtYXBwZXIuZ2V0KHVzZXJEZXRhaWxzKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFVzZXIgZGV0YWlscyBub3QgZm91bmQgZm9yIHVzZXJJZDogJHtyZXF1ZXN0LnVzZXJJZH1gLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdFdpdGhVc2VyRGV0YWlscyA9IHtcbiAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LFxuICAgICAgICAgICAgICAgIC4uLihpc1VzZXJEZXRhaWxzTmVlZGVkICYmIHVzZXJEZXRhaWxzID8geyB1c2VyRGV0YWlscyB9IDoge30pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWN0aXZlUmVxdWVzdEludm9pY2UucHVzaChyZXF1ZXN0V2l0aFVzZXJEZXRhaWxzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aXZlUmVxdWVzdEludm9pY2U7XG4gICAgfVxuXG4gICAgYXN5bmMgZmV0Y2hQbGF0ZUJhc2VSZXF1ZXN0KHBsYXRlSWQ6IHN0cmluZywgaXNVc2VyRGV0YWlsc05lZWRlZDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxSZXF1ZXN0SW52b2ljZU1vZGVsW10+IHtcbiAgICAgICAgY29uc3QgYWN0aXZlUmVxdWVzdEludm9pY2UgPSBbXTtcbiAgICAgICAgbGV0IHJlcXVlc3RJbnZvaWNlRGV0YWlscztcbiAgICAgICAgbGV0IHVzZXJEZXRhaWxzO1xuXG4gICAgICAgIGlmIChwbGF0ZUlkKSB7XG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb246IFF1ZXJ5Q29uZGl0aW9uUmVxdWVzdEludm9pY2UgPSB7XG4gICAgICAgICAgICAgICAgcGxhdGVJZDogcGxhdGVJZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBRdWVyeSB1c2luZyB0aGUgR1NJIHdoZW4gcGxhdGVJZCBpcyBwcm92aWRlZFxuICAgICAgICAgICAgcmVxdWVzdEludm9pY2VEZXRhaWxzID0gYXdhaXQgbWFwcGVyLnF1ZXJ5KFJlcXVlc3RJbnZvaWNlTW9kZWwsIGNvbmRpdGlvbiwgeyBpbmRleE5hbWU6IFwicGxhdGVJZEluZGV4XCIgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdEludm9pY2VEZXRhaWxzIHx8IFtdKSB7XG4gICAgICAgICAgICBpZiAoaXNVc2VyRGV0YWlsc05lZWRlZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzID0gbmV3IFVzZXJNb2RlbCgpO1xuICAgICAgICAgICAgICAgICAgICB1c2VyRGV0YWlscy51c2VySWQgPSByZXF1ZXN0LnVzZXJJZDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB1c2VyIGV4aXN0cyBmaXJzdFxuICAgICAgICAgICAgICAgICAgICB1c2VyRGV0YWlscyA9IGF3YWl0IG1hcHBlci5nZXQodXNlckRldGFpbHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgVXNlciBkZXRhaWxzIG5vdCBmb3VuZCBmb3IgdXNlcklkOiAke3JlcXVlc3QudXNlcklkfWAsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0V2l0aFVzZXJEZXRhaWxzID0ge1xuICAgICAgICAgICAgICAgIC4uLnJlcXVlc3QsXG4gICAgICAgICAgICAgICAgLi4uKGlzVXNlckRldGFpbHNOZWVkZWQgJiYgdXNlckRldGFpbHMgPyB7IHVzZXJEZXRhaWxzIH0gOiB7fSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhY3RpdmVSZXF1ZXN0SW52b2ljZS5wdXNoKHJlcXVlc3RXaXRoVXNlckRldGFpbHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3RpdmVSZXF1ZXN0SW52b2ljZTtcbiAgICB9XG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQW5kUGxhdGVCYXNlUmVxdWVzdChvcmRlcklkOiBzdHJpbmcsIHBsYXRlSWQ6IHN0cmluZywgaXNVc2VyRGV0YWlsc05lZWRlZDogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxSZXF1ZXN0SW52b2ljZU1vZGVsW10+IHtcbiAgICAgICAgY29uc3QgYWN0aXZlUmVxdWVzdEludm9pY2UgPSBbXTtcbiAgICAgICAgbGV0IHJlcXVlc3RJbnZvaWNlRGV0YWlscztcbiAgICAgICAgbGV0IHVzZXJEZXRhaWxzO1xuXG4gICAgICAgIGlmIChvcmRlcklkICYmIHBsYXRlSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbjogUXVlcnlDb25kaXRpb25SZXF1ZXN0SW52b2ljZSA9IHtcbiAgICAgICAgICAgICAgICBvcmRlcklkOiBvcmRlcklkLFxuICAgICAgICAgICAgICAgIHBsYXRlSWQ6IHBsYXRlSWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gUXVlcnkgdXNpbmcgdGhlIEdTSSB3aGVuIGJvdGggb3JkZXJJZCBhbmQgcGxhdGVJZCBhcmUgcHJvdmlkZWRcbiAgICAgICAgICAgIHJlcXVlc3RJbnZvaWNlRGV0YWlscyA9IGF3YWl0IG1hcHBlci5xdWVyeShSZXF1ZXN0SW52b2ljZU1vZGVsLCBjb25kaXRpb24sIHsgaW5kZXhOYW1lOiBcIm9yZGVyQW5kUGxhdGVJZEluZGV4XCIgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdEludm9pY2VEZXRhaWxzIHx8IFtdKSB7XG4gICAgICAgICAgICBpZiAoaXNVc2VyRGV0YWlsc05lZWRlZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzID0gbmV3IFVzZXJNb2RlbCgpO1xuICAgICAgICAgICAgICAgICAgICB1c2VyRGV0YWlscy51c2VySWQgPSByZXF1ZXN0LnVzZXJJZDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB1c2VyIGV4aXN0cyBmaXJzdFxuICAgICAgICAgICAgICAgICAgICB1c2VyRGV0YWlscyA9IGF3YWl0IG1hcHBlci5nZXQodXNlckRldGFpbHMpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgVXNlciBkZXRhaWxzIG5vdCBmb3VuZCBmb3IgdXNlcklkOiAke3JlcXVlc3QudXNlcklkfWAsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RXaXRoVXNlckRldGFpbHMgPSB7XG4gICAgICAgICAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgICAgICAgICAgICAuLi4oaXNVc2VyRGV0YWlsc05lZWRlZCAmJiB1c2VyRGV0YWlscyA/IHsgdXNlckRldGFpbHMgfSA6IHt9KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjdGl2ZVJlcXVlc3RJbnZvaWNlLnB1c2gocmVxdWVzdFdpdGhVc2VyRGV0YWlscyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGl2ZVJlcXVlc3RJbnZvaWNlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlcXVlc3RJbnZvaWNlRGFvID0gbmV3IFJlcXVlc3RJbnZvaWNlRGFvKCk7Il19