@contrail/flexplm 1.3.0-alpha.0 → 1.3.0-alpha.04c91a9

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 (126) hide show
  1. package/.github/pull_request_template.md +31 -31
  2. package/.github/workflows/flexplm-lib.yml +27 -27
  3. package/.github/workflows/publish-to-npm.yml +131 -0
  4. package/CHANGELOG.md +11 -1
  5. package/lib/entity-processor/base-entity-processor.d.ts +42 -0
  6. package/lib/entity-processor/base-entity-processor.js +385 -0
  7. package/lib/entity-processor/base-entity-processor.spec.d.ts +1 -0
  8. package/lib/entity-processor/base-entity-processor.spec.js +397 -0
  9. package/lib/flexplm-request.d.ts +3 -0
  10. package/lib/flexplm-request.js +34 -0
  11. package/lib/flexplm-utils.d.ts +5 -0
  12. package/lib/flexplm-utils.js +33 -0
  13. package/lib/flexplm-utils.spec.d.ts +1 -0
  14. package/lib/flexplm-utils.spec.js +26 -0
  15. package/lib/index.d.ts +22 -0
  16. package/lib/index.js +38 -0
  17. package/lib/interfaces/interfaces.d.ts +105 -0
  18. package/lib/interfaces/interfaces.js +2 -0
  19. package/lib/interfaces/item-family-changes.d.ts +20 -0
  20. package/lib/interfaces/item-family-changes.js +56 -0
  21. package/lib/interfaces/publish-change-data.d.ts +19 -0
  22. package/lib/interfaces/publish-change-data.js +32 -0
  23. package/lib/publish/base-process-publish-assortment-callback.d.ts +9 -0
  24. package/lib/publish/base-process-publish-assortment-callback.js +38 -0
  25. package/lib/publish/base-process-publish-assortment.d.ts +93 -0
  26. package/lib/publish/base-process-publish-assortment.js +944 -0
  27. package/lib/publish/base-process-publish-assortment.spec.d.ts +1 -0
  28. package/lib/publish/base-process-publish-assortment.spec.js +1670 -0
  29. package/lib/publish/mockData.d.ts +1389 -0
  30. package/lib/publish/mockData.js +4519 -0
  31. package/lib/transform/identifier-conversion-spec-mockData.d.ts +0 -0
  32. package/lib/transform/identifier-conversion-spec-mockData.js +444 -0
  33. package/lib/transform/identifier-conversion.d.ts +15 -0
  34. package/lib/transform/identifier-conversion.js +212 -0
  35. package/lib/transform/identifier-conversion.spec.d.ts +1 -0
  36. package/lib/transform/identifier-conversion.spec.js +339 -0
  37. package/lib/util/config-defaults.d.ts +8 -0
  38. package/lib/util/config-defaults.js +85 -0
  39. package/lib/util/config-defaults.spec.d.ts +1 -0
  40. package/lib/util/config-defaults.spec.js +293 -0
  41. package/lib/util/data-converter-spec-mockData.d.ts +0 -0
  42. package/lib/util/data-converter-spec-mockData.js +205 -0
  43. package/lib/util/data-converter.d.ts +39 -0
  44. package/lib/util/data-converter.js +592 -0
  45. package/lib/util/data-converter.spec.d.ts +1 -0
  46. package/lib/util/data-converter.spec.js +904 -0
  47. package/lib/util/error-response-object.d.ts +4 -0
  48. package/lib/util/error-response-object.js +47 -0
  49. package/lib/util/error-response-object.spec.d.ts +1 -0
  50. package/lib/util/error-response-object.spec.js +99 -0
  51. package/lib/util/event-short-message-status.d.ts +19 -0
  52. package/lib/util/event-short-message-status.js +23 -0
  53. package/lib/util/federation.d.ts +15 -0
  54. package/lib/util/federation.js +149 -0
  55. package/lib/util/flexplm-connect.d.ts +22 -0
  56. package/lib/util/flexplm-connect.js +176 -0
  57. package/lib/util/flexplm-connect.spec.d.ts +1 -0
  58. package/lib/util/flexplm-connect.spec.js +88 -0
  59. package/lib/util/logger-config.d.ts +1 -0
  60. package/lib/util/logger-config.js +26 -0
  61. package/lib/util/map-util-spec-mockData.d.ts +0 -0
  62. package/lib/util/map-util-spec-mockData.js +205 -0
  63. package/lib/util/map-utils.d.ts +6 -0
  64. package/lib/util/map-utils.js +15 -0
  65. package/lib/util/map-utils.spec.d.ts +1 -0
  66. package/lib/util/map-utils.spec.js +89 -0
  67. package/lib/util/mockData.d.ts +80 -0
  68. package/lib/util/mockData.js +103 -0
  69. package/lib/util/thumbnail-util.d.ts +34 -0
  70. package/lib/util/thumbnail-util.js +215 -0
  71. package/lib/util/thumbnail-util.spec.d.ts +1 -0
  72. package/lib/util/thumbnail-util.spec.js +434 -0
  73. package/lib/util/type-conversion-utils-spec-mockData.d.ts +0 -0
  74. package/lib/util/type-conversion-utils-spec-mockData.js +259 -0
  75. package/lib/util/type-conversion-utils.d.ts +23 -0
  76. package/lib/util/type-conversion-utils.js +265 -0
  77. package/lib/util/type-conversion-utils.spec.d.ts +1 -0
  78. package/lib/util/type-conversion-utils.spec.js +868 -0
  79. package/lib/util/type-defaults.d.ts +16 -0
  80. package/lib/util/type-defaults.js +221 -0
  81. package/lib/util/type-defaults.spec.d.ts +1 -0
  82. package/lib/util/type-defaults.spec.js +516 -0
  83. package/lib/util/type-utils.d.ts +13 -0
  84. package/lib/util/type-utils.js +114 -0
  85. package/lib/util/type-utils.spec.d.ts +1 -0
  86. package/lib/util/type-utils.spec.js +190 -0
  87. package/package.json +1 -1
  88. package/publish.bat +4 -4
  89. package/publish.sh +4 -4
  90. package/src/entity-processor/base-entity-processor.spec.ts +122 -0
  91. package/src/entity-processor/base-entity-processor.ts +31 -2
  92. package/src/flexplm-request.ts +28 -28
  93. package/src/flexplm-utils.spec.ts +27 -27
  94. package/src/flexplm-utils.ts +29 -29
  95. package/src/index.ts +21 -21
  96. package/src/interfaces/item-family-changes.ts +66 -66
  97. package/src/interfaces/publish-change-data.ts +42 -42
  98. package/src/publish/base-process-publish-assortment-callback.ts +50 -50
  99. package/src/transform/identifier-conversion-spec-mockData.ts +495 -495
  100. package/src/transform/identifier-conversion.spec.ts +353 -353
  101. package/src/transform/identifier-conversion.ts +281 -281
  102. package/src/util/config-defaults.spec.ts +350 -350
  103. package/src/util/config-defaults.ts +92 -92
  104. package/src/util/data-converter-spec-mockData.ts +230 -230
  105. package/src/util/error-response-object.spec.ts +115 -115
  106. package/src/util/error-response-object.ts +49 -49
  107. package/src/util/event-short-message-status.ts +1 -0
  108. package/src/util/federation.ts +172 -172
  109. package/src/util/logger-config.ts +19 -19
  110. package/src/util/map-util-spec-mockData.ts +230 -230
  111. package/src/util/map-utils.spec.ts +102 -102
  112. package/src/util/map-utils.ts +40 -40
  113. package/src/util/mockData.ts +101 -97
  114. package/src/util/thumbnail-util.spec.ts +239 -0
  115. package/src/util/thumbnail-util.ts +140 -5
  116. package/src/util/type-conversion-utils.spec.ts +25 -25
  117. package/src/util/type-conversion-utils.ts +10 -10
  118. package/src/util/type-defaults.spec.ts +668 -668
  119. package/src/util/type-defaults.ts +280 -280
  120. package/src/util/type-utils.spec.ts +227 -227
  121. package/src/util/type-utils.ts +144 -144
  122. package/tsconfig.json +23 -26
  123. package/tslint.json +57 -57
  124. package/.claude/settings.local.json +0 -7
  125. package/scripts/output.png +0 -0
  126. package/scripts/test-get-request.ts +0 -35
@@ -1,31 +1,31 @@
1
- ## What
2
- - [ ] Bugfix
3
- - [ ] Feature
4
- - [ ] Enhancement
5
-
6
- Description:
7
- <!--
8
- Describe the functional changes of the PR.
9
-
10
- If the mechanism of your change are complex, describe them in detail as you
11
- would if you were explaining them to a team mate.
12
-
13
- If the PR is simple, there is no need to repeat yourself. A small description
14
- is sufficient.
15
- -->
16
-
17
- ## Why
18
- <!--
19
- why is this change needed? Same rules as with #What
20
- -->
21
-
22
-
23
- ## Testing added
24
- <!--
25
- Describe the testing you added to this PR
26
- -->
27
-
28
-
29
- ## Link to Jira ticket(s)
30
- https://vibe-team.atlassian.net/browse/VIBE-TICKET_NUMBER_HERE
31
-
1
+ ## What
2
+ - [ ] Bugfix
3
+ - [ ] Feature
4
+ - [ ] Enhancement
5
+
6
+ Description:
7
+ <!--
8
+ Describe the functional changes of the PR.
9
+
10
+ If the mechanism of your change are complex, describe them in detail as you
11
+ would if you were explaining them to a team mate.
12
+
13
+ If the PR is simple, there is no need to repeat yourself. A small description
14
+ is sufficient.
15
+ -->
16
+
17
+ ## Why
18
+ <!--
19
+ why is this change needed? Same rules as with #What
20
+ -->
21
+
22
+
23
+ ## Testing added
24
+ <!--
25
+ Describe the testing you added to this PR
26
+ -->
27
+
28
+
29
+ ## Link to Jira ticket(s)
30
+ https://vibe-team.atlassian.net/browse/VIBE-TICKET_NUMBER_HERE
31
+
@@ -1,27 +1,27 @@
1
- name: flexplm-lib-tests
2
- on:
3
- pull_request:
4
- workflow_dispatch: # allow running in github actions manually
5
- jobs:
6
- test:
7
- runs-on: ubuntu-24.04
8
- strategy:
9
- matrix:
10
- node-version: [22.14.0]
11
- steps:
12
- - name: Node.js
13
- uses: actions/setup-node@v3
14
- with:
15
- node-version: ${{ matrix.node-version }}
16
-
17
- - uses: actions/checkout@v3
18
-
19
- - name: NPM Install
20
- env:
21
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
22
- run: npm ci
23
-
24
- - name: Unit Tests -
25
- env:
26
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
27
- run: npm test
1
+ name: flexplm-lib-tests
2
+ on:
3
+ pull_request:
4
+ workflow_dispatch: # allow running in github actions manually
5
+ jobs:
6
+ test:
7
+ runs-on: ubuntu-24.04
8
+ strategy:
9
+ matrix:
10
+ node-version: [22.14.0, 24]
11
+ steps:
12
+ - name: Node.js
13
+ uses: actions/setup-node@v3
14
+ with:
15
+ node-version: ${{ matrix.node-version }}
16
+
17
+ - uses: actions/checkout@v3
18
+
19
+ - name: NPM Install
20
+ env:
21
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
22
+ run: npm ci
23
+
24
+ - name: Unit Tests -
25
+ env:
26
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
27
+ run: npm test
@@ -0,0 +1,131 @@
1
+ name: Publish to NPM
2
+
3
+ on:
4
+ push:
5
+ branches: [master]
6
+ paths-ignore:
7
+ - '.github/**'
8
+ pull_request:
9
+ branches: [master]
10
+ paths-ignore:
11
+ - '.github/**'
12
+
13
+ jobs:
14
+ check-version:
15
+ name: Verify version is available on npm
16
+ if: github.event_name == 'pull_request'
17
+ runs-on: ubuntu-latest
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+
21
+ - name: Check version not already published
22
+ run: |
23
+ PACKAGE_NAME=$(node -p "require('./package.json').name")
24
+ VERSION=$(node -p "require('./package.json').version")
25
+ echo "Checking if ${PACKAGE_NAME}@${VERSION} exists on npm..."
26
+ if npm view "${PACKAGE_NAME}@${VERSION}" version 2>/dev/null; then
27
+ echo "::error::Version ${VERSION} is already published on npm. Bump the version in package.json before merging."
28
+ exit 1
29
+ else
30
+ echo "Version ${VERSION} is available."
31
+ fi
32
+
33
+ publish-alpha:
34
+ name: Publish alpha
35
+ if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
36
+ runs-on: ubuntu-latest
37
+ permissions:
38
+ id-token: write
39
+ contents: read
40
+ outputs:
41
+ version: ${{ steps.publish.outputs.version }}
42
+ steps:
43
+ - uses: actions/checkout@v4
44
+
45
+ - uses: actions/setup-node@v4
46
+ with:
47
+ node-version: '24'
48
+ registry-url: 'https://registry.npmjs.org'
49
+
50
+ - name: Install and build
51
+ run: npm ci && npm run build
52
+
53
+ - name: Verify no private dependencies
54
+ run: |
55
+ node -e "
56
+ const deps = require('./package.json').dependencies || {};
57
+ const { execSync } = require('child_process');
58
+ let failed = false;
59
+ for (const pkg of Object.keys(deps)) {
60
+ try {
61
+ execSync('npm view ' + pkg, { stdio: 'pipe' });
62
+ } catch {
63
+ console.error('::error::Dependency ' + pkg + ' is not publicly accessible on npm');
64
+ failed = true;
65
+ }
66
+ }
67
+ if (failed) process.exit(1);
68
+ console.log('All ' + Object.keys(deps).length + ' dependencies are public.');
69
+ "
70
+
71
+ - name: Publish alpha
72
+ id: publish
73
+ run: |
74
+ SHORT_SHA=$(echo ${{ github.event.pull_request.head.sha }} | cut -c1-7)
75
+ VERSION=$(node -p "require('./package.json').version")-alpha.${SHORT_SHA}
76
+ npm version $VERSION --no-git-tag-version
77
+ OUTPUT=$(npm publish --tag alpha 2>&1) && {
78
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
79
+ } || {
80
+ if echo "$OUTPUT" | grep -q "You cannot publish over the previously published versions"; then
81
+ echo "::warning::Alpha ${VERSION} already published, skipping."
82
+ else
83
+ echo "::error::Failed to publish alpha ${VERSION}"
84
+ echo "$OUTPUT"
85
+ exit 1
86
+ fi
87
+ }
88
+
89
+ publish-release:
90
+ name: Publish release
91
+ if: github.event_name == 'push'
92
+ runs-on: ubuntu-latest
93
+ permissions:
94
+ id-token: write
95
+ contents: read
96
+ outputs:
97
+ version: ${{ steps.publish.outputs.version }}
98
+ steps:
99
+ - uses: actions/checkout@v4
100
+
101
+ - uses: actions/setup-node@v4
102
+ with:
103
+ node-version: '24'
104
+ registry-url: 'https://registry.npmjs.org'
105
+
106
+ - name: Install and build
107
+ run: npm ci && npm run build
108
+
109
+ - name: Verify no private dependencies
110
+ run: |
111
+ node -e "
112
+ const deps = require('./package.json').dependencies || {};
113
+ const { execSync } = require('child_process');
114
+ let failed = false;
115
+ for (const pkg of Object.keys(deps)) {
116
+ try {
117
+ execSync('npm view ' + pkg, { stdio: 'pipe' });
118
+ } catch {
119
+ console.error('::error::Dependency ' + pkg + ' is not publicly accessible on npm');
120
+ failed = true;
121
+ }
122
+ }
123
+ if (failed) process.exit(1);
124
+ console.log('All ' + Object.keys(deps).length + ' dependencies are public.');
125
+ "
126
+
127
+ - name: Publish release
128
+ id: publish
129
+ run: |
130
+ npm publish
131
+ echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
package/CHANGELOG.md CHANGED
@@ -7,7 +7,17 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ## [1.1.67] - 2026-xx-xx
10
+ ## [1.3.0] - 2026-04-15
11
+ ### Added
12
+ - Added inbound thumbnail/primary content syncing from FlexPLM to VibeIQ via `ThumbnailUtil.syncThumbnailToVibeIQ`.
13
+ - Added `syncInboundImages` and `syncOutboundImages` methods to `TypeConversionUtils` for controlling image sync per map file configuration.
14
+ - Added `PRIMARY_CONTENT_UPDATED` status to `EventShortMessageStatus` for when only primary content changes are detected.
15
+
16
+ ### Changed
17
+ - `BaseEntityProcessor` update flow now distinguishes between primary-content-only changes and no changes, returning the updated entity when only the thumbnail was synced.
18
+ - Improved `FlexPLMConnect.getRequest` function and added unit tests.
19
+
20
+ ## [1.2.1] - 2026-04-08
11
21
 
12
22
  ### Added
13
23
  - Added EventShortMessageStatus status values for adding items to projects functionality.
@@ -0,0 +1,42 @@
1
+ import { FCConfig, EntityPayloadType } from '../interfaces/interfaces';
2
+ import { DataConverter } from '../util/data-converter';
3
+ import { TypeUtils } from '../util/type-utils';
4
+ import { MapFileUtil } from '@contrail/transform-data';
5
+ export declare class IncomingEntityResponse {
6
+ entity: any;
7
+ earlyReturn: any;
8
+ }
9
+ export declare abstract class BaseEntityProcessor {
10
+ protected config: FCConfig;
11
+ protected dc: DataConverter;
12
+ protected mapFileUtil: MapFileUtil;
13
+ protected baseType: string;
14
+ protected typeUtil: TypeUtils;
15
+ protected transformMapFile: string;
16
+ protected entities: any;
17
+ protected orgSlug: string;
18
+ constructor(config: FCConfig, dc: DataConverter, mapFileUtil: MapFileUtil, baseType: string);
19
+ inbound(event: EntityPayloadType): Promise<any>;
20
+ handleIncomingUpsert(event: EntityPayloadType): Promise<any>;
21
+ getInboundStatusMessage(statusObject: any): string;
22
+ queryEntityWithSubTypeCriteria(entityType: string, entityTypePath: string, propertyCriteria: any): Promise<any[]>;
23
+ getCriteriaForEntity(entityType: string, entityTypePath: string, propertyCriteria: any): Promise<any>;
24
+ getRootTypePropertyKeys(rootType: any, propertyCriteria?: any): string[];
25
+ handleIncomingDelete(event: any): Promise<void>;
26
+ getTransformedData(event: any): Promise<any>;
27
+ getUpdatesForEntity(entity: any, inboundData: any): Promise<object>;
28
+ getVibeOwningKeys(entity: any): Promise<any[]>;
29
+ getVibeOwningKeysFromInbound(entity: any): Promise<any[]>;
30
+ createEntity(entityName: any, changes: any): Promise<any>;
31
+ updateEntity(entityName: any, entity: any, diffs: any): Promise<any>;
32
+ protected abstract getIncomingEntity(event: any, inboundData: any): Promise<IncomingEntityResponse>;
33
+ protected abstract getCreateEntity(inboundData: any): Promise<IncomingEntityResponse>;
34
+ outbound(event: any): Promise<any>;
35
+ handleOutgoingUpsert(entityType: any, event: any): Promise<any>;
36
+ getOutboundEntityUpdates(event: any, flexResponse: any): Promise<any>;
37
+ handleOutgoingDelete(entityType: any, event: any): Promise<void>;
38
+ protected abstract getOutgoingUpsertPayload(entityType: any, event: any): Promise<EntityPayloadType>;
39
+ protected triggerNewEvent(triggerKey: string, event: any): Promise<any>;
40
+ protected sendUpsertToFlexPLM(event: any): Promise<any>;
41
+ protected getEntityCurrentStateUpsertPayload(event: any): Promise<EntityPayloadType>;
42
+ }