@nlabs/lex 1.32.0 → 1.37.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.
@@ -4,47 +4,43 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
7
  var __export = (target, all) => {
9
8
  for (var name in all)
10
9
  __defProp(target, name, { get: all[name], enumerable: true });
11
10
  };
12
- var __reExport = (target, module2, copyDefault, desc) => {
13
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
- for (let key of __getOwnPropNames(module2))
15
- if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
16
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
16
  }
18
- return target;
17
+ return to;
19
18
  };
20
- var __toESM = (module2, isNodeMode) => {
21
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
22
- };
23
- var __toCommonJS = /* @__PURE__ */ ((cache) => {
24
- return (module2, temp) => {
25
- return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
26
- };
27
- })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
21
  var compile_exports = {};
29
22
  __export(compile_exports, {
30
23
  compile: () => compile,
31
24
  hasFileType: () => hasFileType
32
25
  });
26
+ module.exports = __toCommonJS(compile_exports);
33
27
  var import_execa = __toESM(require("execa"));
34
- var import_fs = __toESM(require("fs"));
35
- var import_glob = __toESM(require("glob"));
36
- var import_path = __toESM(require("path"));
28
+ var fs = __toESM(require("fs-extra"));
29
+ var glob = __toESM(require("glob"));
30
+ var path = __toESM(require("path"));
37
31
  var import_LexConfig = require("../LexConfig");
38
- var import_utils = require("../utils");
32
+ var import_app = require("../utils/app");
33
+ var import_file = require("../utils/file");
34
+ var import_log = require("../utils/log");
39
35
  const hasFileType = (startPath, ext) => {
40
- if (!import_fs.default.existsSync(startPath)) {
36
+ if (!fs.existsSync(startPath)) {
41
37
  return false;
42
38
  }
43
- const files = import_fs.default.readdirSync(startPath);
39
+ const files = fs.readdirSync(startPath);
44
40
  return files.some((file) => {
45
- const filename = import_path.default.join(startPath, file);
46
- const fileExt = import_path.default.extname(filename);
47
- const stat = import_fs.default.lstatSync(filename);
41
+ const filename = path.join(startPath, file);
42
+ const fileExt = path.extname(filename);
43
+ const stat = fs.lstatSync(filename);
48
44
  if (stat.isDirectory()) {
49
45
  return hasFileType(filename, ext);
50
46
  }
@@ -53,18 +49,18 @@ const hasFileType = (startPath, ext) => {
53
49
  };
54
50
  const compile = async (cmd, callback = () => ({})) => {
55
51
  const { cliName = "Lex", config, quiet, remove, watch } = cmd;
56
- const spinner = (0, import_utils.createSpinner)(quiet);
57
- (0, import_utils.log)(`${cliName} compiling...`, "info", quiet);
52
+ const spinner = (0, import_app.createSpinner)(quiet);
53
+ (0, import_log.log)(`${cliName} compiling...`, "info", quiet);
58
54
  import_LexConfig.LexConfig.parseConfig(cmd);
59
55
  const { outputFullPath, sourceFullPath, useTypescript } = import_LexConfig.LexConfig.config;
60
- const nodePath = import_path.default.resolve(__dirname, "../../node_modules");
61
- (0, import_utils.checkLinkedModules)();
56
+ const nodePath = path.resolve(__dirname, "../../node_modules");
57
+ (0, import_app.checkLinkedModules)();
62
58
  if (remove) {
63
- await (0, import_utils.removeFiles)(outputFullPath);
59
+ await (0, import_app.removeFiles)(outputFullPath);
64
60
  }
65
61
  if (useTypescript) {
66
62
  import_LexConfig.LexConfig.checkTypescriptConfig();
67
- const typescriptPath = (0, import_utils.relativeFilePath)("typescript/bin/tsc", nodePath);
63
+ const typescriptPath = (0, import_file.relativeFilePath)("typescript/bin/tsc", nodePath);
68
64
  const typescriptOptions = config ? ["-p", config] : [
69
65
  "--allowSyntheticDefaultImports",
70
66
  "--baseUrl",
@@ -73,7 +69,7 @@ const compile = async (cmd, callback = () => ({})) => {
73
69
  "--emitDeclarationOnly",
74
70
  "--inlineSourceMap",
75
71
  "--jsx",
76
- "react",
72
+ "react-jsx",
77
73
  "--lib",
78
74
  ["ES5", "ES6", "ES2015", "ES7", "ES2016", "ES2017", "ES2018", "ESNext", "DOM"],
79
75
  "--module",
@@ -101,7 +97,7 @@ const compile = async (cmd, callback = () => ({})) => {
101
97
  await (0, import_execa.default)(typescriptPath, typescriptOptions, { encoding: "utf-8" });
102
98
  spinner.succeed("Successfully completed type checking!");
103
99
  } catch (error) {
104
- (0, import_utils.log)(`
100
+ (0, import_log.log)(`
105
101
  ${cliName} Error: ${error.message}`, "error", quiet);
106
102
  if (!quiet) {
107
103
  console.error(error);
@@ -117,10 +113,10 @@ ${cliName} Error: ${error.message}`, "error", quiet);
117
113
  nodir: true,
118
114
  nosort: true
119
115
  };
120
- const tsFiles = import_glob.default.sync(`${sourceFullPath}/**/**.ts*`, globOptions);
121
- const jsFiles = import_glob.default.sync(`${sourceFullPath}/**/**.js`, globOptions);
116
+ const tsFiles = glob.sync(`${sourceFullPath}/**/**.ts*`, globOptions);
117
+ const jsFiles = glob.sync(`${sourceFullPath}/**/**.js`, globOptions);
122
118
  const sourceFiles = [...tsFiles, ...jsFiles];
123
- const esbuildPath = (0, import_utils.relativeFilePath)("esbuild/bin/esbuild", nodePath);
119
+ const esbuildPath = (0, import_file.relativeFilePath)("esbuild/bin/esbuild", nodePath);
124
120
  const esbuildOptions = [
125
121
  ...sourceFiles,
126
122
  "--color=true",
@@ -129,7 +125,7 @@ ${cliName} Error: ${error.message}`, "error", quiet);
129
125
  "--outdir=lib",
130
126
  "--platform=node",
131
127
  "--sourcemap=inline",
132
- "--target=node14"
128
+ "--target=node16"
133
129
  ];
134
130
  if (useTypescript) {
135
131
  esbuildOptions.push("--loader:.ts=ts", "--loader:.tsx=tsx");
@@ -137,9 +133,9 @@ ${cliName} Error: ${error.message}`, "error", quiet);
137
133
  if (watch) {
138
134
  esbuildOptions.push("--watch");
139
135
  }
140
- const cssFiles = (0, import_utils.getFilesByExt)(".css");
136
+ const cssFiles = (0, import_app.getFilesByExt)(".css", import_LexConfig.LexConfig.config);
141
137
  if (cssFiles.length) {
142
- const postcssPath = (0, import_utils.relativeFilePath)("postcss-cli/bin/postcss", nodePath);
138
+ const postcssPath = (0, import_file.relativeFilePath)("postcss-cli/index.js", nodePath);
143
139
  const postcssOptions = [
144
140
  `${sourceFullPath}/**/**.css`,
145
141
  "--base",
@@ -147,57 +143,57 @@ ${cliName} Error: ${error.message}`, "error", quiet);
147
143
  "--dir",
148
144
  outputFullPath,
149
145
  "--config",
150
- import_path.default.resolve(__dirname, "../../.postcssrc.js")
146
+ path.resolve(__dirname, "../../.postcssrc.js")
151
147
  ];
152
148
  try {
153
149
  await (0, import_execa.default)(postcssPath, postcssOptions, { encoding: "utf-8" });
154
150
  spinner.succeed(`Successfully formatted ${cssFiles.length} css files!`);
155
151
  } catch (error) {
156
- (0, import_utils.log)(`
152
+ (0, import_log.log)(`
157
153
  ${cliName} Error: ${error.message}`, "error", quiet);
158
154
  spinner.fail("Failed formatting css.");
159
155
  callback(error.status);
160
156
  return error.status;
161
157
  }
162
158
  }
163
- const gifFiles = (0, import_utils.getFilesByExt)(".gif");
164
- const jpgFiles = (0, import_utils.getFilesByExt)(".jpg");
165
- const pngFiles = (0, import_utils.getFilesByExt)(".png");
166
- const svgFiles = (0, import_utils.getFilesByExt)(".svg");
159
+ const gifFiles = (0, import_app.getFilesByExt)(".gif", import_LexConfig.LexConfig.config);
160
+ const jpgFiles = (0, import_app.getFilesByExt)(".jpg", import_LexConfig.LexConfig.config);
161
+ const pngFiles = (0, import_app.getFilesByExt)(".png", import_LexConfig.LexConfig.config);
162
+ const svgFiles = (0, import_app.getFilesByExt)(".svg", import_LexConfig.LexConfig.config);
167
163
  const imageFiles = [...gifFiles, ...jpgFiles, ...pngFiles, ...svgFiles];
168
164
  if (imageFiles.length) {
169
165
  try {
170
- await (0, import_utils.copyFiles)(imageFiles, "image", spinner);
166
+ await (0, import_app.copyFiles)(imageFiles, "image", spinner, import_LexConfig.LexConfig.config);
171
167
  } catch (error) {
172
- (0, import_utils.log)(`
168
+ (0, import_log.log)(`
173
169
  ${cliName} Error: ${error.message}`, "error", quiet);
174
170
  spinner.fail("Failed to move images to output directory.");
175
171
  callback(error.status);
176
172
  return error.status;
177
173
  }
178
174
  }
179
- const ttfFiles = (0, import_utils.getFilesByExt)(".ttf");
180
- const otfFiles = (0, import_utils.getFilesByExt)(".otf");
181
- const woffFiles = (0, import_utils.getFilesByExt)(".woff");
182
- const woff2Files = (0, import_utils.getFilesByExt)(".woff2");
175
+ const ttfFiles = (0, import_app.getFilesByExt)(".ttf", import_LexConfig.LexConfig.config);
176
+ const otfFiles = (0, import_app.getFilesByExt)(".otf", import_LexConfig.LexConfig.config);
177
+ const woffFiles = (0, import_app.getFilesByExt)(".woff", import_LexConfig.LexConfig.config);
178
+ const woff2Files = (0, import_app.getFilesByExt)(".woff2", import_LexConfig.LexConfig.config);
183
179
  const fontFiles = [...ttfFiles, ...otfFiles, ...woffFiles, ...woff2Files];
184
180
  if (fontFiles.length) {
185
181
  try {
186
- await (0, import_utils.copyFiles)(fontFiles, "font", spinner);
182
+ await (0, import_app.copyFiles)(fontFiles, "font", spinner, import_LexConfig.LexConfig.config);
187
183
  } catch (error) {
188
- (0, import_utils.log)(`
184
+ (0, import_log.log)(`
189
185
  ${cliName} Error: ${error.message}`, "error", quiet);
190
186
  spinner.fail("Failed to move fonts to output directory.");
191
187
  callback(error.status);
192
188
  return error.status;
193
189
  }
194
190
  }
195
- const mdFiles = (0, import_utils.getFilesByExt)(".md");
191
+ const mdFiles = (0, import_app.getFilesByExt)(".md", import_LexConfig.LexConfig.config);
196
192
  if (mdFiles.length) {
197
193
  try {
198
- await (0, import_utils.copyFiles)(mdFiles, "documents", spinner);
194
+ await (0, import_app.copyFiles)(mdFiles, "documents", spinner, import_LexConfig.LexConfig.config);
199
195
  } catch (error) {
200
- (0, import_utils.log)(`
196
+ (0, import_log.log)(`
201
197
  ${cliName} Error: ${error.message}`, "error", quiet);
202
198
  spinner.fail("Failed to move docs to output directory.");
203
199
  callback(error.status);
@@ -209,7 +205,7 @@ ${cliName} Error: ${error.message}`, "error", quiet);
209
205
  await (0, import_execa.default)(esbuildPath, esbuildOptions, { encoding: "utf-8" });
210
206
  spinner.succeed("Compile completed successfully!");
211
207
  } catch (error) {
212
- (0, import_utils.log)(`
208
+ (0, import_log.log)(`
213
209
  ${cliName} Error: ${error.message}`, "error", quiet);
214
210
  if (!quiet) {
215
211
  console.error(error);
@@ -221,9 +217,9 @@ ${cliName} Error: ${error.message}`, "error", quiet);
221
217
  callback(0);
222
218
  return 0;
223
219
  };
224
- module.exports = __toCommonJS(compile_exports);
225
220
  // Annotate the CommonJS export names for ESM import in node:
226
221
  0 && (module.exports = {
227
222
  compile,
228
223
  hasFileType
229
224
  });
225
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbW1hbmRzL2NvbXBpbGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2RlZmF1bHQgYXMgZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIGdsb2IgZnJvbSAnZ2xvYic7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vTGV4Q29uZmlnJztcbmltcG9ydCB7XG4gIGNoZWNrTGlua2VkTW9kdWxlcyxcbiAgY29weUZpbGVzLFxuICBjcmVhdGVTcGlubmVyLFxuICBnZXRGaWxlc0J5RXh0LFxuICByZW1vdmVGaWxlc1xufSBmcm9tICcuLi91dGlscy9hcHAnO1xuaW1wb3J0IHtyZWxhdGl2ZUZpbGVQYXRofSBmcm9tICcuLi91dGlscy9maWxlJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi91dGlscy9sb2cnO1xuXG5leHBvcnQgY29uc3QgaGFzRmlsZVR5cGUgPSAoc3RhcnRQYXRoOiBzdHJpbmcsIGV4dDogc3RyaW5nW10pOiBib29sZWFuID0+IHtcbiAgaWYoIWZzLmV4aXN0c1N5bmMoc3RhcnRQYXRoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IGZzLnJlYWRkaXJTeW5jKHN0YXJ0UGF0aCk7XG5cbiAgcmV0dXJuIGZpbGVzLnNvbWUoKGZpbGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGZpbGVuYW1lOiBzdHJpbmcgPSBwYXRoLmpvaW4oc3RhcnRQYXRoLCBmaWxlKTtcbiAgICBjb25zdCBmaWxlRXh0OiBzdHJpbmcgPSBwYXRoLmV4dG5hbWUoZmlsZW5hbWUpO1xuICAgIGNvbnN0IHN0YXQgPSBmcy5sc3RhdFN5bmMoZmlsZW5hbWUpO1xuXG4gICAgaWYoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAvLyBSZWN1cnNpdmUgc2VhcmNoXG4gICAgICByZXR1cm4gaGFzRmlsZVR5cGUoZmlsZW5hbWUsIGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dC5pbmNsdWRlcyhmaWxlRXh0KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tcGlsZSA9IGFzeW5jIChjbWQ6IGFueSwgY2FsbGJhY2s6IGFueSA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBjb25maWcsIHF1aWV0LCByZW1vdmUsIHdhdGNofSA9IGNtZDtcblxuICAvLyBTcGlubmVyXG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICAvLyBEaXNwbGF5IHN0YXR1c1xuICBsb2coYCR7Y2xpTmFtZX0gY29tcGlsaW5nLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjb25maWd1cmF0aW9uXG4gIExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIC8vIENvbXBpbGUgdHlwZVxuICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIHNvdXJjZUZ1bGxQYXRoLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG4gIGNvbnN0IG5vZGVQYXRoOiBzdHJpbmcgPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4vLi4vbm9kZV9tb2R1bGVzJyk7XG5cbiAgLy8gQ2hlY2sgZm9yIGxpbmtlZCBtb2R1bGVzXG4gIGNoZWNrTGlua2VkTW9kdWxlcygpO1xuXG4gIC8vIENsZWFuIG91dHB1dCBkaXJlY3RvcnkgYmVmb3JlIHdlIHN0YXJ0IGFkZGluZyBpbiBuZXcgZmlsZXNcbiAgaWYocmVtb3ZlKSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMob3V0cHV0RnVsbFBhdGgpO1xuICB9XG5cbiAgLy8gQWRkIHRzY29uZmlnIGZpbGUgaWYgbm9uZSBleGlzdHNcbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0c2NvbmZpZy5qc29uIGV4aXN0c1xuICAgIExleENvbmZpZy5jaGVja1R5cGVzY3JpcHRDb25maWcoKTtcblxuICAgIC8vIENoZWNrIHN0YXRpYyB0eXBlcyB3aXRoIHR5cGVzY3JpcHRcbiAgICBjb25zdCB0eXBlc2NyaXB0UGF0aDogc3RyaW5nID0gcmVsYXRpdmVGaWxlUGF0aCgndHlwZXNjcmlwdC9iaW4vdHNjJywgbm9kZVBhdGgpO1xuICAgIGNvbnN0IHR5cGVzY3JpcHRPcHRpb25zOiBzdHJpbmdbXSA9IGNvbmZpZyA/XG4gICAgICBbJy1wJywgY29uZmlnXSA6XG4gICAgICBbXG4gICAgICAgICctLWFsbG93U3ludGhldGljRGVmYXVsdEltcG9ydHMnLFxuICAgICAgICAnLS1iYXNlVXJsJywgc291cmNlRnVsbFBhdGgsXG4gICAgICAgICctLWRlY2xhcmF0aW9uJyxcbiAgICAgICAgJy0tZW1pdERlY2xhcmF0aW9uT25seScsXG4gICAgICAgICctLWlubGluZVNvdXJjZU1hcCcsXG4gICAgICAgICctLWpzeCcsICdyZWFjdC1qc3gnLFxuICAgICAgICAnLS1saWInLCBbJ0VTNScsICdFUzYnLCAnRVMyMDE1JywgJ0VTNycsICdFUzIwMTYnLCAnRVMyMDE3JywgJ0VTMjAxOCcsICdFU05leHQnLCAnRE9NJ10sXG4gICAgICAgICctLW1vZHVsZScsICdjb21tb25qcycsXG4gICAgICAgICctLW1vZHVsZVJlc29sdXRpb24nLCAnbm9kZScsXG4gICAgICAgICctLW5vSW1wbGljaXRSZXR1cm5zJyxcbiAgICAgICAgJy0tbm9JbXBsaWNpdFRoaXMnLFxuICAgICAgICAnLS1ub1N0cmljdEdlbmVyaWNDaGVja3MnLFxuICAgICAgICAnLS1vdXREaXInLCBvdXRwdXRGdWxsUGF0aCxcbiAgICAgICAgJy0tcmVtb3ZlQ29tbWVudHMnLFxuICAgICAgICAnLS1yZXNvbHZlSnNvbk1vZHVsZScsXG4gICAgICAgICctLXJvb3REaXInLCBzb3VyY2VGdWxsUGF0aCxcbiAgICAgICAgJy0tc291cmNlUm9vdCcsIHNvdXJjZUZ1bGxQYXRoLFxuICAgICAgICAnLS10YXJnZXQnLCAnRVM1JyxcbiAgICAgICAgJy0tdHlwZVJvb3RzJywgWydub2RlX21vZHVsZXMvQHR5cGVzJywgJ25vZGVfbW9kdWxlcy9qc29uLWQtdHMnXVxuICAgICAgXTtcblxuICAgIC8vIFN0YXJ0IHR5cGUgY2hlY2tpbmcgc3Bpbm5lclxuICAgIHNwaW5uZXIuc3RhcnQoJ1N0YXRpYyB0eXBlIGNoZWNraW5nIHdpdGggVHlwZXNjcmlwdC4uLicpO1xuXG4gICAgLy8gVHlwZSBjaGVja2luZ1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjYSh0eXBlc2NyaXB0UGF0aCwgdHlwZXNjcmlwdE9wdGlvbnMsIHtlbmNvZGluZzogJ3V0Zi04J30pO1xuXG4gICAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnU3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCB0eXBlIGNoZWNraW5nIScpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIC8vIERpc3BsYXkgZXJyb3IgbWVzc2FnZVxuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgICAgc3Bpbm5lci5mYWlsKCdUeXBlIGNoZWNraW5nIGZhaWxlZC4nKTtcblxuICAgICAgLy8gS2lsbCBQcm9jZXNzXG4gICAgICBjYWxsYmFjayhlcnJvci5zdGF0dXMpO1xuICAgICAgcmV0dXJuIGVycm9yLnN0YXR1cztcbiAgICB9XG4gIH1cblxuICAvLyBTb3VyY2UgZmlsZXNcbiAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgY3dkOiBzb3VyY2VGdWxsUGF0aCxcbiAgICBkb3Q6IGZhbHNlLFxuICAgIG5vZGlyOiB0cnVlLFxuICAgIG5vc29ydDogdHJ1ZVxuICB9O1xuICBjb25zdCB0c0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2Iuc3luYyhgJHtzb3VyY2VGdWxsUGF0aH0vKiovKioudHMqYCwgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBqc0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2Iuc3luYyhgJHtzb3VyY2VGdWxsUGF0aH0vKiovKiouanNgLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi50c0ZpbGVzLCAuLi5qc0ZpbGVzXTtcblxuICAvLyBFU0J1aWxkIG9wdGlvbnNcbiAgY29uc3QgZXNidWlsZFBhdGg6IHN0cmluZyA9IHJlbGF0aXZlRmlsZVBhdGgoJ2VzYnVpbGQvYmluL2VzYnVpbGQnLCBub2RlUGF0aCk7XG4gIGNvbnN0IGVzYnVpbGRPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAuLi5zb3VyY2VGaWxlcyxcbiAgICAnLS1jb2xvcj10cnVlJyxcbiAgICAnLS1mb3JtYXQ9Y2pzJyxcbiAgICAnLS1sb2FkZXI6LmpzPWpzJyxcbiAgICAnLS1vdXRkaXI9bGliJyxcbiAgICAnLS1wbGF0Zm9ybT1ub2RlJyxcbiAgICAnLS1zb3VyY2VtYXA9aW5saW5lJyxcbiAgICAnLS10YXJnZXQ9bm9kZTE2J1xuICBdO1xuXG4gIGlmKHVzZVR5cGVzY3JpcHQpIHtcbiAgICBlc2J1aWxkT3B0aW9ucy5wdXNoKCctLWxvYWRlcjoudHM9dHMnLCAnLS1sb2FkZXI6LnRzeD10c3gnKTtcbiAgfVxuXG4gIGlmKHdhdGNoKSB7XG4gICAgZXNidWlsZE9wdGlvbnMucHVzaCgnLS13YXRjaCcpO1xuICB9XG5cbiAgLy8gVXNlIFBvc3RDU1MgZm9yIENTUyBmaWxlc1xuICBjb25zdCBjc3NGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuY3NzJywgTGV4Q29uZmlnLmNvbmZpZyk7XG5cbiAgaWYoY3NzRmlsZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgcG9zdGNzc1BhdGg6IHN0cmluZyA9IHJlbGF0aXZlRmlsZVBhdGgoJ3Bvc3Rjc3MtY2xpL2luZGV4LmpzJywgbm9kZVBhdGgpO1xuICAgIGNvbnN0IHBvc3Rjc3NPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAgIGAke3NvdXJjZUZ1bGxQYXRofS8qKi8qKi5jc3NgLFxuICAgICAgJy0tYmFzZScsXG4gICAgICBzb3VyY2VGdWxsUGF0aCxcbiAgICAgICctLWRpcicsXG4gICAgICBvdXRwdXRGdWxsUGF0aCxcbiAgICAgICctLWNvbmZpZycsXG4gICAgICBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4vLi4vLnBvc3Rjc3NyYy5qcycpXG4gICAgXTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjYShwb3N0Y3NzUGF0aCwgcG9zdGNzc09wdGlvbnMsIHtlbmNvZGluZzogJ3V0Zi04J30pO1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgZm9ybWF0dGVkICR7Y3NzRmlsZXMubGVuZ3RofSBjc3MgZmlsZXMhYCk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlXG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgZm9ybWF0dGluZyBjc3MuJyk7XG5cbiAgICAgIC8vIEtpbGwgUHJvY2Vzc1xuICAgICAgY2FsbGJhY2soZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJldHVybiBlcnJvci5zdGF0dXM7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29weSBpbWFnZSBmaWxlc1xuICBjb25zdCBnaWZGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuZ2lmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGpwZ0ZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5qcGcnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgcG5nRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLnBuZycsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBzdmdGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuc3ZnJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGltYWdlRmlsZXM6IHN0cmluZ1tdID0gWy4uLmdpZkZpbGVzLCAuLi5qcGdGaWxlcywgLi4ucG5nRmlsZXMsIC4uLnN2Z0ZpbGVzXTtcblxuICBpZihpbWFnZUZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMoaW1hZ2VGaWxlcywgJ2ltYWdlJywgc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlXG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gbW92ZSBpbWFnZXMgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgLy8gS2lsbCBQcm9jZXNzXG4gICAgICBjYWxsYmFjayhlcnJvci5zdGF0dXMpO1xuICAgICAgcmV0dXJuIGVycm9yLnN0YXR1cztcbiAgICB9XG4gIH1cblxuICAvLyBDb3B5IGZvbnQgZmlsZXNcbiAgY29uc3QgdHRmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLnR0ZicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBvdGZGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcub3RmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IHdvZmZGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcud29mZicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCB3b2ZmMkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy53b2ZmMicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBmb250RmlsZXM6IHN0cmluZ1tdID0gWy4uLnR0ZkZpbGVzLCAuLi5vdGZGaWxlcywgLi4ud29mZkZpbGVzLCAuLi53b2ZmMkZpbGVzXTtcblxuICBpZihmb250RmlsZXMubGVuZ3RoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvcHlGaWxlcyhmb250RmlsZXMsICdmb250Jywgc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlXG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gbW92ZSBmb250cyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICAvLyBLaWxsIFByb2Nlc3NcbiAgICAgIGNhbGxiYWNrKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXR1cm4gZXJyb3Iuc3RhdHVzO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvcHkgbWFya2Rvd24gZmlsZXNcbiAgY29uc3QgbWRGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcubWQnLCBMZXhDb25maWcuY29uZmlnKTtcblxuICBpZihtZEZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMobWRGaWxlcywgJ2RvY3VtZW50cycsIHNwaW5uZXIsIExleENvbmZpZy5jb25maWcpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIC8vIERpc3BsYXkgZXJyb3IgbWVzc2FnZVxuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIG1vdmUgZG9jcyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICAvLyBLaWxsIFByb2Nlc3NcbiAgICAgIGNhbGxiYWNrKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXR1cm4gZXJyb3Iuc3RhdHVzO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXJ0IGNvbXBpbGUgc3Bpbm5lclxuICBzcGlubmVyLnN0YXJ0KHdhdGNoID8gJ1dhdGNoaW5nIGZvciBjaGFuZ2VzLi4uJyA6ICdDb21waWxpbmcgd2l0aCBFU0J1aWxkLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjYShlc2J1aWxkUGF0aCwgZXNidWlsZE9wdGlvbnMsIHtlbmNvZGluZzogJ3V0Zi04J30pO1xuXG4gICAgLy8gU3RvcCBzcGlubmVyXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdDb21waWxlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2VcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cblxuICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgIHNwaW5uZXIuZmFpbCgnQ29kZSBjb21waWxpbmcgZmFpbGVkLicpO1xuXG4gICAgLy8gS2lsbCBQcm9jZXNzXG4gICAgY2FsbGJhY2soZXJyb3Iuc3RhdHVzKTtcbiAgICByZXR1cm4gZXJyb3Iuc3RhdHVzO1xuICB9XG5cbiAgLy8gU3RvcCBwcm9jZXNzXG4gIGNhbGxiYWNrKDApO1xuICByZXR1cm4gMDtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLG1CQUErQjtBQUMvQixTQUFvQjtBQUNwQixXQUFzQjtBQUN0QixXQUFzQjtBQUV0Qix1QkFBd0I7QUFDeEIsaUJBTU87QUFDUCxrQkFBK0I7QUFDL0IsaUJBQWtCO0FBRVgsTUFBTSxjQUFjLENBQUMsV0FBbUIsUUFBMkI7QUFDeEUsTUFBRyxDQUFDLEdBQUcsV0FBVyxTQUFTLEdBQUc7QUFDNUIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFFBQWtCLEdBQUcsWUFBWSxTQUFTO0FBRWhELFNBQU8sTUFBTSxLQUFLLENBQUMsU0FBaUI7QUFDbEMsVUFBTSxXQUFtQixLQUFLLEtBQUssV0FBVyxJQUFJO0FBQ2xELFVBQU0sVUFBa0IsS0FBSyxRQUFRLFFBQVE7QUFDN0MsVUFBTSxPQUFPLEdBQUcsVUFBVSxRQUFRO0FBRWxDLFFBQUcsS0FBSyxZQUFZLEdBQUc7QUFFckIsYUFBTyxZQUFZLFVBQVUsR0FBRztBQUFBLElBQ2xDO0FBRUEsV0FBTyxJQUFJLFNBQVMsT0FBTztBQUFBLEVBQzdCLENBQUM7QUFDSDtBQUVPLE1BQU0sVUFBVSxPQUFPLEtBQVUsV0FBZ0IsTUFBTyxFQUFDLE9BQXdCO0FBQ3RGLFFBQU0sRUFBQyxVQUFVLE9BQU8sUUFBUSxPQUFPLFFBQVEsVUFBUztBQUd4RCxRQUFNLFVBQVUsOEJBQWMsS0FBSztBQUduQyxzQkFBSSxHQUFHLHdCQUF3QixRQUFRLEtBQUs7QUFHNUMsNkJBQVUsWUFBWSxHQUFHO0FBR3pCLFFBQU0sRUFBQyxnQkFBZ0IsZ0JBQWdCLGtCQUFpQiwyQkFBVTtBQUNsRSxRQUFNLFdBQW1CLEtBQUssUUFBUSxXQUFXLG9CQUFvQjtBQUdy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
@@ -4,46 +4,41 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
7
  var __export = (target, all) => {
9
8
  for (var name in all)
10
9
  __defProp(target, name, { get: all[name], enumerable: true });
11
10
  };
12
- var __reExport = (target, module2, copyDefault, desc) => {
13
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
- for (let key of __getOwnPropNames(module2))
15
- if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
16
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
16
  }
18
- return target;
17
+ return to;
19
18
  };
20
- var __toESM = (module2, isNodeMode) => {
21
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
22
- };
23
- var __toCommonJS = /* @__PURE__ */ ((cache) => {
24
- return (module2, temp) => {
25
- return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
26
- };
27
- })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
21
  var config_exports = {};
29
22
  __export(config_exports, {
30
23
  config: () => config
31
24
  });
32
- var import_fs = __toESM(require("fs"));
25
+ module.exports = __toCommonJS(config_exports);
26
+ var fs = __toESM(require("fs-extra"));
33
27
  var import_startCase = __toESM(require("lodash/startCase"));
34
28
  var path = __toESM(require("path"));
35
29
  var import_LexConfig = require("../LexConfig");
36
- var import_utils = require("../utils");
30
+ var import_app = require("../utils/app");
31
+ var import_log = require("../utils/log");
37
32
  const config = (type, cmd, callback = () => ({})) => {
38
33
  const { cliName = "Lex", json, quiet } = cmd;
39
34
  const validTypes = ["app", "jest", "webpack"];
40
35
  if (!validTypes.includes(type)) {
41
- (0, import_utils.log)(`
36
+ (0, import_log.log)(`
42
37
  ${cliName} Error: Option for ${type} not found. Configurations only available for app, jest, and webpack.`, "error", quiet);
43
38
  callback(1);
44
39
  return Promise.resolve(1);
45
40
  }
46
- (0, import_utils.log)(`${cliName} generating configuration for ${(0, import_startCase.default)(type)}...`, "info", quiet);
41
+ (0, import_log.log)(`${cliName} generating configuration for ${(0, import_startCase.default)(type)}...`, "info", quiet);
47
42
  import_LexConfig.LexConfig.parseConfig(cmd);
48
43
  let configOptions;
49
44
  switch (type) {
@@ -61,18 +56,17 @@ ${cliName} Error: Option for ${type} not found. Configurations only available fo
61
56
  break;
62
57
  }
63
58
  const jsonOutput = JSON.stringify(configOptions, null, 2);
64
- console.log(jsonOutput);
65
59
  if (json) {
66
- const spinner = (0, import_utils.createSpinner)(quiet);
60
+ const spinner = (0, import_app.createSpinner)(quiet);
67
61
  spinner.start("Creating JSON output...");
68
- import_fs.default.writeFileSync(json, jsonOutput);
62
+ fs.writeFileSync(json, jsonOutput);
69
63
  spinner.succeed(`Successfully saved JSON output to ${path.relative(process.cwd(), json)}`);
70
64
  }
71
65
  callback(0);
72
66
  return Promise.resolve(0);
73
67
  };
74
- module.exports = __toCommonJS(config_exports);
75
68
  // Annotate the CommonJS export names for ESM import in node:
76
69
  0 && (module.exports = {
77
70
  config
78
71
  });
72
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbW1hbmRzL2NvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCBzdGFydENhc2UgZnJvbSAnbG9kYXNoL3N0YXJ0Q2FzZSc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vTGV4Q29uZmlnJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lcn0gZnJvbSAnLi4vdXRpbHMvYXBwJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi91dGlscy9sb2cnO1xuXG5leHBvcnQgY29uc3QgY29uZmlnID0gKHR5cGU6IHN0cmluZywgY21kOiBhbnksIGNhbGxiYWNrOiBhbnkgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge2NsaU5hbWUgPSAnTGV4JywganNvbiwgcXVpZXR9ID0gY21kO1xuICBjb25zdCB2YWxpZFR5cGVzOiBzdHJpbmdbXSA9IFsnYXBwJywgJ2plc3QnLCAnd2VicGFjayddO1xuXG4gIGlmKCF2YWxpZFR5cGVzLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBPcHRpb24gZm9yICR7dHlwZX0gbm90IGZvdW5kLiBDb25maWd1cmF0aW9ucyBvbmx5IGF2YWlsYWJsZSBmb3IgYXBwLCBqZXN0LCBhbmQgd2VicGFjay5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxKTtcbiAgfVxuXG4gIC8vIERpc3BsYXkgc3RhdHVzXG4gIGxvZyhgJHtjbGlOYW1lfSBnZW5lcmF0aW5nIGNvbmZpZ3VyYXRpb24gZm9yICR7c3RhcnRDYXNlKHR5cGUpfS4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIC8vIEdldCBjdXN0b20gY29uZmlndXJhdGlvblxuICBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICBsZXQgY29uZmlnT3B0aW9ucztcblxuICBzd2l0Y2godHlwZSkge1xuICAgIGNhc2UgJ2FwcCc6XG4gICAgICBjb25maWdPcHRpb25zID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VzYnVpbGQnOlxuICAgICAgY29uZmlnT3B0aW9ucyA9IHJlcXVpcmUoJy4uLy4uL2VzYnVpbGRPcHRpb25zJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdqZXN0JzpcbiAgICAgIGNvbmZpZ09wdGlvbnMgPSByZXF1aXJlKCcuLi8uLi9qZXN0LmNvbmZpZy5sZXgnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3dlYnBhY2snOlxuICAgICAgY29uZmlnT3B0aW9ucyA9IHJlcXVpcmUoJy4uLy4uL3dlYnBhY2suY29uZmlnJyk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIC8vIE91dHB1dCBjb25maWcgdG8gY29uc29sZVxuICBjb25zdCBqc29uT3V0cHV0OiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjb25maWdPcHRpb25zLCBudWxsLCAyKTtcblxuICBpZihqc29uKSB7XG4gICAgLy8gU3Bpbm5lclxuICAgIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICAgIC8vIFN0YXJ0IHNwaW5uZXJcbiAgICBzcGlubmVyLnN0YXJ0KCdDcmVhdGluZyBKU09OIG91dHB1dC4uLicpO1xuXG4gICAgLy8gU2F2ZSBqc29uIGxvY2FsbHlcbiAgICBmcy53cml0ZUZpbGVTeW5jKGpzb24sIGpzb25PdXRwdXQpO1xuXG4gICAgLy8gU3VjY2VzcyBzcGlubmVyXG4gICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgc2F2ZWQgSlNPTiBvdXRwdXQgdG8gJHtwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGpzb24pfWApO1xuICB9XG5cbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoMCk7XG59O1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUEsU0FBb0I7QUFDcEIsdUJBQXNCO0FBQ3RCLFdBQXNCO0FBRXRCLHVCQUF3QjtBQUN4QixpQkFBNEI7QUFDNUIsaUJBQWtCO0FBRVgsTUFBTSxTQUFTLENBQUMsTUFBYyxLQUFVLFdBQWdCLE1BQU8sRUFBQyxPQUF3QjtBQUM3RixRQUFNLEVBQUMsVUFBVSxPQUFPLE1BQU0sVUFBUztBQUN2QyxRQUFNLGFBQXVCLENBQUMsT0FBTyxRQUFRLFNBQVM7QUFFdEQsTUFBRyxDQUFDLFdBQVcsU0FBUyxJQUFJLEdBQUc7QUFDN0Isd0JBQUk7QUFBQSxFQUFLLDZCQUE2Qiw2RUFBNkUsU0FBUyxLQUFLO0FBQ2pJLGFBQVMsQ0FBQztBQUNWLFdBQU8sUUFBUSxRQUFRLENBQUM7QUFBQSxFQUMxQjtBQUdBLHNCQUFJLEdBQUcsd0NBQXdDLDhCQUFVLElBQUksUUFBUSxRQUFRLEtBQUs7QUFHbEYsNkJBQVUsWUFBWSxHQUFHO0FBRXpCLE1BQUk7QUFFSixVQUFPO0FBQUEsU0FDQTtBQUNILHNCQUFnQiwyQkFBVTtBQUMxQjtBQUFBLFNBQ0c7QUFDSCxzQkFBZ0IsUUFBUSxzQkFBc0I7QUFDOUM7QUFBQSxTQUNHO0FBQ0gsc0JBQWdCLFFBQVEsdUJBQXVCO0FBQy9DO0FBQUEsU0FDRztBQUNILHNCQUFnQixRQUFRLHNCQUFzQjtBQUM5QztBQUFBO0FBSUosUUFBTSxhQUFxQixLQUFLLFVBQVUsZUFBZSxNQUFNLENBQUM7QUFFaEUsTUFBRyxNQUFNO0FBRVAsVUFBTSxVQUFVLDhCQUFjLEtBQUs7QUFHbkMsWUFBUSxNQUFNLHlCQUF5QjtBQUd2QyxPQUFHLGNBQWMsTUFBTSxVQUFVO0FBR2pDLFlBQVEsUUFBUSxxQ0FBcUMsS0FBSyxTQUFTLFFBQVEsSUFBSSxHQUFHLElBQUksR0FBRztBQUFBLEVBQzNGO0FBRUEsV0FBUyxDQUFDO0FBQ1YsU0FBTyxRQUFRLFFBQVEsQ0FBQztBQUMxQjsiLAogICJuYW1lcyI6IFtdCn0K
@@ -4,56 +4,51 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
7
  var __export = (target, all) => {
9
8
  for (var name in all)
10
9
  __defProp(target, name, { get: all[name], enumerable: true });
11
10
  };
12
- var __reExport = (target, module2, copyDefault, desc) => {
13
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
- for (let key of __getOwnPropNames(module2))
15
- if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
16
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
16
  }
18
- return target;
17
+ return to;
19
18
  };
20
- var __toESM = (module2, isNodeMode) => {
21
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
22
- };
23
- var __toCommonJS = /* @__PURE__ */ ((cache) => {
24
- return (module2, temp) => {
25
- return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
26
- };
27
- })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
21
  var copy_exports = {};
29
22
  __export(copy_exports, {
30
23
  copy: () => copy
31
24
  });
32
- var import_fs = __toESM(require("fs"));
33
- var import_utils = require("../utils");
25
+ module.exports = __toCommonJS(copy_exports);
26
+ var fs = __toESM(require("fs-extra"));
27
+ var import_app = require("../utils/app");
28
+ var import_log = require("../utils/log");
34
29
  const copy = (from, to, cmd, callback = () => ({})) => {
35
30
  const { cliName = "Lex", quiet } = cmd;
36
- (0, import_utils.log)(`${cliName} copying "${to}"...`, "info", quiet);
37
- if (!import_fs.default.existsSync(from)) {
38
- (0, import_utils.log)(`
31
+ (0, import_log.log)(`${cliName} copying "${to}"...`, "info", quiet);
32
+ if (!fs.existsSync(from)) {
33
+ (0, import_log.log)(`
39
34
  ${cliName} Error: Path not found, "${from}"...`, "error", quiet);
40
35
  callback(1);
41
36
  return Promise.resolve(1);
42
37
  }
43
- if (import_fs.default.lstatSync(from).isDirectory()) {
38
+ if (fs.lstatSync(from).isDirectory()) {
44
39
  try {
45
- (0, import_utils.copyFolderRecursiveSync)(from, to);
40
+ (0, import_app.copyFolderRecursiveSync)(from, to);
46
41
  } catch (error) {
47
- (0, import_utils.log)(`
42
+ (0, import_log.log)(`
48
43
  ${cliName} Error: Cannot copy "${from}". ${error.message}`, "error", quiet);
49
44
  callback(1);
50
45
  return Promise.resolve(1);
51
46
  }
52
47
  } else {
53
48
  try {
54
- (0, import_utils.copyFileSync)(from, to);
49
+ (0, import_app.copyFileSync)(from, to);
55
50
  } catch (error) {
56
- (0, import_utils.log)(`
51
+ (0, import_log.log)(`
57
52
  ${cliName} Error: Cannot copy "${from}" ${error.message}`, "error", quiet);
58
53
  callback(1);
59
54
  return Promise.resolve(1);
@@ -62,8 +57,8 @@ ${cliName} Error: Cannot copy "${from}" ${error.message}`, "error", quiet);
62
57
  callback(0);
63
58
  return Promise.resolve(0);
64
59
  };
65
- module.exports = __toCommonJS(copy_exports);
66
60
  // Annotate the CommonJS export names for ESM import in node:
67
61
  0 && (module.exports = {
68
62
  copy
69
63
  });
64
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbW1hbmRzL2NvcHkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5cbmltcG9ydCB7Y29weUZpbGVTeW5jLCBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luY30gZnJvbSAnLi4vdXRpbHMvYXBwJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi91dGlscy9sb2cnO1xuXG5leHBvcnQgY29uc3QgY29weSA9IChmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIGNtZDogYW55LCBjYWxsYmFjazogYW55ID0gKCkgPT4gKHt9KSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtjbGlOYW1lID0gJ0xleCcsIHF1aWV0fSA9IGNtZDtcblxuICAvLyBEaXNwbGF5IG1lc3NhZ2VcbiAgbG9nKGAke2NsaU5hbWV9IGNvcHlpbmcgXCIke3RvfVwiLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgaWYoIWZzLmV4aXN0c1N5bmMoZnJvbSkpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFBhdGggbm90IGZvdW5kLCBcIiR7ZnJvbX1cIi4uLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDEpO1xuICB9XG5cbiAgaWYoZnMubHN0YXRTeW5jKGZyb20pLmlzRGlyZWN0b3J5KCkpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ29weSBkaXJlY3RvcnlcbiAgICAgIGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jKGZyb20sIHRvKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjb3B5IFwiJHtmcm9tfVwiLiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ29weSBmaWxlXG4gICAgICBjb3B5RmlsZVN5bmMoZnJvbSwgdG8pO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ2Fubm90IGNvcHkgXCIke2Zyb219XCIgJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjaygwKTtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgwKTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJQSxTQUFvQjtBQUVwQixpQkFBb0Q7QUFDcEQsaUJBQWtCO0FBRVgsTUFBTSxPQUFPLENBQUMsTUFBYyxJQUFZLEtBQVUsV0FBZ0IsTUFBTyxFQUFDLE9BQXdCO0FBQ3ZHLFFBQU0sRUFBQyxVQUFVLE9BQU8sVUFBUztBQUdqQyxzQkFBSSxHQUFHLG9CQUFvQixVQUFVLFFBQVEsS0FBSztBQUVsRCxNQUFHLENBQUMsR0FBRyxXQUFXLElBQUksR0FBRztBQUN2Qix3QkFBSTtBQUFBLEVBQUssbUNBQW1DLFlBQVksU0FBUyxLQUFLO0FBQ3RFLGFBQVMsQ0FBQztBQUNWLFdBQU8sUUFBUSxRQUFRLENBQUM7QUFBQSxFQUMxQjtBQUVBLE1BQUcsR0FBRyxVQUFVLElBQUksRUFBRSxZQUFZLEdBQUc7QUFDbkMsUUFBSTtBQUVGLDhDQUF3QixNQUFNLEVBQUU7QUFBQSxJQUNsQyxTQUFRLE9BQU47QUFDQSwwQkFBSTtBQUFBLEVBQUssK0JBQStCLFVBQVUsTUFBTSxXQUFXLFNBQVMsS0FBSztBQUNqRixlQUFTLENBQUM7QUFDVixhQUFPLFFBQVEsUUFBUSxDQUFDO0FBQUEsSUFDMUI7QUFBQSxFQUNGLE9BQU87QUFDTCxRQUFJO0FBRUYsbUNBQWEsTUFBTSxFQUFFO0FBQUEsSUFDdkIsU0FBUSxPQUFOO0FBQ0EsMEJBQUk7QUFBQSxFQUFLLCtCQUErQixTQUFTLE1BQU0sV0FBVyxTQUFTLEtBQUs7QUFDaEYsZUFBUyxDQUFDO0FBQ1YsYUFBTyxRQUFRLFFBQVEsQ0FBQztBQUFBLElBQzFCO0FBQUEsRUFDRjtBQUVBLFdBQVMsQ0FBQztBQUNWLFNBQU8sUUFBUSxRQUFRLENBQUM7QUFDMUI7IiwKICAibmFtZXMiOiBbXQp9Cg==