@salesforce/plugin-bre-to-cml 1.0.2

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.
Files changed (85) hide show
  1. package/LICENSE.txt +206 -0
  2. package/README.md +158 -0
  3. package/lib/commands/cml/convert/prod-cfg-rules.d.ts +29 -0
  4. package/lib/commands/cml/convert/prod-cfg-rules.js +226 -0
  5. package/lib/commands/cml/convert/prod-cfg-rules.js.map +1 -0
  6. package/lib/commands/cml/import/as-expression-set.d.ts +18 -0
  7. package/lib/commands/cml/import/as-expression-set.js +184 -0
  8. package/lib/commands/cml/import/as-expression-set.js.map +1 -0
  9. package/lib/index.d.ts +2 -0
  10. package/lib/index.js +17 -0
  11. package/lib/index.js.map +1 -0
  12. package/lib/shared/bre-rules-generator.d.ts +20 -0
  13. package/lib/shared/bre-rules-generator.js +497 -0
  14. package/lib/shared/bre-rules-generator.js.map +1 -0
  15. package/lib/shared/cml.d.ts +2 -0
  16. package/lib/shared/cml.js +13 -0
  17. package/lib/shared/cml.js.map +1 -0
  18. package/lib/shared/constants/constants.d.ts +94 -0
  19. package/lib/shared/constants/constants.js +109 -0
  20. package/lib/shared/constants/constants.js.map +1 -0
  21. package/lib/shared/grouping.d.ts +4 -0
  22. package/lib/shared/grouping.js +88 -0
  23. package/lib/shared/grouping.js.map +1 -0
  24. package/lib/shared/models.d.ts +65 -0
  25. package/lib/shared/models.js +2 -0
  26. package/lib/shared/models.js.map +1 -0
  27. package/lib/shared/pcm-generator.d.ts +57 -0
  28. package/lib/shared/pcm-generator.js +418 -0
  29. package/lib/shared/pcm-generator.js.map +1 -0
  30. package/lib/shared/pcm-products.d.ts +14 -0
  31. package/lib/shared/pcm-products.js +125 -0
  32. package/lib/shared/pcm-products.js.map +1 -0
  33. package/lib/shared/pcm-products.types.d.ts +99 -0
  34. package/lib/shared/pcm-products.types.js +2 -0
  35. package/lib/shared/pcm-products.types.js.map +1 -0
  36. package/lib/shared/types/association.d.ts +15 -0
  37. package/lib/shared/types/association.js +64 -0
  38. package/lib/shared/types/association.js.map +1 -0
  39. package/lib/shared/types/base/annotated-cml-element-w-attributes.d.ts +10 -0
  40. package/lib/shared/types/base/annotated-cml-element-w-attributes.js +36 -0
  41. package/lib/shared/types/base/annotated-cml-element-w-attributes.js.map +1 -0
  42. package/lib/shared/types/base/annotated-cml-element.d.ts +9 -0
  43. package/lib/shared/types/base/annotated-cml-element.js +39 -0
  44. package/lib/shared/types/base/annotated-cml-element.js.map +1 -0
  45. package/lib/shared/types/base/types.d.ts +2 -0
  46. package/lib/shared/types/base/types.js +18 -0
  47. package/lib/shared/types/base/types.js.map +1 -0
  48. package/lib/shared/types/cml-attribute.d.ts +17 -0
  49. package/lib/shared/types/cml-attribute.js +84 -0
  50. package/lib/shared/types/cml-attribute.js.map +1 -0
  51. package/lib/shared/types/cml-constraint.d.ts +50 -0
  52. package/lib/shared/types/cml-constraint.js +277 -0
  53. package/lib/shared/types/cml-constraint.js.map +1 -0
  54. package/lib/shared/types/cml-domain.d.ts +25 -0
  55. package/lib/shared/types/cml-domain.js +132 -0
  56. package/lib/shared/types/cml-domain.js.map +1 -0
  57. package/lib/shared/types/cml-model.d.ts +39 -0
  58. package/lib/shared/types/cml-model.js +153 -0
  59. package/lib/shared/types/cml-model.js.map +1 -0
  60. package/lib/shared/types/cml-relation.d.ts +31 -0
  61. package/lib/shared/types/cml-relation.js +118 -0
  62. package/lib/shared/types/cml-relation.js.map +1 -0
  63. package/lib/shared/types/cml-type.d.ts +22 -0
  64. package/lib/shared/types/cml-type.js +111 -0
  65. package/lib/shared/types/cml-type.js.map +1 -0
  66. package/lib/shared/types/sobject.d.ts +13 -0
  67. package/lib/shared/types/sobject.js +2 -0
  68. package/lib/shared/types/sobject.js.map +1 -0
  69. package/lib/shared/types/types.d.ts +8 -0
  70. package/lib/shared/types/types.js +24 -0
  71. package/lib/shared/types/types.js.map +1 -0
  72. package/lib/shared/utils/association.utils.d.ts +61 -0
  73. package/lib/shared/utils/association.utils.js +175 -0
  74. package/lib/shared/utils/association.utils.js.map +1 -0
  75. package/lib/shared/utils/common.utils.d.ts +191 -0
  76. package/lib/shared/utils/common.utils.js +338 -0
  77. package/lib/shared/utils/common.utils.js.map +1 -0
  78. package/messages/call.external.service.md +20 -0
  79. package/messages/cml.convert.prod-cfg-rules.md +59 -0
  80. package/messages/cml.import.as-expression-set.md +32 -0
  81. package/messages/connect.org.md +19 -0
  82. package/messages/hello.world.md +29 -0
  83. package/oclif.lock +8313 -0
  84. package/oclif.manifest.json +209 -0
  85. package/package.json +227 -0
@@ -0,0 +1,277 @@
1
+ /*
2
+ * Copyright 2025, Salesforce, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { CONSTRAINT_TYPES } from '../constants/constants.js';
17
+ import { isEmpty } from '../utils/common.utils.js';
18
+ import { AnnotatedCmlElement } from './base/types.js';
19
+ export class CmlConstraint extends AnnotatedCmlElement {
20
+ #type;
21
+ #name = '';
22
+ #declaration;
23
+ #explanation;
24
+ #explanationType;
25
+ #additiveExpressions;
26
+ #targetRelation;
27
+ #targetType;
28
+ #targetAttributes = [];
29
+ #targetQuantity;
30
+ #action;
31
+ #actionScope;
32
+ #actionTarget;
33
+ #actionClassification;
34
+ #actionTargetValues = [];
35
+ #sequence = 0;
36
+ constructor(type, declaration, explanation, explanationType) {
37
+ super();
38
+ this.#type = type;
39
+ this.#declaration = declaration;
40
+ this.#explanation = explanation;
41
+ this.#explanationType = explanationType;
42
+ }
43
+ get type() {
44
+ return this.#type;
45
+ }
46
+ get name() {
47
+ return this.#name;
48
+ }
49
+ get explanation() {
50
+ return this.#explanation;
51
+ }
52
+ get explanationType() {
53
+ return this.#explanationType;
54
+ }
55
+ get declaration() {
56
+ return this.#declaration;
57
+ }
58
+ get targetType() {
59
+ return this.#targetType;
60
+ }
61
+ get targetRelation() {
62
+ return this.#targetRelation;
63
+ }
64
+ get targetAttributes() {
65
+ return (this.#targetAttributes ?? []).map((attr) => ({ ...attr }));
66
+ }
67
+ get targetQuantity() {
68
+ return this.#targetQuantity;
69
+ }
70
+ get action() {
71
+ return this.#action;
72
+ }
73
+ get actionScope() {
74
+ return this.#actionScope;
75
+ }
76
+ get actionTarget() {
77
+ return this.#actionTarget;
78
+ }
79
+ get actionClassification() {
80
+ return this.#actionClassification;
81
+ }
82
+ get actionTargetValues() {
83
+ return this.#actionTargetValues;
84
+ }
85
+ get additiveExpressions() {
86
+ return this.#additiveExpressions;
87
+ }
88
+ get sequence() {
89
+ return this.#sequence;
90
+ }
91
+ set name(name) {
92
+ this.#name = name;
93
+ }
94
+ static createRequireConstraint(type, // 'exclude' | 'require'
95
+ declaration, targetRelation, targetType, explanation, targetAttributes = [], targetQuantity = 1) {
96
+ const requireConstraint = new CmlConstraint(type, declaration, explanation);
97
+ requireConstraint.setTargetRelation(targetRelation);
98
+ requireConstraint.setTargetType(targetType);
99
+ requireConstraint.setTargetAttributes(targetAttributes);
100
+ requireConstraint.setTargetQuantity(targetQuantity);
101
+ return requireConstraint;
102
+ }
103
+ static createRuleConstraint(declaration, action, actionScope, actionTarget, actionClassification, actionTargetValues = []) {
104
+ const ruleConstraint = new CmlConstraint(CONSTRAINT_TYPES.RULE, declaration);
105
+ ruleConstraint.setAction(action);
106
+ ruleConstraint.setActionScope(actionScope);
107
+ ruleConstraint.setActionClassification(actionClassification);
108
+ ruleConstraint.setActionTarget(actionTarget);
109
+ ruleConstraint.setActionTargetValues(actionTargetValues);
110
+ return ruleConstraint;
111
+ }
112
+ static createMessageConstraint(declaration, explanation, explanationType, additiveExpressions) {
113
+ const messageConstraint = new CmlConstraint(CONSTRAINT_TYPES.MESSAGE, declaration, explanation, explanationType);
114
+ messageConstraint.#additiveExpressions = additiveExpressions;
115
+ return messageConstraint;
116
+ }
117
+ setType(type) {
118
+ if (!Object.values(CONSTRAINT_TYPES).includes(type)) {
119
+ throw new Error('InvalidConstraintType'.replace('{0}', type));
120
+ }
121
+ this.#type = type;
122
+ }
123
+ setExplanation(explanation) {
124
+ this.#explanation = explanation;
125
+ }
126
+ setExplanationType(explanationType) {
127
+ this.#explanationType = explanationType;
128
+ }
129
+ setSequence(value) {
130
+ this.#sequence = value;
131
+ }
132
+ setTargetType(value) {
133
+ this.#targetType = value;
134
+ }
135
+ setDeclaration(declaration) {
136
+ this.#declaration = declaration;
137
+ }
138
+ setTargetRelation(value) {
139
+ this.#targetRelation = value;
140
+ }
141
+ setTargetAttributes(attributesArray) {
142
+ this.#targetAttributes = attributesArray.map((attr) => ({ ...attr }));
143
+ }
144
+ setTargetQuantity(value) {
145
+ this.#targetQuantity = value;
146
+ }
147
+ setAction(action) {
148
+ this.#action = action;
149
+ }
150
+ setActionScope(actionScope) {
151
+ this.#actionScope = actionScope;
152
+ }
153
+ setActionTarget(actionTarget) {
154
+ this.#actionTarget = actionTarget;
155
+ }
156
+ setActionClassification(actionClassification) {
157
+ this.#actionClassification = actionClassification;
158
+ }
159
+ setActionTargetValues(actionTargetValues) {
160
+ if (actionTargetValues) {
161
+ this.#actionTargetValues = actionTargetValues.map((value) => value);
162
+ }
163
+ }
164
+ addTargetAttribute(attribute, value) {
165
+ this.#targetAttributes.push({ attributeName: attribute, attributeValue: value });
166
+ }
167
+ removeTargetAttribute(attribute) {
168
+ this.#targetAttributes = this.#targetAttributes.filter((attr) => attr.attributeName !== attribute);
169
+ }
170
+ updateTargetAttribute(index, attribute, value) {
171
+ this.#targetAttributes[index].attributeName = attribute;
172
+ this.#targetAttributes[index].attributeValue = value;
173
+ }
174
+ generateCml() {
175
+ switch (this.#type) {
176
+ case CONSTRAINT_TYPES.CONSTRAINT:
177
+ case CONSTRAINT_TYPES.PREFERENCE: {
178
+ let output = '';
179
+ if (this.hasProperties()) {
180
+ output += this.generateAnnotation() + '\n';
181
+ }
182
+ if (isEmpty(this.#name)) {
183
+ output += `${this.#type}(`;
184
+ }
185
+ else {
186
+ output += `${this.#type} ${this.#name} = (`;
187
+ }
188
+ output += this.#declaration;
189
+ if (this.#explanation) {
190
+ output += `, ${this.#explanation}`;
191
+ }
192
+ output += ');';
193
+ return output;
194
+ }
195
+ case CONSTRAINT_TYPES.MESSAGE: {
196
+ let output = '';
197
+ if (this.hasProperties()) {
198
+ output += this.generateAnnotation() + '\n';
199
+ }
200
+ output += 'message(';
201
+ output += this.#declaration + ' == true';
202
+ if (this.#explanation) {
203
+ output += `, ${this.#explanation}`;
204
+ }
205
+ if (this.#additiveExpressions) {
206
+ output += `, ${this.#additiveExpressions.join(', ')}`;
207
+ }
208
+ if (this.#explanationType) {
209
+ output += `, ${this.#explanationType}`;
210
+ }
211
+ output += ');';
212
+ return output;
213
+ }
214
+ case CONSTRAINT_TYPES.EXCLUDE:
215
+ case CONSTRAINT_TYPES.REQUIRE:
216
+ return this.generateRequireCml();
217
+ case CONSTRAINT_TYPES.RULE:
218
+ return this.generateRuleCml();
219
+ default:
220
+ return this.#declaration;
221
+ }
222
+ }
223
+ generateRequireCml() {
224
+ let output = '';
225
+ if (this.hasProperties()) {
226
+ output += this.generateAnnotation() + '\n';
227
+ }
228
+ output += `${this.#type}(`;
229
+ output += this.#declaration;
230
+ output += ', ';
231
+ output += `${this.targetRelation ?? ''}[`;
232
+ output += `${this.targetType ?? ''}]`;
233
+ if (this.targetAttributes && this.targetAttributes.length > 0) {
234
+ output += ' { ';
235
+ this.targetAttributes.forEach((attr) => {
236
+ output += `${attr.attributeName} = `;
237
+ output += `${attr.attributeValue}, `;
238
+ });
239
+ output = output.slice(0, -2);
240
+ output += ' }';
241
+ }
242
+ if (this.targetQuantity !== 1) {
243
+ output += ` == ${this.#targetQuantity ?? 0}`;
244
+ }
245
+ if (this.#explanation) {
246
+ output += `, ${this.#explanation}`;
247
+ }
248
+ output += ');';
249
+ return output;
250
+ }
251
+ generateRuleCml() {
252
+ let output = '';
253
+ if (this.hasProperties()) {
254
+ output += this.generateAnnotation() + '\n';
255
+ }
256
+ output += 'rule(';
257
+ output += this.declaration;
258
+ output += ', ';
259
+ output += `"${this.action ?? ''}"`;
260
+ output += ', ';
261
+ output += `"${this.actionScope ?? ''}"`;
262
+ output += ', ';
263
+ output += `"${this.actionTarget ?? ''}"`;
264
+ if (this.actionClassification) {
265
+ output += `, "${this.actionClassification}"`;
266
+ }
267
+ if (this.actionTargetValues && this.actionTargetValues.length > 0) {
268
+ const value = this.actionTargetValues.length > 1
269
+ ? `[${this.actionTargetValues.map((v) => `"${v}"`).join(', ')}]`
270
+ : `"${this.actionTargetValues[0] ?? ''}"`;
271
+ output += `, ${value}`;
272
+ }
273
+ output += ');';
274
+ return output;
275
+ }
276
+ }
277
+ //# sourceMappingURL=cml-constraint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cml-constraint.js","sourceRoot":"","sources":["../../../src/shared/types/cml-constraint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export type CmlNumInterval = {
2
+ min: number;
3
+ max: number;
4
+ };
5
+ export type CmlDateInterval = {
6
+ min: Date;
7
+ max: Date;
8
+ };
9
+ export type CmlDomainValueType = string | number | boolean | Date | CmlNumInterval | CmlDateInterval;
10
+ export declare class CmlDomain {
11
+ #private;
12
+ get domainName(): string | undefined;
13
+ get domainValues(): CmlDomainValueType[];
14
+ get isNamedDomain(): boolean;
15
+ get isDomainOfIntervals(): boolean;
16
+ get isDomainOfStringValues(): boolean;
17
+ get isDomainOfDateValues(): boolean;
18
+ get isDomainOfNumbers(): boolean;
19
+ get domainType(): string;
20
+ get editDisplayValue(): string | undefined;
21
+ get displayValue(): string | undefined;
22
+ setDomainName(domainName: string): void;
23
+ setDomainValues(v: CmlDomainValueType[]): void;
24
+ generateCml(): string;
25
+ }
@@ -0,0 +1,132 @@
1
+ /*
2
+ * Copyright 2025, Salesforce, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { formatToCmlDate, formatToDisplayDate, isDateType } from '../utils/common.utils.js';
17
+ export class CmlDomain {
18
+ #domainName;
19
+ #domainValues = [];
20
+ get domainName() {
21
+ return this.#domainName;
22
+ }
23
+ get domainValues() {
24
+ return this.#domainValues;
25
+ }
26
+ get isNamedDomain() {
27
+ // Example: string colors = COLOR_DOMAIN;
28
+ return !!this.#domainName;
29
+ }
30
+ get isDomainOfIntervals() {
31
+ // Example: date goodDate = ['2024-03-21'...'2025-04-01', '2025-06-01'];
32
+ return (Array.isArray(this.#domainValues) &&
33
+ this.#domainValues.every((v) => typeof v === 'object' && v !== null && 'min' in v && 'max' in v));
34
+ }
35
+ get isDomainOfStringValues() {
36
+ // Example: string colors = ["Red", "Green", "Blue"];
37
+ return Array.isArray(this.#domainValues) && this.#domainValues.every((v) => typeof v === 'string');
38
+ }
39
+ get isDomainOfDateValues() {
40
+ // Example: date validDates = ['2024-03-30', '2025-05-02'];
41
+ return Array.isArray(this.#domainValues) && this.#domainValues.every(isDateType);
42
+ }
43
+ get isDomainOfNumbers() {
44
+ // Example: int validNumbers = [1, 5, 6, 9];
45
+ return Array.isArray(this.#domainValues) && this.#domainValues.every((v) => typeof v === 'number');
46
+ }
47
+ get domainType() {
48
+ if (this.isDomainOfStringValues ||
49
+ this.isDomainOfIntervals ||
50
+ this.isDomainOfDateValues ||
51
+ this.isDomainOfNumbers) {
52
+ return 'Value';
53
+ }
54
+ else if (this.isNamedDomain) {
55
+ return 'Named Domain';
56
+ }
57
+ return '';
58
+ }
59
+ get editDisplayValue() {
60
+ if (this.isNamedDomain) {
61
+ return this.#domainName;
62
+ }
63
+ else if (this.isDomainOfDateValues) {
64
+ return this.#domainValues.map((d) => formatToCmlDate(d)).join(', ');
65
+ }
66
+ else if (this.isDomainOfStringValues || this.isDomainOfNumbers) {
67
+ return this.#domainValues.join(', ');
68
+ }
69
+ else if (this.isDomainOfIntervals) {
70
+ return this.#domainValues
71
+ .map((v) => {
72
+ const vi = v;
73
+ const min = isDateType(vi.min) ? formatToCmlDate(vi.min) : vi.min;
74
+ const max = isDateType(vi.max) ? formatToCmlDate(vi.max) : vi.max;
75
+ return min !== max ? `${min}..${max}` : `${max}`;
76
+ })
77
+ .join(', ');
78
+ }
79
+ return '';
80
+ }
81
+ get displayValue() {
82
+ if (this.isDomainOfDateValues) {
83
+ return this.#domainValues.map((d) => formatToDisplayDate(d)).join(', ');
84
+ }
85
+ else if (this.isDomainOfStringValues || this.isDomainOfNumbers) {
86
+ return this.#domainValues.join(', ');
87
+ }
88
+ else if (this.isDomainOfIntervals) {
89
+ return this.#domainValues
90
+ .map((v) => {
91
+ const vi = v;
92
+ const min = isDateType(vi.min) ? formatToDisplayDate(vi.min) : vi.min;
93
+ const max = isDateType(vi.max) ? formatToDisplayDate(vi.max) : vi.max;
94
+ return min !== max ? `${min} - ${max}` : `${max}`;
95
+ })
96
+ .join(', ');
97
+ }
98
+ return this.#domainName;
99
+ }
100
+ setDomainName(domainName) {
101
+ this.#domainName = domainName;
102
+ }
103
+ setDomainValues(v) {
104
+ this.#domainValues = v;
105
+ }
106
+ generateCml() {
107
+ if (this.isNamedDomain) {
108
+ return this.#domainName;
109
+ }
110
+ else if (this.isDomainOfDateValues) {
111
+ return `[${this.#domainValues.map((v) => formatToCmlDate(v)).join(', ')}]`;
112
+ }
113
+ else if (this.isDomainOfStringValues) {
114
+ return `[${this.#domainValues.map((v) => `"${v}"`).join(', ')}]`;
115
+ }
116
+ else if (this.isDomainOfNumbers) {
117
+ return `[${this.#domainValues.map((v) => `${v}`).join(', ')}]`;
118
+ }
119
+ else if (this.isDomainOfIntervals) {
120
+ return `[${this.#domainValues
121
+ .map((v) => {
122
+ const vi = v;
123
+ const min = isDateType(vi.min) ? formatToCmlDate(vi.min) : vi.min;
124
+ const max = isDateType(vi.max) ? formatToCmlDate(vi.max) : vi.max;
125
+ return min !== max ? `${min}..${max}` : `${max}`;
126
+ })
127
+ .join(', ')}]`;
128
+ }
129
+ return '';
130
+ }
131
+ }
132
+ //# sourceMappingURL=cml-domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cml-domain.js","sourceRoot":"","sources":["../../../src/shared/types/cml-domain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { Association, CmlAttribute, CmlType } from './types.js';
2
+ export declare const BASE_LINE_ITEM_TYPE_NAME = "LineItem";
3
+ export declare const VIRTUAL_QUOTE_TYPE_NAME = "VirtualQuote";
4
+ export declare class CmlModel {
5
+ #private;
6
+ get types(): CmlType[];
7
+ get associations(): Association[];
8
+ get externalAttributes(): CmlAttribute[];
9
+ get globalProperties(): unknown[];
10
+ get globalConstants(): unknown[];
11
+ getType(name: string): CmlType | undefined;
12
+ getTypeByProductId(productId: string): CmlType | undefined;
13
+ addType(type: CmlType): void;
14
+ editType(type: CmlType): void;
15
+ deleteType(type: CmlType): void;
16
+ clearAllTypes(): void;
17
+ addAssociation(association: Association): void;
18
+ editAssociation(association: Association): void;
19
+ removeAssociation(associationId: string): void;
20
+ getAssociation(id: string): Association | undefined;
21
+ addExternalAttribute(attribute: CmlAttribute): void;
22
+ getExternalAttribute(name: string): CmlAttribute | undefined;
23
+ addGlobalProperty(property: {
24
+ name: string;
25
+ value: unknown;
26
+ }): void;
27
+ getGlobalProperty(name: string): unknown;
28
+ addGlobalConstant(constant: {
29
+ name: string;
30
+ type: string;
31
+ value: unknown;
32
+ }): void;
33
+ getGlobalConstant(name: string): {
34
+ name: string;
35
+ type: string;
36
+ value: unknown;
37
+ } | undefined;
38
+ generateCml(): string;
39
+ }
@@ -0,0 +1,153 @@
1
+ /*
2
+ * Copyright 2025, Salesforce, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { isEmpty, isSameIds } from '../utils/common.utils.js';
17
+ export const BASE_LINE_ITEM_TYPE_NAME = 'LineItem';
18
+ export const VIRTUAL_QUOTE_TYPE_NAME = 'VirtualQuote';
19
+ export class CmlModel {
20
+ #types = new Map();
21
+ #associations = new Map();
22
+ #externalAttributes = new Map();
23
+ #globalProperties = new Map();
24
+ #globalConstants = new Map();
25
+ get types() {
26
+ return Array.from(this.#types.values());
27
+ }
28
+ get associations() {
29
+ return Array.from(this.#associations.values());
30
+ }
31
+ get externalAttributes() {
32
+ return Array.from(this.#externalAttributes.values());
33
+ }
34
+ get globalProperties() {
35
+ return Array.from(this.#globalProperties.values());
36
+ }
37
+ get globalConstants() {
38
+ return Array.from(this.#globalConstants.values());
39
+ }
40
+ getType(name) {
41
+ return this.#types.get(name);
42
+ }
43
+ getTypeByProductId(productId) {
44
+ return Array.from(this.#types.values()).find((p) => isSameIds(p.productId, productId) || isSameIds(p.basedOnId, productId));
45
+ }
46
+ addType(type) {
47
+ if (isEmpty(type.name)) {
48
+ throw new Error('MissingTypeNameError');
49
+ }
50
+ this.#types.set(type.name, type);
51
+ }
52
+ editType(type) {
53
+ this.#types.set(type.name, type);
54
+ }
55
+ deleteType(type) {
56
+ if (!type.name) {
57
+ throw new Error('MissingTypeNameError');
58
+ }
59
+ if (!this.#types.has(type.name)) {
60
+ throw new Error('MissingTypeError'.replace('{0}', type.name));
61
+ }
62
+ this.#types.delete(type.name);
63
+ }
64
+ clearAllTypes() {
65
+ this.#types = new Map();
66
+ }
67
+ addAssociation(association) {
68
+ if (this.#associations.has(association.id)) {
69
+ throw new Error('AssociationAlreadyExists'.replace('{0}', association.id));
70
+ }
71
+ this.#associations.set(association.id, association);
72
+ }
73
+ editAssociation(association) {
74
+ this.#associations.set(association.id, association);
75
+ }
76
+ removeAssociation(associationId) {
77
+ this.#associations.delete(associationId);
78
+ }
79
+ getAssociation(id) {
80
+ return this.#associations.get(id);
81
+ }
82
+ addExternalAttribute(attribute) {
83
+ if (!attribute.name) {
84
+ throw new Error('MissingExternalVariableName');
85
+ }
86
+ if (this.#externalAttributes.has(attribute.name)) {
87
+ throw new Error('ExternalVariableExists'.replace('{0}', attribute.name));
88
+ }
89
+ this.#externalAttributes.set(attribute.name, attribute);
90
+ }
91
+ getExternalAttribute(name) {
92
+ return this.#externalAttributes.get(name);
93
+ }
94
+ addGlobalProperty(property) {
95
+ if (!property.name) {
96
+ throw new Error('MissingGlobalPropertyName');
97
+ }
98
+ if (this.#globalProperties.has(property.name)) {
99
+ throw new Error('GlobalPropertyExists'.replace('{0}', property.name));
100
+ }
101
+ this.#globalProperties.set(property.name, property.value);
102
+ }
103
+ getGlobalProperty(name) {
104
+ return this.#globalProperties.get(name);
105
+ }
106
+ addGlobalConstant(constant) {
107
+ if (!constant.name) {
108
+ throw new Error('MissingConstantName');
109
+ }
110
+ if (this.#globalConstants.has(constant.name)) {
111
+ throw new Error('GlobalConstantExists'.replace('{0}', constant.name));
112
+ }
113
+ this.#globalConstants.set(constant.name, constant);
114
+ }
115
+ getGlobalConstant(name) {
116
+ return this.#globalConstants.get(name);
117
+ }
118
+ generateCml() {
119
+ const output = [];
120
+ for (const type of this.#types.values()) {
121
+ output.push(type.generateCml());
122
+ }
123
+ return formatIndentation(output.join('\n'));
124
+ }
125
+ }
126
+ function formatIndentation(code) {
127
+ const TAB = ' ';
128
+ const lines = code.split('\n'); // Split the input string by new lines
129
+ let indentationLevel = 0;
130
+ let formattedCode = '';
131
+ lines.forEach((line) => {
132
+ // Check if the line is blank or only contains whitespace
133
+ if (line.trim() === '') {
134
+ // Preserve the blank line without any tabs or indentation
135
+ formattedCode += '\n';
136
+ return; // Continue to the next iteration
137
+ }
138
+ // Trim the line to ignore leading/trailing spaces
139
+ const trimmedLine = line.trim();
140
+ // Decrease indentation level for lines that start with a closing brace `}`
141
+ if (trimmedLine.startsWith('}')) {
142
+ indentationLevel = Math.max(0, indentationLevel - 1);
143
+ }
144
+ // Add the appropriate number of tabs based on the current indentation level
145
+ formattedCode += TAB.repeat(indentationLevel) + trimmedLine + '\n';
146
+ // Increase indentation level for lines that contain an opening brace `{`
147
+ if (trimmedLine.endsWith('{')) {
148
+ indentationLevel++;
149
+ }
150
+ });
151
+ return formattedCode;
152
+ }
153
+ //# sourceMappingURL=cml-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cml-model.js","sourceRoot":"","sources":["../../../src/shared/types/cml-model.ts"],"names":[],"mappings":"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"}