@nlabs/lex 1.48.7 → 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 (105) hide show
  1. package/.storybook/main.ts +9 -2
  2. package/.vscode/settings.json +1 -6
  3. package/README.md +249 -0
  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 +7 -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/lib/commands/lint/lint.js +993 -0
  27. package/{dist → lib}/commands/migrate/migrate.js +1 -1
  28. package/lib/commands/publish/publish.js +104 -0
  29. package/lib/commands/serverless/serverless.d.ts +17 -0
  30. package/lib/commands/serverless/serverless.js +662 -0
  31. package/lib/commands/storybook/storybook.js +249 -0
  32. package/lib/commands/test/test.js +428 -0
  33. package/lib/commands/update/update.js +128 -0
  34. package/{dist → lib}/create/changelog.js +1 -1
  35. package/{dist → lib}/index.d.ts +1 -0
  36. package/{dist → lib}/index.js +2 -1
  37. package/lib/lex.js +73 -0
  38. package/lib/utils/aiService.d.ts +9 -0
  39. package/lib/utils/aiService.js +299 -0
  40. package/{dist → lib}/utils/app.d.ts +3 -0
  41. package/lib/utils/app.js +296 -0
  42. package/{dist → lib}/utils/file.d.ts +7 -3
  43. package/lib/utils/file.js +229 -0
  44. package/lib/utils/translations.d.ts +1 -0
  45. package/lib/utils/translations.js +74 -0
  46. package/package.json +59 -53
  47. package/postcss.config.js +5 -3
  48. package/tsconfig.build.json +2 -2
  49. package/webpack.config.js +229 -39
  50. package/dist/LexConfig.js +0 -287
  51. package/dist/commands/ai/ai.js +0 -303
  52. package/dist/commands/build/build.js +0 -404
  53. package/dist/commands/compile/compile.js +0 -234
  54. package/dist/commands/copy/copy.js +0 -38
  55. package/dist/commands/dev/dev.js +0 -74
  56. package/dist/commands/lint/lint.js +0 -993
  57. package/dist/commands/publish/publish.js +0 -104
  58. package/dist/commands/storybook/storybook.js +0 -249
  59. package/dist/commands/test/test.js +0 -429
  60. package/dist/commands/update/update.js +0 -132
  61. package/dist/lex.js +0 -70
  62. package/dist/utils/aiService.d.ts +0 -9
  63. package/dist/utils/aiService.js +0 -299
  64. package/dist/utils/app.js +0 -267
  65. package/dist/utils/file.js +0 -185
  66. package/emptyModule.js +0 -0
  67. package/eslint.config.js +0 -3
  68. /package/{dist → lib}/Button.stories.d.ts +0 -0
  69. /package/{dist → lib}/commands/ai/ai.d.ts +0 -0
  70. /package/{dist → lib}/commands/ai/index.d.ts +0 -0
  71. /package/{dist → lib}/commands/ai/index.js +0 -0
  72. /package/{dist → lib}/commands/clean/clean.d.ts +0 -0
  73. /package/{dist → lib}/commands/compile/compile.d.ts +0 -0
  74. /package/{dist → lib}/commands/config/config.d.ts +0 -0
  75. /package/{dist → lib}/commands/config/config.js +0 -0
  76. /package/{dist → lib}/commands/copy/copy.d.ts +0 -0
  77. /package/{dist → lib}/commands/create/create.d.ts +0 -0
  78. /package/{dist → lib}/commands/init/init.d.ts +0 -0
  79. /package/{dist → lib}/commands/link/link.d.ts +0 -0
  80. /package/{dist → lib}/commands/link/link.js +0 -0
  81. /package/{dist → lib}/commands/lint/autofix.d.ts +0 -0
  82. /package/{dist → lib}/commands/lint/lint.d.ts +0 -0
  83. /package/{dist → lib}/commands/migrate/migrate.d.ts +0 -0
  84. /package/{dist → lib}/commands/publish/publish.d.ts +0 -0
  85. /package/{dist → lib}/commands/storybook/storybook.d.ts +0 -0
  86. /package/{dist → lib}/commands/test/test.d.ts +0 -0
  87. /package/{dist → lib}/commands/update/update.d.ts +0 -0
  88. /package/{dist → lib}/commands/upgrade/upgrade.d.ts +0 -0
  89. /package/{dist → lib}/commands/upgrade/upgrade.js +0 -0
  90. /package/{dist → lib}/commands/versions/versions.d.ts +0 -0
  91. /package/{dist → lib}/commands/versions/versions.js +0 -0
  92. /package/{dist → lib}/create/changelog.d.ts +0 -0
  93. /package/{dist → lib}/lex.d.ts +0 -0
  94. /package/{dist → lib}/storybook/index.d.ts +0 -0
  95. /package/{dist → lib}/storybook/index.js +0 -0
  96. /package/{dist → lib}/test-react/index.d.ts +0 -0
  97. /package/{dist → lib}/test-react/index.js +0 -0
  98. /package/{dist → lib}/types.d.ts +0 -0
  99. /package/{dist → lib}/types.js +0 -0
  100. /package/{dist → lib}/utils/deepMerge.d.ts +0 -0
  101. /package/{dist → lib}/utils/deepMerge.js +0 -0
  102. /package/{dist → lib}/utils/log.d.ts +0 -0
  103. /package/{dist → lib}/utils/log.js +0 -0
  104. /package/{dist → lib}/utils/reactShim.d.ts +0 -0
  105. /package/{dist → lib}/utils/reactShim.js +0 -0
@@ -0,0 +1,241 @@
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 isProduction = process.env.NODE_ENV === "production";
79
+ let shouldMinify;
80
+ if (typeof esbuildConfig.minify === "boolean") {
81
+ shouldMinify = esbuildConfig.minify;
82
+ } else {
83
+ shouldMinify = isProduction;
84
+ }
85
+ const esbuildPath = resolveBinaryPath("esbuild", "esbuild");
86
+ if (!esbuildPath) {
87
+ log(`
88
+ ${cliName} Error: esbuild binary not found in Lex's node_modules or monorepo root`, "error", quiet);
89
+ log("Please reinstall Lex or check your installation.", "info", quiet);
90
+ return 1;
91
+ }
92
+ const esbuildOptions = [
93
+ ...sourceFiles,
94
+ "--color=true",
95
+ `--format=${esbuildConfig.format || "esm"}`,
96
+ `--outdir=${outputDir}`,
97
+ `--platform=${esbuildConfig.platform || "node"}`,
98
+ `--sourcemap=${esbuildConfig.sourcemap || "inline"}`,
99
+ `--target=${esbuildConfig.target || "node20"}`
100
+ ];
101
+ if (shouldMinify) {
102
+ esbuildOptions.push("--minify");
103
+ }
104
+ if (esbuildConfig.treeShaking !== false) {
105
+ esbuildOptions.push("--tree-shaking=true");
106
+ }
107
+ if (esbuildConfig.drop && esbuildConfig.drop.length > 0) {
108
+ esbuildConfig.drop.forEach((item) => {
109
+ esbuildOptions.push(`--drop:${item}`);
110
+ });
111
+ }
112
+ if (esbuildConfig.pure && esbuildConfig.pure.length > 0) {
113
+ esbuildConfig.pure.forEach((item) => {
114
+ esbuildOptions.push(`--pure:${item}`);
115
+ });
116
+ }
117
+ if (esbuildConfig.legalComments) {
118
+ esbuildOptions.push(`--legal-comments=${esbuildConfig.legalComments}`);
119
+ }
120
+ if (esbuildConfig.banner) {
121
+ Object.entries(esbuildConfig.banner).forEach(([type, content]) => {
122
+ esbuildOptions.push(`--banner:${type}=${content}`);
123
+ });
124
+ }
125
+ if (esbuildConfig.footer) {
126
+ Object.entries(esbuildConfig.footer).forEach(([type, content]) => {
127
+ esbuildOptions.push(`--footer:${type}=${content}`);
128
+ });
129
+ }
130
+ if (esbuildConfig.define) {
131
+ Object.entries(esbuildConfig.define).forEach(([key, value]) => {
132
+ esbuildOptions.push(`--define:${key}=${value}`);
133
+ });
134
+ }
135
+ if (watch) {
136
+ esbuildOptions.push("--watch");
137
+ }
138
+ const cssFiles = getFilesByExt(".css", LexConfig.config);
139
+ if (cssFiles.length) {
140
+ const postcssPath = resolveBinaryPath("postcss", "postcss-cli");
141
+ if (!postcssPath) {
142
+ log(`
143
+ ${cliName} Error: PostCSS binary not found in Lex's node_modules or monorepo root`, "error", quiet);
144
+ log("Please reinstall Lex or check your installation.", "info", quiet);
145
+ return 1;
146
+ }
147
+ const postcssOptions = [
148
+ `${sourceDir}/**/**.css`,
149
+ "--base",
150
+ sourceDir,
151
+ "--dir",
152
+ outputDir,
153
+ "--config",
154
+ pathResolve(dirName, "../../postcss.config.js")
155
+ ];
156
+ try {
157
+ await execa(postcssPath, postcssOptions, { encoding: "utf8" });
158
+ spinner.succeed(`Successfully formatted ${cssFiles.length} css files!`);
159
+ } catch (error) {
160
+ log(`
161
+ ${cliName} Error: ${error.message}`, "error", quiet);
162
+ spinner.fail("Failed formatting css.");
163
+ callback(1);
164
+ return 1;
165
+ }
166
+ }
167
+ const gifFiles = getFilesByExt(".gif", LexConfig.config);
168
+ const jpgFiles = getFilesByExt(".jpg", LexConfig.config);
169
+ const pngFiles = getFilesByExt(".png", LexConfig.config);
170
+ const svgFiles = getFilesByExt(".svg", LexConfig.config);
171
+ const imageFiles = [...gifFiles, ...jpgFiles, ...pngFiles, ...svgFiles];
172
+ if (imageFiles.length) {
173
+ try {
174
+ await copyFiles(imageFiles, "image", spinner, LexConfig.config);
175
+ } catch (error) {
176
+ log(`
177
+ ${cliName} Error: ${error.message}`, "error", quiet);
178
+ spinner.fail("Failed to move images to output directory.");
179
+ callback(1);
180
+ return 1;
181
+ }
182
+ }
183
+ const ttfFiles = getFilesByExt(".ttf", LexConfig.config);
184
+ const otfFiles = getFilesByExt(".otf", LexConfig.config);
185
+ const woffFiles = getFilesByExt(".woff", LexConfig.config);
186
+ const woff2Files = getFilesByExt(".woff2", LexConfig.config);
187
+ const fontFiles = [...ttfFiles, ...otfFiles, ...woffFiles, ...woff2Files];
188
+ if (fontFiles.length) {
189
+ try {
190
+ await copyFiles(fontFiles, "font", spinner, LexConfig.config);
191
+ } catch (error) {
192
+ log(`
193
+ ${cliName} Error: ${error.message}`, "error", quiet);
194
+ spinner.fail("Failed to move fonts to output directory.");
195
+ callback(1);
196
+ return 1;
197
+ }
198
+ }
199
+ const mdFiles = getFilesByExt(".md", LexConfig.config);
200
+ if (mdFiles.length) {
201
+ try {
202
+ await copyFiles(mdFiles, "documents", spinner, LexConfig.config);
203
+ } catch (error) {
204
+ log(`
205
+ ${cliName} Error: ${error.message}`, "error", quiet);
206
+ spinner.fail("Failed to move docs to output directory.");
207
+ callback(1);
208
+ return 1;
209
+ }
210
+ }
211
+ spinner.start(watch ? "Watching for changes..." : "Compiling with ESBuild...");
212
+ try {
213
+ await execa(esbuildPath, esbuildOptions, { encoding: "utf8" });
214
+ spinner.succeed("Compile completed successfully!");
215
+ } catch (error) {
216
+ log(`
217
+ ${cliName} Error: ${error.message}`, "error", quiet);
218
+ if (!quiet) {
219
+ console.error(error);
220
+ }
221
+ spinner.fail("Code compiling failed.");
222
+ callback(1);
223
+ return 1;
224
+ }
225
+ try {
226
+ await copyConfiguredFiles(spinner, LexConfig.config, quiet);
227
+ } catch (copyError) {
228
+ log(`
229
+ ${cliName} Error: Failed to copy configured files: ${copyError.message}`, "error", quiet);
230
+ spinner.fail("Failed to copy configured files.");
231
+ callback(1);
232
+ return 1;
233
+ }
234
+ callback(0);
235
+ return 0;
236
+ };
237
+ export {
238
+ compile,
239
+ hasFileType
240
+ };
241
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbXBpbGUvY29tcGlsZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCB7ZXhpc3RzU3luYywgbHN0YXRTeW5jLCByZWFkZGlyU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7TGV4Q29uZmlnLCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aH0gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB7Y2hlY2tMaW5rZWRNb2R1bGVzLCBjb3B5Q29uZmlndXJlZEZpbGVzLCBjb3B5RmlsZXMsIGNyZWF0ZVNwaW5uZXIsIGdldEZpbGVzQnlFeHQsIHJlbW92ZUZpbGVzfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtnZXREaXJOYW1lLCByZXNvbHZlQmluYXJ5UGF0aH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGNvbnN0IGhhc0ZpbGVUeXBlID0gKHN0YXJ0UGF0aDogc3RyaW5nLCBleHQ6IHN0cmluZ1tdKTogYm9vbGVhbiA9PiB7XG4gIGlmKCFleGlzdHNTeW5jKHN0YXJ0UGF0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBmaWxlczogc3RyaW5nW10gPSByZWFkZGlyU3luYyhzdGFydFBhdGgpO1xuXG4gIHJldHVybiBmaWxlcy5zb21lKChmaWxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBmaWxlbmFtZTogc3RyaW5nID0gcGF0aEpvaW4oc3RhcnRQYXRoLCBmaWxlKTtcbiAgICBjb25zdCBmaWxlRXh0OiBzdHJpbmcgPSBwYXRoRXh0bmFtZShmaWxlbmFtZSk7XG4gICAgY29uc3Qgc3RhdCA9IGxzdGF0U3luYyhmaWxlbmFtZSk7XG5cbiAgICBpZihzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiBoYXNGaWxlVHlwZShmaWxlbmFtZSwgZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXh0LmluY2x1ZGVzKGZpbGVFeHQpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb21waWxlID0gYXN5bmMgKGNtZDogYW55LCBjYWxsYmFjazogYW55ID0gKCkgPT4gKHt9KSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIG91dHB1dFBhdGgsXG4gICAgcXVpZXQsXG4gICAgcmVtb3ZlLFxuICAgIHNvdXJjZVBhdGgsXG4gICAgd2F0Y2hcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IGNvbXBpbGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgc291cmNlRnVsbFBhdGgsIHVzZVR5cGVzY3JpcHR9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3Qgb3V0cHV0RGlyOiBzdHJpbmcgPSBvdXRwdXRQYXRoIHx8IG91dHB1dEZ1bGxQYXRoO1xuICBjb25zdCBzb3VyY2VEaXI6IHN0cmluZyA9IHNvdXJjZVBhdGggPyBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBgLi8ke3NvdXJjZVBhdGh9YCkgOiBzb3VyY2VGdWxsUGF0aCB8fCAnJztcbiAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcbiAgY29uc3QgZGlyUGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uJyk7XG5cbiAgY2hlY2tMaW5rZWRNb2R1bGVzKCk7XG5cbiAgaWYocmVtb3ZlKSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMob3V0cHV0RGlyKTtcbiAgfVxuXG4gIGlmKHVzZVR5cGVzY3JpcHQpIHtcbiAgICBMZXhDb25maWcuY2hlY2tDb21waWxlVHlwZXNjcmlwdENvbmZpZygpO1xuXG4gICAgY29uc3QgdHlwZXNjcmlwdFBhdGg6IHN0cmluZyA9IHJlc29sdmVCaW5hcnlQYXRoKCd0c2MnLCAndHlwZXNjcmlwdCcpO1xuXG4gICAgaWYoIXR5cGVzY3JpcHRQYXRoKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlc2NyaXB0T3B0aW9uczogc3RyaW5nW10gPSBjb25maWcgP1xuICAgICAgWyctcCcsIGNvbmZpZ10gOlxuICAgICAgWyctcCcsIGdldFR5cGVTY3JpcHRDb25maWdQYXRoKCd0c2NvbmZpZy5idWlsZC5qc29uJyldO1xuXG4gICAgc3Bpbm5lci5zdGFydCgnU3RhdGljIHR5cGUgY2hlY2tpbmcgd2l0aCBUeXBlc2NyaXB0Li4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlY2EodHlwZXNjcmlwdFBhdGgsIHR5cGVzY3JpcHRPcHRpb25zLCB7ZW5jb2Rpbmc6ICd1dGY4J30pO1xuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgdHlwZSBjaGVja2luZyEnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ1R5cGUgY2hlY2tpbmcgZmFpbGVkLicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdsb2JPcHRpb25zID0ge1xuICAgIGN3ZDogc291cmNlRGlyLFxuICAgIGRvdDogZmFsc2UsXG4gICAgbm9kaXI6IHRydWUsXG4gICAgbm9zb3J0OiB0cnVlXG4gIH07XG4gIGNvbnN0IHRzRmlsZXM6IHN0cmluZ1tdID0gZ2xvYlN5bmMoYCR7c291cmNlRGlyfS8qKi8hKCouc3BlY3wqLnRlc3QpLnRzKmAsIGdsb2JPcHRpb25zKTtcbiAgY29uc3QganNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYyhgJHtzb3VyY2VEaXJ9LyoqLyEoKi5zcGVjfCoudGVzdCkuanNgLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi50c0ZpbGVzLCAuLi5qc0ZpbGVzXTtcbiAgY29uc3QgZXNidWlsZENvbmZpZyA9IExleENvbmZpZy5jb25maWcuZXNidWlsZCB8fCB7fTtcbiAgY29uc3QgaXNQcm9kdWN0aW9uID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJztcbiAgbGV0IHNob3VsZE1pbmlmeTogYm9vbGVhbjtcblxuICBpZih0eXBlb2YgZXNidWlsZENvbmZpZy5taW5pZnkgPT09ICdib29sZWFuJykge1xuICAgIHNob3VsZE1pbmlmeSA9IGVzYnVpbGRDb25maWcubWluaWZ5O1xuICB9IGVsc2Uge1xuICAgIHNob3VsZE1pbmlmeSA9IGlzUHJvZHVjdGlvbjtcbiAgfVxuXG4gIGNvbnN0IGVzYnVpbGRQYXRoOiBzdHJpbmcgPSByZXNvbHZlQmluYXJ5UGF0aCgnZXNidWlsZCcsICdlc2J1aWxkJyk7XG5cbiAgaWYoIWVzYnVpbGRQYXRoKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBlc2J1aWxkIGJpbmFyeSBub3QgZm91bmQgaW4gTGV4J3Mgbm9kZV9tb2R1bGVzIG9yIG1vbm9yZXBvIHJvb3RgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgbG9nKCdQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGNvbnN0IGVzYnVpbGRPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAuLi5zb3VyY2VGaWxlcyxcbiAgICAnLS1jb2xvcj10cnVlJyxcbiAgICBgLS1mb3JtYXQ9JHtlc2J1aWxkQ29uZmlnLmZvcm1hdCB8fCAnZXNtJ31gLFxuICAgIGAtLW91dGRpcj0ke291dHB1dERpcn1gLFxuICAgIGAtLXBsYXRmb3JtPSR7ZXNidWlsZENvbmZpZy5wbGF0Zm9ybSB8fCAnbm9kZSd9YCxcbiAgICBgLS1zb3VyY2VtYXA9JHtlc2J1aWxkQ29uZmlnLnNvdXJjZW1hcCB8fCAnaW5saW5lJ31gLFxuICAgIGAtLXRhcmdldD0ke2VzYnVpbGRDb25maWcudGFyZ2V0IHx8ICdub2RlMjAnfWBcbiAgXTtcblxuICBpZihzaG91bGRNaW5pZnkpIHtcbiAgICBlc2J1aWxkT3B0aW9ucy5wdXNoKCctLW1pbmlmeScpO1xuICB9XG5cbiAgaWYoZXNidWlsZENvbmZpZy50cmVlU2hha2luZyAhPT0gZmFsc2UpIHtcbiAgICBlc2J1aWxkT3B0aW9ucy5wdXNoKCctLXRyZWUtc2hha2luZz10cnVlJyk7XG4gIH1cblxuICBpZihlc2J1aWxkQ29uZmlnLmRyb3AgJiYgZXNidWlsZENvbmZpZy5kcm9wLmxlbmd0aCA+IDApIHtcbiAgICBlc2J1aWxkQ29uZmlnLmRyb3AuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgZXNidWlsZE9wdGlvbnMucHVzaChgLS1kcm9wOiR7aXRlbX1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmKGVzYnVpbGRDb25maWcucHVyZSAmJiBlc2J1aWxkQ29uZmlnLnB1cmUubGVuZ3RoID4gMCkge1xuICAgIGVzYnVpbGRDb25maWcucHVyZS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBlc2J1aWxkT3B0aW9ucy5wdXNoKGAtLXB1cmU6JHtpdGVtfWApO1xuICAgIH0pO1xuICB9XG5cbiAgaWYoZXNidWlsZENvbmZpZy5sZWdhbENvbW1lbnRzKSB7XG4gICAgZXNidWlsZE9wdGlvbnMucHVzaChgLS1sZWdhbC1jb21tZW50cz0ke2VzYnVpbGRDb25maWcubGVnYWxDb21tZW50c31gKTtcbiAgfVxuXG4gIGlmKGVzYnVpbGRDb25maWcuYmFubmVyKSB7XG4gICAgT2JqZWN0LmVudHJpZXMoZXNidWlsZENvbmZpZy5iYW5uZXIpLmZvckVhY2goKFt0eXBlLCBjb250ZW50XSkgPT4ge1xuICAgICAgZXNidWlsZE9wdGlvbnMucHVzaChgLS1iYW5uZXI6JHt0eXBlfT0ke2NvbnRlbnR9YCk7XG4gICAgfSk7XG4gIH1cblxuICBpZihlc2J1aWxkQ29uZmlnLmZvb3Rlcikge1xuICAgIE9iamVjdC5lbnRyaWVzKGVzYnVpbGRDb25maWcuZm9vdGVyKS5mb3JFYWNoKChbdHlwZSwgY29udGVudF0pID0+IHtcbiAgICAgIGVzYnVpbGRPcHRpb25zLnB1c2goYC0tZm9vdGVyOiR7dHlwZX09JHtjb250ZW50fWApO1xuICAgIH0pO1xuICB9XG5cbiAgaWYoZXNidWlsZENvbmZpZy5kZWZpbmUpIHtcbiAgICBPYmplY3QuZW50cmllcyhlc2J1aWxkQ29uZmlnLmRlZmluZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBlc2J1aWxkT3B0aW9ucy5wdXNoKGAtLWRlZmluZToke2tleX09JHt2YWx1ZX1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmKHdhdGNoKSB7XG4gICAgZXNidWlsZE9wdGlvbnMucHVzaCgnLS13YXRjaCcpO1xuICB9XG5cbiAgY29uc3QgY3NzRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLmNzcycsIExleENvbmZpZy5jb25maWcpO1xuXG4gIGlmKGNzc0ZpbGVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHBvc3Rjc3NQYXRoOiBzdHJpbmcgPSByZXNvbHZlQmluYXJ5UGF0aCgncG9zdGNzcycsICdwb3N0Y3NzLWNsaScpO1xuXG4gICAgaWYoIXBvc3Rjc3NQYXRoKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFBvc3RDU1MgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3N0Y3NzT3B0aW9uczogc3RyaW5nW10gPSBbXG4gICAgICBgJHtzb3VyY2VEaXJ9LyoqLyoqLmNzc2AsXG4gICAgICAnLS1iYXNlJyxcbiAgICAgIHNvdXJjZURpcixcbiAgICAgICctLWRpcicsXG4gICAgICBvdXRwdXREaXIsXG4gICAgICAnLS1jb25maWcnLFxuICAgICAgcGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uL3Bvc3Rjc3MuY29uZmlnLmpzJylcbiAgICBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWNhKHBvc3Rjc3NQYXRoLCBwb3N0Y3NzT3B0aW9ucywge2VuY29kaW5nOiAndXRmOCd9KTtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZChgU3VjY2Vzc2Z1bGx5IGZvcm1hdHRlZCAke2Nzc0ZpbGVzLmxlbmd0aH0gY3NzIGZpbGVzIWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIGZvcm1hdHRpbmcgY3NzLicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdpZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5naWYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QganBnRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLmpwZycsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBwbmdGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcucG5nJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IHN2Z0ZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5zdmcnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgaW1hZ2VGaWxlczogc3RyaW5nW10gPSBbLi4uZ2lmRmlsZXMsIC4uLmpwZ0ZpbGVzLCAuLi5wbmdGaWxlcywgLi4uc3ZnRmlsZXNdO1xuXG4gIGlmKGltYWdlRmlsZXMubGVuZ3RoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvcHlGaWxlcyhpbWFnZUZpbGVzLCAnaW1hZ2UnLCBzcGlubmVyLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBtb3ZlIGltYWdlcyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHR0ZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy50dGYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgb3RmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLm90ZicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCB3b2ZmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLndvZmYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgd29mZjJGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcud29mZjInLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgZm9udEZpbGVzOiBzdHJpbmdbXSA9IFsuLi50dGZGaWxlcywgLi4ub3RmRmlsZXMsIC4uLndvZmZGaWxlcywgLi4ud29mZjJGaWxlc107XG5cbiAgaWYoZm9udEZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMoZm9udEZpbGVzLCAnZm9udCcsIHNwaW5uZXIsIExleENvbmZpZy5jb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIG1vdmUgZm9udHMgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZEZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5tZCcsIExleENvbmZpZy5jb25maWcpO1xuXG4gIGlmKG1kRmlsZXMubGVuZ3RoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvcHlGaWxlcyhtZEZpbGVzLCAnZG9jdW1lbnRzJywgc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gbW92ZSBkb2NzIHRvIG91dHB1dCBkaXJlY3RvcnkuJyk7XG5cbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgc3Bpbm5lci5zdGFydCh3YXRjaCA/ICdXYXRjaGluZyBmb3IgY2hhbmdlcy4uLicgOiAnQ29tcGlsaW5nIHdpdGggRVNCdWlsZC4uLicpO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlY2EoZXNidWlsZFBhdGgsIGVzYnVpbGRPcHRpb25zLCB7ZW5jb2Rpbmc6ICd1dGY4J30pO1xuXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdDb21waWxlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG5cbiAgICBzcGlubmVyLmZhaWwoJ0NvZGUgY29tcGlsaW5nIGZhaWxlZC4nKTtcblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjb3B5Q29uZmlndXJlZEZpbGVzKHNwaW5uZXIsIExleENvbmZpZy5jb25maWcsIHF1aWV0KTtcbiAgfSBjYXRjaCAoY29weUVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzOiAke2NvcHlFcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGNvcHkgY29uZmlndXJlZCBmaWxlcy4nKTtcblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiAwO1xufTsiXSwKICAibWFwcGluZ3MiOiAiQUFJQSxTQUFRLGFBQVk7QUFDcEIsU0FBUSxZQUFZLFdBQVcsbUJBQWtCO0FBQ2pELFNBQVEsUUFBUSxnQkFBZTtBQUMvQixTQUFRLFdBQVcsYUFBYSxRQUFRLFVBQVUsV0FBVyxtQkFBa0I7QUFFL0UsU0FBUSxXQUFXLCtCQUE4QjtBQUNqRCxTQUFRLG9CQUFvQixxQkFBcUIsV0FBVyxlQUFlLGVBQWUsbUJBQWtCO0FBQzVHLFNBQVEsWUFBWSx5QkFBd0I7QUFDNUMsU0FBUSxXQUFVO0FBRVgsTUFBTSxjQUFjLENBQUMsV0FBbUIsUUFBMkI7QUFDeEUsTUFBRyxDQUFDLFdBQVcsU0FBUyxHQUFHO0FBQ3pCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxRQUFrQixZQUFZLFNBQVM7QUFFN0MsU0FBTyxNQUFNLEtBQUssQ0FBQyxTQUFpQjtBQUNsQyxVQUFNLFdBQW1CLFNBQVMsV0FBVyxJQUFJO0FBQ2pELFVBQU0sVUFBa0IsWUFBWSxRQUFRO0FBQzVDLFVBQU0sT0FBTyxVQUFVLFFBQVE7QUFFL0IsUUFBRyxLQUFLLFlBQVksR0FBRztBQUNyQixhQUFPLFlBQVksVUFBVSxHQUFHO0FBQUEsSUFDbEM7QUFFQSxXQUFPLElBQUksU0FBUyxPQUFPO0FBQUEsRUFDN0IsQ0FBQztBQUNIO0FBRU8sTUFBTSxVQUFVLE9BQU8sS0FBVSxXQUFnQixPQUFPLENBQUMsT0FBd0I7QUFDdEYsUUFBTTtBQUFBLElBQ0osVUFBVTtBQUFBLElBQ1Y7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sVUFBVSxjQUFjLEtBQUs7QUFFbkMsTUFBSSxHQUFHLE9BQU8saUJBQWlCLFFBQVEsS0FBSztBQUU1QyxRQUFNLFVBQVUsWUFB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
@@ -0,0 +1,38 @@
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+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjb3B5ID0gKFxuICBmcm9tOiBzdHJpbmcsXG4gIHRvOiBzdHJpbmcsXG4gIGNtZDogQ29weU9wdGlvbnMsXG4gIGNhbGxiYWNrOiBDb3B5Q2FsbGJhY2sgPSAoKSA9PiAoe30pXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBxdWlldH0gPSBjbWQ7XG5cbiAgLy8gRGlzcGxheSBtZXNzYWdlXG4gIGxvZyhgJHtjbGlOYW1lfSBjb3B5aW5nIFwiJHt0b31cIi4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGlmKCFleGlzdHNTeW5jKGZyb20pKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBQYXRoIG5vdCBmb3VuZCwgXCIke2Zyb219XCIuLi5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxKTtcbiAgfVxuXG4gIGlmKGxzdGF0U3luYyhmcm9tKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENvcHkgZGlyZWN0b3J5XG4gICAgICBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luYyhmcm9tLCB0byk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ2Fubm90IGNvcHkgXCIke2Zyb219XCIuICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoMSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICAvLyBDb3B5IGZpbGVcbiAgICAgIGNvcHlGaWxlU3luYyhmcm9tLCB0byk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ2Fubm90IGNvcHkgXCIke2Zyb219XCIgJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjaygwKTtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgwKTtcbn07Il0sCiAgIm1hcHBpbmdzIjogIkFBSUEsU0FBUSxZQUFZLGlCQUFnQjtBQUVwQyxTQUFRLGNBQWMsK0JBQThCO0FBQ3BELFNBQVEsV0FBVTtBQVNYLE1BQU0sT0FBTyxDQUNsQixNQUNBLElBQ0EsS0FDQSxXQUF5QixPQUFPLENBQUMsT0FDYjtBQUNwQixRQUFNLEVBQUMsVUFBVSxPQUFPLE1BQUssSUFBSTtBQUdqQyxNQUFJLEdBQUcsT0FBTyxhQUFhLEVBQUUsUUFBUSxRQUFRLEtBQUs7QUFFbEQsTUFBRyxDQUFDLFdBQVcsSUFBSSxHQUFHO0FBQ3BCLFFBQUk7QUFBQSxFQUFLLE9BQU8sNEJBQTRCLElBQUksUUFBUSxTQUFTLEtBQUs7QUFDdEUsYUFBUyxDQUFDO0FBQ1YsV0FBTyxRQUFRLFFBQVEsQ0FBQztBQUFBLEVBQzFCO0FBRUEsTUFBRyxVQUFVLElBQUksRUFBRSxZQUFZLEdBQUc7QUFDaEMsUUFBSTtBQUVGLDhCQUF3QixNQUFNLEVBQUU7QUFBQSxJQUNsQyxTQUFTLE9BQU87QUFDZCxVQUFJO0FBQUEsRUFBSyxPQUFPLHdCQUF3QixJQUFJLE1BQU0sTUFBTSxPQUFPLElBQUksU0FBUyxLQUFLO0FBQ2pGLGVBQVMsQ0FBQztBQUNWLGFBQU8sUUFBUSxRQUFRLENBQUM7QUFBQSxJQUMxQjtBQUFBLEVBQ0YsT0FBTztBQUNMLFFBQUk7QUFFRixtQkFBYSxNQUFNLEVBQUU7QUFBQSxJQUN2QixTQUFTLE9BQU87QUFDZCxVQUFJO0FBQUEsRUFBSyxPQUFPLHdCQUF3QixJQUFJLEtBQUssTUFBTSxPQUFPLElBQUksU0FBUyxLQUFLO0FBQ2hGLGVBQVMsQ0FBQztBQUNWLGFBQU8sUUFBUSxRQUFRLENBQUM7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLENBQUM7QUFDVixTQUFPLFFBQVEsUUFBUSxDQUFDO0FBQzFCOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -121,4 +121,4 @@ ${cliName} Error: Cannot create new ${type}. ${error.message}`, "error", quiet);
121
121
  export {
122
122
  create
123
123
  };
124
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS9jcmVhdGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgcmVuYW1lU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtyZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtjcmVhdGVDaGFuZ2Vsb2d9IGZyb20gJy4uLy4uL2NyZWF0ZS9jaGFuZ2Vsb2cuanMnO1xuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NvcHlGb2xkZXJSZWN1cnNpdmVTeW5jLCBnZXRGaWxlbmFtZXMsIHJlbW92ZUZpbGVzLCB1cGRhdGVUZW1wbGF0ZU5hbWV9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2dldERpck5hbWV9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dE5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQ3JlYXRlQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGUgPSBhc3luYyAodHlwZTogc3RyaW5nLCBjbWQ6IENyZWF0ZU9wdGlvbnMsIGNhbGxiYWNrOiBDcmVhdGVDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBvdXRwdXRGaWxlID0gJycsIG91dHB1dE5hbWUgPSAnJywgcXVpZXR9ID0gY21kO1xuICBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG4gIGxvZyhgJHtjbGlOYW1lfSBjcmVhdGluZyAke3R5cGV9Li4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjb25maWd1cmF0aW9uXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQsIGZhbHNlKTtcbiAgY29uc3Qge291dHB1dFBhdGggPSAnJywgc291cmNlUGF0aCA9ICcnLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0c2NvbmZpZy5qc29uIGV4aXN0c1xuICAgIExleENvbmZpZy5jaGVja1R5cGVzY3JpcHRDb25maWcoKTtcbiAgfVxuXG4gIGNvbnN0IHtjb25maWd9ID0gTGV4Q29uZmlnO1xuICBjb25zdCBkaXJOYW1lID0gZ2V0RGlyTmFtZSgpO1xuXG4gIHN3aXRjaCh0eXBlKSB7XG4gICAgY2FzZSAnY2hhbmdlbG9nJzoge1xuICAgICAgY29uc3Qgc3RhdHVzQ2hhbmdlbG9nOiBudW1iZXIgPSBhd2FpdCBjcmVhdGVDaGFuZ2Vsb2coe2NsaU5hbWUsIGNvbmZpZywgb3V0cHV0RmlsZSwgcXVpZXR9KTtcbiAgICAgIGNhbGxiYWNrKHN0YXR1c0NoYW5nZWxvZyk7XG4gICAgICByZXR1cm4gc3RhdHVzQ2hhbmdlbG9nO1xuICAgIH1cbiAgICBjYXNlICdzdG9yZSc6IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEZpbGVuYW1lcyh7XG4gICAgICAgICAgY2xpTmFtZSxcbiAgICAgICAgICBuYW1lOiBvdXRwdXROYW1lLFxuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgdXNlVHlwZXNjcmlwdFxuICAgICAgICB9KTtcblxuICAgICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7bmFtZUNhcHMsIHRlbXBsYXRlRXh0LCB0ZW1wbGF0ZVBhdGh9ID0gcmVzdWx0O1xuICAgICAgICBjb25zdCBzdG9yZVBhdGg6IHN0cmluZyA9IGAke2N3ZH0vJHtuYW1lQ2Fwc31TdG9yZWA7XG5cbiAgICAgICAgaWYoIWV4aXN0c1N5bmMoc3RvcmVQYXRoKSkge1xuICAgICAgICAvLyBDb3B5IHN0b3JlIGZpbGVzXG4gICAgICAgICAgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgdGVtcGxhdGVQYXRoLCAnLi8uU2FtcGxlU3RvcmUnKSwgY3dkKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBkaXJlY3RvcnlcbiAgICAgICAgICByZW5hbWVTeW5jKGAke2N3ZH0vLlNhbXBsZVN0b3JlYCwgc3RvcmVQYXRoKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSB0ZXN0XG4gICAgICAgICAgY29uc3Qgc3RvcmVUZXN0UGF0aDogc3RyaW5nID0gYCR7c3RvcmVQYXRofS8ke25hbWVDYXBzfVN0b3JlLnRlc3Qke3RlbXBsYXRlRXh0fWA7XG4gICAgICAgICAgcmVuYW1lU3luYyhgJHtzdG9yZVBhdGh9L1NhbXBsZVN0b3JlLnRlc3Qke3RlbXBsYXRlRXh0fS50eHRgLCBzdG9yZVRlc3RQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSBzdG9yZSBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHN0b3JlVGVzdFBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBzb3VyY2UgZmlsZVxuICAgICAgICAgIGNvbnN0IHN0b3JlRmlsZVBhdGg6IHN0cmluZyA9IGAke3N0b3JlUGF0aH0vJHtuYW1lQ2Fwc31TdG9yZSR7dGVtcGxhdGVFeHR9YDtcbiAgICAgICAgICByZW5hbWVTeW5jKGAke3N0b3JlUGF0aH0vU2FtcGxlU3RvcmUke3RlbXBsYXRlRXh0fS50eHRgLCBzdG9yZUZpbGVQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSBzdG9yZSBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHN0b3JlRmlsZVBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjcmVhdGUgbmV3ICR7dHlwZX0uIERpcmVjdG9yeSwgJHtzdG9yZVBhdGh9IGFscmVhZHkgZXhpc3RzLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBjYWxsYmFjaygxKTtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjcmVhdGUgbmV3ICR7dHlwZX0uICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICd0c2NvbmZpZyc6IHtcbiAgICAvLyBSZW1vdmUgZXhpc3RpbmcgZmlsZVxuICAgICAgYXdhaXQgcmVtb3ZlRmlsZXMoJ3RzY29uZmlnLmpzb24nLCB0cnVlKTtcblxuICAgICAgLy8gR2V0IHRzY29uZmlnIHRlbXBsYXRlXG4gICAgICBjb25zdCB0ZW1wbGF0ZVBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGRpck5hbWUsICcuLi8uLi8uLi90c2NvbmZpZy50ZW1wbGF0ZS5qc29uJyk7XG4gICAgICBsZXQgZGF0YTogc3RyaW5nID0gcmVhZEZpbGVTeW5jKHRlbXBsYXRlUGF0aCwgJ3V0ZjgnKTtcblxuICAgICAgLy8gVXBkYXRlIExleCB0c2NvbmZpZyB0ZW1wbGF0ZSB3aXRoIHNvdXJjZSBhbmQgb3V0cHV0IGRpcmVjdG9yaWVzXG4gICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC8uXFwvc3JjL2csIHNvdXJjZVBhdGgpO1xuICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvLlxcL2Rpc3QvZywgb3V0cHV0UGF0aCk7XG5cbiAgICAgIC8vIFNhdmUgbmV3IHRzY29uZmlnIHRvIGFwcFxuICAgICAgY29uc3QgZGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJy4vdHNjb25maWcuanNvbicpO1xuICAgICAgd3JpdGVGaWxlU3luYyhkZXN0UGF0aCwgZGF0YSwgJ3V0ZjgnKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICd2aWV3Jzoge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0RmlsZW5hbWVzKHtcbiAgICAgICAgY2xpTmFtZSxcbiAgICAgICAgbmFtZTogb3V0cHV0TmFtZSxcbiAgICAgICAgcXVpZXQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVzZVR5cGVzY3JpcHRcbiAgICAgIH0pO1xuXG4gICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7bmFtZUNhcHMsIHRlbXBsYXRlUGF0aCwgdGVtcGxhdGVSZWFjdH0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB2aWV3UGF0aDogc3RyaW5nID0gYCR7Y3dkfS8ke25hbWVDYXBzfVZpZXdgO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZighZXhpc3RzU3luYyh2aWV3UGF0aCkpIHtcbiAgICAgICAgLy8gQ29weSB2aWV3IGZpbGVzXG4gICAgICAgICAgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgdGVtcGxhdGVQYXRoLCAnLi8uU2FtcGxlVmlldycpLCBjd2QpO1xuXG4gICAgICAgICAgLy8gUmVuYW1lIGRpcmVjdG9yeVxuICAgICAgICAgIHJlbmFtZVN5bmMoYCR7Y3dkfS8uU2FtcGxlVmlld2AsIHZpZXdQYXRoKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBDU1NcbiAgICAgICAgICBjb25zdCB2aWV3U3R5bGVQYXRoOiBzdHJpbmcgPSBgJHt2aWV3UGF0aH0vJHtvdXRwdXROYW1lfVZpZXcuY3NzYDtcbiAgICAgICAgICByZW5hbWVTeW5jKGAke3ZpZXdQYXRofS9zYW1wbGVWaWV3LmNzc2AsIHZpZXdTdHlsZVBhdGgpO1xuXG4gICAgICAgICAgLy8gU2VhcmNoIGFuZCByZXBsYWNlIHZpZXcgbmFtZVxuICAgICAgICAgIHVwZGF0ZVRlbXBsYXRlTmFtZSh2aWV3U3R5bGVQYXRoLCBvdXRwdXROYW1lLCBuYW1lQ2Fwcyk7XG5cbiAgICAgICAgICAvLyBSZW5hbWUgdGVzdFxuICAgICAgICAgIGNvbnN0IHZpZXdUZXN0UGF0aDogc3RyaW5nID0gYCR7dmlld1BhdGh9LyR7bmFtZUNhcHN9Vmlldy50ZXN0JHt0ZW1wbGF0ZVJlYWN0fWA7XG4gICAgICAgICAgcmVuYW1lU3luYyhgJHt2aWV3UGF0aH0vU2FtcGxlVmlldy50ZXN0JHt0ZW1wbGF0ZVJlYWN0fS50eHRgLCB2aWV3VGVzdFBhdGgpO1xuXG4gICAgICAgICAgLy8gU2VhcmNoIGFuZCByZXBsYWNlIHZpZXcgbmFtZVxuICAgICAgICAgIHVwZGF0ZVRlbXBsYXRlTmFtZSh2aWV3VGVzdFBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBzb3VyY2UgZmlsZVxuICAgICAgICAgIGNvbnN0IHZpZXdGaWxlUGF0aDogc3RyaW5nID0gYCR7dmlld1BhdGh9LyR7bmFtZUNhcHN9VmlldyR7dGVtcGxhdGVSZWFjdH1gO1xuICAgICAgICAgIHJlbmFtZVN5bmMoYCR7dmlld1BhdGh9L1NhbXBsZVZpZXcke3RlbXBsYXRlUmVhY3R9LnR4dGAsIHZpZXdGaWxlUGF0aCk7XG5cbiAgICAgICAgICAvLyBTZWFyY2ggYW5kIHJlcGxhY2UgdmlldyBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHZpZXdGaWxlUGF0aCwgb3V0cHV0TmFtZSwgbmFtZUNhcHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ2Fubm90IGNyZWF0ZSBuZXcgJHt0eXBlfS4gRGlyZWN0b3J5LCAke3ZpZXdQYXRofSBhbHJlYWR5IGV4aXN0cy5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgY2FsbGJhY2soMSk7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDYW5ub3QgY3JlYXRlIG5ldyAke3R5cGV9LiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICBjYWxsYmFjaygxKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAndnNjb2RlJzoge1xuICAgIC8vIFJlbW92ZSBleGlzdGluZyBkaXJlY3RvcnlcbiAgICAgIGF3YWl0IHJlbW92ZUZpbGVzKCcudnNjb2RlJywgdHJ1ZSk7XG5cbiAgICAgIC8vIENvcHkgdnNjb2RlIGNvbmZpZ3VyYXRpb25cbiAgICAgIGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jKHBhdGhSZXNvbHZlKGRpck5hbWUsICcuLi8uLi8uLi8udnNjb2RlJyksIGN3ZCk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjaygwKTtcbiAgcmV0dXJuIDA7XG59OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLFNBQVEsWUFBWSxjQUFjLFlBQVkscUJBQW9CO0FB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
124
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS9jcmVhdGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgcmVuYW1lU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtyZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtjcmVhdGVDaGFuZ2Vsb2d9IGZyb20gJy4uLy4uL2NyZWF0ZS9jaGFuZ2Vsb2cuanMnO1xuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NvcHlGb2xkZXJSZWN1cnNpdmVTeW5jLCBnZXRGaWxlbmFtZXMsIHJlbW92ZUZpbGVzLCB1cGRhdGVUZW1wbGF0ZU5hbWV9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2dldERpck5hbWV9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dE5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQ3JlYXRlQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGUgPSBhc3luYyAodHlwZTogc3RyaW5nLCBjbWQ6IENyZWF0ZU9wdGlvbnMsIGNhbGxiYWNrOiBDcmVhdGVDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBvdXRwdXRGaWxlID0gJycsIG91dHB1dE5hbWUgPSAnJywgcXVpZXR9ID0gY21kO1xuICBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG4gIGxvZyhgJHtjbGlOYW1lfSBjcmVhdGluZyAke3R5cGV9Li4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjb25maWd1cmF0aW9uXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQsIGZhbHNlKTtcbiAgY29uc3Qge291dHB1dFBhdGggPSAnJywgc291cmNlUGF0aCA9ICcnLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0c2NvbmZpZy5qc29uIGV4aXN0c1xuICAgIExleENvbmZpZy5jaGVja1R5cGVzY3JpcHRDb25maWcoKTtcbiAgfVxuXG4gIGNvbnN0IHtjb25maWd9ID0gTGV4Q29uZmlnO1xuICBjb25zdCBkaXJOYW1lID0gZ2V0RGlyTmFtZSgpO1xuXG4gIHN3aXRjaCh0eXBlKSB7XG4gICAgY2FzZSAnY2hhbmdlbG9nJzoge1xuICAgICAgY29uc3Qgc3RhdHVzQ2hhbmdlbG9nOiBudW1iZXIgPSBhd2FpdCBjcmVhdGVDaGFuZ2Vsb2coe2NsaU5hbWUsIGNvbmZpZywgb3V0cHV0RmlsZSwgcXVpZXR9KTtcbiAgICAgIGNhbGxiYWNrKHN0YXR1c0NoYW5nZWxvZyk7XG4gICAgICByZXR1cm4gc3RhdHVzQ2hhbmdlbG9nO1xuICAgIH1cbiAgICBjYXNlICdzdG9yZSc6IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEZpbGVuYW1lcyh7XG4gICAgICAgICAgY2xpTmFtZSxcbiAgICAgICAgICBuYW1lOiBvdXRwdXROYW1lLFxuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgdXNlVHlwZXNjcmlwdFxuICAgICAgICB9KTtcblxuICAgICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7bmFtZUNhcHMsIHRlbXBsYXRlRXh0LCB0ZW1wbGF0ZVBhdGh9ID0gcmVzdWx0O1xuICAgICAgICBjb25zdCBzdG9yZVBhdGg6IHN0cmluZyA9IGAke2N3ZH0vJHtuYW1lQ2Fwc31TdG9yZWA7XG5cbiAgICAgICAgaWYoIWV4aXN0c1N5bmMoc3RvcmVQYXRoKSkge1xuICAgICAgICAvLyBDb3B5IHN0b3JlIGZpbGVzXG4gICAgICAgICAgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgdGVtcGxhdGVQYXRoLCAnLi8uU2FtcGxlU3RvcmUnKSwgY3dkKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBkaXJlY3RvcnlcbiAgICAgICAgICByZW5hbWVTeW5jKGAke2N3ZH0vLlNhbXBsZVN0b3JlYCwgc3RvcmVQYXRoKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSB0ZXN0XG4gICAgICAgICAgY29uc3Qgc3RvcmVUZXN0UGF0aDogc3RyaW5nID0gYCR7c3RvcmVQYXRofS8ke25hbWVDYXBzfVN0b3JlLnRlc3Qke3RlbXBsYXRlRXh0fWA7XG4gICAgICAgICAgcmVuYW1lU3luYyhgJHtzdG9yZVBhdGh9L1NhbXBsZVN0b3JlLnRlc3Qke3RlbXBsYXRlRXh0fS50eHRgLCBzdG9yZVRlc3RQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSBzdG9yZSBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHN0b3JlVGVzdFBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBzb3VyY2UgZmlsZVxuICAgICAgICAgIGNvbnN0IHN0b3JlRmlsZVBhdGg6IHN0cmluZyA9IGAke3N0b3JlUGF0aH0vJHtuYW1lQ2Fwc31TdG9yZSR7dGVtcGxhdGVFeHR9YDtcbiAgICAgICAgICByZW5hbWVTeW5jKGAke3N0b3JlUGF0aH0vU2FtcGxlU3RvcmUke3RlbXBsYXRlRXh0fS50eHRgLCBzdG9yZUZpbGVQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSBzdG9yZSBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHN0b3JlRmlsZVBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjcmVhdGUgbmV3ICR7dHlwZX0uIERpcmVjdG9yeSwgJHtzdG9yZVBhdGh9IGFscmVhZHkgZXhpc3RzLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBjYWxsYmFjaygxKTtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDYW5ub3QgY3JlYXRlIG5ldyAke3R5cGV9LiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICBjYWxsYmFjaygxKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAndHNjb25maWcnOiB7XG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGZpbGVcbiAgICAgIGF3YWl0IHJlbW92ZUZpbGVzKCd0c2NvbmZpZy5qc29uJywgdHJ1ZSk7XG5cbiAgICAgIC8vIEdldCB0c2NvbmZpZyB0ZW1wbGF0ZVxuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4vLi4vdHNjb25maWcudGVtcGxhdGUuanNvbicpO1xuICAgICAgbGV0IGRhdGE6IHN0cmluZyA9IHJlYWRGaWxlU3luYyh0ZW1wbGF0ZVBhdGgsICd1dGY4Jyk7XG5cbiAgICAgIC8vIFVwZGF0ZSBMZXggdHNjb25maWcgdGVtcGxhdGUgd2l0aCBzb3VyY2UgYW5kIG91dHB1dCBkaXJlY3Rvcmllc1xuICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvLlxcL3NyYy9nLCBzb3VyY2VQYXRoKTtcbiAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoLy5cXC9kaXN0L2csIG91dHB1dFBhdGgpO1xuXG4gICAgICAvLyBTYXZlIG5ldyB0c2NvbmZpZyB0byBhcHBcbiAgICAgIGNvbnN0IGRlc3RQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShjd2QsICcuL3RzY29uZmlnLmpzb24nKTtcbiAgICAgIHdyaXRlRmlsZVN5bmMoZGVzdFBhdGgsIGRhdGEsICd1dGY4Jyk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAndmlldyc6IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEZpbGVuYW1lcyh7XG4gICAgICAgIGNsaU5hbWUsXG4gICAgICAgIG5hbWU6IG91dHB1dE5hbWUsXG4gICAgICAgIHF1aWV0LFxuICAgICAgICB0eXBlLFxuICAgICAgICB1c2VUeXBlc2NyaXB0XG4gICAgICB9KTtcblxuICAgICAgaWYoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge25hbWVDYXBzLCB0ZW1wbGF0ZVBhdGgsIHRlbXBsYXRlUmVhY3R9ID0gcmVzdWx0O1xuICAgICAgY29uc3Qgdmlld1BhdGg6IHN0cmluZyA9IGAke2N3ZH0vJHtuYW1lQ2Fwc31WaWV3YDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYoIWV4aXN0c1N5bmModmlld1BhdGgpKSB7XG4gICAgICAgIC8vIENvcHkgdmlldyBmaWxlc1xuICAgICAgICAgIGNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jKHBhdGhSZXNvbHZlKGRpck5hbWUsIHRlbXBsYXRlUGF0aCwgJy4vLlNhbXBsZVZpZXcnKSwgY3dkKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBkaXJlY3RvcnlcbiAgICAgICAgICByZW5hbWVTeW5jKGAke2N3ZH0vLlNhbXBsZVZpZXdgLCB2aWV3UGF0aCk7XG5cbiAgICAgICAgICAvLyBSZW5hbWUgQ1NTXG4gICAgICAgICAgY29uc3Qgdmlld1N0eWxlUGF0aDogc3RyaW5nID0gYCR7dmlld1BhdGh9LyR7b3V0cHV0TmFtZX1WaWV3LmNzc2A7XG4gICAgICAgICAgcmVuYW1lU3luYyhgJHt2aWV3UGF0aH0vc2FtcGxlVmlldy5jc3NgLCB2aWV3U3R5bGVQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSB2aWV3IG5hbWVcbiAgICAgICAgICB1cGRhdGVUZW1wbGF0ZU5hbWUodmlld1N0eWxlUGF0aCwgb3V0cHV0TmFtZSwgbmFtZUNhcHMpO1xuXG4gICAgICAgICAgLy8gUmVuYW1lIHRlc3RcbiAgICAgICAgICBjb25zdCB2aWV3VGVzdFBhdGg6IHN0cmluZyA9IGAke3ZpZXdQYXRofS8ke25hbWVDYXBzfVZpZXcudGVzdCR7dGVtcGxhdGVSZWFjdH1gO1xuICAgICAgICAgIHJlbmFtZVN5bmMoYCR7dmlld1BhdGh9L1NhbXBsZVZpZXcudGVzdCR7dGVtcGxhdGVSZWFjdH0udHh0YCwgdmlld1Rlc3RQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSB2aWV3IG5hbWVcbiAgICAgICAgICB1cGRhdGVUZW1wbGF0ZU5hbWUodmlld1Rlc3RQYXRoLCBvdXRwdXROYW1lLCBuYW1lQ2Fwcyk7XG5cbiAgICAgICAgICAvLyBSZW5hbWUgc291cmNlIGZpbGVcbiAgICAgICAgICBjb25zdCB2aWV3RmlsZVBhdGg6IHN0cmluZyA9IGAke3ZpZXdQYXRofS8ke25hbWVDYXBzfVZpZXcke3RlbXBsYXRlUmVhY3R9YDtcbiAgICAgICAgICByZW5hbWVTeW5jKGAke3ZpZXdQYXRofS9TYW1wbGVWaWV3JHt0ZW1wbGF0ZVJlYWN0fS50eHRgLCB2aWV3RmlsZVBhdGgpO1xuXG4gICAgICAgICAgLy8gU2VhcmNoIGFuZCByZXBsYWNlIHZpZXcgbmFtZVxuICAgICAgICAgIHVwZGF0ZVRlbXBsYXRlTmFtZSh2aWV3RmlsZVBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjcmVhdGUgbmV3ICR7dHlwZX0uIERpcmVjdG9yeSwgJHt2aWV3UGF0aH0gYWxyZWFkeSBleGlzdHMuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjcmVhdGUgbmV3ICR7dHlwZX0uICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICd2c2NvZGUnOiB7XG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGRpcmVjdG9yeVxuICAgICAgYXdhaXQgcmVtb3ZlRmlsZXMoJy52c2NvZGUnLCB0cnVlKTtcblxuICAgICAgLy8gQ29weSB2c2NvZGUgY29uZmlndXJhdGlvblxuICAgICAgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uLy4uLy52c2NvZGUnKSwgY3dkKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxiYWNrKDApO1xuICByZXR1cm4gMDtcbn07Il0sCiAgIm1hcHBpbmdzIjogIkFBSUEsU0FBUSxZQUFZLGNBQWMsWUFBWSxxQkFBb0I7QUFDbEUsU0FBUSxXQUFXLG1CQUFrQjtBQUVyQyxTQUFRLHVCQUFzQjtBQUM5QixTQUFRLGlCQUFnQjtBQUN4QixTQUFRLHlCQUF5QixjQUFjLGFBQWEsMEJBQXlCO0FBQ3JGLFNBQVEsa0JBQWlCO0FBQ3pCLFNBQVEsV0FBVTtBQVdYLE1BQU0sU0FBUyxPQUFPLE1BQWMsS0FBb0IsV0FBMkIsT0FBTyxDQUFDLE9BQXdCO0FBQ3hILFFBQU0sRUFBQyxVQUFVLE9BQU8sYUFBYSxJQUFJLGFBQWEsSUFBSSxNQUFLLElBQUk7QUFDbkUsUUFBTSxNQUFjLFFBQVEsSUFBSTtBQUNoQyxNQUFJLEdBQUcsT0FBTyxhQUFhLElBQUksT0FBTyxRQUFRLEtBQUs7QUFHbkQsUUFBTSxVQUFVLFlBQVksS0FBSyxLQUFLO0FBQ3RDLFFBQU0sRUFBQyxhQUFhLElBQUksYUFBYSxJQUFJLGNBQWEsSUFBSSxVQUFVO0FBRXBFLE1BQUcsZUFBZTtBQUVoQixjQUFVLHNCQUFzQjtBQUFBLEVBQ2xDO0FBRUEsUUFBTSxFQUFDLE9BQU0sSUFBSTtBQUNqQixRQUFNLFVBQVUsV0FBVztBQUUzQixVQUFPLE1BQU07QUFBQSxJQUNYLEtBQUssYUFBYTtBQUNoQixZQUFNLGtCQUEwQixNQUFNLGdCQUFnQixFQUFDLFNBQVMsUUFBUSxZQUFZLE1BQUssQ0FBQztBQUMxRixlQUFTLGVBQWU7QUFDeEIsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUNBLEtBQUssU0FBUztBQUNaLFVBQUk7QUFDRixjQUFNLFNBQVMsYUFBYTtBQUFBLFVBQzFCO0FBQUEsVUFDQSxNQUFNO0FBQUEsVUFDTjtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBRUQsWUFBRyxDQUFDLFFBQVE7QUFDVixpQkFBTztBQUFBLFFBQ1Q7QUFFQSxjQUFNLEVBQUMsVUFBVSxhQUFhLGFBQVksSUFBSTtBQUM5QyxjQUFNLFlBQW9CLEdBQUcsR0FBRyxJQUFJLFFBQVE7QUFFNUMsWUFBRyxDQUFDLFdBQVcsU0FBUyxHQUFHO0FBRXpCLGtDQUF3QixZQUFZLFNBQVMsY0FBYyxnQkFBZ0IsR0FBRyxHQUFHO0FBR2pGLHFCQUFXLEdBQUcsR0FBRyxpQkFBaUIsU0FBUztBQUczQyxnQkFBTSxnQkFBd0IsR0FBRyxTQUFTLElBQUksUUFBUSxhQUFhLFdBQVc7QUFDOUUscUJBQVcsR0FBRyxTQUFTLG9CQUFvQixXQUFXLFFBQVEsYUFBYTtBQUczRSw2QkFBbUIsZUFBZSxZQUFZLFFBQVE7QUFHdEQsZ0JBQU0sZ0JBQXdCLEdBQUcsU0FBUyxJQUFJLFFBQVEsUUFBUSxXQUFXO0FBQ3pFLHFCQUFXLEdBQUcsU0FBUyxlQUFlLFdBQVcsUUFBUSxhQUFhO0FBR3RFLDZCQUFtQixlQUFlLFlBQVksUUFBUTtBQUFBLFFBQ3hELE9BQU87QUFDTCxjQUFJO0FBQUEsRUFBSyxPQUFPLDZCQUE2QixJQUFJLGdCQUFnQixTQUFTLG9CQUFvQixTQUFTLEtBQUs7QUFDNUcsbUJBQVMsQ0FBQztBQUNWLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0YsU0FBUyxPQUFPO0FBQ2QsWUFBSTtBQUFBLEVBQUssT0FBTyw2QkFBNkIsSUFBSSxLQUFLLE1BQU0sT0FBTyxJQUFJLFNBQVMsS0FBSztBQUNyRixpQkFBUyxDQUFDO0FBQ1YsZUFBTztBQUFBLE1BQ1Q7QUFDQTtBQUFBLElBQ0Y7QUFBQSxJQUNBLEtBQUssWUFBWTtBQUVmLFlBQU0sWUFBWSxpQkFBaUIsSUFBSTtBQUd2QyxZQUFNLGVBQXVCLFlBQVksU0FBUyxpQ0FBaUM7QUFDbkYsVUFBSSxPQUFlLGFBQWEsY0FBYyxNQUFNO0FBR3BELGFBQU8sS0FBSyxRQUFRLFdBQVcsVUFBVTtBQUN6QyxhQUFPLEtBQUssUUFBUSxZQUFZLFVBQVU7QUFHMUMsWUFBTSxXQUFtQixZQUFZLEtBQUssaUJBQWlCO0FBQzNELG9CQUFjLFVBQVUsTUFBTSxNQUFNO0FBQ3BDO0FBQUEsSUFDRjtBQUFBLElBQ0EsS0FBSyxRQUFRO0FBQ1gsWUFBTSxTQUFTLGFBQWE7QUFBQSxRQUMxQjtBQUFBLFFBQ0EsTUFBTTtBQUFBLFFBQ047QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUVELFVBQUcsQ0FBQyxRQUFRO0FBQ1YsZUFBTztBQUFBLE1BQ1Q7QUFFQSxZQUFNLEVBQUMsVUFBVSxjQUFjLGNBQWEsSUFBSTtBQUNoRCxZQUFNLFdBQW1CLEdBQUcsR0FBRyxJQUFJLFFBQVE7QUFFM0MsVUFBSTtBQUNGLFlBQUcsQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUV4QixrQ0FBd0IsWUFBWSxTQUFTLGNBQWMsZUFBZSxHQUFHLEdBQUc7QUFHaEYscUJBQVcsR0FBRyxHQUFHLGdCQUFnQixRQUFRO0FBR3pDLGdCQUFNLGdCQUF3QixHQUFHLFFBQVEsSUFBSSxVQUFVO0FBQ3ZELHFCQUFXLEdBQUcsUUFBUSxtQkFBbUIsYUFBYTtBQUd0RCw2QkFBbUIsZUFBZSxZQUFZLFFBQVE7QUFHdEQsZ0JBQU0sZUFBdUIsR0FBRyxRQUFRLElBQUksUUFBUSxZQUFZLGFBQWE7QUFDN0UscUJBQVcsR0FBRyxRQUFRLG1CQUFtQixhQUFhLFFBQVEsWUFBWTtBQUcxRSw2QkFBbUIsY0FBYyxZQUFZLFFBQVE7QUFHckQsZ0JBQU0sZUFBdUIsR0FBRyxRQUFRLElBQUksUUFBUSxPQUFPLGFBQWE7QUFDeEUscUJBQVcsR0FBRyxRQUFRLGNBQWMsYUFBYSxRQUFRLFlBQVk7QUFHckUsNkJBQW1CLGNBQWMsWUFBWSxRQUFRO0FBQUEsUUFDdkQsT0FBTztBQUNMLGNBQUk7QUFBQSxFQUFLLE9BQU8sNkJBQTZCLElBQUksZ0JBQWdCLFFBQVEsb0JBQW9CLFNBQVMsS0FBSztBQUMzRyxtQkFBUyxDQUFDO0FBQ1YsaUJBQU87QUFBQSxRQUNUO0FBQUEsTUFDRixTQUFTLE9BQU87QUFDZCxZQUFJO0FBQUEsRUFBSyxPQUFPLDZCQUE2QixJQUFJLEtBQUssTUFBTSxPQUFPLElBQUksU0FBUyxLQUFLO0FBQ3JGLGlCQUFTLENBQUM7QUFDVixlQUFPO0FBQUEsTUFDVDtBQUNBO0FBQUEsSUFDRjtBQUFBLElBQ0EsS0FBSyxVQUFVO0FBRWIsWUFBTSxZQUFZLFdBQVcsSUFBSTtBQUdqQyw4QkFBd0IsWUFBWSxTQUFTLGtCQUFrQixHQUFHLEdBQUc7QUFDckU7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFdBQVMsQ0FBQztBQUNWLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
@@ -5,6 +5,8 @@ export interface DevOptions {
5
5
  readonly open?: boolean;
6
6
  readonly quiet?: boolean;
7
7
  readonly remove?: boolean;
8
+ readonly translations?: boolean;
9
+ readonly usePublicIp?: boolean;
8
10
  readonly variables?: string;
9
11
  }
10
12
  export type DevCallback = (status: number) => void;