@contrail/flexplm 1.5.0-alpha.98b8b06 → 1.5.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.
- package/.github/pull_request_template.md +31 -0
- package/.github/workflows/flexplm-lib.yml +27 -0
- package/.github/workflows/publish-to-npm.yml +121 -0
- package/CHANGELOG.md +45 -0
- package/lib/entity-processor/base-entity-processor.d.ts +0 -65
- package/lib/entity-processor/base-entity-processor.js +0 -71
- package/lib/entity-processor/base-entity-processor.spec.js +0 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -1
- package/lib/publish/base-process-publish-assortment.d.ts +0 -25
- package/lib/publish/base-process-publish-assortment.js +6 -60
- package/lib/publish/base-process-publish-assortment.spec.js +4 -22
- package/lib/publish/mockData.js +0 -5
- package/lib/transform/identifier-conversion-spec-mockData.js +6 -34
- package/lib/transform/identifier-conversion.d.ts +0 -36
- package/lib/transform/identifier-conversion.js +0 -36
- package/lib/transform/identifier-conversion.spec.js +0 -4
- package/lib/util/config-defaults.js +0 -3
- package/lib/util/config-defaults.spec.js +0 -9
- package/lib/util/data-converter-spec-mockData.js +3 -17
- package/lib/util/data-converter.d.ts +0 -97
- package/lib/util/data-converter.js +1 -127
- package/lib/util/data-converter.spec.js +0 -2
- package/lib/util/error-response-object.d.ts +0 -5
- package/lib/util/error-response-object.js +0 -7
- package/lib/util/event-short-message-status.js +0 -1
- package/lib/util/federation.js +0 -8
- package/lib/util/flexplm-connect.d.ts +0 -7
- package/lib/util/flexplm-connect.js +0 -14
- package/lib/util/logger-config.js +0 -1
- package/lib/util/map-util-spec-mockData.js +3 -17
- package/lib/util/map-utils.d.ts +0 -27
- package/lib/util/map-utils.js +0 -27
- package/lib/util/thumbnail-util.d.ts +0 -21
- package/lib/util/thumbnail-util.js +1 -28
- package/lib/util/thumbnail-util.spec.js +0 -6
- package/lib/util/type-conversion-utils-spec-mockData.js +3 -3
- package/lib/util/type-conversion-utils.d.ts +1 -152
- package/lib/util/type-conversion-utils.js +1 -155
- package/lib/util/type-defaults.d.ts +0 -66
- package/lib/util/type-defaults.js +0 -66
- package/lib/util/type-defaults.spec.js +5 -5
- package/lib/util/type-utils.d.ts +0 -21
- package/lib/util/type-utils.js +0 -23
- package/lib/util/type-utils.spec.js +0 -2
- package/package.json +6 -21
- package/publish.bat +5 -0
- package/publish.sh +5 -0
- package/src/entity-processor/base-entity-processor.spec.ts +689 -0
- package/src/entity-processor/base-entity-processor.ts +583 -0
- package/src/flexplm-request.ts +28 -0
- package/src/flexplm-utils.spec.ts +27 -0
- package/src/flexplm-utils.ts +29 -0
- package/src/index.ts +22 -0
- package/src/interfaces/interfaces.ts +122 -0
- package/src/interfaces/item-family-changes.ts +67 -0
- package/src/interfaces/publish-change-data.ts +43 -0
- package/src/publish/base-process-publish-assortment-callback.ts +50 -0
- package/src/publish/base-process-publish-assortment.spec.ts +1992 -0
- package/src/publish/base-process-publish-assortment.ts +1134 -0
- package/src/publish/mockData.ts +4561 -0
- package/src/transform/identifier-conversion-spec-mockData.ts +496 -0
- package/src/transform/identifier-conversion.spec.ts +386 -0
- package/src/transform/identifier-conversion.ts +282 -0
- package/src/util/config-defaults.spec.ts +445 -0
- package/src/util/config-defaults.ts +106 -0
- package/src/util/data-converter-spec-mockData.ts +231 -0
- package/src/util/data-converter.spec.ts +1622 -0
- package/src/util/data-converter.ts +819 -0
- package/src/util/error-response-object.spec.ts +116 -0
- package/src/util/error-response-object.ts +50 -0
- package/src/util/event-short-message-status.ts +22 -0
- package/src/util/federation.ts +172 -0
- package/src/util/flexplm-connect.spec.ts +132 -0
- package/src/util/flexplm-connect.ts +208 -0
- package/src/util/logger-config.ts +20 -0
- package/src/util/map-util-spec-mockData.ts +231 -0
- package/src/util/map-utils.spec.ts +103 -0
- package/src/util/map-utils.ts +41 -0
- package/src/util/mockData.ts +101 -0
- package/src/util/thumbnail-util.spec.ts +508 -0
- package/src/util/thumbnail-util.ts +272 -0
- package/src/util/type-conversion-utils-spec-mockData.ts +272 -0
- package/src/util/type-conversion-utils.spec.ts +1031 -0
- package/src/util/type-conversion-utils.ts +490 -0
- package/src/util/type-defaults.spec.ts +797 -0
- package/src/util/type-defaults.ts +320 -0
- package/src/util/type-utils.spec.ts +227 -0
- package/src/util/type-utils.ts +144 -0
- package/tsconfig.json +24 -0
- package/tslint.json +57 -0
- package/lib/cli/commands/compile.d.ts +0 -4
- package/lib/cli/commands/compile.js +0 -73
- package/lib/cli/commands/compile.spec.d.ts +0 -1
- package/lib/cli/commands/compile.spec.js +0 -80
- package/lib/cli/commands/create.d.ts +0 -5
- package/lib/cli/commands/create.js +0 -77
- package/lib/cli/commands/create.spec.d.ts +0 -1
- package/lib/cli/commands/create.spec.js +0 -78
- package/lib/cli/commands/upload.d.ts +0 -17
- package/lib/cli/commands/upload.js +0 -228
- package/lib/cli/commands/upload.spec.d.ts +0 -1
- package/lib/cli/commands/upload.spec.js +0 -88
- package/lib/cli/index.d.ts +0 -5
- package/lib/cli/index.js +0 -70
- package/lib/cli/index.spec.d.ts +0 -1
- package/lib/cli/index.spec.js +0 -85
- package/lib/cli/template/mapping-template.ts.template +0 -62
- package/lib/interfaces/mapping-file.d.ts +0 -460
- package/lib/interfaces/mapping-file.js +0 -2
- package/scripts/copy-template.js +0 -10
|
@@ -31,26 +31,12 @@ exports.mapping = {
|
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
-
// flex2vibe: {
|
|
35
|
-
// LCSRevisableEntity: {
|
|
36
|
-
// getMapKey: (object) =>{ return object;}
|
|
37
|
-
// },
|
|
38
|
-
// LCSLast: {
|
|
39
|
-
// getMapKey: (object) => {return object;}
|
|
40
|
-
// },
|
|
41
|
-
// LCSMaterial: {
|
|
42
|
-
// getMapKey: (object) =>{ return object;}
|
|
43
|
-
// },
|
|
44
|
-
// LCSBusinessObject: {
|
|
45
|
-
// getMapKey: (object) => {return object;}
|
|
46
|
-
// }
|
|
47
|
-
// },
|
|
48
34
|
},
|
|
49
35
|
LCSProduct: {
|
|
50
36
|
vibeOwningKeys: ['itemNumber', 'lifecycleStage'],
|
|
51
37
|
vibe2flex: {
|
|
52
38
|
getClass: () => 'LCSProduct',
|
|
53
|
-
getSoftType: (entity
|
|
39
|
+
getSoftType: (entity) => {
|
|
54
40
|
const prodType = entity['prodType'];
|
|
55
41
|
let val = '';
|
|
56
42
|
switch (prodType) {
|
|
@@ -75,7 +61,7 @@ exports.mapping = {
|
|
|
75
61
|
vibeIQIdentifier: 'itemNumber'
|
|
76
62
|
},
|
|
77
63
|
valueTransform: {
|
|
78
|
-
transformEx: (row
|
|
64
|
+
transformEx: (row) => {
|
|
79
65
|
return row['otherProp'] + 'xxx';
|
|
80
66
|
}
|
|
81
67
|
}
|
|
@@ -93,7 +79,7 @@ exports.mapping = {
|
|
|
93
79
|
vibeOwningKeys: ['itemNumber', 'lifecycleStage'],
|
|
94
80
|
vibe2flex: {
|
|
95
81
|
getClass: () => 'LCSSKU',
|
|
96
|
-
getSoftType: (entity
|
|
82
|
+
getSoftType: (entity) => {
|
|
97
83
|
const prodType = entity['prodType'];
|
|
98
84
|
let val = '';
|
|
99
85
|
switch (prodType) {
|
package/lib/util/map-utils.d.ts
CHANGED
|
@@ -1,33 +1,6 @@
|
|
|
1
1
|
import { MapFileUtil } from '@contrail/transform-data';
|
|
2
2
|
export declare class MapUtil {
|
|
3
|
-
/** Transforms the data, assumes mapSectionKey has been correctly determined.
|
|
4
|
-
*
|
|
5
|
-
* @param transformMapFile id of map file
|
|
6
|
-
* @param mapFileUtil
|
|
7
|
-
* @param data
|
|
8
|
-
* @param mapSectionKey key for section of map file
|
|
9
|
-
* @param direction vibe2flex or flex2vibe
|
|
10
|
-
* @param transformTaskOrderKey key for the list of tasks to be processed. default is 'transformOrder'
|
|
11
|
-
* @returns The converted data
|
|
12
|
-
*/
|
|
13
3
|
static applyTransformMap(transformMapFile: any, mapFileUtil: any, data: any, mapSectionKey: string, direction: string, transformTaskOrderKey?: string): Promise<any>;
|
|
14
|
-
/** Returns the mapKey based on the 'typeConversion' section of the map file.
|
|
15
|
-
* If the map file doesn't have a section for the type in question, 'undefined' is returned.
|
|
16
|
-
*
|
|
17
|
-
* @param fileId
|
|
18
|
-
* @param mapFileUtil
|
|
19
|
-
* @param data The full object
|
|
20
|
-
* @param type The entity or object class of the object. The functions are keyed based on this.
|
|
21
|
-
* @param direction
|
|
22
|
-
* @returns
|
|
23
|
-
*/
|
|
24
4
|
static getMapKey(transformMapFile: any, mapFileUtil: MapFileUtil, data: any, type: string, direction: string): Promise<string>;
|
|
25
|
-
/** Returns the full map section with both directions; identifier and informational properties; etc.
|
|
26
|
-
*
|
|
27
|
-
* @param transformMapFile id if map file
|
|
28
|
-
* @param mapFileUtil
|
|
29
|
-
* @param mapSectionKey key of the map section
|
|
30
|
-
* @returns
|
|
31
|
-
*/
|
|
32
5
|
static getFullMapSection(transformMapFile: string, mapFileUtil: MapFileUtil, mapSectionKey: string): Promise<any>;
|
|
33
6
|
}
|
package/lib/util/map-utils.js
CHANGED
|
@@ -2,39 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MapUtil = void 0;
|
|
4
4
|
class MapUtil {
|
|
5
|
-
/** Transforms the data, assumes mapSectionKey has been correctly determined.
|
|
6
|
-
*
|
|
7
|
-
* @param transformMapFile id of map file
|
|
8
|
-
* @param mapFileUtil
|
|
9
|
-
* @param data
|
|
10
|
-
* @param mapSectionKey key for section of map file
|
|
11
|
-
* @param direction vibe2flex or flex2vibe
|
|
12
|
-
* @param transformTaskOrderKey key for the list of tasks to be processed. default is 'transformOrder'
|
|
13
|
-
* @returns The converted data
|
|
14
|
-
*/
|
|
15
5
|
static async applyTransformMap(transformMapFile, mapFileUtil, data, mapSectionKey, direction, transformTaskOrderKey = 'transformOrder') {
|
|
16
6
|
return await mapFileUtil.applyTransformMap(transformMapFile, data, mapSectionKey, direction, transformTaskOrderKey);
|
|
17
7
|
}
|
|
18
|
-
/** Returns the mapKey based on the 'typeConversion' section of the map file.
|
|
19
|
-
* If the map file doesn't have a section for the type in question, 'undefined' is returned.
|
|
20
|
-
*
|
|
21
|
-
* @param fileId
|
|
22
|
-
* @param mapFileUtil
|
|
23
|
-
* @param data The full object
|
|
24
|
-
* @param type The entity or object class of the object. The functions are keyed based on this.
|
|
25
|
-
* @param direction
|
|
26
|
-
* @returns
|
|
27
|
-
*/
|
|
28
8
|
static async getMapKey(transformMapFile, mapFileUtil, data, type, direction) {
|
|
29
9
|
return await mapFileUtil.getMapKey(transformMapFile, data, type, direction);
|
|
30
10
|
}
|
|
31
|
-
/** Returns the full map section with both directions; identifier and informational properties; etc.
|
|
32
|
-
*
|
|
33
|
-
* @param transformMapFile id if map file
|
|
34
|
-
* @param mapFileUtil
|
|
35
|
-
* @param mapSectionKey key of the map section
|
|
36
|
-
* @returns
|
|
37
|
-
*/
|
|
38
11
|
static async getFullMapSection(transformMapFile, mapFileUtil, mapSectionKey) {
|
|
39
12
|
return await mapFileUtil.getFullMapSection(transformMapFile, mapSectionKey);
|
|
40
13
|
}
|
|
@@ -6,7 +6,6 @@ interface ContentCustomSize {
|
|
|
6
6
|
}
|
|
7
7
|
export declare class ThumbnailUtil {
|
|
8
8
|
private config;
|
|
9
|
-
/** The max_thumbnail_size is for limiting the size of the thumbnail being sent to FlexPLM. It is used when checking the size of the auto generated thumbnails (smallViewable, tinyViewable, etc.). */
|
|
10
9
|
private max_thumbnail_size;
|
|
11
10
|
private entities;
|
|
12
11
|
static NEW_THUMBNAIL_ID: string;
|
|
@@ -17,31 +16,11 @@ export declare class ThumbnailUtil {
|
|
|
17
16
|
}[];
|
|
18
17
|
constructor(config: FCConfig);
|
|
19
18
|
setOutboundThumbnail(data: any, event: any): Promise<any>;
|
|
20
|
-
/** Determines if a new image has been generated. If any viewable is new, there might be a better
|
|
21
|
-
* sized image. So send the fileId as new.
|
|
22
|
-
*/
|
|
23
19
|
isThumbnailNew(event: any, customSizes: any[]): boolean;
|
|
24
20
|
getFileId(primaryViewableId: string): Promise<string | undefined>;
|
|
25
21
|
getCustomSizes(): Promise<ContentCustomSize[]>;
|
|
26
22
|
getContentEntity(primaryViewableId: any, sizes: ContentCustomSize[]): Promise<any>;
|
|
27
|
-
/** This outputs the content entity, without the inflated file entities.
|
|
28
|
-
* To help debugging issues with sending the thumbnail info.
|
|
29
|
-
* The inflated entities are removed, because are large and cause
|
|
30
|
-
* problems with log file size limits.
|
|
31
|
-
*
|
|
32
|
-
* @param content: the content with inflated objects
|
|
33
|
-
* @param relations: string[] of the slugs for inflated objects
|
|
34
|
-
*/
|
|
35
23
|
logContentResults(content: any, relations: string[]): void;
|
|
36
|
-
/** Syncs the thumbnail from FlexPLM to VibeIQ. Handles creating, replacing, or removing
|
|
37
|
-
* the primary viewable content and persists the updates directly to the entity.
|
|
38
|
-
*
|
|
39
|
-
* @param entityId - The ID of the entity to update with thumbnail properties.
|
|
40
|
-
* @param primaryViewableId - The existing primary viewable content ID, if any.
|
|
41
|
-
* @param event - The inbound event containing thumbnail data (NEW_THUMBNAIL_ID / EXISTING_THUMBNAIL_ID).
|
|
42
|
-
* @param entityName - The entity type name (e.g. 'item', 'color') used for API calls.
|
|
43
|
-
* @returns The updated entity, or undefined if no thumbnail changes were needed.
|
|
44
|
-
*/
|
|
45
24
|
syncThumbnailToVibeIQ({ entityId, primaryViewableId, event, entityName }: {
|
|
46
25
|
entityId: string;
|
|
47
26
|
primaryViewableId?: string;
|
|
@@ -8,7 +8,6 @@ const flexplm_connect_1 = require("./flexplm-connect");
|
|
|
8
8
|
class ThumbnailUtil {
|
|
9
9
|
constructor(config) {
|
|
10
10
|
this.config = config;
|
|
11
|
-
/** The max_thumbnail_size is for limiting the size of the thumbnail being sent to FlexPLM. It is used when checking the size of the auto generated thumbnails (smallViewable, tinyViewable, etc.). */
|
|
12
11
|
this.max_thumbnail_size = 5 * 1024 * 1024;
|
|
13
12
|
this.entities = new sdk_1.Entities();
|
|
14
13
|
if (this.config['max_thumbnail_size']) {
|
|
@@ -18,7 +17,6 @@ class ThumbnailUtil {
|
|
|
18
17
|
async setOutboundThumbnail(data, event) {
|
|
19
18
|
if (event?.newData?.primaryViewableId && event?.newData?.largeViewableDownloadUrl) {
|
|
20
19
|
const primaryViewableId = event.newData.primaryViewableId;
|
|
21
|
-
//get custom sizes
|
|
22
20
|
const fileId = await this.getFileId(primaryViewableId);
|
|
23
21
|
if (fileId) {
|
|
24
22
|
const customSizes = await this.getCustomSizes();
|
|
@@ -33,9 +31,6 @@ class ThumbnailUtil {
|
|
|
33
31
|
}
|
|
34
32
|
return data;
|
|
35
33
|
}
|
|
36
|
-
/** Determines if a new image has been generated. If any viewable is new, there might be a better
|
|
37
|
-
* sized image. So send the fileId as new.
|
|
38
|
-
*/
|
|
39
34
|
isThumbnailNew(event, customSizes) {
|
|
40
35
|
const propertyDiffs = event?.propertyDiffs;
|
|
41
36
|
if (propertyDiffs) {
|
|
@@ -57,7 +52,6 @@ class ThumbnailUtil {
|
|
|
57
52
|
const OOBSizes = JSON.parse(JSON.stringify(ThumbnailUtil.OOB_SIZES));
|
|
58
53
|
sizes.push(...OOBSizes);
|
|
59
54
|
console.info('sizes: ' + JSON.stringify(sizes));
|
|
60
|
-
//get Content
|
|
61
55
|
const content = await this.getContentEntity(primaryViewableId, sizes);
|
|
62
56
|
if (!content) {
|
|
63
57
|
return undefined;
|
|
@@ -105,14 +99,6 @@ class ThumbnailUtil {
|
|
|
105
99
|
this.logContentResults(content, relations);
|
|
106
100
|
return content;
|
|
107
101
|
}
|
|
108
|
-
/** This outputs the content entity, without the inflated file entities.
|
|
109
|
-
* To help debugging issues with sending the thumbnail info.
|
|
110
|
-
* The inflated entities are removed, because are large and cause
|
|
111
|
-
* problems with log file size limits.
|
|
112
|
-
*
|
|
113
|
-
* @param content: the content with inflated objects
|
|
114
|
-
* @param relations: string[] of the slugs for inflated objects
|
|
115
|
-
*/
|
|
116
102
|
logContentResults(content, relations) {
|
|
117
103
|
if (app_framework_1.Logger.isDebugOn() && content && relations) {
|
|
118
104
|
const contentCopy = JSON.parse(JSON.stringify(content));
|
|
@@ -122,22 +108,12 @@ class ThumbnailUtil {
|
|
|
122
108
|
console.debug('content: ' + JSON.stringify(contentCopy));
|
|
123
109
|
}
|
|
124
110
|
}
|
|
125
|
-
/** Syncs the thumbnail from FlexPLM to VibeIQ. Handles creating, replacing, or removing
|
|
126
|
-
* the primary viewable content and persists the updates directly to the entity.
|
|
127
|
-
*
|
|
128
|
-
* @param entityId - The ID of the entity to update with thumbnail properties.
|
|
129
|
-
* @param primaryViewableId - The existing primary viewable content ID, if any.
|
|
130
|
-
* @param event - The inbound event containing thumbnail data (NEW_THUMBNAIL_ID / EXISTING_THUMBNAIL_ID).
|
|
131
|
-
* @param entityName - The entity type name (e.g. 'item', 'color') used for API calls.
|
|
132
|
-
* @returns The updated entity, or undefined if no thumbnail changes were needed.
|
|
133
|
-
*/
|
|
134
111
|
async syncThumbnailToVibeIQ({ entityId, primaryViewableId, event, entityName }) {
|
|
135
112
|
console.debug(`syncThumbnailToVibeIQ: entityId=${entityId}, primaryViewableId=${primaryViewableId}, entityName=${entityName}`);
|
|
136
113
|
const eventData = event.data || {};
|
|
137
114
|
const newThumbnailId = eventData[ThumbnailUtil.NEW_THUMBNAIL_ID];
|
|
138
115
|
const existingThumbnailId = eventData[ThumbnailUtil.EXISTING_THUMBNAIL_ID];
|
|
139
116
|
const thumbnailUrl = newThumbnailId || existingThumbnailId;
|
|
140
|
-
// Case 1: REMOVE_THUMBNAIL
|
|
141
117
|
if (newThumbnailId === ThumbnailUtil.REMOVE_THUMBNAIL) {
|
|
142
118
|
if (primaryViewableId) {
|
|
143
119
|
await this.entities.delete({ entityName: 'content', id: primaryViewableId });
|
|
@@ -147,12 +123,10 @@ class ThumbnailUtil {
|
|
|
147
123
|
console.debug(`syncThumbnailToVibeIQ: applied clear updates for entityId=${entityId}`);
|
|
148
124
|
return updatedEntity;
|
|
149
125
|
}
|
|
150
|
-
// Early return if no thumbnail URL
|
|
151
126
|
if (!thumbnailUrl) {
|
|
152
127
|
console.debug(`syncThumbnailToVibeIQ: no thumbnail URL for entityId=${entityId}`);
|
|
153
128
|
return undefined;
|
|
154
129
|
}
|
|
155
|
-
// Case 2: No existing primaryViewableId — create new content
|
|
156
130
|
if (!primaryViewableId) {
|
|
157
131
|
const content = await this.createContentFromFlexPLM(thumbnailUrl, entityId, entityName);
|
|
158
132
|
await this.entities.update({ entityName: 'content', id: content.id, object: { flexplmThumbnailUrl: thumbnailUrl } });
|
|
@@ -161,11 +135,10 @@ class ThumbnailUtil {
|
|
|
161
135
|
console.debug(`syncThumbnailToVibeIQ: created new content ${content.id} for entityId=${entityId}`);
|
|
162
136
|
return updatedEntity;
|
|
163
137
|
}
|
|
164
|
-
// Case 3: Has primaryViewableId — check if thumbnail changed
|
|
165
138
|
const primaryViewable = await this.entities.get({ entityName: 'content', id: primaryViewableId });
|
|
166
139
|
if (primaryViewable?.flexplmThumbnailUrl === thumbnailUrl) {
|
|
167
140
|
console.debug(`syncThumbnailToVibeIQ: thumbnail already synced for entityId=${entityId}`);
|
|
168
|
-
return undefined;
|
|
141
|
+
return undefined;
|
|
169
142
|
}
|
|
170
143
|
const content = await this.createContentFromFlexPLM(thumbnailUrl, entityId, entityName);
|
|
171
144
|
await this.entities.update({ entityName: 'content', id: content.id, object: { flexplmThumbnailUrl: thumbnailUrl } });
|
|
@@ -327,13 +327,11 @@ describe('ThumbnailUtil Tests', () => {
|
|
|
327
327
|
contentType: 'image/png',
|
|
328
328
|
contentHolderReference: 'color:entity1',
|
|
329
329
|
}));
|
|
330
|
-
// Updates content with flexplmThumbnailUrl
|
|
331
330
|
expect(mockEntitiesUpdate).toHaveBeenCalledWith(expect.objectContaining({
|
|
332
331
|
entityName: 'content',
|
|
333
332
|
id: 'newContent1',
|
|
334
333
|
object: { flexplmThumbnailUrl: '/rest/thumbnail/thumb.png' },
|
|
335
334
|
}));
|
|
336
|
-
// Updates the main entity
|
|
337
335
|
expect(mockEntitiesUpdate).toHaveBeenCalledWith(expect.objectContaining({
|
|
338
336
|
entityName: 'color',
|
|
339
337
|
id: 'entity1',
|
|
@@ -407,17 +405,13 @@ describe('ThumbnailUtil Tests', () => {
|
|
|
407
405
|
mockContentCreate.mockResolvedValue(createdContent);
|
|
408
406
|
const event = { data: { [thumbnail_util_1.ThumbnailUtil.NEW_THUMBNAIL_ID]: '/rest/thumbnail/new.jpg' } };
|
|
409
407
|
await tu.syncThumbnailToVibeIQ({ entityId: 'entity1', primaryViewableId: 'oldPv', event, entityName: 'item' });
|
|
410
|
-
// Creates new content
|
|
411
408
|
expect(mockContentCreate).toHaveBeenCalled();
|
|
412
|
-
// Updates new content with flexplmThumbnailUrl
|
|
413
409
|
expect(mockEntitiesUpdate).toHaveBeenCalledWith(expect.objectContaining({
|
|
414
410
|
entityName: 'content',
|
|
415
411
|
id: 'newContent2',
|
|
416
412
|
object: { flexplmThumbnailUrl: '/rest/thumbnail/new.jpg' },
|
|
417
413
|
}));
|
|
418
|
-
// Updates the main entity
|
|
419
414
|
expect(mockEntitiesUpdate).toHaveBeenCalledWith(expect.objectContaining({ entityName: 'item', id: 'entity1' }));
|
|
420
|
-
// Deletes old content
|
|
421
415
|
expect(mockEntitiesDelete).toHaveBeenCalledWith({ entityName: 'content', id: 'oldPv' });
|
|
422
416
|
});
|
|
423
417
|
it('does not update when primaryViewable.flexplmThumbnailUrl matches', async () => {
|
|
@@ -57,7 +57,7 @@ exports.mapping = {
|
|
|
57
57
|
vibeOwningKeys: ['itemNumber', 'lifecycleStage'],
|
|
58
58
|
vibe2flex: {
|
|
59
59
|
getClass: () => 'LCSProduct',
|
|
60
|
-
getSoftType: (entity
|
|
60
|
+
getSoftType: (entity) => {
|
|
61
61
|
const prodType = entity['prodType'];
|
|
62
62
|
let val = '';
|
|
63
63
|
switch (prodType) {
|
|
@@ -82,7 +82,7 @@ exports.mapping = {
|
|
|
82
82
|
vibeIQIdentifier: 'itemNumber'
|
|
83
83
|
},
|
|
84
84
|
valueTransform: {
|
|
85
|
-
transformEx: (row
|
|
85
|
+
transformEx: (row) => {
|
|
86
86
|
return row['otherProp'] + 'xxx';
|
|
87
87
|
}
|
|
88
88
|
}
|
|
@@ -100,7 +100,7 @@ exports.mapping = {
|
|
|
100
100
|
vibeOwningKeys: ['itemNumber', 'lifecycleStage'],
|
|
101
101
|
vibe2flex: {
|
|
102
102
|
getClass: () => 'LCSSKU',
|
|
103
|
-
getSoftType: (entity
|
|
103
|
+
getSoftType: (entity) => {
|
|
104
104
|
const prodType = entity['prodType'];
|
|
105
105
|
let val = '';
|
|
106
106
|
switch (prodType) {
|
|
@@ -1,175 +1,24 @@
|
|
|
1
1
|
import { MapFileUtil } from '@contrail/transform-data';
|
|
2
|
-
/** This class is helper functions to get the data for converting
|
|
3
|
-
* VibeIQ entities to / from FlexPLM Objects
|
|
4
|
-
*/
|
|
5
2
|
export declare class TypeConversionUtils {
|
|
6
3
|
static NO_ENTITY_TYPE: string;
|
|
7
4
|
static VIBE2FLEX_DIRECTION: string;
|
|
8
5
|
static FLEX2VIBE_DIRECTION: string;
|
|
9
6
|
constructor();
|
|
10
|
-
/** Takes in a VibeIQ entity object and returns the correct FlexPLM
|
|
11
|
-
* object class associated to the entity. Order of precedence
|
|
12
|
-
* Property 'flexPLMObjectClass'
|
|
13
|
-
* Map file entry in 'typeConversion:vibe2flex:<value>:getObjectClass()'
|
|
14
|
-
* for value from 'entityClass' or root from 'typePath'
|
|
15
|
-
* TypeDefaults.getDefaultObjectClass() function
|
|
16
|
-
* @param transformMapFile id for mapFile
|
|
17
|
-
* @param mapFileUtil class to get mapfile
|
|
18
|
-
* @param entity
|
|
19
|
-
* @returns Promise<string>
|
|
20
|
-
*/
|
|
21
7
|
static getObjectClass(transformMapFile: any, mapFileUtil: any, entity: any): Promise<string>;
|
|
22
|
-
/** Takes in a VibeIQ entity object and returns the correct FlexPLM
|
|
23
|
-
* FlexType associated to the entity. Order of precedence
|
|
24
|
-
* Property 'flexPLMTypePath'
|
|
25
|
-
* Map file entry in 'typeConversion:vibe2flex:<value>:getSoftType()'
|
|
26
|
-
* for value from 'entityClass' or root from 'typePath'
|
|
27
|
-
* TypeDefaults.getDefaultObjectTypePath() function
|
|
28
|
-
*
|
|
29
|
-
* @param transformMapFile id for mapFile
|
|
30
|
-
* @param mapFileUtil class to get mapfile
|
|
31
|
-
* @param entity VibeIQ entity
|
|
32
|
-
* @returns Promise<string>
|
|
33
|
-
*/
|
|
34
8
|
static getObjectTypePath(transformMapFile: any, mapFileUtil: any, entity: any): Promise<string>;
|
|
35
|
-
/**Takes in a VibeIQ entity object and returns the correct
|
|
36
|
-
* identifier properties. Order of precedence
|
|
37
|
-
* Property 'flexPLMIdentifierProperties'
|
|
38
|
-
* Map file entry in 'typeConversion:vibe2flex:<value>:getIdentifierProperties()'
|
|
39
|
-
* for value from 'entityClass' or root from 'typePath'
|
|
40
|
-
* TypeDefaults.getDefaultIdentifierProperties() function
|
|
41
|
-
*
|
|
42
|
-
* @param transformMapFile id for mapFile
|
|
43
|
-
* @param mapFileUtil class to get mapfile
|
|
44
|
-
* @param entity
|
|
45
|
-
* @returns Promise<string[]>
|
|
46
|
-
*/
|
|
47
9
|
static getIdentifierProperties(transformMapFile: any, mapFileUtil: any, entity: any): Promise<string[]>;
|
|
48
|
-
/**Takes in a VibeIQ entity object and returns the correct
|
|
49
|
-
* informational properties. Order of precedence
|
|
50
|
-
* Property 'flexPLMInformationalProperties'
|
|
51
|
-
* Map file entry in 'typeConversion:vibe2flex:<value>:getInformationalProperties()'
|
|
52
|
-
* for value from 'entityClass' or root from 'typePath'
|
|
53
|
-
* TypeDefaults.getDefaultObjectTypePath() function
|
|
54
|
-
*
|
|
55
|
-
* @param transformMapFile id for mapFile
|
|
56
|
-
* @param mapFileUtil class to get mapfile
|
|
57
|
-
* @param entity
|
|
58
|
-
* @returns string
|
|
59
|
-
*/
|
|
60
10
|
static getInformationalProperties(transformMapFile: any, mapFileUtil: any, entity: any): Promise<string[]>;
|
|
61
|
-
/**Takes in a VibeIQ entity object and returns the correct mapKey
|
|
62
|
-
* Order of precedence:
|
|
63
|
-
* Map file entry in 'typeConversion:<direction>:<value>:getObjectClass()'
|
|
64
|
-
* for value from 'entityClass' or root from 'typePath'
|
|
65
|
-
* TypeDefaults.getDefaultObjectClass() function
|
|
66
|
-
*
|
|
67
|
-
* @param transformMapFile
|
|
68
|
-
* @param mapFileUtil
|
|
69
|
-
* @param entity
|
|
70
|
-
* @param type
|
|
71
|
-
* @param direction
|
|
72
|
-
* @returns
|
|
73
|
-
*/
|
|
74
11
|
static getMapKey(transformMapFile: any, mapFileUtil: MapFileUtil, entity: any, direction: string): Promise<string>;
|
|
75
|
-
/** Returns the VibeIQ entity type from an entity.
|
|
76
|
-
* Throws error if it can't determine the entity type
|
|
77
|
-
*
|
|
78
|
-
* @param entity
|
|
79
|
-
* @returns string
|
|
80
|
-
*/
|
|
81
12
|
static getEntityType(entity: any): any;
|
|
82
|
-
/** Takes in a FlexPLM object and returns the correct VibeIQ entity
|
|
83
|
-
* class associated to the object. Order of precedence
|
|
84
|
-
* Property 'vibeIQEntityClass'
|
|
85
|
-
* Map file entry in 'typeConversion:flex2vibe:<value>:getObjectClass()'
|
|
86
|
-
* for value from 'objectClass'
|
|
87
|
-
* TypeDefaults.getDefaultEntityClass() function
|
|
88
|
-
*
|
|
89
|
-
* @param fileId id for mapFile
|
|
90
|
-
* @param mapFileUtil class to get mapfile
|
|
91
|
-
* @param object FlexPLM object
|
|
92
|
-
* @returns Promise<string>
|
|
93
|
-
*/
|
|
94
13
|
static getEntityClassFromObject(fileId: any, mapFileUtil: any, object: any): Promise<string>;
|
|
95
|
-
static getEntityTypePathFromOjbect(fileId: any, mapFileUtil: any, object: any): Promise<string>;
|
|
96
|
-
/** Takes in a FlexPLM object and returns the correct VibeIQ uniqueness
|
|
97
|
-
* pool key. Order of precedence:
|
|
98
|
-
* Map file entry in 'typeConversion:flex2vibe:<value>:getUniquenessPool()'
|
|
99
|
-
* for value from 'objectClass'
|
|
100
|
-
* TypeDefaults.getDefaultEntityClass() function
|
|
101
|
-
*
|
|
102
|
-
* @param fileId id for mapFile
|
|
103
|
-
* @param mapFileUtil class to get mapfile
|
|
104
|
-
* @param object FlexPLM object
|
|
105
|
-
* @returns Promise<string>
|
|
106
|
-
*/
|
|
107
14
|
static getUniquenessPoolKeyFromObject(fileId: any, mapFileUtil: any, object: any): Promise<string>;
|
|
108
|
-
|
|
109
|
-
* type associated to the object. Order of precedence
|
|
110
|
-
* Property 'vibeIQTypePath'
|
|
111
|
-
* Map file entry in 'typeConversion:flex2vibe:<value>:getSoftType()'
|
|
112
|
-
* for value from 'objectClass' or root from 'flexPLMTypePath'
|
|
113
|
-
* TypeDefaults.getDefaultEntityTypePath() function
|
|
114
|
-
*
|
|
115
|
-
* @param transformMapFile id for mapFile
|
|
116
|
-
* @param mapFileUtil class to get mapfile
|
|
117
|
-
* @param entity VibeIQ entity
|
|
118
|
-
* @returns Promise<string>
|
|
119
|
-
*/
|
|
120
|
-
static getEntityTypePathFromObject(fileId: any, mapFileUtil: any, object: any): Promise<string>;
|
|
121
|
-
/**Takes in a FlexPLM object and returns the correct
|
|
122
|
-
* identifier properties. Order of precedence
|
|
123
|
-
* Property 'vibeIQIdentifierProperties'
|
|
124
|
-
* Map file entry in 'typeConversion:flex2vibe:<value>:getIdentifierProperties()'
|
|
125
|
-
* for value from 'objectClass'
|
|
126
|
-
* TypeDefaults.getDefaultIdentifierPropertiesFromObject() function
|
|
127
|
-
*
|
|
128
|
-
* @param transformMapFile id for mapFile
|
|
129
|
-
* @param mapFileUtil class to get mapfile
|
|
130
|
-
* @param object
|
|
131
|
-
* @returns Promise<string[]>
|
|
132
|
-
*/
|
|
15
|
+
static getEntityTypePathFromOjbect(fileId: any, mapFileUtil: any, object: any): Promise<string>;
|
|
133
16
|
static getIdentifierPropertiesFromObject(fileId: any, mapFileUtil: MapFileUtil, object: any): Promise<string[]>;
|
|
134
|
-
/**Takes in a FlexPLM object and returns the correct
|
|
135
|
-
* identifier properties. Order of precedence
|
|
136
|
-
* Property 'vibeIQIdentifierProperties'
|
|
137
|
-
* Map file entry in 'typeConversion:flex2vibe:<value>:getInformationalProperties()'
|
|
138
|
-
* for value from 'objectClass'
|
|
139
|
-
* TypeDefaults.getDefaultIdentifierPropertiesFromObject() function
|
|
140
|
-
*
|
|
141
|
-
* @param transformMapFile id for mapFile
|
|
142
|
-
* @param mapFileUtil class to get mapfile
|
|
143
|
-
* @param object
|
|
144
|
-
* @returns Promise<string[]>
|
|
145
|
-
*/
|
|
146
17
|
static getInformationalPropertiesFromObject(fileId: any, mapFileUtil: MapFileUtil, object: any): Promise<string[]>;
|
|
147
18
|
static getMapKeyFromObject(fileId: any, mapFileUtil: MapFileUtil, object: any, direction: string): Promise<string | undefined>;
|
|
148
19
|
static isInboundCreatableFromObject(fileId: string, mapFileUtil: MapFileUtil, object: any, context?: any): Promise<boolean>;
|
|
149
20
|
static isOutboundCreatableFromEntity(fileId: string, mapFileUtil: MapFileUtil, entity: any, context?: any): Promise<boolean>;
|
|
150
|
-
/** Takes in a FlexPLM object and determines whether inbound
|
|
151
|
-
* images should be synced. In most cases, the creation owning system
|
|
152
|
-
* will also control image syncing. Defaults to false if no mapping exists.
|
|
153
|
-
* Map file entry in '<mapKey>:syncInboundImages()'
|
|
154
|
-
*
|
|
155
|
-
* @param fileId id for mapFile
|
|
156
|
-
* @param mapFileUtil class to get mapfile
|
|
157
|
-
* @param object FlexPLM object
|
|
158
|
-
* @param context optional context object
|
|
159
|
-
* @returns Promise<boolean>
|
|
160
|
-
*/
|
|
161
21
|
static syncInboundImages(fileId: string, mapFileUtil: MapFileUtil, object: any, context?: any): Promise<boolean>;
|
|
162
|
-
/** Takes in a VibeIQ entity object and determines whether outbound
|
|
163
|
-
* images should be synced. In most cases, the creation owning system
|
|
164
|
-
* will also control image syncing. Defaults to true if no mapping exists.
|
|
165
|
-
* Map file entry in '<mapKey>:syncOutboundImages()'
|
|
166
|
-
*
|
|
167
|
-
* @param fileId id for mapFile
|
|
168
|
-
* @param mapFileUtil class to get mapfile
|
|
169
|
-
* @param entity VibeIQ entity
|
|
170
|
-
* @param context optional context object
|
|
171
|
-
* @returns Promise<boolean>
|
|
172
|
-
*/
|
|
173
22
|
static syncOutboundImages(fileId: string, mapFileUtil: MapFileUtil, entity: any, context?: any): Promise<boolean>;
|
|
174
23
|
static getObjectType(object: any): any;
|
|
175
24
|
}
|