@nlabs/lex 1.48.6 → 1.49.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 (107) hide show
  1. package/.storybook/main.ts +9 -2
  2. package/.vscode/settings.json +1 -6
  3. package/README.md +276 -4
  4. package/eslint.config.mjs +24 -0
  5. package/examples/lex.config.js +18 -8
  6. package/examples/serverless-example/README.md +109 -0
  7. package/examples/serverless-example/dist/handlers/echo.js +15 -0
  8. package/examples/serverless-example/dist/handlers/graphql.js +137 -0
  9. package/examples/serverless-example/dist/handlers/hello.js +15 -0
  10. package/examples/serverless-example/dist/handlers/test.js +17 -0
  11. package/examples/serverless-example/dist/handlers/websocket.js +14 -0
  12. package/examples/serverless-example/lex.config.mjs +74 -0
  13. package/jest.config.mjs +13 -12
  14. package/{dist → lib}/LexConfig.d.ts +14 -6
  15. package/lib/LexConfig.js +268 -0
  16. package/lib/commands/ai/ai.js +303 -0
  17. package/{dist → lib}/commands/build/build.d.ts +3 -0
  18. package/lib/commands/build/build.js +494 -0
  19. package/{dist → lib}/commands/clean/clean.js +1 -1
  20. package/lib/commands/compile/compile.js +241 -0
  21. package/lib/commands/copy/copy.js +38 -0
  22. package/{dist → lib}/commands/create/create.js +1 -1
  23. package/{dist → lib}/commands/dev/dev.d.ts +2 -0
  24. package/lib/commands/dev/dev.js +286 -0
  25. package/{dist → lib}/commands/init/init.js +1 -1
  26. package/{dist → lib}/commands/lint/lint.d.ts +4 -1
  27. package/lib/commands/lint/lint.js +993 -0
  28. package/{dist → lib}/commands/migrate/migrate.js +1 -1
  29. package/lib/commands/publish/publish.js +104 -0
  30. package/lib/commands/serverless/serverless.d.ts +17 -0
  31. package/lib/commands/serverless/serverless.js +662 -0
  32. package/lib/commands/storybook/storybook.js +249 -0
  33. package/lib/commands/test/test.js +428 -0
  34. package/lib/commands/update/update.js +128 -0
  35. package/lib/commands/versions/versions.js +41 -0
  36. package/{dist → lib}/create/changelog.js +1 -1
  37. package/{dist → lib}/index.d.ts +2 -0
  38. package/{dist → lib}/index.js +3 -1
  39. package/lib/lex.js +73 -0
  40. package/lib/storybook/index.d.ts +5 -0
  41. package/lib/types.js +1 -0
  42. package/lib/utils/aiService.d.ts +9 -0
  43. package/lib/utils/aiService.js +299 -0
  44. package/{dist → lib}/utils/app.d.ts +3 -0
  45. package/lib/utils/app.js +296 -0
  46. package/lib/utils/deepMerge.js +26 -0
  47. package/{dist → lib}/utils/file.d.ts +7 -3
  48. package/lib/utils/file.js +229 -0
  49. package/lib/utils/translations.d.ts +1 -0
  50. package/lib/utils/translations.js +74 -0
  51. package/package.json +62 -50
  52. package/postcss.config.js +5 -3
  53. package/tsconfig.build.json +2 -2
  54. package/webpack.config.js +229 -39
  55. package/dist/LexConfig.js +0 -286
  56. package/dist/commands/ai/ai.js +0 -303
  57. package/dist/commands/build/build.js +0 -404
  58. package/dist/commands/compile/compile.js +0 -234
  59. package/dist/commands/copy/copy.js +0 -38
  60. package/dist/commands/dev/dev.js +0 -74
  61. package/dist/commands/lint/lint.js +0 -811
  62. package/dist/commands/publish/publish.js +0 -104
  63. package/dist/commands/storybook/storybook.js +0 -249
  64. package/dist/commands/test/test.js +0 -429
  65. package/dist/commands/update/update.js +0 -132
  66. package/dist/commands/versions/versions.js +0 -41
  67. package/dist/lex.js +0 -70
  68. package/dist/utils/aiService.d.ts +0 -9
  69. package/dist/utils/aiService.js +0 -299
  70. package/dist/utils/app.js +0 -267
  71. package/dist/utils/deepMerge.js +0 -24
  72. package/dist/utils/file.js +0 -185
  73. package/emptyModule.js +0 -0
  74. package/eslint.config.js +0 -7
  75. /package/{dist → lib}/Button.stories.d.ts +0 -0
  76. /package/{dist → lib}/commands/ai/ai.d.ts +0 -0
  77. /package/{dist → lib}/commands/ai/index.d.ts +0 -0
  78. /package/{dist → lib}/commands/ai/index.js +0 -0
  79. /package/{dist → lib}/commands/clean/clean.d.ts +0 -0
  80. /package/{dist → lib}/commands/compile/compile.d.ts +0 -0
  81. /package/{dist → lib}/commands/config/config.d.ts +0 -0
  82. /package/{dist → lib}/commands/config/config.js +0 -0
  83. /package/{dist → lib}/commands/copy/copy.d.ts +0 -0
  84. /package/{dist → lib}/commands/create/create.d.ts +0 -0
  85. /package/{dist → lib}/commands/init/init.d.ts +0 -0
  86. /package/{dist → lib}/commands/link/link.d.ts +0 -0
  87. /package/{dist → lib}/commands/link/link.js +0 -0
  88. /package/{dist → lib}/commands/lint/autofix.d.ts +0 -0
  89. /package/{dist → lib}/commands/migrate/migrate.d.ts +0 -0
  90. /package/{dist → lib}/commands/publish/publish.d.ts +0 -0
  91. /package/{dist → lib}/commands/storybook/storybook.d.ts +0 -0
  92. /package/{dist → lib}/commands/test/test.d.ts +0 -0
  93. /package/{dist → lib}/commands/update/update.d.ts +0 -0
  94. /package/{dist → lib}/commands/upgrade/upgrade.d.ts +0 -0
  95. /package/{dist → lib}/commands/upgrade/upgrade.js +0 -0
  96. /package/{dist → lib}/commands/versions/versions.d.ts +0 -0
  97. /package/{dist → lib}/create/changelog.d.ts +0 -0
  98. /package/{dist → lib}/lex.d.ts +0 -0
  99. /package/{dist/types.js → lib/storybook/index.js} +0 -0
  100. /package/{dist → lib}/test-react/index.d.ts +0 -0
  101. /package/{dist → lib}/test-react/index.js +0 -0
  102. /package/{dist → lib}/types.d.ts +0 -0
  103. /package/{dist → lib}/utils/deepMerge.d.ts +0 -0
  104. /package/{dist → lib}/utils/log.d.ts +0 -0
  105. /package/{dist → lib}/utils/log.js +0 -0
  106. /package/{dist → lib}/utils/reactShim.d.ts +0 -0
  107. /package/{dist → lib}/utils/reactShim.js +0 -0
@@ -1,234 +0,0 @@
1
- import { execa } from "execa";
2
- import { existsSync, lstatSync, readdirSync } from "fs";
3
- import { sync as globSync } from "glob";
4
- import { extname as pathExtname, join as pathJoin, resolve as pathResolve } from "path";
5
- import { LexConfig, getTypeScriptConfigPath } from "../../LexConfig.js";
6
- import { checkLinkedModules, copyConfiguredFiles, copyFiles, createSpinner, getFilesByExt, removeFiles } from "../../utils/app.js";
7
- import { getDirName, resolveBinaryPath } from "../../utils/file.js";
8
- import { log } from "../../utils/log.js";
9
- const hasFileType = (startPath, ext) => {
10
- if (!existsSync(startPath)) {
11
- return false;
12
- }
13
- const files = readdirSync(startPath);
14
- return files.some((file) => {
15
- const filename = pathJoin(startPath, file);
16
- const fileExt = pathExtname(filename);
17
- const stat = lstatSync(filename);
18
- if (stat.isDirectory()) {
19
- return hasFileType(filename, ext);
20
- }
21
- return ext.includes(fileExt);
22
- });
23
- };
24
- const compile = async (cmd, callback = () => ({})) => {
25
- const {
26
- cliName = "Lex",
27
- config,
28
- outputPath,
29
- quiet,
30
- remove,
31
- sourcePath,
32
- watch
33
- } = cmd;
34
- const spinner = createSpinner(quiet);
35
- log(`${cliName} compiling...`, "info", quiet);
36
- await LexConfig.parseConfig(cmd);
37
- const { outputFullPath, sourceFullPath, useTypescript } = LexConfig.config;
38
- const outputDir = outputPath || outputFullPath;
39
- const sourceDir = sourcePath ? pathResolve(process.cwd(), `./${sourcePath}`) : sourceFullPath || "";
40
- const dirName = getDirName();
41
- const dirPath = pathResolve(dirName, "../..");
42
- checkLinkedModules();
43
- if (remove) {
44
- await removeFiles(outputDir);
45
- }
46
- if (useTypescript) {
47
- LexConfig.checkCompileTypescriptConfig();
48
- const typescriptPath = resolveBinaryPath("tsc", "typescript");
49
- if (!typescriptPath) {
50
- log(`
51
- ${cliName} Error: TypeScript binary not found in Lex's node_modules or monorepo root`, "error", quiet);
52
- log("Please reinstall Lex or check your installation.", "info", quiet);
53
- return 1;
54
- }
55
- const typescriptOptions = config ? ["-p", config] : ["-p", getTypeScriptConfigPath("tsconfig.build.json")];
56
- spinner.start("Static type checking with Typescript...");
57
- try {
58
- await execa(typescriptPath, typescriptOptions, { encoding: "utf8" });
59
- spinner.succeed("Successfully completed type checking!");
60
- } catch (error) {
61
- log(`
62
- ${cliName} Error: ${error.message}`, "error", quiet);
63
- spinner.fail("Type checking failed.");
64
- callback(1);
65
- return 1;
66
- }
67
- }
68
- const globOptions = {
69
- cwd: sourceDir,
70
- dot: false,
71
- nodir: true,
72
- nosort: true
73
- };
74
- const tsFiles = globSync(`${sourceDir}/**/!(*.spec|*.test).ts*`, globOptions);
75
- const jsFiles = globSync(`${sourceDir}/**/!(*.spec|*.test).js`, globOptions);
76
- const sourceFiles = [...tsFiles, ...jsFiles];
77
- const esbuildConfig = LexConfig.config.esbuild || {};
78
- const esbuildPath = resolveBinaryPath("esbuild", "esbuild");
79
- if (!esbuildPath) {
80
- log(`
81
- ${cliName} Error: esbuild binary not found in Lex's node_modules or monorepo root`, "error", quiet);
82
- log("Please reinstall Lex or check your installation.", "info", quiet);
83
- return 1;
84
- }
85
- const esbuildOptions = [
86
- ...sourceFiles,
87
- "--color=true",
88
- `--format=${esbuildConfig.format || "esm"}`,
89
- `--outdir=${outputDir}`,
90
- `--platform=${esbuildConfig.platform || "node"}`,
91
- `--sourcemap=${esbuildConfig.sourcemap || "inline"}`,
92
- `--target=${esbuildConfig.target || "node20"}`
93
- ];
94
- if (esbuildConfig.minify === true) {
95
- esbuildOptions.push("--minify");
96
- }
97
- if (esbuildConfig.treeShaking !== false) {
98
- esbuildOptions.push("--tree-shaking=true");
99
- }
100
- if (esbuildConfig.drop && esbuildConfig.drop.length > 0) {
101
- esbuildConfig.drop.forEach((item) => {
102
- esbuildOptions.push(`--drop:${item}`);
103
- });
104
- }
105
- if (esbuildConfig.pure && esbuildConfig.pure.length > 0) {
106
- esbuildConfig.pure.forEach((item) => {
107
- esbuildOptions.push(`--pure:${item}`);
108
- });
109
- }
110
- if (esbuildConfig.legalComments) {
111
- esbuildOptions.push(`--legal-comments=${esbuildConfig.legalComments}`);
112
- }
113
- if (esbuildConfig.banner) {
114
- Object.entries(esbuildConfig.banner).forEach(([type, content]) => {
115
- esbuildOptions.push(`--banner:${type}=${content}`);
116
- });
117
- }
118
- if (esbuildConfig.footer) {
119
- Object.entries(esbuildConfig.footer).forEach(([type, content]) => {
120
- esbuildOptions.push(`--footer:${type}=${content}`);
121
- });
122
- }
123
- if (esbuildConfig.define) {
124
- Object.entries(esbuildConfig.define).forEach(([key, value]) => {
125
- esbuildOptions.push(`--define:${key}=${value}`);
126
- });
127
- }
128
- if (watch) {
129
- esbuildOptions.push("--watch");
130
- }
131
- const cssFiles = getFilesByExt(".css", LexConfig.config);
132
- if (cssFiles.length) {
133
- const postcssPath = resolveBinaryPath("postcss", "postcss-cli");
134
- if (!postcssPath) {
135
- log(`
136
- ${cliName} Error: PostCSS binary not found in Lex's node_modules or monorepo root`, "error", quiet);
137
- log("Please reinstall Lex or check your installation.", "info", quiet);
138
- return 1;
139
- }
140
- const postcssOptions = [
141
- `${sourceDir}/**/**.css`,
142
- "--base",
143
- sourceDir,
144
- "--dir",
145
- outputDir,
146
- "--config",
147
- pathResolve(dirName, "../../postcss.config.js")
148
- ];
149
- try {
150
- await execa(postcssPath, postcssOptions, { encoding: "utf8" });
151
- spinner.succeed(`Successfully formatted ${cssFiles.length} css files!`);
152
- } catch (error) {
153
- log(`
154
- ${cliName} Error: ${error.message}`, "error", quiet);
155
- spinner.fail("Failed formatting css.");
156
- callback(1);
157
- return 1;
158
- }
159
- }
160
- const gifFiles = getFilesByExt(".gif", LexConfig.config);
161
- const jpgFiles = getFilesByExt(".jpg", LexConfig.config);
162
- const pngFiles = getFilesByExt(".png", LexConfig.config);
163
- const svgFiles = getFilesByExt(".svg", LexConfig.config);
164
- const imageFiles = [...gifFiles, ...jpgFiles, ...pngFiles, ...svgFiles];
165
- if (imageFiles.length) {
166
- try {
167
- await copyFiles(imageFiles, "image", spinner, LexConfig.config);
168
- } catch (error) {
169
- log(`
170
- ${cliName} Error: ${error.message}`, "error", quiet);
171
- spinner.fail("Failed to move images to output directory.");
172
- callback(1);
173
- return 1;
174
- }
175
- }
176
- const ttfFiles = getFilesByExt(".ttf", LexConfig.config);
177
- const otfFiles = getFilesByExt(".otf", LexConfig.config);
178
- const woffFiles = getFilesByExt(".woff", LexConfig.config);
179
- const woff2Files = getFilesByExt(".woff2", LexConfig.config);
180
- const fontFiles = [...ttfFiles, ...otfFiles, ...woffFiles, ...woff2Files];
181
- if (fontFiles.length) {
182
- try {
183
- await copyFiles(fontFiles, "font", spinner, LexConfig.config);
184
- } catch (error) {
185
- log(`
186
- ${cliName} Error: ${error.message}`, "error", quiet);
187
- spinner.fail("Failed to move fonts to output directory.");
188
- callback(1);
189
- return 1;
190
- }
191
- }
192
- const mdFiles = getFilesByExt(".md", LexConfig.config);
193
- if (mdFiles.length) {
194
- try {
195
- await copyFiles(mdFiles, "documents", spinner, LexConfig.config);
196
- } catch (error) {
197
- log(`
198
- ${cliName} Error: ${error.message}`, "error", quiet);
199
- spinner.fail("Failed to move docs to output directory.");
200
- callback(1);
201
- return 1;
202
- }
203
- }
204
- spinner.start(watch ? "Watching for changes..." : "Compiling with ESBuild...");
205
- try {
206
- await execa(esbuildPath, esbuildOptions, { encoding: "utf8" });
207
- spinner.succeed("Compile completed successfully!");
208
- } catch (error) {
209
- log(`
210
- ${cliName} Error: ${error.message}`, "error", quiet);
211
- if (!quiet) {
212
- console.error(error);
213
- }
214
- spinner.fail("Code compiling failed.");
215
- callback(1);
216
- return 1;
217
- }
218
- try {
219
- await copyConfiguredFiles(spinner, LexConfig.config, quiet);
220
- } catch (copyError) {
221
- log(`
222
- ${cliName} Error: Failed to copy configured files: ${copyError.message}`, "error", quiet);
223
- spinner.fail("Failed to copy configured files.");
224
- callback(1);
225
- return 1;
226
- }
227
- callback(0);
228
- return 0;
229
- };
230
- export {
231
- compile,
232
- hasFileType
233
- };
234
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7ZXhpc3RzU3luYywgbHN0YXRTeW5jLCByZWFkZGlyU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7TGV4Q29uZmlnLCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aH0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y2hlY2tMaW5rZWRNb2R1bGVzLCBjb3B5Q29uZmlndXJlZEZpbGVzLCBjb3B5RmlsZXMsIGNyZWF0ZVNwaW5uZXIsIGdldEZpbGVzQnlFeHQsIHJlbW92ZUZpbGVzfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtnZXREaXJOYW1lLCByZXNvbHZlQmluYXJ5UGF0aH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGNvbnN0IGhhc0ZpbGVUeXBlID0gKHN0YXJ0UGF0aDogc3RyaW5nLCBleHQ6IHN0cmluZ1tdKTogYm9vbGVhbiA9PiB7XG4gIGlmKCFleGlzdHNTeW5jKHN0YXJ0UGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBmaWxlczogc3RyaW5nW10gPSByZWFkZGlyU3luYyhzdGFydFBhdGgpO1xuXG4gIHJldHVybiBmaWxlcy5zb21lKChmaWxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBmaWxlbmFtZTogc3RyaW5nID0gcGF0aEpvaW4oc3RhcnRQYXRoLCBmaWxlKTtcbiAgICBjb25zdCBmaWxlRXh0OiBzdHJpbmcgPSBwYXRoRXh0bmFtZShmaWxlbmFtZSk7XG4gICAgY29uc3Qgc3RhdCA9IGxzdGF0U3luYyhmaWxlbmFtZSk7XG5cbiAgICBpZihzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIC8vIFJlY3Vyc2l2ZSBzZWFyY2hcbiAgICAgIHJldHVybiBoYXNGaWxlVHlwZShmaWxlbmFtZSwgZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXh0LmluY2x1ZGVzKGZpbGVFeHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21waWxlID0gYXN5bmMgKGNtZDogYW55LCBjYWxsYmFjazogYW55ID0gKCkgPT4gKHt9KSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIG91dHB1dFBhdGgsXG4gICAgcXVpZXQsXG4gICAgcmVtb3ZlLFxuICAgIHNvdXJjZVBhdGgsXG4gICAgd2F0Y2hcbiAgfSA9IGNtZDtcblxuICAvLyBTcGlubmVyXG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICAvLyBEaXNwbGF5IHN0YXR1c1xuICBsb2coYCR7Y2xpTmFtZX0gY29tcGlsaW5nLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjb25maWd1cmF0aW9uXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIC8vIENvbXBpbGUgdHlwZVxuICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIHNvdXJjZUZ1bGxQYXRoLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG4gIGNvbnN0IG91dHB1dERpcjogc3RyaW5nID0gb3V0cHV0UGF0aCB8fCBvdXRwdXRGdWxsUGF0aDtcbiAgY29uc3Qgc291cmNlRGlyOiBzdHJpbmcgPSBzb3VyY2VQYXRoID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYC4vJHtzb3VyY2VQYXRofWApIDogc291cmNlRnVsbFBhdGggfHwgJyc7XG4gIGNvbnN0IGRpck5hbWUgPSBnZXREaXJOYW1lKCk7XG4gIGNvbnN0IGRpclBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGRpck5hbWUsICcuLi8uLicpO1xuXG4gIC8vIENoZWNrIGZvciBsaW5rZWQgbW9kdWxlc1xuICBjaGVja0xpbmtlZE1vZHVsZXMoKTtcblxuICAvLyBDbGVhbiBvdXRwdXQgZGlyZWN0b3J5IGJlZm9yZSB3ZSBzdGFydCBhZGRpbmcgaW4gbmV3IGZpbGVzXG4gIGlmKHJlbW92ZSkge1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKG91dHB1dERpcik7XG4gIH1cblxuICAvLyBBZGQgdHNjb25maWcgZmlsZSBpZiBub25lIGV4aXN0c1xuICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgLy8gTWFrZSBzdXJlIHRzY29uZmlnLmJ1aWxkLmpzb24gZXhpc3RzXG4gICAgTGV4Q29uZmlnLmNoZWNrQ29tcGlsZVR5cGVzY3JpcHRDb25maWcoKTtcblxuICAgIC8vIFVzZSByb2J1c3QgcGF0aCByZXNvbHV0aW9uIGZvciBUeXBlU2NyaXB0IGJpbmFyeVxuICAgIGNvbnN0IHR5cGVzY3JpcHRQYXRoOiBzdHJpbmcgPSByZXNvbHZlQmluYXJ5UGF0aCgndHNjJywgJ3R5cGVzY3JpcHQnKTtcblxuICAgIC8vIENoZWNrIGlmIFR5cGVTY3JpcHQgYmluYXJ5IGV4aXN0c1xuICAgIGlmKCF0eXBlc2NyaXB0UGF0aCkge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGJpbmFyeSBub3QgZm91bmQgaW4gTGV4J3Mgbm9kZV9tb2R1bGVzIG9yIG1vbm9yZXBvIHJvb3RgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBsb2coJ1BsZWFzZSByZWluc3RhbGwgTGV4IG9yIGNoZWNrIHlvdXIgaW5zdGFsbGF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXNjcmlwdE9wdGlvbnM6IHN0cmluZ1tdID0gY29uZmlnID9cbiAgICAgIFsnLXAnLCBjb25maWddIDpcbiAgICAgIFsnLXAnLCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCgndHNjb25maWcuYnVpbGQuanNvbicpXTtcblxuICAgIC8vIFN0YXJ0IHR5cGUgY2hlY2tpbmcgc3Bpbm5lclxuICAgIHNwaW5uZXIuc3RhcnQoJ1N0YXRpYyB0eXBlIGNoZWNraW5nIHdpdGggVHlwZXNjcmlwdC4uLicpO1xuXG4gICAgLy8gVHlwZSBjaGVja2luZ1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjYSh0eXBlc2NyaXB0UGF0aCwgdHlwZXNjcmlwdE9wdGlvbnMsIHtlbmNvZGluZzogJ3V0ZjgnfSk7XG5cbiAgICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdTdWNjZXNzZnVsbHkgY29tcGxldGVkIHR5cGUgY2hlY2tpbmchJyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlXG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgICAgc3Bpbm5lci5mYWlsKCdUeXBlIGNoZWNraW5nIGZhaWxlZC4nKTtcblxuICAgICAgLy8gS2lsbCBQcm9jZXNzXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNvdXJjZSBmaWxlc1xuICBjb25zdCBnbG9iT3B0aW9ucyA9IHtcbiAgICBjd2Q6IHNvdXJjZURpcixcbiAgICBkb3Q6IGZhbHNlLFxuICAgIG5vZGlyOiB0cnVlLFxuICAgIG5vc29ydDogdHJ1ZVxuICB9O1xuICBjb25zdCB0c0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKGAke3NvdXJjZURpcn0vKiovISgqLnNwZWN8Ki50ZXN0KS50cypgLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IGpzRmlsZXM6IHN0cmluZ1tdID0gZ2xvYlN5bmMoYCR7c291cmNlRGlyfS8qKi8hKCouc3BlY3wqLnRlc3QpLmpzYCwgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBzb3VyY2VGaWxlczogc3RyaW5nW10gPSBbLi4udHNGaWxlcywgLi4uanNGaWxlc107XG5cbiAgLy8gR2V0IGVzYnVpbGQgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHRzIGZvciBjb21waWxlIChpbmRpdmlkdWFsIGZpbGVzKVxuICBjb25zdCBlc2J1aWxkQ29uZmlnID0gTGV4Q29uZmlnLmNvbmZpZy5lc2J1aWxkIHx8IHt9O1xuXG4gIC8vIEVTQnVpbGQgb3B0aW9uc1xuICBjb25zdCBlc2J1aWxkUGF0aDogc3RyaW5nID0gcmVzb2x2ZUJpbmFyeVBhdGgoJ2VzYnVpbGQnLCAnZXNidWlsZCcpO1xuXG4gIC8vIENoZWNrIGlmIGVzYnVpbGQgYmluYXJ5IGV4aXN0c1xuICBpZighZXNidWlsZFBhdGgpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IGVzYnVpbGQgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coJ1BsZWFzZSByZWluc3RhbGwgTGV4IG9yIGNoZWNrIHlvdXIgaW5zdGFsbGF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY29uc3QgZXNidWlsZE9wdGlvbnM6IHN0cmluZ1tdID0gW1xuICAgIC4uLnNvdXJjZUZpbGVzLFxuICAgICctLWNvbG9yPXRydWUnLFxuICAgIGAtLWZvcm1hdD0ke2VzYnVpbGRDb25maWcuZm9ybWF0IHx8ICdlc20nfWAsXG4gICAgYC0tb3V0ZGlyPSR7b3V0cHV0RGlyfWAsXG4gICAgYC0tcGxhdGZvcm09JHtlc2J1aWxkQ29uZmlnLnBsYXRmb3JtIHx8ICdub2RlJ31gLFxuICAgIGAtLXNvdXJjZW1hcD0ke2VzYnVpbGRDb25maWcuc291cmNlbWFwIHx8ICdpbmxpbmUnfWAsXG4gICAgYC0tdGFyZ2V0PSR7ZXNidWlsZENvbmZpZy50YXJnZXQgfHwgJ25vZGUyMCd9YFxuICBdO1xuXG4gIC8vIEFwcGx5IG9wdGltaXphdGlvbiBvcHRpb25zIGZvciBjb21waWxlIChtb3JlIGNvbnNlcnZhdGl2ZSBkZWZhdWx0cylcbiAgaWYoZXNidWlsZENvbmZpZy5taW5pZnkgPT09IHRydWUpIHtcbiAgICBlc2J1aWxkT3B0aW9ucy5wdXNoKCctLW1pbmlmeScpO1xuICB9XG5cbiAgaWYoZXNidWlsZENvbmZpZy50cmVlU2hha2luZyAhPT0gZmFsc2UpIHtcbiAgICBlc2J1aWxkT3B0aW9ucy5wdXNoKCctLXRyZWUtc2hha2luZz10cnVlJyk7XG4gIH1cblxuICBpZihlc2J1aWxkQ29uZmlnLmRyb3AgJiYgZXNidWlsZENvbmZpZy5kcm9wLmxlbmd0aCA+IDApIHtcbiAgICBlc2J1aWxkQ29uZmlnLmRyb3AuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgZXNidWlsZE9wdGlvbnMucHVzaChgLS1kcm9wOiR7aXRlbX1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmKGVzYnVpbGRDb25maWcucHVyZSAmJiBlc2J1aWxkQ29uZmlnLnB1cmUubGVuZ3RoID4gMCkge1xuICAgIGVzYnVpbGRDb25maWcucHVyZS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBlc2J1aWxkT3B0aW9ucy5wdXNoKGAtLXB1cmU6JHtpdGVtfWApO1xuICAgIH0pO1xuICB9XG5cbiAgaWYoZXNidWlsZENvbmZpZy5sZWdhbENvbW1lbnRzKSB7XG4gICAgZXNidWlsZE9wdGlvbnMucHVzaChgLS1sZWdhbC1jb21tZW50cz0ke2VzYnVpbGRDb25maWcubGVnYWxDb21tZW50c31gKTtcbiAgfVxuXG4gIGlmKGVzYnVpbGRDb25maWcuYmFubmVyKSB7XG4gICAgT2JqZWN0LmVudHJpZXMoZXNidWlsZENvbmZpZy5iYW5uZXIpLmZvckVhY2goKFt0eXBlLCBjb250ZW50XSkgPT4ge1xuICAgICAgZXNidWlsZE9wdGlvbnMucHVzaChgLS1iYW5uZXI6JHt0eXBlfT0ke2NvbnRlbnR9YCk7XG4gICAgfSk7XG4gIH1cblxuICBpZihlc2J1aWxkQ29uZmlnLmZvb3Rlcikge1xuICAgIE9iamVjdC5lbnRyaWVzKGVzYnVpbGRDb25maWcuZm9vdGVyKS5mb3JFYWNoKChbdHlwZSwgY29udGVudF0pID0+IHtcbiAgICAgIGVzYnVpbGRPcHRpb25zLnB1c2goYC0tZm9vdGVyOiR7dHlwZX09JHtjb250ZW50fWApO1xuICAgIH0pO1xuICB9XG5cbiAgaWYoZXNidWlsZENvbmZpZy5kZWZpbmUpIHtcbiAgICBPYmplY3QuZW50cmllcyhlc2J1aWxkQ29uZmlnLmRlZmluZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBlc2J1aWxkT3B0aW9ucy5wdXNoKGAtLWRlZmluZToke2tleX09JHt2YWx1ZX1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmKHdhdGNoKSB7XG4gICAgZXNidWlsZE9wdGlvbnMucHVzaCgnLS13YXRjaCcpO1xuICB9XG5cbiAgLy8gVXNlIFBvc3RDU1MgZm9yIENTUyBmaWxlc1xuICBjb25zdCBjc3NGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuY3NzJywgTGV4Q29uZmlnLmNvbmZpZyk7XG5cbiAgaWYoY3NzRmlsZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgcG9zdGNzc1BhdGg6IHN0cmluZyA9IHJlc29sdmVCaW5hcnlQYXRoKCdwb3N0Y3NzJywgJ3Bvc3Rjc3MtY2xpJyk7XG5cbiAgICAvLyBDaGVjayBpZiBQb3N0Q1NTIGJpbmFyeSBleGlzdHNcbiAgICBpZighcG9zdGNzc1BhdGgpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogUG9zdENTUyBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgbG9nKCdQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc3Rjc3NPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAgIGAke3NvdXJjZURpcn0vKiovKiouY3NzYCxcbiAgICAgICctLWJhc2UnLFxuICAgICAgc291cmNlRGlyLFxuICAgICAgJy0tZGlyJyxcbiAgICAgIG91dHB1dERpcixcbiAgICAgICctLWNvbmZpZycsXG4gICAgICBwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4vcG9zdGNzcy5jb25maWcuanMnKVxuICAgIF07XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlY2EocG9zdGNzc1BhdGgsIHBvc3Rjc3NPcHRpb25zLCB7ZW5jb2Rpbmc6ICd1dGY4J30pO1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgZm9ybWF0dGVkICR7Y3NzRmlsZXMubGVuZ3RofSBjc3MgZmlsZXMhYCk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlXG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgZm9ybWF0dGluZyBjc3MuJyk7XG5cbiAgICAgIC8vIEtpbGwgUHJvY2Vzc1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICAvLyBDb3B5IGltYWdlIGZpbGVzXG4gIGNvbnN0IGdpZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5naWYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QganBnRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLmpwZycsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBwbmdGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcucG5nJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IHN2Z0ZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5zdmcnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgaW1hZ2VGaWxlczogc3RyaW5nW10gPSBbLi4uZ2lmRmlsZXMsIC4uLmpwZ0ZpbGVzLCAuLi5wbmdGaWxlcywgLi4uc3ZnRmlsZXNdO1xuXG4gIGlmKGltYWdlRmlsZXMubGVuZ3RoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvcHlGaWxlcyhpbWFnZUZpbGVzLCAnaW1hZ2UnLCBzcGlubmVyLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2VcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgLy8gU3RvcCBzcGlubmVyXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBtb3ZlIGltYWdlcyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICAvLyBLaWxsIFByb2Nlc3NcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgLy8gQ29weSBmb250IGZpbGVzXG4gIGNvbnN0IHR0ZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy50dGYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgb3RmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLm90ZicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCB3b2ZmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLndvZmYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgd29mZjJGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcud29mZjInLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgZm9udEZpbGVzOiBzdHJpbmdbXSA9IFsuLi50dGZGaWxlcywgLi4ub3RmRmlsZXMsIC4uLndvZmZGaWxlcywgLi4ud29mZjJGaWxlc107XG5cbiAgaWYoZm9udEZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMoZm9udEZpbGVzLCAnZm9udCcsIHNwaW5uZXIsIExleENvbmZpZy5jb25maWcpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIC8vIERpc3BsYXkgZXJyb3IgbWVzc2FnZVxuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIG1vdmUgZm9udHMgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgLy8gS2lsbCBQcm9jZXNzXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvcHkgbWFya2Rvd24gZmlsZXNcbiAgY29uc3QgbWRGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcubWQnLCBMZXhDb25maWcuY29uZmlnKTtcblxuICBpZihtZEZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMobWRGaWxlcywgJ2RvY3VtZW50cycsIHNwaW5uZXIsIExleENvbmZpZy5jb25maWcpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIC8vIERpc3BsYXkgZXJyb3IgbWVzc2FnZVxuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIG1vdmUgZG9jcyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICAvLyBLaWxsIFByb2Nlc3NcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhcnQgY29tcGlsZSBzcGlubmVyXG4gIHNwaW5uZXIuc3RhcnQod2F0Y2ggPyAnV2F0Y2hpbmcgZm9yIGNoYW5nZXMuLi4nIDogJ0NvbXBpbGluZyB3aXRoIEVTQnVpbGQuLi4nKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGV4ZWNhKGVzYnVpbGRQYXRoLCBlc2J1aWxkT3B0aW9ucywge2VuY29kaW5nOiAndXRmOCd9KTtcblxuICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQ29tcGlsZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgLy8gRGlzcGxheSBlcnJvciBtZXNzYWdlXG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG5cbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBzcGlubmVyLmZhaWwoJ0NvZGUgY29tcGlsaW5nIGZhaWxlZC4nKTtcblxuICAgIC8vIEtpbGwgUHJvY2Vzc1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgLy8gQ29weSBjb25maWd1cmVkIGZpbGVzIGFmdGVyIHN1Y2Nlc3NmdWwgY29tcGlsYXRpb25cbiAgdHJ5IHtcbiAgICBhd2FpdCBjb3B5Q29uZmlndXJlZEZpbGVzKHNwaW5uZXIsIExleENvbmZpZy5jb25maWcsIHF1aWV0KTtcbiAgfSBjYXRjaChjb3B5RXJyb3IpIHtcbiAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2VcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBjb3B5IGNvbmZpZ3VyZWQgZmlsZXM6ICR7Y29weUVycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgLy8gU3RvcCBzcGlubmVyXG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzLicpO1xuXG4gICAgLy8gS2lsbCBQcm9jZXNzXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICAvLyBTdG9wIHByb2Nlc3NcbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiAwO1xufTsiXSwKICAibWFwcGluZ3MiOiAiQUFJQSxTQUFRLGFBQVk7QUFDcEIsU0FBUSxZQUFZLFdBQVcsbUJBQWtCO0FBQ2pELFNBQVEsUUFBUSxnQkFBZTtBQUMvQixTQUFRLFdBQVcsYUFBYSxRQUFRLFVBQVUsV0FBVyxtQkFBa0I7QUFFL0UsU0FBUSxXQUFXLCtCQUE4QjtBQUNqRCxTQUFRLG9CQUFvQixxQkFBcUIsV0FBVyxlQUFlLGVBQWUsbUJBQWtCO0FBQzVHLFNBQVEsWUFBWSx5QkFBd0I7QUFDNUMsU0FBUSxXQUFVO0FBRVgsTUFBTSxjQUFjLENBQUMsV0FBbUIsUUFBMkI7QUFDeEUsTUFBRyxDQUFDLFdBQVcsU0FBUyxHQUFHO0FBQ3pCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxRQUFrQixZQUFZLFNBQVM7QUFFN0MsU0FBTyxNQUFNLEtBQUssQ0FBQyxTQUFpQjtBQUNsQyxVQUFNLFdBQW1CLFNBQVMsV0FBVyxJQUFJO0FBQ2pELFVBQU0sVUFBa0IsWUFBWSxRQUFRO0FBQzVDLFVBQU0sT0FBTyxVQUFVLFFBQVE7QUFFL0IsUUFBRyxLQUFLLFlBQVksR0FBRztBQUVyQixhQUFPLFlBQVksVUFBVSxHQUFHO0FBQUEsSUFDbEM7QUFFQSxXQUFPLElBQUksU0FBUyxPQUFPO0FBQUEsRUFDN0IsQ0FBQztBQUNIO0FBRU8sTUFBTSxVQUFVLE9BQU8sS0FBVSxXQUFnQixPQUFPLENBQUMsT0FBd0I7QUFDdEYsUUFBTTtBQUFBLElBQ0osVUFBVTtBQUFBLElBQ1Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUdKLFFBQU0sVUFBVSxjQUFjLEtBQUs7QUFHbkMsTUFBSSxHQUFHLE9BQU8saUJBQWlCLFFBQVEsS0FBSztBQUc1QyxRQUFNLFVBQVUsWUFBWSxHQUFHO0FBRy9CLFFBQU0sRUFBQyxnQkFBZ0IsZ0JBQWdCLGNBQWEsSUFBSSxVQUFVO0FBQ2xFLFFBQU0sWUFBb0IsY0FBYztBQUN4QyxRQUFNLFlBQW9CLGFBQWEsWUFBWSxRQUFRLElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRSxJQUFJLGtCQUFrQjtBQUN6RyxRQUFNLFVBQVUsV0FBVztBQUMzQixRQUFNLFVBQWtCLFlBQVksU0FBUyxPQUFPO0FBR3BELHFCQUFtQjtBQUduQixNQUFHLFFBQVE7QUFDVCxVQUFNLFlBQVksU0FBUztBQUFBLEVBQzdCO0FBR0EsTUFBRyxlQUFlO0FBRWhCLGNBQVUsNkJBQTZCO0FBR3ZDLFVBQU0saUJBQXlCLGtCQUFrQixPQUFPLFlBQVk7QUFHcEUsUUFBRyxDQUFDLGdCQUFnQjtBQUNsQixVQUFJO0FBQUEsRUFBSyxPQUFPLDhFQUE4RSxTQUFTLEtBQUs7QUFDNUcsVUFBSSxvREFBb0QsUUFBUSxLQUFLO0FBQ3JFLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxvQkFBOEIsU0FDbEMsQ0FBQyxNQUFNLE1BQU0sSUFDYixDQUFDLE1BQU0sd0JBQXdCLHFCQUFxQixDQUFDO0FBR3ZELFlBQVEsTUFBTSx5Q0FBeUM7QUFHdkQsUUFBSTtBQUNGLFlBQU0sTUFBTSxnQkFBZ0IsbUJBQW1CLEVBQUMsVUFBVSxPQUFNLENBQUM7QUFHakUsY0FBUSxRQUFRLHVDQUF1QztBQUFBLElBQ3pELFNBQVEsT0FBTztBQUViLFVBQUk7QUFBQSxFQUFLLE9BQU8sV0FBVyxNQUFNLE9BQU8sSUFBSSxTQUFTLEtBQUs7QUFHMUQsY0FBUSxLQUFLLHVCQUF1QjtBQUdwQyxlQUFTLENBQUM7QUFDVixhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFHQSxRQUFNLGNBQWM7QUFBQSxJQUNsQixLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxPQUFPO0FBQUEsSUFDUCxRQUFRO0FBQUEsRUFDVjtBQUNBLFFBQU0sVUFBb0IsU0FBUyxHQUFHLFNBQVMsNEJBQTRCLFdBQVc7QUFDdEYsUUFBTSxVQUFvQixTQUFTLEdBQUcsU0FBUywyQkFBMkIsV0FBVztBQUNyRixRQUFNLGNBQXdCLENBQUMsR0FBRyxTQUFTLEdBQUcsT0FBTztBQUdyRCxRQUFNLGdCQUFnQixVQUFVLE9BQU8sV0FBVyxDQUFDO0FBR25ELFFBQU0sY0FBc0Isa0JBQWtCLFdBQVcsU0FBUztBQUdsRSxNQUFHLENBQUMsYUFBYTtBQUNmLFFBQUk7QUFBQSxFQUFLLE9BQU8sMkVBQTJFLFNBQVMsS0FBSztBQUN6RyxRQUFJLG9EQUFvRCxRQUFRLEtBQUs7QUFDckUsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGlCQUEyQjtBQUFBLElBQy9CLEdBQUc7QUFBQSxJQUNIO0FBQUEsSUFDQSxZQUFZLGNBQWMsVUFBVSxLQUFLO0FBQUEsSUFDekMsWUFBWSxTQUFTO0FBQUEsSUFDckIsY0FBYyxjQUFjLFlBQVksTUFBTTtBQUFBLElBQzlDLGVBQWUsY0FBYyxhQUFhLFFBQVE7QUFBQSxJQUNsRCxZQUFZLGNBQWMsVUFBVSxRQUFRO0FBQUEsRUFDOUM7QUFHQSxNQUFHLGNBQWMsV0FBVyxNQUFNO0FBQ2hDLG1CQUFlLEtBQUssVUFBVTtBQUFBLEVBQ2hDO0FBRUEsTUFBRyxjQUFjLGdCQUFnQixPQUFPO0FBQ3RDLG1CQUFlLEtBQUsscUJBQXFCO0FBQUEsRUFDM0M7QUFFQSxNQUFHLGNBQWMsUUFBUSxjQUFjLEtBQUssU0FBUyxHQUFHO0FBQ3RELGtCQUFjLEtBQUssUUFBUSxDQUFDLFNBQVM7QUFDbkMscUJBQWUsS0FBSyxVQUFVLElBQUksRUFBRTtBQUFBLElBQ3RDLENBQUM7QUFBQSxFQUNIO0FBRUEsTUFBRyxjQUFjLFFBQVEsY0FBYyxLQUFLLFNBQVMsR0FBRztBQUN0RCxrQkFBYyxLQUFLLFFBQVEsQ0FBQyxTQUFTO0FBQ25DLHFCQUFlLEtBQUssVUFBVSxJQUFJLEVBQUU7QUFBQSxJQUN0QyxDQUFDO0FBQUEsRUFDSDtBQUVBLE1BQUcsY0FBYyxlQUFlO0FBQzlCLG1CQUFlLEtBQUssb0JBQW9CLGNBQWMsYUFBYSxFQUFFO0FBQUEsRUFDdkU7QUFFQSxNQUFHLGNBQWMsUUFBUTtBQUN2QixXQUFPLFFBQVEsY0FBYyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsTUFBTSxPQUFPLE1BQU07QUFDaEUscUJBQWUsS0FBSyxZQUFZLElBQUksSUFBSSxPQUFPLEVBQUU7QUFBQSxJQUNuRCxDQUFDO0FBQUEsRUFDSDtBQUVBLE1BQUcsY0FBYyxRQUFRO0FBQ3ZCLFdBQU8sUUFBUSxjQUFjLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNLE9BQU8sTUFBTTtBQUNoRSxxQkFBZSxLQUFLLFlBQVksSUFBSSxJQUFJLE9BQU8sRUFBRTtBQUFBLElBQ25ELENBQUM7QUFBQSxFQUNIO0FBRUEsTUFBRyxjQUFjLFFBQVE7QUFDdkIsV0FBTyxRQUFRLGNBQWMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNO0FBQzdELHFCQUFlLEtBQUssWUFBWSxHQUFHLElBQUksS0FBSyxFQUFFO0FBQUEsSUFDaEQsQ0FBQztBQUFBLEVBQ0g7QUFFQSxNQUFHLE9BQU87QUFDUixtQkFBZSxLQUFLLFNBQVM7QUFBQSxFQUMvQjtBQUdBLFFBQU0sV0FBcUIsY0FBYyxRQUFRLFVBQVUsTUFBTTtBQUVqRSxNQUFHLFNBQVMsUUFBUTtBQUNsQixVQUFNLGNBQXNCLGtCQUFrQixXQUFXLGFBQWE7QUFHdEUsUUFBRyxDQUFDLGFBQWE7QUFDZixVQUFJO0FBQUEsRUFBSyxPQUFPLDJFQUEyRSxTQUFTLEtBQUs7QUFDekcsVUFBSSxvREFBb0QsUUFBUSxLQUFLO0FBQ3JFLGFBQU87QUFBQSxJQUNUO0FBRUEsVUFBTSxpQkFBMkI7QUFBQSxNQUMvQixHQUFHLFNBQVM7QUFBQSxNQUNaO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0EsWUFBWSxTQUFTLHlCQUF5QjtBQUFBLElBQ2hEO0FBRUEsUUFBSTtBQUNGLFlBQU0sTUFBTSxhQUFhLGdCQUFnQixFQUFDLFVBQVUsT0FBTSxDQUFDO0FBQzNELGNBQVEsUUFBUSwwQkFBMEIsU0FBUyxNQUFNLGFBQWE7QUFBQSxJQUN4RSxTQUFRLE9BQU87QUFFYixVQUFJO0FBQUEsRUFBSyxPQUFPLFdBQVcsTUFBTSxPQUFPLElBQUksU0FBUyxLQUFLO0FBRzFELGNBQVEsS0FBSyx3QkFBd0I7QUFHckMsZUFBUyxDQUFDO0FBQ1YsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBR0EsUUFBTSxXQUFxQixjQUFjLFFBQVEsVUFBVSxNQUFNO0FBQ2pFLFFBQU0sV0FBcUIsY0FBYyxRQUFRLFVBQVUsTUFBTTtBQUNqRSxRQUFNLFdBQXFCLGNBQWMsUUFBUSxVQUFVLE1BQU07QUFDakUsUUFBTSxXQUFxQixjQUFjLFFBQVEsVUFBVSxNQUFNO0FBQ2pFLFFBQU0sYUFBdUIsQ0FBQyxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsVUFBVSxHQUFHLFFBQVE7QUFFaEYsTUFBRyxXQUFXLFFBQVE7QUFDcEIsUUFBSTtBQUNGLFlBQU0sVUFBVSxZQUFZLFNBQVMsU0FBUyxVQUFVLE1BQU07QUFBQSxJQUNoRSxTQUFRLE9BQU87QUFFYixVQUFJO0FBQUEsRUFBSyxPQUFPLFdBQVcsTUFBTSxPQUFPLElBQUksU0FBUyxLQUFLO0FBRzFELGNBQVEsS0FBSyw0Q0FBNEM7QUFHekQsZUFBUyxDQUFDO0FBQ1YsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBR0EsUUFBTSxXQUFxQixjQUFjLFFBQVEsVUFBVSxNQUFNO0FBQ2pFLFFBQU0sV0FBcUIsY0FBYyxRQUFRLFVBQVUsTUFBTTtBQUNqRSxRQUFNLFlBQXNCLGNBQWMsU0FBUyxVQUFVLE1BQU07QUFDbkUsUUFBTSxhQUF1QixjQUFjLFVBQVUsVUFBVSxNQUFNO0FBQ3JFLFFBQU0sWUFBc0IsQ0FBQyxHQUFHLFVBQVUsR0FBRyxVQUFVLEdBQUcsV0FBVyxHQUFHLFVBQVU7QUFFbEYsTUFBRyxVQUFVLFFBQVE7QUFDbkIsUUFBSTtBQUNGLFlBQU0sVUFBVSxXQUFXLFFBQVEsU0FBUyxVQUFVLE1BQU07QUFBQSxJQUM5RCxTQUFRLE9BQU87QUFFYixVQUFJO0FBQUEsRUFBSyxPQUFPLFdBQVcsTUFBTSxPQUFPLElBQUksU0FBUyxLQUFLO0FBRzFELGNBQVEsS0FBSywyQ0FBMkM7QUFHeEQsZUFBUyxDQUFDO0FBQ1YsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBR0EsUUFBTSxVQUFvQixjQUFjLE9BQU8sVUFBVSxNQUFNO0FBRS9ELE1BQUcsUUFBUSxRQUFRO0FBQ2pCLFFBQUk7QUFDRixZQUFNLFVBQVUsU0FBUyxhQUFhLFNBQVMsVUFBVSxNQUFNO0FBQUEsSUFDakUsU0FBUSxPQUFPO0FBRWIsVUFBSTtBQUFBLEVBQUssT0FBTyxXQUFXLE1BQU0sT0FBTyxJQUFJLFNBQVMsS0FBSztBQUcxRCxjQUFRLEtBQUssMENBQTBDO0FBR3ZELGVBQVMsQ0FBQztBQUNWLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUdBLFVBQVEsTUFBTSxRQUFRLDRCQUE0QiwyQkFBMkI7QUFFN0UsTUFBSTtBQUNGLFVBQU0sTUFBTSxhQUFhLGdCQUFnQixFQUFDLFVBQVUsT0FBTSxDQUFDO0FBRzNELFlBQVEsUUFBUSxpQ0FBaUM7QUFBQSxFQUNuRCxTQUFRLE9BQU87QUFFYixRQUFJO0FBQUEsRUFBSyxPQUFPLFdBQVcsTUFBTSxPQUFPLElBQUksU0FBUyxLQUFLO0FBRTFELFFBQUcsQ0FBQyxPQUFPO0FBQ1QsY0FBUSxNQUFNLEtBQUs7QUFBQSxJQUNyQjtBQUdBLFlBQVEsS0FBSyx3QkFBd0I7QUFHckMsYUFBUyxDQUFDO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFHQSxNQUFJO0FBQ0YsVUFBTSxvQkFBb0IsU0FBUyxVQUFVLFFBQVEsS0FBSztBQUFBLEVBQzVELFNBQVEsV0FBVztBQUVqQixRQUFJO0FBQUEsRUFBSyxPQUFPLDRDQUE0QyxVQUFVLE9BQU8sSUFBSSxTQUFTLEtBQUs7QUFHL0YsWUFBUSxLQUFLLGtDQUFrQztBQUcvQyxhQUFTLENBQUM7QUFDVixXQUFPO0FBQUEsRUFDVDtBQUdBLFdBQVMsQ0FBQztBQUNWLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -1,38 +0,0 @@
1
- import { existsSync, lstatSync } from "fs";
2
- import { copyFileSync, copyFolderRecursiveSync } from "../../utils/app.js";
3
- import { log } from "../../utils/log.js";
4
- const copy = (from, to, cmd, callback = () => ({})) => {
5
- const { cliName = "Lex", quiet } = cmd;
6
- log(`${cliName} copying "${to}"...`, "info", quiet);
7
- if (!existsSync(from)) {
8
- log(`
9
- ${cliName} Error: Path not found, "${from}"...`, "error", quiet);
10
- callback(1);
11
- return Promise.resolve(1);
12
- }
13
- if (lstatSync(from).isDirectory()) {
14
- try {
15
- copyFolderRecursiveSync(from, to);
16
- } catch (error) {
17
- log(`
18
- ${cliName} Error: Cannot copy "${from}". ${error.message}`, "error", quiet);
19
- callback(1);
20
- return Promise.resolve(1);
21
- }
22
- } else {
23
- try {
24
- copyFileSync(from, to);
25
- } catch (error) {
26
- log(`
27
- ${cliName} Error: Cannot copy "${from}" ${error.message}`, "error", quiet);
28
- callback(1);
29
- return Promise.resolve(1);
30
- }
31
- }
32
- callback(0);
33
- return Promise.resolve(0);
34
- };
35
- export {
36
- copy
37
- };
38
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvcHkvY29weS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgbHN0YXRTeW5jfSBmcm9tICdmcyc7XG5cbmltcG9ydCB7Y29weUZpbGVTeW5jLCBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luY30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvcHlPcHRpb25zIHtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBDb3B5Q2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjb3B5ID0gKGZyb206IHN0cmluZywgdG86IHN0cmluZywgY21kOiBDb3B5T3B0aW9ucywgY2FsbGJhY2s6IENvcHlDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBxdWlldH0gPSBjbWQ7XG5cbiAgLy8gRGlzcGxheSBtZXNzYWdlXG4gIGxvZyhgJHtjbGlOYW1lfSBjb3B5aW5nIFwiJHt0b31cIi4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGlmKCFleGlzdHNTeW5jKGZyb20pKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBQYXRoIG5vdCBmb3VuZCwgXCIke2Zyb219XCIuLi5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxKTtcbiAgfVxuXG4gIGlmKGxzdGF0U3luYyhmcm9tKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENvcHkgZGlyZWN0b3J5XG4gICAgICBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luYyhmcm9tLCB0byk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDYW5ub3QgY29weSBcIiR7ZnJvbX1cIi4gJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENvcHkgZmlsZVxuICAgICAgY29weUZpbGVTeW5jKGZyb20sIHRvKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjb3B5IFwiJHtmcm9tfVwiICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoMSk7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoMCk7XG59OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLFNBQVEsWUFBWSxpQkFBZ0I7QUFFcEMsU0FBUSxjQUFjLCtCQUE4QjtBQUNwRCxTQUFRLFdBQVU7QUFTWCxNQUFNLE9BQU8sQ0FBQyxNQUFjLElBQVksS0FBa0IsV0FBeUIsT0FBTyxDQUFDLE9BQXdCO0FBQ3hILFFBQU0sRUFBQyxVQUFVLE9BQU8sTUFBSyxJQUFJO0FBR2pDLE1BQUksR0FBRyxPQUFPLGFBQWEsRUFBRSxRQUFRLFFBQVEsS0FBSztBQUVsRCxNQUFHLENBQUMsV0FBVyxJQUFJLEdBQUc7QUFDcEIsUUFBSTtBQUFBLEVBQUssT0FBTyw0QkFBNEIsSUFBSSxRQUFRLFNBQVMsS0FBSztBQUN0RSxhQUFTLENBQUM7QUFDVixXQUFPLFFBQVEsUUFBUSxDQUFDO0FBQUEsRUFDMUI7QUFFQSxNQUFHLFVBQVUsSUFBSSxFQUFFLFlBQVksR0FBRztBQUNoQyxRQUFJO0FBRUYsOEJBQXdCLE1BQU0sRUFBRTtBQUFBLElBQ2xDLFNBQVEsT0FBTztBQUNiLFVBQUk7QUFBQSxFQUFLLE9BQU8sd0JBQXdCLElBQUksTUFBTSxNQUFNLE9BQU8sSUFBSSxTQUFTLEtBQUs7QUFDakYsZUFBUyxDQUFDO0FBQ1YsYUFBTyxRQUFRLFFBQVEsQ0FBQztBQUFBLElBQzFCO0FBQUEsRUFDRixPQUFPO0FBQ0wsUUFBSTtBQUVGLG1CQUFhLE1BQU0sRUFBRTtBQUFBLElBQ3ZCLFNBQVEsT0FBTztBQUNiLFVBQUk7QUFBQSxFQUFLLE9BQU8sd0JBQXdCLElBQUksS0FBSyxNQUFNLE9BQU8sSUFBSSxTQUFTLEtBQUs7QUFDaEYsZUFBUyxDQUFDO0FBQ1YsYUFBTyxRQUFRLFFBQVEsQ0FBQztBQUFBLElBQzFCO0FBQUEsRUFDRjtBQUVBLFdBQVMsQ0FBQztBQUNWLFNBQU8sUUFBUSxRQUFRLENBQUM7QUFDMUI7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -1,74 +0,0 @@
1
- import { execa } from "execa";
2
- import { resolve as pathResolve } from "path";
3
- import { LexConfig } from "../../LexConfig.js";
4
- import { createSpinner, removeFiles } from "../../utils/app.js";
5
- import { getDirName, resolveBinaryPath } from "../../utils/file.js";
6
- import { log } from "../../utils/log.js";
7
- const dev = async (cmd, callback = () => ({})) => {
8
- const { bundleAnalyzer, cliName = "Lex", config, open = false, quiet, remove, variables } = cmd;
9
- const spinner = createSpinner(quiet);
10
- log(`${cliName} start development server...`, "info", quiet);
11
- await LexConfig.parseConfig(cmd);
12
- const { outputFullPath, useTypescript } = LexConfig.config;
13
- let variablesObj = { NODE_ENV: "development" };
14
- if (variables) {
15
- try {
16
- variablesObj = JSON.parse(variables);
17
- } catch (_error) {
18
- log(`
19
- ${cliName} Error: Environment variables option is not a valid JSON object.`, "error", quiet);
20
- callback(1);
21
- return 1;
22
- }
23
- }
24
- process.env = { ...process.env, ...variablesObj };
25
- if (useTypescript) {
26
- LexConfig.checkTypescriptConfig();
27
- }
28
- if (remove) {
29
- spinner.start("Cleaning output directory...");
30
- await removeFiles(outputFullPath || "");
31
- spinner.succeed("Successfully cleaned output directory!");
32
- }
33
- const dirName = getDirName();
34
- const webpackConfig = config || pathResolve(dirName, "../../../webpack.config.js");
35
- const webpackOptions = [
36
- "--color",
37
- "--watch",
38
- "--config",
39
- webpackConfig
40
- ];
41
- if (bundleAnalyzer) {
42
- webpackOptions.push("--bundleAnalyzer");
43
- }
44
- try {
45
- const webpackPath = resolveBinaryPath("webpack-cli");
46
- if (!webpackPath) {
47
- log(`
48
- ${cliName} Error: webpack-cli binary not found in Lex's node_modules or monorepo root`, "error", quiet);
49
- log("Please reinstall Lex or check your installation.", "info", quiet);
50
- return 1;
51
- }
52
- await execa(webpackPath, webpackOptions, {
53
- encoding: "utf8",
54
- env: {
55
- LEX_QUIET: quiet,
56
- WEBPACK_DEV_OPEN: open
57
- },
58
- stdio: "inherit"
59
- });
60
- spinner.succeed("Development server started.");
61
- callback(0);
62
- return 0;
63
- } catch (error) {
64
- log(`
65
- ${cliName} Error: ${error.message}`, "error", quiet);
66
- spinner.fail("There was an error while running Webpack.");
67
- callback(1);
68
- return 1;
69
- }
70
- };
71
- export {
72
- dev
73
- };
74
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2Rldi9kZXYudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge0xleENvbmZpZ30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y3JlYXRlU3Bpbm5lciwgcmVtb3ZlRmlsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2dldERpck5hbWUsIHJlc29sdmVCaW5hcnlQYXRofSBmcm9tICcuLi8uLi91dGlscy9maWxlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERldk9wdGlvbnMge1xuICByZWFkb25seSBidW5kbGVBbmFseXplcj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbmZpZz86IHN0cmluZztcbiAgcmVhZG9ubHkgb3Blbj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmVtb3ZlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBEZXZDYWxsYmFjayA9IChzdGF0dXM6IG51bWJlcikgPT4gdm9pZDtcblxuZXhwb3J0IGNvbnN0IGRldiA9IGFzeW5jIChjbWQ6IERldk9wdGlvbnMsIGNhbGxiYWNrOiBEZXZDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7YnVuZGxlQW5hbHl6ZXIsIGNsaU5hbWUgPSAnTGV4JywgY29uZmlnLCBvcGVuID0gZmFsc2UsIHF1aWV0LCByZW1vdmUsIHZhcmlhYmxlc30gPSBjbWQ7XG5cbiAgLy8gU3Bpbm5lclxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgLy8gRGlzcGxheSBzdGF0dXNcbiAgbG9nKGAke2NsaU5hbWV9IHN0YXJ0IGRldmVsb3BtZW50IHNlcnZlci4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIC8vIEdldCBjdXN0b20gY29uZmlndXJhdGlvblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIHVzZVR5cGVzY3JpcHR9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICAvLyBTZXQgbm9kZSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgbGV0IHZhcmlhYmxlc09iajogb2JqZWN0ID0ge05PREVfRU5WOiAnZGV2ZWxvcG1lbnQnfTtcblxuICBpZih2YXJpYWJsZXMpIHtcbiAgICB0cnkge1xuICAgICAgdmFyaWFibGVzT2JqID0gSlNPTi5wYXJzZSh2YXJpYWJsZXMpO1xuICAgIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVudmlyb25tZW50IHZhcmlhYmxlcyBvcHRpb24gaXMgbm90IGEgdmFsaWQgSlNPTiBvYmplY3QuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmVudiA9IHsuLi5wcm9jZXNzLmVudiwgLi4udmFyaWFibGVzT2JqfTtcblxuICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgLy8gTWFrZSBzdXJlIHRzY29uZmlnLmpzb24gZXhpc3RzXG4gICAgTGV4Q29uZmlnLmNoZWNrVHlwZXNjcmlwdENvbmZpZygpO1xuICB9XG5cbiAgLy8gQ2xlYW4gb3V0cHV0IGRpcmVjdG9yeSBiZWZvcmUgd2Ugc3RhcnQgYWRkaW5nIGluIG5ldyBmaWxlc1xuICBpZihyZW1vdmUpIHtcbiAgICAvLyBTdGFydCBjbGVhbmluZyBzcGlubmVyXG4gICAgc3Bpbm5lci5zdGFydCgnQ2xlYW5pbmcgb3V0cHV0IGRpcmVjdG9yeS4uLicpO1xuXG4gICAgLy8gQ2xlYW5cbiAgICBhd2FpdCByZW1vdmVGaWxlcyhvdXRwdXRGdWxsUGF0aCB8fCAnJyk7XG5cbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBjbGVhbmVkIG91dHB1dCBkaXJlY3RvcnkhJyk7XG4gIH1cblxuICAvLyBHZXQgY3VzdG9tIHdlYnBhY2sgY29uZmlndXJhdGlvbiBmaWxlXG4gIGNvbnN0IGRpck5hbWUgPSBnZXREaXJOYW1lKCk7XG4gIGNvbnN0IHdlYnBhY2tDb25maWc6IHN0cmluZyA9IGNvbmZpZyB8fCBwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4vLi4vd2VicGFjay5jb25maWcuanMnKTtcblxuICAvLyBDb21waWxlIHVzaW5nIHdlYnBhY2tcbiAgY29uc3Qgd2VicGFja09wdGlvbnM6IHN0cmluZ1tdID0gW1xuICAgICctLWNvbG9yJyxcbiAgICAnLS13YXRjaCcsXG4gICAgJy0tY29uZmlnJywgd2VicGFja0NvbmZpZ1xuICBdO1xuXG4gIGlmKGJ1bmRsZUFuYWx5emVyKSB7XG4gICAgd2VicGFja09wdGlvbnMucHVzaCgnLS1idW5kbGVBbmFseXplcicpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBVc2Ugcm9idXN0IHBhdGggcmVzb2x1dGlvbiBmb3Igd2VicGFjayBiaW5hcnlcbiAgICBjb25zdCB3ZWJwYWNrUGF0aCA9IHJlc29sdmVCaW5hcnlQYXRoKCd3ZWJwYWNrLWNsaScpO1xuXG4gICAgLy8gQ2hlY2sgaWYgd2VicGFjayBiaW5hcnkgZXhpc3RzXG4gICAgaWYoIXdlYnBhY2tQYXRoKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IHdlYnBhY2stY2xpIGJpbmFyeSBub3QgZm91bmQgaW4gTGV4J3Mgbm9kZV9tb2R1bGVzIG9yIG1vbm9yZXBvIHJvb3RgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBsb2coJ1BsZWFzZSByZWluc3RhbGwgTGV4IG9yIGNoZWNrIHlvdXIgaW5zdGFsbGF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBhd2FpdCBleGVjYSh3ZWJwYWNrUGF0aCwgd2VicGFja09wdGlvbnMsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICBlbnY6IHtcbiAgICAgICAgTEVYX1FVSUVUOiBxdWlldCxcbiAgICAgICAgV0VCUEFDS19ERVZfT1BFTjogb3BlblxuICAgICAgfSxcbiAgICAgIHN0ZGlvOiAnaW5oZXJpdCdcbiAgICB9KTtcblxuICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgIHNwaW5uZXIuc3VjY2VlZCgnRGV2ZWxvcG1lbnQgc2VydmVyIHN0YXJ0ZWQuJyk7XG5cbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIC8vIERpc3BsYXkgZXJyb3IgbWVzc2FnZVxuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgIHNwaW5uZXIuZmFpbCgnVGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJ1bm5pbmcgV2VicGFjay4nKTtcblxuICAgIC8vIEtpbGwgcHJvY2Vzc1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLFNBQVEsYUFBWTtBQUNwQixTQUFRLFdBQVcsbUJBQWtCO0FBRXJDLFNBQVEsaUJBQWdCO0FBQ3hCLFNBQVEsZUFBZSxtQkFBa0I7QUFDekMsU0FBUSxZQUFZLHlCQUF3QjtBQUM1QyxTQUFRLFdBQVU7QUFjWCxNQUFNLE1BQU0sT0FBTyxLQUFpQixXQUF3QixPQUFPLENBQUMsT0FBd0I7QUFDakcsUUFBTSxFQUFDLGdCQUFnQixVQUFVLE9BQU8sUUFBUSxPQUFPLE9BQU8sT0FBTyxRQUFRLFVBQVMsSUFBSTtBQUcxRixRQUFNLFVBQVUsY0FBYyxLQUFLO0FBR25DLE1BQUksR0FBRyxPQUFPLGdDQUFnQyxRQUFRLEtBQUs7QUFHM0QsUUFBTSxVQUFVLFlBQVksR0FBRztBQUUvQixRQUFNLEVBQUMsZ0JBQWdCLGNBQWEsSUFBSSxVQUFVO0FBR2xELE1BQUksZUFBdUIsRUFBQyxVQUFVLGNBQWE7QUFFbkQsTUFBRyxXQUFXO0FBQ1osUUFBSTtBQUNGLHFCQUFlLEtBQUssTUFBTSxTQUFTO0FBQUEsSUFDckMsU0FBUSxRQUFRO0FBQ2QsVUFBSTtBQUFBLEVBQUssT0FBTyxvRUFBb0UsU0FBUyxLQUFLO0FBQ2xHLGVBQVMsQ0FBQztBQUNWLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFVBQVEsTUFBTSxFQUFDLEdBQUcsUUFBUSxLQUFLLEdBQUcsYUFBWTtBQUU5QyxNQUFHLGVBQWU7QUFFaEIsY0FBVSxzQkFBc0I7QUFBQSxFQUNsQztBQUdBLE1BQUcsUUFBUTtBQUVULFlBQVEsTUFBTSw4QkFBOEI7QUFHNUMsVUFBTSxZQUFZLGtCQUFrQixFQUFFO0FBR3RDLFlBQVEsUUFBUSx3Q0FBd0M7QUFBQSxFQUMxRDtBQUdBLFFBQU0sVUFBVSxXQUFXO0FBQzNCLFFBQU0sZ0JBQXdCLFVBQVUsWUFBWSxTQUFTLDRCQUE0QjtBQUd6RixRQUFNLGlCQUEyQjtBQUFBLElBQy9CO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUFZO0FBQUEsRUFDZDtBQUVBLE1BQUcsZ0JBQWdCO0FBQ2pCLG1CQUFlLEtBQUssa0JBQWtCO0FBQUEsRUFDeEM7QUFFQSxNQUFJO0FBRUYsVUFBTSxjQUFjLGtCQUFrQixhQUFhO0FBR25ELFFBQUcsQ0FBQyxhQUFhO0FBQ2YsVUFBSTtBQUFBLEVBQUssT0FBTywrRUFBK0UsU0FBUyxLQUFLO0FBQzdHLFVBQUksb0RBQW9ELFFBQVEsS0FBSztBQUNyRSxhQUFPO0FBQUEsSUFDVDtBQUVBLFVBQU0sTUFBTSxhQUFhLGdCQUFnQjtBQUFBLE1BQ3ZDLFVBQVU7QUFBQSxNQUNWLEtBQUs7QUFBQSxRQUNILFdBQVc7QUFBQSxRQUNYLGtCQUFrQjtBQUFBLE1BQ3BCO0FBQUEsTUFDQSxPQUFPO0FBQUEsSUFDVCxDQUFDO0FBR0QsWUFBUSxRQUFRLDZCQUE2QjtBQUU3QyxhQUFTLENBQUM7QUFDVixXQUFPO0FBQUEsRUFDVCxTQUFRLE9BQU87QUFFYixRQUFJO0FBQUEsRUFBSyxPQUFPLFdBQVcsTUFBTSxPQUFPLElBQUksU0FBUyxLQUFLO0FBRzFELFlBQVEsS0FBSywyQ0FBMkM7QUFHeEQsYUFBUyxDQUFDO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K