@contrail/flexplm 1.3.2-alpha.c32d413 → 1.4.0-alpha.6954f61

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.
package/CHANGELOG.md CHANGED
@@ -7,10 +7,14 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ## [1.3.2] - 2026-04-24
10
+ ## [1.4.0] - 2026-05-06
11
11
  ### Added
12
12
  - Added `getEntityUsingIdentityService` method to `BaseEntityProcessor` for looking up entities via the identity service using a pool key and property criteria. Returns the resolved entity from the identity's `entityReference`, `undefined` if not found, or throws if multiple matches exist.
13
13
 
14
+ ## [1.3.2] - 2026-05-01
15
+ ### Added
16
+ - Added syncing Size Range properties; they sync as the raw VibeIQ data. For Example: { "sizes": { "30": ["30","32"], "32": ["30","32"]}, "dimension1": {"slug": "width","label": "Width"}, "dimension2": {"slug": "length", "label": "Length"}}
17
+
14
18
  ## [1.3.0] - 2026-04-15
15
19
  ### Added
16
20
  - Added inbound thumbnail/primary content syncing from FlexPLM to VibeIQ via `ThumbnailUtil.syncThumbnailToVibeIQ`.
@@ -4,5 +4,6 @@ export declare class ConfigDefaults {
4
4
  static STATIC_CONFIG_CACHE: {};
5
5
  static setConfigDefaults(config: any): Promise<FCConfig>;
6
6
  static getConfigFile(fileId: string): Promise<any>;
7
+ static isPropertyTrue(value: any): boolean;
7
8
  static clearConfigCache(): void;
8
9
  }
@@ -76,6 +76,9 @@ class ConfigDefaults {
76
76
  return {};
77
77
  }
78
78
  }
79
+ static isPropertyTrue(value) {
80
+ return value === true || (typeof value === 'string' && value.toLowerCase() === 'true');
81
+ }
79
82
  static clearConfigCache() {
80
83
  ConfigDefaults.STATIC_CONFIG_CACHE = {};
81
84
  }
@@ -264,6 +264,38 @@ describe('all tests', () => {
264
264
  }
265
265
  });
266
266
  });
267
+ describe('isPropertyTrue', () => {
268
+ it('returns true for boolean true', () => {
269
+ expect(config_defaults_1.ConfigDefaults.isPropertyTrue(true)).toBe(true);
270
+ });
271
+ it('returns true for string true', () => {
272
+ expect(config_defaults_1.ConfigDefaults.isPropertyTrue('true')).toBe(true);
273
+ });
274
+ it('returns true for string TRUE', () => {
275
+ expect(config_defaults_1.ConfigDefaults.isPropertyTrue('TRUE')).toBe(true);
276
+ });
277
+ it('returns true for string True', () => {
278
+ expect(config_defaults_1.ConfigDefaults.isPropertyTrue('True')).toBe(true);
279
+ });
280
+ it('returns false for boolean false', () => {
281
+ expect(config_defaults_1.ConfigDefaults.isPropertyTrue(false)).toBe(false);
282
+ });
283
+ it('returns false for string false', () => {
284
+ expect(config_defaults_1.ConfigDefaults.isPropertyTrue('false')).toBe(false);
285
+ });
286
+ it('returns false for null', () => {
287
+ expect(config_defaults_1.ConfigDefaults.isPropertyTrue(null)).toBe(false);
288
+ });
289
+ it('returns false for undefined', () => {
290
+ expect(config_defaults_1.ConfigDefaults.isPropertyTrue(undefined)).toBe(false);
291
+ });
292
+ it('returns false for empty string', () => {
293
+ expect(config_defaults_1.ConfigDefaults.isPropertyTrue('')).toBe(false);
294
+ });
295
+ it('returns false for number 1', () => {
296
+ expect(config_defaults_1.ConfigDefaults.isPropertyTrue(1)).toBe(false);
297
+ });
298
+ });
267
299
  describe('getConfigFile', () => {
268
300
  beforeEach(() => {
269
301
  config_defaults_1.ConfigDefaults.clearConfigCache();
@@ -110,6 +110,9 @@ class DataConverter {
110
110
  else if ('userList' === propertyType) {
111
111
  value = await this.getUserListValue(prop, newData);
112
112
  }
113
+ else if ('size_range' === propertyType) {
114
+ value = nd;
115
+ }
113
116
  return value;
114
117
  }
115
118
  getEnumerationValue(prop, nd) {
@@ -291,6 +294,9 @@ class DataConverter {
291
294
  else if ('userList' === propertyType) {
292
295
  value = await this.setUserListValue(prop, nd);
293
296
  }
297
+ else if ('size_range' === propertyType) {
298
+ value = nd;
299
+ }
294
300
  return value;
295
301
  }
296
302
  setEnumerationKeys(prop, nd, matchByDisplay) {
@@ -902,3 +902,69 @@ describe('getUserListValue', () => {
902
902
  expect(returnValue.lastName).toEqual('Smith');
903
903
  });
904
904
  });
905
+ describe('getFlexPLMValue size_range', () => {
906
+ const config = {
907
+ apiHost: 'host',
908
+ userName: () => 'user',
909
+ password: () => 'pass',
910
+ urlContext: 'xxx',
911
+ vibeEventEndpoint: '/rfa/vibeiq/vibeEvents',
912
+ csrfEndpoint: '/servlet/rest/security/csrf',
913
+ itemPreDevelopmentLifecycleStages: ['concept']
914
+ };
915
+ const mapFileUtil = new transform_data_1.MapFileUtil(new sdk_1.Entities());
916
+ const dc = new data_converter_1.DataConverter(config, mapFileUtil);
917
+ const sizeRangeProp = {
918
+ propertyType: 'size_range',
919
+ slug: 'sizeRange',
920
+ label: 'Size Range',
921
+ };
922
+ it('returns sizeRange object when value is present', async () => {
923
+ const newData = { sizeRange: { sizes: ['PRE', 'NB'] } };
924
+ const returnValue = await dc.getFlexPLMValue(sizeRangeProp, newData, true);
925
+ expect(returnValue).toEqual({ sizes: ['PRE', 'NB'] });
926
+ });
927
+ it('returns null when sizeRange is null', async () => {
928
+ const newData = { sizeRange: null };
929
+ const returnValue = await dc.getFlexPLMValue(sizeRangeProp, newData, true);
930
+ expect(returnValue).toBeNull();
931
+ });
932
+ it('returns undefined when sizeRange is missing', async () => {
933
+ const newData = {};
934
+ const returnValue = await dc.getFlexPLMValue(sizeRangeProp, newData, true);
935
+ expect(returnValue).toBeUndefined();
936
+ });
937
+ });
938
+ describe('getEntityValue size_range', () => {
939
+ const config = {
940
+ apiHost: 'host',
941
+ userName: () => 'user',
942
+ password: () => 'pass',
943
+ urlContext: 'xxx',
944
+ vibeEventEndpoint: '/rfa/vibeiq/vibeEvents',
945
+ csrfEndpoint: '/servlet/rest/security/csrf',
946
+ itemPreDevelopmentLifecycleStages: ['concept']
947
+ };
948
+ const mapFileUtil = new transform_data_1.MapFileUtil(new sdk_1.Entities());
949
+ const dc = new data_converter_1.DataConverter(config, mapFileUtil);
950
+ const sizeRangeProp = {
951
+ propertyType: 'size_range',
952
+ slug: 'sizeRange',
953
+ label: 'Size Range',
954
+ };
955
+ it('returns sizeRange object when value is present', async () => {
956
+ const data = { sizeRange: { sizes: ['PRE', 'NB'] } };
957
+ const returnValue = await dc.getEntityValue(sizeRangeProp, data);
958
+ expect(returnValue).toEqual({ sizes: ['PRE', 'NB'] });
959
+ });
960
+ it('returns null when sizeRange is null', async () => {
961
+ const data = { sizeRange: null };
962
+ const returnValue = await dc.getEntityValue(sizeRangeProp, data);
963
+ expect(returnValue).toBeNull();
964
+ });
965
+ it('returns undefined when sizeRange is missing', async () => {
966
+ const data = {};
967
+ const returnValue = await dc.getEntityValue(sizeRangeProp, data);
968
+ expect(returnValue).toBeUndefined();
969
+ });
970
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contrail/flexplm",
3
- "version": "1.3.2-alpha.c32d413",
3
+ "version": "1.4.0-alpha.6954f61",
4
4
  "description": "Library used for integration with flexplm.",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -314,6 +314,48 @@ describe('all tests', () => {
314
314
 
315
315
  });
316
316
 
317
+ describe('isPropertyTrue', () => {
318
+ it('returns true for boolean true', () => {
319
+ expect(ConfigDefaults.isPropertyTrue(true)).toBe(true);
320
+ });
321
+
322
+ it('returns true for string true', () => {
323
+ expect(ConfigDefaults.isPropertyTrue('true')).toBe(true);
324
+ });
325
+
326
+ it('returns true for string TRUE', () => {
327
+ expect(ConfigDefaults.isPropertyTrue('TRUE')).toBe(true);
328
+ });
329
+
330
+ it('returns true for string True', () => {
331
+ expect(ConfigDefaults.isPropertyTrue('True')).toBe(true);
332
+ });
333
+
334
+ it('returns false for boolean false', () => {
335
+ expect(ConfigDefaults.isPropertyTrue(false)).toBe(false);
336
+ });
337
+
338
+ it('returns false for string false', () => {
339
+ expect(ConfigDefaults.isPropertyTrue('false')).toBe(false);
340
+ });
341
+
342
+ it('returns false for null', () => {
343
+ expect(ConfigDefaults.isPropertyTrue(null)).toBe(false);
344
+ });
345
+
346
+ it('returns false for undefined', () => {
347
+ expect(ConfigDefaults.isPropertyTrue(undefined)).toBe(false);
348
+ });
349
+
350
+ it('returns false for empty string', () => {
351
+ expect(ConfigDefaults.isPropertyTrue('')).toBe(false);
352
+ });
353
+
354
+ it('returns false for number 1', () => {
355
+ expect(ConfigDefaults.isPropertyTrue(1)).toBe(false);
356
+ });
357
+ });
358
+
317
359
  describe('getConfigFile', () => {
318
360
  beforeEach(() => {
319
361
  ConfigDefaults.clearConfigCache();
@@ -87,6 +87,10 @@ export class ConfigDefaults {
87
87
  }
88
88
  }
89
89
 
90
+ static isPropertyTrue(value: any): boolean {
91
+ return value === true || (typeof value === 'string' && value.toLowerCase() === 'true');
92
+ }
93
+
90
94
  static clearConfigCache(){
91
95
  ConfigDefaults.STATIC_CONFIG_CACHE = {};
92
96
  }
@@ -1038,4 +1038,83 @@ describe('getUserListValue', () =>{
1038
1038
  expect(returnValue.lastName).toEqual('Smith');
1039
1039
  });
1040
1040
 
1041
+ });
1042
+
1043
+
1044
+ describe('getFlexPLMValue size_range', () => {
1045
+ const config: FCConfig = {
1046
+ apiHost: 'host',
1047
+ userName: () => 'user',
1048
+ password: () => 'pass',
1049
+ urlContext: 'xxx',
1050
+ vibeEventEndpoint: '/rfa/vibeiq/vibeEvents',
1051
+ csrfEndpoint: '/servlet/rest/security/csrf',
1052
+ itemPreDevelopmentLifecycleStages: ['concept']
1053
+ };
1054
+
1055
+ const mapFileUtil = new MapFileUtil(new Entities());
1056
+ const dc = new DataConverter(config, mapFileUtil);
1057
+
1058
+ const sizeRangeProp = {
1059
+ propertyType: 'size_range',
1060
+ slug: 'sizeRange',
1061
+ label: 'Size Range',
1062
+ };
1063
+
1064
+ it('returns sizeRange object when value is present', async () => {
1065
+ const newData = { sizeRange: { sizes: ['PRE', 'NB'] } };
1066
+ const returnValue = await dc.getFlexPLMValue(sizeRangeProp, newData, true);
1067
+ expect(returnValue).toEqual({ sizes: ['PRE', 'NB'] });
1068
+ });
1069
+
1070
+ it('returns null when sizeRange is null', async () => {
1071
+ const newData = { sizeRange: null };
1072
+ const returnValue = await dc.getFlexPLMValue(sizeRangeProp, newData, true);
1073
+ expect(returnValue).toBeNull();
1074
+ });
1075
+
1076
+ it('returns undefined when sizeRange is missing', async () => {
1077
+ const newData = {};
1078
+ const returnValue = await dc.getFlexPLMValue(sizeRangeProp, newData, true);
1079
+ expect(returnValue).toBeUndefined();
1080
+ });
1081
+ });
1082
+
1083
+ describe('getEntityValue size_range', () => {
1084
+ const config: FCConfig = {
1085
+ apiHost: 'host',
1086
+ userName: () => 'user',
1087
+ password: () => 'pass',
1088
+ urlContext: 'xxx',
1089
+ vibeEventEndpoint: '/rfa/vibeiq/vibeEvents',
1090
+ csrfEndpoint: '/servlet/rest/security/csrf',
1091
+ itemPreDevelopmentLifecycleStages: ['concept']
1092
+ };
1093
+
1094
+ const mapFileUtil = new MapFileUtil(new Entities());
1095
+ const dc = new DataConverter(config, mapFileUtil);
1096
+
1097
+ const sizeRangeProp = {
1098
+ propertyType: 'size_range',
1099
+ slug: 'sizeRange',
1100
+ label: 'Size Range',
1101
+ };
1102
+
1103
+ it('returns sizeRange object when value is present', async () => {
1104
+ const data = { sizeRange: { sizes: ['PRE', 'NB'] } };
1105
+ const returnValue = await dc.getEntityValue(sizeRangeProp, data);
1106
+ expect(returnValue).toEqual({ sizes: ['PRE', 'NB'] });
1107
+ });
1108
+
1109
+ it('returns null when sizeRange is null', async () => {
1110
+ const data = { sizeRange: null };
1111
+ const returnValue = await dc.getEntityValue(sizeRangeProp, data);
1112
+ expect(returnValue).toBeNull();
1113
+ });
1114
+
1115
+ it('returns undefined when sizeRange is missing', async () => {
1116
+ const data = {};
1117
+ const returnValue = await dc.getEntityValue(sizeRangeProp, data);
1118
+ expect(returnValue).toBeUndefined();
1119
+ });
1041
1120
  });
@@ -119,6 +119,8 @@ export class DataConverter {
119
119
  value = nd;
120
120
  } else if ('userList' === propertyType) {
121
121
  value = await this.getUserListValue(prop, newData);
122
+ }else if ('size_range' === propertyType){
123
+ value = nd;
122
124
  }
123
125
 
124
126
  return value;
@@ -353,6 +355,8 @@ export class DataConverter {
353
355
  // console.log('TODO-json');
354
356
  } else if ('userList' === propertyType) {
355
357
  value = await this.setUserListValue(prop, nd);
358
+ }else if ('size_range' === propertyType){
359
+ value = nd;
356
360
  }
357
361
 
358
362
  // console.log(value);