@contrail/flexplm 1.3.0-alpha.ccc03be → 1.3.1-alpha.3e8dbdd
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/lib/cli/commands/compile.d.ts +1 -0
- package/lib/cli/commands/compile.js +71 -0
- package/lib/cli/commands/compile.spec.d.ts +1 -0
- package/lib/cli/commands/compile.spec.js +80 -0
- package/lib/cli/commands/create.d.ts +1 -0
- package/lib/cli/commands/create.js +75 -0
- package/lib/cli/commands/create.spec.d.ts +1 -0
- package/lib/cli/commands/create.spec.js +78 -0
- package/lib/cli/commands/upload.d.ts +10 -0
- package/lib/cli/commands/upload.js +226 -0
- package/lib/cli/commands/upload.spec.d.ts +1 -0
- package/lib/cli/commands/upload.spec.js +88 -0
- package/lib/cli/index.d.ts +2 -0
- package/lib/cli/index.js +64 -0
- package/lib/cli/index.spec.d.ts +1 -0
- package/lib/cli/index.spec.js +79 -0
- package/lib/cli/template/mapping-template.ts.template +62 -0
- package/lib/entity-processor/base-entity-processor.d.ts +47 -0
- package/lib/entity-processor/base-entity-processor.js +53 -0
- package/lib/entity-processor/base-entity-processor.spec.js +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/interfaces/mapping-file.d.ts +460 -0
- package/lib/interfaces/mapping-file.js +2 -0
- package/lib/publish/base-process-publish-assortment.d.ts +25 -0
- package/lib/publish/base-process-publish-assortment.js +60 -6
- package/lib/publish/base-process-publish-assortment.spec.js +22 -4
- package/lib/publish/mockData.js +5 -0
- package/lib/transform/identifier-conversion-spec-mockData.js +34 -6
- package/lib/transform/identifier-conversion.d.ts +36 -0
- package/lib/transform/identifier-conversion.js +36 -0
- package/lib/transform/identifier-conversion.spec.js +4 -0
- package/lib/util/config-defaults.js +3 -0
- package/lib/util/config-defaults.spec.js +9 -0
- package/lib/util/data-converter-spec-mockData.js +17 -3
- package/lib/util/data-converter.d.ts +97 -0
- package/lib/util/data-converter.js +127 -1
- package/lib/util/data-converter.spec.js +2 -0
- package/lib/util/error-response-object.d.ts +5 -0
- package/lib/util/error-response-object.js +7 -0
- package/lib/util/event-short-message-status.js +1 -0
- package/lib/util/federation.js +8 -0
- package/lib/util/flexplm-connect.d.ts +7 -0
- package/lib/util/flexplm-connect.js +14 -0
- package/lib/util/logger-config.js +1 -0
- package/lib/util/map-util-spec-mockData.js +17 -3
- package/lib/util/map-utils.d.ts +27 -0
- package/lib/util/map-utils.js +27 -0
- package/lib/util/thumbnail-util.d.ts +21 -0
- package/lib/util/thumbnail-util.js +28 -1
- package/lib/util/thumbnail-util.spec.js +6 -0
- package/lib/util/type-conversion-utils-spec-mockData.js +3 -3
- package/lib/util/type-conversion-utils.d.ts +140 -0
- package/lib/util/type-conversion-utils.js +143 -0
- package/lib/util/type-defaults.d.ts +58 -0
- package/lib/util/type-defaults.js +58 -0
- package/lib/util/type-defaults.spec.js +5 -5
- package/lib/util/type-utils.d.ts +21 -0
- package/lib/util/type-utils.js +23 -0
- package/lib/util/type-utils.spec.js +2 -0
- package/package.json +21 -6
- package/scripts/copy-template.js +10 -0
- package/.github/pull_request_template.md +0 -31
- package/.github/workflows/flexplm-lib.yml +0 -27
- package/.github/workflows/publish-to-npm.yml +0 -121
- package/CHANGELOG.md +0 -32
- package/publish.bat +0 -5
- package/publish.sh +0 -5
- package/src/entity-processor/base-entity-processor.spec.ts +0 -460
- package/src/entity-processor/base-entity-processor.ts +0 -515
- package/src/flexplm-request.ts +0 -28
- package/src/flexplm-utils.spec.ts +0 -27
- package/src/flexplm-utils.ts +0 -29
- package/src/index.ts +0 -22
- package/src/interfaces/interfaces.ts +0 -122
- package/src/interfaces/item-family-changes.ts +0 -67
- package/src/interfaces/publish-change-data.ts +0 -43
- package/src/publish/base-process-publish-assortment-callback.ts +0 -50
- package/src/publish/base-process-publish-assortment.spec.ts +0 -1992
- package/src/publish/base-process-publish-assortment.ts +0 -1134
- package/src/publish/mockData.ts +0 -4561
- package/src/transform/identifier-conversion-spec-mockData.ts +0 -496
- package/src/transform/identifier-conversion.spec.ts +0 -354
- package/src/transform/identifier-conversion.ts +0 -282
- package/src/util/config-defaults.spec.ts +0 -350
- package/src/util/config-defaults.ts +0 -93
- package/src/util/data-converter-spec-mockData.ts +0 -231
- package/src/util/data-converter.spec.ts +0 -1041
- package/src/util/data-converter.ts +0 -762
- package/src/util/error-response-object.spec.ts +0 -116
- package/src/util/error-response-object.ts +0 -50
- package/src/util/event-short-message-status.ts +0 -22
- package/src/util/federation.ts +0 -172
- package/src/util/flexplm-connect.spec.ts +0 -132
- package/src/util/flexplm-connect.ts +0 -208
- package/src/util/logger-config.ts +0 -20
- package/src/util/map-util-spec-mockData.ts +0 -231
- package/src/util/map-utils.spec.ts +0 -103
- package/src/util/map-utils.ts +0 -41
- package/src/util/mockData.ts +0 -101
- package/src/util/thumbnail-util.spec.ts +0 -508
- package/src/util/thumbnail-util.ts +0 -272
- package/src/util/type-conversion-utils-spec-mockData.ts +0 -271
- package/src/util/type-conversion-utils.spec.ts +0 -968
- package/src/util/type-conversion-utils.ts +0 -460
- package/src/util/type-defaults.spec.ts +0 -669
- package/src/util/type-defaults.ts +0 -281
- package/src/util/type-utils.spec.ts +0 -227
- package/src/util/type-utils.ts +0 -144
- package/tsconfig.json +0 -24
- package/tslint.json +0 -57
|
@@ -8,6 +8,7 @@ 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.). */
|
|
11
12
|
this.max_thumbnail_size = 5 * 1024 * 1024;
|
|
12
13
|
this.entities = new sdk_1.Entities();
|
|
13
14
|
if (this.config['max_thumbnail_size']) {
|
|
@@ -17,6 +18,7 @@ class ThumbnailUtil {
|
|
|
17
18
|
async setOutboundThumbnail(data, event) {
|
|
18
19
|
if (event?.newData?.primaryViewableId && event?.newData?.largeViewableDownloadUrl) {
|
|
19
20
|
const primaryViewableId = event.newData.primaryViewableId;
|
|
21
|
+
//get custom sizes
|
|
20
22
|
const fileId = await this.getFileId(primaryViewableId);
|
|
21
23
|
if (fileId) {
|
|
22
24
|
const customSizes = await this.getCustomSizes();
|
|
@@ -31,6 +33,9 @@ class ThumbnailUtil {
|
|
|
31
33
|
}
|
|
32
34
|
return data;
|
|
33
35
|
}
|
|
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
|
+
*/
|
|
34
39
|
isThumbnailNew(event, customSizes) {
|
|
35
40
|
const propertyDiffs = event?.propertyDiffs;
|
|
36
41
|
if (propertyDiffs) {
|
|
@@ -52,6 +57,7 @@ class ThumbnailUtil {
|
|
|
52
57
|
const OOBSizes = JSON.parse(JSON.stringify(ThumbnailUtil.OOB_SIZES));
|
|
53
58
|
sizes.push(...OOBSizes);
|
|
54
59
|
console.info('sizes: ' + JSON.stringify(sizes));
|
|
60
|
+
//get Content
|
|
55
61
|
const content = await this.getContentEntity(primaryViewableId, sizes);
|
|
56
62
|
if (!content) {
|
|
57
63
|
return undefined;
|
|
@@ -99,6 +105,14 @@ class ThumbnailUtil {
|
|
|
99
105
|
this.logContentResults(content, relations);
|
|
100
106
|
return content;
|
|
101
107
|
}
|
|
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
|
+
*/
|
|
102
116
|
logContentResults(content, relations) {
|
|
103
117
|
if (app_framework_1.Logger.isDebugOn() && content && relations) {
|
|
104
118
|
const contentCopy = JSON.parse(JSON.stringify(content));
|
|
@@ -108,12 +122,22 @@ class ThumbnailUtil {
|
|
|
108
122
|
console.debug('content: ' + JSON.stringify(contentCopy));
|
|
109
123
|
}
|
|
110
124
|
}
|
|
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
|
+
*/
|
|
111
134
|
async syncThumbnailToVibeIQ({ entityId, primaryViewableId, event, entityName }) {
|
|
112
135
|
console.debug(`syncThumbnailToVibeIQ: entityId=${entityId}, primaryViewableId=${primaryViewableId}, entityName=${entityName}`);
|
|
113
136
|
const eventData = event.data || {};
|
|
114
137
|
const newThumbnailId = eventData[ThumbnailUtil.NEW_THUMBNAIL_ID];
|
|
115
138
|
const existingThumbnailId = eventData[ThumbnailUtil.EXISTING_THUMBNAIL_ID];
|
|
116
139
|
const thumbnailUrl = newThumbnailId || existingThumbnailId;
|
|
140
|
+
// Case 1: REMOVE_THUMBNAIL
|
|
117
141
|
if (newThumbnailId === ThumbnailUtil.REMOVE_THUMBNAIL) {
|
|
118
142
|
if (primaryViewableId) {
|
|
119
143
|
await this.entities.delete({ entityName: 'content', id: primaryViewableId });
|
|
@@ -123,10 +147,12 @@ class ThumbnailUtil {
|
|
|
123
147
|
console.debug(`syncThumbnailToVibeIQ: applied clear updates for entityId=${entityId}`);
|
|
124
148
|
return updatedEntity;
|
|
125
149
|
}
|
|
150
|
+
// Early return if no thumbnail URL
|
|
126
151
|
if (!thumbnailUrl) {
|
|
127
152
|
console.debug(`syncThumbnailToVibeIQ: no thumbnail URL for entityId=${entityId}`);
|
|
128
153
|
return undefined;
|
|
129
154
|
}
|
|
155
|
+
// Case 2: No existing primaryViewableId — create new content
|
|
130
156
|
if (!primaryViewableId) {
|
|
131
157
|
const content = await this.createContentFromFlexPLM(thumbnailUrl, entityId, entityName);
|
|
132
158
|
await this.entities.update({ entityName: 'content', id: content.id, object: { flexplmThumbnailUrl: thumbnailUrl } });
|
|
@@ -135,10 +161,11 @@ class ThumbnailUtil {
|
|
|
135
161
|
console.debug(`syncThumbnailToVibeIQ: created new content ${content.id} for entityId=${entityId}`);
|
|
136
162
|
return updatedEntity;
|
|
137
163
|
}
|
|
164
|
+
// Case 3: Has primaryViewableId — check if thumbnail changed
|
|
138
165
|
const primaryViewable = await this.entities.get({ entityName: 'content', id: primaryViewableId });
|
|
139
166
|
if (primaryViewable?.flexplmThumbnailUrl === thumbnailUrl) {
|
|
140
167
|
console.debug(`syncThumbnailToVibeIQ: thumbnail already synced for entityId=${entityId}`);
|
|
141
|
-
return undefined;
|
|
168
|
+
return undefined; // Already synced
|
|
142
169
|
}
|
|
143
170
|
const content = await this.createContentFromFlexPLM(thumbnailUrl, entityId, entityName);
|
|
144
171
|
await this.entities.update({ entityName: 'content', id: content.id, object: { flexplmThumbnailUrl: thumbnailUrl } });
|
|
@@ -327,11 +327,13 @@ describe('ThumbnailUtil Tests', () => {
|
|
|
327
327
|
contentType: 'image/png',
|
|
328
328
|
contentHolderReference: 'color:entity1',
|
|
329
329
|
}));
|
|
330
|
+
// Updates content with flexplmThumbnailUrl
|
|
330
331
|
expect(mockEntitiesUpdate).toHaveBeenCalledWith(expect.objectContaining({
|
|
331
332
|
entityName: 'content',
|
|
332
333
|
id: 'newContent1',
|
|
333
334
|
object: { flexplmThumbnailUrl: '/rest/thumbnail/thumb.png' },
|
|
334
335
|
}));
|
|
336
|
+
// Updates the main entity
|
|
335
337
|
expect(mockEntitiesUpdate).toHaveBeenCalledWith(expect.objectContaining({
|
|
336
338
|
entityName: 'color',
|
|
337
339
|
id: 'entity1',
|
|
@@ -405,13 +407,17 @@ describe('ThumbnailUtil Tests', () => {
|
|
|
405
407
|
mockContentCreate.mockResolvedValue(createdContent);
|
|
406
408
|
const event = { data: { [thumbnail_util_1.ThumbnailUtil.NEW_THUMBNAIL_ID]: '/rest/thumbnail/new.jpg' } };
|
|
407
409
|
await tu.syncThumbnailToVibeIQ({ entityId: 'entity1', primaryViewableId: 'oldPv', event, entityName: 'item' });
|
|
410
|
+
// Creates new content
|
|
408
411
|
expect(mockContentCreate).toHaveBeenCalled();
|
|
412
|
+
// Updates new content with flexplmThumbnailUrl
|
|
409
413
|
expect(mockEntitiesUpdate).toHaveBeenCalledWith(expect.objectContaining({
|
|
410
414
|
entityName: 'content',
|
|
411
415
|
id: 'newContent2',
|
|
412
416
|
object: { flexplmThumbnailUrl: '/rest/thumbnail/new.jpg' },
|
|
413
417
|
}));
|
|
418
|
+
// Updates the main entity
|
|
414
419
|
expect(mockEntitiesUpdate).toHaveBeenCalledWith(expect.objectContaining({ entityName: 'item', id: 'entity1' }));
|
|
420
|
+
// Deletes old content
|
|
415
421
|
expect(mockEntitiesDelete).toHaveBeenCalledWith({ entityName: 'content', id: 'oldPv' });
|
|
416
422
|
});
|
|
417
423
|
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 /*, dependencies*/) => {
|
|
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 /*, dependencies*/) => {
|
|
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 /*, dependencies*/) => {
|
|
104
104
|
const prodType = entity['prodType'];
|
|
105
105
|
let val = '';
|
|
106
106
|
switch (prodType) {
|
|
@@ -1,23 +1,163 @@
|
|
|
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
|
+
*/
|
|
2
5
|
export declare class TypeConversionUtils {
|
|
3
6
|
static NO_ENTITY_TYPE: string;
|
|
4
7
|
static VIBE2FLEX_DIRECTION: string;
|
|
5
8
|
static FLEX2VIBE_DIRECTION: string;
|
|
6
9
|
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
|
+
*/
|
|
7
21
|
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
|
+
*/
|
|
8
34
|
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
|
+
*/
|
|
9
47
|
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
|
+
*/
|
|
10
60
|
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
|
+
*/
|
|
11
74
|
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
|
+
*/
|
|
12
81
|
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
|
+
*/
|
|
13
94
|
static getEntityClassFromObject(fileId: any, mapFileUtil: any, object: any): Promise<string>;
|
|
14
95
|
static getEntityTypePathFromOjbect(fileId: any, mapFileUtil: any, object: any): Promise<string>;
|
|
96
|
+
/** Takes in a FlexPLM object and returns the correct VibeIQ
|
|
97
|
+
* type associated to the object. Order of precedence
|
|
98
|
+
* Property 'vibeIQTypePath'
|
|
99
|
+
* Map file entry in 'typeConversion:flex2vibe:<value>:getSoftType()'
|
|
100
|
+
* for value from 'objectClass' or root from 'flexPLMTypePath'
|
|
101
|
+
* TypeDefaults.getDefaultEntityTypePath() function
|
|
102
|
+
*
|
|
103
|
+
* @param transformMapFile id for mapFile
|
|
104
|
+
* @param mapFileUtil class to get mapfile
|
|
105
|
+
* @param entity VibeIQ entity
|
|
106
|
+
* @returns Promise<string>
|
|
107
|
+
*/
|
|
108
|
+
static getEntityTypePathFromObject(fileId: any, mapFileUtil: any, object: any): Promise<string>;
|
|
109
|
+
/**Takes in a FlexPLM object and returns the correct
|
|
110
|
+
* identifier properties. Order of precedence
|
|
111
|
+
* Property 'vibeIQIdentifierProperties'
|
|
112
|
+
* Map file entry in 'typeConversion:flex2vibe:<value>:getIdentifierProperties()'
|
|
113
|
+
* for value from 'objectClass'
|
|
114
|
+
* TypeDefaults.getDefaultIdentifierPropertiesFromObject() function
|
|
115
|
+
*
|
|
116
|
+
* @param transformMapFile id for mapFile
|
|
117
|
+
* @param mapFileUtil class to get mapfile
|
|
118
|
+
* @param object
|
|
119
|
+
* @returns Promise<string[]>
|
|
120
|
+
*/
|
|
15
121
|
static getIdentifierPropertiesFromObject(fileId: any, mapFileUtil: MapFileUtil, object: any): Promise<string[]>;
|
|
122
|
+
/**Takes in a FlexPLM object and returns the correct
|
|
123
|
+
* identifier properties. Order of precedence
|
|
124
|
+
* Property 'vibeIQIdentifierProperties'
|
|
125
|
+
* Map file entry in 'typeConversion:flex2vibe:<value>:getInformationalProperties()'
|
|
126
|
+
* for value from 'objectClass'
|
|
127
|
+
* TypeDefaults.getDefaultIdentifierPropertiesFromObject() function
|
|
128
|
+
*
|
|
129
|
+
* @param transformMapFile id for mapFile
|
|
130
|
+
* @param mapFileUtil class to get mapfile
|
|
131
|
+
* @param object
|
|
132
|
+
* @returns Promise<string[]>
|
|
133
|
+
*/
|
|
16
134
|
static getInformationalPropertiesFromObject(fileId: any, mapFileUtil: MapFileUtil, object: any): Promise<string[]>;
|
|
17
135
|
static getMapKeyFromObject(fileId: any, mapFileUtil: MapFileUtil, object: any, direction: string): Promise<string | undefined>;
|
|
18
136
|
static isInboundCreatableFromObject(fileId: string, mapFileUtil: MapFileUtil, object: any, context?: any): Promise<boolean>;
|
|
19
137
|
static isOutboundCreatableFromEntity(fileId: string, mapFileUtil: MapFileUtil, entity: any, context?: any): Promise<boolean>;
|
|
138
|
+
/** Takes in a FlexPLM object and determines whether inbound
|
|
139
|
+
* images should be synced. In most cases, the creation owning system
|
|
140
|
+
* will also control image syncing. Defaults to false if no mapping exists.
|
|
141
|
+
* Map file entry in '<mapKey>:syncInboundImages()'
|
|
142
|
+
*
|
|
143
|
+
* @param fileId id for mapFile
|
|
144
|
+
* @param mapFileUtil class to get mapfile
|
|
145
|
+
* @param object FlexPLM object
|
|
146
|
+
* @param context optional context object
|
|
147
|
+
* @returns Promise<boolean>
|
|
148
|
+
*/
|
|
20
149
|
static syncInboundImages(fileId: string, mapFileUtil: MapFileUtil, object: any, context?: any): Promise<boolean>;
|
|
150
|
+
/** Takes in a VibeIQ entity object and determines whether outbound
|
|
151
|
+
* images should be synced. In most cases, the creation owning system
|
|
152
|
+
* will also control image syncing. Defaults to true if no mapping exists.
|
|
153
|
+
* Map file entry in '<mapKey>:syncOutboundImages()'
|
|
154
|
+
*
|
|
155
|
+
* @param fileId id for mapFile
|
|
156
|
+
* @param mapFileUtil class to get mapfile
|
|
157
|
+
* @param entity VibeIQ entity
|
|
158
|
+
* @param context optional context object
|
|
159
|
+
* @returns Promise<boolean>
|
|
160
|
+
*/
|
|
21
161
|
static syncOutboundImages(fileId: string, mapFileUtil: MapFileUtil, entity: any, context?: any): Promise<boolean>;
|
|
22
162
|
static getObjectType(object: any): any;
|
|
23
163
|
}
|
|
@@ -3,9 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TypeConversionUtils = void 0;
|
|
4
4
|
const type_defaults_1 = require("./type-defaults");
|
|
5
5
|
const map_utils_1 = require("./map-utils");
|
|
6
|
+
/** This class is helper functions to get the data for converting
|
|
7
|
+
* VibeIQ entities to / from FlexPLM Objects
|
|
8
|
+
*/
|
|
6
9
|
class TypeConversionUtils {
|
|
7
10
|
constructor() {
|
|
8
11
|
}
|
|
12
|
+
/** Takes in a VibeIQ entity object and returns the correct FlexPLM
|
|
13
|
+
* object class associated to the entity. Order of precedence
|
|
14
|
+
* Property 'flexPLMObjectClass'
|
|
15
|
+
* Map file entry in 'typeConversion:vibe2flex:<value>:getObjectClass()'
|
|
16
|
+
* for value from 'entityClass' or root from 'typePath'
|
|
17
|
+
* TypeDefaults.getDefaultObjectClass() function
|
|
18
|
+
* @param transformMapFile id for mapFile
|
|
19
|
+
* @param mapFileUtil class to get mapfile
|
|
20
|
+
* @param entity
|
|
21
|
+
* @returns Promise<string>
|
|
22
|
+
*/
|
|
9
23
|
static async getObjectClass(transformMapFile, mapFileUtil, entity) {
|
|
10
24
|
let objectClass = entity['flexPLMObjectClass'];
|
|
11
25
|
if (objectClass) {
|
|
@@ -23,6 +37,18 @@ class TypeConversionUtils {
|
|
|
23
37
|
}
|
|
24
38
|
return type_defaults_1.TypeDefaults.getDefaultObjectClass(entity);
|
|
25
39
|
}
|
|
40
|
+
/** Takes in a VibeIQ entity object and returns the correct FlexPLM
|
|
41
|
+
* FlexType associated to the entity. Order of precedence
|
|
42
|
+
* Property 'flexPLMTypePath'
|
|
43
|
+
* Map file entry in 'typeConversion:vibe2flex:<value>:getSoftType()'
|
|
44
|
+
* for value from 'entityClass' or root from 'typePath'
|
|
45
|
+
* TypeDefaults.getDefaultObjectTypePath() function
|
|
46
|
+
*
|
|
47
|
+
* @param transformMapFile id for mapFile
|
|
48
|
+
* @param mapFileUtil class to get mapfile
|
|
49
|
+
* @param entity VibeIQ entity
|
|
50
|
+
* @returns Promise<string>
|
|
51
|
+
*/
|
|
26
52
|
static async getObjectTypePath(transformMapFile, mapFileUtil, entity) {
|
|
27
53
|
let typePath = entity['flexPLMTypePath'];
|
|
28
54
|
if (typePath) {
|
|
@@ -40,6 +66,18 @@ class TypeConversionUtils {
|
|
|
40
66
|
}
|
|
41
67
|
return type_defaults_1.TypeDefaults.getDefaultObjectTypePath(entity);
|
|
42
68
|
}
|
|
69
|
+
/**Takes in a VibeIQ entity object and returns the correct
|
|
70
|
+
* identifier properties. Order of precedence
|
|
71
|
+
* Property 'flexPLMIdentifierProperties'
|
|
72
|
+
* Map file entry in 'typeConversion:vibe2flex:<value>:getIdentifierProperties()'
|
|
73
|
+
* for value from 'entityClass' or root from 'typePath'
|
|
74
|
+
* TypeDefaults.getDefaultIdentifierProperties() function
|
|
75
|
+
*
|
|
76
|
+
* @param transformMapFile id for mapFile
|
|
77
|
+
* @param mapFileUtil class to get mapfile
|
|
78
|
+
* @param entity
|
|
79
|
+
* @returns Promise<string[]>
|
|
80
|
+
*/
|
|
43
81
|
static async getIdentifierProperties(transformMapFile, mapFileUtil, entity) {
|
|
44
82
|
let identifiers = entity['flexPLMIdentifierProperties'];
|
|
45
83
|
if (identifiers) {
|
|
@@ -57,6 +95,18 @@ class TypeConversionUtils {
|
|
|
57
95
|
}
|
|
58
96
|
return type_defaults_1.TypeDefaults.getDefaultIdentifierProperties(entity);
|
|
59
97
|
}
|
|
98
|
+
/**Takes in a VibeIQ entity object and returns the correct
|
|
99
|
+
* informational properties. Order of precedence
|
|
100
|
+
* Property 'flexPLMInformationalProperties'
|
|
101
|
+
* Map file entry in 'typeConversion:vibe2flex:<value>:getInformationalProperties()'
|
|
102
|
+
* for value from 'entityClass' or root from 'typePath'
|
|
103
|
+
* TypeDefaults.getDefaultObjectTypePath() function
|
|
104
|
+
*
|
|
105
|
+
* @param transformMapFile id for mapFile
|
|
106
|
+
* @param mapFileUtil class to get mapfile
|
|
107
|
+
* @param entity
|
|
108
|
+
* @returns string
|
|
109
|
+
*/
|
|
60
110
|
static async getInformationalProperties(transformMapFile, mapFileUtil, entity) {
|
|
61
111
|
let identifiers = entity['flexPLMInformationalProperties'];
|
|
62
112
|
if (identifiers) {
|
|
@@ -74,6 +124,19 @@ class TypeConversionUtils {
|
|
|
74
124
|
}
|
|
75
125
|
return type_defaults_1.TypeDefaults.getDefaultInformationalProperties(entity);
|
|
76
126
|
}
|
|
127
|
+
/**Takes in a VibeIQ entity object and returns the correct mapKey
|
|
128
|
+
* Order of precedence:
|
|
129
|
+
* Map file entry in 'typeConversion:<direction>:<value>:getObjectClass()'
|
|
130
|
+
* for value from 'entityClass' or root from 'typePath'
|
|
131
|
+
* TypeDefaults.getDefaultObjectClass() function
|
|
132
|
+
*
|
|
133
|
+
* @param transformMapFile
|
|
134
|
+
* @param mapFileUtil
|
|
135
|
+
* @param entity
|
|
136
|
+
* @param type
|
|
137
|
+
* @param direction
|
|
138
|
+
* @returns
|
|
139
|
+
*/
|
|
77
140
|
static async getMapKey(transformMapFile, mapFileUtil, entity, direction) {
|
|
78
141
|
if (transformMapFile) {
|
|
79
142
|
const type = this.getEntityType(entity);
|
|
@@ -85,6 +148,12 @@ class TypeConversionUtils {
|
|
|
85
148
|
}
|
|
86
149
|
return type_defaults_1.TypeDefaults.getDefaultObjectClass(entity);
|
|
87
150
|
}
|
|
151
|
+
/** Returns the VibeIQ entity type from an entity.
|
|
152
|
+
* Throws error if it can't determine the entity type
|
|
153
|
+
*
|
|
154
|
+
* @param entity
|
|
155
|
+
* @returns string
|
|
156
|
+
*/
|
|
88
157
|
static getEntityType(entity) {
|
|
89
158
|
let entityType = entity['entityType'];
|
|
90
159
|
if (!entityType) {
|
|
@@ -101,6 +170,18 @@ class TypeConversionUtils {
|
|
|
101
170
|
}
|
|
102
171
|
return entityType;
|
|
103
172
|
}
|
|
173
|
+
/** Takes in a FlexPLM object and returns the correct VibeIQ entity
|
|
174
|
+
* class associated to the object. Order of precedence
|
|
175
|
+
* Property 'vibeIQEntityClass'
|
|
176
|
+
* Map file entry in 'typeConversion:flex2vibe:<value>:getObjectClass()'
|
|
177
|
+
* for value from 'objectClass'
|
|
178
|
+
* TypeDefaults.getDefaultEntityClass() function
|
|
179
|
+
*
|
|
180
|
+
* @param fileId id for mapFile
|
|
181
|
+
* @param mapFileUtil class to get mapfile
|
|
182
|
+
* @param object FlexPLM object
|
|
183
|
+
* @returns Promise<string>
|
|
184
|
+
*/
|
|
104
185
|
static async getEntityClassFromObject(fileId, mapFileUtil, object) {
|
|
105
186
|
let entityClass = object['vibeIQEntityClass'];
|
|
106
187
|
if (entityClass) {
|
|
@@ -119,6 +200,21 @@ class TypeConversionUtils {
|
|
|
119
200
|
return type_defaults_1.TypeDefaults.getDefaultEntityClass(object);
|
|
120
201
|
}
|
|
121
202
|
static async getEntityTypePathFromOjbect(fileId, mapFileUtil, object) {
|
|
203
|
+
return await this.getEntityTypePathFromObject(fileId, mapFileUtil, object);
|
|
204
|
+
}
|
|
205
|
+
/** Takes in a FlexPLM object and returns the correct VibeIQ
|
|
206
|
+
* type associated to the object. Order of precedence
|
|
207
|
+
* Property 'vibeIQTypePath'
|
|
208
|
+
* Map file entry in 'typeConversion:flex2vibe:<value>:getSoftType()'
|
|
209
|
+
* for value from 'objectClass' or root from 'flexPLMTypePath'
|
|
210
|
+
* TypeDefaults.getDefaultEntityTypePath() function
|
|
211
|
+
*
|
|
212
|
+
* @param transformMapFile id for mapFile
|
|
213
|
+
* @param mapFileUtil class to get mapfile
|
|
214
|
+
* @param entity VibeIQ entity
|
|
215
|
+
* @returns Promise<string>
|
|
216
|
+
*/
|
|
217
|
+
static async getEntityTypePathFromObject(fileId, mapFileUtil, object) {
|
|
122
218
|
let typePath = object['vibeIQTypePath'];
|
|
123
219
|
if (typePath) {
|
|
124
220
|
return typePath;
|
|
@@ -135,6 +231,18 @@ class TypeConversionUtils {
|
|
|
135
231
|
}
|
|
136
232
|
return type_defaults_1.TypeDefaults.getDefaultEntityTypePath(object);
|
|
137
233
|
}
|
|
234
|
+
/**Takes in a FlexPLM object and returns the correct
|
|
235
|
+
* identifier properties. Order of precedence
|
|
236
|
+
* Property 'vibeIQIdentifierProperties'
|
|
237
|
+
* Map file entry in 'typeConversion:flex2vibe:<value>:getIdentifierProperties()'
|
|
238
|
+
* for value from 'objectClass'
|
|
239
|
+
* TypeDefaults.getDefaultIdentifierPropertiesFromObject() function
|
|
240
|
+
*
|
|
241
|
+
* @param transformMapFile id for mapFile
|
|
242
|
+
* @param mapFileUtil class to get mapfile
|
|
243
|
+
* @param object
|
|
244
|
+
* @returns Promise<string[]>
|
|
245
|
+
*/
|
|
138
246
|
static async getIdentifierPropertiesFromObject(fileId, mapFileUtil, object) {
|
|
139
247
|
let identifiers = object['vibeIQIdentifierProperties'];
|
|
140
248
|
if (identifiers) {
|
|
@@ -152,6 +260,18 @@ class TypeConversionUtils {
|
|
|
152
260
|
}
|
|
153
261
|
return type_defaults_1.TypeDefaults.getDefaultIdentifierPropertiesFromObject(object);
|
|
154
262
|
}
|
|
263
|
+
/**Takes in a FlexPLM object and returns the correct
|
|
264
|
+
* identifier properties. Order of precedence
|
|
265
|
+
* Property 'vibeIQIdentifierProperties'
|
|
266
|
+
* Map file entry in 'typeConversion:flex2vibe:<value>:getInformationalProperties()'
|
|
267
|
+
* for value from 'objectClass'
|
|
268
|
+
* TypeDefaults.getDefaultIdentifierPropertiesFromObject() function
|
|
269
|
+
*
|
|
270
|
+
* @param transformMapFile id for mapFile
|
|
271
|
+
* @param mapFileUtil class to get mapfile
|
|
272
|
+
* @param object
|
|
273
|
+
* @returns Promise<string[]>
|
|
274
|
+
*/
|
|
155
275
|
static async getInformationalPropertiesFromObject(fileId, mapFileUtil, object) {
|
|
156
276
|
let identifiers = object['vibeIQInformationalProperties'];
|
|
157
277
|
if (identifiers) {
|
|
@@ -179,6 +299,7 @@ class TypeConversionUtils {
|
|
|
179
299
|
}
|
|
180
300
|
return type;
|
|
181
301
|
}
|
|
302
|
+
//TODO use TypeDefaults?
|
|
182
303
|
}
|
|
183
304
|
static async isInboundCreatableFromObject(fileId, mapFileUtil, object, context) {
|
|
184
305
|
let isInboundCreatable = false;
|
|
@@ -212,6 +333,17 @@ class TypeConversionUtils {
|
|
|
212
333
|
}
|
|
213
334
|
return isOutboundCreatable;
|
|
214
335
|
}
|
|
336
|
+
/** Takes in a FlexPLM object and determines whether inbound
|
|
337
|
+
* images should be synced. In most cases, the creation owning system
|
|
338
|
+
* will also control image syncing. Defaults to false if no mapping exists.
|
|
339
|
+
* Map file entry in '<mapKey>:syncInboundImages()'
|
|
340
|
+
*
|
|
341
|
+
* @param fileId id for mapFile
|
|
342
|
+
* @param mapFileUtil class to get mapfile
|
|
343
|
+
* @param object FlexPLM object
|
|
344
|
+
* @param context optional context object
|
|
345
|
+
* @returns Promise<boolean>
|
|
346
|
+
*/
|
|
215
347
|
static async syncInboundImages(fileId, mapFileUtil, object, context) {
|
|
216
348
|
let syncImages = false;
|
|
217
349
|
if (!fileId) {
|
|
@@ -233,6 +365,17 @@ class TypeConversionUtils {
|
|
|
233
365
|
}
|
|
234
366
|
return syncImages;
|
|
235
367
|
}
|
|
368
|
+
/** Takes in a VibeIQ entity object and determines whether outbound
|
|
369
|
+
* images should be synced. In most cases, the creation owning system
|
|
370
|
+
* will also control image syncing. Defaults to true if no mapping exists.
|
|
371
|
+
* Map file entry in '<mapKey>:syncOutboundImages()'
|
|
372
|
+
*
|
|
373
|
+
* @param fileId id for mapFile
|
|
374
|
+
* @param mapFileUtil class to get mapfile
|
|
375
|
+
* @param entity VibeIQ entity
|
|
376
|
+
* @param context optional context object
|
|
377
|
+
* @returns Promise<boolean>
|
|
378
|
+
*/
|
|
236
379
|
static async syncOutboundImages(fileId, mapFileUtil, entity, context) {
|
|
237
380
|
let syncImages = true;
|
|
238
381
|
if (!fileId) {
|
|
@@ -3,14 +3,72 @@ export declare class TypeDefaults {
|
|
|
3
3
|
static NO_OBJECT_CLASS: string;
|
|
4
4
|
static NO_TYPE_PATH: string;
|
|
5
5
|
constructor();
|
|
6
|
+
/**Takes in full entity and returs the default FlexPLM
|
|
7
|
+
* object class.
|
|
8
|
+
*
|
|
9
|
+
* @param entity
|
|
10
|
+
* @returns string
|
|
11
|
+
*/
|
|
6
12
|
static getDefaultObjectClass(entity: any): string;
|
|
13
|
+
/**Takes in full entity and returns the default FlexPLM type path
|
|
14
|
+
* object class.
|
|
15
|
+
*
|
|
16
|
+
* @param entity
|
|
17
|
+
* @returns string
|
|
18
|
+
*/
|
|
7
19
|
static getDefaultObjectTypePath(entity: any): string;
|
|
20
|
+
/**Takes in full entity and returns the slugs for the default identifier
|
|
21
|
+
* properties. These properties are used when searching for an entity
|
|
22
|
+
* object class.
|
|
23
|
+
*
|
|
24
|
+
* @param entity
|
|
25
|
+
* @returns string[]
|
|
26
|
+
*/
|
|
8
27
|
static getDefaultIdentifierProperties(entity: any): string[];
|
|
28
|
+
/** Takes in full entity and returns the slugs for informational
|
|
29
|
+
* properties. These properties are helpful when debugging issues
|
|
30
|
+
* where the identifier properties don't find a match.
|
|
31
|
+
*
|
|
32
|
+
* @param entity
|
|
33
|
+
* @returns string[]
|
|
34
|
+
*/
|
|
9
35
|
static getDefaultInformationalProperties(entity: any): string[];
|
|
36
|
+
/** Returns the VibeIQ entity type from an entity.
|
|
37
|
+
* Throws error if it can't determine the entity type
|
|
38
|
+
*
|
|
39
|
+
* @param entity
|
|
40
|
+
* @returns string
|
|
41
|
+
*/
|
|
10
42
|
static getEntityType(entity: any): any;
|
|
43
|
+
/**Takes in full object and returns the default VibeIQ
|
|
44
|
+
* entity class.
|
|
45
|
+
*
|
|
46
|
+
* @param entity
|
|
47
|
+
* @returns string
|
|
48
|
+
*/
|
|
11
49
|
static getDefaultEntityClass(object: any): string;
|
|
50
|
+
/**Takes in full object and returns the default VibeIQ type path
|
|
51
|
+
* object class.
|
|
52
|
+
*
|
|
53
|
+
* @param object
|
|
54
|
+
* @returns string
|
|
55
|
+
*/
|
|
12
56
|
static getDefaultEntityTypePath(object: any): string;
|
|
57
|
+
/**Takes in full entity and returns the slugs for the default identifier
|
|
58
|
+
* properties. These properties are used when searching for an entity
|
|
59
|
+
* object class.
|
|
60
|
+
*
|
|
61
|
+
* @param entity
|
|
62
|
+
* @returns string[]
|
|
63
|
+
*/
|
|
13
64
|
static getDefaultIdentifierPropertiesFromObject(object: any): string[];
|
|
65
|
+
/** Takes in full object and returns the slugs for informational
|
|
66
|
+
* properties. These properties are helpful when debugging issues
|
|
67
|
+
* where the identifier properties don't find a match.
|
|
68
|
+
*
|
|
69
|
+
* @param object
|
|
70
|
+
* @returns string[]
|
|
71
|
+
*/
|
|
14
72
|
static getDefaultInformationalPropertiesFromObject(object: any): string[];
|
|
15
73
|
static getObjectClass(object: any): string;
|
|
16
74
|
}
|