@nlabs/lex 1.49.4 → 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 (55) hide show
  1. package/.swcrc +35 -0
  2. package/README.md +43 -59
  3. package/__mocks__/chalk.js +19 -17
  4. package/config.json +32 -8
  5. package/examples/lex.config.js +110 -10
  6. package/index.cjs +1 -5
  7. package/lex.config.js +34 -7
  8. package/lib/Button.stories.js +99 -0
  9. package/lib/LexConfig.d.ts +60 -22
  10. package/lib/LexConfig.js +285 -244
  11. package/lib/commands/ai/ai.js +287 -288
  12. package/lib/commands/ai/index.js +8 -7
  13. package/lib/commands/build/build.d.ts +2 -2
  14. package/lib/commands/build/build.js +349 -458
  15. package/lib/commands/clean/clean.js +45 -33
  16. package/lib/commands/compile/compile.js +214 -227
  17. package/lib/commands/config/config.js +46 -42
  18. package/lib/commands/copy/copy.js +36 -35
  19. package/lib/commands/create/create.js +200 -121
  20. package/lib/commands/dev/dev.d.ts +2 -0
  21. package/lib/commands/dev/dev.js +259 -263
  22. package/lib/commands/init/init.js +108 -88
  23. package/lib/commands/link/link.js +18 -14
  24. package/lib/commands/lint/lint.js +735 -742
  25. package/lib/commands/migrate/migrate.js +49 -36
  26. package/lib/commands/publish/publish.js +116 -96
  27. package/lib/commands/serverless/serverless.js +611 -585
  28. package/lib/commands/storybook/storybook.js +242 -238
  29. package/lib/commands/test/test.d.ts +1 -1
  30. package/lib/commands/test/test.js +382 -394
  31. package/lib/commands/update/update.js +141 -120
  32. package/lib/commands/upgrade/upgrade.js +51 -44
  33. package/lib/commands/versions/versions.d.ts +1 -1
  34. package/lib/commands/versions/versions.js +36 -38
  35. package/lib/create/changelog.js +136 -125
  36. package/lib/index.js +40 -38
  37. package/lib/lex.js +95 -68
  38. package/lib/storybook/index.js +6 -1
  39. package/lib/test-react/index.js +7 -84
  40. package/lib/types.d.ts +1 -1
  41. package/lib/types.js +7 -1
  42. package/lib/utils/aiService.js +240 -227
  43. package/lib/utils/app.js +274 -273
  44. package/lib/utils/deepMerge.js +37 -23
  45. package/lib/utils/file.js +218 -215
  46. package/lib/utils/log.js +29 -27
  47. package/lib/utils/reactShim.js +7 -85
  48. package/lib/utils/translations.js +91 -65
  49. package/package.json +63 -64
  50. package/templates/typescript/DataLayer.js.txt +218 -0
  51. package/templates/typescript/DataLayer.test.js.txt +268 -0
  52. package/templates/typescript/DataLayer.test.ts.txt +269 -0
  53. package/templates/typescript/DataLayer.ts.txt +227 -0
  54. package/webpack.config.js +53 -26
  55. package/lib/commands/lint/autofix.d.ts +0 -2
@@ -1,37 +1,50 @@
1
- import { execa } from "execa";
2
- import { LexConfig } from "../../LexConfig.js";
3
- import { createSpinner, getPackageJson, removeConflictModules, removeModules } from "../../utils/app.js";
4
- import { log } from "../../utils/log.js";
5
- const migrate = async (cmd, callback = process.exit) => {
6
- const { cliName = "Lex", packageManager: cmdPackageManager, quiet } = cmd;
7
- const cwd = process.cwd();
8
- const spinner = createSpinner(quiet);
9
- spinner.start("Removing node modules...");
10
- await removeModules();
11
- const { packageManager: configPackageManager } = LexConfig.config;
12
- const packageManager = cmdPackageManager || configPackageManager || "";
13
- const packagePath = `${cwd}/package.json`;
14
- const appPackage = getPackageJson(packagePath);
15
- const { dependencies = {}, devDependencies = {} } = appPackage;
16
- appPackage.dependencies = removeConflictModules(dependencies);
17
- appPackage.devDependencies = removeConflictModules(devDependencies);
18
- try {
19
- await execa(packageManager, ["install"], {
20
- encoding: "utf8",
21
- stdio: "inherit"
22
- });
23
- spinner.succeed("Successfully migrated app!");
24
- callback(0);
25
- return 0;
26
- } catch (error) {
27
- log(`
28
- ${cliName} Error: ${error.message}`, "error", quiet);
29
- spinner.fail("Failed to remove modules.");
30
- callback(1);
31
- return 1;
32
- }
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 { execa } from 'execa';
5
+ import { LexConfig } from '../../LexConfig.js';
6
+ import { createSpinner, getPackageJson, removeConflictModules, removeModules } from '../../utils/app.js';
7
+ import { log } from '../../utils/log.js';
8
+ export const migrate = async (cmd, callback = process.exit)=>{
9
+ const { cliName = 'Lex', packageManager: cmdPackageManager, quiet } = cmd;
10
+ const cwd = process.cwd();
11
+ // // Display message
12
+ // log(`${cliName} copying "${to}"...`, 'info', quiet);
13
+ // Spinner
14
+ const spinner = createSpinner(quiet);
15
+ spinner.start('Removing node modules...');
16
+ // Remove node_modules
17
+ await removeModules();
18
+ const { packageManager: configPackageManager } = LexConfig.config;
19
+ const packageManager = cmdPackageManager || configPackageManager || '';
20
+ const packagePath = `${cwd}/package.json`;
21
+ const appPackage = getPackageJson(packagePath);
22
+ const { dependencies = {}, devDependencies = {} } = appPackage;
23
+ // Remove ESBuild, Jest and Webpack from app since it will conflict
24
+ appPackage.dependencies = removeConflictModules(dependencies);
25
+ appPackage.devDependencies = removeConflictModules(devDependencies);
26
+ // Install new list of packages
27
+ try {
28
+ await execa(packageManager, [
29
+ 'install'
30
+ ], {
31
+ encoding: 'utf8',
32
+ stdio: 'inherit'
33
+ });
34
+ // Stop loader
35
+ spinner.succeed('Successfully migrated app!');
36
+ // Kill process
37
+ callback(0);
38
+ return 0;
39
+ } catch (error) {
40
+ // Display error message
41
+ log(`\n${cliName} Error: ${error.message}`, 'error', quiet);
42
+ // Stop spinner
43
+ spinner.fail('Failed to remove modules.');
44
+ // Kill process
45
+ callback(1);
46
+ return 1;
47
+ }
33
48
  };
34
- export {
35
- migrate
36
- };
37
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL21pZ3JhdGUvbWlncmF0ZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIGdldFBhY2thZ2VKc29uLCByZW1vdmVDb25mbGljdE1vZHVsZXMsIHJlbW92ZU1vZHVsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhY2thZ2VNYW5hZ2VyPzogc3RyaW5nO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIE1pZ3JhdGVDYWxsYmFjayA9IHR5cGVvZiBwcm9jZXNzLmV4aXQ7XG5cbmV4cG9ydCBjb25zdCBtaWdyYXRlID0gYXN5bmMgKGNtZDogTWlncmF0ZU9wdGlvbnMsIGNhbGxiYWNrOiBNaWdyYXRlQ2FsbGJhY2sgPSBwcm9jZXNzLmV4aXQpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBwYWNrYWdlTWFuYWdlcjogY21kUGFja2FnZU1hbmFnZXIsIHF1aWV0fSA9IGNtZDtcblxuICBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gLy8gRGlzcGxheSBtZXNzYWdlXG4gIC8vIGxvZyhgJHtjbGlOYW1lfSBjb3B5aW5nIFwiJHt0b31cIi4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIC8vIFNwaW5uZXJcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuICBzcGlubmVyLnN0YXJ0KCdSZW1vdmluZyBub2RlIG1vZHVsZXMuLi4nKTtcblxuICAvLyBSZW1vdmUgbm9kZV9tb2R1bGVzXG4gIGF3YWl0IHJlbW92ZU1vZHVsZXMoKTtcblxuICBjb25zdCB7cGFja2FnZU1hbmFnZXI6IGNvbmZpZ1BhY2thZ2VNYW5hZ2VyfSA9IExleENvbmZpZy5jb25maWc7XG4gIGNvbnN0IHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmcgPSBjbWRQYWNrYWdlTWFuYWdlciB8fCBjb25maWdQYWNrYWdlTWFuYWdlciB8fCAnJztcbiAgY29uc3QgcGFja2FnZVBhdGg6IHN0cmluZyA9IGAke2N3ZH0vcGFja2FnZS5qc29uYDtcbiAgY29uc3QgYXBwUGFja2FnZSA9IGdldFBhY2thZ2VKc29uKHBhY2thZ2VQYXRoKTtcbiAgY29uc3Qge2RlcGVuZGVuY2llcyA9IHt9LCBkZXZEZXBlbmRlbmNpZXMgPSB7fX0gPSBhcHBQYWNrYWdlO1xuXG4gIC8vIFJlbW92ZSBFU0J1aWxkLCBKZXN0IGFuZCBXZWJwYWNrIGZyb20gYXBwIHNpbmNlIGl0IHdpbGwgY29uZmxpY3RcbiAgYXBwUGFja2FnZS5kZXBlbmRlbmNpZXMgPSByZW1vdmVDb25mbGljdE1vZHVsZXMoZGVwZW5kZW5jaWVzKTtcbiAgYXBwUGFja2FnZS5kZXZEZXBlbmRlbmNpZXMgPSByZW1vdmVDb25mbGljdE1vZHVsZXMoZGV2RGVwZW5kZW5jaWVzKTtcblxuICAvLyBJbnN0YWxsIG5ldyBsaXN0IG9mIHBhY2thZ2VzXG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlY2EocGFja2FnZU1hbmFnZXIsIFsnaW5zdGFsbCddLCB7XG4gICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgc3RkaW86ICdpbmhlcml0J1xuICAgIH0pO1xuXG4gICAgLy8gU3RvcCBsb2FkZXJcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBtaWdyYXRlZCBhcHAhJyk7XG5cbiAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2VcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byByZW1vdmUgbW9kdWxlcy4nKTtcblxuICAgIC8vIEtpbGwgcHJvY2Vzc1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLFNBQVEsYUFBWTtBQUVwQixTQUFRLGlCQUFnQjtBQUN4QixTQUFRLGVBQWUsZ0JBQWdCLHVCQUF1QixxQkFBb0I7QUFDbEYsU0FBUSxXQUFVO0FBVVgsTUFBTSxVQUFVLE9BQU8sS0FBcUIsV0FBNEIsUUFBUSxTQUEwQjtBQUMvRyxRQUFNLEVBQUMsVUFBVSxPQUFPLGdCQUFnQixtQkFBbUIsTUFBSyxJQUFJO0FBRXBFLFFBQU0sTUFBYyxRQUFRLElBQUk7QUFNaEMsUUFBTSxVQUFVLGNBQWMsS0FBSztBQUNuQyxVQUFRLE1BQU0sMEJBQTBCO0FBR3hDLFFBQU0sY0FBYztBQUVwQixRQUFNLEVBQUMsZ0JBQWdCLHFCQUFvQixJQUFJLFVBQVU7QUFDekQsUUFBTSxpQkFBeUIscUJBQXFCLHdCQUF3QjtBQUM1RSxRQUFNLGNBQXNCLEdBQUcsR0FBRztBQUNsQyxRQUFNLGFBQWEsZUFBZSxXQUFXO0FBQzdDLFFBQU0sRUFBQyxlQUFlLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxFQUFDLElBQUk7QUFHbEQsYUFBVyxlQUFlLHNCQUFzQixZQUFZO0FBQzVELGFBQVcsa0JBQWtCLHNCQUFzQixlQUFlO0FBR2xFLE1BQUk7QUFDRixVQUFNLE1BQU0sZ0JBQWdCLENBQUMsU0FBUyxHQUFHO0FBQUEsTUFDdkMsVUFBVTtBQUFBLE1BQ1YsT0FBTztBQUFBLElBQ1QsQ0FBQztBQUdELFlBQVEsUUFBUSw0QkFBNEI7QUFHNUMsYUFBUyxDQUFDO0FBQ1YsV0FBTztBQUFBLEVBQ1QsU0FBUyxPQUFPO0FBRWQsUUFBSTtBQUFBLEVBQUssT0FBTyxXQUFXLE1BQU0sT0FBTyxJQUFJLFNBQVMsS0FBSztBQUcxRCxZQUFRLEtBQUssMkJBQTJCO0FBR3hDLGFBQVMsQ0FBQztBQUNWLFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
49
+
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9taWdyYXRlL21pZ3JhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIGdldFBhY2thZ2VKc29uLCByZW1vdmVDb25mbGljdE1vZHVsZXMsIHJlbW92ZU1vZHVsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhY2thZ2VNYW5hZ2VyPzogc3RyaW5nO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIE1pZ3JhdGVDYWxsYmFjayA9IHR5cGVvZiBwcm9jZXNzLmV4aXQ7XG5cbmV4cG9ydCBjb25zdCBtaWdyYXRlID0gYXN5bmMgKGNtZDogTWlncmF0ZU9wdGlvbnMsIGNhbGxiYWNrOiBNaWdyYXRlQ2FsbGJhY2sgPSBwcm9jZXNzLmV4aXQpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBwYWNrYWdlTWFuYWdlcjogY21kUGFja2FnZU1hbmFnZXIsIHF1aWV0fSA9IGNtZDtcblxuICBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gLy8gRGlzcGxheSBtZXNzYWdlXG4gIC8vIGxvZyhgJHtjbGlOYW1lfSBjb3B5aW5nIFwiJHt0b31cIi4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIC8vIFNwaW5uZXJcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuICBzcGlubmVyLnN0YXJ0KCdSZW1vdmluZyBub2RlIG1vZHVsZXMuLi4nKTtcblxuICAvLyBSZW1vdmUgbm9kZV9tb2R1bGVzXG4gIGF3YWl0IHJlbW92ZU1vZHVsZXMoKTtcblxuICBjb25zdCB7cGFja2FnZU1hbmFnZXI6IGNvbmZpZ1BhY2thZ2VNYW5hZ2VyfSA9IExleENvbmZpZy5jb25maWc7XG4gIGNvbnN0IHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmcgPSBjbWRQYWNrYWdlTWFuYWdlciB8fCBjb25maWdQYWNrYWdlTWFuYWdlciB8fCAnJztcbiAgY29uc3QgcGFja2FnZVBhdGg6IHN0cmluZyA9IGAke2N3ZH0vcGFja2FnZS5qc29uYDtcbiAgY29uc3QgYXBwUGFja2FnZSA9IGdldFBhY2thZ2VKc29uKHBhY2thZ2VQYXRoKTtcbiAgY29uc3Qge2RlcGVuZGVuY2llcyA9IHt9LCBkZXZEZXBlbmRlbmNpZXMgPSB7fX0gPSBhcHBQYWNrYWdlO1xuXG4gIC8vIFJlbW92ZSBFU0J1aWxkLCBKZXN0IGFuZCBXZWJwYWNrIGZyb20gYXBwIHNpbmNlIGl0IHdpbGwgY29uZmxpY3RcbiAgYXBwUGFja2FnZS5kZXBlbmRlbmNpZXMgPSByZW1vdmVDb25mbGljdE1vZHVsZXMoZGVwZW5kZW5jaWVzKTtcbiAgYXBwUGFja2FnZS5kZXZEZXBlbmRlbmNpZXMgPSByZW1vdmVDb25mbGljdE1vZHVsZXMoZGV2RGVwZW5kZW5jaWVzKTtcblxuICAvLyBJbnN0YWxsIG5ldyBsaXN0IG9mIHBhY2thZ2VzXG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlY2EocGFja2FnZU1hbmFnZXIsIFsnaW5zdGFsbCddLCB7XG4gICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgc3RkaW86ICdpbmhlcml0J1xuICAgIH0pO1xuXG4gICAgLy8gU3RvcCBsb2FkZXJcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBtaWdyYXRlZCBhcHAhJyk7XG5cbiAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIC8vIERpc3BsYXkgZXJyb3IgbWVzc2FnZVxuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHJlbW92ZSBtb2R1bGVzLicpO1xuXG4gICAgLy8gS2lsbCBwcm9jZXNzXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07Il0sIm5hbWVzIjpbImV4ZWNhIiwiTGV4Q29uZmlnIiwiY3JlYXRlU3Bpbm5lciIsImdldFBhY2thZ2VKc29uIiwicmVtb3ZlQ29uZmxpY3RNb2R1bGVzIiwicmVtb3ZlTW9kdWxlcyIsImxvZyIsIm1pZ3JhdGUiLCJjbWQiLCJjYWxsYmFjayIsInByb2Nlc3MiLCJleGl0IiwiY2xpTmFtZSIsInBhY2thZ2VNYW5hZ2VyIiwiY21kUGFja2FnZU1hbmFnZXIiLCJxdWlldCIsImN3ZCIsInNwaW5uZXIiLCJzdGFydCIsImNvbmZpZ1BhY2thZ2VNYW5hZ2VyIiwiY29uZmlnIiwicGFja2FnZVBhdGgiLCJhcHBQYWNrYWdlIiwiZGVwZW5kZW5jaWVzIiwiZGV2RGVwZW5kZW5jaWVzIiwiZW5jb2RpbmciLCJzdGRpbyIsInN1Y2NlZWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJmYWlsIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxLQUFLLFFBQU8sUUFBUTtBQUU1QixTQUFRQyxTQUFTLFFBQU8scUJBQXFCO0FBQzdDLFNBQVFDLGFBQWEsRUFBRUMsY0FBYyxFQUFFQyxxQkFBcUIsRUFBRUMsYUFBYSxRQUFPLHFCQUFxQjtBQUN2RyxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBVXZDLE9BQU8sTUFBTUMsVUFBVSxPQUFPQyxLQUFxQkMsV0FBNEJDLFFBQVFDLElBQUk7SUFDekYsTUFBTSxFQUFDQyxVQUFVLEtBQUssRUFBRUMsZ0JBQWdCQyxpQkFBaUIsRUFBRUMsS0FBSyxFQUFDLEdBQUdQO0lBRXBFLE1BQU1RLE1BQWNOLFFBQVFNLEdBQUc7SUFFL0IscUJBQXFCO0lBQ3JCLHVEQUF1RDtJQUV2RCxVQUFVO0lBQ1YsTUFBTUMsVUFBVWYsY0FBY2E7SUFDOUJFLFFBQVFDLEtBQUssQ0FBQztJQUVkLHNCQUFzQjtJQUN0QixNQUFNYjtJQUVOLE1BQU0sRUFBQ1EsZ0JBQWdCTSxvQkFBb0IsRUFBQyxHQUFHbEIsVUFBVW1CLE1BQU07SUFDL0QsTUFBTVAsaUJBQXlCQyxxQkFBcUJLLHdCQUF3QjtJQUM1RSxNQUFNRSxjQUFzQixHQUFHTCxJQUFJLGFBQWEsQ0FBQztJQUNqRCxNQUFNTSxhQUFhbkIsZUFBZWtCO0lBQ2xDLE1BQU0sRUFBQ0UsZUFBZSxDQUFDLENBQUMsRUFBRUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFDLEdBQUdGO0lBRWxELG1FQUFtRTtJQUNuRUEsV0FBV0MsWUFBWSxHQUFHbkIsc0JBQXNCbUI7SUFDaERELFdBQVdFLGVBQWUsR0FBR3BCLHNCQUFzQm9CO0lBRW5ELCtCQUErQjtJQUMvQixJQUFJO1FBQ0YsTUFBTXhCLE1BQU1hLGdCQUFnQjtZQUFDO1NBQVUsRUFBRTtZQUN2Q1ksVUFBVTtZQUNWQyxPQUFPO1FBQ1Q7UUFFQSxjQUFjO1FBQ2RULFFBQVFVLE9BQU8sQ0FBQztRQUVoQixlQUFlO1FBQ2ZsQixTQUFTO1FBQ1QsT0FBTztJQUNULEVBQUUsT0FBTW1CLE9BQU87UUFDYix3QkFBd0I7UUFDeEJ0QixJQUFJLENBQUMsRUFBRSxFQUFFTSxRQUFRLFFBQVEsRUFBRWdCLE1BQU1DLE9BQU8sRUFBRSxFQUFFLFNBQVNkO1FBRXJELGVBQWU7UUFDZkUsUUFBUWEsSUFBSSxDQUFDO1FBRWIsZUFBZTtRQUNmckIsU0FBUztRQUNULE9BQU87SUFDVDtBQUNGLEVBQUUifQ==
@@ -1,104 +1,124 @@
1
- import { execa } from "execa";
2
- import semver from "semver";
3
- import { LexConfig } from "../../LexConfig.js";
4
- import { createSpinner, getPackageJson, setPackageJson } from "../../utils/app.js";
5
- import { log } from "../../utils/log.js";
6
- const publish = async (cmd, callback = process.exit) => {
7
- const { bump, cliName = "Lex", newVersion, otp, packageManager: cmdPackageManager, private: accessPrivate, tag, quiet } = cmd;
8
- log(`${cliName} publishing npm module...`, "info", quiet);
9
- const spinner = createSpinner(quiet);
10
- await LexConfig.parseConfig(cmd);
11
- const { packageManager: configPackageManager } = LexConfig.config;
12
- const packageManager = cmdPackageManager || configPackageManager;
13
- const publishOptions = ["publish"];
14
- if (accessPrivate) {
15
- publishOptions.push("--access", "restricted");
16
- }
17
- if (otp) {
18
- publishOptions.push("--otp", otp);
19
- }
20
- if (tag) {
21
- publishOptions.push("--tag", tag);
22
- }
23
- let nextVersion;
24
- const packagePath = `${process.cwd()}/package.json`;
25
- let packageJson;
26
- let packageName;
27
- let prevVersion;
28
- try {
29
- packageJson = getPackageJson(packagePath);
30
- packageName = packageJson.name;
31
- prevVersion = packageJson.version;
32
- } catch (error) {
33
- log(`
34
- ${cliName} Error: The file, ${packagePath}, was not found or is malformed.
35
- `, "error", quiet);
36
- log(error.message, "error");
37
- callback(1);
38
- return 1;
39
- }
40
- if (newVersion) {
41
- nextVersion = newVersion;
42
- } else if (bump) {
43
- const formatBump = bump.toString().trim().toLowerCase();
44
- if (formatBump) {
45
- const validReleases = ["major", "minor", "patch"];
46
- const validPreReleases = ["alpha", "beta", "rc"];
47
- const packageVersion = semver.coerce(prevVersion);
48
- if (!semver.valid(packageVersion)) {
49
- log(`
50
- ${cliName} Error: Version is invalid in package.json`, "error", quiet);
51
- callback(1);
52
- return 1;
53
- }
54
- if (validReleases.includes(formatBump)) {
55
- nextVersion = semver.inc(packageVersion, formatBump);
56
- } else if (validPreReleases.includes(formatBump)) {
57
- nextVersion = semver.inc(packageVersion, "prerelease", formatBump);
58
- } else {
59
- log(`
60
- ${cliName} Error: Bump type is invalid. please make sure it is one of the following: ${validReleases.join(", ")}, ${validPreReleases.join(", ")}`, "error", quiet);
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 { execa } from 'execa';
5
+ import semver from 'semver';
6
+ import { LexConfig } from '../../LexConfig.js';
7
+ import { createSpinner, getPackageJson, setPackageJson } from '../../utils/app.js';
8
+ import { log } from '../../utils/log.js';
9
+ export const publish = async (cmd, callback = process.exit)=>{
10
+ const { bump, cliName = 'Lex', newVersion, otp, packageManager: cmdPackageManager, private: accessPrivate, tag, quiet } = cmd;
11
+ log(`${cliName} publishing npm module...`, 'info', quiet);
12
+ // Spinner
13
+ const spinner = createSpinner(quiet);
14
+ // Get custom configuration
15
+ await LexConfig.parseConfig(cmd);
16
+ const { packageManager: configPackageManager } = LexConfig.config;
17
+ const packageManager = cmdPackageManager || configPackageManager;
18
+ const publishOptions = [
19
+ 'publish'
20
+ ];
21
+ if (accessPrivate) {
22
+ publishOptions.push('--access', 'restricted');
23
+ }
24
+ if (otp) {
25
+ publishOptions.push('--otp', otp);
26
+ }
27
+ if (tag) {
28
+ publishOptions.push('--tag', tag);
29
+ }
30
+ // Get next version number
31
+ let nextVersion;
32
+ const packagePath = `${process.cwd()}/package.json`;
33
+ let packageJson;
34
+ let packageName;
35
+ let prevVersion;
36
+ // If not using yarn, we'll use npm and manually update the version number
37
+ try {
38
+ packageJson = getPackageJson(packagePath);
39
+ packageName = packageJson.name;
40
+ prevVersion = packageJson.version;
41
+ } catch (error) {
42
+ log(`\n${cliName} Error: The file, ${packagePath}, was not found or is malformed.\n`, 'error', quiet);
43
+ log(error.message, 'error');
61
44
  callback(1);
62
45
  return 1;
63
- }
46
+ }
47
+ // Update package.json with the latest version
48
+ if (newVersion) {
49
+ // If using a specific version, we don't need to determine the next bump
50
+ nextVersion = newVersion;
51
+ } else if (bump) {
52
+ // Determine next version
53
+ const formatBump = bump.toString().trim().toLowerCase();
54
+ if (formatBump) {
55
+ const validReleases = [
56
+ 'major',
57
+ 'minor',
58
+ 'patch'
59
+ ];
60
+ const validPreReleases = [
61
+ 'alpha',
62
+ 'beta',
63
+ 'rc'
64
+ ];
65
+ // Make sure the version in package.json is valid
66
+ const packageVersion = semver.coerce(prevVersion);
67
+ if (!semver.valid(packageVersion)) {
68
+ log(`\n${cliName} Error: Version is invalid in package.json`, 'error', quiet);
69
+ callback(1);
70
+ return 1;
71
+ }
72
+ if (validReleases.includes(formatBump)) {
73
+ nextVersion = semver.inc(packageVersion, formatBump);
74
+ } else if (validPreReleases.includes(formatBump)) {
75
+ nextVersion = semver.inc(packageVersion, 'prerelease', formatBump);
76
+ } else {
77
+ log(`\n${cliName} Error: Bump type is invalid. please make sure it is one of the following: ${validReleases.join(', ')}, ${validPreReleases.join(', ')}`, 'error', quiet);
78
+ callback(1);
79
+ return 1;
80
+ }
81
+ } else {
82
+ log(`\n${cliName} Error: Bump type is missing.`, 'error', quiet);
83
+ callback(1);
84
+ return 1;
85
+ }
86
+ }
87
+ if (nextVersion && packageManager === 'yarn') {
88
+ publishOptions.push('--new-version', nextVersion);
89
+ } else if (nextVersion && packageJson) {
90
+ try {
91
+ // Save updated version
92
+ setPackageJson({
93
+ ...packageJson,
94
+ version: nextVersion
95
+ }, packagePath);
96
+ } catch (error) {
97
+ log(`\n${cliName} Error: The file, ${packagePath}, was not found or is malformed. ${error.message}`, 'error', quiet);
98
+ callback(1);
99
+ return 1;
100
+ }
64
101
  } else {
65
- log(`
66
- ${cliName} Error: Bump type is missing.`, "error", quiet);
67
- callback(1);
68
- return 1;
102
+ nextVersion = prevVersion;
69
103
  }
70
- }
71
- if (nextVersion && packageManager === "yarn") {
72
- publishOptions.push("--new-version", nextVersion);
73
- } else if (nextVersion && packageJson) {
74
104
  try {
75
- setPackageJson({ ...packageJson, version: nextVersion }, packagePath);
105
+ await execa(packageManager, publishOptions, {
106
+ encoding: 'utf8',
107
+ stdio: 'inherit'
108
+ });
109
+ spinner.succeed(`Successfully published npm package: ${packageName}!`);
110
+ // Kill process
111
+ callback(0);
112
+ return 0;
76
113
  } catch (error) {
77
- log(`
78
- ${cliName} Error: The file, ${packagePath}, was not found or is malformed. ${error.message}`, "error", quiet);
79
- callback(1);
80
- return 1;
114
+ // Display error message
115
+ log(`\n${cliName} Error: ${error.message}`, 'error', quiet);
116
+ // Stop spinner
117
+ spinner.fail('Publishing to npm has failed.');
118
+ // Kill process
119
+ callback(1);
120
+ return 1;
81
121
  }
82
- } else {
83
- nextVersion = prevVersion;
84
- }
85
- try {
86
- await execa(packageManager, publishOptions, {
87
- encoding: "utf8",
88
- stdio: "inherit"
89
- });
90
- spinner.succeed(`Successfully published npm package: ${packageName}!`);
91
- callback(0);
92
- return 0;
93
- } catch (error) {
94
- log(`
95
- ${cliName} Error: ${error.message}`, "error", quiet);
96
- spinner.fail("Publishing to npm has failed.");
97
- callback(1);
98
- return 1;
99
- }
100
- };
101
- export {
102
- publish
103
122
  };
104
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL3B1Ymxpc2gvcHVibGlzaC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCBzZW12ZXIsIHtSZWxlYXNlVHlwZX0gZnJvbSAnc2VtdmVyJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIGdldFBhY2thZ2VKc29uLCBzZXRQYWNrYWdlSnNvbn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1Ymxpc2hPcHRpb25zIHtcbiAgcmVhZG9ubHkgYnVtcD86IHN0cmluZztcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbmV3VmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgb3RwPzogc3RyaW5nO1xuICByZWFkb25seSBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcHJpdmF0ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGFnPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQdWJsaXNoQ2FsbGJhY2sgPSB0eXBlb2YgcHJvY2Vzcy5leGl0O1xuXG5leHBvcnQgY29uc3QgcHVibGlzaCA9IGFzeW5jIChjbWQ6IFB1Ymxpc2hPcHRpb25zLCBjYWxsYmFjazogUHVibGlzaENhbGxiYWNrID0gcHJvY2Vzcy5leGl0KTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge2J1bXAsIGNsaU5hbWUgPSAnTGV4JywgbmV3VmVyc2lvbiwgb3RwLCBwYWNrYWdlTWFuYWdlcjogY21kUGFja2FnZU1hbmFnZXIsIHByaXZhdGU6IGFjY2Vzc1ByaXZhdGUsIHRhZywgcXVpZXR9ID0gY21kO1xuICBsb2coYCR7Y2xpTmFtZX0gcHVibGlzaGluZyBucG0gbW9kdWxlLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgLy8gU3Bpbm5lclxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjb25maWd1cmF0aW9uXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtwYWNrYWdlTWFuYWdlcjogY29uZmlnUGFja2FnZU1hbmFnZXJ9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3QgcGFja2FnZU1hbmFnZXI6IHN0cmluZyA9IGNtZFBhY2thZ2VNYW5hZ2VyIHx8IGNvbmZpZ1BhY2thZ2VNYW5hZ2VyO1xuICBjb25zdCBwdWJsaXNoT3B0aW9uczogc3RyaW5nW10gPSBbJ3B1Ymxpc2gnXTtcblxuICBpZihhY2Nlc3NQcml2YXRlKSB7XG4gICAgcHVibGlzaE9wdGlvbnMucHVzaCgnLS1hY2Nlc3MnLCAncmVzdHJpY3RlZCcpO1xuICB9XG5cbiAgaWYob3RwKSB7XG4gICAgcHVibGlzaE9wdGlvbnMucHVzaCgnLS1vdHAnLCBvdHApO1xuICB9XG5cbiAgaWYodGFnKSB7XG4gICAgcHVibGlzaE9wdGlvbnMucHVzaCgnLS10YWcnLCB0YWcpO1xuICB9XG5cbiAgLy8gR2V0IG5leHQgdmVyc2lvbiBudW1iZXJcbiAgbGV0IG5leHRWZXJzaW9uOiBzdHJpbmc7XG4gIGNvbnN0IHBhY2thZ2VQYXRoOiBzdHJpbmcgPSBgJHtwcm9jZXNzLmN3ZCgpfS9wYWNrYWdlLmpzb25gO1xuICBsZXQgcGFja2FnZUpzb247XG4gIGxldCBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICBsZXQgcHJldlZlcnNpb246IHN0cmluZztcblxuICAvLyBJZiBub3QgdXNpbmcgeWFybiwgd2UnbGwgdXNlIG5wbSBhbmQgbWFudWFsbHkgdXBkYXRlIHRoZSB2ZXJzaW9uIG51bWJlclxuICB0cnkge1xuICAgIHBhY2thZ2VKc29uID0gZ2V0UGFja2FnZUpzb24ocGFja2FnZVBhdGgpO1xuICAgIHBhY2thZ2VOYW1lID0gcGFja2FnZUpzb24ubmFtZTtcbiAgICBwcmV2VmVyc2lvbiA9IHBhY2thZ2VKc29uLnZlcnNpb247XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUaGUgZmlsZSwgJHtwYWNrYWdlUGF0aH0sIHdhcyBub3QgZm91bmQgb3IgaXMgbWFsZm9ybWVkLlxcbmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coZXJyb3IubWVzc2FnZSwgJ2Vycm9yJyk7XG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICAvLyBVcGRhdGUgcGFja2FnZS5qc29uIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uXG4gIGlmKG5ld1ZlcnNpb24pIHtcbiAgICAvLyBJZiB1c2luZyBhIHNwZWNpZmljIHZlcnNpb24sIHdlIGRvbid0IG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBuZXh0IGJ1bXBcbiAgICBuZXh0VmVyc2lvbiA9IG5ld1ZlcnNpb247XG4gIH0gZWxzZSBpZihidW1wKSB7XG4gICAgLy8gRGV0ZXJtaW5lIG5leHQgdmVyc2lvblxuICAgIGNvbnN0IGZvcm1hdEJ1bXAgPSBidW1wLnRvU3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYoZm9ybWF0QnVtcCkge1xuICAgICAgY29uc3QgdmFsaWRSZWxlYXNlczogc3RyaW5nW10gPSBbJ21ham9yJywgJ21pbm9yJywgJ3BhdGNoJ107XG4gICAgICBjb25zdCB2YWxpZFByZVJlbGVhc2VzOiBzdHJpbmdbXSA9IFsnYWxwaGEnLCAnYmV0YScsICdyYyddO1xuXG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIHZlcnNpb24gaW4gcGFja2FnZS5qc29uIGlzIHZhbGlkXG4gICAgICBjb25zdCBwYWNrYWdlVmVyc2lvbiA9IHNlbXZlci5jb2VyY2UocHJldlZlcnNpb24pO1xuXG4gICAgICBpZighc2VtdmVyLnZhbGlkKHBhY2thZ2VWZXJzaW9uKSkge1xuICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFZlcnNpb24gaXMgaW52YWxpZCBpbiBwYWNrYWdlLmpzb25gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cblxuICAgICAgaWYodmFsaWRSZWxlYXNlcy5pbmNsdWRlcyhmb3JtYXRCdW1wKSkge1xuICAgICAgICBuZXh0VmVyc2lvbiA9IHNlbXZlci5pbmMocGFja2FnZVZlcnNpb24sIGZvcm1hdEJ1bXAgYXMgUmVsZWFzZVR5cGUpO1xuICAgICAgfSBlbHNlIGlmKHZhbGlkUHJlUmVsZWFzZXMuaW5jbHVkZXMoZm9ybWF0QnVtcCkpIHtcbiAgICAgICAgbmV4dFZlcnNpb24gPSBzZW12ZXIuaW5jKHBhY2thZ2VWZXJzaW9uLCAncHJlcmVsZWFzZScsIGZvcm1hdEJ1bXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBCdW1wIHR5cGUgaXMgaW52YWxpZC4gcGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZzogJHt2YWxpZFJlbGVhc2VzLmpvaW4oJywgJyl9LCAke3ZhbGlkUHJlUmVsZWFzZXMuam9pbignLCAnKX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBCdW1wIHR5cGUgaXMgbWlzc2luZy5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGlmKG5leHRWZXJzaW9uICYmIHBhY2thZ2VNYW5hZ2VyID09PSAneWFybicpIHtcbiAgICBwdWJsaXNoT3B0aW9ucy5wdXNoKCctLW5ldy12ZXJzaW9uJywgbmV4dFZlcnNpb24pO1xuICB9IGVsc2UgaWYobmV4dFZlcnNpb24gJiYgcGFja2FnZUpzb24pIHtcbiAgICB0cnkge1xuICAgICAgLy8gU2F2ZSB1cGRhdGVkIHZlcnNpb25cbiAgICAgIHNldFBhY2thZ2VKc29uKHsuLi5wYWNrYWdlSnNvbiwgdmVyc2lvbjogbmV4dFZlcnNpb259LCBwYWNrYWdlUGF0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogVGhlIGZpbGUsICR7cGFja2FnZVBhdGh9LCB3YXMgbm90IGZvdW5kIG9yIGlzIG1hbGZvcm1lZC4gJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5leHRWZXJzaW9uID0gcHJldlZlcnNpb247XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IGV4ZWNhKHBhY2thZ2VNYW5hZ2VyLCBwdWJsaXNoT3B0aW9ucywge1xuICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgIHN0ZGlvOiAnaW5oZXJpdCdcbiAgICB9KTtcblxuICAgIHNwaW5uZXIuc3VjY2VlZChgU3VjY2Vzc2Z1bGx5IHB1Ymxpc2hlZCBucG0gcGFja2FnZTogJHtwYWNrYWdlTmFtZX0hYCk7XG5cbiAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2VcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBzcGlubmVyLmZhaWwoJ1B1Ymxpc2hpbmcgdG8gbnBtIGhhcyBmYWlsZWQuJyk7XG5cbiAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTsiXSwKICAibWFwcGluZ3MiOiAiQUFJQSxTQUFRLGFBQVk7QUFDcEIsT0FBTyxZQUEyQjtBQUVsQyxTQUFRLGlCQUFnQjtBQUN4QixTQUFRLGVBQWUsZ0JBQWdCLHNCQUFxQjtBQUM1RCxTQUFRLFdBQVU7QUFlWCxNQUFNLFVBQVUsT0FBTyxLQUFxQixXQUE0QixRQUFRLFNBQTBCO0FBQy9HLFFBQU0sRUFBQyxNQUFNLFVBQVUsT0FBTyxZQUFZLEtBQUssZ0JBQWdCLG1CQUFtQixTQUFTLGVBQWUsS0FBSyxNQUFLLElBQUk7QUFDeEgsTUFBSSxHQUFHLE9BQU8sNkJBQTZCLFFBQVEsS0FBSztBQUd4RCxRQUFNLFVBQVUsY0FBYyxLQUFLO0FBR25DLFFBQU0sVUFBVSxZQUFZLEdBQUc7QUFFL0IsUUFBTSxFQUFDLGdCQUFnQixxQkFBb0IsSUFBSSxVQUFVO0FBQ3pELFFBQU0saUJBQXlCLHFCQUFxQjtBQUNwRCxRQUFNLGlCQUEyQixDQUFDLFNBQVM7QUFFM0MsTUFBRyxlQUFlO0FBQ2hCLG1CQUFlLEtBQUssWUFBWSxZQUFZO0FBQUEsRUFDOUM7QUFFQSxNQUFHLEtBQUs7QUFDTixtQkFBZSxLQUFLLFNBQVMsR0FBRztBQUFBLEVBQ2xDO0FBRUEsTUFBRyxLQUFLO0FBQ04sbUJBQWUsS0FBSyxTQUFTLEdBQUc7QUFBQSxFQUNsQztBQUdBLE1BQUk7QUFDSixRQUFNLGNBQXNCLEdBQUcsUUFBUSxJQUFJLENBQUM7QUFDNUMsTUFBSTtBQUNKLE1BQUk7QUFDSixNQUFJO0FBR0osTUFBSTtBQUNGLGtCQUFjLGVBQWUsV0FBVztBQUN4QyxrQkFBYyxZQUFZO0FBQzFCLGtCQUFjLFlBQVk7QUFBQSxFQUM1QixTQUFTLE9BQU87QUFDZCxRQUFJO0FBQUEsRUFBSyxPQUFPLHFCQUFxQixXQUFXO0FBQUEsR0FBc0MsU0FBUyxLQUFLO0FBQ3BHLFFBQUksTUFBTSxTQUFTLE9BQU87QUFDMUIsYUFBUyxDQUFDO0FBQ1YsV0FBTztBQUFBLEVBQ1Q7QUFHQSxNQUFHLFlBQVk7QUFFYixrQkFBYztBQUFBLEVBQ2hCLFdBQVUsTUFBTTtBQUVkLFVBQU0sYUFBYSxLQUFLLFNBQVMsRUFDOUIsS0FBSyxFQUNMLFlBQVk7QUFFZixRQUFHLFlBQVk7QUFDYixZQUFNLGdCQUEwQixDQUFDLFNBQVMsU0FBUyxPQUFPO0FBQzFELFlBQU0sbUJBQTZCLENBQUMsU0FBUyxRQUFRLElBQUk7QUFHekQsWUFBTSxpQkFBaUIsT0FBTyxPQUFPLFdBQVc7QUFFaEQsVUFBRyxDQUFDLE9BQU8sTUFBTSxjQUFjLEdBQUc7QUFDaEMsWUFBSTtBQUFBLEVBQUssT0FBTyw4Q0FBOEMsU0FBUyxLQUFLO0FBQzVFLGlCQUFTLENBQUM7QUFDVixlQUFPO0FBQUEsTUFDVDtBQUVBLFVBQUcsY0FBYyxTQUFTLFVBQVUsR0FBRztBQUNyQyxzQkFBYyxPQUFPLElBQUksZ0JBQWdCLFVBQXlCO0FBQUEsTUFDcEUsV0FBVSxpQkFBaUIsU0FBUyxVQUFVLEdBQUc7QUFDL0Msc0JBQWMsT0FBTyxJQUFJLGdCQUFnQixjQUFjLFVBQVU7QUFBQSxNQUNuRSxPQUFPO0FBQ0wsWUFBSTtBQUFBLEVBQUssT0FBTyw4RUFBOEUsY0FBYyxLQUFLLElBQUksQ0FBQyxLQUFLLGlCQUFpQixLQUFLLElBQUksQ0FBQyxJQUFJLFNBQVMsS0FBSztBQUN4SyxpQkFBUyxDQUFDO0FBQ1YsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLE9BQU87QUFDTCxVQUFJO0FBQUEsRUFBSyxPQUFPLGlDQUFpQyxTQUFTLEtBQUs7QUFDL0QsZUFBUyxDQUFDO0FBQ1YsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsTUFBRyxlQUFlLG1CQUFtQixRQUFRO0FBQzNDLG1CQUFlLEtBQUssaUJBQWlCLFdBQVc7QUFBQSxFQUNsRCxXQUFVLGVBQWUsYUFBYTtBQUNwQyxRQUFJO0FBRUYscUJBQWUsRUFBQyxHQUFHLGFBQWEsU0FBUyxZQUFXLEdBQUcsV0FBVztBQUFBLElBQ3BFLFNBQVMsT0FBTztBQUNkLFVBQUk7QUFBQSxFQUFLLE9BQU8scUJBQXFCLFdBQVcsb0NBQW9DLE1BQU0sT0FBTyxJQUFJLFNBQVMsS0FBSztBQUNuSCxlQUFTLENBQUM7QUFDVixhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0YsT0FBTztBQUNMLGtCQUFjO0FBQUEsRUFDaEI7QUFFQSxNQUFJO0FBQ0YsVUFBTSxNQUFNLGdCQUFnQixnQkFBZ0I7QUFBQSxNQUMxQyxVQUFVO0FBQUEsTUFDVixPQUFPO0FBQUEsSUFDVCxDQUFDO0FBRUQsWUFBUSxRQUFRLHVDQUF1QyxXQUFXLEdBQUc7QUFHckUsYUFBUyxDQUFDO0FBQ1YsV0FBTztBQUFBLEVBQ1QsU0FBUyxPQUFPO0FBRWQsUUFBSTtBQUFBLEVBQUssT0FBTyxXQUFXLE1BQU0sT0FBTyxJQUFJLFNBQVMsS0FBSztBQUcxRCxZQUFRLEtBQUssK0JBQStCO0FBRzVDLGFBQVMsQ0FBQztBQUNWLFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
123
+
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9wdWJsaXNoL3B1Ymxpc2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCBzZW12ZXIsIHtSZWxlYXNlVHlwZX0gZnJvbSAnc2VtdmVyJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIGdldFBhY2thZ2VKc29uLCBzZXRQYWNrYWdlSnNvbn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1Ymxpc2hPcHRpb25zIHtcbiAgcmVhZG9ubHkgYnVtcD86IHN0cmluZztcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbmV3VmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgb3RwPzogc3RyaW5nO1xuICByZWFkb25seSBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcHJpdmF0ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGFnPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQdWJsaXNoQ2FsbGJhY2sgPSB0eXBlb2YgcHJvY2Vzcy5leGl0O1xuXG5leHBvcnQgY29uc3QgcHVibGlzaCA9IGFzeW5jIChjbWQ6IFB1Ymxpc2hPcHRpb25zLCBjYWxsYmFjazogUHVibGlzaENhbGxiYWNrID0gcHJvY2Vzcy5leGl0KTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge2J1bXAsIGNsaU5hbWUgPSAnTGV4JywgbmV3VmVyc2lvbiwgb3RwLCBwYWNrYWdlTWFuYWdlcjogY21kUGFja2FnZU1hbmFnZXIsIHByaXZhdGU6IGFjY2Vzc1ByaXZhdGUsIHRhZywgcXVpZXR9ID0gY21kO1xuICBsb2coYCR7Y2xpTmFtZX0gcHVibGlzaGluZyBucG0gbW9kdWxlLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgLy8gU3Bpbm5lclxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjb25maWd1cmF0aW9uXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtwYWNrYWdlTWFuYWdlcjogY29uZmlnUGFja2FnZU1hbmFnZXJ9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3QgcGFja2FnZU1hbmFnZXI6IHN0cmluZyA9IGNtZFBhY2thZ2VNYW5hZ2VyIHx8IGNvbmZpZ1BhY2thZ2VNYW5hZ2VyO1xuICBjb25zdCBwdWJsaXNoT3B0aW9uczogc3RyaW5nW10gPSBbJ3B1Ymxpc2gnXTtcblxuICBpZihhY2Nlc3NQcml2YXRlKSB7XG4gICAgcHVibGlzaE9wdGlvbnMucHVzaCgnLS1hY2Nlc3MnLCAncmVzdHJpY3RlZCcpO1xuICB9XG5cbiAgaWYob3RwKSB7XG4gICAgcHVibGlzaE9wdGlvbnMucHVzaCgnLS1vdHAnLCBvdHApO1xuICB9XG5cbiAgaWYodGFnKSB7XG4gICAgcHVibGlzaE9wdGlvbnMucHVzaCgnLS10YWcnLCB0YWcpO1xuICB9XG5cbiAgLy8gR2V0IG5leHQgdmVyc2lvbiBudW1iZXJcbiAgbGV0IG5leHRWZXJzaW9uOiBzdHJpbmc7XG4gIGNvbnN0IHBhY2thZ2VQYXRoOiBzdHJpbmcgPSBgJHtwcm9jZXNzLmN3ZCgpfS9wYWNrYWdlLmpzb25gO1xuICBsZXQgcGFja2FnZUpzb247XG4gIGxldCBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICBsZXQgcHJldlZlcnNpb246IHN0cmluZztcblxuICAvLyBJZiBub3QgdXNpbmcgeWFybiwgd2UnbGwgdXNlIG5wbSBhbmQgbWFudWFsbHkgdXBkYXRlIHRoZSB2ZXJzaW9uIG51bWJlclxuICB0cnkge1xuICAgIHBhY2thZ2VKc29uID0gZ2V0UGFja2FnZUpzb24ocGFja2FnZVBhdGgpO1xuICAgIHBhY2thZ2VOYW1lID0gcGFja2FnZUpzb24ubmFtZTtcbiAgICBwcmV2VmVyc2lvbiA9IHBhY2thZ2VKc29uLnZlcnNpb247XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFRoZSBmaWxlLCAke3BhY2thZ2VQYXRofSwgd2FzIG5vdCBmb3VuZCBvciBpcyBtYWxmb3JtZWQuXFxuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZyhlcnJvci5tZXNzYWdlLCAnZXJyb3InKTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBwYWNrYWdlLmpzb24gd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb25cbiAgaWYobmV3VmVyc2lvbikge1xuICAgIC8vIElmIHVzaW5nIGEgc3BlY2lmaWMgdmVyc2lvbiwgd2UgZG9uJ3QgbmVlZCB0byBkZXRlcm1pbmUgdGhlIG5leHQgYnVtcFxuICAgIG5leHRWZXJzaW9uID0gbmV3VmVyc2lvbjtcbiAgfSBlbHNlIGlmKGJ1bXApIHtcbiAgICAvLyBEZXRlcm1pbmUgbmV4dCB2ZXJzaW9uXG4gICAgY29uc3QgZm9ybWF0QnVtcCA9IGJ1bXAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZihmb3JtYXRCdW1wKSB7XG4gICAgICBjb25zdCB2YWxpZFJlbGVhc2VzOiBzdHJpbmdbXSA9IFsnbWFqb3InLCAnbWlub3InLCAncGF0Y2gnXTtcbiAgICAgIGNvbnN0IHZhbGlkUHJlUmVsZWFzZXM6IHN0cmluZ1tdID0gWydhbHBoYScsICdiZXRhJywgJ3JjJ107XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdmVyc2lvbiBpbiBwYWNrYWdlLmpzb24gaXMgdmFsaWRcbiAgICAgIGNvbnN0IHBhY2thZ2VWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShwcmV2VmVyc2lvbik7XG5cbiAgICAgIGlmKCFzZW12ZXIudmFsaWQocGFja2FnZVZlcnNpb24pKSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogVmVyc2lvbiBpcyBpbnZhbGlkIGluIHBhY2thZ2UuanNvbmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgY2FsbGJhY2soMSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICBpZih2YWxpZFJlbGVhc2VzLmluY2x1ZGVzKGZvcm1hdEJ1bXApKSB7XG4gICAgICAgIG5leHRWZXJzaW9uID0gc2VtdmVyLmluYyhwYWNrYWdlVmVyc2lvbiwgZm9ybWF0QnVtcCBhcyBSZWxlYXNlVHlwZSk7XG4gICAgICB9IGVsc2UgaWYodmFsaWRQcmVSZWxlYXNlcy5pbmNsdWRlcyhmb3JtYXRCdW1wKSkge1xuICAgICAgICBuZXh0VmVyc2lvbiA9IHNlbXZlci5pbmMocGFja2FnZVZlcnNpb24sICdwcmVyZWxlYXNlJywgZm9ybWF0QnVtcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEJ1bXAgdHlwZSBpcyBpbnZhbGlkLiBwbGVhc2UgbWFrZSBzdXJlIGl0IGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOiAke3ZhbGlkUmVsZWFzZXMuam9pbignLCAnKX0sICR7dmFsaWRQcmVSZWxlYXNlcy5qb2luKCcsICcpfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgY2FsbGJhY2soMSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEJ1bXAgdHlwZSBpcyBtaXNzaW5nLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgaWYobmV4dFZlcnNpb24gJiYgcGFja2FnZU1hbmFnZXIgPT09ICd5YXJuJykge1xuICAgIHB1Ymxpc2hPcHRpb25zLnB1c2goJy0tbmV3LXZlcnNpb24nLCBuZXh0VmVyc2lvbik7XG4gIH0gZWxzZSBpZihuZXh0VmVyc2lvbiAmJiBwYWNrYWdlSnNvbikge1xuICAgIHRyeSB7XG4gICAgICAvLyBTYXZlIHVwZGF0ZWQgdmVyc2lvblxuICAgICAgc2V0UGFja2FnZUpzb24oey4uLnBhY2thZ2VKc29uLCB2ZXJzaW9uOiBuZXh0VmVyc2lvbn0sIHBhY2thZ2VQYXRoKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFRoZSBmaWxlLCAke3BhY2thZ2VQYXRofSwgd2FzIG5vdCBmb3VuZCBvciBpcyBtYWxmb3JtZWQuICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXh0VmVyc2lvbiA9IHByZXZWZXJzaW9uO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjYShwYWNrYWdlTWFuYWdlciwgcHVibGlzaE9wdGlvbnMsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICBzdGRpbzogJ2luaGVyaXQnXG4gICAgfSk7XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoYFN1Y2Nlc3NmdWxseSBwdWJsaXNoZWQgbnBtIHBhY2thZ2U6ICR7cGFja2FnZU5hbWV9IWApO1xuXG4gICAgLy8gS2lsbCBwcm9jZXNzXG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2VcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBzcGlubmVyLmZhaWwoJ1B1Ymxpc2hpbmcgdG8gbnBtIGhhcyBmYWlsZWQuJyk7XG5cbiAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTsiXSwibmFtZXMiOlsiZXhlY2EiLCJzZW12ZXIiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwiZ2V0UGFja2FnZUpzb24iLCJzZXRQYWNrYWdlSnNvbiIsImxvZyIsInB1Ymxpc2giLCJjbWQiLCJjYWxsYmFjayIsInByb2Nlc3MiLCJleGl0IiwiYnVtcCIsImNsaU5hbWUiLCJuZXdWZXJzaW9uIiwib3RwIiwicGFja2FnZU1hbmFnZXIiLCJjbWRQYWNrYWdlTWFuYWdlciIsInByaXZhdGUiLCJhY2Nlc3NQcml2YXRlIiwidGFnIiwicXVpZXQiLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJjb25maWdQYWNrYWdlTWFuYWdlciIsImNvbmZpZyIsInB1Ymxpc2hPcHRpb25zIiwicHVzaCIsIm5leHRWZXJzaW9uIiwicGFja2FnZVBhdGgiLCJjd2QiLCJwYWNrYWdlSnNvbiIsInBhY2thZ2VOYW1lIiwicHJldlZlcnNpb24iLCJuYW1lIiwidmVyc2lvbiIsImVycm9yIiwibWVzc2FnZSIsImZvcm1hdEJ1bXAiLCJ0b1N0cmluZyIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInZhbGlkUmVsZWFzZXMiLCJ2YWxpZFByZVJlbGVhc2VzIiwicGFja2FnZVZlcnNpb24iLCJjb2VyY2UiLCJ2YWxpZCIsImluY2x1ZGVzIiwiaW5jIiwiam9pbiIsImVuY29kaW5nIiwic3RkaW8iLCJzdWNjZWVkIiwiZmFpbCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsS0FBSyxRQUFPLFFBQVE7QUFDNUIsT0FBT0MsWUFBMkIsU0FB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