@veloceapps/sdk 6.0.0-29 → 6.0.0-30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -646,6 +646,7 @@ export declare const vendorMap: {
646
646
  insertLineItem: (lineItem: import("@veloceapps/core").LineItem, parentId: string, toInsert: import("@veloceapps/core").LineItem) => import("@veloceapps/core").LineItem;
647
647
  removeLineItem: (lineItem: import("@veloceapps/core").LineItem, idToRemove: string) => import("@veloceapps/core").LineItem;
648
648
  replaceLineItem: (lineItem: import("@veloceapps/core").LineItem, replaceTo: import("@veloceapps/core").LineItem) => import("@veloceapps/core").LineItem;
649
+ calculateCardinalityVariables: (lineItems: import("@veloceapps/core").LineItem[]) => Map<string, number>;
649
650
  recalculateCardinalityVariables: (original: import("@veloceapps/core").LineItem, updated: import("@veloceapps/core").LineItem) => import("@veloceapps/core").LineItem;
650
651
  mapAttributes: (attributes: import("@veloceapps/core").Attribute[]) => lodash.Dictionary<any>;
651
652
  getAttributes: (attributes: import("@veloceapps/core").Attribute[], names?: string[] | undefined) => import("@veloceapps/core").Attribute[];
@@ -5,6 +5,7 @@ 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) => LineItem;
8
+ export declare const calculateCardinalityVariables: (lineItems: LineItem[]) => Map<string, number>;
8
9
  export declare const recalculateCardinalityVariables: (original: LineItem, updated: LineItem) => LineItem;
9
10
  export declare const mapAttributes: (attributes: Attribute[]) => Dictionary<any>;
10
11
  export declare const getAttributes: (attributes: Attribute[], names?: string[]) => Attribute[];
@@ -42,19 +42,28 @@ export const replaceLineItem = (lineItem, replaceTo) => {
42
42
  }
43
43
  return Object.assign(Object.assign({}, lineItem), { lineItems: lineItem.lineItems.map(li => replaceLineItem(li, replaceTo)) });
44
44
  };
45
- export const recalculateCardinalityVariables = (original, updated) => {
46
- var _a;
47
- const cardinalityVariables = new Map();
48
- for (const li of updated.lineItems) {
45
+ export const calculateCardinalityVariables = (lineItems) => {
46
+ const cardVars = new Map();
47
+ lineItems.forEach(li => {
48
+ var _a;
49
49
  const cardinalityVariableName = `#CV-${li.type}@${li.port}`;
50
- cardinalityVariables.set(cardinalityVariableName, ((_a = cardinalityVariables.get(cardinalityVariableName)) !== null && _a !== void 0 ? _a : 0) + li.qty);
51
- }
52
- for (const li of original.lineItems) {
53
- if (updated.lineItems.some(({ id, qty }) => li.id === id && li.qty === qty)) {
54
- const cardinalityVariableName = `#CV-${li.type}@${li.port}`;
55
- cardinalityVariables.delete(cardinalityVariableName);
50
+ cardVars.set(cardinalityVariableName, ((_a = cardVars.get(cardinalityVariableName)) !== null && _a !== void 0 ? _a : 0) + li.qty);
51
+ });
52
+ return cardVars;
53
+ };
54
+ export const recalculateCardinalityVariables = (original, updated) => {
55
+ const cardinalityVariables = calculateCardinalityVariables(updated.lineItems);
56
+ const originalCardinalityVariables = calculateCardinalityVariables(original.lineItems);
57
+ originalCardinalityVariables.forEach((value, key) => {
58
+ if (cardinalityVariables.get(key) === value) {
59
+ // no need to update cardinality if no changes
60
+ cardinalityVariables.delete(key);
56
61
  }
57
- }
62
+ else if (!cardinalityVariables.has(key)) {
63
+ // remove last item from port
64
+ cardinalityVariables.set(key, 0);
65
+ }
66
+ });
58
67
  return Object.assign(Object.assign({}, updated), { attributes: upsertAttributes(updated.attributes, [...cardinalityVariables].map(([name, value]) => ({ name, value }))) });
59
68
  };
60
69
  export const mapAttributes = (attributes) => {
@@ -115,4 +124,4 @@ export const multiplyLineItems = (lineItem, qty, split) => {
115
124
  ];
116
125
  }
117
126
  };
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1pdGVtLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS91dGlscy9saW5lLWl0ZW0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE4QyxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRixPQUFPLEVBQWMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFMUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBVSxFQUFFLFNBQXFCLEVBQXdCLEVBQUU7SUFDdEYsT0FBTywwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDL0UsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FDeEMsU0FBcUIsRUFDckIsVUFBcUMsRUFDZixFQUFFO0lBQ3hCLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUU3QixPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDMUIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU1QyxJQUFJLEtBQUssRUFBRTtZQUNULE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztLQUN0RTtJQUVELE9BQU87QUFDVCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFrQixFQUFFLFFBQWdCLEVBQUUsUUFBa0IsRUFBWSxFQUFFO0lBQ25HLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEtBQUssUUFB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QUFXLEVBQUUsS0FBYyxFQUFjLEVBQUU7SUFDL0YsSUFBSSxLQUFLLEVBQUU7UUFDVCxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQWtCLEVBQVksRUFBRSxDQUFDLGlDQUM5QyxRQUFRLEtBQ1gsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFDZixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQzNDLENBQUM7UUFFSCxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUN0RDtTQUFNO1FBQ0wsT0FBTzs0Q0FFQSxRQUFRLEtBQ1gsR0FBRyxFQUFFLEdBQUc7U0FFWCxDQUFDO0tBQ0g7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdHRyaWJ1dGUsIENmZ1N0YXR1cywgTGluZUl0ZW0sIFBvcnREb21haW4sIFVVSUQgfSBmcm9tICdAdmVsb2NlYXBwcy9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnksIGZsYXR0ZW4sIG1hcCwgc29ydEJ5IH0gZnJvbSAnbG9kYXNoJztcblxuZXhwb3J0IGNvbnN0IGZpbmRMaW5lSXRlbSA9IChpZDogc3RyaW5nLCBsaW5lSXRlbXM6IExpbmVJdGVtW10pOiBMaW5lSXRlbSB8IHVuZGVmaW5lZCA9PiB7XG4gIHJldHVybiBmaW5kTGluZUl0ZW1XaXRoQ29tcGFyYXRvcihsaW5lSXRlbXMsIChsaTogTGluZUl0ZW0pID0+IGxpLmlkID09PSBpZCk7XG59O1xuXG5leHBvcnQgY29uc3QgZmluZExpbmVJdGVtV2l0aENvbXBhcmF0b3IgPSAoXG4gIGxpbmVJdGVtczogTGluZUl0ZW1bXSxcbiAgY29tcGFyYXRvcjogKGxpOiBMaW5lSXRlbSkgPT4gYm9vbGVhbixcbik6IExpbmVJdGVtIHwgdW5kZWZpbmVkID0+IHtcbiAgbGV0IGN1cnJlbnRMZXZlbCA9IGxpbmVJdGVtcztcblxuICB3aGlsZSAoY3VycmVudExldmVsLmxlbmd0aCkge1xuICAgIGNvbnN0IGZvdW5kID0gY3VycmVudExldmVsLmZpbmQoY29tcGFyYXRvcik7XG5cbiAgICBpZiAoZm91bmQpIHtcbiAgICAgIHJldHVybiBmb3VuZDtcbiAgICB9XG5cbiAgICBjdXJyZW50TGV2ZWwgPSBmbGF0dGVuKGN1cnJlbnRMZXZlbC5tYXAocGFyZW50ID0+IHBhcmVudC5saW5lSXRlbXMpKTtcbiAgfVxuXG4gIHJldHVybjtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRMaW5lSXRlbSA9IChsaW5lSXRlbTogTGluZUl0ZW0sIHBhcmVudElkOiBzdHJpbmcsIHRvSW5zZXJ0OiBMaW5lSXRlbSk6IExpbmVJdGVtID0+IHtcbiAgY29uc3QgaW5zZXJ0RGF0YSA9IGxpbmVJdGVtLmlkID09PSBwYXJlbnRJZCA/IFt0b0luc2VydF0gOiBbXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5saW5lSXRlbSxcbiAgICBsaW5lSXRlbXM6IFtcbiAgICAgIC4uLmluc2VydERhdGEsXG4gICAgICAuLi5saW5lSXRlbS5saW5lSXRlbXMubWFwKGxpID0+IHtcbiAgICAgICAgcmV0dXJuIGluc2VydExpbmVJdGVtKGxpLCBwYXJlbnRJZCwgdG9JbnNlcnQpO1xuICAgICAgfSksXG4gICAgXSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMaW5lSXRlbSA9IChsaW5lSXRlbTogTGluZUl0ZW0sIGlkVG9SZW1vdmU6IHN0cmluZyk6IExpbmVJdGVtID0+IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5saW5lSXRlbSxcbiAgICBsaW5lSXRlbXM6IGxpbmVJdGVtLmxpbmVJdGVtc1xuICAgICAgLm1hcChsaSA9PiB7XG4gICAgICAgIGlmIChsaS5pZCA9PT0gaWRUb1JlbW92ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChsaS5saW5lSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIHJlbW92ZUxpbmVJdGVtKGxpLCBpZFRvUmVtb3ZlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihyID0+ICEhcikgYXMgTGluZUl0ZW1bXSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXBsYWNlTGluZUl0ZW0gPSAobGluZUl0ZW06IExpbmVJdGVtLCByZXBsYWNlVG86IExpbmVJdGVtKTogTGluZUl0ZW0gPT4ge1xuICBpZiAobGluZUl0ZW0uaWQgPT09IHJlcGxhY2VUby5pZCkge1xuICAgIHJldHVybiB7IC4uLnJlY2FsY3VsYXRlQ2FyZGluYWxpdHlWYXJpYWJsZXMobGluZUl0ZW0sIHJlcGxhY2VUbykgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ubGluZUl0ZW0sXG4gICAgbGluZUl0ZW1zOiBsaW5lSXRlbS5saW5lSXRlbXMubWFwKGxpID0+IHJlcGxhY2VMaW5lSXRlbShsaSwgcmVwbGFjZVRvKSksXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcmVjYWxjdWxhdGVDYXJkaW5hbGl0eVZhcmlhYmxlcyA9IChvcmlnaW5hbDogTGluZUl0ZW0sIHVwZGF0ZWQ6IExpbmVJdGVtKTogTGluZUl0ZW0gPT4ge1xuICBjb25zdCBjYXJkaW5hbGl0eVZhcmlhYmxlcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgZm9yIChjb25zdCBsaSBvZiB1cGRhdGVkLmxpbmVJdGVtcykge1xuICAgIGNvbnN0IGNhcmRpbmFsaXR5VmFyaWFibGVOYW1lID0gYCNDVi0ke2xpLnR5cGV9QCR7bGkucG9ydH1gO1xuICAgIGNhcmRpbmFsaXR5VmFyaWFibGVzLnNldChcbiAgICAgIGNhcmRpbmFsaXR5VmFyaWFibGVOYW1lLFxuICAgICAgKGNhcmRpbmFsaXR5VmFyaWFibGVzLmdldChjYXJkaW5hbGl0eVZhcmlhYmxlTmFtZSkgPz8gMCkgKyBsaS5xdHksXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgbGkgb2Ygb3JpZ2luYWwubGluZUl0ZW1zKSB7XG4gICAgaWYgKHVwZGF0ZWQubGluZUl0ZW1zLnNvbWUoKHsgaWQsIHF0eSB9KSA9PiBsaS5pZCA9PT0gaWQgJiYgbGkucXR5ID09PSBxdHkpKSB7XG4gICAgICBjb25zdCBjYXJkaW5hbGl0eVZhcmlhYmxlTmFtZSA9IGAjQ1YtJHtsaS50eXBlfUAke2xpLnBvcnR9YDtcbiAgICAgIGNhcmRpbmFsaXR5VmFyaWFibGVzLmRlbGV0ZShjYXJkaW5hbGl0eVZhcmlhYmxlTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi51cGRhdGVkLFxuICAgIGF0dHJpYnV0ZXM6IHVwc2VydEF0dHJpYnV0ZXMoXG4gICAgICB1cGRhdGVkLmF0dHJpYnV0ZXMsXG4gICAgICBbLi4uY2FyZGluYWxpdHlWYXJpYWJsZXNdLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHsgbmFtZSwgdmFsdWUgfSkpLFxuICAgICksXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbWFwQXR0cmlidXRlcyA9IChhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSk6IERpY3Rpb25hcnk8YW55PiA9PiB7XG4gIHJldHVybiBhdHRyaWJ1dGVzLnJlZHVjZSgoYWNjLCB7IG5hbWUsIHZhbHVlIH0pID0+ICh7IC4uLmFjYywgW25hbWVdOiB2YWx1ZSB9KSwge30pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogQXR0cmlidXRlW10sIG5hbWVzOiBzdHJpbmdbXSA9IFtdKTogQXR0cmlidXRlW10gPT4ge1xuICBjb25zdCBmaWx0ZXJlZCA9IGF0dHJpYnV0ZXMuZmlsdGVyKCh7IG5hbWUgfSkgPT4gbmFtZXMuaW5jbHVkZXMobmFtZSkpO1xuICByZXR1cm4gc29ydEJ5KGZpbHRlcmVkLCBbKHsgbmFtZSB9KTogbnVtYmVyID0+IG5hbWVzLmluZGV4T2YobmFtZSldKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cHNlcnRBdHRyaWJ1dGVzID0gKFxuICBvcmlnaW5hbEF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdLFxuICBhdHRyaWJ1dGVzVG9VcHNlcnQ6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogYW55IH1bXSxcbik6IEF0dHJpYnV0ZVtdID0+IHtcbiAgcmV0dXJuIGF0dHJpYnV0ZXNUb1Vwc2VydC5yZWR1Y2UoKGFjYywgeyBuYW1lLCB2YWx1ZSB9KSA9PiB7XG4gICAgY29uc3QgW29yaWdBdHRyXSA9IGdldEF0dHJpYnV0ZXMoYWNjLCBbbmFtZV0pO1xuICAgIHJldHVybiBbXG4gICAgICAuLi5hY2MuZmlsdGVyKGF0dHIgPT4gYXR0ci5uYW1lICE9PSBuYW1lKSxcbiAgICAgIHsgLi4uKG9yaWdBdHRyID8/IHsgbmFtZSB9KSwgY2ZnU3RhdHVzOiAnVXNlcicgYXMgQ2ZnU3RhdHVzLCB2YWx1ZSB9LFxuICAgIF07XG4gIH0sIG9yaWdpbmFsQXR0cmlidXRlcyk7XG59O1xuXG5leHBvcnQgY29uc3QgcGF0Y2hBdHRyaWJ1dGVzID0gKFxuICByb290TGluZUl0ZW06IExpbmVJdGVtLFxuICBpZDogc3RyaW5nLFxuICBhdHRyczogeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdLFxuKTogTGluZUl0ZW0gPT4ge1xuICBjb25zdCBsaW5lSXRlbSA9IGZpbmRMaW5lSXRlbShpZCwgW3Jvb3RMaW5lSXRlbV0pO1xuXG4gIGlmICghbGluZUl0ZW0pIHtcbiAgICByZXR1cm4gcm9vdExpbmVJdGVtO1xuICB9XG5cbiAgY29uc3QgYXR0cmlidXRlcyA9IHVwc2VydEF0dHJpYnV0ZXMobGluZUl0ZW0uYXR0cmlidXRlcywgYXR0cnMpO1xuICByZXR1cm4gcmVwbGFjZUxpbmVJdGVtKHJvb3RMaW5lSXRlbSwgeyAuLi5saW5lSXRlbSwgYXR0cmlidXRlcyB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBdHRyaWJ1dGVWYWx1ZSA9IChhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSwgbmFtZTogc3RyaW5nKTogYW55ID0+XG4gIGF0dHJpYnV0ZXMuZmluZChhdHRyID0+IGF0dHIubmFtZSA9PT0gbmFtZSk/LnZhbHVlO1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVMaW5lSXRlbSA9IChcbiAgcG9ydDogc3RyaW5nLFxuICB0eXBlOiBzdHJpbmcsXG4gIHBhcmVudElkOiBzdHJpbmcsXG4gIGF0dHJpYnV0ZXM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogYW55IH1bXSA9IFtdLFxuICBsaW5lSXRlbXM6IExpbmVJdGVtW10gPSBbXSxcbik6IExpbmVJdGVtID0+IHtcbiAgcmV0dXJuIHtcbiAgICBpZDogVVVJRC5VVUlEKCksXG4gICAgcG9ydCxcbiAgICB0eXBlLFxuICAgIGFjdGlvbkNvZGU6ICdBREQnLFxuICAgIGNmZ1N0YXR1czogJ05ldycsXG4gICAgYXR0cmlidXRlczogYXR0cmlidXRlcy5tYXAoKHsgbmFtZSwgdmFsdWUgfSkgPT4gKHsgY2ZnU3RhdHVzOiAnVXNlcicsIG5hbWUsIHZhbHVlIH0pKSxcbiAgICBsaW5lSXRlbXMsXG4gICAgcGFyZW50SWQsXG4gICAgcXR5OiAxLFxuICB9IGFzIExpbmVJdGVtO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlY29tbWVuZGVkUHJpY2VzID0gKHBvcnREb21haW46IFBvcnREb21haW4sIHR5cGU6IHN0cmluZyk6IHsgbmV0OiBudW1iZXI7IGxpc3Q6IG51bWJlciB9ID0+IHtcbiAgY29uc3QgZG9tYWluVHlwZSA9IHBvcnREb21haW4uZG9tYWluVHlwZXMuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IHR5cGUpO1xuXG4gIGNvbnN0IFtuZXQsIGxpc3RdID0gZG9tYWluVHlwZT8ucmVjb21tZW5kZWRQcmljZXNcbiAgICA/LmZpbHRlcigoeyBjaGFyZ2VNZXRob2QgfSkgPT4gY2hhcmdlTWV0aG9kID09PSAnT05FX1RJTUUnKVxuICAgIC5yZWR1Y2UoXG4gICAgICAoYWNjLCBycCkgPT4ge1xuICAgICAgICBjb25zdCBbbmV0UHJpY2UsIGxpc3RQcmljZV0gPSBhY2M7XG4gICAgICAgIHJldHVybiBbbmV0UHJpY2UgKyBycC5uZXRQcmljZSwgbGlzdFByaWNlICsgcnAubGlzdFByaWNlXTtcbiAgICAgIH0sXG4gICAgICBbMCwgMF0sXG4gICAgKSA/PyBbMCwgMF07XG5cbiAgcmV0dXJuIHsgbmV0LCBsaXN0IH07XG59O1xuXG5leHBvcnQgY29uc3QgbXVsdGlwbHlMaW5lSXRlbXMgPSAobGluZUl0ZW06IExpbmVJdGVtLCBxdHk6IG51bWJlciwgc3BsaXQ6IGJvb2xlYW4pOiBMaW5lSXRlbVtdID0+IHtcbiAgaWYgKHNwbGl0KSB7XG4gICAgY29uc3QgdW5pZnlJZHMgPSAobGluZUl0ZW06IExpbmVJdGVtKTogTGluZUl0ZW0gPT4gKHtcbiAgICAgIC4uLmxpbmVJdGVtLFxuICAgICAgaWQ6IFVVSUQuVVVJRCgpLFxuICAgICAgbGluZUl0ZW1zOiBsaW5lSXRlbS5saW5lSXRlbXMubWFwKHVuaWZ5SWRzKSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtYXAobmV3IEFycmF5KHF0eSksICgpID0+IHVuaWZ5SWRzKGxpbmVJdGVtKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgLi4ubGluZUl0ZW0sXG4gICAgICAgIHF0eTogcXR5LFxuICAgICAgfSxcbiAgICBdO1xuICB9XG59O1xuIl19
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1pdGVtLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvY29yZS91dGlscy9saW5lLWl0ZW0udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE4QyxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRixPQUFPLEVBQWMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFMUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBVSxFQUFFLFNBQXFCLEVBQXdCLEVBQUU7SUFDdEYsT0FBTywwQkFBMEIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDL0UsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FDeEMsU0FBcUIsRUFDckIsVUFBcUMsRUFDZixFQUFFO0lBQ3hCLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUU3QixPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDMUIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUU1QyxJQUFJLEtBQUssRUFBRTtZQUNULE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztLQUN0RTtJQUVELE9BQU87QUFDVCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFrQixFQUFFLFFBQWdCLEVBQUUsUUFBa0IsRUFBWSxFQUFFO0lBQ25HLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEtBQUssUUFB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RSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVELENBQUMsRUFDRCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDUCxtQ0FBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVkLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDdkIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxRQUFrQixFQUFFLEdBQVcsRUFBRSxLQUFjLEVBQWMsRUFBRTtJQUMvRixJQUFJLEtBQUssRUFBRTtRQUNULE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBa0IsRUFBWSxFQUFFLENBQUMsaUNBQzlDLFFBQVEsS0FDWCxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUNmLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFDM0MsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0tBQ3REO1NBQU07UUFDTCxPQUFPOzRDQUVBLFFBQVEsS0FDWCxHQUFHLEVBQUUsR0FBRztTQUVYLENBQUM7S0FDSDtBQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZSwgQ2ZnU3RhdHVzLCBMaW5lSXRlbSwgUG9ydERvbWFpbiwgVVVJRCB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgRGljdGlvbmFyeSwgZmxhdHRlbiwgbWFwLCBzb3J0QnkgfSBmcm9tICdsb2Rhc2gnO1xuXG5leHBvcnQgY29uc3QgZmluZExpbmVJdGVtID0gKGlkOiBzdHJpbmcsIGxpbmVJdGVtczogTGluZUl0ZW1bXSk6IExpbmVJdGVtIHwgdW5kZWZpbmVkID0+IHtcbiAgcmV0dXJuIGZpbmRMaW5lSXRlbVdpdGhDb21wYXJhdG9yKGxpbmVJdGVtcywgKGxpOiBMaW5lSXRlbSkgPT4gbGkuaWQgPT09IGlkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGluZUl0ZW1XaXRoQ29tcGFyYXRvciA9IChcbiAgbGluZUl0ZW1zOiBMaW5lSXRlbVtdLFxuICBjb21wYXJhdG9yOiAobGk6IExpbmVJdGVtKSA9PiBib29sZWFuLFxuKTogTGluZUl0ZW0gfCB1bmRlZmluZWQgPT4ge1xuICBsZXQgY3VycmVudExldmVsID0gbGluZUl0ZW1zO1xuXG4gIHdoaWxlIChjdXJyZW50TGV2ZWwubGVuZ3RoKSB7XG4gICAgY29uc3QgZm91bmQgPSBjdXJyZW50TGV2ZWwuZmluZChjb21wYXJhdG9yKTtcblxuICAgIGlmIChmb3VuZCkge1xuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH1cblxuICAgIGN1cnJlbnRMZXZlbCA9IGZsYXR0ZW4oY3VycmVudExldmVsLm1hcChwYXJlbnQgPT4gcGFyZW50LmxpbmVJdGVtcykpO1xuICB9XG5cbiAgcmV0dXJuO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydExpbmVJdGVtID0gKGxpbmVJdGVtOiBMaW5lSXRlbSwgcGFyZW50SWQ6IHN0cmluZywgdG9JbnNlcnQ6IExpbmVJdGVtKTogTGluZUl0ZW0gPT4ge1xuICBjb25zdCBpbnNlcnREYXRhID0gbGluZUl0ZW0uaWQgPT09IHBhcmVudElkID8gW3RvSW5zZXJ0XSA6IFtdO1xuICByZXR1cm4ge1xuICAgIC4uLmxpbmVJdGVtLFxuICAgIGxpbmVJdGVtczogW1xuICAgICAgLi4uaW5zZXJ0RGF0YSxcbiAgICAgIC4uLmxpbmVJdGVtLmxpbmVJdGVtcy5tYXAobGkgPT4ge1xuICAgICAgICByZXR1cm4gaW5zZXJ0TGluZUl0ZW0obGksIHBhcmVudElkLCB0b0luc2VydCk7XG4gICAgICB9KSxcbiAgICBdLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxpbmVJdGVtID0gKGxpbmVJdGVtOiBMaW5lSXRlbSwgaWRUb1JlbW92ZTogc3RyaW5nKTogTGluZUl0ZW0gPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmxpbmVJdGVtLFxuICAgIGxpbmVJdGVtczogbGluZUl0ZW0ubGluZUl0ZW1zXG4gICAgICAubWFwKGxpID0+IHtcbiAgICAgICAgaWYgKGxpLmlkID09PSBpZFRvUmVtb3ZlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGxpLmxpbmVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gcmVtb3ZlTGluZUl0ZW0obGksIGlkVG9SZW1vdmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKHIgPT4gISFyKSBhcyBMaW5lSXRlbVtdLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlcGxhY2VMaW5lSXRlbSA9IChsaW5lSXRlbTogTGluZUl0ZW0sIHJlcGxhY2VUbzogTGluZUl0ZW0pOiBMaW5lSXRlbSA9PiB7XG4gIGlmIChsaW5lSXRlbS5pZCA9PT0gcmVwbGFjZVRvLmlkKSB7XG4gICAgcmV0dXJuIHsgLi4ucmVjYWxjdWxhdGVDYXJkaW5hbGl0eVZhcmlhYmxlcyhsaW5lSXRlbSwgcmVwbGFjZVRvKSB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5saW5lSXRlbSxcbiAgICBsaW5lSXRlbXM6IGxpbmVJdGVtLmxpbmVJdGVtcy5tYXAobGkgPT4gcmVwbGFjZUxpbmVJdGVtKGxpLCByZXBsYWNlVG8pKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVDYXJkaW5hbGl0eVZhcmlhYmxlcyA9IChsaW5lSXRlbXM6IExpbmVJdGVtW10pOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0+IHtcbiAgY29uc3QgY2FyZFZhcnMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBsaW5lSXRlbXMuZm9yRWFjaChsaSA9PiB7XG4gICAgY29uc3QgY2FyZGluYWxpdHlWYXJpYWJsZU5hbWUgPSBgI0NWLSR7bGkudHlwZX1AJHtsaS5wb3J0fWA7XG4gICAgY2FyZFZhcnMuc2V0KGNhcmRpbmFsaXR5VmFyaWFibGVOYW1lLCAoY2FyZFZhcnMuZ2V0KGNhcmRpbmFsaXR5VmFyaWFibGVOYW1lKSA/PyAwKSArIGxpLnF0eSk7XG4gIH0pO1xuICByZXR1cm4gY2FyZFZhcnM7XG59O1xuXG5leHBvcnQgY29uc3QgcmVjYWxjdWxhdGVDYXJkaW5hbGl0eVZhcmlhYmxlcyA9IChvcmlnaW5hbDogTGluZUl0ZW0sIHVwZGF0ZWQ6IExpbmVJdGVtKTogTGluZUl0ZW0gPT4ge1xuICBjb25zdCBjYXJkaW5hbGl0eVZhcmlhYmxlcyA9IGNhbGN1bGF0ZUNhcmRpbmFsaXR5VmFyaWFibGVzKHVwZGF0ZWQubGluZUl0ZW1zKTtcbiAgY29uc3Qgb3JpZ2luYWxDYXJkaW5hbGl0eVZhcmlhYmxlcyA9IGNhbGN1bGF0ZUNhcmRpbmFsaXR5VmFyaWFibGVzKG9yaWdpbmFsLmxpbmVJdGVtcyk7XG5cbiAgb3JpZ2luYWxDYXJkaW5hbGl0eVZhcmlhYmxlcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgaWYgKGNhcmRpbmFsaXR5VmFyaWFibGVzLmdldChrZXkpID09PSB2YWx1ZSkge1xuICAgICAgLy8gbm8gbmVlZCB0byB1cGRhdGUgY2FyZGluYWxpdHkgaWYgbm8gY2hhbmdlc1xuICAgICAgY2FyZGluYWxpdHlWYXJpYWJsZXMuZGVsZXRlKGtleSk7XG4gICAgfSBlbHNlIGlmICghY2FyZGluYWxpdHlWYXJpYWJsZXMuaGFzKGtleSkpIHtcbiAgICAgIC8vIHJlbW92ZSBsYXN0IGl0ZW0gZnJvbSBwb3J0XG4gICAgICBjYXJkaW5hbGl0eVZhcmlhYmxlcy5zZXQoa2V5LCAwKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4udXBkYXRlZCxcbiAgICBhdHRyaWJ1dGVzOiB1cHNlcnRBdHRyaWJ1dGVzKFxuICAgICAgdXBkYXRlZC5hdHRyaWJ1dGVzLFxuICAgICAgWy4uLmNhcmRpbmFsaXR5VmFyaWFibGVzXS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+ICh7IG5hbWUsIHZhbHVlIH0pKSxcbiAgICApLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcEF0dHJpYnV0ZXMgPSAoYXR0cmlidXRlczogQXR0cmlidXRlW10pOiBEaWN0aW9uYXJ5PGFueT4gPT4ge1xuICByZXR1cm4gYXR0cmlidXRlcy5yZWR1Y2UoKGFjYywgeyBuYW1lLCB2YWx1ZSB9KSA9PiAoeyAuLi5hY2MsIFtuYW1lXTogdmFsdWUgfSksIHt9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBdHRyaWJ1dGVzID0gKGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdLCBuYW1lczogc3RyaW5nW10gPSBbXSk6IEF0dHJpYnV0ZVtdID0+IHtcbiAgY29uc3QgZmlsdGVyZWQgPSBhdHRyaWJ1dGVzLmZpbHRlcigoeyBuYW1lIH0pID0+IG5hbWVzLmluY2x1ZGVzKG5hbWUpKTtcbiAgcmV0dXJuIHNvcnRCeShmaWx0ZXJlZCwgWyh7IG5hbWUgfSk6IG51bWJlciA9PiBuYW1lcy5pbmRleE9mKG5hbWUpXSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBzZXJ0QXR0cmlidXRlcyA9IChcbiAgb3JpZ2luYWxBdHRyaWJ1dGVzOiBBdHRyaWJ1dGVbXSxcbiAgYXR0cmlidXRlc1RvVXBzZXJ0OiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IGFueSB9W10sXG4pOiBBdHRyaWJ1dGVbXSA9PiB7XG4gIHJldHVybiBhdHRyaWJ1dGVzVG9VcHNlcnQucmVkdWNlKChhY2MsIHsgbmFtZSwgdmFsdWUgfSkgPT4ge1xuICAgIGNvbnN0IFtvcmlnQXR0cl0gPSBnZXRBdHRyaWJ1dGVzKGFjYywgW25hbWVdKTtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uYWNjLmZpbHRlcihhdHRyID0+IGF0dHIubmFtZSAhPT0gbmFtZSksXG4gICAgICB7IC4uLihvcmlnQXR0ciA/PyB7IG5hbWUgfSksIGNmZ1N0YXR1czogJ1VzZXInIGFzIENmZ1N0YXR1cywgdmFsdWUgfSxcbiAgICBdO1xuICB9LCBvcmlnaW5hbEF0dHJpYnV0ZXMpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhdGNoQXR0cmlidXRlcyA9IChcbiAgcm9vdExpbmVJdGVtOiBMaW5lSXRlbSxcbiAgaWQ6IHN0cmluZyxcbiAgYXR0cnM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogYW55IH1bXSxcbik6IExpbmVJdGVtID0+IHtcbiAgY29uc3QgbGluZUl0ZW0gPSBmaW5kTGluZUl0ZW0oaWQsIFtyb290TGluZUl0ZW1dKTtcblxuICBpZiAoIWxpbmVJdGVtKSB7XG4gICAgcmV0dXJuIHJvb3RMaW5lSXRlbTtcbiAgfVxuXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSB1cHNlcnRBdHRyaWJ1dGVzKGxpbmVJdGVtLmF0dHJpYnV0ZXMsIGF0dHJzKTtcbiAgcmV0dXJuIHJlcGxhY2VMaW5lSXRlbShyb290TGluZUl0ZW0sIHsgLi4ubGluZUl0ZW0sIGF0dHJpYnV0ZXMgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXR0cmlidXRlVmFsdWUgPSAoYXR0cmlidXRlczogQXR0cmlidXRlW10sIG5hbWU6IHN0cmluZyk6IGFueSA9PlxuICBhdHRyaWJ1dGVzLmZpbmQoYXR0ciA9PiBhdHRyLm5hbWUgPT09IG5hbWUpPy52YWx1ZTtcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlTGluZUl0ZW0gPSAoXG4gIHBvcnQ6IHN0cmluZyxcbiAgdHlwZTogc3RyaW5nLFxuICBwYXJlbnRJZDogc3RyaW5nLFxuICBhdHRyaWJ1dGVzOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IGFueSB9W10gPSBbXSxcbiAgbGluZUl0ZW1zOiBMaW5lSXRlbVtdID0gW10sXG4pOiBMaW5lSXRlbSA9PiB7XG4gIHJldHVybiB7XG4gICAgaWQ6IFVVSUQuVVVJRCgpLFxuICAgIHBvcnQsXG4gICAgdHlwZSxcbiAgICBhY3Rpb25Db2RlOiAnQUREJyxcbiAgICBjZmdTdGF0dXM6ICdOZXcnLFxuICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMubWFwKCh7IG5hbWUsIHZhbHVlIH0pID0+ICh7IGNmZ1N0YXR1czogJ1VzZXInLCBuYW1lLCB2YWx1ZSB9KSksXG4gICAgbGluZUl0ZW1zLFxuICAgIHBhcmVudElkLFxuICAgIHF0eTogMSxcbiAgfSBhcyBMaW5lSXRlbTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWNvbW1lbmRlZFByaWNlcyA9IChwb3J0RG9tYWluOiBQb3J0RG9tYWluLCB0eXBlOiBzdHJpbmcpOiB7IG5ldDogbnVtYmVyOyBsaXN0OiBudW1iZXIgfSA9PiB7XG4gIGNvbnN0IGRvbWFpblR5cGUgPSBwb3J0RG9tYWluLmRvbWFpblR5cGVzLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSB0eXBlKTtcblxuICBjb25zdCBbbmV0LCBsaXN0XSA9IGRvbWFpblR5cGU/LnJlY29tbWVuZGVkUHJpY2VzXG4gICAgPy5maWx0ZXIoKHsgY2hhcmdlTWV0aG9kIH0pID0+IGNoYXJnZU1ldGhvZCA9PT0gJ09ORV9USU1FJylcbiAgICAucmVkdWNlKFxuICAgICAgKGFjYywgcnApID0+IHtcbiAgICAgICAgY29uc3QgW25ldFByaWNlLCBsaXN0UHJpY2VdID0gYWNjO1xuICAgICAgICByZXR1cm4gW25ldFByaWNlICsgcnAubmV0UHJpY2UsIGxpc3RQcmljZSArIHJwLmxpc3RQcmljZV07XG4gICAgICB9LFxuICAgICAgWzAsIDBdLFxuICAgICkgPz8gWzAsIDBdO1xuXG4gIHJldHVybiB7IG5ldCwgbGlzdCB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG11bHRpcGx5TGluZUl0ZW1zID0gKGxpbmVJdGVtOiBMaW5lSXRlbSwgcXR5OiBudW1iZXIsIHNwbGl0OiBib29sZWFuKTogTGluZUl0ZW1bXSA9PiB7XG4gIGlmIChzcGxpdCkge1xuICAgIGNvbnN0IHVuaWZ5SWRzID0gKGxpbmVJdGVtOiBMaW5lSXRlbSk6IExpbmVJdGVtID0+ICh7XG4gICAgICAuLi5saW5lSXRlbSxcbiAgICAgIGlkOiBVVUlELlVVSUQoKSxcbiAgICAgIGxpbmVJdGVtczogbGluZUl0ZW0ubGluZUl0ZW1zLm1hcCh1bmlmeUlkcyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWFwKG5ldyBBcnJheShxdHkpLCAoKSA9PiB1bmlmeUlkcyhsaW5lSXRlbSkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIC4uLmxpbmVJdGVtLFxuICAgICAgICBxdHk6IHF0eSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxufTtcbiJdfQ==
@@ -244,19 +244,28 @@ const replaceLineItem = (lineItem, replaceTo) => {
244
244
  }
245
245
  return Object.assign(Object.assign({}, lineItem), { lineItems: lineItem.lineItems.map(li => replaceLineItem(li, replaceTo)) });
246
246
  };
247
- const recalculateCardinalityVariables = (original, updated) => {
248
- var _a;
249
- const cardinalityVariables = new Map();
250
- for (const li of updated.lineItems) {
247
+ const calculateCardinalityVariables = (lineItems) => {
248
+ const cardVars = new Map();
249
+ lineItems.forEach(li => {
250
+ var _a;
251
251
  const cardinalityVariableName = `#CV-${li.type}@${li.port}`;
252
- cardinalityVariables.set(cardinalityVariableName, ((_a = cardinalityVariables.get(cardinalityVariableName)) !== null && _a !== void 0 ? _a : 0) + li.qty);
253
- }
254
- for (const li of original.lineItems) {
255
- if (updated.lineItems.some(({ id, qty }) => li.id === id && li.qty === qty)) {
256
- const cardinalityVariableName = `#CV-${li.type}@${li.port}`;
257
- cardinalityVariables.delete(cardinalityVariableName);
252
+ cardVars.set(cardinalityVariableName, ((_a = cardVars.get(cardinalityVariableName)) !== null && _a !== void 0 ? _a : 0) + li.qty);
253
+ });
254
+ return cardVars;
255
+ };
256
+ const recalculateCardinalityVariables = (original, updated) => {
257
+ const cardinalityVariables = calculateCardinalityVariables(updated.lineItems);
258
+ const originalCardinalityVariables = calculateCardinalityVariables(original.lineItems);
259
+ originalCardinalityVariables.forEach((value, key) => {
260
+ if (cardinalityVariables.get(key) === value) {
261
+ // no need to update cardinality if no changes
262
+ cardinalityVariables.delete(key);
258
263
  }
259
- }
264
+ else if (!cardinalityVariables.has(key)) {
265
+ // remove last item from port
266
+ cardinalityVariables.set(key, 0);
267
+ }
268
+ });
260
269
  return Object.assign(Object.assign({}, updated), { attributes: upsertAttributes(updated.attributes, [...cardinalityVariables].map(([name, value]) => ({ name, value }))) });
261
270
  };
262
271
  const mapAttributes = (attributes) => {
@@ -325,6 +334,7 @@ var lineItem_utils = /*#__PURE__*/Object.freeze({
325
334
  insertLineItem: insertLineItem,
326
335
  removeLineItem: removeLineItem,
327
336
  replaceLineItem: replaceLineItem,
337
+ calculateCardinalityVariables: calculateCardinalityVariables,
328
338
  recalculateCardinalityVariables: recalculateCardinalityVariables,
329
339
  mapAttributes: mapAttributes,
330
340
  getAttributes: getAttributes,
@@ -1187,5 +1197,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
1187
1197
  * Generated bundle index. Do not edit.
1188
1198
  */
1189
1199
 
1190
- export { ConfigurationRuntimeService, ConfigurationService, ContextService, FlowConfigurationModule, FlowConfigurationService, FlowUpdateService, LineItemWorker, MetricsCalculationService, ProductImagesService, QuoteDraftService, RuntimeMode, RuntimeOperation, RuntimeStep, SdkCoreModule, findLineItem, findLineItemWithComparator, generateLineItem, getAttributeValue, getAttributes, getDefaultLineItem, getRecommendedPrices, insertLineItem, lineItem_utils as lineItemUtils, mapAttributes, multiplyLineItems, patchAttributes, recalculateCardinalityVariables, removeLineItem, replaceLineItem, upsertAttributes };
1200
+ export { ConfigurationRuntimeService, ConfigurationService, ContextService, FlowConfigurationModule, FlowConfigurationService, FlowUpdateService, LineItemWorker, MetricsCalculationService, ProductImagesService, QuoteDraftService, RuntimeMode, RuntimeOperation, RuntimeStep, SdkCoreModule, calculateCardinalityVariables, findLineItem, findLineItemWithComparator, generateLineItem, getAttributeValue, getAttributes, getDefaultLineItem, getRecommendedPrices, insertLineItem, lineItem_utils as lineItemUtils, mapAttributes, multiplyLineItems, patchAttributes, recalculateCardinalityVariables, removeLineItem, replaceLineItem, upsertAttributes };
1191
1201
  //# sourceMappingURL=veloceapps-sdk-core.js.map