@veloceapps/sdk 8.0.0-139 → 8.0.0-140
Sign up to get free protection for your applications and to get access to all the features.
- package/cms/vendor-map.d.ts +0 -1
- package/core/utils/line-item.utils.d.ts +0 -1
- package/esm2020/core/utils/line-item.utils.mjs +29 -14
- package/fesm2015/veloceapps-sdk-core.mjs +31 -15
- package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
- package/fesm2020/veloceapps-sdk-core.mjs +29 -15
- package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
- package/package.json +1 -1
package/cms/vendor-map.d.ts
CHANGED
@@ -52,7 +52,6 @@ export declare const vendorMap: {
|
|
52
52
|
insertLineItem: (lineItem: import("@veloceapps/core").LineItem, parentId: string, toInsert: import("@veloceapps/core").LineItem) => import("@veloceapps/core").LineItem;
|
53
53
|
removeLineItem: (lineItem: import("@veloceapps/core").LineItem, idToRemove: string) => import("@veloceapps/core").LineItem;
|
54
54
|
replaceLineItem: (lineItem: import("@veloceapps/core").LineItem, replaceTo: import("@veloceapps/core").LineItem, skipCardinalityCalculation?: boolean | undefined) => import("@veloceapps/core").LineItem;
|
55
|
-
calculateCardinalityVariables: (lineItems: import("@veloceapps/core").LineItem[]) => Map<string, number>;
|
56
55
|
recalculateCardinalityVariables: (original: import("@veloceapps/core").LineItem, updated: import("@veloceapps/core").LineItem) => import("@veloceapps/core").LineItem;
|
57
56
|
mapAttributes: (attributes: import("@veloceapps/core").Attribute[]) => lodash.Dictionary<any>;
|
58
57
|
getAttributes: (attributes: import("@veloceapps/core").Attribute[], names?: string[] | undefined) => import("@veloceapps/core").Attribute[];
|
@@ -5,7 +5,6 @@ export declare const findLineItemWithComparator: (lineItems: LineItem[], compara
|
|
5
5
|
export declare const insertLineItem: (lineItem: LineItem, parentId: string, toInsert: LineItem) => LineItem;
|
6
6
|
export declare const removeLineItem: (lineItem: LineItem, idToRemove: string) => LineItem;
|
7
7
|
export declare const replaceLineItem: (lineItem: LineItem, replaceTo: LineItem, skipCardinalityCalculation?: boolean) => LineItem;
|
8
|
-
export declare const calculateCardinalityVariables: (lineItems: LineItem[]) => Map<string, number>;
|
9
8
|
export declare const recalculateCardinalityVariables: (original: LineItem, updated: LineItem) => LineItem;
|
10
9
|
export declare const mapAttributes: (attributes: Attribute[]) => Dictionary<any>;
|
11
10
|
export declare const getAttributes: (attributes: Attribute[], names?: string[]) => Attribute[];
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { UUID } from '@veloceapps/core';
|
2
|
-
import { flatten, map, sortBy } from 'lodash';
|
2
|
+
import { entries, flatten, map, sortBy } from 'lodash';
|
3
3
|
export const findLineItem = (id, lineItems) => {
|
4
4
|
return findLineItemWithComparator(lineItems, (li) => li.id === id);
|
5
5
|
};
|
@@ -56,27 +56,42 @@ export const replaceLineItem = (lineItem, replaceTo, skipCardinalityCalculation
|
|
56
56
|
lineItems: lineItem.lineItems.map(li => replaceLineItem(li, replaceTo, skipCardinalityCalculation)),
|
57
57
|
};
|
58
58
|
};
|
59
|
-
|
59
|
+
const collectCardinalityComputations = (portDomains) => {
|
60
|
+
const cardinalityComputations = new Map();
|
61
|
+
entries(portDomains).forEach(([key, portDomain]) => {
|
62
|
+
cardinalityComputations.set(key, portDomain.properties['cardinalityComputation'] === 'true');
|
63
|
+
});
|
64
|
+
return cardinalityComputations;
|
65
|
+
};
|
66
|
+
const calculateCardinalityVariables = (lineItems, cardinalityComputations) => {
|
60
67
|
const cardVars = new Map();
|
61
68
|
lineItems
|
62
69
|
.filter(({ port, type }) => !!port && !!type)
|
63
70
|
.forEach(li => {
|
64
|
-
|
65
|
-
|
71
|
+
if (cardinalityComputations.get(`${li.port}`)) {
|
72
|
+
const cardinalityVariableName = `#CV-${li.type}@${li.port}`;
|
73
|
+
cardVars.set(cardinalityVariableName, (cardVars.get(cardinalityVariableName) ?? 0) + li.qty);
|
74
|
+
}
|
66
75
|
});
|
67
76
|
return cardVars;
|
68
77
|
};
|
78
|
+
const cardinalityRegexp = new RegExp('#CV-[a-zA-Z0-9_]+@(?<portName>[a-zA-Z0-9_]+)');
|
69
79
|
export const recalculateCardinalityVariables = (original, updated) => {
|
70
|
-
const
|
71
|
-
const
|
80
|
+
const cardinalityComputations = collectCardinalityComputations(updated.portDomains ?? original.portDomains ?? {});
|
81
|
+
const cardinalityVariables = calculateCardinalityVariables(updated.lineItems, cardinalityComputations);
|
82
|
+
const originalCardinalityVariables = calculateCardinalityVariables(original.lineItems, cardinalityComputations);
|
72
83
|
originalCardinalityVariables.forEach((value, key) => {
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
84
|
+
const execArray = cardinalityRegexp.exec(key);
|
85
|
+
const portName = execArray?.groups?.['portName'];
|
86
|
+
if (!portName || cardinalityComputations.get(portName)) {
|
87
|
+
if (cardinalityVariables.get(key) === value) {
|
88
|
+
// no need to update cardinality if no changes
|
89
|
+
cardinalityVariables.delete(key);
|
90
|
+
}
|
91
|
+
else if (!cardinalityVariables.has(key)) {
|
92
|
+
// remove last item from port
|
93
|
+
cardinalityVariables.set(key, 0);
|
94
|
+
}
|
80
95
|
}
|
81
96
|
});
|
82
97
|
return {
|
@@ -183,4 +198,4 @@ export const isTechnicalAttribute = (name) => {
|
|
183
198
|
export const filterOutTechnicalAttributes = (attributes) => {
|
184
199
|
return attributes.filter(({ name }) => !isTechnicalAttribute(name));
|
185
200
|
};
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1pdGVtLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS91dGlscy9saW5lLWl0ZW0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpRCxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RixPQUFPLEVBQWMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFMUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBVSxFQUFFLFNBQXFCLEVBQXdCLEVBQUU7SUFDdEYsT0FBTywwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDL0UsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FDeEMsU0FBcUIsRUFDckIsVUFBcUMsRUFDZixFQUFFO0lBQ3hCLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUU3QixPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDMUIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU1QyxJQUFJLEtBQUssRUFBRTtZQUNULE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztLQUN0RTtJQUVELE9BQU87QUFDVCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFrQixFQUFFLFFBQWdCLEVBQUUsUUFBa0IsRUFBWSxFQUFFO0lBQ25HLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUQsT0FBTztRQUNMLEdBQUcsUUFBUTtRQUNYLFNBQVMsRUFBRTtZQUNULEdBQUcsVUFBVTtZQUNiLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sY0FBYyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDO1NBQ0g7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsUUFBa0IsRUFBRSxVQUFrQixFQUFZLEVBQUU7SUFDakYsT0FBTztRQUNMLEdBQUcsUUFBUTtRQUNYLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUzthQUMxQixHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDUixJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssVUFBVSxFQUFFO2dCQUN4QixPQUFPO2FBQ1I7aUJBQU0sSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDOUIsT0FBTyxjQUFjLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ3ZDO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFlO0tBQ2xDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FDN0IsUUFBa0IsRUFDbEIsU0FBbUIsRUFDbkIsNkJBQXNDLEtBQUssRUFDakMsRUFBRTtJQUNaLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsRUFBRSxFQUFFO1FBQ2hDLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUMvQixPQUFPLEVBQUUsR0FBRywrQkFBK0IsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUNwRTthQUFNO1lBQ0wsT0FBTyxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUM7U0FDekI7S0FDRjtJQUVELE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0tBQ3BHLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLFNBQXFCLEVBQXVCLEVBQUU7SUFDMUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDM0MsU0FBUztTQUNOLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDNUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ1osTUFBTSx1QkFBdUIsR0FBRyxPQUFPLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVELFFBQVEsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9GLENBQUMsQ0FBQyxDQUFDO0lBQ0wsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsQ0FBQyxRQUFrQixFQUFFLE9BQWlCLEVBQVksRUFBRTtJQUNqRyxNQUFNLG9CQUFvQixHQUFHLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RSxNQUFNLDRCQUE0QixHQUFHLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV2Riw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDbEQsSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQzNDLDhDQUE4QztZQUM5QyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEM7YUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLDZCQUE2QjtZQUM3QixvQkFBb0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsR0FBRyxPQUFPO1FBQ1YsVUFBVSxFQUFFLGdCQUFnQixDQUMxQixPQUFPLENBQUMsVUFBVSxFQUNsQixDQUFDLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FDMUY7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBdUIsRUFBbUIsRUFBRTtJQUN4RSxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdEYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBdUIsRUFBRSxRQUFrQixFQUFFLEVBQWUsRUFBRTtJQUMxRixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxrQkFBK0IsRUFBRSxrQkFBa0MsRUFBZSxFQUFFO0lBQ25ILE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDeEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE9BQU87WUFDTCxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQztZQUN6QyxFQUFFLEdBQUcsQ0FBQyxRQUFRLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtTQUMvRSxDQUFDO0lBQ0osQ0FBQyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQzdCLFlBQXNCLEVBQ3RCLEVBQVUsRUFDVixLQUFxQixFQUNyQiw2QkFBc0MsS0FBSyxFQUNqQyxFQUFFO0lBQ1osTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFFbEQsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNiLE9BQU8sWUFBWSxDQUFDO0tBQ3JCO0lBRUQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRSxPQUFPLGVBQWUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxHQUFHLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0FBQ2hHLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsVUFBdUIsRUFBRSxJQUFZLEVBQU8sRUFBRSxDQUM5RSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FDOUIsSUFBWSxFQUNaLElBQVksRUFDWixRQUFnQixFQUNoQixhQUE2QixFQUFFLEVBQy9CLFlBQXdCLEVBQUUsRUFDaEIsRUFBRTtJQUNaLE9BQU87UUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNmLElBQUk7UUFDSixJQUFJO1FBQ0osVUFBVSxFQUFFLEtBQUs7UUFDakIsU0FBUyxFQUFFLEtBQUs7UUFDaEIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDckYsU0FBUztRQUNULFFBQVE7UUFDUixHQUFHLEVBQUUsQ0FBQztLQUNLLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxVQUFzQixFQUFFLElBQVksRUFBaUMsRUFBRTtJQUMxRyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUU1RSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxpQkFBaUI7UUFDL0MsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLEtBQUssVUFBVSxDQUFDO1NBQzFELE1BQU0sQ0FDTCxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUNWLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVELENBQUMsRUFDRCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDUCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWQsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN2QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLFNBQXFCLEVBQTJCLEVBQUU7SUFDMUYsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBNEIsRUFBRSxFQUFFLEVBQUUsRUFBRTtRQUMzRCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUxQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUVELE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFOUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFLE9BQU8sSUFBSSxNQUFNLEVBQUUsbUJBQW1CLENBQUM7UUFDMUQsSUFBSSxFQUFFLEVBQUU7WUFDTixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ2hCO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxTQUFxQixFQUFFLGVBQXlCLEVBQXdCLEVBQUU7SUFDeEcsSUFBSSxNQUFNLEdBQXlCLGVBQWUsQ0FBQztJQUNuRCxPQUFPLE1BQU0sSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFO1FBQ3RDLE1BQU0sR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7S0FDM0U7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFvRCxRQUFXLEVBQVcsRUFBRTtJQUM1RyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssT0FBTyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1FBQ3BFLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxPQUFPLFFBQVEsQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsUUFBa0IsRUFBRSxHQUFXLEVBQUUsS0FBYyxFQUFjLEVBQUU7SUFDL0YsSUFBSSxLQUFLLEVBQUU7UUFDVCxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQWtCLEVBQVksRUFBRSxDQUFDLENBQUM7WUFDbEQsR0FBRyxRQUFRO1lBQ1gsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDZixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1NBQzVDLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0tBQ3REO1NBQU07UUFDTCxPQUFPO1lBQ0w7Z0JBQ0UsR0FBRyxRQUFRO2dCQUNYLEdBQUcsRUFBRSxHQUFHO2FBQ1Q7U0FDRixDQUFDO0tBQ0g7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLElBQVksRUFBVyxFQUFFO0lBQzVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUFHLENBQTZCLFVBQWUsRUFBTyxFQUFFO0lBQy9GLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGUsIExpbmVJdGVtLCBOZXdBdHRyaWJ1dGUsIFBvcnREb21haW4sIFVVSUQgfSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnksIGZsYXR0ZW4sIG1hcCwgc29ydEJ5IH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IGZpbmRMaW5lSXRlbSA9IChpZDogc3RyaW5nLCBsaW5lSXRlbXM6IExpbmVJdGVtW10pOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCA9PiB7XG4gIHJldHVybiBmaW5kTGluZUl0ZW1XaXRoQ29tcGFyYXRvcihsaW5lSXRlbXMsIChsaTogTGluZUl0ZW0pID0+IGxpLmlkID09PSBpZCk7XG59O1xuXG5leHBvcnQgY29uc3QgZmluZExpbmVJdGVtV2l0aENvbXBhcmF0b3IgPSAoXG4gIGxpbmVJdGVtczogTGluZUl0ZW1bXSxcbiAgY29tcGFyYXRvcjogKGxpOiBMaW5lSXRlbSkgPT4gYm9vbGVhbixcbik6IExpbmVJdGVtIHwgdW5kZWZpbmVkID0+IHtcbiAgbGV0IGN1cnJlbnRMZXZlbCA9IGxpbmVJdGVtcztcblxuICB3aGlsZSAoY3VycmVudExldmVsLmxlbmd0aCkge1xuICAgIGNvbnN0IGZvdW5kID0gY3VycmVudExldmVsLmZpbmQoY29tcGFyYXRvcik7XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG5cbiAgICBjdXJyZW50TGV2ZWwgPSBmbGF0dGVuKGN1cnJlbnRMZXZlbC5tYXAocGFyZW50ID0+IHBhcmVudC5saW5lSXRlbXMpKTtcbiAgfVxuXG4gIHJldHVybjtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRMaW5lSXRlbSA9IChsaW5lSXRlbTogTGluZUl0ZW0sIHBhcmVudElkOiBzdHJpbmcsIHRvSW5zZXJ0OiBMaW5lSXRlbSk6IExpbmVJdGVtID0+IHtcbiAgY29uc3QgaW5zZXJ0RGF0YSA9IGxpbmVJdGVtLmlkID09PSBwYXJlbnRJZCA/IFt0b0luc2VydF0gOiBbXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5saW5lSXRlbSxcbiAgICBsaW5lSXRlbXM6IFtcbiAgICAgIC4uLmluc2VydERhdGEsXG4gICAgICAuLi5saW5lSXRlbS5saW5lSXRlbXMubWFwKGxpID0+IHtcbiAgICAgICAgcmV0dXJuIGluc2VydExpbmVJdGVtKGxpLCBwYXJlbnRJZCwgdG9JbnNlcnQpO1xuICAgICAgfSksXG4gICAgXSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMaW5lSXRlbSA9IChsaW5lSXRlbTogTGluZUl0ZW0sIGlkVG9SZW1vdmU6IHN0cmluZyk6IExpbmVJdGVtID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5saW5lSXRlbSxcbiAgICBsaW5lSXRlbXM6IGxpbmVJdGVtLmxpbmVJdGVtc1xuICAgICAgLm1hcChsaSA9PiB7XG4gICAgICAgIGlmIChsaS5pZCA9PT0gaWRUb1JlbW92ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChsaS5saW5lSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlbW92ZUxpbmVJdGVtKGxpLCBpZFRvUmVtb3ZlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihyID0+ICEhcikgYXMgTGluZUl0ZW1bXSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXBsYWNlTGluZUl0ZW0gPSAoXG4gIGxpbmVJdGVtOiBMaW5lSXRlbSxcbiAgcmVwbGFjZVRvOiBMaW5lSXRlbSxcbiAgc2tpcENhcmRpbmFsaXR5Q2FsY3VsYXRpb246IGJvb2xlYW4gPSBmYWxzZSxcbik6IExpbmVJdGVtID0+IHtcbiAgaWYgKGxpbmVJdGVtLmlkID09PSByZXBsYWNlVG8uaWQpIHtcbiAgICBpZiAoIXNraXBDYXJkaW5hbGl0eUNhbGN1bGF0aW9uKSB7XG4gICAgICByZXR1cm4geyAuLi5yZWNhbGN1bGF0ZUNhcmRpbmFsaXR5VmFyaWFibGVzKGxpbmVJdGVtLCByZXBsYWNlVG8pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IC4uLnJlcGxhY2VUbyB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ubGluZUl0ZW0sXG4gICAgbGluZUl0ZW1zOiBsaW5lSXRlbS5saW5lSXRlbXMubWFwKGxpID0+IHJlcGxhY2VMaW5lSXRlbShsaSwgcmVwbGFjZVRvLCBza2lwQ2FyZGluYWxpdHlDYWxjdWxhdGlvbikpLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUNhcmRpbmFsaXR5VmFyaWFibGVzID0gKGxpbmVJdGVtczogTGluZUl0ZW1bXSk6IE1hcDxzdHJpbmcsIG51bWJlcj4gPT4ge1xuICBjb25zdCBjYXJkVmFycyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGxpbmVJdGVtc1xuICAgIC5maWx0ZXIoKHsgcG9ydCwgdHlwZSB9KSA9PiAhIXBvcnQgJiYgISF0eXBlKVxuICAgIC5mb3JFYWNoKGxpID0+IHtcbiAgICAgIGNvbnN0IGNhcmRpbmFsaXR5VmFyaWFibGVOYW1lID0gYCNDVi0ke2xpLnR5cGV9QCR7bGkucG9ydH1gO1xuICAgICAgY2FyZFZhcnMuc2V0KGNhcmRpbmFsaXR5VmFyaWFibGVOYW1lLCAoY2FyZFZhcnMuZ2V0KGNhcmRpbmFsaXR5VmFyaWFibGVOYW1lKSA/PyAwKSArIGxpLnF0eSk7XG4gICAgfSk7XG4gIHJldHVybiBjYXJkVmFycztcbn07XG5cbmV4cG9ydCBjb25zdCByZWNhbGN1bGF0ZUNhcmRpbmFsaXR5VmFyaWFibGVzID0gKG9yaWdpbmFsOiBMaW5lSXRlbSwgdXBkYXRlZDogTGluZUl0ZW0pOiBMaW5lSXRlbSA9PiB7XG4gIGNvbnN0IGNhcmRpbmFsaXR5VmFyaWFibGVzID0gY2FsY3VsYXRlQ2FyZGluYWxpdHlWYXJpYWJsZXModXBkYXRlZC5saW5lSXRlbXMpO1xuICBjb25zdCBvcmlnaW5hbENhcmRpbmFsaXR5VmFyaWFibGVzID0gY2FsY3VsYXRlQ2FyZGluYWxpdHlWYXJpYWJsZXMob3JpZ2luYWwubGluZUl0ZW1zKTtcblxuICBvcmlnaW5hbENhcmRpbmFsaXR5VmFyaWFibGVzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICBpZiAoY2FyZGluYWxpdHlWYXJpYWJsZXMuZ2V0KGtleSkgPT09IHZhbHVlKSB7XG4gICAgICAvLyBubyBuZWVkIHRvIHVwZGF0ZSBjYXJkaW5hbGl0eSBpZiBubyBjaGFuZ2VzXG4gICAgICBjYXJkaW5hbGl0eVZhcmlhYmxlcy5kZWxldGUoa2V5KTtcbiAgICB9IGVsc2UgaWYgKCFjYXJkaW5hbGl0eVZhcmlhYmxlcy5oYXMoa2V5KSkge1xuICAgICAgLy8gcmVtb3ZlIGxhc3QgaXRlbSBmcm9tIHBvcnRcbiAgICAgIGNhcmRpbmFsaXR5VmFyaWFibGVzLnNldChrZXksIDApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi51cGRhdGVkLFxuICAgIGF0dHJpYnV0ZXM6IHVwc2VydEF0dHJpYnV0ZXMoXG4gICAgICB1cGRhdGVkLmF0dHJpYnV0ZXMsXG4gICAgICBbLi4uY2FyZGluYWxpdHlWYXJpYWJsZXNdLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHsgbmFtZSwgdmFsdWUsIGNmZ1N0YXR1czogJ0NoYW5nZWQnIH0pKSxcbiAgICApLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcEF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogQXR0cmlidXRlW10pOiBEaWN0aW9uYXJ5PGFueT4gPT4ge1xuICByZXR1cm4gYXR0cmlidXRlcy5yZWR1Y2UoKGFjYywgeyBuYW1lLCB2YWx1ZSB9KSA9PiAoeyAuLi5hY2MsIFtuYW1lXTogdmFsdWUgfSksIHt9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdLCBuYW1lczogc3RyaW5nW10gPSBbXSk6IEF0dHJpYnV0ZVtdID0+IHtcbiAgY29uc3QgZmlsdGVyZWQgPSBhdHRyaWJ1dGVzLmZpbHRlcigoeyBuYW1lIH0pID0+IG5hbWVzLmluY2x1ZGVzKG5hbWUpKTtcbiAgcmV0dXJuIHNvcnRCeShmaWx0ZXJlZCwgWyh7IG5hbWUgfSk6IG51bWJlciA9PiBuYW1lcy5pbmRleE9mKG5hbWUpXSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBzZXJ0QXR0cmlidXRlcyA9IChvcmlnaW5hbEF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdLCBhdHRyaWJ1dGVzVG9VcHNlcnQ6IE5ld0F0dHJpYnV0ZVtdKTogQXR0cmlidXRlW10gPT4ge1xuICByZXR1cm4gYXR0cmlidXRlc1RvVXBzZXJ0LnJlZHVjZSgoYWNjLCB7IG5hbWUsIHZhbHVlIH0pID0+IHtcbiAgICBjb25zdCBbb3JpZ0F0dHJdID0gZ2V0QXR0cmlidXRlcyhhY2MsIFtuYW1lXSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLmFjYy5maWx0ZXIoYXR0ciA9PiBhdHRyLm5hbWUgIT09IG5hbWUpLFxuICAgICAgeyAuLi4ob3JpZ0F0dHIgPz8geyBuYW1lIH0pLCBjZmdTdGF0dXM6IG9yaWdBdHRyID8gJ0NoYW5nZWQnIDogJ1VzZXInLCB2YWx1ZSB9LFxuICAgIF07XG4gIH0sIG9yaWdpbmFsQXR0cmlidXRlcyk7XG59O1xuXG5leHBvcnQgY29uc3QgcGF0Y2hBdHRyaWJ1dGVzID0gKFxuICByb290TGluZUl0ZW06IExpbmVJdGVtLFxuICBpZDogc3RyaW5nLFxuICBhdHRyczogTmV3QXR0cmlidXRlW10sXG4gIHNraXBDYXJkaW5hbGl0eUNhbGN1bGF0aW9uOiBib29sZWFuID0gZmFsc2UsXG4pOiBMaW5lSXRlbSA9PiB7XG4gIGNvbnN0IGxpbmVJdGVtID0gZmluZExpbmVJdGVtKGlkLCBbcm9vdExpbmVJdGVtXSk7XG5cbiAgaWYgKCFsaW5lSXRlbSkge1xuICAgIHJldHVybiByb290TGluZUl0ZW07XG4gIH1cblxuICBjb25zdCBhdHRyaWJ1dGVzID0gdXBzZXJ0QXR0cmlidXRlcyhsaW5lSXRlbS5hdHRyaWJ1dGVzLCBhdHRycyk7XG4gIHJldHVybiByZXBsYWNlTGluZUl0ZW0ocm9vdExpbmVJdGVtLCB7IC4uLmxpbmVJdGVtLCBhdHRyaWJ1dGVzIH0sIHNraXBDYXJkaW5hbGl0eUNhbGN1bGF0aW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBdHRyaWJ1dGVWYWx1ZSA9IChhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSwgbmFtZTogc3RyaW5nKTogYW55ID0+XG4gIGF0dHJpYnV0ZXMuZmluZChhdHRyID0+IGF0dHIubmFtZSA9PT0gbmFtZSk/LnZhbHVlO1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVMaW5lSXRlbSA9IChcbiAgcG9ydDogc3RyaW5nLFxuICB0eXBlOiBzdHJpbmcsXG4gIHBhcmVudElkOiBzdHJpbmcsXG4gIGF0dHJpYnV0ZXM6IE5ld0F0dHJpYnV0ZVtdID0gW10sXG4gIGxpbmVJdGVtczogTGluZUl0ZW1bXSA9IFtdLFxuKTogTGluZUl0ZW0gPT4ge1xuICByZXR1cm4ge1xuICAgIGlkOiBVVUlELlVVSUQoKSxcbiAgICBwb3J0LFxuICAgIHR5cGUsXG4gICAgYWN0aW9uQ29kZTogJ0FERCcsXG4gICAgY2ZnU3RhdHVzOiAnTmV3JyxcbiAgICBhdHRyaWJ1dGVzOiBhdHRyaWJ1dGVzLm1hcCgoeyBuYW1lLCB2YWx1ZSB9KSA9PiAoeyBjZmdTdGF0dXM6ICdVc2VyJywgbmFtZSwgdmFsdWUgfSkpLFxuICAgIGxpbmVJdGVtcyxcbiAgICBwYXJlbnRJZCxcbiAgICBxdHk6IDEsXG4gIH0gYXMgTGluZUl0ZW07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjb21tZW5kZWRQcmljZXMgPSAocG9ydERvbWFpbjogUG9ydERvbWFpbiwgdHlwZTogc3RyaW5nKTogeyBuZXQ6IG51bWJlcjsgbGlzdDogbnVtYmVyIH0gPT4ge1xuICBjb25zdCBkb21haW5UeXBlID0gcG9ydERvbWFpbi5kb21haW5UeXBlcy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gdHlwZSk7XG5cbiAgY29uc3QgW25ldCwgbGlzdF0gPSBkb21haW5UeXBlPy5yZWNvbW1lbmRlZFByaWNlc1xuICAgID8uZmlsdGVyKCh7IGNoYXJnZU1ldGhvZCB9KSA9PiBjaGFyZ2VNZXRob2QgPT09ICdPTkVfVElNRScpXG4gICAgLnJlZHVjZShcbiAgICAgIChhY2MsIHJwKSA9PiB7XG4gICAgICAgIGNvbnN0IFtuZXRQcmljZSwgbGlzdFByaWNlXSA9IGFjYztcbiAgICAgICAgcmV0dXJuIFtuZXRQcmljZSArIHJwLm5ldFByaWNlLCBsaXN0UHJpY2UgKyBycC5saXN0UHJpY2VdO1xuICAgICAgfSxcbiAgICAgIFswLCAwXSxcbiAgICApID8/IFswLCAwXTtcblxuICByZXR1cm4geyBuZXQsIGxpc3QgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZU1vZGlmaWVkQXNzZXRzTWFwID0gKGxpbmVJdGVtczogTGluZUl0ZW1bXSk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0+IHtcbiAgcmV0dXJuIGxpbmVJdGVtcy5yZWR1Y2UoKGFjYzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sIGxpKSA9PiB7XG4gICAgY29uc3QgaXNNb2RpZmllZCA9IGlzTGluZUl0ZW1Nb2RpZmllZChsaSk7XG5cbiAgICBpZiAoIWlzTW9kaWZpZWQpIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0T3JpZ2luUGFyZW50KGxpbmVJdGVtcywgbGkpO1xuXG4gICAgY29uc3QgaWQgPSB0YXJnZXQ/LmFzc2V0SWQgPz8gdGFyZ2V0Py5vcGVuT3JkZXJMaW5lSXRlbUlkO1xuICAgIGlmIChpZCkge1xuICAgICAgYWNjW2lkXSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9yaWdpblBhcmVudCA9IChsaW5lSXRlbXM6IExpbmVJdGVtW10sIGN1cnJlbnRMaW5lSXRlbTogTGluZUl0ZW0pOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCA9PiB7XG4gIGxldCB0YXJnZXQ6IExpbmVJdGVtIHwgdW5kZWZpbmVkID0gY3VycmVudExpbmVJdGVtO1xuICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC5yYW1wSW5zdGFuY2VJZCkge1xuICAgIHRhcmdldCA9IGxpbmVJdGVtcy5maW5kKHN1YiA9PiBzdWIuaWQgPT09IGN1cnJlbnRMaW5lSXRlbS5yYW1wSW5zdGFuY2VJZCk7XG4gIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0xpbmVJdGVtTW9kaWZpZWQgPSA8VCBleHRlbmRzIFBpY2s8TGluZUl0ZW0sICdhY3Rpb25Db2RlJyB8ICdzdGF0dXMnPj4obGluZUl0ZW06IFQpOiBib29sZWFuID0+IHtcbiAgaWYgKGxpbmVJdGVtLmFjdGlvbkNvZGUgPT09ICdFWElTVCcgJiYgbGluZUl0ZW0uc3RhdHVzID09PSAnUEVORElORycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gbGluZUl0ZW0uYWN0aW9uQ29kZSAhPT0gJ0VYSVNUJztcbn07XG5cbmV4cG9ydCBjb25zdCBtdWx0aXBseUxpbmVJdGVtcyA9IChsaW5lSXRlbTogTGluZUl0ZW0sIHF0eTogbnVtYmVyLCBzcGxpdDogYm9vbGVhbik6IExpbmVJdGVtW10gPT4ge1xuICBpZiAoc3BsaXQpIHtcbiAgICBjb25zdCB1bmlmeUlkcyA9IChsaW5lSXRlbTogTGluZUl0ZW0pOiBMaW5lSXRlbSA9PiAoe1xuICAgICAgLi4ubGluZUl0ZW0sXG4gICAgICBpZDogVVVJRC5VVUlEKCksXG4gICAgICBsaW5lSXRlbXM6IGxpbmVJdGVtLmxpbmVJdGVtcy5tYXAodW5pZnlJZHMpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hcChuZXcgQXJyYXkocXR5KSwgKCkgPT4gdW5pZnlJZHMobGluZUl0ZW0pKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICAuLi5saW5lSXRlbSxcbiAgICAgICAgcXR5OiBxdHksXG4gICAgICB9LFxuICAgIF07XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc1RlY2huaWNhbEF0dHJpYnV0ZSA9IChuYW1lOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIG5hbWUuc3RhcnRzV2l0aCgnIycpIHx8IG5hbWUuc3RhcnRzV2l0aCgnJCcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlck91dFRlY2huaWNhbEF0dHJpYnV0ZXMgPSA8VCBleHRlbmRzIHsgbmFtZTogc3RyaW5nIH0+KGF0dHJpYnV0ZXM6IFRbXSk6IFRbXSA9PiB7XG4gIHJldHVybiBhdHRyaWJ1dGVzLmZpbHRlcigoeyBuYW1lIH0pID0+ICFpc1RlY2huaWNhbEF0dHJpYnV0ZShuYW1lKSk7XG59O1xuIl19
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1pdGVtLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS91dGlscy9saW5lLWl0ZW0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpRCxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RixPQUFPLEVBQWMsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEVBQVUsRUFBRSxTQUFxQixFQUF3QixFQUFFO0lBQ3RGLE9BQU8sMEJBQTBCLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQy9FLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQ3hDLFNBQXFCLEVBQ3JCLFVBQXFDLEVBQ2YsRUFBRTtJQUN4QixJQUFJLFlBQVksR0FBRyxTQUFTLENBQUM7SUFFN0IsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFO1FBQzFCLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUMsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDdEU7SUFFRCxPQUFPO0FBQ1QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsUUFBa0IsRUFBRSxRQUFnQixFQUFFLFFBQWtCLEVBQVksRUFBRTtJQUNuRyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsRUFB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LEdBQUcsQ0FBQyxJQUFZLEVBQVcsRUFBRTtJQUM1RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxDQUE2QixVQUFlLEVBQU8sRUFBRTtJQUMvRixPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlLCBMaW5lSXRlbSwgTmV3QXR0cmlidXRlLCBQb3J0RG9tYWluLCBVVUlEIH0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBEaWN0aW9uYXJ5LCBlbnRyaWVzLCBmbGF0dGVuLCBtYXAsIHNvcnRCeSB9IGZyb20gJ2xvZGFzaCc7XG5cbmV4cG9ydCBjb25zdCBmaW5kTGluZUl0ZW0gPSAoaWQ6IHN0cmluZywgbGluZUl0ZW1zOiBMaW5lSXRlbVtdKTogTGluZUl0ZW0gfCB1bmRlZmluZWQgPT4ge1xuICByZXR1cm4gZmluZExpbmVJdGVtV2l0aENvbXBhcmF0b3IobGluZUl0ZW1zLCAobGk6IExpbmVJdGVtKSA9PiBsaS5pZCA9PT0gaWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRMaW5lSXRlbVdpdGhDb21wYXJhdG9yID0gKFxuICBsaW5lSXRlbXM6IExpbmVJdGVtW10sXG4gIGNvbXBhcmF0b3I6IChsaTogTGluZUl0ZW0pID0+IGJvb2xlYW4sXG4pOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCA9PiB7XG4gIGxldCBjdXJyZW50TGV2ZWwgPSBsaW5lSXRlbXM7XG5cbiAgd2hpbGUgKGN1cnJlbnRMZXZlbC5sZW5ndGgpIHtcbiAgICBjb25zdCBmb3VuZCA9IGN1cnJlbnRMZXZlbC5maW5kKGNvbXBhcmF0b3IpO1xuXG4gICAgaWYgKGZvdW5kKSB7XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfVxuXG4gICAgY3VycmVudExldmVsID0gZmxhdHRlbihjdXJyZW50TGV2ZWwubWFwKHBhcmVudCA9PiBwYXJlbnQubGluZUl0ZW1zKSk7XG4gIH1cblxuICByZXR1cm47XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0TGluZUl0ZW0gPSAobGluZUl0ZW06IExpbmVJdGVtLCBwYXJlbnRJZDogc3RyaW5nLCB0b0luc2VydDogTGluZUl0ZW0pOiBMaW5lSXRlbSA9PiB7XG4gIGNvbnN0IGluc2VydERhdGEgPSBsaW5lSXRlbS5pZCA9PT0gcGFyZW50SWQgPyBbdG9JbnNlcnRdIDogW107XG4gIHJldHVybiB7XG4gICAgLi4ubGluZUl0ZW0sXG4gICAgbGluZUl0ZW1zOiBbXG4gICAgICAuLi5pbnNlcnREYXRhLFxuICAgICAgLi4ubGluZUl0ZW0ubGluZUl0ZW1zLm1hcChsaSA9PiB7XG4gICAgICAgIHJldHVybiBpbnNlcnRMaW5lSXRlbShsaSwgcGFyZW50SWQsIHRvSW5zZXJ0KTtcbiAgICAgIH0pLFxuICAgIF0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlTGluZUl0ZW0gPSAobGluZUl0ZW06IExpbmVJdGVtLCBpZFRvUmVtb3ZlOiBzdHJpbmcpOiBMaW5lSXRlbSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4ubGluZUl0ZW0sXG4gICAgbGluZUl0ZW1zOiBsaW5lSXRlbS5saW5lSXRlbXNcbiAgICAgIC5tYXAobGkgPT4ge1xuICAgICAgICBpZiAobGkuaWQgPT09IGlkVG9SZW1vdmUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAobGkubGluZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiByZW1vdmVMaW5lSXRlbShsaSwgaWRUb1JlbW92ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIociA9PiAhIXIpIGFzIExpbmVJdGVtW10sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcmVwbGFjZUxpbmVJdGVtID0gKFxuICBsaW5lSXRlbTogTGluZUl0ZW0sXG4gIHJlcGxhY2VUbzogTGluZUl0ZW0sXG4gIHNraXBDYXJkaW5hbGl0eUNhbGN1bGF0aW9uOiBib29sZWFuID0gZmFsc2UsXG4pOiBMaW5lSXRlbSA9PiB7XG4gIGlmIChsaW5lSXRlbS5pZCA9PT0gcmVwbGFjZVRvLmlkKSB7XG4gICAgaWYgKCFza2lwQ2FyZGluYWxpdHlDYWxjdWxhdGlvbikge1xuICAgICAgcmV0dXJuIHsgLi4ucmVjYWxjdWxhdGVDYXJkaW5hbGl0eVZhcmlhYmxlcyhsaW5lSXRlbSwgcmVwbGFjZVRvKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyAuLi5yZXBsYWNlVG8gfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmxpbmVJdGVtLFxuICAgIGxpbmVJdGVtczogbGluZUl0ZW0ubGluZUl0ZW1zLm1hcChsaSA9PiByZXBsYWNlTGluZUl0ZW0obGksIHJlcGxhY2VUbywgc2tpcENhcmRpbmFsaXR5Q2FsY3VsYXRpb24pKSxcbiAgfTtcbn07XG5cbmNvbnN0IGNvbGxlY3RDYXJkaW5hbGl0eUNvbXB1dGF0aW9ucyA9IChwb3J0RG9tYWluczogRGljdGlvbmFyeTxQb3J0RG9tYWluPik6IE1hcDxzdHJpbmcsIGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgY2FyZGluYWxpdHlDb21wdXRhdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgZW50cmllcyhwb3J0RG9tYWlucykuZm9yRWFjaCgoW2tleSwgcG9ydERvbWFpbl0pID0+IHtcbiAgICBjYXJkaW5hbGl0eUNvbXB1dGF0aW9ucy5zZXQoa2V5LCBwb3J0RG9tYWluLnByb3BlcnRpZXNbJ2NhcmRpbmFsaXR5Q29tcHV0YXRpb24nXSA9PT0gJ3RydWUnKTtcbiAgfSk7XG4gIHJldHVybiBjYXJkaW5hbGl0eUNvbXB1dGF0aW9ucztcbn07XG5cbmNvbnN0IGNhbGN1bGF0ZUNhcmRpbmFsaXR5VmFyaWFibGVzID0gKFxuICBsaW5lSXRlbXM6IExpbmVJdGVtW10sXG4gIGNhcmRpbmFsaXR5Q29tcHV0YXRpb25zOiBNYXA8c3RyaW5nLCBib29sZWFuPixcbik6IE1hcDxzdHJpbmcsIG51bWJlcj4gPT4ge1xuICBjb25zdCBjYXJkVmFycyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGxpbmVJdGVtc1xuICAgIC5maWx0ZXIoKHsgcG9ydCwgdHlwZSB9KSA9PiAhIXBvcnQgJiYgISF0eXBlKVxuICAgIC5mb3JFYWNoKGxpID0+IHtcbiAgICAgIGlmIChjYXJkaW5hbGl0eUNvbXB1dGF0aW9ucy5nZXQoYCR7bGkucG9ydH1gKSkge1xuICAgICAgICBjb25zdCBjYXJkaW5hbGl0eVZhcmlhYmxlTmFtZSA9IGAjQ1YtJHtsaS50eXBlfUAke2xpLnBvcnR9YDtcbiAgICAgICAgY2FyZFZhcnMuc2V0KGNhcmRpbmFsaXR5VmFyaWFibGVOYW1lLCAoY2FyZFZhcnMuZ2V0KGNhcmRpbmFsaXR5VmFyaWFibGVOYW1lKSA/PyAwKSArIGxpLnF0eSk7XG4gICAgICB9XG4gICAgfSk7XG4gIHJldHVybiBjYXJkVmFycztcbn07XG5cbmNvbnN0IGNhcmRpbmFsaXR5UmVnZXhwID0gbmV3IFJlZ0V4cCgnI0NWLVthLXpBLVowLTlfXStAKD88cG9ydE5hbWU+W2EtekEtWjAtOV9dKyknKTtcblxuZXhwb3J0IGNvbnN0IHJlY2FsY3VsYXRlQ2FyZGluYWxpdHlWYXJpYWJsZXMgPSAob3JpZ2luYWw6IExpbmVJdGVtLCB1cGRhdGVkOiBMaW5lSXRlbSk6IExpbmVJdGVtID0+IHtcbiAgY29uc3QgY2FyZGluYWxpdHlDb21wdXRhdGlvbnMgPSBjb2xsZWN0Q2FyZGluYWxpdHlDb21wdXRhdGlvbnModXBkYXRlZC5wb3J0RG9tYWlucyA/PyBvcmlnaW5hbC5wb3J0RG9tYWlucyA/PyB7fSk7XG4gIGNvbnN0IGNhcmRpbmFsaXR5VmFyaWFibGVzID0gY2FsY3VsYXRlQ2FyZGluYWxpdHlWYXJpYWJsZXModXBkYXRlZC5saW5lSXRlbXMsIGNhcmRpbmFsaXR5Q29tcHV0YXRpb25zKTtcbiAgY29uc3Qgb3JpZ2luYWxDYXJkaW5hbGl0eVZhcmlhYmxlcyA9IGNhbGN1bGF0ZUNhcmRpbmFsaXR5VmFyaWFibGVzKG9yaWdpbmFsLmxpbmVJdGVtcywgY2FyZGluYWxpdHlDb21wdXRhdGlvbnMpO1xuXG4gIG9yaWdpbmFsQ2FyZGluYWxpdHlWYXJpYWJsZXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgIGNvbnN0IGV4ZWNBcnJheSA9IGNhcmRpbmFsaXR5UmVnZXhwLmV4ZWMoa2V5KTtcbiAgICBjb25zdCBwb3J0TmFtZSA9IGV4ZWNBcnJheT8uZ3JvdXBzPy5bJ3BvcnROYW1lJ107XG4gICAgaWYgKCFwb3J0TmFtZSB8fCBjYXJkaW5hbGl0eUNvbXB1dGF0aW9ucy5nZXQocG9ydE5hbWUpKSB7XG4gICAgICBpZiAoY2FyZGluYWxpdHlWYXJpYWJsZXMuZ2V0KGtleSkgPT09IHZhbHVlKSB7XG4gICAgICAgIC8vIG5vIG5lZWQgdG8gdXBkYXRlIGNhcmRpbmFsaXR5IGlmIG5vIGNoYW5nZXNcbiAgICAgICAgY2FyZGluYWxpdHlWYXJpYWJsZXMuZGVsZXRlKGtleSk7XG4gICAgICB9IGVsc2UgaWYgKCFjYXJkaW5hbGl0eVZhcmlhYmxlcy5oYXMoa2V5KSkge1xuICAgICAgICAvLyByZW1vdmUgbGFzdCBpdGVtIGZyb20gcG9ydFxuICAgICAgICBjYXJkaW5hbGl0eVZhcmlhYmxlcy5zZXQoa2V5LCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4udXBkYXRlZCxcbiAgICBhdHRyaWJ1dGVzOiB1cHNlcnRBdHRyaWJ1dGVzKFxuICAgICAgdXBkYXRlZC5hdHRyaWJ1dGVzLFxuICAgICAgWy4uLmNhcmRpbmFsaXR5VmFyaWFibGVzXS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+ICh7IG5hbWUsIHZhbHVlLCBjZmdTdGF0dXM6ICdDaGFuZ2VkJyB9KSksXG4gICAgKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXBBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdKTogRGljdGlvbmFyeTxhbnk+ID0+IHtcbiAgcmV0dXJuIGF0dHJpYnV0ZXMucmVkdWNlKChhY2MsIHsgbmFtZSwgdmFsdWUgfSkgPT4gKHsgLi4uYWNjLCBbbmFtZV06IHZhbHVlIH0pLCB7fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSwgbmFtZXM6IHN0cmluZ1tdID0gW10pOiBBdHRyaWJ1dGVbXSA9PiB7XG4gIGNvbnN0IGZpbHRlcmVkID0gYXR0cmlidXRlcy5maWx0ZXIoKHsgbmFtZSB9KSA9PiBuYW1lcy5pbmNsdWRlcyhuYW1lKSk7XG4gIHJldHVybiBzb3J0QnkoZmlsdGVyZWQsIFsoeyBuYW1lIH0pOiBudW1iZXIgPT4gbmFtZXMuaW5kZXhPZihuYW1lKV0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwc2VydEF0dHJpYnV0ZXMgPSAob3JpZ2luYWxBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSwgYXR0cmlidXRlc1RvVXBzZXJ0OiBOZXdBdHRyaWJ1dGVbXSk6IEF0dHJpYnV0ZVtdID0+IHtcbiAgcmV0dXJuIGF0dHJpYnV0ZXNUb1Vwc2VydC5yZWR1Y2UoKGFjYywgeyBuYW1lLCB2YWx1ZSB9KSA9PiB7XG4gICAgY29uc3QgW29yaWdBdHRyXSA9IGdldEF0dHJpYnV0ZXMoYWNjLCBbbmFtZV0pO1xuICAgIHJldHVybiBbXG4gICAgICAuLi5hY2MuZmlsdGVyKGF0dHIgPT4gYXR0ci5uYW1lICE9PSBuYW1lKSxcbiAgICAgIHsgLi4uKG9yaWdBdHRyID8/IHsgbmFtZSB9KSwgY2ZnU3RhdHVzOiBvcmlnQXR0ciA/ICdDaGFuZ2VkJyA6ICdVc2VyJywgdmFsdWUgfSxcbiAgICBdO1xuICB9LCBvcmlnaW5hbEF0dHJpYnV0ZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhdGNoQXR0cmlidXRlcyA9IChcbiAgcm9vdExpbmVJdGVtOiBMaW5lSXRlbSxcbiAgaWQ6IHN0cmluZyxcbiAgYXR0cnM6IE5ld0F0dHJpYnV0ZVtdLFxuICBza2lwQ2FyZGluYWxpdHlDYWxjdWxhdGlvbjogYm9vbGVhbiA9IGZhbHNlLFxuKTogTGluZUl0ZW0gPT4ge1xuICBjb25zdCBsaW5lSXRlbSA9IGZpbmRMaW5lSXRlbShpZCwgW3Jvb3RMaW5lSXRlbV0pO1xuXG4gIGlmICghbGluZUl0ZW0pIHtcbiAgICByZXR1cm4gcm9vdExpbmVJdGVtO1xuICB9XG5cbiAgY29uc3QgYXR0cmlidXRlcyA9IHVwc2VydEF0dHJpYnV0ZXMobGluZUl0ZW0uYXR0cmlidXRlcywgYXR0cnMpO1xuICByZXR1cm4gcmVwbGFjZUxpbmVJdGVtKHJvb3RMaW5lSXRlbSwgeyAuLi5saW5lSXRlbSwgYXR0cmlidXRlcyB9LCBza2lwQ2FyZGluYWxpdHlDYWxjdWxhdGlvbik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXR0cmlidXRlVmFsdWUgPSAoYXR0cmlidXRlczogQXR0cmlidXRlW10sIG5hbWU6IHN0cmluZyk6IGFueSA9PlxuICBhdHRyaWJ1dGVzLmZpbmQoYXR0ciA9PiBhdHRyLm5hbWUgPT09IG5hbWUpPy52YWx1ZTtcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlTGluZUl0ZW0gPSAoXG4gIHBvcnQ6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nLFxuICBwYXJlbnRJZDogc3RyaW5nLFxuICBhdHRyaWJ1dGVzOiBOZXdBdHRyaWJ1dGVbXSA9IFtdLFxuICBsaW5lSXRlbXM6IExpbmVJdGVtW10gPSBbXSxcbik6IExpbmVJdGVtID0+IHtcbiAgcmV0dXJuIHtcbiAgICBpZDogVVVJRC5VVUlEKCksXG4gICAgcG9ydCxcbiAgICB0eXBlLFxuICAgIGFjdGlvbkNvZGU6ICdBREQnLFxuICAgIGNmZ1N0YXR1czogJ05ldycsXG4gICAgYXR0cmlidXRlczogYXR0cmlidXRlcy5tYXAoKHsgbmFtZSwgdmFsdWUgfSkgPT4gKHsgY2ZnU3RhdHVzOiAnVXNlcicsIG5hbWUsIHZhbHVlIH0pKSxcbiAgICBsaW5lSXRlbXMsXG4gICAgcGFyZW50SWQsXG4gICAgcXR5OiAxLFxuICB9IGFzIExpbmVJdGVtO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlY29tbWVuZGVkUHJpY2VzID0gKHBvcnREb21haW46IFBvcnREb21haW4sIHR5cGU6IHN0cmluZyk6IHsgbmV0OiBudW1iZXI7IGxpc3Q6IG51bWJlciB9ID0+IHtcbiAgY29uc3QgZG9tYWluVHlwZSA9IHBvcnREb21haW4uZG9tYWluVHlwZXMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IHR5cGUpO1xuXG4gIGNvbnN0IFtuZXQsIGxpc3RdID0gZG9tYWluVHlwZT8ucmVjb21tZW5kZWRQcmljZXNcbiAgICA/LmZpbHRlcigoeyBjaGFyZ2VNZXRob2QgfSkgPT4gY2hhcmdlTWV0aG9kID09PSAnT05FX1RJTUUnKVxuICAgIC5yZWR1Y2UoXG4gICAgICAoYWNjLCBycCkgPT4ge1xuICAgICAgICBjb25zdCBbbmV0UHJpY2UsIGxpc3RQcmljZV0gPSBhY2M7XG4gICAgICAgIHJldHVybiBbbmV0UHJpY2UgKyBycC5uZXRQcmljZSwgbGlzdFByaWNlICsgcnAubGlzdFByaWNlXTtcbiAgICAgIH0sXG4gICAgICBbMCwgMF0sXG4gICAgKSA/PyBbMCwgMF07XG5cbiAgcmV0dXJuIHsgbmV0LCBsaXN0IH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVNb2RpZmllZEFzc2V0c01hcCA9IChsaW5lSXRlbXM6IExpbmVJdGVtW10pOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9PiB7XG4gIHJldHVybiBsaW5lSXRlbXMucmVkdWNlKChhY2M6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LCBsaSkgPT4ge1xuICAgIGNvbnN0IGlzTW9kaWZpZWQgPSBpc0xpbmVJdGVtTW9kaWZpZWQobGkpO1xuXG4gICAgaWYgKCFpc01vZGlmaWVkKSB7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IGdldE9yaWdpblBhcmVudChsaW5lSXRlbXMsIGxpKTtcblxuICAgIGNvbnN0IGlkID0gdGFyZ2V0Py5hc3NldElkID8/IHRhcmdldD8ub3Blbk9yZGVyTGluZUl0ZW1JZDtcbiAgICBpZiAoaWQpIHtcbiAgICAgIGFjY1tpZF0gPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPcmlnaW5QYXJlbnQgPSAobGluZUl0ZW1zOiBMaW5lSXRlbVtdLCBjdXJyZW50TGluZUl0ZW06IExpbmVJdGVtKTogTGluZUl0ZW0gfCB1bmRlZmluZWQgPT4ge1xuICBsZXQgdGFyZ2V0OiBMaW5lSXRlbSB8IHVuZGVmaW5lZCA9IGN1cnJlbnRMaW5lSXRlbTtcbiAgd2hpbGUgKHRhcmdldCAmJiB0YXJnZXQucmFtcEluc3RhbmNlSWQpIHtcbiAgICB0YXJnZXQgPSBsaW5lSXRlbXMuZmluZChzdWIgPT4gc3ViLmlkID09PSBjdXJyZW50TGluZUl0ZW0ucmFtcEluc3RhbmNlSWQpO1xuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNMaW5lSXRlbU1vZGlmaWVkID0gPFQgZXh0ZW5kcyBQaWNrPExpbmVJdGVtLCAnYWN0aW9uQ29kZScgfCAnc3RhdHVzJz4+KGxpbmVJdGVtOiBUKTogYm9vbGVhbiA9PiB7XG4gIGlmIChsaW5lSXRlbS5hY3Rpb25Db2RlID09PSAnRVhJU1QnICYmIGxpbmVJdGVtLnN0YXR1cyA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVJdGVtLmFjdGlvbkNvZGUgIT09ICdFWElTVCc7XG59O1xuXG5leHBvcnQgY29uc3QgbXVsdGlwbHlMaW5lSXRlbXMgPSAobGluZUl0ZW06IExpbmVJdGVtLCBxdHk6IG51bWJlciwgc3BsaXQ6IGJvb2xlYW4pOiBMaW5lSXRlbVtdID0+IHtcbiAgaWYgKHNwbGl0KSB7XG4gICAgY29uc3QgdW5pZnlJZHMgPSAobGluZUl0ZW06IExpbmVJdGVtKTogTGluZUl0ZW0gPT4gKHtcbiAgICAgIC4uLmxpbmVJdGVtLFxuICAgICAgaWQ6IFVVSUQuVVVJRCgpLFxuICAgICAgbGluZUl0ZW1zOiBsaW5lSXRlbS5saW5lSXRlbXMubWFwKHVuaWZ5SWRzKSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtYXAobmV3IEFycmF5KHF0eSksICgpID0+IHVuaWZ5SWRzKGxpbmVJdGVtKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgLi4ubGluZUl0ZW0sXG4gICAgICAgIHF0eTogcXR5LFxuICAgICAgfSxcbiAgICBdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNUZWNobmljYWxBdHRyaWJ1dGUgPSAobmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBuYW1lLnN0YXJ0c1dpdGgoJyMnKSB8fCBuYW1lLnN0YXJ0c1dpdGgoJyQnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJPdXRUZWNobmljYWxBdHRyaWJ1dGVzID0gPFQgZXh0ZW5kcyB7IG5hbWU6IHN0cmluZyB9PihhdHRyaWJ1dGVzOiBUW10pOiBUW10gPT4ge1xuICByZXR1cm4gYXR0cmlidXRlcy5maWx0ZXIoKHsgbmFtZSB9KSA9PiAhaXNUZWNobmljYWxBdHRyaWJ1dGUobmFtZSkpO1xufTtcbiJdfQ==
|
@@ -5,7 +5,7 @@ import { BehaviorSubject, switchMap, map as map$1, tap as tap$1, noop, catchErro
|
|
5
5
|
import { map, filter, tap, switchMap as switchMap$1, skip, take, shareReplay, catchError as catchError$1, finalize as finalize$1, first } from 'rxjs/operators';
|
6
6
|
import * as i1 from '@veloceapps/api';
|
7
7
|
import { ApiModule } from '@veloceapps/api';
|
8
|
-
import { merge, isEmpty, flatten, sortBy, map as map$2, omit, isEqual, cloneDeep, assign, uniqBy, transform, uniq } from 'lodash';
|
8
|
+
import { merge, isEmpty, flatten, entries, sortBy, map as map$2, omit, isEqual, cloneDeep, assign, uniqBy, transform, uniq } from 'lodash';
|
9
9
|
import * as i6 from '@veloceapps/components';
|
10
10
|
import { ToastType, ConfirmationComponent, ConfirmationDialogModule } from '@veloceapps/components';
|
11
11
|
import moment from 'moment';
|
@@ -303,28 +303,45 @@ const replaceLineItem = (lineItem, replaceTo, skipCardinalityCalculation = false
|
|
303
303
|
}
|
304
304
|
return Object.assign(Object.assign({}, lineItem), { lineItems: lineItem.lineItems.map(li => replaceLineItem(li, replaceTo, skipCardinalityCalculation)) });
|
305
305
|
};
|
306
|
-
const
|
306
|
+
const collectCardinalityComputations = (portDomains) => {
|
307
|
+
const cardinalityComputations = new Map();
|
308
|
+
entries(portDomains).forEach(([key, portDomain]) => {
|
309
|
+
cardinalityComputations.set(key, portDomain.properties['cardinalityComputation'] === 'true');
|
310
|
+
});
|
311
|
+
return cardinalityComputations;
|
312
|
+
};
|
313
|
+
const calculateCardinalityVariables = (lineItems, cardinalityComputations) => {
|
307
314
|
const cardVars = new Map();
|
308
315
|
lineItems
|
309
316
|
.filter(({ port, type }) => !!port && !!type)
|
310
317
|
.forEach(li => {
|
311
318
|
var _a;
|
312
|
-
|
313
|
-
|
319
|
+
if (cardinalityComputations.get(`${li.port}`)) {
|
320
|
+
const cardinalityVariableName = `#CV-${li.type}@${li.port}`;
|
321
|
+
cardVars.set(cardinalityVariableName, ((_a = cardVars.get(cardinalityVariableName)) !== null && _a !== void 0 ? _a : 0) + li.qty);
|
322
|
+
}
|
314
323
|
});
|
315
324
|
return cardVars;
|
316
325
|
};
|
326
|
+
const cardinalityRegexp = new RegExp('#CV-[a-zA-Z0-9_]+@(?<portName>[a-zA-Z0-9_]+)');
|
317
327
|
const recalculateCardinalityVariables = (original, updated) => {
|
318
|
-
|
319
|
-
const
|
328
|
+
var _a, _b;
|
329
|
+
const cardinalityComputations = collectCardinalityComputations((_b = (_a = updated.portDomains) !== null && _a !== void 0 ? _a : original.portDomains) !== null && _b !== void 0 ? _b : {});
|
330
|
+
const cardinalityVariables = calculateCardinalityVariables(updated.lineItems, cardinalityComputations);
|
331
|
+
const originalCardinalityVariables = calculateCardinalityVariables(original.lineItems, cardinalityComputations);
|
320
332
|
originalCardinalityVariables.forEach((value, key) => {
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
333
|
+
var _a;
|
334
|
+
const execArray = cardinalityRegexp.exec(key);
|
335
|
+
const portName = (_a = execArray === null || execArray === void 0 ? void 0 : execArray.groups) === null || _a === void 0 ? void 0 : _a['portName'];
|
336
|
+
if (!portName || cardinalityComputations.get(portName)) {
|
337
|
+
if (cardinalityVariables.get(key) === value) {
|
338
|
+
// no need to update cardinality if no changes
|
339
|
+
cardinalityVariables.delete(key);
|
340
|
+
}
|
341
|
+
else if (!cardinalityVariables.has(key)) {
|
342
|
+
// remove last item from port
|
343
|
+
cardinalityVariables.set(key, 0);
|
344
|
+
}
|
328
345
|
}
|
329
346
|
});
|
330
347
|
return Object.assign(Object.assign({}, updated), { attributes: upsertAttributes(updated.attributes, [...cardinalityVariables].map(([name, value]) => ({ name, value, cfgStatus: 'Changed' }))) });
|
@@ -424,7 +441,6 @@ const filterOutTechnicalAttributes = (attributes) => {
|
|
424
441
|
|
425
442
|
var lineItem_utils = /*#__PURE__*/Object.freeze({
|
426
443
|
__proto__: null,
|
427
|
-
calculateCardinalityVariables: calculateCardinalityVariables,
|
428
444
|
filterOutTechnicalAttributes: filterOutTechnicalAttributes,
|
429
445
|
findLineItem: findLineItem,
|
430
446
|
findLineItemWithComparator: findLineItemWithComparator,
|
@@ -2651,5 +2667,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
2651
2667
|
* Generated bundle index. Do not edit.
|
2652
2668
|
*/
|
2653
2669
|
|
2654
|
-
export { ActionCodePipe, CalendarDirective, ConfigurationRuntimeService, ConfigurationService, ConfigurationStateService, ContextService, DEFAULT_FORMATTING_SETTINGS, DatePipe, FLOW_CUSTOMIZATION, FORMATTING_SETTINGS_TOKEN, FlowConfigurationModule, FlowConfigurationService, FlowInfoService, FlowStateConfigurationService, FlowStateService, FlowUpdateService, IntegrationState, LineItemWorker, MetricsCalculationService, NumberPipe, PricePipe, ProductImagesService, QuoteDraftService, RuntimeMode, RuntimeOperation, RuntimeSettingsService, RuntimeStep, SdkCoreModule, SdkDirectivesModule, SdkPipesModule, UI_DEFINITION_VERSION,
|
2670
|
+
export { ActionCodePipe, CalendarDirective, ConfigurationRuntimeService, ConfigurationService, ConfigurationStateService, ContextService, DEFAULT_FORMATTING_SETTINGS, DatePipe, FLOW_CUSTOMIZATION, FORMATTING_SETTINGS_TOKEN, FlowConfigurationModule, FlowConfigurationService, FlowInfoService, FlowStateConfigurationService, FlowStateService, FlowUpdateService, IntegrationState, LineItemWorker, MetricsCalculationService, NumberPipe, PricePipe, ProductImagesService, QuoteDraftService, RuntimeMode, RuntimeOperation, RuntimeSettingsService, RuntimeStep, SdkCoreModule, SdkDirectivesModule, SdkPipesModule, UI_DEFINITION_VERSION, extractMetadata, filterOutTechnicalAttributes, findLineItem, findLineItemWithComparator, generateConfigurationLineItem, generateLineItem, generateModifiedAssetsMap, getAttributeValue, getAttributes, getDefaultLineItem, getGuidedSellingConfigurationRequest, getOriginParent, getRecommendedPrices, insertLineItem, isLineItemModified, isTechnicalAttribute, lineItem_utils as lineItemUtils, mapAttributes, multiplyLineItems, patchAttributes, recalculateCardinalityVariables, removeLineItem, replaceLineItem, upsertAttributes };
|
2655
2671
|
//# sourceMappingURL=veloceapps-sdk-core.mjs.map
|