@equinor/echo-cli 5.0.0 → 6.0.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 (87) hide show
  1. package/lib/config/common/echoModuleId.d.ts +5 -0
  2. package/lib/config/common/echoModuleId.js +15 -0
  3. package/lib/config/common/echoModuleId.js.map +1 -0
  4. package/lib/config/common/initOptions.d.ts +0 -1
  5. package/lib/config/common/initOptions.js.map +1 -1
  6. package/lib/config/common/updateEnv.d.ts +6 -0
  7. package/lib/config/common/updateEnv.js +16 -0
  8. package/lib/config/common/updateEnv.js.map +1 -0
  9. package/lib/config/webpack/configBuilders/devServer.d.ts +2 -2
  10. package/lib/config/webpack/configBuilders/devServer.js +0 -1
  11. package/lib/config/webpack/configBuilders/devServer.js.map +1 -1
  12. package/lib/config/webpack/configBuilders/plugins.js +1 -9
  13. package/lib/config/webpack/configBuilders/plugins.js.map +1 -1
  14. package/lib/echo-build.d.ts +1 -3
  15. package/lib/echo-build.js +1 -6
  16. package/lib/echo-build.js.map +1 -1
  17. package/lib/echo-create.d.ts +16 -0
  18. package/lib/echo-create.js +35 -0
  19. package/lib/echo-create.js.map +1 -0
  20. package/lib/echo-dev-host/README.md +121 -121
  21. package/lib/echo-dev-host/babel.config.js +10 -10
  22. package/lib/echo-dev-host/echo-dev-host-build/d2d97a9feca22f12a8c8c7413d7867ac.jpg +0 -0
  23. package/lib/echo-dev-host/echo-dev-host-build/env-config.js +1 -0
  24. package/lib/echo-dev-host/echo-dev-host-build/index.css +60 -0
  25. package/lib/echo-dev-host/echo-dev-host-build/index.html +21 -0
  26. package/lib/echo-dev-host/echo-dev-host-build/main.echo.bundle.js +3 -0
  27. package/lib/echo-dev-host/echo-dev-host-build/main.echo.bundle.js.LICENSE.txt +97 -0
  28. package/lib/echo-dev-host/echo-dev-host-build/main.echo.bundle.js.map +1 -0
  29. package/lib/echo-dev-host/echo-dev-host-build/vendors-node_modules_babel_polyfill_lib_index_js-node_modules_react-dom_client_js-node_module-972289.echo.bundle.js +7 -0
  30. package/lib/echo-dev-host/echo-dev-host-build/vendors-node_modules_babel_polyfill_lib_index_js-node_modules_react-dom_client_js-node_module-972289.echo.bundle.js.LICENSE.txt +3241 -0
  31. package/lib/echo-dev-host/echo-dev-host-build/vendors-node_modules_babel_polyfill_lib_index_js-node_modules_react-dom_client_js-node_module-972289.echo.bundle.js.map +1 -0
  32. package/lib/echo-dev-host/jest.config.js +21 -21
  33. package/lib/echo-dev-host/package-lock.json +7638 -6833
  34. package/lib/echo-dev-host/package.json +43 -38
  35. package/lib/echo-dev-host/public/env-config.js +17 -17
  36. package/lib/echo-dev-host/public/index.html +21 -21
  37. package/lib/sync-echo-dev-versions.d.ts +6 -0
  38. package/lib/sync-echo-dev-versions.js +43 -0
  39. package/lib/sync-echo-dev-versions.js.map +1 -0
  40. package/lib/tools/buildScripts/buildAndCopyDevHost.test.d.ts +1 -0
  41. package/lib/tools/buildScripts/buildAndCopyDevHost.test.js +216 -0
  42. package/lib/tools/buildScripts/buildAndCopyDevHost.test.js.map +1 -0
  43. package/lib/tools/create/copyFile.d.ts +2 -0
  44. package/lib/tools/create/copyFile.js +16 -0
  45. package/lib/tools/create/copyFile.js.map +1 -0
  46. package/lib/tools/create/createProject.d.ts +2 -0
  47. package/lib/tools/create/createProject.js +83 -0
  48. package/lib/tools/create/createProject.js.map +1 -0
  49. package/lib/tools/create/createSetTargetDirectory.d.ts +1 -0
  50. package/lib/tools/create/createSetTargetDirectory.js +12 -0
  51. package/lib/tools/create/createSetTargetDirectory.js.map +1 -0
  52. package/lib/tools/create/getAppTemplateName.d.ts +1 -0
  53. package/lib/tools/create/getAppTemplateName.js +22 -0
  54. package/lib/tools/create/getAppTemplateName.js.map +1 -0
  55. package/lib/tools/create/gitInit.d.ts +1 -0
  56. package/lib/tools/create/gitInit.js +19 -0
  57. package/lib/tools/create/gitInit.js.map +1 -0
  58. package/lib/tools/create/promptOptions.d.ts +2 -0
  59. package/lib/tools/create/promptOptions.js +88 -0
  60. package/lib/tools/create/promptOptions.js.map +1 -0
  61. package/lib/tools/create/updatePackageConfig.d.ts +2 -0
  62. package/lib/tools/create/updatePackageConfig.js +28 -0
  63. package/lib/tools/create/updatePackageConfig.js.map +1 -0
  64. package/lib/tools/create/updateReadme.d.ts +2 -0
  65. package/lib/tools/create/updateReadme.js +23 -0
  66. package/lib/tools/create/updateReadme.js.map +1 -0
  67. package/lib/tools/releaseWorkflow/align-echo-dev-host-deps.test.d.ts +1 -0
  68. package/lib/tools/releaseWorkflow/align-echo-dev-host-deps.test.js +67 -0
  69. package/lib/tools/releaseWorkflow/align-echo-dev-host-deps.test.js.map +1 -0
  70. package/lib/tools/releaseWorkflow/bump-echo-cli-version.js +1 -1
  71. package/lib/tools/releaseWorkflow/bump-echo-cli-version.js.map +1 -1
  72. package/lib/tools/releaseWorkflow/bump-echo-cli-version.test.d.ts +1 -0
  73. package/lib/tools/releaseWorkflow/bump-echo-cli-version.test.js +115 -0
  74. package/lib/tools/releaseWorkflow/bump-echo-cli-version.test.js.map +1 -0
  75. package/lib/tools/releaseWorkflow/bump-version.d.ts +27 -0
  76. package/lib/tools/releaseWorkflow/bump-version.js +81 -0
  77. package/lib/tools/releaseWorkflow/bump-version.js.map +1 -0
  78. package/lib/tools/releaseWorkflow/verify-echo-libs-published.test.d.ts +1 -0
  79. package/lib/tools/releaseWorkflow/verify-echo-libs-published.test.js +32 -0
  80. package/lib/tools/releaseWorkflow/verify-echo-libs-published.test.js.map +1 -0
  81. package/lib/types/createTypes.d.ts +23 -0
  82. package/lib/types/createTypes.js +2 -0
  83. package/lib/types/createTypes.js.map +1 -0
  84. package/lib/utils/merge.test.d.ts +1 -0
  85. package/lib/utils/merge.test.js +29 -0
  86. package/lib/utils/merge.test.js.map +1 -0
  87. package/package.json +42 -49
@@ -21,43 +21,43 @@
21
21
  "author": "",
22
22
  "license": "MIT",
23
23
  "dependencies": {
24
- "@equinor/echo-base": "5.0.0",
25
- "@equinor/echo-components": "5.0.0",
26
- "@equinor/echo-core": "5.0.0",
27
- "@equinor/echo-framework": "5.0.0",
28
- "@equinor/echo-search": "5.0.0",
29
- "@equinor/echo-utils": "5.0.0",
24
+ "@equinor/echo-base": "6.3.1",
25
+ "@equinor/echo-components": "6.3.1",
26
+ "@equinor/echo-core": "6.3.1",
27
+ "@equinor/echo-framework": "6.3.1",
28
+ "@equinor/echo-search": "6.3.1",
29
+ "@equinor/echo-utils": "6.3.1",
30
30
  "@equinor/eds-core-react": "0.49.0",
31
31
  "@equinor/eds-icons": "0.22.0",
32
32
  "@equinor/eds-tokens": "2.1.0",
33
33
  "@equinor/eds-utils": "0.9.0",
34
34
  "@microsoft/signalr": "9.0.6",
35
35
  "@svgr/webpack": "8.1.0",
36
- "@tanstack/react-query": "5.97.0",
36
+ "@tanstack/react-query": "5.101.4",
37
37
  "classnames": "2.5.1",
38
- "fs-extra": "11.3.4",
38
+ "fs-extra": "11.4.0",
39
39
  "history": "5.3.0",
40
- "immer": "11.1.4",
40
+ "immer": "11.1.16",
41
41
  "lodash": "4.18.1",
42
42
  "react": "19.2.4",
43
43
  "react-dom": "19.2.4",
44
- "react-router-dom": "6.30.3",
44
+ "react-router-dom": "6.30.4",
45
45
  "react-sortablejs": "6.1.4",
46
46
  "sortablejs": "1.15.7",
47
- "styled-components": "6.3.12",
47
+ "styled-components": "6.5.1",
48
48
  "zustand": "4.5.7"
49
49
  },
50
50
  "devDependencies": {
51
- "@babel/core": "7.29.0",
52
- "@babel/plugin-transform-runtime": "7.29.0",
51
+ "@babel/core": "7.29.7",
52
+ "@babel/plugin-transform-runtime": "7.29.7",
53
53
  "@babel/polyfill": "7.12.1",
54
- "@babel/preset-env": "7.29.2",
55
- "@babel/preset-react": "7.28.5",
56
- "@babel/preset-typescript": "7.28.5",
54
+ "@babel/preset-env": "7.29.7",
55
+ "@babel/preset-react": "7.29.7",
56
+ "@babel/preset-typescript": "7.29.7",
57
57
  "@equinor/echo-update": "2.0.0",
58
58
  "@types/jest": "30.0.0",
59
- "@types/node": "25.3.5",
60
- "@types/react": "19.2.14",
59
+ "@types/node": "26.2.0",
60
+ "@types/react": "19.2.17",
61
61
  "@types/react-dom": "19.2.3",
62
62
  "@types/webpack-env": "1.18.8",
63
63
  "babel-loader": "10.1.1",
@@ -65,31 +65,36 @@
65
65
  "css-loader": "7.1.4",
66
66
  "dotenv-webpack": "9.0.0",
67
67
  "file-loader": "6.2.0",
68
- "html-webpack-plugin": "5.6.6",
69
- "jest": "30.3.0",
68
+ "html-webpack-plugin": "5.6.8",
69
+ "jest": "30.4.2",
70
70
  "style-loader": "4.0.0",
71
- "ts-jest": "29.4.9",
72
- "ts-loader": "9.5.7",
71
+ "ts-jest": "29.4.12",
72
+ "ts-loader": "9.6.2",
73
73
  "typescript": "5.9.3",
74
- "webpack": "5.106.0",
74
+ "webpack": "5.109.2",
75
75
  "webpack-cli": "6.0.1",
76
- "webpack-dev-server": "5.2.3",
76
+ "webpack-dev-server": "5.2.6",
77
77
  "webpackbar": "7.0.0"
78
78
  },
79
79
  "overrides": {
80
- "axios@1.14": "1.15.0",
81
- "minimatch@3": "3.1.4",
82
- "svgo@3": "3.3.3",
83
- "picomatch@2": "2.3.2",
84
- "path-to-regexp@0": "0.1.13",
85
- "brace-expansion@1": "1.1.13",
86
- "js-yaml@4": "4.1.1",
87
- "qs@6": "6.14.2",
88
- "follow-redirects@1": "1.16.0",
89
- "ajv@8": "8.18.0",
90
- "ajv@6": "6.14.0",
91
- "@equinor/echo-utils": {
92
- "uuid": "14.0.0"
93
- }
80
+ "axios@1.14": "1.18.0",
81
+ "axios@1.15": "1.18.0",
82
+ "brace-expansion@1": "1.1.18",
83
+ "brace-expansion@2": "2.1.4",
84
+ "brace-expansion@5": "5.0.9",
85
+ "postcss@8.5": "8.5.23",
86
+ "fast-uri@3": "3.1.5",
87
+ "ws@8.18": "8.21.0",
88
+ "qs@6.14": "6.15.2",
89
+ "@nevware21/ts-utils@0.13": "0.14.0",
90
+ "form-data@4.0": "4.0.6",
91
+ "uuid@8": "11.1.1",
92
+ "js-yaml@3": "3.15.1",
93
+ "js-yaml@4": "4.3.1",
94
+ "http-proxy-middleware@2": "2.0.10",
95
+ "ua-parser-js@2": "2.0.10",
96
+ "launch-editor@2": "2.14.1",
97
+ "svgo@3": "3.3.4",
98
+ "websocket-driver@0.7": "0.7.5"
94
99
  }
95
100
  }
@@ -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 data-color-scheme="light">
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 data-color-scheme="light">
19
+ <div id="root"></div>
20
+ </body>
21
+ </html>
@@ -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"}
@@ -0,0 +1,216 @@
1
+ // Mock all dependencies BEFORE any imports
2
+ jest.mock('fs-extra');
3
+ jest.mock('../../utils/printEchoLibsVersions.js', () => ({
4
+ printEchoLibsVersions: jest.fn()
5
+ }));
6
+ jest.mock('chalk', () => {
7
+ const mockFn = jest.fn((str) => str);
8
+ const chalkMock = {
9
+ cyan: mockFn,
10
+ yellow: mockFn,
11
+ gray: mockFn,
12
+ green: mockFn,
13
+ magentaBright: { bold: mockFn },
14
+ blueBright: { bold: mockFn },
15
+ yellowBright: { bold: mockFn },
16
+ greenBright: { bold: mockFn }
17
+ };
18
+ // Also add nested bold methods for green
19
+ chalkMock.green.bold = mockFn;
20
+ // Return both default export and named export pattern
21
+ chalkMock.default = chalkMock;
22
+ return chalkMock;
23
+ });
24
+ jest.mock('figlet', () => ({
25
+ default: {
26
+ textSync: jest.fn(() => 'ECHO DEV HOST')
27
+ }
28
+ }));
29
+ jest.mock('child_process', () => ({
30
+ execSync: jest.fn()
31
+ }));
32
+ import fs from 'fs-extra';
33
+ import path from 'node:path';
34
+ import { syncDevHostToConsumerVersions } from './buildAndCopyDevHost';
35
+ const mockedFs = fs;
36
+ // Mock console.log to suppress output during tests
37
+ const originalConsoleLog = console.log;
38
+ beforeAll(() => {
39
+ console.log = jest.fn();
40
+ });
41
+ afterAll(() => {
42
+ console.log = originalConsoleLog;
43
+ });
44
+ describe('syncDevHostToConsumerVersions', () => {
45
+ const tmpDevHostFolder = '/tmp/dev-host';
46
+ const devHostPkgPath = path.join(tmpDevHostFolder, 'package.json');
47
+ beforeEach(() => {
48
+ jest.clearAllMocks();
49
+ });
50
+ describe('Force sync behavior', () => {
51
+ it('should downgrade dev host versions to match lower consumer versions', async () => {
52
+ // Arrange
53
+ const consumerPkg = {
54
+ name: 'my-echo-app',
55
+ dependencies: {
56
+ '@equinor/echo-core': '2.0.1',
57
+ '@equinor/echo-framework': '2.0.1'
58
+ }
59
+ };
60
+ const devHostPkg = {
61
+ name: 'echo-dev-host',
62
+ dependencies: {
63
+ '@equinor/echo-core': '2.3.0', // Higher than consumer
64
+ '@equinor/echo-framework': '2.3.0' // Higher than consumer
65
+ }
66
+ };
67
+ mockedFs.readJsonSync.mockImplementation((filePath) => {
68
+ if (filePath.includes('my-echo-app'))
69
+ return consumerPkg;
70
+ if (filePath === devHostPkgPath)
71
+ return devHostPkg;
72
+ throw new Error(`Unexpected file path: ${filePath}`);
73
+ });
74
+ // Act
75
+ const result = await syncDevHostToConsumerVersions({
76
+ appPkgPath: '/path/to/my-echo-app/package.json',
77
+ tmpDevHostFolder
78
+ });
79
+ // Assert - Should force downgrade to consumer versions
80
+ expect(result).toEqual({
81
+ '@equinor/echo-core': '2.0.1',
82
+ '@equinor/echo-framework': '2.0.1'
83
+ });
84
+ // Verify dev host was downgraded
85
+ expect(mockedFs.writeJsonSync).toHaveBeenCalledWith(devHostPkgPath, expect.objectContaining({
86
+ dependencies: {
87
+ '@equinor/echo-core': '2.0.1',
88
+ '@equinor/echo-framework': '2.0.1'
89
+ }
90
+ }), { spaces: 4 });
91
+ });
92
+ it('should upgrade dev host versions to match higher consumer versions', async () => {
93
+ // Arrange
94
+ const consumerPkg = {
95
+ name: 'my-echo-app',
96
+ dependencies: {
97
+ '@equinor/echo-core': '2.5.0',
98
+ '@equinor/echo-framework': '2.5.0'
99
+ }
100
+ };
101
+ const devHostPkg = {
102
+ name: 'echo-dev-host',
103
+ dependencies: {
104
+ '@equinor/echo-core': '2.0.1', // Lower than consumer
105
+ '@equinor/echo-framework': '2.0.1' // Lower than consumer
106
+ }
107
+ };
108
+ mockedFs.readJsonSync.mockImplementation((filePath) => {
109
+ if (filePath.includes('my-echo-app'))
110
+ return consumerPkg;
111
+ if (filePath === devHostPkgPath)
112
+ return devHostPkg;
113
+ throw new Error(`Unexpected file path: ${filePath}`);
114
+ });
115
+ // Act
116
+ const result = await syncDevHostToConsumerVersions({
117
+ appPkgPath: '/path/to/my-echo-app/package.json',
118
+ tmpDevHostFolder
119
+ });
120
+ // Assert - Should upgrade to consumer versions
121
+ expect(result).toEqual({
122
+ '@equinor/echo-core': '2.5.0',
123
+ '@equinor/echo-framework': '2.5.0'
124
+ });
125
+ expect(mockedFs.writeJsonSync).toHaveBeenCalledWith(devHostPkgPath, expect.objectContaining({
126
+ dependencies: {
127
+ '@equinor/echo-core': '2.5.0',
128
+ '@equinor/echo-framework': '2.5.0'
129
+ }
130
+ }), { spaces: 4 });
131
+ });
132
+ it('should not update package.json if versions already match', async () => {
133
+ // Arrange
134
+ const consumerPkg = {
135
+ name: 'my-echo-app',
136
+ dependencies: {
137
+ '@equinor/echo-core': '2.2.1',
138
+ '@equinor/echo-framework': '2.2.1'
139
+ }
140
+ };
141
+ const devHostPkg = {
142
+ name: 'echo-dev-host',
143
+ dependencies: {
144
+ '@equinor/echo-core': '2.2.1', // Same as consumer
145
+ '@equinor/echo-framework': '2.2.1' // Same as consumer
146
+ }
147
+ };
148
+ mockedFs.readJsonSync.mockImplementation((filePath) => {
149
+ if (filePath.includes('my-echo-app'))
150
+ return consumerPkg;
151
+ if (filePath === devHostPkgPath)
152
+ return devHostPkg;
153
+ throw new Error(`Unexpected file path: ${filePath}`);
154
+ });
155
+ // Act
156
+ const result = await syncDevHostToConsumerVersions({
157
+ appPkgPath: '/path/to/my-echo-app/package.json',
158
+ tmpDevHostFolder
159
+ });
160
+ // Assert
161
+ expect(result).toEqual({
162
+ '@equinor/echo-core': '2.2.1',
163
+ '@equinor/echo-framework': '2.2.1'
164
+ });
165
+ // Should NOT write to package.json if already synced
166
+ expect(mockedFs.writeJsonSync).not.toHaveBeenCalled();
167
+ });
168
+ it('should handle mixed versions (some up, some down, some same)', async () => {
169
+ // Arrange
170
+ const consumerPkg = {
171
+ name: 'my-echo-app',
172
+ dependencies: {
173
+ '@equinor/echo-core': '2.0.1', // Lower than dev host
174
+ '@equinor/echo-framework': '2.5.0', // Higher than dev host
175
+ '@equinor/echo-search': '2.2.1' // Same as dev host
176
+ }
177
+ };
178
+ const devHostPkg = {
179
+ name: 'echo-dev-host',
180
+ dependencies: {
181
+ '@equinor/echo-core': '2.3.0',
182
+ '@equinor/echo-framework': '2.0.1',
183
+ '@equinor/echo-search': '2.2.1'
184
+ }
185
+ };
186
+ mockedFs.readJsonSync.mockImplementation((filePath) => {
187
+ if (filePath.includes('my-echo-app'))
188
+ return consumerPkg;
189
+ if (filePath === devHostPkgPath)
190
+ return devHostPkg;
191
+ throw new Error(`Unexpected file path: ${filePath}`);
192
+ });
193
+ // Act
194
+ const result = await syncDevHostToConsumerVersions({
195
+ appPkgPath: '/path/to/my-echo-app/package.json',
196
+ tmpDevHostFolder
197
+ });
198
+ // Assert - All should match consumer, regardless of direction
199
+ expect(result).toEqual({
200
+ '@equinor/echo-core': '2.0.1',
201
+ '@equinor/echo-framework': '2.5.0',
202
+ '@equinor/echo-search': '2.2.1'
203
+ });
204
+ // Only echo-core and echo-framework should be updated (echo-search already synced)
205
+ expect(mockedFs.writeJsonSync).toHaveBeenCalledWith(devHostPkgPath, expect.objectContaining({
206
+ dependencies: {
207
+ '@equinor/echo-core': '2.0.1',
208
+ '@equinor/echo-framework': '2.5.0',
209
+ '@equinor/echo-search': '2.2.1'
210
+ }
211
+ }), { spaces: 4 });
212
+ });
213
+ // Removed: dev host should not add missing libraries; it ships a curated set.
214
+ });
215
+ });
216
+ //# sourceMappingURL=buildAndCopyDevHost.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildAndCopyDevHost.test.js","sourceRoot":"","sources":["../../../src/tools/buildScripts/buildAndCopyDevHost.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { TemplateDir } from '../../types/createTypes.js';
2
+ export declare function copyTemplateFiles(options: TemplateDir): Promise<boolean>;
@@ -0,0 +1,16 @@
1
+ import * as fs from 'fs';
2
+ import ncp from 'ncp';
3
+ import path from 'path';
4
+ import { promisify } from 'util';
5
+ const copy = promisify(ncp);
6
+ export async function copyTemplateFiles(options) {
7
+ const success = await copy(options.templateDirectory, options.targetDirectory, {
8
+ clobber: false
9
+ });
10
+ const indexTsPath = path.join(options.targetDirectory || '', 'src', 'index.ts');
11
+ const indexJsContent = fs.readFileSync(indexTsPath).toString();
12
+ const indexJsContentReplaced = indexJsContent.replace('{appKey}', options.key || 'app-key');
13
+ fs.writeFileSync(indexTsPath, indexJsContentReplaced);
14
+ return success;
15
+ }
16
+ //# sourceMappingURL=copyFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copyFile.js","sourceRoot":"","sources":["../../../src/tools/create/copyFile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAGjC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAoB;IACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,eAAe,EAAE;QAC3E,OAAO,EAAE,KAAK;KACjB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAChF,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC;IAE/D,MAAM,sBAAsB,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;IAE5F,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;IAEtD,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { TemplateDir } from '../../types/createTypes.js';
2
+ export declare function createProject(options: TemplateDir): Promise<boolean>;
@@ -0,0 +1,83 @@
1
+ import chalk from 'chalk';
2
+ import fs from 'fs';
3
+ import { Listr } from 'listr2';
4
+ import path from 'path';
5
+ import { fileURLToPath } from 'url';
6
+ import { promisify } from 'util';
7
+ import { createEchoModuleConfig } from '../../config/common/echoModuleConfig.js';
8
+ import { createEchoModuleId } from '../../config/common/echoModuleId.js';
9
+ import { copyTemplateFiles } from './copyFile.js';
10
+ import { createAndSetTargetDir } from './createSetTargetDirectory.js';
11
+ import { getAppTemplateName } from './getAppTemplateName.js';
12
+ import { initGit } from './gitInit.js';
13
+ import { updatePackageConfig } from './updatePackageConfig.js';
14
+ import { updateReadme } from './updateReadme.js';
15
+ const access = promisify(fs.access);
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ export async function createProject(options) {
18
+ options = {
19
+ ...options,
20
+ targetDirectory: options.targetDirectory || (await createAndSetTargetDir(options.key || ''))
21
+ };
22
+ try {
23
+ options.templateDirectory = await getTemplateDir(options);
24
+ }
25
+ catch (error) {
26
+ throw error;
27
+ }
28
+ const tasks = new Listr([
29
+ {
30
+ task: () => copyTemplateFiles(options),
31
+ title: 'Copy project files'
32
+ },
33
+ {
34
+ enabled: () => (options.git ? true : false),
35
+ task: () => initGit(options.targetDirectory || ''),
36
+ title: 'Initialize git'
37
+ },
38
+ {
39
+ task: async () => {
40
+ await updatePackageConfig(options);
41
+ },
42
+ title: 'Update package config'
43
+ },
44
+ {
45
+ task: async () => {
46
+ await createEchoModuleConfig(options);
47
+ },
48
+ title: 'Create echo config'
49
+ },
50
+ {
51
+ task: async () => {
52
+ await createEchoModuleId(options);
53
+ },
54
+ title: 'Create echo Id File'
55
+ },
56
+ {
57
+ task: () => updateReadme(options),
58
+ title: 'Update Readme'
59
+ }
60
+ ]);
61
+ console.log(`Creating ${chalk.cyan(getAppTemplateName(options.templateName))} named ${chalk.green.bold(options.name)}`, chalk.green.bold('START'));
62
+ await tasks.run();
63
+ console.log('%s App ready', chalk.green.bold('DONE'));
64
+ return true;
65
+ }
66
+ async function getTemplateDir(options) {
67
+ const templateDir = path.resolve(__filename, `../../../../templates/${getAppTemplateName(options.templateName)}`);
68
+ console.log(templateDir);
69
+ try {
70
+ await access(templateDir, fs.constants.R_OK);
71
+ }
72
+ catch (err) {
73
+ if (err instanceof Error) {
74
+ console.error('%s Invalid template name', chalk.red.bold('ERROR'));
75
+ process.exit(1);
76
+ }
77
+ else {
78
+ throw err;
79
+ }
80
+ }
81
+ return templateDir;
82
+ }
83
+ //# sourceMappingURL=createProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createProject.js","sourceRoot":"","sources":["../../../src/tools/create/createProject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAoB;IACpD,OAAO,GAAG;QACN,GAAG,OAAO;QACV,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,CAAC,MAAM,qBAAqB,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;KAC/F,CAAC;IAEF,IAAI,CAAC;QACD,OAAO,CAAC,iBAAiB,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,KAAK,CAAC;IAChB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACpB;YACI,IAAI,EAAE,GAAqB,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC;YACxD,KAAK,EAAE,oBAAoB;SAC9B;QACD;YACI,OAAO,EAAE,GAAY,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YACpD,IAAI,EAAE,GAAqB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC;YACpE,KAAK,EAAE,gBAAgB;SAC1B;QACD;YACI,IAAI,EAAE,KAAK,IAAmB,EAAE;gBAC5B,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC;YACD,KAAK,EAAE,uBAAuB;SACjC;QACD;YACI,IAAI,EAAE,KAAK,IAAmB,EAAE;gBAC5B,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;YACD,KAAK,EAAE,oBAAoB;SAC9B;QACD;YACI,IAAI,EAAE,KAAK,IAAmB,EAAE;gBAC5B,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;YACD,KAAK,EAAE,qBAAqB;SAC/B;QACD;YACI,IAAI,EAAE,GAAkB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;YAChD,KAAK,EAAE,eAAe;SACzB;KACJ,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CACP,YAAY,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,UAAU,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAC1G,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAC5B,CAAC;IAEF,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAAoB;IAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,yBAAyB,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAElH,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function createAndSetTargetDir(key: string): Promise<string>;
@@ -0,0 +1,12 @@
1
+ import chalk from 'chalk';
2
+ import * as fs from 'fs';
3
+ export async function createAndSetTargetDir(key) {
4
+ const newDir = './' + key;
5
+ if (!fs.existsSync(newDir)) {
6
+ fs.mkdirSync(newDir);
7
+ return process.cwd() + '/' + key;
8
+ }
9
+ console.error('%s Target directory already exists, select a different app key', chalk.red.bold('ERROR'));
10
+ process.exit(1);
11
+ }
12
+ //# sourceMappingURL=createSetTargetDirectory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSetTargetDirectory.js","sourceRoot":"","sources":["../../../src/tools/create/createSetTargetDirectory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,GAAW;IACnD,MAAM,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC;IAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,gEAAgE,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACzG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function getAppTemplateName(templateName: string): string;