@nlabs/lex 1.49.5 → 1.50.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 (52) hide show
  1. package/.swcrc +35 -0
  2. package/README.md +43 -59
  3. package/config.json +32 -8
  4. package/examples/lex.config.js +110 -10
  5. package/lex.config.js +34 -7
  6. package/lib/Button.stories.js +99 -0
  7. package/lib/LexConfig.d.ts +60 -22
  8. package/lib/LexConfig.js +285 -244
  9. package/lib/commands/ai/ai.js +287 -288
  10. package/lib/commands/ai/index.js +8 -7
  11. package/lib/commands/build/build.d.ts +2 -2
  12. package/lib/commands/build/build.js +349 -458
  13. package/lib/commands/clean/clean.js +45 -33
  14. package/lib/commands/compile/compile.js +214 -228
  15. package/lib/commands/config/config.js +46 -42
  16. package/lib/commands/copy/copy.js +36 -35
  17. package/lib/commands/create/create.js +200 -121
  18. package/lib/commands/dev/dev.d.ts +1 -0
  19. package/lib/commands/dev/dev.js +261 -259
  20. package/lib/commands/init/init.js +108 -88
  21. package/lib/commands/link/link.js +18 -14
  22. package/lib/commands/lint/lint.js +735 -742
  23. package/lib/commands/migrate/migrate.js +49 -36
  24. package/lib/commands/publish/publish.js +116 -96
  25. package/lib/commands/serverless/serverless.js +611 -585
  26. package/lib/commands/storybook/storybook.js +242 -238
  27. package/lib/commands/test/test.js +381 -409
  28. package/lib/commands/update/update.js +141 -120
  29. package/lib/commands/upgrade/upgrade.js +51 -44
  30. package/lib/commands/versions/versions.d.ts +1 -1
  31. package/lib/commands/versions/versions.js +36 -38
  32. package/lib/create/changelog.js +136 -125
  33. package/lib/index.js +40 -38
  34. package/lib/lex.js +95 -68
  35. package/lib/storybook/index.js +6 -1
  36. package/lib/test-react/index.js +7 -84
  37. package/lib/types.d.ts +1 -1
  38. package/lib/types.js +7 -1
  39. package/lib/utils/aiService.js +240 -227
  40. package/lib/utils/app.js +274 -273
  41. package/lib/utils/deepMerge.js +37 -23
  42. package/lib/utils/file.js +218 -215
  43. package/lib/utils/log.js +29 -27
  44. package/lib/utils/reactShim.js +7 -85
  45. package/lib/utils/translations.js +92 -82
  46. package/package.json +63 -64
  47. package/templates/typescript/DataLayer.js.txt +218 -0
  48. package/templates/typescript/DataLayer.test.js.txt +268 -0
  49. package/templates/typescript/DataLayer.test.ts.txt +269 -0
  50. package/templates/typescript/DataLayer.ts.txt +227 -0
  51. package/webpack.config.js +38 -28
  52. package/lib/commands/lint/autofix.d.ts +0 -2
@@ -1,43 +1,47 @@
1
- import { writeFileSync } from "fs";
2
- import startCase from "lodash/startCase.js";
3
- import { relative as pathRelative } from "path";
4
- import { LexConfig } from "../../LexConfig.js";
5
- import { createSpinner } from "../../utils/app.js";
6
- import { log } from "../../utils/log.js";
7
- const config = async (type, cmd, callback = () => ({})) => {
8
- const { cliName = "Lex", json, quiet } = cmd;
9
- const validTypes = ["app", "jest", "webpack"];
10
- if (!validTypes.includes(type)) {
11
- log(`
12
- ${cliName} Error: Option for ${type} not found. Configurations only available for app, jest, and webpack.`, "error", quiet);
13
- callback(1);
14
- return Promise.resolve(1);
15
- }
16
- log(`${cliName} generating configuration for ${startCase(type)}...`, "info", quiet);
17
- await LexConfig.parseConfig(cmd);
18
- let configOptions;
19
- switch (type) {
20
- case "app":
21
- configOptions = LexConfig.config;
22
- break;
23
- case "jest":
24
- configOptions = import("../../../jest.config.mjs");
25
- break;
26
- case "webpack":
27
- configOptions = import("../../../webpack.config.js");
28
- break;
29
- }
30
- const jsonOutput = JSON.stringify(configOptions, null, 2);
31
- if (json) {
32
- const spinner = createSpinner(quiet);
33
- spinner.start("Creating JSON output...");
34
- writeFileSync(json, jsonOutput);
35
- spinner.succeed(`Successfully saved JSON output to ${pathRelative(process.cwd(), json)}`);
36
- }
37
- callback(0);
38
- return Promise.resolve(0);
1
+ /**
2
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { writeFileSync } from 'fs';
5
+ import startCase from 'lodash/startCase.js';
6
+ import { relative as pathRelative } from 'path';
7
+ import { LexConfig } from '../../LexConfig.js';
8
+ import { createSpinner } from '../../utils/app.js';
9
+ import { log } from '../../utils/log.js';
10
+ export const config = async (type, cmd, callback = ()=>({}))=>{
11
+ const { cliName = 'Lex', json, quiet } = cmd;
12
+ const validTypes = [
13
+ 'app',
14
+ 'jest',
15
+ 'webpack'
16
+ ];
17
+ if (!validTypes.includes(type)) {
18
+ log(`\n${cliName} Error: Option for ${type} not found. Configurations only available for app, jest, and webpack.`, 'error', quiet);
19
+ callback(1);
20
+ return Promise.resolve(1);
21
+ }
22
+ log(`${cliName} generating configuration for ${startCase(type)}...`, 'info', quiet);
23
+ await LexConfig.parseConfig(cmd);
24
+ let configOptions;
25
+ switch(type){
26
+ case 'app':
27
+ configOptions = LexConfig.config;
28
+ break;
29
+ case 'jest':
30
+ configOptions = import('../../../jest.config.mjs');
31
+ break;
32
+ case 'webpack':
33
+ configOptions = import('../../../webpack.config.js');
34
+ break;
35
+ }
36
+ const jsonOutput = JSON.stringify(configOptions, null, 2);
37
+ if (json) {
38
+ const spinner = createSpinner(quiet);
39
+ spinner.start('Creating JSON output...');
40
+ writeFileSync(json, jsonOutput);
41
+ spinner.succeed(`Successfully saved JSON output to ${pathRelative(process.cwd(), json)}`);
42
+ }
43
+ callback(0);
44
+ return Promise.resolve(0);
39
45
  };
40
- export {
41
- config
42
- };
43
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvbmZpZy9jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge3dyaXRlRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCBzdGFydENhc2UgZnJvbSAnbG9kYXNoL3N0YXJ0Q2FzZS5qcyc7XG5pbXBvcnQge3JlbGF0aXZlIGFzIHBhdGhSZWxhdGl2ZX0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7TGV4Q29uZmlnfSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuaW1wb3J0IHtjcmVhdGVTcGlubmVyfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGpzb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQ29uZmlnQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjb25maWcgPSBhc3luYyAodHlwZTogc3RyaW5nLCBjbWQ6IENvbmZpZ09wdGlvbnMsIGNhbGxiYWNrOiBDb25maWdDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBqc29uLCBxdWlldH0gPSBjbWQ7XG4gIGNvbnN0IHZhbGlkVHlwZXM6IHN0cmluZ1tdID0gWydhcHAnLCAnamVzdCcsICd3ZWJwYWNrJ107XG5cbiAgaWYoIXZhbGlkVHlwZXMuaW5jbHVkZXModHlwZSkpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IE9wdGlvbiBmb3IgJHt0eXBlfSBub3QgZm91bmQuIENvbmZpZ3VyYXRpb25zIG9ubHkgYXZhaWxhYmxlIGZvciBhcHAsIGplc3QsIGFuZCB3ZWJwYWNrLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDEpO1xuICB9XG5cbiAgbG9nKGAke2NsaU5hbWV9IGdlbmVyYXRpbmcgY29uZmlndXJhdGlvbiBmb3IgJHtzdGFydENhc2UodHlwZSl9Li4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgbGV0IGNvbmZpZ09wdGlvbnM7XG5cbiAgc3dpdGNoKHR5cGUpIHtcbiAgICBjYXNlICdhcHAnOlxuICAgICAgY29uZmlnT3B0aW9ucyA9IExleENvbmZpZy5jb25maWc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdqZXN0JzpcbiAgICAgIGNvbmZpZ09wdGlvbnMgPSBpbXBvcnQoJy4uLy4uLy4uL2plc3QuY29uZmlnLm1qcycpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnd2VicGFjayc6XG4gICAgICBjb25maWdPcHRpb25zID0gaW1wb3J0KCcuLi8uLi8uLi93ZWJwYWNrLmNvbmZpZy5qcycpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCBqc29uT3V0cHV0OiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjb25maWdPcHRpb25zLCBudWxsLCAyKTtcblxuICBpZihqc29uKSB7XG4gICAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gICAgc3Bpbm5lci5zdGFydCgnQ3JlYXRpbmcgSlNPTiBvdXRwdXQuLi4nKTtcblxuICAgIHdyaXRlRmlsZVN5bmMoanNvbiwganNvbk91dHB1dCk7XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoYFN1Y2Nlc3NmdWxseSBzYXZlZCBKU09OIG91dHB1dCB0byAke3BhdGhSZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBqc29uKX1gKTtcbiAgfVxuXG4gIGNhbGxiYWNrKDApO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDApO1xufTsiXSwKICAibWFwcGluZ3MiOiAiQUFJQSxTQUFRLHFCQUFvQjtBQUM1QixPQUFPLGVBQWU7QUFDdEIsU0FBUSxZQUFZLG9CQUFtQjtBQUV2QyxTQUFRLGlCQUFnQjtBQUN4QixTQUFRLHFCQUFvQjtBQUM1QixTQUFRLFdBQVU7QUFVWCxNQUFNLFNBQVMsT0FBTyxNQUFjLEtBQW9CLFdBQTJCLE9BQU8sQ0FBQyxPQUF3QjtBQUN4SCxRQUFNLEVBQUMsVUFBVSxPQUFPLE1BQU0sTUFBSyxJQUFJO0FBQ3ZDLFFBQU0sYUFBdUIsQ0FBQyxPQUFPLFFBQVEsU0FBUztBQUV0RCxNQUFHLENBQUMsV0FBVyxTQUFTLElBQUksR0FBRztBQUM3QixRQUFJO0FBQUEsRUFBSyxPQUFPLHNCQUFzQixJQUFJLHlFQUF5RSxTQUFTLEtBQUs7QUFDakksYUFBUyxDQUFDO0FBQ1YsV0FBTyxRQUFRLFFBQVEsQ0FBQztBQUFBLEVBQzFCO0FBRUEsTUFBSSxHQUFHLE9BQU8saUNBQWlDLFVBQVUsSUFBSSxDQUFDLE9BQU8sUUFBUSxLQUFLO0FBRWxGLFFBQU0sVUFBVSxZQUFZLEdBQUc7QUFFL0IsTUFBSTtBQUVKLFVBQU8sTUFBTTtBQUFBLElBQ1gsS0FBSztBQUNILHNCQUFnQixVQUFVO0FBQzFCO0FBQUEsSUFDRixLQUFLO0FBQ0gsc0JBQWdCLE9BQU8sMEJBQTBCO0FBQ2pEO0FBQUEsSUFDRixLQUFLO0FBQ0gsc0JBQWdCLE9BQU8sNEJBQTRCO0FBQ25EO0FBQUEsRUFDSjtBQUVBLFFBQU0sYUFBcUIsS0FBSyxVQUFVLGVBQWUsTUFBTSxDQUFDO0FBRWhFLE1BQUcsTUFBTTtBQUNQLFVBQU0sVUFBVSxjQUFjLEtBQUs7QUFFbkMsWUFBUSxNQUFNLHlCQUF5QjtBQUV2QyxrQkFBYyxNQUFNLFVBQVU7QUFFOUIsWUFBUSxRQUFRLHFDQUFxQyxhQUFhLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO0FBQUEsRUFDMUY7QUFFQSxXQUFTLENBQUM7QUFDVixTQUFPLFFBQVEsUUFBUSxDQUFDO0FBQzFCOyIsCiAgIm5hbWVzIjogW10KfQo=
46
+
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb25maWcvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge3dyaXRlRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCBzdGFydENhc2UgZnJvbSAnbG9kYXNoL3N0YXJ0Q2FzZS5qcyc7XG5pbXBvcnQge3JlbGF0aXZlIGFzIHBhdGhSZWxhdGl2ZX0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7TGV4Q29uZmlnfSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuaW1wb3J0IHtjcmVhdGVTcGlubmVyfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGpzb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQ29uZmlnQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjb25maWcgPSBhc3luYyAodHlwZTogc3RyaW5nLCBjbWQ6IENvbmZpZ09wdGlvbnMsIGNhbGxiYWNrOiBDb25maWdDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBqc29uLCBxdWlldH0gPSBjbWQ7XG4gIGNvbnN0IHZhbGlkVHlwZXM6IHN0cmluZ1tdID0gWydhcHAnLCAnamVzdCcsICd3ZWJwYWNrJ107XG5cbiAgaWYoIXZhbGlkVHlwZXMuaW5jbHVkZXModHlwZSkpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IE9wdGlvbiBmb3IgJHt0eXBlfSBub3QgZm91bmQuIENvbmZpZ3VyYXRpb25zIG9ubHkgYXZhaWxhYmxlIGZvciBhcHAsIGplc3QsIGFuZCB3ZWJwYWNrLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDEpO1xuICB9XG5cbiAgbG9nKGAke2NsaU5hbWV9IGdlbmVyYXRpbmcgY29uZmlndXJhdGlvbiBmb3IgJHtzdGFydENhc2UodHlwZSl9Li4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgbGV0IGNvbmZpZ09wdGlvbnM7XG5cbiAgc3dpdGNoKHR5cGUpIHtcbiAgICBjYXNlICdhcHAnOlxuICAgICAgY29uZmlnT3B0aW9ucyA9IExleENvbmZpZy5jb25maWc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdqZXN0JzpcbiAgICAgIGNvbmZpZ09wdGlvbnMgPSBpbXBvcnQoJy4uLy4uLy4uL2plc3QuY29uZmlnLm1qcycpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnd2VicGFjayc6XG4gICAgICBjb25maWdPcHRpb25zID0gaW1wb3J0KCcuLi8uLi8uLi93ZWJwYWNrLmNvbmZpZy5qcycpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCBqc29uT3V0cHV0OiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjb25maWdPcHRpb25zLCBudWxsLCAyKTtcblxuICBpZihqc29uKSB7XG4gICAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gICAgc3Bpbm5lci5zdGFydCgnQ3JlYXRpbmcgSlNPTiBvdXRwdXQuLi4nKTtcblxuICAgIHdyaXRlRmlsZVN5bmMoanNvbiwganNvbk91dHB1dCk7XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoYFN1Y2Nlc3NmdWxseSBzYXZlZCBKU09OIG91dHB1dCB0byAke3BhdGhSZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBqc29uKX1gKTtcbiAgfVxuXG4gIGNhbGxiYWNrKDApO1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDApO1xufTsiXSwibmFtZXMiOlsid3JpdGVGaWxlU3luYyIsInN0YXJ0Q2FzZSIsInJlbGF0aXZlIiwicGF0aFJlbGF0aXZlIiwiTGV4Q29uZmlnIiwiY3JlYXRlU3Bpbm5lciIsImxvZyIsImNvbmZpZyIsInR5cGUiLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJqc29uIiwicXVpZXQiLCJ2YWxpZFR5cGVzIiwiaW5jbHVkZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInBhcnNlQ29uZmlnIiwiY29uZmlnT3B0aW9ucyIsImpzb25PdXRwdXQiLCJKU09OIiwic3RyaW5naWZ5Iiwic3Bpbm5lciIsInN0YXJ0Iiwic3VjY2VlZCIsInByb2Nlc3MiLCJjd2QiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLGFBQWEsUUFBTyxLQUFLO0FBQ2pDLE9BQU9DLGVBQWUsc0JBQXNCO0FBQzVDLFNBQVFDLFlBQVlDLFlBQVksUUFBTyxPQUFPO0FBRTlDLFNBQVFDLFNBQVMsUUFBTyxxQkFBcUI7QUFDN0MsU0FBUUMsYUFBYSxRQUFPLHFCQUFxQjtBQUNqRCxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBVXZDLE9BQU8sTUFBTUMsU0FBUyxPQUFPQyxNQUFjQyxLQUFvQkMsV0FBMkIsSUFBTyxDQUFBLENBQUMsQ0FBQSxDQUFFO0lBQ2xHLE1BQU0sRUFBQ0MsVUFBVSxLQUFLLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFDLEdBQUdKO0lBQ3ZDLE1BQU1LLGFBQXVCO1FBQUM7UUFBTztRQUFRO0tBQVU7SUFFdkQsSUFBRyxDQUFDQSxXQUFXQyxRQUFRLENBQUNQLE9BQU87UUFDN0JGLElBQUksQ0FBQyxFQUFFLEVBQUVLLFFBQVEsbUJBQW1CLEVBQUVILEtBQUsscUVBQXFFLENBQUMsRUFBRSxTQUFTSztRQUM1SEgsU0FBUztRQUNULE9BQU9NLFFBQVFDLE9BQU8sQ0FBQztJQUN6QjtJQUVBWCxJQUFJLEdBQUdLLFFBQVEsOEJBQThCLEVBQUVWLFVBQVVPLE1BQU0sR0FBRyxDQUFDLEVBQUUsUUFBUUs7SUFFN0UsTUFBTVQsVUFBVWMsV0FBVyxDQUFDVDtJQUU1QixJQUFJVTtJQUVKLE9BQU9YO1FBQ0wsS0FBSztZQUNIVyxnQkFBZ0JmLFVBQVVHLE1BQU07WUFDaEM7UUFDRixLQUFLO1lBQ0hZLGdCQUFnQixNQUFNLENBQUM7WUFDdkI7UUFDRixLQUFLO1lBQ0hBLGdCQUFnQixNQUFNLENBQUM7WUFDdkI7SUFDSjtJQUVBLE1BQU1DLGFBQXFCQyxLQUFLQyxTQUFTLENBQUNILGVBQWUsTUFBTTtJQUUvRCxJQUFHUCxNQUFNO1FBQ1AsTUFBTVcsVUFBVWxCLGNBQWNRO1FBRTlCVSxRQUFRQyxLQUFLLENBQUM7UUFFZHhCLGNBQWNZLE1BQU1RO1FBRXBCRyxRQUFRRSxPQUFPLENBQUMsQ0FBQyxrQ0FBa0MsRUFBRXRCLGFBQWF1QixRQUFRQyxHQUFHLElBQUlmLE9BQU87SUFDMUY7SUFFQUYsU0FBUztJQUNULE9BQU9NLFFBQVFDLE9BQU8sQ0FBQztBQUN6QixFQUFFIn0=
@@ -1,38 +1,39 @@
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);
1
+ /**
2
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { existsSync, lstatSync } from 'fs';
5
+ import { copyFileSync, copyFolderRecursiveSync } from '../../utils/app.js';
6
+ import { log } from '../../utils/log.js';
7
+ export const copy = (from, to, cmd, callback = ()=>({}))=>{
8
+ const { cliName = 'Lex', quiet } = cmd;
9
+ // Display message
10
+ log(`${cliName} copying "${to}"...`, 'info', quiet);
11
+ if (!existsSync(from)) {
12
+ log(`\n${cliName} Error: Path not found, "${from}"...`, 'error', quiet);
13
+ callback(1);
14
+ return Promise.resolve(1);
21
15
  }
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);
16
+ if (lstatSync(from).isDirectory()) {
17
+ try {
18
+ // Copy directory
19
+ copyFolderRecursiveSync(from, to);
20
+ } catch (error) {
21
+ log(`\n${cliName} Error: Cannot copy "${from}". ${error.message}`, 'error', quiet);
22
+ callback(1);
23
+ return Promise.resolve(1);
24
+ }
25
+ } else {
26
+ try {
27
+ // Copy file
28
+ copyFileSync(from, to);
29
+ } catch (error) {
30
+ log(`\n${cliName} Error: Cannot copy "${from}" ${error.message}`, 'error', quiet);
31
+ callback(1);
32
+ return Promise.resolve(1);
33
+ }
30
34
  }
31
- }
32
- callback(0);
33
- return Promise.resolve(0);
35
+ callback(0);
36
+ return Promise.resolve(0);
34
37
  };
35
- export {
36
- copy
37
- };
38
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NvcHkvY29weS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgbHN0YXRTeW5jfSBmcm9tICdmcyc7XG5cbmltcG9ydCB7Y29weUZpbGVTeW5jLCBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luY30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvcHlPcHRpb25zIHtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBDb3B5Q2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjb3B5ID0gKFxuICBmcm9tOiBzdHJpbmcsXG4gIHRvOiBzdHJpbmcsXG4gIGNtZDogQ29weU9wdGlvbnMsXG4gIGNhbGxiYWNrOiBDb3B5Q2FsbGJhY2sgPSAoKSA9PiAoe30pXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBxdWlldH0gPSBjbWQ7XG5cbiAgLy8gRGlzcGxheSBtZXNzYWdlXG4gIGxvZyhgJHtjbGlOYW1lfSBjb3B5aW5nIFwiJHt0b31cIi4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGlmKCFleGlzdHNTeW5jKGZyb20pKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBQYXRoIG5vdCBmb3VuZCwgXCIke2Zyb219XCIuLi5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxKTtcbiAgfVxuXG4gIGlmKGxzdGF0U3luYyhmcm9tKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENvcHkgZGlyZWN0b3J5XG4gICAgICBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luYyhmcm9tLCB0byk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ2Fubm90IGNvcHkgXCIke2Zyb219XCIuICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoMSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICAvLyBDb3B5IGZpbGVcbiAgICAgIGNvcHlGaWxlU3luYyhmcm9tLCB0byk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ2Fubm90IGNvcHkgXCIke2Zyb219XCIgJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjaygwKTtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgwKTtcbn07Il0sCiAgIm1hcHBpbmdzIjogIkFBSUEsU0FBUSxZQUFZLGlCQUFnQjtBQUVwQyxTQUFRLGNBQWMsK0JBQThCO0FBQ3BELFNBQVEsV0FBVTtBQVNYLE1BQU0sT0FBTyxDQUNsQixNQUNBLElBQ0EsS0FDQSxXQUF5QixPQUFPLENBQUMsT0FDYjtBQUNwQixRQUFNLEVBQUMsVUFBVSxPQUFPLE1BQUssSUFBSTtBQUdqQyxNQUFJLEdBQUcsT0FBTyxhQUFhLEVBQUUsUUFBUSxRQUFRLEtBQUs7QUFFbEQsTUFBRyxDQUFDLFdBQVcsSUFBSSxHQUFHO0FBQ3BCLFFBQUk7QUFBQSxFQUFLLE9BQU8sNEJBQTRCLElBQUksUUFBUSxTQUFTLEtBQUs7QUFDdEUsYUFBUyxDQUFDO0FBQ1YsV0FBTyxRQUFRLFFBQVEsQ0FBQztBQUFBLEVBQzFCO0FBRUEsTUFBRyxVQUFVLElBQUksRUFBRSxZQUFZLEdBQUc7QUFDaEMsUUFBSTtBQUVGLDhCQUF3QixNQUFNLEVBQUU7QUFBQSxJQUNsQyxTQUFTLE9BQU87QUFDZCxVQUFJO0FBQUEsRUFBSyxPQUFPLHdCQUF3QixJQUFJLE1BQU0sTUFBTSxPQUFPLElBQUksU0FBUyxLQUFLO0FBQ2pGLGVBQVMsQ0FBQztBQUNWLGFBQU8sUUFBUSxRQUFRLENBQUM7QUFBQSxJQUMxQjtBQUFBLEVBQ0YsT0FBTztBQUNMLFFBQUk7QUFFRixtQkFBYSxNQUFNLEVBQUU7QUFBQSxJQUN2QixTQUFTLE9BQU87QUFDZCxVQUFJO0FBQUEsRUFBSyxPQUFPLHdCQUF3QixJQUFJLEtBQUssTUFBTSxPQUFPLElBQUksU0FBUyxLQUFLO0FBQ2hGLGVBQVMsQ0FBQztBQUNWLGFBQU8sUUFBUSxRQUFRLENBQUM7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFFQSxXQUFTLENBQUM7QUFDVixTQUFPLFFBQVEsUUFBUSxDQUFDO0FBQzFCOyIsCiAgIm5hbWVzIjogW10KfQo=
38
+
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb3B5L2NvcHkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgbHN0YXRTeW5jfSBmcm9tICdmcyc7XG5cbmltcG9ydCB7Y29weUZpbGVTeW5jLCBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luY30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvcHlPcHRpb25zIHtcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBDb3B5Q2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjb3B5ID0gKFxuICBmcm9tOiBzdHJpbmcsXG4gIHRvOiBzdHJpbmcsXG4gIGNtZDogQ29weU9wdGlvbnMsXG4gIGNhbGxiYWNrOiBDb3B5Q2FsbGJhY2sgPSAoKSA9PiAoe30pXG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBxdWlldH0gPSBjbWQ7XG5cbiAgLy8gRGlzcGxheSBtZXNzYWdlXG4gIGxvZyhgJHtjbGlOYW1lfSBjb3B5aW5nIFwiJHt0b31cIi4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGlmKCFleGlzdHNTeW5jKGZyb20pKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBQYXRoIG5vdCBmb3VuZCwgXCIke2Zyb219XCIuLi5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxKTtcbiAgfVxuXG4gIGlmKGxzdGF0U3luYyhmcm9tKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENvcHkgZGlyZWN0b3J5XG4gICAgICBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luYyhmcm9tLCB0byk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDYW5ub3QgY29weSBcIiR7ZnJvbX1cIi4gJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENvcHkgZmlsZVxuICAgICAgY29weUZpbGVTeW5jKGZyb20sIHRvKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjb3B5IFwiJHtmcm9tfVwiICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoMSk7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoMCk7XG59OyJdLCJuYW1lcyI6WyJleGlzdHNTeW5jIiwibHN0YXRTeW5jIiwiY29weUZpbGVTeW5jIiwiY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMiLCJsb2ciLCJjb3B5IiwiZnJvbSIsInRvIiwiY21kIiwiY2FsbGJhY2siLCJjbGlOYW1lIiwicXVpZXQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImlzRGlyZWN0b3J5IiwiZXJyb3IiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxVQUFVLEVBQUVDLFNBQVMsUUFBTyxLQUFLO0FBRXpDLFNBQVFDLFlBQVksRUFBRUMsdUJBQXVCLFFBQU8scUJBQXFCO0FBQ3pFLFNBQVFDLEdBQUcsUUFBTyxxQkFBcUI7QUFTdkMsT0FBTyxNQUFNQyxPQUFPLENBQ2xCQyxNQUNBQyxJQUNBQyxLQUNBQyxXQUF5QixJQUFPLENBQUEsQ0FBQyxDQUFBLENBQUU7SUFFbkMsTUFBTSxFQUFDQyxVQUFVLEtBQUssRUFBRUMsS0FBSyxFQUFDLEdBQUdIO0lBRWpDLGtCQUFrQjtJQUNsQkosSUFBSSxHQUFHTSxRQUFRLFVBQVUsRUFBRUgsR0FBRyxJQUFJLENBQUMsRUFBRSxRQUFRSTtJQUU3QyxJQUFHLENBQUNYLFdBQVdNLE9BQU87UUFDcEJGLElBQUksQ0FBQyxFQUFFLEVBQUVNLFFBQVEseUJBQXlCLEVBQUVKLEtBQUssSUFBSSxDQUFDLEVBQUUsU0FBU0s7UUFDakVGLFNBQVM7UUFDVCxPQUFPRyxRQUFRQyxPQUFPLENBQUM7SUFDekI7SUFFQSxJQUFHWixVQUFVSyxNQUFNUSxXQUFXLElBQUk7UUFDaEMsSUFBSTtZQUNGLGlCQUFpQjtZQUNqQlgsd0JBQXdCRyxNQUFNQztRQUNoQyxFQUFFLE9BQU1RLE9BQU87WUFDYlgsSUFBSSxDQUFDLEVBQUUsRUFBRU0sUUFBUSxxQkFBcUIsRUFBRUosS0FBSyxHQUFHLEVBQUVTLE1BQU1DLE9BQU8sRUFBRSxFQUFFLFNBQVNMO1lBQzVFRixTQUFTO1lBQ1QsT0FBT0csUUFBUUMsT0FBTyxDQUFDO1FBQ3pCO0lBQ0YsT0FBTztRQUNMLElBQUk7WUFDRixZQUFZO1lBQ1pYLGFBQWFJLE1BQU1DO1FBQ3JCLEVBQUUsT0FBTVEsT0FBTztZQUNiWCxJQUFJLENBQUMsRUFBRSxFQUFFTSxRQUFRLHFCQUFxQixFQUFFSixLQUFLLEVBQUUsRUFBRVMsTUFBTUMsT0FBTyxFQUFFLEVBQUUsU0FBU0w7WUFDM0VGLFNBQVM7WUFDVCxPQUFPRyxRQUFRQyxPQUFPLENBQUM7UUFDekI7SUFDRjtJQUVBSixTQUFTO0lBQ1QsT0FBT0csUUFBUUMsT0FBTyxDQUFDO0FBQ3pCLEVBQUUifQ==
@@ -1,124 +1,203 @@
1
- import { existsSync, readFileSync, renameSync, writeFileSync } from "fs";
2
- import { resolve as pathResolve } from "path";
3
- import { createChangelog } from "../../create/changelog.js";
4
- import { LexConfig } from "../../LexConfig.js";
5
- import { copyFolderRecursiveSync, getFilenames, removeFiles, updateTemplateName } from "../../utils/app.js";
6
- import { getDirName } from "../../utils/file.js";
7
- import { log } from "../../utils/log.js";
8
- const create = async (type, cmd, callback = () => ({})) => {
9
- const { cliName = "Lex", outputFile = "", outputName = "", quiet } = cmd;
10
- const cwd = process.cwd();
11
- log(`${cliName} creating ${type}...`, "info", quiet);
12
- await LexConfig.parseConfig(cmd, false);
13
- const { outputPath = "", sourcePath = "", useTypescript } = LexConfig.config;
14
- if (useTypescript) {
15
- LexConfig.checkTypescriptConfig();
16
- }
17
- const { config } = LexConfig;
18
- const dirName = getDirName();
19
- switch (type) {
20
- case "changelog": {
21
- const statusChangelog = await createChangelog({ cliName, config, outputFile, quiet });
22
- callback(statusChangelog);
23
- return statusChangelog;
1
+ /**
2
+ * Copyright (c) 2018-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { existsSync, readFileSync, renameSync, writeFileSync } from 'fs';
5
+ import { resolve as pathResolve } from 'path';
6
+ import { createChangelog } from '../../create/changelog.js';
7
+ import { LexConfig } from '../../LexConfig.js';
8
+ import { copyFolderRecursiveSync, getFilenames, removeFiles, updateTemplateName } from '../../utils/app.js';
9
+ import { getDirName } from '../../utils/file.js';
10
+ import { log } from '../../utils/log.js';
11
+ export const create = async (type, cmd, callback = ()=>({}))=>{
12
+ const { cliName = 'Lex', outputFile = '', outputName = '', quiet } = cmd;
13
+ const cwd = process.cwd();
14
+ log(`${cliName} creating ${type}...`, 'info', quiet);
15
+ // Get custom configuration
16
+ await LexConfig.parseConfig(cmd, false);
17
+ const { outputPath = '', sourcePath = '', useTypescript } = LexConfig.config;
18
+ if (useTypescript) {
19
+ // Make sure tsconfig.json exists
20
+ LexConfig.checkTypescriptConfig();
24
21
  }
25
- case "store": {
26
- try {
27
- const result = getFilenames({
28
- cliName,
29
- name: outputName,
30
- quiet,
31
- type,
32
- useTypescript
33
- });
34
- if (!result) {
35
- return 1;
36
- }
37
- const { nameCaps, templateExt, templatePath } = result;
38
- const storePath = `${cwd}/${nameCaps}Store`;
39
- if (!existsSync(storePath)) {
40
- copyFolderRecursiveSync(pathResolve(dirName, templatePath, "./.SampleStore"), cwd);
41
- renameSync(`${cwd}/.SampleStore`, storePath);
42
- const storeTestPath = `${storePath}/${nameCaps}Store.test${templateExt}`;
43
- renameSync(`${storePath}/SampleStore.test${templateExt}.txt`, storeTestPath);
44
- updateTemplateName(storeTestPath, outputName, nameCaps);
45
- const storeFilePath = `${storePath}/${nameCaps}Store${templateExt}`;
46
- renameSync(`${storePath}/SampleStore${templateExt}.txt`, storeFilePath);
47
- updateTemplateName(storeFilePath, outputName, nameCaps);
48
- } else {
49
- log(`
50
- ${cliName} Error: Cannot create new ${type}. Directory, ${storePath} already exists.`, "error", quiet);
51
- callback(1);
52
- return 1;
53
- }
54
- } catch (error) {
55
- log(`
56
- ${cliName} Error: Cannot create new ${type}. ${error.message}`, "error", quiet);
57
- callback(1);
58
- return 1;
59
- }
60
- break;
22
+ const { config } = LexConfig;
23
+ const dirName = getDirName();
24
+ switch(type){
25
+ case 'changelog':
26
+ {
27
+ const statusChangelog = await createChangelog({
28
+ cliName,
29
+ config,
30
+ outputFile,
31
+ quiet
32
+ });
33
+ callback(statusChangelog);
34
+ return statusChangelog;
35
+ }
36
+ case 'store':
37
+ {
38
+ try {
39
+ const result = getFilenames({
40
+ cliName,
41
+ name: outputName,
42
+ quiet,
43
+ type,
44
+ useTypescript
45
+ });
46
+ if (!result) {
47
+ return 1;
48
+ }
49
+ const { nameCaps, templateExt, templatePath } = result;
50
+ const storePath = `${cwd}/${nameCaps}Store`;
51
+ if (!existsSync(storePath)) {
52
+ // Copy store files
53
+ copyFolderRecursiveSync(pathResolve(dirName, templatePath, './.SampleStore'), cwd);
54
+ // Rename directory
55
+ renameSync(`${cwd}/.SampleStore`, storePath);
56
+ // Rename test
57
+ const storeTestPath = `${storePath}/${nameCaps}Store.test${templateExt}`;
58
+ renameSync(`${storePath}/SampleStore.test${templateExt}.txt`, storeTestPath);
59
+ // Search and replace store name
60
+ updateTemplateName(storeTestPath, outputName, nameCaps);
61
+ // Rename source file
62
+ const storeFilePath = `${storePath}/${nameCaps}Store${templateExt}`;
63
+ renameSync(`${storePath}/SampleStore${templateExt}.txt`, storeFilePath);
64
+ // Search and replace store name
65
+ updateTemplateName(storeFilePath, outputName, nameCaps);
66
+ } else {
67
+ log(`\n${cliName} Error: Cannot create new ${type}. Directory, ${storePath} already exists.`, 'error', quiet);
68
+ callback(1);
69
+ return 1;
70
+ }
71
+ } catch (error) {
72
+ log(`\n${cliName} Error: Cannot create new ${type}. ${error.message}`, 'error', quiet);
73
+ callback(1);
74
+ return 1;
75
+ }
76
+ break;
77
+ }
78
+ case 'tsconfig':
79
+ {
80
+ // Remove existing file
81
+ await removeFiles('tsconfig.json', true);
82
+ // Get tsconfig template
83
+ const templatePath = pathResolve(dirName, '../../../tsconfig.template.json');
84
+ let data = readFileSync(templatePath, 'utf8');
85
+ // Update Lex tsconfig template with source and output directories
86
+ data = data.replace(/.\/src/g, sourcePath);
87
+ data = data.replace(/.\/lib/g, outputPath);
88
+ // Save new tsconfig to app
89
+ const destPath = pathResolve(cwd, './tsconfig.json');
90
+ writeFileSync(destPath, data, 'utf8');
91
+ break;
92
+ }
93
+ case 'view':
94
+ {
95
+ const result = getFilenames({
96
+ cliName,
97
+ name: outputName,
98
+ quiet,
99
+ type,
100
+ useTypescript
101
+ });
102
+ if (!result) {
103
+ return 1;
104
+ }
105
+ const { nameCaps, templatePath, templateReact } = result;
106
+ const viewPath = `${cwd}/${nameCaps}View`;
107
+ try {
108
+ if (!existsSync(viewPath)) {
109
+ // Copy view files
110
+ copyFolderRecursiveSync(pathResolve(dirName, templatePath, './.SampleView'), cwd);
111
+ // Rename directory
112
+ renameSync(`${cwd}/.SampleView`, viewPath);
113
+ // Rename CSS
114
+ const viewStylePath = `${viewPath}/${outputName}View.css`;
115
+ renameSync(`${viewPath}/sampleView.css`, viewStylePath);
116
+ // Search and replace view name
117
+ updateTemplateName(viewStylePath, outputName, nameCaps);
118
+ // Rename test
119
+ const viewTestPath = `${viewPath}/${nameCaps}View.test${templateReact}`;
120
+ renameSync(`${viewPath}/SampleView.test${templateReact}.txt`, viewTestPath);
121
+ // Search and replace view name
122
+ updateTemplateName(viewTestPath, outputName, nameCaps);
123
+ // Rename source file
124
+ const viewFilePath = `${viewPath}/${nameCaps}View${templateReact}`;
125
+ renameSync(`${viewPath}/SampleView${templateReact}.txt`, viewFilePath);
126
+ // Search and replace view name
127
+ updateTemplateName(viewFilePath, outputName, nameCaps);
128
+ } else {
129
+ log(`\n${cliName} Error: Cannot create new ${type}. Directory, ${viewPath} already exists.`, 'error', quiet);
130
+ callback(1);
131
+ return 1;
132
+ }
133
+ } catch (error) {
134
+ log(`\n${cliName} Error: Cannot create new ${type}. ${error.message}`, 'error', quiet);
135
+ callback(1);
136
+ return 1;
137
+ }
138
+ break;
139
+ }
140
+ case 'vscode':
141
+ {
142
+ // Remove existing directory
143
+ await removeFiles('.vscode', true);
144
+ // Copy vscode configuration
145
+ copyFolderRecursiveSync(pathResolve(dirName, '../../../.vscode'), cwd);
146
+ break;
147
+ }
148
+ case 'datalayer':
149
+ {
150
+ try {
151
+ const result = getFilenames({
152
+ cliName,
153
+ name: outputName,
154
+ quiet,
155
+ type,
156
+ useTypescript
157
+ });
158
+ if (!result) {
159
+ return 1;
160
+ }
161
+ const { nameCaps, templateExt, templatePath } = result;
162
+ const dataLayerPath = `${cwd}/${nameCaps}DataLayer`;
163
+ if (!existsSync(dataLayerPath)) {
164
+ // Create data layer directory
165
+ const fs = await import('fs');
166
+ fs.mkdirSync(dataLayerPath, {
167
+ recursive: true
168
+ });
169
+ // Copy and rename main data layer file
170
+ const sourceFile = pathResolve(dirName, templatePath, `./DataLayer${templateExt}.txt`);
171
+ const targetFile = `${dataLayerPath}/${nameCaps}DataLayer${templateExt}`;
172
+ if (existsSync(sourceFile)) {
173
+ const content = readFileSync(sourceFile, 'utf8');
174
+ const updatedContent = content.replace(/DataLayer/g, nameCaps);
175
+ writeFileSync(targetFile, updatedContent);
176
+ }
177
+ // Copy and rename test file
178
+ const sourceTestFile = pathResolve(dirName, templatePath, `./DataLayer.test${templateExt}.txt`);
179
+ const targetTestFile = `${dataLayerPath}/${nameCaps}DataLayer.test${templateExt}`;
180
+ if (existsSync(sourceTestFile)) {
181
+ const testContent = readFileSync(sourceTestFile, 'utf8');
182
+ const updatedTestContent = testContent.replace(/DataLayer/g, nameCaps);
183
+ writeFileSync(targetTestFile, updatedTestContent);
184
+ }
185
+ log(`\n${cliName} Success: Created ${nameCaps}DataLayer with test files.`, 'info', quiet);
186
+ } else {
187
+ log(`\n${cliName} Error: Cannot create new ${type}. Directory, ${dataLayerPath} already exists.`, 'error', quiet);
188
+ callback(1);
189
+ return 1;
190
+ }
191
+ } catch (error) {
192
+ log(`\n${cliName} Error: Cannot create new ${type}. ${error.message}`, 'error', quiet);
193
+ callback(1);
194
+ return 1;
195
+ }
196
+ break;
197
+ }
61
198
  }
62
- case "tsconfig": {
63
- await removeFiles("tsconfig.json", true);
64
- const templatePath = pathResolve(dirName, "../../../tsconfig.template.json");
65
- let data = readFileSync(templatePath, "utf8");
66
- data = data.replace(/.\/src/g, sourcePath);
67
- data = data.replace(/.\/lib/g, outputPath);
68
- const destPath = pathResolve(cwd, "./tsconfig.json");
69
- writeFileSync(destPath, data, "utf8");
70
- break;
71
- }
72
- case "view": {
73
- const result = getFilenames({
74
- cliName,
75
- name: outputName,
76
- quiet,
77
- type,
78
- useTypescript
79
- });
80
- if (!result) {
81
- return 1;
82
- }
83
- const { nameCaps, templatePath, templateReact } = result;
84
- const viewPath = `${cwd}/${nameCaps}View`;
85
- try {
86
- if (!existsSync(viewPath)) {
87
- copyFolderRecursiveSync(pathResolve(dirName, templatePath, "./.SampleView"), cwd);
88
- renameSync(`${cwd}/.SampleView`, viewPath);
89
- const viewStylePath = `${viewPath}/${outputName}View.css`;
90
- renameSync(`${viewPath}/sampleView.css`, viewStylePath);
91
- updateTemplateName(viewStylePath, outputName, nameCaps);
92
- const viewTestPath = `${viewPath}/${nameCaps}View.test${templateReact}`;
93
- renameSync(`${viewPath}/SampleView.test${templateReact}.txt`, viewTestPath);
94
- updateTemplateName(viewTestPath, outputName, nameCaps);
95
- const viewFilePath = `${viewPath}/${nameCaps}View${templateReact}`;
96
- renameSync(`${viewPath}/SampleView${templateReact}.txt`, viewFilePath);
97
- updateTemplateName(viewFilePath, outputName, nameCaps);
98
- } else {
99
- log(`
100
- ${cliName} Error: Cannot create new ${type}. Directory, ${viewPath} already exists.`, "error", quiet);
101
- callback(1);
102
- return 1;
103
- }
104
- } catch (error) {
105
- log(`
106
- ${cliName} Error: Cannot create new ${type}. ${error.message}`, "error", quiet);
107
- callback(1);
108
- return 1;
109
- }
110
- break;
111
- }
112
- case "vscode": {
113
- await removeFiles(".vscode", true);
114
- copyFolderRecursiveSync(pathResolve(dirName, "../../../.vscode"), cwd);
115
- break;
116
- }
117
- }
118
- callback(0);
119
- return 0;
120
- };
121
- export {
122
- create
199
+ callback(0);
200
+ return 0;
123
201
  };
124
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS9jcmVhdGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgcmVuYW1lU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtyZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtjcmVhdGVDaGFuZ2Vsb2d9IGZyb20gJy4uLy4uL2NyZWF0ZS9jaGFuZ2Vsb2cuanMnO1xuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NvcHlGb2xkZXJSZWN1cnNpdmVTeW5jLCBnZXRGaWxlbmFtZXMsIHJlbW92ZUZpbGVzLCB1cGRhdGVUZW1wbGF0ZU5hbWV9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2dldERpck5hbWV9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dE5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQ3JlYXRlQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGUgPSBhc3luYyAodHlwZTogc3RyaW5nLCBjbWQ6IENyZWF0ZU9wdGlvbnMsIGNhbGxiYWNrOiBDcmVhdGVDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBvdXRwdXRGaWxlID0gJycsIG91dHB1dE5hbWUgPSAnJywgcXVpZXR9ID0gY21kO1xuICBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG4gIGxvZyhgJHtjbGlOYW1lfSBjcmVhdGluZyAke3R5cGV9Li4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjb25maWd1cmF0aW9uXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQsIGZhbHNlKTtcbiAgY29uc3Qge291dHB1dFBhdGggPSAnJywgc291cmNlUGF0aCA9ICcnLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0c2NvbmZpZy5qc29uIGV4aXN0c1xuICAgIExleENvbmZpZy5jaGVja1R5cGVzY3JpcHRDb25maWcoKTtcbiAgfVxuXG4gIGNvbnN0IHtjb25maWd9ID0gTGV4Q29uZmlnO1xuICBjb25zdCBkaXJOYW1lID0gZ2V0RGlyTmFtZSgpO1xuXG4gIHN3aXRjaCh0eXBlKSB7XG4gICAgY2FzZSAnY2hhbmdlbG9nJzoge1xuICAgICAgY29uc3Qgc3RhdHVzQ2hhbmdlbG9nOiBudW1iZXIgPSBhd2FpdCBjcmVhdGVDaGFuZ2Vsb2coe2NsaU5hbWUsIGNvbmZpZywgb3V0cHV0RmlsZSwgcXVpZXR9KTtcbiAgICAgIGNhbGxiYWNrKHN0YXR1c0NoYW5nZWxvZyk7XG4gICAgICByZXR1cm4gc3RhdHVzQ2hhbmdlbG9nO1xuICAgIH1cbiAgICBjYXNlICdzdG9yZSc6IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEZpbGVuYW1lcyh7XG4gICAgICAgICAgY2xpTmFtZSxcbiAgICAgICAgICBuYW1lOiBvdXRwdXROYW1lLFxuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgdXNlVHlwZXNjcmlwdFxuICAgICAgICB9KTtcblxuICAgICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7bmFtZUNhcHMsIHRlbXBsYXRlRXh0LCB0ZW1wbGF0ZVBhdGh9ID0gcmVzdWx0O1xuICAgICAgICBjb25zdCBzdG9yZVBhdGg6IHN0cmluZyA9IGAke2N3ZH0vJHtuYW1lQ2Fwc31TdG9yZWA7XG5cbiAgICAgICAgaWYoIWV4aXN0c1N5bmMoc3RvcmVQYXRoKSkge1xuICAgICAgICAvLyBDb3B5IHN0b3JlIGZpbGVzXG4gICAgICAgICAgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgdGVtcGxhdGVQYXRoLCAnLi8uU2FtcGxlU3RvcmUnKSwgY3dkKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBkaXJlY3RvcnlcbiAgICAgICAgICByZW5hbWVTeW5jKGAke2N3ZH0vLlNhbXBsZVN0b3JlYCwgc3RvcmVQYXRoKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSB0ZXN0XG4gICAgICAgICAgY29uc3Qgc3RvcmVUZXN0UGF0aDogc3RyaW5nID0gYCR7c3RvcmVQYXRofS8ke25hbWVDYXBzfVN0b3JlLnRlc3Qke3RlbXBsYXRlRXh0fWA7XG4gICAgICAgICAgcmVuYW1lU3luYyhgJHtzdG9yZVBhdGh9L1NhbXBsZVN0b3JlLnRlc3Qke3RlbXBsYXRlRXh0fS50eHRgLCBzdG9yZVRlc3RQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSBzdG9yZSBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHN0b3JlVGVzdFBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBzb3VyY2UgZmlsZVxuICAgICAgICAgIGNvbnN0IHN0b3JlRmlsZVBhdGg6IHN0cmluZyA9IGAke3N0b3JlUGF0aH0vJHtuYW1lQ2Fwc31TdG9yZSR7dGVtcGxhdGVFeHR9YDtcbiAgICAgICAgICByZW5hbWVTeW5jKGAke3N0b3JlUGF0aH0vU2FtcGxlU3RvcmUke3RlbXBsYXRlRXh0fS50eHRgLCBzdG9yZUZpbGVQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSBzdG9yZSBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHN0b3JlRmlsZVBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjcmVhdGUgbmV3ICR7dHlwZX0uIERpcmVjdG9yeSwgJHtzdG9yZVBhdGh9IGFscmVhZHkgZXhpc3RzLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBjYWxsYmFjaygxKTtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDYW5ub3QgY3JlYXRlIG5ldyAke3R5cGV9LiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICBjYWxsYmFjaygxKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAndHNjb25maWcnOiB7XG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGZpbGVcbiAgICAgIGF3YWl0IHJlbW92ZUZpbGVzKCd0c2NvbmZpZy5qc29uJywgdHJ1ZSk7XG5cbiAgICAgIC8vIEdldCB0c2NvbmZpZyB0ZW1wbGF0ZVxuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4vLi4vdHNjb25maWcudGVtcGxhdGUuanNvbicpO1xuICAgICAgbGV0IGRhdGE6IHN0cmluZyA9IHJlYWRGaWxlU3luYyh0ZW1wbGF0ZVBhdGgsICd1dGY4Jyk7XG5cbiAgICAgIC8vIFVwZGF0ZSBMZXggdHNjb25maWcgdGVtcGxhdGUgd2l0aCBzb3VyY2UgYW5kIG91dHB1dCBkaXJlY3Rvcmllc1xuICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvLlxcL3NyYy9nLCBzb3VyY2VQYXRoKTtcbiAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoLy5cXC9saWIvZywgb3V0cHV0UGF0aCk7XG5cbiAgICAgIC8vIFNhdmUgbmV3IHRzY29uZmlnIHRvIGFwcFxuICAgICAgY29uc3QgZGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJy4vdHNjb25maWcuanNvbicpO1xuICAgICAgd3JpdGVGaWxlU3luYyhkZXN0UGF0aCwgZGF0YSwgJ3V0ZjgnKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICd2aWV3Jzoge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0RmlsZW5hbWVzKHtcbiAgICAgICAgY2xpTmFtZSxcbiAgICAgICAgbmFtZTogb3V0cHV0TmFtZSxcbiAgICAgICAgcXVpZXQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVzZVR5cGVzY3JpcHRcbiAgICAgIH0pO1xuXG4gICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7bmFtZUNhcHMsIHRlbXBsYXRlUGF0aCwgdGVtcGxhdGVSZWFjdH0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB2aWV3UGF0aDogc3RyaW5nID0gYCR7Y3dkfS8ke25hbWVDYXBzfVZpZXdgO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZighZXhpc3RzU3luYyh2aWV3UGF0aCkpIHtcbiAgICAgICAgLy8gQ29weSB2aWV3IGZpbGVzXG4gICAgICAgICAgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgdGVtcGxhdGVQYXRoLCAnLi8uU2FtcGxlVmlldycpLCBjd2QpO1xuXG4gICAgICAgICAgLy8gUmVuYW1lIGRpcmVjdG9yeVxuICAgICAgICAgIHJlbmFtZVN5bmMoYCR7Y3dkfS8uU2FtcGxlVmlld2AsIHZpZXdQYXRoKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBDU1NcbiAgICAgICAgICBjb25zdCB2aWV3U3R5bGVQYXRoOiBzdHJpbmcgPSBgJHt2aWV3UGF0aH0vJHtvdXRwdXROYW1lfVZpZXcuY3NzYDtcbiAgICAgICAgICByZW5hbWVTeW5jKGAke3ZpZXdQYXRofS9zYW1wbGVWaWV3LmNzc2AsIHZpZXdTdHlsZVBhdGgpO1xuXG4gICAgICAgICAgLy8gU2VhcmNoIGFuZCByZXBsYWNlIHZpZXcgbmFtZVxuICAgICAgICAgIHVwZGF0ZVRlbXBsYXRlTmFtZSh2aWV3U3R5bGVQYXRoLCBvdXRwdXROYW1lLCBuYW1lQ2Fwcyk7XG5cbiAgICAgICAgICAvLyBSZW5hbWUgdGVzdFxuICAgICAgICAgIGNvbnN0IHZpZXdUZXN0UGF0aDogc3RyaW5nID0gYCR7dmlld1BhdGh9LyR7bmFtZUNhcHN9Vmlldy50ZXN0JHt0ZW1wbGF0ZVJlYWN0fWA7XG4gICAgICAgICAgcmVuYW1lU3luYyhgJHt2aWV3UGF0aH0vU2FtcGxlVmlldy50ZXN0JHt0ZW1wbGF0ZVJlYWN0fS50eHRgLCB2aWV3VGVzdFBhdGgpO1xuXG4gICAgICAgICAgLy8gU2VhcmNoIGFuZCByZXBsYWNlIHZpZXcgbmFtZVxuICAgICAgICAgIHVwZGF0ZVRlbXBsYXRlTmFtZSh2aWV3VGVzdFBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBzb3VyY2UgZmlsZVxuICAgICAgICAgIGNvbnN0IHZpZXdGaWxlUGF0aDogc3RyaW5nID0gYCR7dmlld1BhdGh9LyR7bmFtZUNhcHN9VmlldyR7dGVtcGxhdGVSZWFjdH1gO1xuICAgICAgICAgIHJlbmFtZVN5bmMoYCR7dmlld1BhdGh9L1NhbXBsZVZpZXcke3RlbXBsYXRlUmVhY3R9LnR4dGAsIHZpZXdGaWxlUGF0aCk7XG5cbiAgICAgICAgICAvLyBTZWFyY2ggYW5kIHJlcGxhY2UgdmlldyBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHZpZXdGaWxlUGF0aCwgb3V0cHV0TmFtZSwgbmFtZUNhcHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ2Fubm90IGNyZWF0ZSBuZXcgJHt0eXBlfS4gRGlyZWN0b3J5LCAke3ZpZXdQYXRofSBhbHJlYWR5IGV4aXN0cy5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgY2FsbGJhY2soMSk7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ2Fubm90IGNyZWF0ZSBuZXcgJHt0eXBlfS4gJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgY2FsbGJhY2soMSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ3ZzY29kZSc6IHtcbiAgICAvLyBSZW1vdmUgZXhpc3RpbmcgZGlyZWN0b3J5XG4gICAgICBhd2FpdCByZW1vdmVGaWxlcygnLnZzY29kZScsIHRydWUpO1xuXG4gICAgICAvLyBDb3B5IHZzY29kZSBjb25maWd1cmF0aW9uXG4gICAgICBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luYyhwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4vLi4vLnZzY29kZScpLCBjd2QpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiAwO1xufTsiXSwKICAibWFwcGluZ3MiOiAiQUFJQSxTQUFRLFlBQVksY0FBYyxZQUFZLHFCQUFvQjtB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
202
+
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jcmVhdGUvY3JlYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgcmVuYW1lU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtyZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtjcmVhdGVDaGFuZ2Vsb2d9IGZyb20gJy4uLy4uL2NyZWF0ZS9jaGFuZ2Vsb2cuanMnO1xuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NvcHlGb2xkZXJSZWN1cnNpdmVTeW5jLCBnZXRGaWxlbmFtZXMsIHJlbW92ZUZpbGVzLCB1cGRhdGVUZW1wbGF0ZU5hbWV9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2dldERpck5hbWV9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dE5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQ3JlYXRlQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGUgPSBhc3luYyAodHlwZTogc3RyaW5nLCBjbWQ6IENyZWF0ZU9wdGlvbnMsIGNhbGxiYWNrOiBDcmVhdGVDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBvdXRwdXRGaWxlID0gJycsIG91dHB1dE5hbWUgPSAnJywgcXVpZXR9ID0gY21kO1xuICBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG4gIGxvZyhgJHtjbGlOYW1lfSBjcmVhdGluZyAke3R5cGV9Li4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjb25maWd1cmF0aW9uXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQsIGZhbHNlKTtcbiAgY29uc3Qge291dHB1dFBhdGggPSAnJywgc291cmNlUGF0aCA9ICcnLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0c2NvbmZpZy5qc29uIGV4aXN0c1xuICAgIExleENvbmZpZy5jaGVja1R5cGVzY3JpcHRDb25maWcoKTtcbiAgfVxuXG4gIGNvbnN0IHtjb25maWd9ID0gTGV4Q29uZmlnO1xuICBjb25zdCBkaXJOYW1lID0gZ2V0RGlyTmFtZSgpO1xuXG4gIHN3aXRjaCh0eXBlKSB7XG4gICAgY2FzZSAnY2hhbmdlbG9nJzoge1xuICAgICAgY29uc3Qgc3RhdHVzQ2hhbmdlbG9nOiBudW1iZXIgPSBhd2FpdCBjcmVhdGVDaGFuZ2Vsb2coe2NsaU5hbWUsIGNvbmZpZywgb3V0cHV0RmlsZSwgcXVpZXR9KTtcbiAgICAgIGNhbGxiYWNrKHN0YXR1c0NoYW5nZWxvZyk7XG4gICAgICByZXR1cm4gc3RhdHVzQ2hhbmdlbG9nO1xuICAgIH1cbiAgICBjYXNlICdzdG9yZSc6IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEZpbGVuYW1lcyh7XG4gICAgICAgICAgY2xpTmFtZSxcbiAgICAgICAgICBuYW1lOiBvdXRwdXROYW1lLFxuICAgICAgICAgIHF1aWV0LFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgdXNlVHlwZXNjcmlwdFxuICAgICAgICB9KTtcblxuICAgICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7bmFtZUNhcHMsIHRlbXBsYXRlRXh0LCB0ZW1wbGF0ZVBhdGh9ID0gcmVzdWx0O1xuICAgICAgICBjb25zdCBzdG9yZVBhdGg6IHN0cmluZyA9IGAke2N3ZH0vJHtuYW1lQ2Fwc31TdG9yZWA7XG5cbiAgICAgICAgaWYoIWV4aXN0c1N5bmMoc3RvcmVQYXRoKSkge1xuICAgICAgICAvLyBDb3B5IHN0b3JlIGZpbGVzXG4gICAgICAgICAgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgdGVtcGxhdGVQYXRoLCAnLi8uU2FtcGxlU3RvcmUnKSwgY3dkKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBkaXJlY3RvcnlcbiAgICAgICAgICByZW5hbWVTeW5jKGAke2N3ZH0vLlNhbXBsZVN0b3JlYCwgc3RvcmVQYXRoKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSB0ZXN0XG4gICAgICAgICAgY29uc3Qgc3RvcmVUZXN0UGF0aDogc3RyaW5nID0gYCR7c3RvcmVQYXRofS8ke25hbWVDYXBzfVN0b3JlLnRlc3Qke3RlbXBsYXRlRXh0fWA7XG4gICAgICAgICAgcmVuYW1lU3luYyhgJHtzdG9yZVBhdGh9L1NhbXBsZVN0b3JlLnRlc3Qke3RlbXBsYXRlRXh0fS50eHRgLCBzdG9yZVRlc3RQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSBzdG9yZSBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHN0b3JlVGVzdFBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSBzb3VyY2UgZmlsZVxuICAgICAgICAgIGNvbnN0IHN0b3JlRmlsZVBhdGg6IHN0cmluZyA9IGAke3N0b3JlUGF0aH0vJHtuYW1lQ2Fwc31TdG9yZSR7dGVtcGxhdGVFeHR9YDtcbiAgICAgICAgICByZW5hbWVTeW5jKGAke3N0b3JlUGF0aH0vU2FtcGxlU3RvcmUke3RlbXBsYXRlRXh0fS50eHRgLCBzdG9yZUZpbGVQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSBzdG9yZSBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHN0b3JlRmlsZVBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjcmVhdGUgbmV3ICR7dHlwZX0uIERpcmVjdG9yeSwgJHtzdG9yZVBhdGh9IGFscmVhZHkgZXhpc3RzLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBjYWxsYmFjaygxKTtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjcmVhdGUgbmV3ICR7dHlwZX0uICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICd0c2NvbmZpZyc6IHtcbiAgICAvLyBSZW1vdmUgZXhpc3RpbmcgZmlsZVxuICAgICAgYXdhaXQgcmVtb3ZlRmlsZXMoJ3RzY29uZmlnLmpzb24nLCB0cnVlKTtcblxuICAgICAgLy8gR2V0IHRzY29uZmlnIHRlbXBsYXRlXG4gICAgICBjb25zdCB0ZW1wbGF0ZVBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGRpck5hbWUsICcuLi8uLi8uLi90c2NvbmZpZy50ZW1wbGF0ZS5qc29uJyk7XG4gICAgICBsZXQgZGF0YTogc3RyaW5nID0gcmVhZEZpbGVTeW5jKHRlbXBsYXRlUGF0aCwgJ3V0ZjgnKTtcblxuICAgICAgLy8gVXBkYXRlIExleCB0c2NvbmZpZyB0ZW1wbGF0ZSB3aXRoIHNvdXJjZSBhbmQgb3V0cHV0IGRpcmVjdG9yaWVzXG4gICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKC8uXFwvc3JjL2csIHNvdXJjZVBhdGgpO1xuICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvLlxcL2xpYi9nLCBvdXRwdXRQYXRoKTtcblxuICAgICAgLy8gU2F2ZSBuZXcgdHNjb25maWcgdG8gYXBwXG4gICAgICBjb25zdCBkZXN0UGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUoY3dkLCAnLi90c2NvbmZpZy5qc29uJyk7XG4gICAgICB3cml0ZUZpbGVTeW5jKGRlc3RQYXRoLCBkYXRhLCAndXRmOCcpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ3ZpZXcnOiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRGaWxlbmFtZXMoe1xuICAgICAgICBjbGlOYW1lLFxuICAgICAgICBuYW1lOiBvdXRwdXROYW1lLFxuICAgICAgICBxdWlldCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdXNlVHlwZXNjcmlwdFxuICAgICAgfSk7XG5cbiAgICAgIGlmKCFyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtuYW1lQ2FwcywgdGVtcGxhdGVQYXRoLCB0ZW1wbGF0ZVJlYWN0fSA9IHJlc3VsdDtcbiAgICAgIGNvbnN0IHZpZXdQYXRoOiBzdHJpbmcgPSBgJHtjd2R9LyR7bmFtZUNhcHN9Vmlld2A7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmKCFleGlzdHNTeW5jKHZpZXdQYXRoKSkge1xuICAgICAgICAvLyBDb3B5IHZpZXcgZmlsZXNcbiAgICAgICAgICBjb3B5Rm9sZGVyUmVjdXJzaXZlU3luYyhwYXRoUmVzb2x2ZShkaXJOYW1lLCB0ZW1wbGF0ZVBhdGgsICcuLy5TYW1wbGVWaWV3JyksIGN3ZCk7XG5cbiAgICAgICAgICAvLyBSZW5hbWUgZGlyZWN0b3J5XG4gICAgICAgICAgcmVuYW1lU3luYyhgJHtjd2R9Ly5TYW1wbGVWaWV3YCwgdmlld1BhdGgpO1xuXG4gICAgICAgICAgLy8gUmVuYW1lIENTU1xuICAgICAgICAgIGNvbnN0IHZpZXdTdHlsZVBhdGg6IHN0cmluZyA9IGAke3ZpZXdQYXRofS8ke291dHB1dE5hbWV9Vmlldy5jc3NgO1xuICAgICAgICAgIHJlbmFtZVN5bmMoYCR7dmlld1BhdGh9L3NhbXBsZVZpZXcuY3NzYCwgdmlld1N0eWxlUGF0aCk7XG5cbiAgICAgICAgICAvLyBTZWFyY2ggYW5kIHJlcGxhY2UgdmlldyBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHZpZXdTdHlsZVBhdGgsIG91dHB1dE5hbWUsIG5hbWVDYXBzKTtcblxuICAgICAgICAgIC8vIFJlbmFtZSB0ZXN0XG4gICAgICAgICAgY29uc3Qgdmlld1Rlc3RQYXRoOiBzdHJpbmcgPSBgJHt2aWV3UGF0aH0vJHtuYW1lQ2Fwc31WaWV3LnRlc3Qke3RlbXBsYXRlUmVhY3R9YDtcbiAgICAgICAgICByZW5hbWVTeW5jKGAke3ZpZXdQYXRofS9TYW1wbGVWaWV3LnRlc3Qke3RlbXBsYXRlUmVhY3R9LnR4dGAsIHZpZXdUZXN0UGF0aCk7XG5cbiAgICAgICAgICAvLyBTZWFyY2ggYW5kIHJlcGxhY2UgdmlldyBuYW1lXG4gICAgICAgICAgdXBkYXRlVGVtcGxhdGVOYW1lKHZpZXdUZXN0UGF0aCwgb3V0cHV0TmFtZSwgbmFtZUNhcHMpO1xuXG4gICAgICAgICAgLy8gUmVuYW1lIHNvdXJjZSBmaWxlXG4gICAgICAgICAgY29uc3Qgdmlld0ZpbGVQYXRoOiBzdHJpbmcgPSBgJHt2aWV3UGF0aH0vJHtuYW1lQ2Fwc31WaWV3JHt0ZW1wbGF0ZVJlYWN0fWA7XG4gICAgICAgICAgcmVuYW1lU3luYyhgJHt2aWV3UGF0aH0vU2FtcGxlVmlldyR7dGVtcGxhdGVSZWFjdH0udHh0YCwgdmlld0ZpbGVQYXRoKTtcblxuICAgICAgICAgIC8vIFNlYXJjaCBhbmQgcmVwbGFjZSB2aWV3IG5hbWVcbiAgICAgICAgICB1cGRhdGVUZW1wbGF0ZU5hbWUodmlld0ZpbGVQYXRoLCBvdXRwdXROYW1lLCBuYW1lQ2Fwcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDYW5ub3QgY3JlYXRlIG5ldyAke3R5cGV9LiBEaXJlY3RvcnksICR7dmlld1BhdGh9IGFscmVhZHkgZXhpc3RzLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBjYWxsYmFjaygxKTtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjcmVhdGUgbmV3ICR7dHlwZX0uICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICd2c2NvZGUnOiB7XG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIGRpcmVjdG9yeVxuICAgICAgYXdhaXQgcmVtb3ZlRmlsZXMoJy52c2NvZGUnLCB0cnVlKTtcblxuICAgICAgLy8gQ29weSB2c2NvZGUgY29uZmlndXJhdGlvblxuICAgICAgY29weUZvbGRlclJlY3Vyc2l2ZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uLy4uLy52c2NvZGUnKSwgY3dkKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICdkYXRhbGF5ZXInOiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZXRGaWxlbmFtZXMoe1xuICAgICAgICAgIGNsaU5hbWUsXG4gICAgICAgICAgbmFtZTogb3V0cHV0TmFtZSxcbiAgICAgICAgICBxdWlldCxcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHVzZVR5cGVzY3JpcHRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYoIXJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge25hbWVDYXBzLCB0ZW1wbGF0ZUV4dCwgdGVtcGxhdGVQYXRofSA9IHJlc3VsdDtcbiAgICAgICAgY29uc3QgZGF0YUxheWVyUGF0aDogc3RyaW5nID0gYCR7Y3dkfS8ke25hbWVDYXBzfURhdGFMYXllcmA7XG5cbiAgICAgICAgaWYoIWV4aXN0c1N5bmMoZGF0YUxheWVyUGF0aCkpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgZGF0YSBsYXllciBkaXJlY3RvcnlcbiAgICAgICAgICBjb25zdCBmcyA9IGF3YWl0IGltcG9ydCgnZnMnKTtcbiAgICAgICAgICBmcy5ta2RpclN5bmMoZGF0YUxheWVyUGF0aCwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuXG4gICAgICAgICAgLy8gQ29weSBhbmQgcmVuYW1lIG1haW4gZGF0YSBsYXllciBmaWxlXG4gICAgICAgICAgY29uc3Qgc291cmNlRmlsZSA9IHBhdGhSZXNvbHZlKGRpck5hbWUsIHRlbXBsYXRlUGF0aCwgYC4vRGF0YUxheWVyJHt0ZW1wbGF0ZUV4dH0udHh0YCk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0RmlsZSA9IGAke2RhdGFMYXllclBhdGh9LyR7bmFtZUNhcHN9RGF0YUxheWVyJHt0ZW1wbGF0ZUV4dH1gO1xuXG4gICAgICAgICAgaWYoZXhpc3RzU3luYyhzb3VyY2VGaWxlKSkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhzb3VyY2VGaWxlLCAndXRmOCcpO1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZENvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL0RhdGFMYXllci9nLCBuYW1lQ2Fwcyk7XG4gICAgICAgICAgICB3cml0ZUZpbGVTeW5jKHRhcmdldEZpbGUsIHVwZGF0ZWRDb250ZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDb3B5IGFuZCByZW5hbWUgdGVzdCBmaWxlXG4gICAgICAgICAgY29uc3Qgc291cmNlVGVzdEZpbGUgPSBwYXRoUmVzb2x2ZShkaXJOYW1lLCB0ZW1wbGF0ZVBhdGgsIGAuL0RhdGFMYXllci50ZXN0JHt0ZW1wbGF0ZUV4dH0udHh0YCk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0VGVzdEZpbGUgPSBgJHtkYXRhTGF5ZXJQYXRofS8ke25hbWVDYXBzfURhdGFMYXllci50ZXN0JHt0ZW1wbGF0ZUV4dH1gO1xuXG4gICAgICAgICAgaWYoZXhpc3RzU3luYyhzb3VyY2VUZXN0RmlsZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RDb250ZW50ID0gcmVhZEZpbGVTeW5jKHNvdXJjZVRlc3RGaWxlLCAndXRmOCcpO1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFRlc3RDb250ZW50ID0gdGVzdENvbnRlbnQucmVwbGFjZSgvRGF0YUxheWVyL2csIG5hbWVDYXBzKTtcbiAgICAgICAgICAgIHdyaXRlRmlsZVN5bmModGFyZ2V0VGVzdEZpbGUsIHVwZGF0ZWRUZXN0Q29udGVudCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IFN1Y2Nlc3M6IENyZWF0ZWQgJHtuYW1lQ2Fwc31EYXRhTGF5ZXIgd2l0aCB0ZXN0IGZpbGVzLmAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ2Fubm90IGNyZWF0ZSBuZXcgJHt0eXBlfS4gRGlyZWN0b3J5LCAke2RhdGFMYXllclBhdGh9IGFscmVhZHkgZXhpc3RzLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBjYWxsYmFjaygxKTtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENhbm5vdCBjcmVhdGUgbmV3ICR7dHlwZX0uICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxiYWNrKDApO1xuICByZXR1cm4gMDtcbn07Il0sIm5hbWVzIjpbImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJyZW5hbWVTeW5jIiwid3JpdGVGaWxlU3luYyIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImNyZWF0ZUNoYW5nZWxvZyIsIkxleENvbmZpZyIsImNvcHlGb2xkZXJSZWN1cnNpdmVTeW5jIiwiZ2V0RmlsZW5hbWVzIiwicmVtb3ZlRmlsZXMiLCJ1cGRhdGVUZW1wbGF0ZU5hbWUiLCJnZXREaXJOYW1lIiwibG9nIiwiY3JlYXRlIiwidHlwZSIsImNtZCIsImNhbGxiYWNrIiwiY2xpTmFtZSIsIm91dHB1dEZpbGUiLCJvdXRwdXROYW1lIiwicXVpZXQiLCJjd2QiLCJwcm9jZXNzIiwicGFyc2VDb25maWciLCJvdXRwdXRQYXRoIiwic291cmNlUGF0aCIsInVzZVR5cGVzY3JpcHQiLCJjb25maWciLCJjaGVja1R5cGVzY3JpcHRDb25maWciLCJkaXJOYW1lIiwic3RhdHVzQ2hhbmdlbG9nIiwicmVzdWx0IiwibmFtZSIsIm5hbWVDYXBzIiwidGVtcGxhdGVFeHQiLCJ0ZW1wbGF0ZVBhdGgiLCJzdG9yZVBhdGgiLCJzdG9yZVRlc3RQYXRoIiwic3RvcmVGaWxlUGF0aCIsImVycm9yIiwibWVzc2FnZSIsImRhdGEiLCJyZXBsYWNlIiwiZGVzdFBhdGgiLCJ0ZW1wbGF0ZVJlYWN0Iiwidmlld1BhdGgiLCJ2aWV3U3R5bGVQYXRoIiwidmlld1Rlc3RQYXRoIiwidmlld0ZpbGVQYXRoIiwiZGF0YUxheWVyUGF0aCIsImZzIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwic291cmNlRmlsZSIsInRhcmdldEZpbGUiLCJjb250ZW50IiwidXBkYXRlZENvbnRlbnQiLCJzb3VyY2VUZXN0RmlsZSIsInRhcmdldFRlc3RGaWxlIiwidGVzdENvbnRlbnQiLCJ1cGRhdGVkVGVzdENvbnRlbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFVBQVUsRUFBRUMsWUFBWSxFQUFFQyxVQUFVLEVBQUVDLGFBQWEsUUFBTyxLQUFLO0FBQ3ZFLFNBQVFDLFdBQVdDLFdBQVcsUUFBTyxPQUFPO0FBRTVDLFNBQVFDLGVBQWUsUUFBTyw0QkFBNEI7QUFDMUQsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyx1QkFBdUIsRUFBRUMsWUFBWSxFQUFFQyxXQUFXLEVBQUVDLGtCQUFrQixRQUFPLHFCQUFxQjtBQUMxRyxTQUFRQyxVQUFVLFFBQU8sc0JBQXNCO0FBQy9DLFNBQVFDLEdBQUcsUUFBTyxxQkFBcUI7QUFXdkMsT0FBTyxNQUFNQyxTQUFTLE9BQU9DLE1BQWNDLEtBQW9CQyxXQUEyQixJQUFPLENBQUEsQ0FBQyxDQUFBLENBQUU7SUFDbEcsTUFBTSxFQUFDQyxVQUFVLEtBQUssRUFBRUMsYUFBYSxFQUFFLEVBQUVDLGFBQWEsRUFBRSxFQUFFQyxLQUFLLEVBQUMsR0FBR0w7SUFDbkUsTUFBTU0sTUFBY0MsUUFBUUQsR0FBRztJQUMvQlQsSUFBSSxHQUFHSyxRQUFRLFVBQVUsRUFBRUgsS0FBSyxHQUFHLENBQUMsRUFBRSxRQUFRTTtJQUU5QywyQkFBMkI7SUFDM0IsTUFBTWQsVUFBVWlCLFdBQVcsQ0FBQ1IsS0FBSztJQUNqQyxNQUFNLEVBQUNTLGFBQWEsRUFBRSxFQUFFQyxhQUFhLEVBQUUsRUFBRUMsYUFBYSxFQUFDLEdBQUdwQixVQUFVcUIsTUFBTTtJQUUxRSxJQUFHRCxlQUFlO1FBQ2hCLGlDQUFpQztRQUNqQ3BCLFVBQVVzQixxQkFBcUI7SUFDakM7SUFFQSxNQUFNLEVBQUNELE1BQU0sRUFBQyxHQUFHckI7SUFDakIs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
@@ -4,6 +4,7 @@ export interface DevOptions {
4
4
  readonly config?: string;
5
5
  readonly format?: string;
6
6
  readonly open?: boolean;
7
+ readonly port?: number;
7
8
  readonly quiet?: boolean;
8
9
  readonly remove?: boolean;
9
10
  readonly translations?: boolean;