@configura/web-api 2.0.0 → 2.1.0-alpha.0

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 (100) hide show
  1. package/.eslintrc.json +5 -5
  2. package/LICENSE +201 -201
  3. package/README.md +1 -1
  4. package/dist/CatalogueAPI.d.ts +622 -622
  5. package/dist/CatalogueAPI.js +329 -329
  6. package/dist/CfgMeasure.d.ts +32 -32
  7. package/dist/CfgMeasure.js +30 -30
  8. package/dist/CfgProduct.d.ts +344 -344
  9. package/dist/CfgProduct.js +990 -991
  10. package/dist/CfgReferencePathHelper.d.ts +26 -26
  11. package/dist/CfgReferencePathHelper.js +26 -26
  12. package/dist/index.d.ts +23 -23
  13. package/dist/index.js +23 -23
  14. package/dist/io/CfgHistoryManager.d.ts +83 -83
  15. package/dist/io/CfgHistoryManager.js +144 -144
  16. package/dist/io/CfgHistoryToProdConfConnector.d.ts +21 -21
  17. package/dist/io/CfgHistoryToProdConfConnector.js +50 -50
  18. package/dist/io/CfgIOManager.d.ts +53 -53
  19. package/dist/io/CfgIOManager.js +134 -134
  20. package/dist/io/CfgIOProdConfConnector.d.ts +54 -64
  21. package/dist/io/CfgIOProdConfConnector.js +137 -149
  22. package/dist/io/CfgIOWarningSupplier.d.ts +3 -3
  23. package/dist/io/CfgIOWarningSupplier.js +1 -1
  24. package/dist/io/CfgObservableStateManager.d.ts +25 -25
  25. package/dist/io/CfgObservableStateManager.js +69 -69
  26. package/dist/io/CfgObservableStateToProdConfConnector.d.ts +15 -14
  27. package/dist/io/CfgObservableStateToProdConfConnector.js +17 -16
  28. package/dist/io/CfgWindowEventManager.d.ts +21 -21
  29. package/dist/io/CfgWindowEventManager.js +38 -38
  30. package/dist/io/CfgWindowMessageManager.d.ts +40 -40
  31. package/dist/io/CfgWindowMessageManager.js +91 -91
  32. package/dist/io/CfgWindowMessageToProdConfConnector.d.ts +17 -16
  33. package/dist/io/CfgWindowMessageToProdConfConnector.js +19 -18
  34. package/dist/io/index.d.ts +8 -8
  35. package/dist/io/index.js +8 -8
  36. package/dist/material/CfgMaterialMapping.d.ts +7 -7
  37. package/dist/material/CfgMaterialMapping.js +181 -181
  38. package/dist/material/CfgMtrlApplication.d.ts +18 -18
  39. package/dist/material/CfgMtrlApplication.js +43 -43
  40. package/dist/material/CfgMtrlApplicationSource.d.ts +7 -7
  41. package/dist/material/CfgMtrlApplicationSource.js +8 -8
  42. package/dist/material/CfgMtrlSource.d.ts +19 -19
  43. package/dist/material/CfgMtrlSource.js +40 -40
  44. package/dist/material/CfgMtrlSourceWithMetaData.d.ts +7 -7
  45. package/dist/material/CfgMtrlSourceWithMetaData.js +1 -1
  46. package/dist/productConfiguration/CfgFeature.d.ts +192 -192
  47. package/dist/productConfiguration/CfgFeature.js +664 -663
  48. package/dist/productConfiguration/CfgOption.d.ts +157 -157
  49. package/dist/productConfiguration/CfgOption.js +444 -444
  50. package/dist/productConfiguration/CfgProductConfiguration.d.ts +128 -128
  51. package/dist/productConfiguration/CfgProductConfiguration.js +331 -331
  52. package/dist/productConfiguration/filters.d.ts +17 -15
  53. package/dist/productConfiguration/filters.js +141 -70
  54. package/dist/productConfiguration/productParamsGenerator.d.ts +15 -15
  55. package/dist/productConfiguration/productParamsGenerator.js +51 -51
  56. package/dist/productConfiguration/utilitiesProductConfiguration.d.ts +17 -17
  57. package/dist/productConfiguration/utilitiesProductConfiguration.js +87 -87
  58. package/dist/productLoader.d.ts +33 -33
  59. package/dist/productLoader.js +49 -49
  60. package/dist/syncGroups/SyncGroupsApplyMode.d.ts +20 -20
  61. package/dist/syncGroups/SyncGroupsApplyMode.js +21 -21
  62. package/dist/syncGroups/SyncGroupsHandler.d.ts +47 -47
  63. package/dist/syncGroups/SyncGroupsHandler.js +370 -370
  64. package/dist/syncGroups/SyncGroupsPathHelper.d.ts +26 -26
  65. package/dist/syncGroups/SyncGroupsPathHelper.js +90 -90
  66. package/dist/syncGroups/SyncGroupsState.d.ts +39 -39
  67. package/dist/syncGroups/SyncGroupsState.js +167 -167
  68. package/dist/syncGroups/SyncGroupsTransaction.d.ts +154 -154
  69. package/dist/syncGroups/SyncGroupsTransaction.js +589 -589
  70. package/dist/tasks/TaskHandler.d.ts +77 -77
  71. package/dist/tasks/TaskHandler.js +276 -276
  72. package/dist/tasks/formats.d.ts +4 -4
  73. package/dist/tasks/formats.js +7 -7
  74. package/dist/tests/testData/collectorForTest.d.ts +73 -73
  75. package/dist/tests/testData/collectorForTest.js +194 -194
  76. package/dist/tests/testData/dummyProductForTest.d.ts +4 -4
  77. package/dist/tests/testData/dummyProductForTest.js +32 -32
  78. package/dist/tests/testData/testDataAdditionalProductInAdditionalProductInProductForTest.d.ts +11 -11
  79. package/dist/tests/testData/testDataAdditionalProductInAdditionalProductInProductForTest.js +282 -282
  80. package/dist/tests/testData/testDataCachedGetProduct.d.ts +5 -5
  81. package/dist/tests/testData/testDataCachedGetProduct.js +187 -187
  82. package/dist/tests/testData/testDataCachedPostValidate.d.ts +7 -7
  83. package/dist/tests/testData/testDataCachedPostValidate.js +185 -185
  84. package/dist/tests/testData/testDataNoAdditionalProductNoPropagateForTest.d.ts +3 -3
  85. package/dist/tests/testData/testDataNoAdditionalProductNoPropagateForTest.js +1099 -1099
  86. package/dist/tests/testData/testDataOptions.d.ts +12 -12
  87. package/dist/tests/testData/testDataOptions.js +60 -60
  88. package/dist/tests/testData/testDataProductAggregatedPrice.d.ts +6 -6
  89. package/dist/tests/testData/testDataProductAggregatedPrice.js +189 -189
  90. package/dist/tests/testData/testDataUpcharge.d.ts +8 -8
  91. package/dist/tests/testData/testDataUpcharge.js +121 -121
  92. package/dist/utilitiesCatalogueData.d.ts +47 -47
  93. package/dist/utilitiesCatalogueData.js +180 -180
  94. package/dist/utilitiesCataloguePermission.d.ts +38 -38
  95. package/dist/utilitiesCataloguePermission.js +79 -79
  96. package/dist/{ConfigurationConverter.d.ts → utilitiesConfiguration.d.ts} +29 -18
  97. package/dist/{ConfigurationConverter.js → utilitiesConfiguration.js} +200 -175
  98. package/dist/utilitiesNumericValues.d.ts +24 -24
  99. package/dist/utilitiesNumericValues.js +114 -114
  100. package/package.json +3 -3
@@ -1,181 +1,181 @@
1
- import { CfgMtrlSourceBuffer, CfgMtrlSourceUrl } from "./CfgMtrlSource.js";
2
- // In this file an "application" is a combination of 0..1 Material (Mtrl) and 0..m AreaTags.
3
- // These can exist on Catalogue-level (Application Areas), Product-level, in the Feature-Options
4
- // tree (Configuration) and for the sake of debugging, locally as debug overrides.
5
- //
6
- // What this file is about is reducing/aggregating/compiling this to a simple map which says that
7
- // Area1 should have material Jeans etc. The code is written to match the behavior in CET.
8
- //
9
- // Side note: There is no connection in material application between products
10
- // in a product with additional products. So there exists no methods for
11
- // aggregating over multiple products at all.
12
- /**
13
- * When there are multiple applications on the same node we need to reduce these to what is
14
- * actually applied. The cases where there multiple applications on the same node affecting the
15
- * same thing are probably user errors i Catalogue Creator. However, Catalogue Creator allows the
16
- * user to let them slip through, so we need to handle them the same way CET does.
17
- */
18
- const reduceApplications = (applications, skipNoMtrl = false) => applications.reduce((acc, application) => {
19
- const { areaTags, mtrl } = application;
20
- // Applications which have a Mtrl but no AreaTags only have meaning on Option nodes. That
21
- // specific case is handled separately, so here we require AreaTags to be set.
22
- if (areaTags === undefined || areaTags.length === 0 || (skipNoMtrl && mtrl === undefined)) {
23
- return acc;
24
- }
25
- const materialSource = mtrl && {
26
- mtrl,
27
- source: application,
28
- overriddenByOption: false,
29
- };
30
- for (const areaTag of areaTags) {
31
- // The rule here is use the first found. This is opposite to the rule when
32
- // aggregating the tree, where the latest one found is applied
33
- if (acc.has(areaTag)) {
34
- continue;
35
- }
36
- acc.set(areaTag, materialSource);
37
- }
38
- return acc;
39
- }, new Map());
40
- export function aggregateAllMaterialApplications(applicationAreas, productMtrlApplications, productConfiguration, debugMtrlApplications = []) {
41
- const areasToMaterials = new Map();
42
- for (const [areaTag, mtrlSource] of reduceApplications(applicationAreas)) {
43
- // When Mtrl is missing there is no fallback to later Applications in the
44
- // same node. This is consistent with CET
45
- if (mtrlSource === undefined) {
46
- continue;
47
- }
48
- areasToMaterials.set(areaTag, mtrlSource);
49
- }
50
- // On Product level there is fallback if Mtrl is missing, so we pass true
51
- // to make it skip over Mtrl-less Applications
52
- for (const [areaTag, mtrlSource] of reduceApplications(productMtrlApplications, true)) {
53
- if (mtrlSource === undefined) {
54
- throw new Error("Should not happen");
55
- }
56
- areasToMaterials.set(areaTag, mtrlSource);
57
- }
58
- // We can not pass areasToMaterials directly to aggregateForFeature. This is because
59
- // an Application with AreaTags but no Mtrl is effectively a "reset". It's like saying
60
- // "no material". But that reset should only work for the stuff that comes from the
61
- // Configuration. So we must make sure we don't touch what we found from Application
62
- // Areas and Product.
63
- const configurationAreasToMaterials = new Map();
64
- for (const feature of productConfiguration.features) {
65
- // Later always beats deeper
66
- aggregateForFeature(feature, configurationAreasToMaterials);
67
- }
68
- for (const [areaTag, mtrlSource] of configurationAreasToMaterials) {
69
- areasToMaterials.set(areaTag, mtrlSource);
70
- }
71
- // Debug Applications we just let bulldozer over everything else.
72
- for (const debugMtrlApplication of debugMtrlApplications) {
73
- const { areaTags, mtrl } = debugMtrlApplication;
74
- if (mtrl === undefined) {
75
- continue;
76
- }
77
- for (const areaTag of areaTags || []) {
78
- areasToMaterials.set(areaTag, {
79
- mtrl: mtrl,
80
- source: debugMtrlApplication,
81
- overriddenByOption: false,
82
- });
83
- }
84
- }
85
- return areasToMaterials;
86
- }
87
- /**
88
- * For this Feature and it's descendants, compile the Applications into the passed areasToMaterials.
89
- */
90
- function aggregateForFeature(feature, areasToMaterials, areasOpenForOverrideInOption = new Set()) {
91
- const featureMtrlApplications = feature._internal.mtrlApplications;
92
- for (const [areaTag, mtrlSource] of reduceApplications(featureMtrlApplications)) {
93
- // As soon as a Feature sets an areaTag that tag is allowed to have its value
94
- // overridden (or set if it didn't have a value from the start) by an option.
95
- // This option has to have an Application with a Mtrl but no AreaTags.
96
- // And it can only be done once - the first option found which fulfills the
97
- // requirements will do the override. The option does not even need to be a
98
- // descendant of the Feature. After this the value is fixed until
99
- // a Feature or an Option comes along with the AreaTag set.
100
- // That will then reset the process, and if it was on a Feature it opens for
101
- // override again.
102
- areasOpenForOverrideInOption.add(areaTag);
103
- if (mtrlSource === undefined) {
104
- areasToMaterials.delete(areaTag);
105
- }
106
- else {
107
- areasToMaterials.set(areaTag, mtrlSource);
108
- }
109
- }
110
- for (const option of feature.selectedOptions) {
111
- aggregateForOption(option, areasToMaterials, areasOpenForOverrideInOption);
112
- }
113
- }
114
- function aggregateForOption(option, areasToMaterials, areasOpenForOverrideInOption) {
115
- const optionMtrlApplications = option._internal.mtrlApplications;
116
- // The last mtrl with no areaTag can be used for areasOpenForOverrideInOption
117
- if (areasOpenForOverrideInOption.size !== 0) {
118
- // Fast backwards loop
119
- let i = optionMtrlApplications.length;
120
- while (i--) {
121
- const optionMtrlApplication = optionMtrlApplications[i];
122
- const { areaTags, mtrl } = optionMtrlApplication;
123
- if ((areaTags !== undefined && areaTags.length !== 0) || mtrl === undefined) {
124
- // Only Applications with a Mtrl but no AreaTags can be used for overrides
125
- continue;
126
- }
127
- const mtrlSource = {
128
- mtrl,
129
- source: optionMtrlApplication,
130
- overriddenByOption: true,
131
- };
132
- for (const areaTag of areasOpenForOverrideInOption) {
133
- areasToMaterials.set(areaTag, mtrlSource);
134
- }
135
- areasOpenForOverrideInOption.clear();
136
- break;
137
- }
138
- }
139
- // reduceApplications will filter out Applications with AreaTags. So there will
140
- // be no overlap between Applications used for Override and Applications used
141
- // for immediately setting.
142
- for (const [areaTag, mtrlSource] of reduceApplications(optionMtrlApplications)) {
143
- if (mtrlSource === undefined) {
144
- // An Application on an Option with no Mtrl opens up for a future option
145
- // to set the Mtrl (the overridden has to be an option with a Mtrl and no Area)
146
- areasOpenForOverrideInOption.add(areaTag);
147
- areasToMaterials.delete(areaTag);
148
- }
149
- else {
150
- areasToMaterials.set(areaTag, mtrlSource);
151
- }
152
- }
153
- for (const feature of option.features || []) {
154
- aggregateForFeature(feature, areasToMaterials, areasOpenForOverrideInOption);
155
- }
156
- }
157
- export function logMtrlSourceWithMetaDataToConsole(mtrlSourceWithMetaData) {
158
- const tableData = {
159
- Source: mtrlSourceWithMetaData.source.source,
160
- OverriddenByOption: mtrlSourceWithMetaData.overriddenByOption ? "Yes" : "No",
161
- };
162
- const mtrl = mtrlSourceWithMetaData.mtrl;
163
- if (mtrl instanceof CfgMtrlSourceUrl) {
164
- tableData["From prop"] = mtrl.urlIsFromProperty;
165
- tableData["url"] = mtrl.url;
166
- }
167
- if (mtrl instanceof CfgMtrlSourceBuffer) {
168
- tableData["FileName"] = mtrl.fileName;
169
- }
170
- console.table(tableData);
171
- }
172
- export function logMaterialMappingToConsole(areasToMaterials) {
173
- const sorted = Array.from(areasToMaterials);
174
- sorted.sort((left, right) => left[0].toLocaleLowerCase().localeCompare(right[0].toLocaleLowerCase()));
175
- for (const areaToMaterial of sorted) {
176
- const [tag, mtrlSourceWithMetaData] = areaToMaterial;
177
- console.groupCollapsed(`"${tag}"`);
178
- logMtrlSourceWithMetaDataToConsole(mtrlSourceWithMetaData);
179
- console.groupEnd();
180
- }
181
- }
1
+ import { CfgMtrlSourceBuffer, CfgMtrlSourceUrl } from "./CfgMtrlSource.js";
2
+ // In this file an "application" is a combination of 0..1 Material (Mtrl) and 0..m AreaTags.
3
+ // These can exist on Catalogue-level (Application Areas), Product-level, in the Feature-Options
4
+ // tree (Configuration) and for the sake of debugging, locally as debug overrides.
5
+ //
6
+ // What this file is about is reducing/aggregating/compiling this to a simple map which says that
7
+ // Area1 should have material Jeans etc. The code is written to match the behavior in CET.
8
+ //
9
+ // Side note: There is no connection in material application between products
10
+ // in a product with additional products. So there exists no methods for
11
+ // aggregating over multiple products at all.
12
+ /**
13
+ * When there are multiple applications on the same node we need to reduce these to what is
14
+ * actually applied. The cases where there multiple applications on the same node affecting the
15
+ * same thing are probably user errors i Catalogue Creator. However, Catalogue Creator allows the
16
+ * user to let them slip through, so we need to handle them the same way CET does.
17
+ */
18
+ const reduceApplications = (applications, skipNoMtrl = false) => applications.reduce((acc, application) => {
19
+ const { areaTags, mtrl } = application;
20
+ // Applications which have a Mtrl but no AreaTags only have meaning on Option nodes. That
21
+ // specific case is handled separately, so here we require AreaTags to be set.
22
+ if (areaTags === undefined || areaTags.length === 0 || (skipNoMtrl && mtrl === undefined)) {
23
+ return acc;
24
+ }
25
+ const materialSource = mtrl && {
26
+ mtrl,
27
+ source: application,
28
+ overriddenByOption: false,
29
+ };
30
+ for (const areaTag of areaTags) {
31
+ // The rule here is use the first found. This is opposite to the rule when
32
+ // aggregating the tree, where the latest one found is applied
33
+ if (acc.has(areaTag)) {
34
+ continue;
35
+ }
36
+ acc.set(areaTag, materialSource);
37
+ }
38
+ return acc;
39
+ }, new Map());
40
+ export function aggregateAllMaterialApplications(applicationAreas, productMtrlApplications, productConfiguration, debugMtrlApplications = []) {
41
+ const areasToMaterials = new Map();
42
+ for (const [areaTag, mtrlSource] of reduceApplications(applicationAreas)) {
43
+ // When Mtrl is missing there is no fallback to later Applications in the
44
+ // same node. This is consistent with CET
45
+ if (mtrlSource === undefined) {
46
+ continue;
47
+ }
48
+ areasToMaterials.set(areaTag, mtrlSource);
49
+ }
50
+ // On Product level there is fallback if Mtrl is missing, so we pass true
51
+ // to make it skip over Mtrl-less Applications
52
+ for (const [areaTag, mtrlSource] of reduceApplications(productMtrlApplications, true)) {
53
+ if (mtrlSource === undefined) {
54
+ throw new Error("Should not happen");
55
+ }
56
+ areasToMaterials.set(areaTag, mtrlSource);
57
+ }
58
+ // We can not pass areasToMaterials directly to aggregateForFeature. This is because
59
+ // an Application with AreaTags but no Mtrl is effectively a "reset". It's like saying
60
+ // "no material". But that reset should only work for the stuff that comes from the
61
+ // Configuration. So we must make sure we don't touch what we found from Application
62
+ // Areas and Product.
63
+ const configurationAreasToMaterials = new Map();
64
+ for (const feature of productConfiguration.features) {
65
+ // Later always beats deeper
66
+ aggregateForFeature(feature, configurationAreasToMaterials);
67
+ }
68
+ for (const [areaTag, mtrlSource] of configurationAreasToMaterials) {
69
+ areasToMaterials.set(areaTag, mtrlSource);
70
+ }
71
+ // Debug Applications we just let bulldozer over everything else.
72
+ for (const debugMtrlApplication of debugMtrlApplications) {
73
+ const { areaTags, mtrl } = debugMtrlApplication;
74
+ if (mtrl === undefined) {
75
+ continue;
76
+ }
77
+ for (const areaTag of areaTags || []) {
78
+ areasToMaterials.set(areaTag, {
79
+ mtrl: mtrl,
80
+ source: debugMtrlApplication,
81
+ overriddenByOption: false,
82
+ });
83
+ }
84
+ }
85
+ return areasToMaterials;
86
+ }
87
+ /**
88
+ * For this Feature and it's descendants, compile the Applications into the passed areasToMaterials.
89
+ */
90
+ function aggregateForFeature(feature, areasToMaterials, areasOpenForOverrideInOption = new Set()) {
91
+ const featureMtrlApplications = feature._internal.mtrlApplications;
92
+ for (const [areaTag, mtrlSource] of reduceApplications(featureMtrlApplications)) {
93
+ // As soon as a Feature sets an areaTag that tag is allowed to have its value
94
+ // overridden (or set if it didn't have a value from the start) by an option.
95
+ // This option has to have an Application with a Mtrl but no AreaTags.
96
+ // And it can only be done once - the first option found which fulfills the
97
+ // requirements will do the override. The option does not even need to be a
98
+ // descendant of the Feature. After this the value is fixed until
99
+ // a Feature or an Option comes along with the AreaTag set.
100
+ // That will then reset the process, and if it was on a Feature it opens for
101
+ // override again.
102
+ areasOpenForOverrideInOption.add(areaTag);
103
+ if (mtrlSource === undefined) {
104
+ areasToMaterials.delete(areaTag);
105
+ }
106
+ else {
107
+ areasToMaterials.set(areaTag, mtrlSource);
108
+ }
109
+ }
110
+ for (const option of feature.selectedOptions) {
111
+ aggregateForOption(option, areasToMaterials, areasOpenForOverrideInOption);
112
+ }
113
+ }
114
+ function aggregateForOption(option, areasToMaterials, areasOpenForOverrideInOption) {
115
+ const optionMtrlApplications = option._internal.mtrlApplications;
116
+ // The last mtrl with no areaTag can be used for areasOpenForOverrideInOption
117
+ if (areasOpenForOverrideInOption.size !== 0) {
118
+ // Fast backwards loop
119
+ let i = optionMtrlApplications.length;
120
+ while (i--) {
121
+ const optionMtrlApplication = optionMtrlApplications[i];
122
+ const { areaTags, mtrl } = optionMtrlApplication;
123
+ if ((areaTags !== undefined && areaTags.length !== 0) || mtrl === undefined) {
124
+ // Only Applications with a Mtrl but no AreaTags can be used for overrides
125
+ continue;
126
+ }
127
+ const mtrlSource = {
128
+ mtrl,
129
+ source: optionMtrlApplication,
130
+ overriddenByOption: true,
131
+ };
132
+ for (const areaTag of areasOpenForOverrideInOption) {
133
+ areasToMaterials.set(areaTag, mtrlSource);
134
+ }
135
+ areasOpenForOverrideInOption.clear();
136
+ break;
137
+ }
138
+ }
139
+ // reduceApplications will filter out Applications with AreaTags. So there will
140
+ // be no overlap between Applications used for Override and Applications used
141
+ // for immediately setting.
142
+ for (const [areaTag, mtrlSource] of reduceApplications(optionMtrlApplications)) {
143
+ if (mtrlSource === undefined) {
144
+ // An Application on an Option with no Mtrl opens up for a future option
145
+ // to set the Mtrl (the overridden has to be an option with a Mtrl and no Area)
146
+ areasOpenForOverrideInOption.add(areaTag);
147
+ areasToMaterials.delete(areaTag);
148
+ }
149
+ else {
150
+ areasToMaterials.set(areaTag, mtrlSource);
151
+ }
152
+ }
153
+ for (const feature of option.features || []) {
154
+ aggregateForFeature(feature, areasToMaterials, areasOpenForOverrideInOption);
155
+ }
156
+ }
157
+ export function logMtrlSourceWithMetaDataToConsole(mtrlSourceWithMetaData) {
158
+ const tableData = {
159
+ Source: mtrlSourceWithMetaData.source.source,
160
+ OverriddenByOption: mtrlSourceWithMetaData.overriddenByOption ? "Yes" : "No",
161
+ };
162
+ const mtrl = mtrlSourceWithMetaData.mtrl;
163
+ if (mtrl instanceof CfgMtrlSourceUrl) {
164
+ tableData["From prop"] = mtrl.urlIsFromProperty;
165
+ tableData["url"] = mtrl.url;
166
+ }
167
+ if (mtrl instanceof CfgMtrlSourceBuffer) {
168
+ tableData["FileName"] = mtrl.fileName;
169
+ }
170
+ console.table(tableData);
171
+ }
172
+ export function logMaterialMappingToConsole(areasToMaterials) {
173
+ const sorted = Array.from(areasToMaterials);
174
+ sorted.sort((left, right) => left[0].toLocaleLowerCase().localeCompare(right[0].toLocaleLowerCase()));
175
+ for (const areaToMaterial of sorted) {
176
+ const [tag, mtrlSourceWithMetaData] = areaToMaterial;
177
+ console.groupCollapsed(`"${tag}"`);
178
+ logMtrlSourceWithMetaDataToConsole(mtrlSourceWithMetaData);
179
+ console.groupEnd();
180
+ }
181
+ }
@@ -1,19 +1,19 @@
1
- import { DtoApplicationArea, DtoMtrlApplication } from "../CatalogueAPI.js";
2
- import { CfgMtrlApplicationSource } from "./CfgMtrlApplicationSource.js";
3
- import { CfgMtrlSource } from "./CfgMtrlSource.js";
4
- export declare class CfgMtrlApplication {
5
- private _source;
6
- private _areaTags;
7
- private _mtrl;
8
- private _previewUrl;
9
- static fromUrlForDebug(areaTags: string[], url: string): CfgMtrlApplication;
10
- static fromBufferForDebug(areaTags: string[], fileName: string, buffer: ArrayBuffer): CfgMtrlApplication;
11
- private static fromMtrlSourceForDebug;
12
- static fromMtrlLikeApplication(source: CfgMtrlApplicationSource, application: DtoApplicationArea | DtoMtrlApplication): CfgMtrlApplication;
13
- private constructor();
14
- get source(): CfgMtrlApplicationSource;
15
- get areaTags(): string[] | undefined;
16
- get mtrl(): CfgMtrlSource | undefined;
17
- get previewUrl(): string | undefined;
18
- }
1
+ import { DtoApplicationArea, DtoMtrlApplication } from "../CatalogueAPI.js";
2
+ import { CfgMtrlApplicationSource } from "./CfgMtrlApplicationSource.js";
3
+ import { CfgMtrlSource } from "./CfgMtrlSource.js";
4
+ export declare class CfgMtrlApplication {
5
+ private _source;
6
+ private _areaTags;
7
+ private _mtrl;
8
+ private _previewUrl;
9
+ static fromUrlForDebug(areaTags: string[], url: string): CfgMtrlApplication;
10
+ static fromBufferForDebug(areaTags: string[], fileName: string, buffer: ArrayBuffer): CfgMtrlApplication;
11
+ private static fromMtrlSourceForDebug;
12
+ static fromMtrlLikeApplication(source: CfgMtrlApplicationSource, application: DtoApplicationArea | DtoMtrlApplication): CfgMtrlApplication;
13
+ private constructor();
14
+ get source(): CfgMtrlApplicationSource;
15
+ get areaTags(): string[] | undefined;
16
+ get mtrl(): CfgMtrlSource | undefined;
17
+ get previewUrl(): string | undefined;
18
+ }
19
19
  //# sourceMappingURL=CfgMtrlApplication.d.ts.map
@@ -1,43 +1,43 @@
1
- import { CfgMtrlApplicationSource } from "./CfgMtrlApplicationSource.js";
2
- import { CfgMtrlSourceBuffer, CfgMtrlSourceUrl } from "./CfgMtrlSource.js";
3
- export class CfgMtrlApplication {
4
- constructor(_source, _areaTags, _mtrl, _previewUrl) {
5
- this._source = _source;
6
- this._areaTags = _areaTags;
7
- this._mtrl = _mtrl;
8
- this._previewUrl = _previewUrl;
9
- }
10
- static fromUrlForDebug(areaTags, url) {
11
- return this.fromMtrlSourceForDebug(areaTags, new CfgMtrlSourceUrl(url, "debug"));
12
- }
13
- static fromBufferForDebug(areaTags, fileName, buffer) {
14
- return this.fromMtrlSourceForDebug(areaTags, new CfgMtrlSourceBuffer(fileName, buffer));
15
- }
16
- static fromMtrlSourceForDebug(areaTags, mtrlSource) {
17
- const ts = areaTags.filter((t) => t.trim() !== "");
18
- if (ts.length === 0) {
19
- throw Error("No tags");
20
- }
21
- return new this(CfgMtrlApplicationSource.Debug, areaTags, mtrlSource, undefined);
22
- }
23
- static fromMtrlLikeApplication(source, application) {
24
- const materialUrl = application.material;
25
- const previewUrl = application.preview;
26
- const url = materialUrl || previewUrl;
27
- const urlIsFromProperty = materialUrl ? "material" : "preview";
28
- const mtrl = url ? new CfgMtrlSourceUrl(url, urlIsFromProperty) : undefined;
29
- return new this(source, application.areas, mtrl, previewUrl);
30
- }
31
- get source() {
32
- return this._source;
33
- }
34
- get areaTags() {
35
- return this._areaTags;
36
- }
37
- get mtrl() {
38
- return this._mtrl;
39
- }
40
- get previewUrl() {
41
- return this._previewUrl;
42
- }
43
- }
1
+ import { CfgMtrlApplicationSource } from "./CfgMtrlApplicationSource.js";
2
+ import { CfgMtrlSourceBuffer, CfgMtrlSourceUrl } from "./CfgMtrlSource.js";
3
+ export class CfgMtrlApplication {
4
+ constructor(_source, _areaTags, _mtrl, _previewUrl) {
5
+ this._source = _source;
6
+ this._areaTags = _areaTags;
7
+ this._mtrl = _mtrl;
8
+ this._previewUrl = _previewUrl;
9
+ }
10
+ static fromUrlForDebug(areaTags, url) {
11
+ return this.fromMtrlSourceForDebug(areaTags, new CfgMtrlSourceUrl(url, "debug"));
12
+ }
13
+ static fromBufferForDebug(areaTags, fileName, buffer) {
14
+ return this.fromMtrlSourceForDebug(areaTags, new CfgMtrlSourceBuffer(fileName, buffer));
15
+ }
16
+ static fromMtrlSourceForDebug(areaTags, mtrlSource) {
17
+ const ts = areaTags.filter((t) => t.trim() !== "");
18
+ if (ts.length === 0) {
19
+ throw Error("No tags");
20
+ }
21
+ return new this(CfgMtrlApplicationSource.Debug, areaTags, mtrlSource, undefined);
22
+ }
23
+ static fromMtrlLikeApplication(source, application) {
24
+ const materialUrl = application.material;
25
+ const previewUrl = application.preview;
26
+ const url = materialUrl || previewUrl;
27
+ const urlIsFromProperty = materialUrl ? "material" : "preview";
28
+ const mtrl = url ? new CfgMtrlSourceUrl(url, urlIsFromProperty) : undefined;
29
+ return new this(source, application.areas, mtrl, previewUrl);
30
+ }
31
+ get source() {
32
+ return this._source;
33
+ }
34
+ get areaTags() {
35
+ return this._areaTags;
36
+ }
37
+ get mtrl() {
38
+ return this._mtrl;
39
+ }
40
+ get previewUrl() {
41
+ return this._previewUrl;
42
+ }
43
+ }
@@ -1,8 +1,8 @@
1
- export declare enum CfgMtrlApplicationSource {
2
- ApplicationArea = "ApplicationArea",
3
- Product = "Product",
4
- Feature = "Feature",
5
- Option = "Option",
6
- Debug = "Debug"
7
- }
1
+ export declare enum CfgMtrlApplicationSource {
2
+ ApplicationArea = "ApplicationArea",
3
+ Product = "Product",
4
+ Feature = "Feature",
5
+ Option = "Option",
6
+ Debug = "Debug"
7
+ }
8
8
  //# sourceMappingURL=CfgMtrlApplicationSource.d.ts.map
@@ -1,8 +1,8 @@
1
- export var CfgMtrlApplicationSource;
2
- (function (CfgMtrlApplicationSource) {
3
- CfgMtrlApplicationSource["ApplicationArea"] = "ApplicationArea";
4
- CfgMtrlApplicationSource["Product"] = "Product";
5
- CfgMtrlApplicationSource["Feature"] = "Feature";
6
- CfgMtrlApplicationSource["Option"] = "Option";
7
- CfgMtrlApplicationSource["Debug"] = "Debug";
8
- })(CfgMtrlApplicationSource || (CfgMtrlApplicationSource = {}));
1
+ export var CfgMtrlApplicationSource;
2
+ (function (CfgMtrlApplicationSource) {
3
+ CfgMtrlApplicationSource["ApplicationArea"] = "ApplicationArea";
4
+ CfgMtrlApplicationSource["Product"] = "Product";
5
+ CfgMtrlApplicationSource["Feature"] = "Feature";
6
+ CfgMtrlApplicationSource["Option"] = "Option";
7
+ CfgMtrlApplicationSource["Debug"] = "Debug";
8
+ })(CfgMtrlApplicationSource || (CfgMtrlApplicationSource = {}));
@@ -1,20 +1,20 @@
1
- export declare abstract class CfgMtrlSource {
2
- abstract isSame(other: CfgMtrlSource): boolean;
3
- }
4
- export declare class CfgMtrlSourceUrl extends CfgMtrlSource {
5
- private _url;
6
- private _urlIsFromProperty;
7
- constructor(_url: string, _urlIsFromProperty: string);
8
- get url(): string;
9
- get urlIsFromProperty(): string;
10
- isSame(other: CfgMtrlSource): boolean;
11
- }
12
- export declare class CfgMtrlSourceBuffer extends CfgMtrlSource {
13
- private _fileName;
14
- private _buffer;
15
- constructor(_fileName: string, _buffer: ArrayBuffer);
16
- get fileName(): string;
17
- get buffer(): ArrayBuffer;
18
- isSame(other: CfgMtrlSource): boolean;
19
- }
1
+ export declare abstract class CfgMtrlSource {
2
+ abstract isSame(other: CfgMtrlSource): boolean;
3
+ }
4
+ export declare class CfgMtrlSourceUrl extends CfgMtrlSource {
5
+ private _url;
6
+ private _urlIsFromProperty;
7
+ constructor(_url: string, _urlIsFromProperty: string);
8
+ get url(): string;
9
+ get urlIsFromProperty(): string;
10
+ isSame(other: CfgMtrlSource): boolean;
11
+ }
12
+ export declare class CfgMtrlSourceBuffer extends CfgMtrlSource {
13
+ private _fileName;
14
+ private _buffer;
15
+ constructor(_fileName: string, _buffer: ArrayBuffer);
16
+ get fileName(): string;
17
+ get buffer(): ArrayBuffer;
18
+ isSame(other: CfgMtrlSource): boolean;
19
+ }
20
20
  //# sourceMappingURL=CfgMtrlSource.d.ts.map
@@ -1,40 +1,40 @@
1
- export class CfgMtrlSource {
2
- }
3
- export class CfgMtrlSourceUrl extends CfgMtrlSource {
4
- constructor(_url, _urlIsFromProperty) {
5
- super();
6
- this._url = _url;
7
- this._urlIsFromProperty = _urlIsFromProperty;
8
- }
9
- get url() {
10
- return this._url;
11
- }
12
- get urlIsFromProperty() {
13
- return this._urlIsFromProperty;
14
- }
15
- isSame(other) {
16
- if (!(other instanceof CfgMtrlSourceUrl)) {
17
- return false;
18
- }
19
- return this.url === other.url;
20
- }
21
- }
22
- export class CfgMtrlSourceBuffer extends CfgMtrlSource {
23
- constructor(_fileName, _buffer) {
24
- super();
25
- this._fileName = _fileName;
26
- this._buffer = _buffer;
27
- }
28
- get fileName() {
29
- return this._fileName;
30
- }
31
- get buffer() {
32
- return this._buffer;
33
- }
34
- isSame(other) {
35
- if (!(other instanceof CfgMtrlSourceBuffer)) {
36
- return false;
37
- }
38
- return this.fileName === other.fileName;
39
- }
40
- }
1
+ export class CfgMtrlSource {
2
+ }
3
+ export class CfgMtrlSourceUrl extends CfgMtrlSource {
4
+ constructor(_url, _urlIsFromProperty) {
5
+ super();
6
+ this._url = _url;
7
+ this._urlIsFromProperty = _urlIsFromProperty;
8
+ }
9
+ get url() {
10
+ return this._url;
11
+ }
12
+ get urlIsFromProperty() {
13
+ return this._urlIsFromProperty;
14
+ }
15
+ isSame(other) {
16
+ if (!(other instanceof CfgMtrlSourceUrl)) {
17
+ return false;
18
+ }
19
+ return this.url === other.url;
20
+ }
21
+ }
22
+ export class CfgMtrlSourceBuffer extends CfgMtrlSource {
23
+ constructor(_fileName, _buffer) {
24
+ super();
25
+ this._fileName = _fileName;
26
+ this._buffer = _buffer;
27
+ }
28
+ get fileName() {
29
+ return this._fileName;
30
+ }
31
+ get buffer() {
32
+ return this._buffer;
33
+ }
34
+ isSame(other) {
35
+ if (!(other instanceof CfgMtrlSourceBuffer)) {
36
+ return false;
37
+ }
38
+ return this.fileName === other.fileName;
39
+ }
40
+ }