@equinor/echo-cli 2.2.0-beta-1 ā 2.2.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/README.md +384 -384
- package/lib/echo-dev-host/README.md +121 -121
- package/lib/echo-dev-host/babel.config.js +10 -10
- package/lib/echo-dev-host/jest.config.js +21 -21
- package/lib/echo-dev-host/package-lock.json +13124 -13124
- package/lib/echo-dev-host/public/env-config.js +17 -17
- package/lib/echo-dev-host/public/index.html +21 -21
- package/lib/echo-dev-host/tsconfig.json +21 -21
- package/lib/echo-dev-host/webpack.config.js +145 -145
- package/package.json +111 -111
- package/templates/echoAppTemplate/.gitattributes +3 -3
- package/templates/echoAppTemplate/package.json +35 -35
- package/templates/echoAppTemplate/readme.md +41 -41
- package/templates/echoAppTemplate/tsconfig.json +25 -25
- package/templates/echoAppTemplateTutorial/.gitattributes +3 -3
- package/templates/echoAppTemplateTutorial/package.json +36 -36
- package/templates/echoAppTemplateTutorial/readme.md +41 -41
- package/templates/echoAppTemplateTutorial/tsconfig.json +25 -25
- package/templates/echoLibraryTemplate/package.json +35 -35
- package/templates/echoLibraryTemplate/public/index.html +21 -21
- package/templates/echoLibraryTemplate/readme.md +1 -1
- package/templates/echoPluginTemplate/package.json +35 -35
- package/templates/echoPluginTemplate/public/index.html +21 -21
- package/templates/echoPluginTemplate/readme.md +1 -1
- package/lib/sync-echo-dev-versions.d.ts +0 -6
- package/lib/sync-echo-dev-versions.js +0 -43
- package/lib/sync-echo-dev-versions.js.map +0 -1
- package/lib/tools/buildScripts/buildAndCopyDevHost.test.d.ts +0 -1
- package/lib/tools/buildScripts/buildAndCopyDevHost.test.js +0 -500
- package/lib/tools/buildScripts/buildAndCopyDevHost.test.js.map +0 -1
- package/lib/utils/merge.test.d.ts +0 -1
- package/lib/utils/merge.test.js +0 -29
- package/lib/utils/merge.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
# Woohoo module
|
|
1
|
+
# Woohoo module
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { Command } from '@oclif/core';
|
|
3
|
-
export default class SyncEchoDevVersions extends Command {
|
|
4
|
-
static readonly description = "Sync echo-dev-host to use exact echo library versions from your app (useful after switching git branches)";
|
|
5
|
-
run(): Promise<void>;
|
|
6
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { Command } from '@oclif/core';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
import path from 'node:path';
|
|
5
|
-
import { ECHO_HOST_BUILD_OUTPUT_FOLDER, ECHO_HOST_TEMP_BUILD_FOLDER } from './const/common.js';
|
|
6
|
-
import { buildAndCopyDevHost } from './tools/buildScripts/buildAndCopyDevHost.js';
|
|
7
|
-
import { findConsumerAppPackageJson } from './utils/findConsumerAppPackageJson.js';
|
|
8
|
-
import { printEchoLibsVersions } from './utils/printEchoLibsVersions.js';
|
|
9
|
-
export default class SyncEchoDevVersions extends Command {
|
|
10
|
-
static description = 'Sync echo-dev-host to use exact echo library versions from your app (useful after switching git branches)';
|
|
11
|
-
async run() {
|
|
12
|
-
console.log(chalk.cyan.bold('\nš Syncing echo-dev-host versions to match your app...\n'));
|
|
13
|
-
// 1. Find consumer app package.json
|
|
14
|
-
const consumerPkgPath = findConsumerAppPackageJson(process.cwd());
|
|
15
|
-
if (!consumerPkgPath) {
|
|
16
|
-
console.error(chalk.red('Could not find a package.json with @equinor/echo-* dependencies.\nMake sure you are in an Echo module project directory.'));
|
|
17
|
-
process.exit(1);
|
|
18
|
-
}
|
|
19
|
-
// 2. Show current versions
|
|
20
|
-
const devHostPkgPath = path.resolve(process.cwd(), 'node_modules', '@equinor', 'echo-cli', 'lib', 'echo-dev-host', 'package.json');
|
|
21
|
-
console.log(chalk.yellow('Current versions:\n'));
|
|
22
|
-
await printEchoLibsVersions({
|
|
23
|
-
devHostPkgPath,
|
|
24
|
-
appPkgPath: consumerPkgPath,
|
|
25
|
-
fetchLatest: false
|
|
26
|
-
});
|
|
27
|
-
console.log(chalk.cyan("\nš This will rebuild echo-dev-host to match your app's package.json versions exactly.\n"));
|
|
28
|
-
// 3. Rebuild dev host with sync mode (forces consumer app versions)
|
|
29
|
-
const cliNodeModules = path.resolve(process.cwd(), 'node_modules', '@equinor', 'echo-cli');
|
|
30
|
-
const finalOutput = path.join(cliNodeModules, ECHO_HOST_BUILD_OUTPUT_FOLDER);
|
|
31
|
-
await buildAndCopyDevHost({
|
|
32
|
-
cliNodeModules,
|
|
33
|
-
tmpDevHostFolder: path.resolve(process.cwd(), ECHO_HOST_TEMP_BUILD_FOLDER),
|
|
34
|
-
finalOutputDir: finalOutput,
|
|
35
|
-
isProdBuild: false,
|
|
36
|
-
syncMode: true // New flag to force exact version matching
|
|
37
|
-
});
|
|
38
|
-
console.log(chalk.green.bold("\nā
Sync complete! echo-dev-host now uses your app's echo lib versions.\n"));
|
|
39
|
-
console.log(chalk.gray('You can now run "npm start" to start your Echo app.\n'));
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
SyncEchoDevVersions.run();
|
|
43
|
-
//# sourceMappingURL=sync-echo-dev-versions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-echo-dev-versions.js","sourceRoot":"","sources":["../src/sync-echo-dev-versions.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,6BAA6B,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,OAAO;IACpD,MAAM,CAAU,WAAW,GACvB,2GAA2G,CAAC;IAEhH,KAAK,CAAC,GAAG;QACL,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC,CAAC;QAE3F,oCAAoC;QACpC,MAAM,eAAe,GAAG,0BAA0B,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CACT,KAAK,CAAC,GAAG,CACL,0HAA0H,CAC7H,CACJ,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,2BAA2B;QAC3B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAC/B,OAAO,CAAC,GAAG,EAAE,EACb,cAAc,EACd,UAAU,EACV,UAAU,EACV,KAAK,EACL,eAAe,EACf,cAAc,CACjB,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACjD,MAAM,qBAAqB,CAAC;YACxB,cAAc;YACd,UAAU,EAAE,eAAe;YAC3B,WAAW,EAAE,KAAK;SACrB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,IAAI,CAAC,2FAA2F,CAAC,CAC1G,CAAC;QAEF,oEAAoE;QACpE,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAC3F,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,6BAA6B,CAAC,CAAC;QAE7E,MAAM,mBAAmB,CAAC;YACtB,cAAc;YACd,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,2BAA2B,CAAC;YAC1E,cAAc,EAAE,WAAW;YAC3B,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,IAAI,CAAC,2CAA2C;SAC7D,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC,CAAC;QAC3G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;IACrF,CAAC;;AAGL,mBAAmB,CAAC,GAAG,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,500 +0,0 @@
|
|
|
1
|
-
// Mock all dependencies BEFORE any imports
|
|
2
|
-
jest.mock('fs-extra');
|
|
3
|
-
jest.mock('../../utils/printEchoLibsVersions.js', () => ({
|
|
4
|
-
printEchoLibsVersions: jest.fn()
|
|
5
|
-
}));
|
|
6
|
-
jest.mock('chalk', () => {
|
|
7
|
-
const mockFn = jest.fn((str) => str);
|
|
8
|
-
const chalkMock = {
|
|
9
|
-
cyan: mockFn,
|
|
10
|
-
yellow: mockFn,
|
|
11
|
-
gray: mockFn,
|
|
12
|
-
green: mockFn,
|
|
13
|
-
magentaBright: { bold: mockFn },
|
|
14
|
-
blueBright: { bold: mockFn },
|
|
15
|
-
yellowBright: { bold: mockFn },
|
|
16
|
-
greenBright: { bold: mockFn }
|
|
17
|
-
};
|
|
18
|
-
// Also add nested bold methods for green
|
|
19
|
-
chalkMock.green.bold = mockFn;
|
|
20
|
-
// Return both default export and named export pattern
|
|
21
|
-
chalkMock.default = chalkMock;
|
|
22
|
-
return chalkMock;
|
|
23
|
-
});
|
|
24
|
-
jest.mock('figlet', () => ({
|
|
25
|
-
default: {
|
|
26
|
-
textSync: jest.fn(() => 'ECHO DEV HOST')
|
|
27
|
-
}
|
|
28
|
-
}));
|
|
29
|
-
jest.mock('child_process', () => ({
|
|
30
|
-
execSync: jest.fn()
|
|
31
|
-
}));
|
|
32
|
-
import fs from 'fs-extra';
|
|
33
|
-
import path from 'node:path';
|
|
34
|
-
import { determineEchoLibVersionsForProdBuild, syncDevHostToConsumerVersions } from './buildAndCopyDevHost';
|
|
35
|
-
const mockedFs = fs;
|
|
36
|
-
// Mock console.log to suppress output during tests
|
|
37
|
-
const originalConsoleLog = console.log;
|
|
38
|
-
beforeAll(() => {
|
|
39
|
-
console.log = jest.fn();
|
|
40
|
-
});
|
|
41
|
-
afterAll(() => {
|
|
42
|
-
console.log = originalConsoleLog;
|
|
43
|
-
});
|
|
44
|
-
describe('determineEchoLibVersionsForProdBuild', () => {
|
|
45
|
-
const tmpDevHostFolder = '/tmp/dev-host';
|
|
46
|
-
const devHostPkgPath = path.join(tmpDevHostFolder, 'package.json');
|
|
47
|
-
beforeEach(() => {
|
|
48
|
-
jest.clearAllMocks();
|
|
49
|
-
});
|
|
50
|
-
describe('Consumer version is higher than dev host version', () => {
|
|
51
|
-
it('should update dev host package.json with consumer versions when consumer has higher versions', async () => {
|
|
52
|
-
// Arrange
|
|
53
|
-
const consumerPkg = {
|
|
54
|
-
name: 'test-consumer-app',
|
|
55
|
-
dependencies: {
|
|
56
|
-
'@equinor/echo-base': '2.2.1',
|
|
57
|
-
'@equinor/echo-core': '2.2.1',
|
|
58
|
-
'@equinor/echo-framework': '2.2.1'
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
const devHostPkg = {
|
|
62
|
-
name: 'echo-dev-host',
|
|
63
|
-
dependencies: {
|
|
64
|
-
'@equinor/echo-base': '2.0.1',
|
|
65
|
-
'@equinor/echo-core': '2.0.1',
|
|
66
|
-
'@equinor/echo-framework': '2.0.1'
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
mockedFs.readJsonSync.mockImplementation((filePath) => {
|
|
70
|
-
if (filePath.includes('consumer'))
|
|
71
|
-
return consumerPkg;
|
|
72
|
-
if (filePath === devHostPkgPath)
|
|
73
|
-
return devHostPkg;
|
|
74
|
-
throw new Error(`Unexpected file path: ${filePath}`);
|
|
75
|
-
});
|
|
76
|
-
// Act
|
|
77
|
-
const result = await determineEchoLibVersionsForProdBuild({
|
|
78
|
-
appPkgPath: '/path/to/consumer/package.json',
|
|
79
|
-
tmpDevHostFolder
|
|
80
|
-
});
|
|
81
|
-
// Assert
|
|
82
|
-
expect(result).toEqual({
|
|
83
|
-
'@equinor/echo-base': '2.2.1',
|
|
84
|
-
'@equinor/echo-core': '2.2.1',
|
|
85
|
-
'@equinor/echo-framework': '2.2.1'
|
|
86
|
-
});
|
|
87
|
-
// Verify dev host package.json was updated
|
|
88
|
-
expect(mockedFs.writeJsonSync).toHaveBeenCalledWith(devHostPkgPath, expect.objectContaining({
|
|
89
|
-
dependencies: {
|
|
90
|
-
'@equinor/echo-base': '2.2.1',
|
|
91
|
-
'@equinor/echo-core': '2.2.1',
|
|
92
|
-
'@equinor/echo-framework': '2.2.1'
|
|
93
|
-
}
|
|
94
|
-
}), { spaces: 4 });
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
describe('Dev host version is higher than consumer version', () => {
|
|
98
|
-
it('should keep dev host versions when dev host has higher versions', async () => {
|
|
99
|
-
// Arrange
|
|
100
|
-
const consumerPkg = {
|
|
101
|
-
name: 'test-consumer-app',
|
|
102
|
-
dependencies: {
|
|
103
|
-
'@equinor/echo-base': '2.0.1',
|
|
104
|
-
'@equinor/echo-core': '2.0.1'
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
const devHostPkg = {
|
|
108
|
-
name: 'echo-dev-host',
|
|
109
|
-
dependencies: {
|
|
110
|
-
'@equinor/echo-base': '2.2.1',
|
|
111
|
-
'@equinor/echo-core': '2.2.1'
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
mockedFs.readJsonSync.mockImplementation((filePath) => {
|
|
115
|
-
if (filePath.includes('consumer'))
|
|
116
|
-
return consumerPkg;
|
|
117
|
-
if (filePath === devHostPkgPath)
|
|
118
|
-
return devHostPkg;
|
|
119
|
-
throw new Error(`Unexpected file path: ${filePath}`);
|
|
120
|
-
});
|
|
121
|
-
// Act
|
|
122
|
-
const result = await determineEchoLibVersionsForProdBuild({
|
|
123
|
-
appPkgPath: '/path/to/consumer/package.json',
|
|
124
|
-
tmpDevHostFolder
|
|
125
|
-
});
|
|
126
|
-
// Assert
|
|
127
|
-
expect(result).toEqual({
|
|
128
|
-
'@equinor/echo-base': '2.2.1',
|
|
129
|
-
'@equinor/echo-core': '2.2.1'
|
|
130
|
-
});
|
|
131
|
-
// Verify dev host package.json was NOT updated (no changes needed)
|
|
132
|
-
expect(mockedFs.writeJsonSync).not.toHaveBeenCalled();
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
describe('Mixed version scenarios', () => {
|
|
136
|
-
it('should use max version for each library independently', async () => {
|
|
137
|
-
// Arrange
|
|
138
|
-
const consumerPkg = {
|
|
139
|
-
name: 'test-consumer-app',
|
|
140
|
-
dependencies: {
|
|
141
|
-
'@equinor/echo-base': '2.2.1', // Consumer higher
|
|
142
|
-
'@equinor/echo-core': '2.0.1', // Dev host higher
|
|
143
|
-
'@equinor/echo-framework': '2.1.0' // Equal
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
const devHostPkg = {
|
|
147
|
-
name: 'echo-dev-host',
|
|
148
|
-
dependencies: {
|
|
149
|
-
'@equinor/echo-base': '2.0.1',
|
|
150
|
-
'@equinor/echo-core': '2.2.1',
|
|
151
|
-
'@equinor/echo-framework': '2.1.0'
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
mockedFs.readJsonSync.mockImplementation((filePath) => {
|
|
155
|
-
if (filePath.includes('consumer'))
|
|
156
|
-
return consumerPkg;
|
|
157
|
-
if (filePath === devHostPkgPath)
|
|
158
|
-
return devHostPkg;
|
|
159
|
-
throw new Error(`Unexpected file path: ${filePath}`);
|
|
160
|
-
});
|
|
161
|
-
// Act
|
|
162
|
-
const result = await determineEchoLibVersionsForProdBuild({
|
|
163
|
-
appPkgPath: '/path/to/consumer/package.json',
|
|
164
|
-
tmpDevHostFolder
|
|
165
|
-
});
|
|
166
|
-
// Assert
|
|
167
|
-
expect(result).toEqual({
|
|
168
|
-
'@equinor/echo-base': '2.2.1', // Consumer version used
|
|
169
|
-
'@equinor/echo-core': '2.2.1', // Dev host version used
|
|
170
|
-
'@equinor/echo-framework': '2.1.0' // Equal, consumer used
|
|
171
|
-
});
|
|
172
|
-
// Verify only echo-base was updated in dev host package.json
|
|
173
|
-
expect(mockedFs.writeJsonSync).toHaveBeenCalledWith(devHostPkgPath, expect.objectContaining({
|
|
174
|
-
dependencies: {
|
|
175
|
-
'@equinor/echo-base': '2.2.1', // Updated
|
|
176
|
-
'@equinor/echo-core': '2.2.1', // Unchanged
|
|
177
|
-
'@equinor/echo-framework': '2.1.0' // Unchanged
|
|
178
|
-
}
|
|
179
|
-
}), { spaces: 4 });
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
describe('Missing dependencies in dev host', () => {
|
|
183
|
-
it('should add missing libraries from consumer to dev host', async () => {
|
|
184
|
-
// Arrange
|
|
185
|
-
const consumerPkg = {
|
|
186
|
-
name: 'test-consumer-app',
|
|
187
|
-
dependencies: {
|
|
188
|
-
'@equinor/echo-base': '2.2.1',
|
|
189
|
-
'@equinor/echo-core': '2.2.1',
|
|
190
|
-
'@equinor/echo-utils': '2.0.2' // Missing in dev host
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
const devHostPkg = {
|
|
194
|
-
name: 'echo-dev-host',
|
|
195
|
-
dependencies: {
|
|
196
|
-
'@equinor/echo-base': '2.0.1',
|
|
197
|
-
'@equinor/echo-core': '2.0.1'
|
|
198
|
-
// echo-utils is missing
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
mockedFs.readJsonSync.mockImplementation((filePath) => {
|
|
202
|
-
if (filePath.includes('consumer'))
|
|
203
|
-
return consumerPkg;
|
|
204
|
-
if (filePath === devHostPkgPath)
|
|
205
|
-
return devHostPkg;
|
|
206
|
-
throw new Error(`Unexpected file path: ${filePath}`);
|
|
207
|
-
});
|
|
208
|
-
// Act
|
|
209
|
-
const result = await determineEchoLibVersionsForProdBuild({
|
|
210
|
-
appPkgPath: '/path/to/consumer/package.json',
|
|
211
|
-
tmpDevHostFolder
|
|
212
|
-
});
|
|
213
|
-
// Assert
|
|
214
|
-
expect(result).toEqual({
|
|
215
|
-
'@equinor/echo-base': '2.2.1',
|
|
216
|
-
'@equinor/echo-core': '2.2.1',
|
|
217
|
-
'@equinor/echo-utils': '2.0.2'
|
|
218
|
-
});
|
|
219
|
-
// Verify dev host package.json was updated with all three libraries
|
|
220
|
-
expect(mockedFs.writeJsonSync).toHaveBeenCalledWith(devHostPkgPath, expect.objectContaining({
|
|
221
|
-
dependencies: {
|
|
222
|
-
'@equinor/echo-base': '2.2.1',
|
|
223
|
-
'@equinor/echo-core': '2.2.1',
|
|
224
|
-
'@equinor/echo-utils': '2.0.2' // Added
|
|
225
|
-
}
|
|
226
|
-
}), { spaces: 4 });
|
|
227
|
-
});
|
|
228
|
-
});
|
|
229
|
-
describe('Real-world bug scenario from issue report', () => {
|
|
230
|
-
it('should reproduce and fix the reported bug where consumer 2.2.1 was ignored and dev host 2.0.1 was used', async () => {
|
|
231
|
-
// This is the exact scenario from the user's bug report
|
|
232
|
-
const consumerPkg = {
|
|
233
|
-
name: 'echo-3d-web',
|
|
234
|
-
dependencies: {
|
|
235
|
-
'@equinor/echo-base': '2.2.1',
|
|
236
|
-
'@equinor/echo-components': '2.2.1',
|
|
237
|
-
'@equinor/echo-core': '2.2.1',
|
|
238
|
-
'@equinor/echo-framework': '2.2.1',
|
|
239
|
-
'@equinor/echo-search': '2.2.1',
|
|
240
|
-
'@equinor/echo-utils': '2.2.1',
|
|
241
|
-
'@equinor/echo-cli': '2.0.0'
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
const devHostPkg = {
|
|
245
|
-
name: 'echo-dev-host',
|
|
246
|
-
dependencies: {
|
|
247
|
-
'@equinor/echo-base': '2.0.1',
|
|
248
|
-
'@equinor/echo-components': '2.0.1',
|
|
249
|
-
'@equinor/echo-core': '2.0.1',
|
|
250
|
-
'@equinor/echo-framework': '2.0.1',
|
|
251
|
-
'@equinor/echo-search': '2.0.1',
|
|
252
|
-
'@equinor/echo-utils': '2.0.2'
|
|
253
|
-
}
|
|
254
|
-
};
|
|
255
|
-
mockedFs.readJsonSync.mockImplementation((filePath) => {
|
|
256
|
-
if (filePath.includes('consumer') || filePath.includes('echo-3d-web'))
|
|
257
|
-
return consumerPkg;
|
|
258
|
-
if (filePath === devHostPkgPath)
|
|
259
|
-
return devHostPkg;
|
|
260
|
-
throw new Error(`Unexpected file path: ${filePath}`);
|
|
261
|
-
});
|
|
262
|
-
// Act
|
|
263
|
-
const result = await determineEchoLibVersionsForProdBuild({
|
|
264
|
-
appPkgPath: '/path/to/echo-3d-web/package.json',
|
|
265
|
-
tmpDevHostFolder
|
|
266
|
-
});
|
|
267
|
-
// Assert - All should use the consumer's 2.2.1 versions (except echo-utils which is higher in dev host)
|
|
268
|
-
expect(result).toEqual({
|
|
269
|
-
'@equinor/echo-base': '2.2.1',
|
|
270
|
-
'@equinor/echo-components': '2.2.1',
|
|
271
|
-
'@equinor/echo-core': '2.2.1',
|
|
272
|
-
'@equinor/echo-framework': '2.2.1',
|
|
273
|
-
'@equinor/echo-search': '2.2.1',
|
|
274
|
-
'@equinor/echo-utils': '2.2.1' // Consumer version is higher than 2.0.2
|
|
275
|
-
});
|
|
276
|
-
// Verify dev host package.json was updated with the higher consumer versions
|
|
277
|
-
expect(mockedFs.writeJsonSync).toHaveBeenCalledWith(devHostPkgPath, expect.objectContaining({
|
|
278
|
-
dependencies: expect.objectContaining({
|
|
279
|
-
'@equinor/echo-base': '2.2.1',
|
|
280
|
-
'@equinor/echo-components': '2.2.1',
|
|
281
|
-
'@equinor/echo-core': '2.2.1',
|
|
282
|
-
'@equinor/echo-framework': '2.2.1',
|
|
283
|
-
'@equinor/echo-search': '2.2.1',
|
|
284
|
-
'@equinor/echo-utils': '2.2.1'
|
|
285
|
-
})
|
|
286
|
-
}), { spaces: 4 });
|
|
287
|
-
});
|
|
288
|
-
});
|
|
289
|
-
});
|
|
290
|
-
describe('syncDevHostToConsumerVersions', () => {
|
|
291
|
-
const tmpDevHostFolder = '/tmp/dev-host';
|
|
292
|
-
const devHostPkgPath = path.join(tmpDevHostFolder, 'package.json');
|
|
293
|
-
beforeEach(() => {
|
|
294
|
-
jest.clearAllMocks();
|
|
295
|
-
});
|
|
296
|
-
describe('Force sync behavior', () => {
|
|
297
|
-
it('should downgrade dev host versions to match lower consumer versions', async () => {
|
|
298
|
-
// Arrange
|
|
299
|
-
const consumerPkg = {
|
|
300
|
-
name: 'my-echo-app',
|
|
301
|
-
dependencies: {
|
|
302
|
-
'@equinor/echo-core': '2.0.1',
|
|
303
|
-
'@equinor/echo-framework': '2.0.1'
|
|
304
|
-
}
|
|
305
|
-
};
|
|
306
|
-
const devHostPkg = {
|
|
307
|
-
name: 'echo-dev-host',
|
|
308
|
-
dependencies: {
|
|
309
|
-
'@equinor/echo-core': '2.3.0', // Higher than consumer
|
|
310
|
-
'@equinor/echo-framework': '2.3.0' // Higher than consumer
|
|
311
|
-
}
|
|
312
|
-
};
|
|
313
|
-
mockedFs.readJsonSync.mockImplementation((filePath) => {
|
|
314
|
-
if (filePath.includes('my-echo-app'))
|
|
315
|
-
return consumerPkg;
|
|
316
|
-
if (filePath === devHostPkgPath)
|
|
317
|
-
return devHostPkg;
|
|
318
|
-
throw new Error(`Unexpected file path: ${filePath}`);
|
|
319
|
-
});
|
|
320
|
-
// Act
|
|
321
|
-
const result = await syncDevHostToConsumerVersions({
|
|
322
|
-
appPkgPath: '/path/to/my-echo-app/package.json',
|
|
323
|
-
tmpDevHostFolder
|
|
324
|
-
});
|
|
325
|
-
// Assert - Should force downgrade to consumer versions
|
|
326
|
-
expect(result).toEqual({
|
|
327
|
-
'@equinor/echo-core': '2.0.1',
|
|
328
|
-
'@equinor/echo-framework': '2.0.1'
|
|
329
|
-
});
|
|
330
|
-
// Verify dev host was downgraded
|
|
331
|
-
expect(mockedFs.writeJsonSync).toHaveBeenCalledWith(devHostPkgPath, expect.objectContaining({
|
|
332
|
-
dependencies: {
|
|
333
|
-
'@equinor/echo-core': '2.0.1',
|
|
334
|
-
'@equinor/echo-framework': '2.0.1'
|
|
335
|
-
}
|
|
336
|
-
}), { spaces: 4 });
|
|
337
|
-
});
|
|
338
|
-
it('should upgrade dev host versions to match higher consumer versions', async () => {
|
|
339
|
-
// Arrange
|
|
340
|
-
const consumerPkg = {
|
|
341
|
-
name: 'my-echo-app',
|
|
342
|
-
dependencies: {
|
|
343
|
-
'@equinor/echo-core': '2.5.0',
|
|
344
|
-
'@equinor/echo-framework': '2.5.0'
|
|
345
|
-
}
|
|
346
|
-
};
|
|
347
|
-
const devHostPkg = {
|
|
348
|
-
name: 'echo-dev-host',
|
|
349
|
-
dependencies: {
|
|
350
|
-
'@equinor/echo-core': '2.0.1', // Lower than consumer
|
|
351
|
-
'@equinor/echo-framework': '2.0.1' // Lower than consumer
|
|
352
|
-
}
|
|
353
|
-
};
|
|
354
|
-
mockedFs.readJsonSync.mockImplementation((filePath) => {
|
|
355
|
-
if (filePath.includes('my-echo-app'))
|
|
356
|
-
return consumerPkg;
|
|
357
|
-
if (filePath === devHostPkgPath)
|
|
358
|
-
return devHostPkg;
|
|
359
|
-
throw new Error(`Unexpected file path: ${filePath}`);
|
|
360
|
-
});
|
|
361
|
-
// Act
|
|
362
|
-
const result = await syncDevHostToConsumerVersions({
|
|
363
|
-
appPkgPath: '/path/to/my-echo-app/package.json',
|
|
364
|
-
tmpDevHostFolder
|
|
365
|
-
});
|
|
366
|
-
// Assert - Should upgrade to consumer versions
|
|
367
|
-
expect(result).toEqual({
|
|
368
|
-
'@equinor/echo-core': '2.5.0',
|
|
369
|
-
'@equinor/echo-framework': '2.5.0'
|
|
370
|
-
});
|
|
371
|
-
expect(mockedFs.writeJsonSync).toHaveBeenCalledWith(devHostPkgPath, expect.objectContaining({
|
|
372
|
-
dependencies: {
|
|
373
|
-
'@equinor/echo-core': '2.5.0',
|
|
374
|
-
'@equinor/echo-framework': '2.5.0'
|
|
375
|
-
}
|
|
376
|
-
}), { spaces: 4 });
|
|
377
|
-
});
|
|
378
|
-
it('should not update package.json if versions already match', async () => {
|
|
379
|
-
// Arrange
|
|
380
|
-
const consumerPkg = {
|
|
381
|
-
name: 'my-echo-app',
|
|
382
|
-
dependencies: {
|
|
383
|
-
'@equinor/echo-core': '2.2.1',
|
|
384
|
-
'@equinor/echo-framework': '2.2.1'
|
|
385
|
-
}
|
|
386
|
-
};
|
|
387
|
-
const devHostPkg = {
|
|
388
|
-
name: 'echo-dev-host',
|
|
389
|
-
dependencies: {
|
|
390
|
-
'@equinor/echo-core': '2.2.1', // Same as consumer
|
|
391
|
-
'@equinor/echo-framework': '2.2.1' // Same as consumer
|
|
392
|
-
}
|
|
393
|
-
};
|
|
394
|
-
mockedFs.readJsonSync.mockImplementation((filePath) => {
|
|
395
|
-
if (filePath.includes('my-echo-app'))
|
|
396
|
-
return consumerPkg;
|
|
397
|
-
if (filePath === devHostPkgPath)
|
|
398
|
-
return devHostPkg;
|
|
399
|
-
throw new Error(`Unexpected file path: ${filePath}`);
|
|
400
|
-
});
|
|
401
|
-
// Act
|
|
402
|
-
const result = await syncDevHostToConsumerVersions({
|
|
403
|
-
appPkgPath: '/path/to/my-echo-app/package.json',
|
|
404
|
-
tmpDevHostFolder
|
|
405
|
-
});
|
|
406
|
-
// Assert
|
|
407
|
-
expect(result).toEqual({
|
|
408
|
-
'@equinor/echo-core': '2.2.1',
|
|
409
|
-
'@equinor/echo-framework': '2.2.1'
|
|
410
|
-
});
|
|
411
|
-
// Should NOT write to package.json if already synced
|
|
412
|
-
expect(mockedFs.writeJsonSync).not.toHaveBeenCalled();
|
|
413
|
-
});
|
|
414
|
-
it('should handle mixed versions (some up, some down, some same)', async () => {
|
|
415
|
-
// Arrange
|
|
416
|
-
const consumerPkg = {
|
|
417
|
-
name: 'my-echo-app',
|
|
418
|
-
dependencies: {
|
|
419
|
-
'@equinor/echo-core': '2.0.1', // Lower than dev host
|
|
420
|
-
'@equinor/echo-framework': '2.5.0', // Higher than dev host
|
|
421
|
-
'@equinor/echo-search': '2.2.1' // Same as dev host
|
|
422
|
-
}
|
|
423
|
-
};
|
|
424
|
-
const devHostPkg = {
|
|
425
|
-
name: 'echo-dev-host',
|
|
426
|
-
dependencies: {
|
|
427
|
-
'@equinor/echo-core': '2.3.0',
|
|
428
|
-
'@equinor/echo-framework': '2.0.1',
|
|
429
|
-
'@equinor/echo-search': '2.2.1'
|
|
430
|
-
}
|
|
431
|
-
};
|
|
432
|
-
mockedFs.readJsonSync.mockImplementation((filePath) => {
|
|
433
|
-
if (filePath.includes('my-echo-app'))
|
|
434
|
-
return consumerPkg;
|
|
435
|
-
if (filePath === devHostPkgPath)
|
|
436
|
-
return devHostPkg;
|
|
437
|
-
throw new Error(`Unexpected file path: ${filePath}`);
|
|
438
|
-
});
|
|
439
|
-
// Act
|
|
440
|
-
const result = await syncDevHostToConsumerVersions({
|
|
441
|
-
appPkgPath: '/path/to/my-echo-app/package.json',
|
|
442
|
-
tmpDevHostFolder
|
|
443
|
-
});
|
|
444
|
-
// Assert - All should match consumer, regardless of direction
|
|
445
|
-
expect(result).toEqual({
|
|
446
|
-
'@equinor/echo-core': '2.0.1',
|
|
447
|
-
'@equinor/echo-framework': '2.5.0',
|
|
448
|
-
'@equinor/echo-search': '2.2.1'
|
|
449
|
-
});
|
|
450
|
-
// Only echo-core and echo-framework should be updated (echo-search already synced)
|
|
451
|
-
expect(mockedFs.writeJsonSync).toHaveBeenCalledWith(devHostPkgPath, expect.objectContaining({
|
|
452
|
-
dependencies: {
|
|
453
|
-
'@equinor/echo-core': '2.0.1',
|
|
454
|
-
'@equinor/echo-framework': '2.5.0',
|
|
455
|
-
'@equinor/echo-search': '2.2.1'
|
|
456
|
-
}
|
|
457
|
-
}), { spaces: 4 });
|
|
458
|
-
});
|
|
459
|
-
it('should add missing libraries from consumer app', async () => {
|
|
460
|
-
// Arrange
|
|
461
|
-
const consumerPkg = {
|
|
462
|
-
name: 'my-echo-app',
|
|
463
|
-
dependencies: {
|
|
464
|
-
'@equinor/echo-core': '2.2.1',
|
|
465
|
-
'@equinor/echo-search': '2.2.1' // Not in dev host
|
|
466
|
-
}
|
|
467
|
-
};
|
|
468
|
-
const devHostPkg = {
|
|
469
|
-
name: 'echo-dev-host',
|
|
470
|
-
dependencies: {
|
|
471
|
-
'@equinor/echo-core': '2.0.1'
|
|
472
|
-
}
|
|
473
|
-
};
|
|
474
|
-
mockedFs.readJsonSync.mockImplementation((filePath) => {
|
|
475
|
-
if (filePath.includes('my-echo-app'))
|
|
476
|
-
return consumerPkg;
|
|
477
|
-
if (filePath === devHostPkgPath)
|
|
478
|
-
return devHostPkg;
|
|
479
|
-
throw new Error(`Unexpected file path: ${filePath}`);
|
|
480
|
-
});
|
|
481
|
-
// Act
|
|
482
|
-
const result = await syncDevHostToConsumerVersions({
|
|
483
|
-
appPkgPath: '/path/to/my-echo-app/package.json',
|
|
484
|
-
tmpDevHostFolder
|
|
485
|
-
});
|
|
486
|
-
// Assert
|
|
487
|
-
expect(result).toEqual({
|
|
488
|
-
'@equinor/echo-core': '2.2.1',
|
|
489
|
-
'@equinor/echo-search': '2.2.1'
|
|
490
|
-
});
|
|
491
|
-
expect(mockedFs.writeJsonSync).toHaveBeenCalledWith(devHostPkgPath, expect.objectContaining({
|
|
492
|
-
dependencies: {
|
|
493
|
-
'@equinor/echo-core': '2.2.1',
|
|
494
|
-
'@equinor/echo-search': '2.2.1'
|
|
495
|
-
}
|
|
496
|
-
}), { spaces: 4 });
|
|
497
|
-
});
|
|
498
|
-
});
|
|
499
|
-
});
|
|
500
|
-
//# sourceMappingURL=buildAndCopyDevHost.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"buildAndCopyDevHost.test.js","sourceRoot":"","sources":["../../../src/tools/buildScripts/buildAndCopyDevHost.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/lib/utils/merge.test.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { merge } from './merge.js';
|
|
2
|
-
describe('merge function tests', () => {
|
|
3
|
-
it('should merge arrays of arrays ', () => {
|
|
4
|
-
const arr1 = [1, 2, 3];
|
|
5
|
-
const arr2 = [4, 5, 6];
|
|
6
|
-
const arr3 = [7, 8, 9];
|
|
7
|
-
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
8
|
-
const result = merge(arr1, arr2, arr3);
|
|
9
|
-
expect(result).toEqual(array);
|
|
10
|
-
});
|
|
11
|
-
it('should return empty array', () => {
|
|
12
|
-
const arr1 = [];
|
|
13
|
-
const arr2 = [];
|
|
14
|
-
const result = merge(arr1, arr2);
|
|
15
|
-
expect(result).toEqual([]);
|
|
16
|
-
});
|
|
17
|
-
it('should also return empty array', () => {
|
|
18
|
-
const arr1 = [];
|
|
19
|
-
const result = merge(arr1);
|
|
20
|
-
expect(result).toEqual([]);
|
|
21
|
-
});
|
|
22
|
-
it('should also [1]', () => {
|
|
23
|
-
const arr1 = [];
|
|
24
|
-
const arr2 = [1];
|
|
25
|
-
const result = merge(arr1, arr2);
|
|
26
|
-
expect(result).toEqual(arr2);
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
//# sourceMappingURL=merge.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge.test.js","sourceRoot":"","sources":["../../src/utils/merge.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvB,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACvB,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|