@equinor/echo-cli 2.2.0-beta-rrd-6 → 2.2.0-beta-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.
Files changed (44) hide show
  1. package/README.md +35 -7
  2. package/lib/config/common/buildAndCopyEchoHostForProd.js +1 -2
  3. package/lib/config/common/buildAndCopyEchoHostForProd.js.map +1 -1
  4. package/lib/config/common/echoManifest.js +3 -0
  5. package/lib/config/common/echoManifest.js.map +1 -1
  6. package/lib/config/webpack/configBuilders/devServer.js +14 -0
  7. package/lib/config/webpack/configBuilders/devServer.js.map +1 -1
  8. package/lib/config/webpack/server.js +16 -0
  9. package/lib/config/webpack/server.js.map +1 -1
  10. package/lib/const/common.js +2 -2
  11. package/lib/const/common.js.map +1 -1
  12. package/lib/echo-build-dev-host.js +3 -1
  13. package/lib/echo-build-dev-host.js.map +1 -1
  14. package/lib/echo-build.js +4 -1
  15. package/lib/echo-build.js.map +1 -1
  16. package/lib/echo-dev-host/package-lock.json +276 -165
  17. package/lib/echo-dev-host/package.json +7 -7
  18. package/lib/echo-dev-host/src/app.tsx +5 -1
  19. package/lib/echo-dev-host/src/index.tsx +1 -6
  20. package/lib/sync-dev-host-to-app.d.ts +26 -0
  21. package/lib/sync-dev-host-to-app.js +61 -0
  22. package/lib/sync-dev-host-to-app.js.map +1 -0
  23. package/lib/sync-echo-dev-versions.d.ts +6 -0
  24. package/lib/sync-echo-dev-versions.js +43 -0
  25. package/lib/sync-echo-dev-versions.js.map +1 -0
  26. package/lib/tools/buildScripts/buildAndCopyDevHost.d.ts +36 -7
  27. package/lib/tools/buildScripts/buildAndCopyDevHost.js +58 -39
  28. package/lib/tools/buildScripts/buildAndCopyDevHost.js.map +1 -1
  29. package/lib/tools/buildScripts/buildAndCopyDevHost.test.js +500 -0
  30. package/lib/tools/buildScripts/buildAndCopyDevHost.test.js.map +1 -0
  31. package/lib/update-echo-libs.d.ts +0 -3
  32. package/lib/update-echo-libs.js +64 -107
  33. package/lib/update-echo-libs.js.map +1 -1
  34. package/lib/utils/getLatestPkgVersion.d.ts +2 -2
  35. package/lib/utils/getLatestPkgVersion.js +4 -2
  36. package/lib/utils/getLatestPkgVersion.js.map +1 -1
  37. package/lib/utils/merge.test.d.ts +1 -0
  38. package/lib/{__test__/utils/merg.test.js → utils/merge.test.js} +2 -2
  39. package/lib/utils/merge.test.js.map +1 -0
  40. package/lib/utils/printEchoLibsVersions.js +1 -1
  41. package/lib/utils/printEchoLibsVersions.js.map +1 -1
  42. package/package.json +4 -3
  43. package/lib/__test__/utils/merg.test.js.map +0 -1
  44. /package/lib/{__test__/utils/merg.test.d.ts → tools/buildScripts/buildAndCopyDevHost.test.d.ts} +0 -0
@@ -21,13 +21,13 @@
21
21
  "author": "",
22
22
  "license": "MIT",
23
23
  "dependencies": {
24
- "@equinor/echo-base": "2.2.0",
25
- "@equinor/echo-components": "2.2.0",
26
- "@equinor/echo-core": "2.2.0-beta-rrd-6",
27
- "@equinor/echo-framework": "2.2.0-beta-rrd-6-0",
24
+ "@equinor/echo-base": "2.2.3",
25
+ "@equinor/echo-components": "2.2.3",
26
+ "@equinor/echo-core": "2.2.3",
27
+ "@equinor/echo-framework": "2.2.1",
28
28
  "@equinor/echo-scripts": "0.1.5",
29
- "@equinor/echo-search": "2.2.0-beta-rrd-6",
30
- "@equinor/echo-utils": "2.2.0",
29
+ "@equinor/echo-search": "2.2.3",
30
+ "@equinor/echo-utils": "2.2.3",
31
31
  "@equinor/eds-core-react": "0.49.0",
32
32
  "@equinor/eds-icons": "0.22.0",
33
33
  "@equinor/eds-tokens": "0.10.0",
@@ -42,7 +42,7 @@
42
42
  "lodash": "4.17.21",
43
43
  "react": "18.3.1",
44
44
  "react-dom": "18.3.1",
45
- "react-router-dom": "^6.30.1",
45
+ "react-router-dom": "5.3.4",
46
46
  "react-sortablejs": "6.1.4",
47
47
  "sortablejs": "1.15.6",
48
48
  "styled-components": "6.1.19",
@@ -2,6 +2,7 @@ import { EchoEnv, useInitial } from '@equinor/echo-core';
2
2
  import { displayToast, EchoContent, EchoEventHandler, EchoRoutes, Toasters } from '@equinor/echo-framework';
3
3
  import { Syncer } from '@equinor/echo-search';
4
4
  import React from 'react';
5
+ import { Redirect as TypedRedirect, Route as TypedRoute, Switch as TypedSwitch } from 'react-router-dom';
5
6
  import { getCorePlants } from './api/api-plants';
6
7
  import './app.css';
7
8
  import { Home } from './components/Home/Home';
@@ -19,7 +20,10 @@ export const EchoApp: React.FC = () => {
19
20
  return (
20
21
  <EchoEventHandler>
21
22
  <EchoContent Legend={Legend} isOnboardingCompleted={true}>
22
- <EchoRoutes homeComponent={Home} />
23
+ <TypedSwitch>
24
+ <EchoRoutes homeComponent={Home} />
25
+ <TypedRoute render={(): JSX.Element => <TypedRedirect to="/" />} />
26
+ </TypedSwitch>
23
27
  <Toasters />
24
28
  </EchoContent>
25
29
  </EchoEventHandler>
@@ -73,12 +73,7 @@ const Echo: React.FC = (): JSX.Element => {
73
73
  <QueryClientProvider client={queryClient as unknown as QueryClient}>
74
74
  <EventHubProvider>
75
75
  <Mediator options={moduleOptions} />
76
- <BrowserRouter
77
- future={{
78
- v7_relativeSplatPath: true,
79
- v7_startTransition: true
80
- }}
81
- >
76
+ <BrowserRouter>
82
77
  <EchoApp />
83
78
  </BrowserRouter>
84
79
  </EventHubProvider>
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from '@oclif/core';
3
+ /**
4
+ * Command to synchronize echo-dev-host library versions with the consumer application's package.json.
5
+ *
6
+ * This command is useful when switching between git branches that may have different versions of
7
+ * @equinor/echo-* dependencies. It rebuilds the echo-dev-host to use the exact versions specified
8
+ * in the consumer app's package.json.
9
+ *
10
+ * @remarks
11
+ * The command performs the following steps:
12
+ * 1. Locates the consumer app's package.json containing @equinor/echo-* dependencies
13
+ * 2. Displays current versions of echo libraries in both dev-host and the app
14
+ * 3. Rebuilds echo-dev-host using sync mode to match the app's exact dependency versions
15
+ *
16
+ * @example
17
+ * ```bash
18
+ * npx sync-dev-host-to-app
19
+ * ```
20
+ *
21
+ * @throws {Error} Exits with code 1 if no package.json with @equinor/echo-* dependencies is found
22
+ */
23
+ export default class SyncDevHostToApp extends Command {
24
+ static readonly description = "Sync echo-dev-host to use exact echo library versions from your app (useful after switching git branches)";
25
+ run(): Promise<void>;
26
+ }
@@ -0,0 +1,61 @@
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
+ /**
10
+ * Command to synchronize echo-dev-host library versions with the consumer application's package.json.
11
+ *
12
+ * This command is useful when switching between git branches that may have different versions of
13
+ * @equinor/echo-* dependencies. It rebuilds the echo-dev-host to use the exact versions specified
14
+ * in the consumer app's package.json.
15
+ *
16
+ * @remarks
17
+ * The command performs the following steps:
18
+ * 1. Locates the consumer app's package.json containing @equinor/echo-* dependencies
19
+ * 2. Displays current versions of echo libraries in both dev-host and the app
20
+ * 3. Rebuilds echo-dev-host using sync mode to match the app's exact dependency versions
21
+ *
22
+ * @example
23
+ * ```bash
24
+ * npx sync-dev-host-to-app
25
+ * ```
26
+ *
27
+ * @throws {Error} Exits with code 1 if no package.json with @equinor/echo-* dependencies is found
28
+ */
29
+ export default class SyncDevHostToApp extends Command {
30
+ static description = 'Sync echo-dev-host to use exact echo library versions from your app (useful after switching git branches)';
31
+ async run() {
32
+ console.log(chalk.cyan.bold('\n🔄 Syncing echo-dev-host versions to match your app...\n'));
33
+ // 1. Find consumer app package.json
34
+ const consumerPkgPath = findConsumerAppPackageJson(process.cwd());
35
+ if (!consumerPkgPath) {
36
+ console.error(chalk.red('Could not find a package.json with @equinor/echo-* dependencies.\nMake sure you are in an Echo module project directory.'));
37
+ process.exit(1);
38
+ }
39
+ // 2. Show current versions
40
+ const devHostPkgPath = path.resolve(process.cwd(), 'node_modules', '@equinor', 'echo-cli', 'lib', 'echo-dev-host', 'package.json');
41
+ console.log(chalk.yellow('Current versions:\n'));
42
+ await printEchoLibsVersions({
43
+ devHostPkgPath,
44
+ appPkgPath: consumerPkgPath,
45
+ fetchLatest: false
46
+ });
47
+ console.log(chalk.cyan("\n📌 This will rebuild echo-dev-host to match your app's package.json versions exactly.\n"));
48
+ // 3. Rebuild dev host with sync mode (forces consumer app versions)
49
+ const cliNodeModules = path.resolve(process.cwd(), 'node_modules', '@equinor', 'echo-cli');
50
+ const finalOutput = path.join(cliNodeModules, ECHO_HOST_BUILD_OUTPUT_FOLDER);
51
+ await buildAndCopyDevHost({
52
+ cliNodeModules,
53
+ tmpDevHostFolder: path.resolve(process.cwd(), ECHO_HOST_TEMP_BUILD_FOLDER),
54
+ finalOutputDir: finalOutput
55
+ });
56
+ console.log(chalk.green.bold("\n✅ Sync complete! echo-dev-host now uses your app's echo lib versions.\n"));
57
+ console.log(chalk.gray('You can now run "npm start" to start your Echo app.\n'));
58
+ }
59
+ }
60
+ SyncDevHostToApp.run();
61
+ //# sourceMappingURL=sync-dev-host-to-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-dev-host-to-app.js","sourceRoot":"","sources":["../src/sync-dev-host-to-app.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;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IACjD,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;SAC9B,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,gBAAgB,CAAC,GAAG,EAAE,CAAC"}
@@ -0,0 +1,6 @@
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
+ }
@@ -0,0 +1,43 @@
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
@@ -0,0 +1 @@
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"}
@@ -4,8 +4,9 @@
4
4
  * This function performs the following steps:
5
5
  * 1. Removes and recreates a temporary folder for the dev host.
6
6
  * 2. Copies the echo-dev-host source files to the temporary folder.
7
- * 3. Optionally overrides echo library dependencies in the dev host's package.json for production builds,
8
- * ensuring the dev host uses the same or newer versions as the consumer application.
7
+ * 3. Overrides echo library dependencies:
8
+ * - Production builds: Uses max(consumer, devHost) versions
9
+ * - Development builds: Forces exact consumer app versions
9
10
  * 4. Installs dependencies and builds the dev host application.
10
11
  * 5. Copies the build output to the specified final output directory.
11
12
  * 6. Cleans up the temporary folder after the build process.
@@ -14,16 +15,44 @@
14
15
  * @param params.cliNodeModules - Path to the node_modules directory containing echo-dev-host.
15
16
  * @param params.tmpDevHostFolder - Path to the temporary folder used for building the dev host.
16
17
  * @param params.finalOutputDir - Path to the directory where the build output should be copied.
17
- * @param params.isProdBuild - If true, performs a production build and synchronizes echo library versions with the consumer app.
18
- * @param params.installAndBuild - (Optional) If true, installs dependencies and builds the dev host (default: true).
19
- * @param params.skipFetchingLatestVersions - (Optional) If true, skips fetching the latest versions of echo libraries.
20
18
  *
21
19
  * @remarks
22
20
  * - Exits the process if a suitable consumer app package.json cannot be found.
23
21
  */
24
- export declare function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, finalOutputDir, isProdBuild }: {
22
+ export declare function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, finalOutputDir }: {
25
23
  cliNodeModules: string;
26
24
  tmpDevHostFolder: string;
27
25
  finalOutputDir: string;
28
- isProdBuild?: boolean;
29
26
  }): Promise<void>;
27
+ /**
28
+ * Determines the versions of Echo libraries to use for a production build of the dev host,
29
+ * based on the dependencies specified in the consumer application's package.json.
30
+ *
31
+ * This function compares the Echo library dependencies between the consumer app and the dev host.
32
+ * If the consumer app requires a newer version of an Echo library than the dev host, the dev host's
33
+ * package.json is updated to use the consumer app's version for that library.
34
+ *
35
+ * The function logs the source of each version decision and writes any necessary updates to the dev host's
36
+ * package.json file.
37
+ *
38
+ * @param appPkgPath - The file path to the consumer application's package.json.
39
+ * @param tmpDevHostFolder - The folder path containing the dev host's package.json.
40
+ * @returns A promise that resolves to a record mapping each Echo library name to the version that will be used for the build.
41
+ * @internal - Exported for testing purposes only
42
+ */
43
+ /**
44
+ * Forces the dev host to use the exact echo library versions from the consumer app's package.json.
45
+ * This is useful for developers switching between git branches with different echo lib versions.
46
+ *
47
+ * Unlike production builds which use max(consumer, devHost), this function always uses the consumer's
48
+ * version regardless of whether it's higher or lower than the dev host's current version.
49
+ *
50
+ * @param appPkgPath - The file path to the consumer application's package.json.
51
+ * @param tmpDevHostFolder - The folder path containing the dev host's package.json.
52
+ * @returns A promise that resolves to a record mapping each Echo library name to the version from the consumer app.
53
+ * @internal - Exported for testing purposes only
54
+ */
55
+ export declare function syncDevHostToConsumerVersions({ appPkgPath, tmpDevHostFolder }: {
56
+ appPkgPath: string;
57
+ tmpDevHostFolder: string;
58
+ }): Promise<Record<string, string>>;
@@ -3,7 +3,6 @@ import { execSync } from 'child_process';
3
3
  import figlet from 'figlet';
4
4
  import fs from 'fs-extra';
5
5
  import path from 'path';
6
- import semver from 'semver';
7
6
  import { ECHO_HOST_BUILD_OUTPUT_FOLDER, SUPPORTED_ECHO_LIBS } from '../../const/common.js';
8
7
  import { findConsumerAppPackageJson, getEchoDeps } from '../../utils/findConsumerAppPackageJson.js';
9
8
  import { printEchoLibsVersions } from '../../utils/printEchoLibsVersions.js';
@@ -13,8 +12,9 @@ import { printEchoLibsVersions } from '../../utils/printEchoLibsVersions.js';
13
12
  * This function performs the following steps:
14
13
  * 1. Removes and recreates a temporary folder for the dev host.
15
14
  * 2. Copies the echo-dev-host source files to the temporary folder.
16
- * 3. Optionally overrides echo library dependencies in the dev host's package.json for production builds,
17
- * ensuring the dev host uses the same or newer versions as the consumer application.
15
+ * 3. Overrides echo library dependencies:
16
+ * - Production builds: Uses max(consumer, devHost) versions
17
+ * - Development builds: Forces exact consumer app versions
18
18
  * 4. Installs dependencies and builds the dev host application.
19
19
  * 5. Copies the build output to the specified final output directory.
20
20
  * 6. Cleans up the temporary folder after the build process.
@@ -23,14 +23,11 @@ import { printEchoLibsVersions } from '../../utils/printEchoLibsVersions.js';
23
23
  * @param params.cliNodeModules - Path to the node_modules directory containing echo-dev-host.
24
24
  * @param params.tmpDevHostFolder - Path to the temporary folder used for building the dev host.
25
25
  * @param params.finalOutputDir - Path to the directory where the build output should be copied.
26
- * @param params.isProdBuild - If true, performs a production build and synchronizes echo library versions with the consumer app.
27
- * @param params.installAndBuild - (Optional) If true, installs dependencies and builds the dev host (default: true).
28
- * @param params.skipFetchingLatestVersions - (Optional) If true, skips fetching the latest versions of echo libraries.
29
26
  *
30
27
  * @remarks
31
28
  * - Exits the process if a suitable consumer app package.json cannot be found.
32
29
  */
33
- export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, finalOutputDir, isProdBuild = false }) {
30
+ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, finalOutputDir }) {
34
31
  console.log(`${chalk.cyan.bold('echo-dev-host')} - by Echo Core Team`);
35
32
  console.log('Minimalistic host application for local development of Echo applications.\n');
36
33
  console.log(figlet.textSync('Echo Dev Host', {
@@ -40,10 +37,7 @@ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, fi
40
37
  }));
41
38
  const devHostSrc = path.join(cliNodeModules, 'lib', 'echo-dev-host');
42
39
  const buildOutput = path.join(tmpDevHostFolder, ECHO_HOST_BUILD_OUTPUT_FOLDER);
43
- const srcPkgJson = path.join(devHostSrc, 'package.json');
44
- if (isProdBuild) {
45
- console.log(chalk.blueBright.bold(`\n[echo-dev-host] Building the echo app for Production.\n`));
46
- }
40
+ // Previously had a production (max versions) path; removed to always sync to consumer app for reproducibility.
47
41
  // Always remove and recreate the temporary folder
48
42
  if (fs.existsSync(tmpDevHostFolder)) {
49
43
  console.log(chalk.yellowBright.bold(`\n[echo-dev-host] Removing existing temporary folder "${tmpDevHostFolder}"...\n`));
@@ -52,7 +46,7 @@ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, fi
52
46
  console.log(chalk.blueBright.bold(`\n[echo-dev-host] Copying echo-dev-host source to ${chalk.yellow(tmpDevHostFolder)}...\n`));
53
47
  fs.copySync(devHostSrc, tmpDevHostFolder);
54
48
  // 2. npm install & build
55
- let echoLibVersionsToUse = undefined;
49
+ // Previously used to hold selected versions for prod path; now obsolete after strategy simplification.
56
50
  console.log(chalk.greenBright.bold('[echo-dev-host] Installing dependencies and building echo-dev-host...\n'));
57
51
  console.log(chalk.greenBright.bold('[echo-dev-host] Using the following versions of echo libraries'));
58
52
  const appPkgPath = findConsumerAppPackageJson(process.cwd());
@@ -60,31 +54,33 @@ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, fi
60
54
  console.log('Could not find a package.json with supported echo libs. Supported libs are:', SUPPORTED_ECHO_LIBS.join(', '));
61
55
  process.exit(1);
62
56
  }
63
- if (isProdBuild) {
64
- echoLibVersionsToUse = await determineEchoLibVersionsForProdBuild({
65
- appPkgPath,
66
- tmpDevHostFolder
67
- });
68
- }
57
+ // Always force sync to consumer versions (previous prod max-version strategy removed)
58
+ await syncDevHostToConsumerVersions({
59
+ appPkgPath,
60
+ tmpDevHostFolder
61
+ });
62
+ // For developer visibility still show latest versions (fetchLatest true)
69
63
  await printEchoLibsVersions({
70
- devHostPkgPath: srcPkgJson,
64
+ devHostPkgPath: path.join(tmpDevHostFolder, 'package.json'),
71
65
  appPkgPath: appPkgPath,
72
- fetchLatest: !isProdBuild,
73
- echoLibVersionsToUse: isProdBuild ? echoLibVersionsToUse : undefined
66
+ fetchLatest: true
74
67
  });
75
68
  execSync('npm install', { cwd: tmpDevHostFolder, stdio: 'inherit' });
76
69
  execSync('npm run build', { cwd: tmpDevHostFolder, stdio: 'inherit' });
77
70
  // 3. Copy build output to final output directory
78
71
  console.log(chalk.magentaBright.bold(`\n[echo-dev-host] Copying build output back to ${chalk.yellow(finalOutputDir)}...\n`));
79
72
  fs.copySync(buildOutput, finalOutputDir);
73
+ // 4. Copy updated package.json to final output directory
74
+ // This ensures printEchoLibsVersions() shows the actual runtime versions
75
+ const tmpPackageJsonPath = path.join(tmpDevHostFolder, 'package.json');
76
+ const finalPackageJsonPath = path.join(finalOutputDir, 'package.json');
77
+ fs.copySync(tmpPackageJsonPath, finalPackageJsonPath);
80
78
  if (fs.existsSync(tmpDevHostFolder)) {
81
79
  console.log(chalk.yellowBright.bold(`\n[echo-dev-host] Removing temporary folder "${tmpDevHostFolder}" used for the build...\n`));
82
80
  fs.removeSync(tmpDevHostFolder);
83
81
  }
84
82
  console.log(chalk.green.bold('[echo-dev-host] Build and copy complete!\n'));
85
- if (!isProdBuild) {
86
- console.log(chalk.green.bold('[echo-dev-host] Now you can start your Echo app with "npm start"\n'));
87
- }
83
+ console.log(chalk.green.bold('[echo-dev-host] Now you can start your Echo app with "npm start"\n'));
88
84
  }
89
85
  /**
90
86
  * Determines the versions of Echo libraries to use for a production build of the dev host,
@@ -100,11 +96,25 @@ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, fi
100
96
  * @param appPkgPath - The file path to the consumer application's package.json.
101
97
  * @param tmpDevHostFolder - The folder path containing the dev host's package.json.
102
98
  * @returns A promise that resolves to a record mapping each Echo library name to the version that will be used for the build.
99
+ * @internal - Exported for testing purposes only
103
100
  */
104
- async function determineEchoLibVersionsForProdBuild({ appPkgPath, tmpDevHostFolder }) {
101
+ // NOTE: Former production max-version resolution removed for simplicity & reproducibility.
102
+ /**
103
+ * Forces the dev host to use the exact echo library versions from the consumer app's package.json.
104
+ * This is useful for developers switching between git branches with different echo lib versions.
105
+ *
106
+ * Unlike production builds which use max(consumer, devHost), this function always uses the consumer's
107
+ * version regardless of whether it's higher or lower than the dev host's current version.
108
+ *
109
+ * @param appPkgPath - The file path to the consumer application's package.json.
110
+ * @param tmpDevHostFolder - The folder path containing the dev host's package.json.
111
+ * @returns A promise that resolves to a record mapping each Echo library name to the version from the consumer app.
112
+ * @internal - Exported for testing purposes only
113
+ */
114
+ export async function syncDevHostToConsumerVersions({ appPkgPath, tmpDevHostFolder }) {
105
115
  const consumerPkg = fs.readJsonSync(appPkgPath);
106
- const consumerAppName = consumerPkg.name || 'the consumer app';
107
- console.log(chalk.magentaBright.bold(`\n[echo-dev-host] Prod build - Using latest echo lib versions from "${consumerAppName}" or echo dev host.\n`));
116
+ const consumerAppName = consumerPkg.name || 'your app';
117
+ console.log(chalk.magentaBright.bold(`\n[echo-dev-host] Syncing to exact echo lib versions from "${consumerAppName}".\n`));
108
118
  const devHostPkgPath = path.join(tmpDevHostFolder, 'package.json');
109
119
  const devHostPkg = fs.readJsonSync(devHostPkgPath);
110
120
  const echoDeps = getEchoDeps(consumerPkg);
@@ -112,23 +122,32 @@ async function determineEchoLibVersionsForProdBuild({ appPkgPath, tmpDevHostFold
112
122
  const echoLibVersionsToUse = {};
113
123
  for (const [lib, consumerVersion] of echoDeps) {
114
124
  const devHostVersion = devHostPkg.dependencies?.[lib];
115
- let source = consumerAppName;
116
- let finalVersion = consumerVersion;
117
- if (devHostVersion &&
118
- semver.valid(devHostVersion) &&
119
- semver.valid(consumerVersion) &&
120
- semver.gt(devHostVersion, consumerVersion)) {
121
- source = 'echo dev host';
122
- devHostPkg.dependencies[lib] = devHostVersion;
125
+ // Always use consumer version (force sync) but do not add
126
+ // libraries that are missing from dev host; dev host must
127
+ // only contain the curated Echo libraries set.
128
+ echoLibVersionsToUse[lib] = consumerVersion;
129
+ if (devHostVersion === undefined) {
130
+ console.log(chalk.hex('#FFA500')(`[echo-dev-host] Warning: ${lib} is not present in dev host.\n` +
131
+ 'The dev host should ship the curated Echo libraries set.\n' +
132
+ 'Continuing without modifying dev host for this library.'));
133
+ continue;
134
+ }
135
+ if (devHostVersion === consumerVersion) {
136
+ console.log(`${chalk.cyan(lib)}: ${chalk.yellow(consumerVersion)} ${chalk.gray('(already synced)')}`);
137
+ }
138
+ else {
139
+ devHostPkg.dependencies[lib] = consumerVersion;
123
140
  updated = true;
141
+ const wasMessage = chalk.gray(`(was ${devHostVersion})`);
142
+ console.log(`${chalk.cyan(lib)}: ${chalk.yellow(consumerVersion)} ${wasMessage}`);
124
143
  }
125
- // Track the version that will be used for the build
126
- echoLibVersionsToUse[lib] = devHostPkg.dependencies?.[lib] || consumerVersion;
127
- // Log the decision
128
- console.log(`${chalk.cyan(lib)}: ${chalk.yellow(finalVersion)} (from ${source})`);
129
144
  }
130
145
  if (updated) {
131
146
  fs.writeJsonSync(devHostPkgPath, devHostPkg, { spaces: 4 });
147
+ console.log(chalk.green('\n✓ Updated dev host package.json'));
148
+ }
149
+ else {
150
+ console.log(chalk.gray('\n✓ All versions already synced'));
132
151
  }
133
152
  return echoLibVersionsToUse;
134
153
  }
@@ -1 +1 @@
1
- {"version":3,"file":"buildAndCopyDevHost.js","sourceRoot":"","sources":["../../../src/tools/buildScripts/buildAndCopyDevHost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildAndCopyDevHost.js","sourceRoot":"","sources":["../../../src/tools/buildScripts/buildAndCopyDevHost.ts"],"names":[],"mappings":"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"}