@equinor/echo-cli 1.0.0-beta-26 → 1.0.0-beta-27

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.
@@ -0,0 +1,16 @@
1
+ import { EchoWebpackOptions } from './initOptions.js';
2
+ /**
3
+ * Builds and copies the echo-dev-host application for production use.
4
+ *
5
+ * This function resolves the output directory based on the provided options,
6
+ * removes any leading slashes from the content base path, and then invokes
7
+ * the development host build and copy process with production settings.
8
+ *
9
+ * @param options - The configuration options for the Echo Webpack build process.
10
+ * - `echoModuleConfig.server.contentBase`: The build directory for the given echo module / app. Usually `dist`.
11
+ * Usually defined in echoModule.config.json for the given ehco module / app.
12
+ * - `currentDir`: The current working directory.
13
+ *
14
+ * @returns A promise that resolves when the build and copy process is complete.
15
+ */
16
+ export declare function buildAndCopyEchoHostForProd(options: EchoWebpackOptions): Promise<void>;
@@ -0,0 +1,27 @@
1
+ import path from 'path';
2
+ import { buildAndCopyDevHost } from '../../tools/buildScripts/buildAndCopyDevHost.js';
3
+ /**
4
+ * Builds and copies the echo-dev-host application for production use.
5
+ *
6
+ * This function resolves the output directory based on the provided options,
7
+ * removes any leading slashes from the content base path, and then invokes
8
+ * the development host build and copy process with production settings.
9
+ *
10
+ * @param options - The configuration options for the Echo Webpack build process.
11
+ * - `echoModuleConfig.server.contentBase`: The build directory for the given echo module / app. Usually `dist`.
12
+ * Usually defined in echoModule.config.json for the given ehco module / app.
13
+ * - `currentDir`: The current working directory.
14
+ *
15
+ * @returns A promise that resolves when the build and copy process is complete.
16
+ */
17
+ export async function buildAndCopyEchoHostForProd(options) {
18
+ // Remove leading slash if present
19
+ const contentBase = options.echoModuleConfig.server.contentBase.replace(/^[/\\]+/, '');
20
+ const finalOutputDir = path.resolve(options.currentDir, contentBase);
21
+ await buildAndCopyDevHost({
22
+ consumerRoot: options.currentDir,
23
+ finalOutputDir,
24
+ installAndBuild: true
25
+ });
26
+ }
27
+ //# sourceMappingURL=buildAndCopyEchoHostForProd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildAndCopyEchoHostForProd.js","sourceRoot":"","sources":["../../../src/config/common/buildAndCopyEchoHostForProd.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAGtF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,OAA2B;IACzE,kCAAkC;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACvF,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAErE,MAAM,mBAAmB,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC,UAAU;QAChC,cAAc;QACd,eAAe,EAAE,IAAI;KACxB,CAAC,CAAC;AACP,CAAC"}
@@ -3,6 +3,7 @@ import { EchoModuleConfig } from './echoModuleConfig.js';
3
3
  import { Https } from './https.js';
4
4
  export interface EchoWebpackOptions extends EchoBundleOptions {
5
5
  config: Configuration;
6
+ topMostNodeModulesPathWithEchoCli: string;
6
7
  }
7
8
  export interface EchoBundleOptions {
8
9
  watch?: boolean;
@@ -1,44 +1,33 @@
1
- import fs from 'fs';
2
1
  import path from 'path';
3
2
  import { ECHO_HOST_BUILD_OUTPUT_FOLDER, ECHO_MODULE_CONFIG_PATH, REQUIRED_REF } from '../../const/common.js';
4
- import getFilePath, { getFile } from '../../utils/getFile.js';
3
+ import { findTopNodeModulesWithEchoCli } from '../../utils/findTopLevelNodeModulesWithCli.js';
4
+ import getFilePath, { readJSONFile } from '../../utils/getFile.js';
5
5
  import getPackageJson from './getPackageJson.js';
6
6
  export async function defineInitOptions(echoBundleOptions, isDevelopment) {
7
+ // issue when using this in echo 3d: this points to echo-3d-web subfolder, while echo-cli is in the root folder
8
+ // should I use path.join(topNodeModules, ECHO_HOST_BUILD_OUTPUT_FOLDER) for echo-cli path, maybe in a new key on EchoWebpackOptions?
7
9
  const currentDir = process.cwd();
8
10
  console.warn('Process running in: ', currentDir);
9
- const echoModuleConfig = await getFile(currentDir, ECHO_MODULE_CONFIG_PATH);
11
+ const echoModuleConfig = await readJSONFile(currentDir, ECHO_MODULE_CONFIG_PATH);
10
12
  const pkj = await getPackageJson(currentDir);
11
- const topNodeModules = findTopNodeModulesWithEchoCli(currentDir);
12
- if (!topNodeModules) {
13
+ const topNodeModulesPath = findTopNodeModulesWithEchoCli(currentDir);
14
+ if (!topNodeModulesPath) {
13
15
  throw new Error('Could not find top-level node_modules containing @equinor/echo-cli');
14
16
  }
15
17
  return {
16
18
  ...echoBundleOptions,
17
19
  isProduction: isDevelopment ? false : true,
18
20
  currentDir,
21
+ topMostNodeModulesPathWithEchoCli: topNodeModulesPath,
19
22
  source: pkj.source,
20
23
  main: pkj.main,
21
24
  peerDependencies: pkj.peerDependencies,
22
25
  dependencies: pkj.dependencies,
23
26
  devDependencies: pkj.devDependencies,
24
- wwwRoot: path.join(topNodeModules, ECHO_HOST_BUILD_OUTPUT_FOLDER),
27
+ wwwRoot: path.join(topNodeModulesPath, '@equinor', 'echo-cli', ECHO_HOST_BUILD_OUTPUT_FOLDER),
25
28
  requireRef: REQUIRED_REF,
26
29
  envPath: await getFilePath(currentDir, '/.env'),
27
30
  echoModuleConfig
28
31
  };
29
32
  }
30
- function findTopNodeModulesWithEchoCli(startDir) {
31
- let dir = path.resolve(startDir);
32
- let lastDir = null;
33
- let topmost = undefined;
34
- while (dir !== lastDir) {
35
- const candidate = path.join(dir, 'node_modules', '@equinor', 'echo-cli');
36
- if (fs.existsSync(candidate)) {
37
- topmost = candidate;
38
- }
39
- lastDir = dir;
40
- dir = path.dirname(dir);
41
- }
42
- return topmost;
43
- }
44
33
  //# sourceMappingURL=initOptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"initOptions.js","sourceRoot":"","sources":["../../../src/config/common/initOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC7G,OAAO,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,cAAc,MAAM,qBAAqB,CAAC;AA0BjD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,iBAA6C,EAC7C,aAAuB;IAEvB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,gBAAgB,GAAqB,MAAM,OAAO,CAAmB,UAAU,EAAE,uBAAuB,CAAC,CAAC;IAChH,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAE7C,MAAM,cAAc,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAC;IACjE,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO;QACH,GAAG,iBAAiB;QACpB,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC1C,UAAU;QACV,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,6BAA6B,CAAC;QACjE,UAAU,EAAE,YAAY;QACxB,OAAO,EAAE,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC;QAC/C,gBAAgB;KACnB,CAAC;AACN,CAAC;AAED,SAAS,6BAA6B,CAAC,QAAgB;IACnD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,OAAO,GAAuB,SAAS,CAAC;IAC5C,OAAO,GAAG,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACzE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,SAAS,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,GAAG,CAAC;QACd,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"initOptions.js","sourceRoot":"","sources":["../../../src/config/common/initOptions.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC7G,OAAO,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AAC9F,OAAO,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,cAAc,MAAM,qBAAqB,CAAC;AA2BjD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,iBAA6C,EAC7C,aAAuB;IAEvB,+GAA+G;IAC/G,qIAAqI;IACrI,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC;IACjD,MAAM,gBAAgB,GAAqB,MAAM,YAAY,CACzD,UAAU,EACV,uBAAuB,CAC1B,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAE7C,MAAM,kBAAkB,GAAG,6BAA6B,CAAC,UAAU,CAAC,CAAC;IACrE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO;QACH,GAAG,iBAAiB;QACpB,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QAC1C,UAAU;QACV,iCAAiC,EAAE,kBAAkB;QACrD,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,6BAA6B,CAAC;QAC7F,UAAU,EAAE,YAAY;QACxB,OAAO,EAAE,MAAM,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC;QAC/C,gBAAgB;KACnB,CAAC;AACN,CAAC"}
@@ -2,7 +2,7 @@
2
2
  import { Listr } from 'listr2';
3
3
  import webpack from 'webpack';
4
4
  import { merge } from 'webpack-merge';
5
- import { buildAndCopyEchoHostForProd } from '../../config/common/copyFile.js';
5
+ import { buildAndCopyEchoHostForProd } from '../../config/common/buildAndCopyEchoHostForProd.js';
6
6
  import { createEchoModuleManifest } from '../../config/common/echoManifest.js';
7
7
  import { defineInitOptions } from '../../config/common/initOptions.js';
8
8
  import { defineWebpackConfig } from '../../config/webpack/config.js';
@@ -1 +1 @@
1
- {"version":3,"file":"webpackBuilds.js","sourceRoot":"","sources":["../../../src/tools/buildScripts/webpackBuilds.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webpackBuilds.js","sourceRoot":"","sources":["../../../src/tools/buildScripts/webpackBuilds.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Searches upwards from the specified starting directory to find the topmost
3
+ * `@equinor/echo-cli` package inside a `node_modules` folder.
4
+ *
5
+ * Needed to support both monorepo and non-monorepo setups where the `echo-cli` is used.
6
+ * In a monorepo setup (like in Echo 3D), the `echo-cli` is located in the top-level `node_modules`.
7
+ *
8
+ * @param startDir - The directory from which to start searching.
9
+ * @returns The absolute path to the topmost `node_modules` directory found,
10
+ * or `undefined` if not found.
11
+ */
12
+ export declare function findTopNodeModulesWithEchoCli(startDir: string): string | undefined;
@@ -0,0 +1,28 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ /**
4
+ * Searches upwards from the specified starting directory to find the topmost
5
+ * `@equinor/echo-cli` package inside a `node_modules` folder.
6
+ *
7
+ * Needed to support both monorepo and non-monorepo setups where the `echo-cli` is used.
8
+ * In a monorepo setup (like in Echo 3D), the `echo-cli` is located in the top-level `node_modules`.
9
+ *
10
+ * @param startDir - The directory from which to start searching.
11
+ * @returns The absolute path to the topmost `node_modules` directory found,
12
+ * or `undefined` if not found.
13
+ */
14
+ export function findTopNodeModulesWithEchoCli(startDir) {
15
+ let dir = path.resolve(startDir);
16
+ let lastDir = null;
17
+ let topmost = undefined;
18
+ while (dir !== lastDir) {
19
+ const candidate = path.join(dir, 'node_modules', '@equinor', 'echo-cli');
20
+ if (fs.existsSync(candidate)) {
21
+ topmost = path.join(dir, 'node_modules');
22
+ }
23
+ lastDir = dir;
24
+ dir = path.dirname(dir);
25
+ }
26
+ return topmost;
27
+ }
28
+ //# sourceMappingURL=findTopLevelNodeModulesWithCli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findTopLevelNodeModulesWithCli.js","sourceRoot":"","sources":["../../src/utils/findTopLevelNodeModulesWithCli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;;;;;;;;;GAUG;AACH,MAAM,UAAU,6BAA6B,CAAC,QAAgB;IAC1D,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,OAAO,GAAuB,SAAS,CAAC;IAC5C,OAAO,GAAG,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACzE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,GAAG,GAAG,CAAC;QACd,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -1,4 +1,34 @@
1
1
  import { Configuration } from 'webpack';
2
+ /**
3
+ * Asynchronously checks if a file exists and is readable in the specified directory.
4
+ *
5
+ * @param currentDir - The directory in which to look for the file.
6
+ * @param fileName - The name of the file to check for.
7
+ * @returns A promise that resolves to the full path of the file if it is accessible.
8
+ * @throws Exits the process with code 1 and logs an error if the file is not accessible.
9
+ */
2
10
  export default function getFilePath(currentDir: string, fileName: string): Promise<string>;
3
- export declare function getFile<T>(currentDir: string, filePath: string): Promise<T>;
11
+ /**
12
+ * Reads and parses a JSON file from the specified path, returning its contents as a typed object.
13
+ *
14
+ * @template T - The expected type of the parsed JSON object.
15
+ * @param currentDir - The current working directory to resolve the file path from.
16
+ * @param filePath - The relative or absolute path to the JSON file.
17
+ * @returns A promise that resolves to the parsed JSON object of type T.
18
+ * @throws Will log an error and return undefined if the file cannot be read or parsed.
19
+ */
20
+ export declare function readJSONFile<T>(currentDir: string, filePath: string): Promise<T>;
21
+ /**
22
+ * Asynchronously loads a Webpack configuration file from a specified path.
23
+ *
24
+ * This function resolves the absolute file path using `getFilePath`, converts it to a file URL,
25
+ * and dynamically imports the configuration module. It supports both ESM and CommonJS module formats,
26
+ * returning the configuration object accordingly.
27
+ *
28
+ * @param currentDir - The current working directory to resolve relative paths.
29
+ * @param filePath - The relative or absolute path to the Webpack configuration file.
30
+ * @returns A promise that resolves to the loaded Webpack `Configuration` object.
31
+ *
32
+ * @throws Will throw an error if the file cannot be found or imported.
33
+ */
4
34
  export declare function getWebpackConfigFile(currentDir: string, filePath: string): Promise<Configuration>;
@@ -3,6 +3,14 @@ import * as fs from 'fs';
3
3
  import path from 'path';
4
4
  import { promisify } from 'util';
5
5
  const access = promisify(fs.access);
6
+ /**
7
+ * Asynchronously checks if a file exists and is readable in the specified directory.
8
+ *
9
+ * @param currentDir - The directory in which to look for the file.
10
+ * @param fileName - The name of the file to check for.
11
+ * @returns A promise that resolves to the full path of the file if it is accessible.
12
+ * @throws Exits the process with code 1 and logs an error if the file is not accessible.
13
+ */
6
14
  export default async function getFilePath(currentDir, fileName) {
7
15
  const currentPath = path.join(currentDir, `${fileName}`);
8
16
  try {
@@ -19,10 +27,40 @@ export default async function getFilePath(currentDir, fileName) {
19
27
  }
20
28
  }
21
29
  }
22
- export async function getFile(currentDir, filePath) {
30
+ /**
31
+ * Reads and parses a JSON file from the specified path, returning its contents as a typed object.
32
+ *
33
+ * @template T - The expected type of the parsed JSON object.
34
+ * @param currentDir - The current working directory to resolve the file path from.
35
+ * @param filePath - The relative or absolute path to the JSON file.
36
+ * @returns A promise that resolves to the parsed JSON object of type T.
37
+ * @throws Will log an error and return undefined if the file cannot be read or parsed.
38
+ */
39
+ export async function readJSONFile(currentDir, filePath) {
23
40
  const path = await getFilePath(currentDir, filePath);
24
- return JSON.parse(fs.readFileSync(path).toString());
41
+ let parsedFile;
42
+ try {
43
+ parsedFile = JSON.parse(fs.readFileSync(path).toString());
44
+ // ...use json...
45
+ }
46
+ catch (e) {
47
+ console.error('Failed to parse JSON:', e);
48
+ }
49
+ return parsedFile;
25
50
  }
51
+ /**
52
+ * Asynchronously loads a Webpack configuration file from a specified path.
53
+ *
54
+ * This function resolves the absolute file path using `getFilePath`, converts it to a file URL,
55
+ * and dynamically imports the configuration module. It supports both ESM and CommonJS module formats,
56
+ * returning the configuration object accordingly.
57
+ *
58
+ * @param currentDir - The current working directory to resolve relative paths.
59
+ * @param filePath - The relative or absolute path to the Webpack configuration file.
60
+ * @returns A promise that resolves to the loaded Webpack `Configuration` object.
61
+ *
62
+ * @throws Will throw an error if the file cannot be found or imported.
63
+ */
26
64
  export async function getWebpackConfigFile(currentDir, filePath) {
27
65
  const path = await getFilePath(currentDir, filePath);
28
66
  // Convert the path to a file URL
@@ -1 +1 @@
1
- {"version":3,"file":"getFile.js","sourceRoot":"","sources":["../../src/utils/getFile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAGjC,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAEpC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,WAAW,CAAC,UAAkB,EAAE,QAAgB;IAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IAEzD,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,WAAW,CAAC;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,kBAAkB,QAAQ,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAI,UAAkB,EAAE,QAAgB;IACjE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAM,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAkB,EAAE,QAAgB;IAC3E,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAErD,iCAAiC;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,mEAAmE;IACnE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAkB,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"getFile.js","sourceRoot":"","sources":["../../src/utils/getFile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAGjC,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,WAAW,CAAC,UAAkB,EAAE,QAAgB;IAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IAEzD,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7C,OAAO,WAAW,CAAC;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,kBAAkB,QAAQ,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,UAAkB,EAAE,QAAgB;IACtE,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACrD,IAAI,UAAU,CAAC;IACf,IAAI,CAAC;QACD,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAM,CAAC;QAC/D,iBAAiB;IACrB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,UAAU,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAkB,EAAE,QAAgB;IAC3E,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAErD,iCAAiC;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,mEAAmE;IACnE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAkB,CAAC;AACvD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@equinor/echo-cli",
3
- "version": "1.0.0-beta-26",
3
+ "version": "1.0.0-beta-27",
4
4
  "description": "Command line interface for Echo Apps",
5
5
  "main": "dist/index.js",
6
6
  "source": "src/test.js",