@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.
- package/README.md +384 -384
- package/lib/config/common/buildAndCopyEchoHostForProd.js +1 -2
- package/lib/config/common/buildAndCopyEchoHostForProd.js.map +1 -1
- 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/lib/tools/buildScripts/buildAndCopyDevHost.d.ts +1 -7
- package/lib/tools/buildScripts/buildAndCopyDevHost.js +24 -70
- package/lib/tools/buildScripts/buildAndCopyDevHost.js.map +1 -1
- package/lib/update-echo-libs.js +0 -1
- package/lib/update-echo-libs.js.map +1 -1
- 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,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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
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:
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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":"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,
|
|
1
|
+
{"version":3,"file":"buildAndCopyDevHost.js","sourceRoot":"","sources":["../../../src/tools/buildScripts/buildAndCopyDevHost.ts"],"names":[],"mappings":"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"}
|