@equinor/echo-cli 2.1.0-beta-7 → 2.1.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 (40) hide show
  1. package/README.md +384 -384
  2. package/lib/config/common/buildAndCopyEchoHostForProd.js +1 -2
  3. package/lib/config/common/buildAndCopyEchoHostForProd.js.map +1 -1
  4. package/lib/echo-dev-host/README.md +121 -121
  5. package/lib/echo-dev-host/babel.config.js +10 -10
  6. package/lib/echo-dev-host/jest.config.js +21 -21
  7. package/lib/echo-dev-host/package-lock.json +13124 -13124
  8. package/lib/echo-dev-host/public/env-config.js +17 -17
  9. package/lib/echo-dev-host/public/index.html +21 -21
  10. package/lib/echo-dev-host/tsconfig.json +21 -21
  11. package/lib/echo-dev-host/webpack.config.js +145 -145
  12. package/lib/tools/buildScripts/buildAndCopyDevHost.d.ts +1 -7
  13. package/lib/tools/buildScripts/buildAndCopyDevHost.js +24 -70
  14. package/lib/tools/buildScripts/buildAndCopyDevHost.js.map +1 -1
  15. package/lib/update-echo-libs.js +0 -1
  16. package/lib/update-echo-libs.js.map +1 -1
  17. package/package.json +111 -111
  18. package/templates/echoAppTemplate/.gitattributes +3 -3
  19. package/templates/echoAppTemplate/package.json +35 -35
  20. package/templates/echoAppTemplate/readme.md +41 -41
  21. package/templates/echoAppTemplate/tsconfig.json +25 -25
  22. package/templates/echoAppTemplateTutorial/.gitattributes +3 -3
  23. package/templates/echoAppTemplateTutorial/package.json +36 -36
  24. package/templates/echoAppTemplateTutorial/readme.md +41 -41
  25. package/templates/echoAppTemplateTutorial/tsconfig.json +25 -25
  26. package/templates/echoLibraryTemplate/package.json +35 -35
  27. package/templates/echoLibraryTemplate/public/index.html +21 -21
  28. package/templates/echoLibraryTemplate/readme.md +1 -1
  29. package/templates/echoPluginTemplate/package.json +35 -35
  30. package/templates/echoPluginTemplate/public/index.html +21 -21
  31. package/templates/echoPluginTemplate/readme.md +1 -1
  32. package/lib/sync-echo-dev-versions.d.ts +0 -6
  33. package/lib/sync-echo-dev-versions.js +0 -43
  34. package/lib/sync-echo-dev-versions.js.map +0 -1
  35. package/lib/tools/buildScripts/buildAndCopyDevHost.test.d.ts +0 -1
  36. package/lib/tools/buildScripts/buildAndCopyDevHost.test.js +0 -500
  37. package/lib/tools/buildScripts/buildAndCopyDevHost.test.js.map +0 -1
  38. package/lib/utils/merge.test.d.ts +0 -1
  39. package/lib/utils/merge.test.js +0 -29
  40. package/lib/utils/merge.test.js.map +0 -1
@@ -1,17 +1,17 @@
1
- window._env_ = {
2
- HTTPS: "true",
3
- GENERATE_SOURCEMAP: "true",
4
- INLINE_RUNTIME_CHUNK: "false",
5
- WEBSITE_HOSTNAME: "localhost:3000;",
6
- REACT_APP_DEFAULT_CACHE_LOCATION: "localstorage",
7
- REACT_APP_API_URL: "https://dt-echopedia-api-dev.azurewebsites.net",
8
- REACT_APP_WEB_URL: "https://dt-echopedia-web-dev.azurewebsites.net",
9
- REACT_APP_WEB_PROD_URL: "https://echo.equinor.com",
10
- REACT_APP_AZURE_AD_TENNANT: "StatoilSRM.onmicrosoft.com",
11
- REACT_APP_AZURE_AD_TENNANT_ID: "3aa4a235-b6e2-48d5-9195-7fcf05b459b0",
12
- REACT_APP_AZURE_AD_CLIENT_ID: "751d2504-0b66-4b78-9807-4b60525a14c6",
13
- REACT_APP_API_CLIENT_ID: "aef35d97-53d4-4fd0-adaf-c5a514b38436",
14
- REACT_APP_APPINSIGHTS_CONNECTION_STRING: "InstrumentationKey=e5299075-a00d-4012-96f9-42861e8d8a9e;IngestionEndpoint=https://northeurope-3.in.applicationinsights.azure.com/;LiveEndpoint=https://northeurope.livediagnostics.monitor.azure.com/;ApplicationId=a9b64222-d4a9-42e6-a615-7428fe1a26af",
15
- REACT_APP_AZURE_BUILD_NUMBER: "0.8.dev.9",
16
- REACT_APP_LOGGER_ACTIVE: "false",
17
- }
1
+ window._env_ = {
2
+ HTTPS: "true",
3
+ GENERATE_SOURCEMAP: "true",
4
+ INLINE_RUNTIME_CHUNK: "false",
5
+ WEBSITE_HOSTNAME: "localhost:3000;",
6
+ REACT_APP_DEFAULT_CACHE_LOCATION: "localstorage",
7
+ REACT_APP_API_URL: "https://dt-echopedia-api-dev.azurewebsites.net",
8
+ REACT_APP_WEB_URL: "https://dt-echopedia-web-dev.azurewebsites.net",
9
+ REACT_APP_WEB_PROD_URL: "https://echo.equinor.com",
10
+ REACT_APP_AZURE_AD_TENNANT: "StatoilSRM.onmicrosoft.com",
11
+ REACT_APP_AZURE_AD_TENNANT_ID: "3aa4a235-b6e2-48d5-9195-7fcf05b459b0",
12
+ REACT_APP_AZURE_AD_CLIENT_ID: "751d2504-0b66-4b78-9807-4b60525a14c6",
13
+ REACT_APP_API_CLIENT_ID: "aef35d97-53d4-4fd0-adaf-c5a514b38436",
14
+ REACT_APP_APPINSIGHTS_CONNECTION_STRING: "InstrumentationKey=e5299075-a00d-4012-96f9-42861e8d8a9e;IngestionEndpoint=https://northeurope-3.in.applicationinsights.azure.com/;LiveEndpoint=https://northeurope.livediagnostics.monitor.azure.com/;ApplicationId=a9b64222-d4a9-42e6-a615-7428fe1a26af",
15
+ REACT_APP_AZURE_BUILD_NUMBER: "0.8.dev.9",
16
+ REACT_APP_LOGGER_ACTIVE: "false",
17
+ }
@@ -1,21 +1,21 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <script type="application/javascript" src="./env-config.js"></script>
6
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
7
- <meta
8
- name="viewport"
9
- content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"
10
- />
11
- <link href="./index.css" rel="stylesheet" />
12
- <link rel="stylesheet" href="https://cdn.eds.equinor.com/font/equinor-font.css" />
13
- <link rel="preconnect" href="https://login.microsoftonline.com" />
14
- <link rel="preconnect" href="https://dc.services.visualstudio.com" />
15
- <link rel="preconnect" href="https://cdn.eds.equinor.com" />
16
- <title>Echo | Development</title>
17
- </head>
18
- <body>
19
- <div id="root"></div>
20
- </body>
21
- </html>
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <script type="application/javascript" src="./env-config.js"></script>
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
7
+ <meta
8
+ name="viewport"
9
+ content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"
10
+ />
11
+ <link href="./index.css" rel="stylesheet" />
12
+ <link rel="stylesheet" href="https://cdn.eds.equinor.com/font/equinor-font.css" />
13
+ <link rel="preconnect" href="https://login.microsoftonline.com" />
14
+ <link rel="preconnect" href="https://dc.services.visualstudio.com" />
15
+ <link rel="preconnect" href="https://cdn.eds.equinor.com" />
16
+ <title>Echo | Development</title>
17
+ </head>
18
+ <body>
19
+ <div id="root"></div>
20
+ </body>
21
+ </html>
@@ -1,21 +1,21 @@
1
- {
2
- "compilerOptions": {
3
- "strict": true,
4
- "jsx": "react-jsx",
5
- "lib": ["dom", "dom.iterable", "esnext"],
6
- "allowSyntheticDefaultImports": true,
7
- "esModuleInterop": true,
8
- "module": "commonjs",
9
- "outDir": "./build/",
10
- "preserveConstEnums": true,
11
- "removeComments": true,
12
- "sourceMap": true,
13
- "noImplicitAny": false,
14
- "allowJs": true,
15
- "skipLibCheck": true,
16
- "target": "es5",
17
- "resolveJsonModule": true,
18
- "types": ["@equinor/echo-scripts", "@types/node", "@types/webpack-env", "@types/jest"]
19
- },
20
- "include": ["src"]
21
- }
1
+ {
2
+ "compilerOptions": {
3
+ "strict": true,
4
+ "jsx": "react-jsx",
5
+ "lib": ["dom", "dom.iterable", "esnext"],
6
+ "allowSyntheticDefaultImports": true,
7
+ "esModuleInterop": true,
8
+ "module": "commonjs",
9
+ "outDir": "./build/",
10
+ "preserveConstEnums": true,
11
+ "removeComments": true,
12
+ "sourceMap": true,
13
+ "noImplicitAny": false,
14
+ "allowJs": true,
15
+ "skipLibCheck": true,
16
+ "target": "es5",
17
+ "resolveJsonModule": true,
18
+ "types": ["@equinor/echo-scripts", "@types/node", "@types/webpack-env", "@types/jest"]
19
+ },
20
+ "include": ["src"]
21
+ }
@@ -1,145 +1,145 @@
1
- import CopyPlugin from 'copy-webpack-plugin';
2
- import Dotenv from 'dotenv-webpack';
3
- import HtmlWebpackPlugin from 'html-webpack-plugin';
4
- import path from 'path';
5
- import { fileURLToPath } from 'url';
6
- import WebpackBar from 'webpackbar';
7
-
8
- const webpackConfig = (env) => {
9
- console.log('Building the dev host application for EchoCli.');
10
-
11
- const __filename = fileURLToPath(import.meta.url);
12
- const __dirname = path.dirname(__filename);
13
-
14
- const buildOutputFolder = 'echo-dev-host-build';
15
-
16
- return {
17
- entry: ['@babel/polyfill', './src/index.tsx'],
18
- mode: 'production',
19
- devtool: 'source-map',
20
- output: {
21
- clean: true,
22
- path: path.resolve(process.cwd(), buildOutputFolder),
23
- filename: '[name].echo.bundle.js',
24
- chunkFilename: 'assets/[name].[contenthash].chunk.js',
25
- publicPath: '/'
26
- },
27
- resolve: {
28
- extensions: ['.ts', '.tsx', '.js', '.jsx'],
29
- fallback: {
30
- crypto: false,
31
- stream: false,
32
- buffer: false
33
- }
34
- },
35
- module: {
36
- rules: [
37
- {
38
- test: /\.(ts|tsx)$/,
39
- loader: 'ts-loader',
40
- exclude: /node_modules/
41
- },
42
- {
43
- test: /\.(js|jsx)$/,
44
- exclude: /node_modules/,
45
- loader: 'babel-loader'
46
- },
47
- {
48
- test: /\.css$/,
49
- use: [
50
- 'style-loader',
51
- {
52
- loader: 'css-loader',
53
- options: {
54
- importLoaders: 1,
55
- modules: {
56
- mode: 'local',
57
- localIdentName: 'echo-[folder]__[local]-[hash:base64:5]',
58
- namedExport: false,
59
- exportLocalsConvention: 'as-is'
60
- }
61
- }
62
- }
63
- ],
64
- include: /\.module\.css$/
65
- },
66
- {
67
- test: /\.css$/,
68
- use: ['style-loader', 'css-loader'],
69
- exclude: /\.module\.css$/
70
- },
71
- {
72
- test: /\.svg$/,
73
- use: ['@svgr/webpack']
74
- },
75
- {
76
- test: /\.(png|jpe?g|gif)$/i,
77
- use: [
78
- {
79
- loader: 'file-loader'
80
- }
81
- ]
82
- }
83
- ]
84
- },
85
- devServer: {
86
- static: [
87
- {
88
- directory: path.join(__dirname, 'public')
89
- },
90
- {
91
- directory: path.join(__dirname, 'build')
92
- }
93
- ],
94
- compress: true,
95
- port: 3000,
96
- hot: true,
97
- historyApiFallback: true,
98
- server: 'https',
99
- headers: {
100
- 'Access-Control-Allow-Origin': '*',
101
- 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
102
- 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization'
103
- }
104
- // overlay: {
105
- // warnings: true,
106
- // errors: true,
107
- // },
108
- },
109
- plugins: [
110
- new Dotenv({
111
- ignoreStub: false,
112
- expand: true,
113
- systemvars: false
114
- }),
115
- new HtmlWebpackPlugin({
116
- template: path.resolve(__dirname, './public/index.html')
117
- }),
118
- new WebpackBar({
119
- name: 'Echo module',
120
- color: '#007079',
121
- profile: true
122
- }),
123
- new CopyPlugin({
124
- patterns: [
125
- {
126
- from: path.resolve(__dirname, './public/index.css'),
127
- to: path.resolve(process.cwd(), buildOutputFolder, 'index.css')
128
- },
129
- {
130
- from: path.resolve(__dirname, './public/env-config.js'),
131
- to: path.resolve(process.cwd(), buildOutputFolder, 'env-config.js')
132
- }
133
- ]
134
- })
135
- ],
136
- optimization: {
137
- splitChunks: {
138
- chunks: 'all'
139
- },
140
- minimize: true
141
- }
142
- };
143
- };
144
-
145
- export default webpackConfig;
1
+ import CopyPlugin from 'copy-webpack-plugin';
2
+ import Dotenv from 'dotenv-webpack';
3
+ import HtmlWebpackPlugin from 'html-webpack-plugin';
4
+ import path from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ import WebpackBar from 'webpackbar';
7
+
8
+ const webpackConfig = (env) => {
9
+ console.log('Building the dev host application for EchoCli.');
10
+
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = path.dirname(__filename);
13
+
14
+ const buildOutputFolder = 'echo-dev-host-build';
15
+
16
+ return {
17
+ entry: ['@babel/polyfill', './src/index.tsx'],
18
+ mode: 'production',
19
+ devtool: 'source-map',
20
+ output: {
21
+ clean: true,
22
+ path: path.resolve(process.cwd(), buildOutputFolder),
23
+ filename: '[name].echo.bundle.js',
24
+ chunkFilename: 'assets/[name].[contenthash].chunk.js',
25
+ publicPath: '/'
26
+ },
27
+ resolve: {
28
+ extensions: ['.ts', '.tsx', '.js', '.jsx'],
29
+ fallback: {
30
+ crypto: false,
31
+ stream: false,
32
+ buffer: false
33
+ }
34
+ },
35
+ module: {
36
+ rules: [
37
+ {
38
+ test: /\.(ts|tsx)$/,
39
+ loader: 'ts-loader',
40
+ exclude: /node_modules/
41
+ },
42
+ {
43
+ test: /\.(js|jsx)$/,
44
+ exclude: /node_modules/,
45
+ loader: 'babel-loader'
46
+ },
47
+ {
48
+ test: /\.css$/,
49
+ use: [
50
+ 'style-loader',
51
+ {
52
+ loader: 'css-loader',
53
+ options: {
54
+ importLoaders: 1,
55
+ modules: {
56
+ mode: 'local',
57
+ localIdentName: 'echo-[folder]__[local]-[hash:base64:5]',
58
+ namedExport: false,
59
+ exportLocalsConvention: 'as-is'
60
+ }
61
+ }
62
+ }
63
+ ],
64
+ include: /\.module\.css$/
65
+ },
66
+ {
67
+ test: /\.css$/,
68
+ use: ['style-loader', 'css-loader'],
69
+ exclude: /\.module\.css$/
70
+ },
71
+ {
72
+ test: /\.svg$/,
73
+ use: ['@svgr/webpack']
74
+ },
75
+ {
76
+ test: /\.(png|jpe?g|gif)$/i,
77
+ use: [
78
+ {
79
+ loader: 'file-loader'
80
+ }
81
+ ]
82
+ }
83
+ ]
84
+ },
85
+ devServer: {
86
+ static: [
87
+ {
88
+ directory: path.join(__dirname, 'public')
89
+ },
90
+ {
91
+ directory: path.join(__dirname, 'build')
92
+ }
93
+ ],
94
+ compress: true,
95
+ port: 3000,
96
+ hot: true,
97
+ historyApiFallback: true,
98
+ server: 'https',
99
+ headers: {
100
+ 'Access-Control-Allow-Origin': '*',
101
+ 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
102
+ 'Access-Control-Allow-Headers': 'X-Requested-With, content-type, Authorization'
103
+ }
104
+ // overlay: {
105
+ // warnings: true,
106
+ // errors: true,
107
+ // },
108
+ },
109
+ plugins: [
110
+ new Dotenv({
111
+ ignoreStub: false,
112
+ expand: true,
113
+ systemvars: false
114
+ }),
115
+ new HtmlWebpackPlugin({
116
+ template: path.resolve(__dirname, './public/index.html')
117
+ }),
118
+ new WebpackBar({
119
+ name: 'Echo module',
120
+ color: '#007079',
121
+ profile: true
122
+ }),
123
+ new CopyPlugin({
124
+ patterns: [
125
+ {
126
+ from: path.resolve(__dirname, './public/index.css'),
127
+ to: path.resolve(process.cwd(), buildOutputFolder, 'index.css')
128
+ },
129
+ {
130
+ from: path.resolve(__dirname, './public/env-config.js'),
131
+ to: path.resolve(process.cwd(), buildOutputFolder, 'env-config.js')
132
+ }
133
+ ]
134
+ })
135
+ ],
136
+ optimization: {
137
+ splitChunks: {
138
+ chunks: 'all'
139
+ },
140
+ minimize: true
141
+ }
142
+ };
143
+ };
144
+
145
+ export default webpackConfig;
@@ -15,16 +15,14 @@
15
15
  * @param params.cliNodeModules - Path to the node_modules directory containing echo-dev-host.
16
16
  * @param params.tmpDevHostFolder - Path to the temporary folder used for building the dev host.
17
17
  * @param params.finalOutputDir - Path to the directory where the build output should be copied.
18
- * @param params.isProdBuild - Whether this is a production build (default: false)
19
18
  *
20
19
  * @remarks
21
20
  * - Exits the process if a suitable consumer app package.json cannot be found.
22
21
  */
23
- export declare function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, finalOutputDir, isProdBuild }: {
22
+ export declare function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, finalOutputDir }: {
24
23
  cliNodeModules: string;
25
24
  tmpDevHostFolder: string;
26
25
  finalOutputDir: string;
27
- isProdBuild?: boolean;
28
26
  }): Promise<void>;
29
27
  /**
30
28
  * Determines the versions of Echo libraries to use for a production build of the dev host,
@@ -42,10 +40,6 @@ export declare function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder,
42
40
  * @returns A promise that resolves to a record mapping each Echo library name to the version that will be used for the build.
43
41
  * @internal - Exported for testing purposes only
44
42
  */
45
- export declare function determineEchoLibVersionsForProdBuild({ appPkgPath, tmpDevHostFolder }: {
46
- appPkgPath: string;
47
- tmpDevHostFolder: string;
48
- }): Promise<Record<string, string>>;
49
43
  /**
50
44
  * Forces the dev host to use the exact echo library versions from the consumer app's package.json.
51
45
  * This is useful for developers switching between git branches with different echo lib versions.
@@ -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';
@@ -24,12 +23,11 @@ import { printEchoLibsVersions } from '../../utils/printEchoLibsVersions.js';
24
23
  * @param params.cliNodeModules - Path to the node_modules directory containing echo-dev-host.
25
24
  * @param params.tmpDevHostFolder - Path to the temporary folder used for building the dev host.
26
25
  * @param params.finalOutputDir - Path to the directory where the build output should be copied.
27
- * @param params.isProdBuild - Whether this is a production build (default: false)
28
26
  *
29
27
  * @remarks
30
28
  * - Exits the process if a suitable consumer app package.json cannot be found.
31
29
  */
32
- export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, finalOutputDir, isProdBuild = false }) {
30
+ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, finalOutputDir }) {
33
31
  console.log(`${chalk.cyan.bold('echo-dev-host')} - by Echo Core Team`);
34
32
  console.log('Minimalistic host application for local development of Echo applications.\n');
35
33
  console.log(figlet.textSync('Echo Dev Host', {
@@ -39,9 +37,7 @@ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, fi
39
37
  }));
40
38
  const devHostSrc = path.join(cliNodeModules, 'lib', 'echo-dev-host');
41
39
  const buildOutput = path.join(tmpDevHostFolder, ECHO_HOST_BUILD_OUTPUT_FOLDER);
42
- if (isProdBuild) {
43
- console.log(chalk.blueBright.bold(`\n[echo-dev-host] Building the echo app for Production.\n`));
44
- }
40
+ // Previously had a production (max versions) path; removed to always sync to consumer app for reproducibility.
45
41
  // Always remove and recreate the temporary folder
46
42
  if (fs.existsSync(tmpDevHostFolder)) {
47
43
  console.log(chalk.yellowBright.bold(`\n[echo-dev-host] Removing existing temporary folder "${tmpDevHostFolder}"...\n`));
@@ -50,7 +46,7 @@ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, fi
50
46
  console.log(chalk.blueBright.bold(`\n[echo-dev-host] Copying echo-dev-host source to ${chalk.yellow(tmpDevHostFolder)}...\n`));
51
47
  fs.copySync(devHostSrc, tmpDevHostFolder);
52
48
  // 2. npm install & build
53
- let echoLibVersionsToUse = undefined;
49
+ // Previously used to hold selected versions for prod path; now obsolete after strategy simplification.
54
50
  console.log(chalk.greenBright.bold('[echo-dev-host] Installing dependencies and building echo-dev-host...\n'));
55
51
  console.log(chalk.greenBright.bold('[echo-dev-host] Using the following versions of echo libraries'));
56
52
  const appPkgPath = findConsumerAppPackageJson(process.cwd());
@@ -58,30 +54,24 @@ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, fi
58
54
  console.log('Could not find a package.json with supported echo libs. Supported libs are:', SUPPORTED_ECHO_LIBS.join(', '));
59
55
  process.exit(1);
60
56
  }
61
- if (isProdBuild) {
62
- echoLibVersionsToUse = await determineEchoLibVersionsForProdBuild({
63
- appPkgPath,
64
- tmpDevHostFolder
65
- });
66
- }
67
- else {
68
- echoLibVersionsToUse = await syncDevHostToConsumerVersions({
69
- appPkgPath,
70
- tmpDevHostFolder
71
- });
72
- }
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)
73
63
  await printEchoLibsVersions({
74
64
  devHostPkgPath: path.join(tmpDevHostFolder, 'package.json'),
75
65
  appPkgPath: appPkgPath,
76
- fetchLatest: !isProdBuild,
77
- echoLibVersionsToUse: isProdBuild ? echoLibVersionsToUse : undefined
66
+ fetchLatest: true
78
67
  });
79
68
  execSync('npm install', { cwd: tmpDevHostFolder, stdio: 'inherit' });
80
69
  execSync('npm run build', { cwd: tmpDevHostFolder, stdio: 'inherit' });
81
70
  // 3. Copy build output to final output directory
82
71
  console.log(chalk.magentaBright.bold(`\n[echo-dev-host] Copying build output back to ${chalk.yellow(finalOutputDir)}...\n`));
83
72
  fs.copySync(buildOutput, finalOutputDir);
84
- // 4. Copy package.json to final output directory so version display works
73
+ // 4. Copy updated package.json to final output directory
74
+ // This ensures printEchoLibsVersions() shows the actual runtime versions
85
75
  const tmpPackageJsonPath = path.join(tmpDevHostFolder, 'package.json');
86
76
  const finalPackageJsonPath = path.join(finalOutputDir, 'package.json');
87
77
  fs.copySync(tmpPackageJsonPath, finalPackageJsonPath);
@@ -90,9 +80,7 @@ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, fi
90
80
  fs.removeSync(tmpDevHostFolder);
91
81
  }
92
82
  console.log(chalk.green.bold('[echo-dev-host] Build and copy complete!\n'));
93
- if (!isProdBuild) {
94
- console.log(chalk.green.bold('[echo-dev-host] Now you can start your Echo app with "npm start"\n'));
95
- }
83
+ console.log(chalk.green.bold('[echo-dev-host] Now you can start your Echo app with "npm start"\n'));
96
84
  }
97
85
  /**
98
86
  * Determines the versions of Echo libraries to use for a production build of the dev host,
@@ -110,48 +98,7 @@ export async function buildAndCopyDevHost({ cliNodeModules, tmpDevHostFolder, fi
110
98
  * @returns A promise that resolves to a record mapping each Echo library name to the version that will be used for the build.
111
99
  * @internal - Exported for testing purposes only
112
100
  */
113
- export async function determineEchoLibVersionsForProdBuild({ appPkgPath, tmpDevHostFolder }) {
114
- const consumerPkg = fs.readJsonSync(appPkgPath);
115
- const consumerAppName = consumerPkg.name || 'the consumer app';
116
- console.log(chalk.magentaBright.bold(`\n[echo-dev-host] Prod build - Using latest echo lib versions from "${consumerAppName}" or echo dev host.\n`));
117
- const devHostPkgPath = path.join(tmpDevHostFolder, 'package.json');
118
- const devHostPkg = fs.readJsonSync(devHostPkgPath);
119
- const echoDeps = getEchoDeps(consumerPkg);
120
- let updated = false;
121
- const echoLibVersionsToUse = {};
122
- for (const [lib, consumerVersion] of echoDeps) {
123
- const devHostVersion = devHostPkg.dependencies?.[lib];
124
- let source = consumerAppName;
125
- let finalVersion = consumerVersion; // Default to consumer version
126
- if (devHostVersion && semver.valid(devHostVersion) && semver.valid(consumerVersion)) {
127
- // Use whichever version is higher
128
- if (semver.gt(devHostVersion, consumerVersion)) {
129
- // Dev host version is higher, keep it
130
- source = 'echo dev host';
131
- finalVersion = devHostVersion;
132
- }
133
- else if (semver.gt(consumerVersion, devHostVersion)) {
134
- // Consumer version is higher, update dev host package.json
135
- devHostPkg.dependencies[lib] = consumerVersion;
136
- updated = true;
137
- }
138
- // If versions are equal, finalVersion stays as consumerVersion
139
- }
140
- else if (!devHostVersion) {
141
- // Dev host doesn't have this library, add it from consumer
142
- devHostPkg.dependencies[lib] = consumerVersion;
143
- updated = true;
144
- }
145
- // Track the version that will be used for the build
146
- echoLibVersionsToUse[lib] = finalVersion;
147
- // Log the decision
148
- console.log(`${chalk.cyan(lib)}: ${chalk.yellow(finalVersion)} (from ${source})`);
149
- }
150
- if (updated) {
151
- fs.writeJsonSync(devHostPkgPath, devHostPkg, { spaces: 4 });
152
- }
153
- return echoLibVersionsToUse;
154
- }
101
+ // NOTE: Former production max-version resolution removed for simplicity & reproducibility.
155
102
  /**
156
103
  * Forces the dev host to use the exact echo library versions from the consumer app's package.json.
157
104
  * This is useful for developers switching between git branches with different echo lib versions.
@@ -175,16 +122,23 @@ export async function syncDevHostToConsumerVersions({ appPkgPath, tmpDevHostFold
175
122
  const echoLibVersionsToUse = {};
176
123
  for (const [lib, consumerVersion] of echoDeps) {
177
124
  const devHostVersion = devHostPkg.dependencies?.[lib];
178
- // Always use consumer version (force sync)
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.
179
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
+ }
180
135
  if (devHostVersion === consumerVersion) {
181
136
  console.log(`${chalk.cyan(lib)}: ${chalk.yellow(consumerVersion)} ${chalk.gray('(already synced)')}`);
182
137
  }
183
138
  else {
184
139
  devHostPkg.dependencies[lib] = consumerVersion;
185
140
  updated = true;
186
- const previousVersion = devHostVersion || 'not installed';
187
- const wasMessage = chalk.gray(`(was ${previousVersion})`);
141
+ const wasMessage = chalk.gray(`(was ${devHostVersion})`);
188
142
  console.log(`${chalk.cyan(lib)}: ${chalk.yellow(consumerVersion)} ${wasMessage}`);
189
143
  }
190
144
  }
@@ -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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"}