@equinor/echo-cli 2.1.0-beta-0 → 2.1.0-beta-1

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.
@@ -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",
27
- "@equinor/echo-framework": "2.2.0",
24
+ "@equinor/echo-base": "2.2.1",
25
+ "@equinor/echo-components": "2.2.1",
26
+ "@equinor/echo-core": "2.2.1",
27
+ "@equinor/echo-framework": "2.2.1",
28
28
  "@equinor/echo-scripts": "0.1.5",
29
- "@equinor/echo-search": "2.2.0",
30
- "@equinor/echo-utils": "2.2.0",
29
+ "@equinor/echo-search": "2.2.1",
30
+ "@equinor/echo-utils": "2.2.1",
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",
@@ -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,63 @@
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
+ isProdBuild: false,
56
+ syncMode: true // New flag to force exact version matching
57
+ });
58
+ console.log(chalk.green.bold("\n✅ Sync complete! echo-dev-host now uses your app's echo lib versions.\n"));
59
+ console.log(chalk.gray('You can now run "npm start" to start your Echo app.\n'));
60
+ }
61
+ }
62
+ SyncDevHostToApp.run();
63
+ //# 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;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,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"}
@@ -21,9 +21,46 @@
21
21
  * @remarks
22
22
  * - Exits the process if a suitable consumer app package.json cannot be found.
23
23
  */
24
- export declare function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, finalOutputDir, isProdBuild }: {
24
+ export declare function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, finalOutputDir, isProdBuild, syncMode }: {
25
25
  cliNodeModules: string;
26
26
  tmpDevHostFolder: string;
27
27
  finalOutputDir: string;
28
28
  isProdBuild?: boolean;
29
+ syncMode?: boolean;
29
30
  }): Promise<void>;
31
+ /**
32
+ * Determines the versions of Echo libraries to use for a production build of the dev host,
33
+ * based on the dependencies specified in the consumer application's package.json.
34
+ *
35
+ * This function compares the Echo library dependencies between the consumer app and the dev host.
36
+ * If the consumer app requires a newer version of an Echo library than the dev host, the dev host's
37
+ * package.json is updated to use the consumer app's version for that library.
38
+ *
39
+ * The function logs the source of each version decision and writes any necessary updates to the dev host's
40
+ * package.json file.
41
+ *
42
+ * @param appPkgPath - The file path to the consumer application's package.json.
43
+ * @param tmpDevHostFolder - The folder path containing the dev host's package.json.
44
+ * @returns A promise that resolves to a record mapping each Echo library name to the version that will be used for the build.
45
+ * @internal - Exported for testing purposes only
46
+ */
47
+ export declare function determineEchoLibVersionsForProdBuild({ appPkgPath, tmpDevHostFolder }: {
48
+ appPkgPath: string;
49
+ tmpDevHostFolder: string;
50
+ }): Promise<Record<string, string>>;
51
+ /**
52
+ * Forces the dev host to use the exact echo library versions from the consumer app's package.json.
53
+ * This is useful for developers switching between git branches with different echo lib versions.
54
+ *
55
+ * Unlike production builds which use max(consumer, devHost), this function always uses the consumer's
56
+ * version regardless of whether it's higher or lower than the dev host's current version.
57
+ *
58
+ * @param appPkgPath - The file path to the consumer application's package.json.
59
+ * @param tmpDevHostFolder - The folder path containing the dev host's package.json.
60
+ * @returns A promise that resolves to a record mapping each Echo library name to the version from the consumer app.
61
+ * @internal - Exported for testing purposes only
62
+ */
63
+ export declare function syncDevHostToConsumerVersions({ appPkgPath, tmpDevHostFolder }: {
64
+ appPkgPath: string;
65
+ tmpDevHostFolder: string;
66
+ }): Promise<Record<string, string>>;
@@ -30,7 +30,7 @@ import { printEchoLibsVersions } from '../../utils/printEchoLibsVersions.js';
30
30
  * @remarks
31
31
  * - Exits the process if a suitable consumer app package.json cannot be found.
32
32
  */
33
- export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, finalOutputDir, isProdBuild = false }) {
33
+ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, finalOutputDir, isProdBuild = false, syncMode = false }) {
34
34
  console.log(`${chalk.cyan.bold('echo-dev-host')} - by Echo Core Team`);
35
35
  console.log('Minimalistic host application for local development of Echo applications.\n');
36
36
  console.log(figlet.textSync('Echo Dev Host', {
@@ -66,6 +66,12 @@ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, fi
66
66
  tmpDevHostFolder
67
67
  });
68
68
  }
69
+ else if (syncMode) {
70
+ echoLibVersionsToUse = await syncDevHostToConsumerVersions({
71
+ appPkgPath,
72
+ tmpDevHostFolder
73
+ });
74
+ }
69
75
  await printEchoLibsVersions({
70
76
  devHostPkgPath: srcPkgJson,
71
77
  appPkgPath: appPkgPath,
@@ -100,8 +106,9 @@ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, fi
100
106
  * @param appPkgPath - The file path to the consumer application's package.json.
101
107
  * @param tmpDevHostFolder - The folder path containing the dev host's package.json.
102
108
  * @returns A promise that resolves to a record mapping each Echo library name to the version that will be used for the build.
109
+ * @internal - Exported for testing purposes only
103
110
  */
104
- async function determineEchoLibVersionsForProdBuild({ appPkgPath, tmpDevHostFolder }) {
111
+ export async function determineEchoLibVersionsForProdBuild({ appPkgPath, tmpDevHostFolder }) {
105
112
  const consumerPkg = fs.readJsonSync(appPkgPath);
106
113
  const consumerAppName = consumerPkg.name || 'the consumer app';
107
114
  console.log(chalk.magentaBright.bold(`\n[echo-dev-host] Prod build - Using latest echo lib versions from "${consumerAppName}" or echo dev host.\n`));
@@ -113,17 +120,28 @@ async function determineEchoLibVersionsForProdBuild({ appPkgPath, tmpDevHostFold
113
120
  for (const [lib, consumerVersion] of echoDeps) {
114
121
  const devHostVersion = devHostPkg.dependencies?.[lib];
115
122
  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;
123
+ let finalVersion = consumerVersion; // Default to consumer version
124
+ if (devHostVersion && semver.valid(devHostVersion) && semver.valid(consumerVersion)) {
125
+ // Use whichever version is higher
126
+ if (semver.gt(devHostVersion, consumerVersion)) {
127
+ // Dev host version is higher, keep it
128
+ source = 'echo dev host';
129
+ finalVersion = devHostVersion;
130
+ }
131
+ else if (semver.gt(consumerVersion, devHostVersion)) {
132
+ // Consumer version is higher, update dev host package.json
133
+ devHostPkg.dependencies[lib] = consumerVersion;
134
+ updated = true;
135
+ }
136
+ // If versions are equal, finalVersion stays as consumerVersion
137
+ }
138
+ else if (!devHostVersion) {
139
+ // Dev host doesn't have this library, add it from consumer
140
+ devHostPkg.dependencies[lib] = consumerVersion;
123
141
  updated = true;
124
142
  }
125
143
  // Track the version that will be used for the build
126
- echoLibVersionsToUse[lib] = devHostPkg.dependencies?.[lib] || consumerVersion;
144
+ echoLibVersionsToUse[lib] = finalVersion;
127
145
  // Log the decision
128
146
  console.log(`${chalk.cyan(lib)}: ${chalk.yellow(finalVersion)} (from ${source})`);
129
147
  }
@@ -132,4 +150,49 @@ async function determineEchoLibVersionsForProdBuild({ appPkgPath, tmpDevHostFold
132
150
  }
133
151
  return echoLibVersionsToUse;
134
152
  }
153
+ /**
154
+ * Forces the dev host to use the exact echo library versions from the consumer app's package.json.
155
+ * This is useful for developers switching between git branches with different echo lib versions.
156
+ *
157
+ * Unlike production builds which use max(consumer, devHost), this function always uses the consumer's
158
+ * version regardless of whether it's higher or lower than the dev host's current version.
159
+ *
160
+ * @param appPkgPath - The file path to the consumer application's package.json.
161
+ * @param tmpDevHostFolder - The folder path containing the dev host's package.json.
162
+ * @returns A promise that resolves to a record mapping each Echo library name to the version from the consumer app.
163
+ * @internal - Exported for testing purposes only
164
+ */
165
+ export async function syncDevHostToConsumerVersions({ appPkgPath, tmpDevHostFolder }) {
166
+ const consumerPkg = fs.readJsonSync(appPkgPath);
167
+ const consumerAppName = consumerPkg.name || 'your app';
168
+ console.log(chalk.magentaBright.bold(`\n[echo-dev-host] Syncing to exact echo lib versions from "${consumerAppName}".\n`));
169
+ const devHostPkgPath = path.join(tmpDevHostFolder, 'package.json');
170
+ const devHostPkg = fs.readJsonSync(devHostPkgPath);
171
+ const echoDeps = getEchoDeps(consumerPkg);
172
+ let updated = false;
173
+ const echoLibVersionsToUse = {};
174
+ for (const [lib, consumerVersion] of echoDeps) {
175
+ const devHostVersion = devHostPkg.dependencies?.[lib];
176
+ // Always use consumer version (force sync)
177
+ echoLibVersionsToUse[lib] = consumerVersion;
178
+ if (devHostVersion === consumerVersion) {
179
+ console.log(`${chalk.cyan(lib)}: ${chalk.yellow(consumerVersion)} ${chalk.gray('(already synced)')}`);
180
+ }
181
+ else {
182
+ devHostPkg.dependencies[lib] = consumerVersion;
183
+ updated = true;
184
+ const previousVersion = devHostVersion || 'not installed';
185
+ const wasMessage = chalk.gray(`(was ${previousVersion})`);
186
+ console.log(`${chalk.cyan(lib)}: ${chalk.yellow(consumerVersion)} ${wasMessage}`);
187
+ }
188
+ }
189
+ if (updated) {
190
+ fs.writeJsonSync(devHostPkgPath, devHostPkg, { spaces: 4 });
191
+ console.log(chalk.green('\n✓ Updated dev host package.json'));
192
+ }
193
+ else {
194
+ console.log(chalk.gray('\n✓ All versions already synced'));
195
+ }
196
+ return echoLibVersionsToUse;
197
+ }
135
198
  //# sourceMappingURL=buildAndCopyDevHost.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildAndCopyDevHost.js","sourceRoot":"","sources":["../../../src/tools/buildScripts/buildAndCopyDevHost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AACpG,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EACtC,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,WAAW,GAAG,KAAK,EAMtB;IACG,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CACP,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE;QAC7B,IAAI,EAAE,UAAU;QAChB,gBAAgB,EAAE,SAAS;QAC3B,cAAc,EAAE,SAAS;KAC5B,CAAC,CACL,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAEzD,IAAI,WAAW,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAC;IACpG,CAAC;IAED,kDAAkD;IAClD,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,yDAAyD,gBAAgB,QAAQ,CAAC,CAC7G,CAAC;QACF,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,UAAU,CAAC,IAAI,CACjB,qDAAqD,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAC7F,CACJ,CAAC;IACF,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAE1C,yBAAyB;IACzB,IAAI,oBAAoB,GAAuC,SAAS,CAAC;IAEzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC,CAAC;IAC/G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC,CAAC;IAEtG,MAAM,UAAU,GAAG,0BAA0B,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE7D,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CACP,6EAA6E,EAC7E,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CACjC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QACd,oBAAoB,GAAG,MAAM,oCAAoC,CAAC;YAC9D,UAAU;YACV,gBAAgB;SACnB,CAAC,CAAC;IACP,CAAC;IAED,MAAM,qBAAqB,CAAC;QACxB,cAAc,EAAE,UAAU;QAC1B,UAAU,EAAE,UAAU;QACtB,WAAW,EAAE,CAAC,WAAW;QACzB,oBAAoB,EAAE,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS;KACvE,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACrE,QAAQ,CAAC,eAAe,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAEvE,iDAAiD;IACjD,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,kDAAkD,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAClH,CAAC;IAEF,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAEzC,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,YAAY,CAAC,IAAI,CACnB,gDAAgD,gBAAgB,2BAA2B,CAC9F,CACJ,CAAC;QACF,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;IAE5E,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC,CAAC;IACxG,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,KAAK,UAAU,oCAAoC,CAAC,EAChD,UAAU,EACV,gBAAgB,EAInB;IACG,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,IAAI,kBAAkB,CAAC;IAC/D,OAAO,CAAC,GAAG,CACP,KAAK,CAAC,aAAa,CAAC,IAAI,CACpB,uEAAuE,eAAe,uBAAuB,CAChH,CACJ,CAAC;IACF,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAE1C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,oBAAoB,GAA2B,EAAE,CAAC;IACxD,KAAK,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,QAAQ,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,MAAM,GAAG,eAAe,CAAC;QAC7B,IAAI,YAAY,GAAG,eAAe,CAAC;QAEnC,IACI,cAAc;YACd,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC,EAC5C,CAAC;YACC,MAAM,GAAG,eAAe,CAAC;YACzB,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;YAC9C,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;QAED,oDAAoD;QACpD,oBAAoB,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC;QAE9E,mBAAmB;QACnB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,MAAM,GAAG,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACV,EAAE,CAAC,aAAa,CAAC,cAAc,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,oBAAoB,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"buildAndCopyDevHost.js","sourceRoot":"","sources":["../../../src/tools/buildScripts/buildAndCopyDevHost.ts"],"names":[],"mappings":"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"}