@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.
- package/.swcrc +35 -0
- package/README.md +43 -59
- package/__mocks__/chalk.js +19 -17
- package/config.json +32 -8
- package/examples/lex.config.js +110 -10
- package/index.cjs +1 -5
- package/lex.config.js +34 -7
- package/lib/Button.stories.js +99 -0
- package/lib/LexConfig.d.ts +60 -22
- package/lib/LexConfig.js +285 -244
- package/lib/commands/ai/ai.js +287 -288
- package/lib/commands/ai/index.js +8 -7
- package/lib/commands/build/build.d.ts +2 -2
- package/lib/commands/build/build.js +349 -458
- package/lib/commands/clean/clean.js +45 -33
- package/lib/commands/compile/compile.js +214 -227
- package/lib/commands/config/config.js +46 -42
- package/lib/commands/copy/copy.js +36 -35
- package/lib/commands/create/create.js +200 -121
- package/lib/commands/dev/dev.d.ts +2 -0
- package/lib/commands/dev/dev.js +259 -263
- package/lib/commands/init/init.js +108 -88
- package/lib/commands/link/link.js +18 -14
- package/lib/commands/lint/lint.js +735 -742
- package/lib/commands/migrate/migrate.js +49 -36
- package/lib/commands/publish/publish.js +116 -96
- package/lib/commands/serverless/serverless.js +611 -585
- package/lib/commands/storybook/storybook.js +242 -238
- package/lib/commands/test/test.d.ts +1 -1
- package/lib/commands/test/test.js +382 -394
- package/lib/commands/update/update.js +141 -120
- package/lib/commands/upgrade/upgrade.js +51 -44
- package/lib/commands/versions/versions.d.ts +1 -1
- package/lib/commands/versions/versions.js +36 -38
- package/lib/create/changelog.js +136 -125
- package/lib/index.js +40 -38
- package/lib/lex.js +95 -68
- package/lib/storybook/index.js +6 -1
- package/lib/test-react/index.js +7 -84
- package/lib/types.d.ts +1 -1
- package/lib/types.js +7 -1
- package/lib/utils/aiService.js +240 -227
- package/lib/utils/app.js +274 -273
- package/lib/utils/deepMerge.js +37 -23
- package/lib/utils/file.js +218 -215
- package/lib/utils/log.js +29 -27
- package/lib/utils/reactShim.js +7 -85
- package/lib/utils/translations.js +91 -65
- package/package.json +63 -64
- package/templates/typescript/DataLayer.js.txt +218 -0
- package/templates/typescript/DataLayer.test.js.txt +268 -0
- package/templates/typescript/DataLayer.test.ts.txt +269 -0
- package/templates/typescript/DataLayer.ts.txt +227 -0
- package/webpack.config.js +53 -26
- package/lib/commands/lint/autofix.d.ts +0 -2
|
@@ -1,37 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2NvbW1hbmRzL21pZ3JhdGUvbWlncmF0ZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIGdldFBhY2thZ2VKc29uLCByZW1vdmVDb25mbGljdE1vZHVsZXMsIHJlbW92ZU1vZHVsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhY2thZ2VNYW5hZ2VyPzogc3RyaW5nO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIE1pZ3JhdGVDYWxsYmFjayA9IHR5cGVvZiBwcm9jZXNzLmV4aXQ7XG5cbmV4cG9ydCBjb25zdCBtaWdyYXRlID0gYXN5bmMgKGNtZDogTWlncmF0ZU9wdGlvbnMsIGNhbGxiYWNrOiBNaWdyYXRlQ2FsbGJhY2sgPSBwcm9jZXNzLmV4aXQpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBwYWNrYWdlTWFuYWdlcjogY21kUGFja2FnZU1hbmFnZXIsIHF1aWV0fSA9IGNtZDtcblxuICBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gLy8gRGlzcGxheSBtZXNzYWdlXG4gIC8vIGxvZyhgJHtjbGlOYW1lfSBjb3B5aW5nIFwiJHt0b31cIi4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIC8vIFNwaW5uZXJcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuICBzcGlubmVyLnN0YXJ0KCdSZW1vdmluZyBub2RlIG1vZHVsZXMuLi4nKTtcblxuICAvLyBSZW1vdmUgbm9kZV9tb2R1bGVzXG4gIGF3YWl0IHJlbW92ZU1vZHVsZXMoKTtcblxuICBjb25zdCB7cGFja2FnZU1hbmFnZXI6IGNvbmZpZ1BhY2thZ2VNYW5hZ2VyfSA9IExleENvbmZpZy5jb25maWc7XG4gIGNvbnN0IHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmcgPSBjbWRQYWNrYWdlTWFuYWdlciB8fCBjb25maWdQYWNrYWdlTWFuYWdlciB8fCAnJztcbiAgY29uc3QgcGFja2FnZVBhdGg6IHN0cmluZyA9IGAke2N3ZH0vcGFja2FnZS5qc29uYDtcbiAgY29uc3QgYXBwUGFja2FnZSA9IGdldFBhY2thZ2VKc29uKHBhY2thZ2VQYXRoKTtcbiAgY29uc3Qge2RlcGVuZGVuY2llcyA9IHt9LCBkZXZEZXBlbmRlbmNpZXMgPSB7fX0gPSBhcHBQYWNrYWdlO1xuXG4gIC8vIFJlbW92ZSBFU0J1aWxkLCBKZXN0IGFuZCBXZWJwYWNrIGZyb20gYXBwIHNpbmNlIGl0IHdpbGwgY29uZmxpY3RcbiAgYXBwUGFja2FnZS5kZXBlbmRlbmNpZXMgPSByZW1vdmVDb25mbGljdE1vZHVsZXMoZGVwZW5kZW5jaWVzKTtcbiAgYXBwUGFja2FnZS5kZXZEZXBlbmRlbmNpZXMgPSByZW1vdmVDb25mbGljdE1vZHVsZXMoZGV2RGVwZW5kZW5jaWVzKTtcblxuICAvLyBJbnN0YWxsIG5ldyBsaXN0IG9mIHBhY2thZ2VzXG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlY2EocGFja2FnZU1hbmFnZXIsIFsnaW5zdGFsbCddLCB7XG4gICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgc3RkaW86ICdpbmhlcml0J1xuICAgIH0pO1xuXG4gICAgLy8gU3RvcCBsb2FkZXJcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBtaWdyYXRlZCBhcHAhJyk7XG5cbiAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2VcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byByZW1vdmUgbW9kdWxlcy4nKTtcblxuICAgIC8vIEtpbGwgcHJvY2Vzc1xuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLFNBQVEsYUFBWTtBQUVwQixTQUFRLGlCQUFnQjtBQUN4QixTQUFRLGVBQWUsZ0JBQWdCLHVCQUF1QixxQkFBb0I7QUFDbEYsU0FBUSxXQUFVO0FBVVgsTUFBTSxVQUFVLE9BQU8sS0FBcUIsV0FBNEIsUUFBUSxTQUEwQjtBQUMvRyxRQUFNLEVBQUMsVUFBVSxPQUFPLGdCQUFnQixtQkFBbUIsTUFBSyxJQUFJO0FBRXBFLFFBQU0sTUFBYyxRQUFRLElBQUk7QUFNaEMsUUFBTSxVQUFVLGNBQWMsS0FBSztBQUNuQyxVQUFRLE1BQU0sMEJBQTBCO0FBR3hDLFFBQU0sY0FBYztBQUVwQixRQUFNLEVBQUMsZ0JBQWdCLHFCQUFvQixJQUFJLFVBQVU7QUFDekQsUUFBTSxpQkFBeUIscUJBQXFCLHdCQUF3QjtBQUM1RSxRQUFNLGNBQXNCLEdBQUcsR0FBRztBQUNsQyxRQUFNLGFBQWEsZUFBZSxXQUFXO0FBQzdDLFFBQU0sRUFBQyxlQUFlLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxFQUFDLElBQUk7QUFHbEQsYUFBVyxlQUFlLHNCQUFzQixZQUFZO0FBQzVELGFBQVcsa0JBQWtCLHNCQUFzQixlQUFlO0FBR2xFLE1BQUk7QUFDRixVQUFNLE1BQU0sZ0JBQWdCLENBQUMsU0FBUyxHQUFHO0FBQUEsTUFDdkMsVUFBVTtBQUFBLE1BQ1YsT0FBTztBQUFBLElBQ1QsQ0FBQztBQUdELFlBQVEsUUFBUSw0QkFBNEI7QUFHNUMsYUFBUyxDQUFDO0FBQ1YsV0FBTztBQUFBLEVBQ1QsU0FBUyxPQUFPO0FBRWQsUUFBSTtBQUFBLEVBQUssT0FBTyxXQUFXLE1BQU0sT0FBTyxJQUFJLFNBQVMsS0FBSztBQUcxRCxZQUFRLEtBQUssMkJBQTJCO0FBR3hDLGFBQVMsQ0FBQztBQUNWLFdBQU87QUFBQSxFQUNUO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9taWdyYXRlL21pZ3JhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIGdldFBhY2thZ2VKc29uLCByZW1vdmVDb25mbGljdE1vZHVsZXMsIHJlbW92ZU1vZHVsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi4vLi4vdXRpbHMvbG9nLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhY2thZ2VNYW5hZ2VyPzogc3RyaW5nO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIE1pZ3JhdGVDYWxsYmFjayA9IHR5cGVvZiBwcm9jZXNzLmV4aXQ7XG5cbmV4cG9ydCBjb25zdCBtaWdyYXRlID0gYXN5bmMgKGNtZDogTWlncmF0ZU9wdGlvbnMsIGNhbGxiYWNrOiBNaWdyYXRlQ2FsbGJhY2sgPSBwcm9jZXNzLmV4aXQpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7Y2xpTmFtZSA9ICdMZXgnLCBwYWNrYWdlTWFuYWdlcjogY21kUGFja2FnZU1hbmFnZXIsIHF1aWV0fSA9IGNtZDtcblxuICBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gLy8gRGlzcGxheSBtZXNzYWdlXG4gIC8vIGxvZyhgJHtjbGlOYW1lfSBjb3B5aW5nIFwiJHt0b31cIi4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIC8vIFNwaW5uZXJcbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuICBzcGlubmVyLnN0YXJ0KCdSZW1vdmluZyBub2RlIG1vZHVsZXMuLi4nKTtcblxuICAvLyBSZW1vdmUgbm9kZV9tb2R1bGVzXG4gIGF3YWl0IHJlbW92ZU1vZHVsZXMoKTtcblxuICBjb25zdCB7cGFja2FnZU1hbmFnZXI6IGNvbmZpZ1BhY2thZ2VNYW5hZ2VyfSA9IExleENvbmZpZy5jb25maWc7XG4gIGNvbnN0IHBhY2thZ2VNYW5hZ2VyOiBzdHJpbmcgPSBjbWRQYWNrYWdlTWFuYWdlciB8fCBjb25maWdQYWNrYWdlTWFuYWdlciB8fCAnJztcbiAgY29uc3QgcGFja2FnZVBhdGg6IHN0cmluZyA9IGAke2N3ZH0vcGFja2FnZS5qc29uYDtcbiAgY29uc3QgYXBwUGFja2FnZSA9IGdldFBhY2thZ2VKc29uKHBhY2thZ2VQYXRoKTtcbiAgY29uc3Qge2RlcGVuZGVuY2llcyA9IHt9LCBkZXZEZXBlbmRlbmNpZXMgPSB7fX0gPSBhcHBQYWNrYWdlO1xuXG4gIC8vIFJlbW92ZSBFU0J1aWxkLCBKZXN0IGFuZCBXZWJwYWNrIGZyb20gYXBwIHNpbmNlIGl0IHdpbGwgY29uZmxpY3RcbiAgYXBwUGFja2FnZS5kZXBlbmRlbmNpZXMgPSByZW1vdmVDb25mbGljdE1vZHVsZXMoZGVwZW5kZW5jaWVzKTtcbiAgYXBwUGFja2FnZS5kZXZEZXBlbmRlbmNpZXMgPSByZW1vdmVDb25mbGljdE1vZHVsZXMoZGV2RGVwZW5kZW5jaWVzKTtcblxuICAvLyBJbnN0YWxsIG5ldyBsaXN0IG9mIHBhY2thZ2VzXG4gIHRyeSB7XG4gICAgYXdhaXQgZXhlY2EocGFja2FnZU1hbmFnZXIsIFsnaW5zdGFsbCddLCB7XG4gICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgc3RkaW86ICdpbmhlcml0J1xuICAgIH0pO1xuXG4gICAgLy8gU3RvcCBsb2FkZXJcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBtaWdyYXRlZCBhcHAhJyk7XG5cbiAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIC8vIERpc3BsYXkgZXJyb3IgbWVzc2FnZVxuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIC8vIFN0b3Agc3Bpbm5lclxuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHJlbW92ZSBtb2R1bGVzLicpO1xuXG4gICAgLy8gS2lsbCBwcm9jZXNzXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07Il0sIm5hbWVzIjpbImV4ZWNhIiwiTGV4Q29uZmlnIiwiY3JlYXRlU3Bpbm5lciIsImdldFBhY2thZ2VKc29uIiwicmVtb3ZlQ29uZmxpY3RNb2R1bGVzIiwicmVtb3ZlTW9kdWxlcyIsImxvZyIsIm1pZ3JhdGUiLCJjbWQiLCJjYWxsYmFjayIsInByb2Nlc3MiLCJleGl0IiwiY2xpTmFtZSIsInBhY2thZ2VNYW5hZ2VyIiwiY21kUGFja2FnZU1hbmFnZXIiLCJxdWlldCIsImN3ZCIsInNwaW5uZXIiLCJzdGFydCIsImNvbmZpZ1BhY2thZ2VNYW5hZ2VyIiwiY29uZmlnIiwicGFja2FnZVBhdGgiLCJhcHBQYWNrYWdlIiwiZGVwZW5kZW5jaWVzIiwiZGV2RGVwZW5kZW5jaWVzIiwiZW5jb2RpbmciLCJzdGRpbyIsInN1Y2NlZWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJmYWlsIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxLQUFLLFFBQU8sUUFBUTtBQUU1QixTQUFRQyxTQUFTLFFBQU8scUJBQXFCO0FBQzdDLFNBQVFDLGFBQWEsRUFBRUMsY0FBYyxFQUFFQyxxQkFBcUIsRUFBRUMsYUFBYSxRQUFPLHFCQUFxQjtBQUN2RyxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBVXZDLE9BQU8sTUFBTUMsVUFBVSxPQUFPQyxLQUFxQkMsV0FBNEJDLFFBQVFDLElBQUk7SUFDekYsTUFBTSxFQUFDQyxVQUFVLEtBQUssRUFBRUMsZ0JBQWdCQyxpQkFBaUIsRUFBRUMsS0FBSyxFQUFDLEdBQUdQO0lBRXBFLE1BQU1RLE1BQWNOLFFBQVFNLEdBQUc7SUFFL0IscUJBQXFCO0lBQ3JCLHVEQUF1RDtJQUV2RCxVQUFVO0lBQ1YsTUFBTUMsVUFBVWYsY0FBY2E7SUFDOUJFLFFBQVFDLEtBQUssQ0FBQztJQUVkLHNCQUFzQjtJQUN0QixNQUFNYjtJQUVOLE1BQU0sRUFBQ1EsZ0JBQWdCTSxvQkFBb0IsRUFBQyxHQUFHbEIsVUFBVW1CLE1BQU07SUFDL0QsTUFBTVAsaUJBQXlCQyxxQkFBcUJLLHdCQUF3QjtJQUM1RSxNQUFNRSxjQUFzQixHQUFHTCxJQUFJLGFBQWEsQ0FBQztJQUNqRCxNQUFNTSxhQUFhbkIsZUFBZWtCO0lBQ2xDLE1BQU0sRUFBQ0UsZUFBZSxDQUFDLENBQUMsRUFBRUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFDLEdBQUdGO0lBRWxELG1FQUFtRTtJQUNuRUEsV0FBV0MsWUFBWSxHQUFHbkIsc0JBQXNCbUI7SUFDaERELFdBQVdFLGVBQWUsR0FBR3BCLHNCQUFzQm9CO0lBRW5ELCtCQUErQjtJQUMvQixJQUFJO1FBQ0YsTUFBTXhCLE1BQU1hLGdCQUFnQjtZQUFDO1NBQVUsRUFBRTtZQUN2Q1ksVUFBVTtZQUNWQyxPQUFPO1FBQ1Q7UUFFQSxjQUFjO1FBQ2RULFFBQVFVLE9BQU8sQ0FBQztRQUVoQixlQUFlO1FBQ2ZsQixTQUFTO1FBQ1QsT0FBTztJQUNULEVBQUUsT0FBTW1CLE9BQU87UUFDYix3QkFBd0I7UUFDeEJ0QixJQUFJLENBQUMsRUFBRSxFQUFFTSxRQUFRLFFBQVEsRUFBRWdCLE1BQU1DLE9BQU8sRUFBRSxFQUFFLFNBQVNkO1FBRXJELGVBQWU7UUFDZkUsUUFBUWEsSUFBSSxDQUFDO1FBRWIsZUFBZTtRQUNmckIsU0FBUztRQUNULE9BQU87SUFDVDtBQUNGLEVBQUUifQ==
|
|
@@ -1,104 +1,124 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
publishOptions
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
78
|
-
${cliName} Error:
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
123
|
+
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9wdWJsaXNoL3B1Ymxpc2gudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhlY2F9IGZyb20gJ2V4ZWNhJztcbmltcG9ydCBzZW12ZXIsIHtSZWxlYXNlVHlwZX0gZnJvbSAnc2VtdmVyJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NyZWF0ZVNwaW5uZXIsIGdldFBhY2thZ2VKc29uLCBzZXRQYWNrYWdlSnNvbn0gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFB1Ymxpc2hPcHRpb25zIHtcbiAgcmVhZG9ubHkgYnVtcD86IHN0cmluZztcbiAgcmVhZG9ubHkgY2xpTmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgbmV3VmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgb3RwPzogc3RyaW5nO1xuICByZWFkb25seSBwYWNrYWdlTWFuYWdlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgcHJpdmF0ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdGFnPzogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBQdWJsaXNoQ2FsbGJhY2sgPSB0eXBlb2YgcHJvY2Vzcy5leGl0O1xuXG5leHBvcnQgY29uc3QgcHVibGlzaCA9IGFzeW5jIChjbWQ6IFB1Ymxpc2hPcHRpb25zLCBjYWxsYmFjazogUHVibGlzaENhbGxiYWNrID0gcHJvY2Vzcy5leGl0KTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge2J1bXAsIGNsaU5hbWUgPSAnTGV4JywgbmV3VmVyc2lvbiwgb3RwLCBwYWNrYWdlTWFuYWdlcjogY21kUGFja2FnZU1hbmFnZXIsIHByaXZhdGU6IGFjY2Vzc1ByaXZhdGUsIHRhZywgcXVpZXR9ID0gY21kO1xuICBsb2coYCR7Y2xpTmFtZX0gcHVibGlzaGluZyBucG0gbW9kdWxlLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgLy8gU3Bpbm5lclxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjb25maWd1cmF0aW9uXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtwYWNrYWdlTWFuYWdlcjogY29uZmlnUGFja2FnZU1hbmFnZXJ9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3QgcGFja2FnZU1hbmFnZXI6IHN0cmluZyA9IGNtZFBhY2thZ2VNYW5hZ2VyIHx8IGNvbmZpZ1BhY2thZ2VNYW5hZ2VyO1xuICBjb25zdCBwdWJsaXNoT3B0aW9uczogc3RyaW5nW10gPSBbJ3B1Ymxpc2gnXTtcblxuICBpZihhY2Nlc3NQcml2YXRlKSB7XG4gICAgcHVibGlzaE9wdGlvbnMucHVzaCgnLS1hY2Nlc3MnLCAncmVzdHJpY3RlZCcpO1xuICB9XG5cbiAgaWYob3RwKSB7XG4gICAgcHVibGlzaE9wdGlvbnMucHVzaCgnLS1vdHAnLCBvdHApO1xuICB9XG5cbiAgaWYodGFnKSB7XG4gICAgcHVibGlzaE9wdGlvbnMucHVzaCgnLS10YWcnLCB0YWcpO1xuICB9XG5cbiAgLy8gR2V0IG5leHQgdmVyc2lvbiBudW1iZXJcbiAgbGV0IG5leHRWZXJzaW9uOiBzdHJpbmc7XG4gIGNvbnN0IHBhY2thZ2VQYXRoOiBzdHJpbmcgPSBgJHtwcm9jZXNzLmN3ZCgpfS9wYWNrYWdlLmpzb25gO1xuICBsZXQgcGFja2FnZUpzb247XG4gIGxldCBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICBsZXQgcHJldlZlcnNpb246IHN0cmluZztcblxuICAvLyBJZiBub3QgdXNpbmcgeWFybiwgd2UnbGwgdXNlIG5wbSBhbmQgbWFudWFsbHkgdXBkYXRlIHRoZSB2ZXJzaW9uIG51bWJlclxuICB0cnkge1xuICAgIHBhY2thZ2VKc29uID0gZ2V0UGFja2FnZUpzb24ocGFja2FnZVBhdGgpO1xuICAgIHBhY2thZ2VOYW1lID0gcGFja2FnZUpzb24ubmFtZTtcbiAgICBwcmV2VmVyc2lvbiA9IHBhY2thZ2VKc29uLnZlcnNpb247XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFRoZSBmaWxlLCAke3BhY2thZ2VQYXRofSwgd2FzIG5vdCBmb3VuZCBvciBpcyBtYWxmb3JtZWQuXFxuYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZyhlcnJvci5tZXNzYWdlLCAnZXJyb3InKTtcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIC8vIFVwZGF0ZSBwYWNrYWdlLmpzb24gd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb25cbiAgaWYobmV3VmVyc2lvbikge1xuICAgIC8vIElmIHVzaW5nIGEgc3BlY2lmaWMgdmVyc2lvbiwgd2UgZG9uJ3QgbmVlZCB0byBkZXRlcm1pbmUgdGhlIG5leHQgYnVtcFxuICAgIG5leHRWZXJzaW9uID0gbmV3VmVyc2lvbjtcbiAgfSBlbHNlIGlmKGJ1bXApIHtcbiAgICAvLyBEZXRlcm1pbmUgbmV4dCB2ZXJzaW9uXG4gICAgY29uc3QgZm9ybWF0QnVtcCA9IGJ1bXAudG9TdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZihmb3JtYXRCdW1wKSB7XG4gICAgICBjb25zdCB2YWxpZFJlbGVhc2VzOiBzdHJpbmdbXSA9IFsnbWFqb3InLCAnbWlub3InLCAncGF0Y2gnXTtcbiAgICAgIGNvbnN0IHZhbGlkUHJlUmVsZWFzZXM6IHN0cmluZ1tdID0gWydhbHBoYScsICdiZXRhJywgJ3JjJ107XG5cbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgdmVyc2lvbiBpbiBwYWNrYWdlLmpzb24gaXMgdmFsaWRcbiAgICAgIGNvbnN0IHBhY2thZ2VWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShwcmV2VmVyc2lvbik7XG5cbiAgICAgIGlmKCFzZW12ZXIudmFsaWQocGFja2FnZVZlcnNpb24pKSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogVmVyc2lvbiBpcyBpbnZhbGlkIGluIHBhY2thZ2UuanNvbmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgY2FsbGJhY2soMSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICBpZih2YWxpZFJlbGVhc2VzLmluY2x1ZGVzKGZvcm1hdEJ1bXApKSB7XG4gICAgICAgIG5leHRWZXJzaW9uID0gc2VtdmVyLmluYyhwYWNrYWdlVmVyc2lvbiwgZm9ybWF0QnVtcCBhcyBSZWxlYXNlVHlwZSk7XG4gICAgICB9IGVsc2UgaWYodmFsaWRQcmVSZWxlYXNlcy5pbmNsdWRlcyhmb3JtYXRCdW1wKSkge1xuICAgICAgICBuZXh0VmVyc2lvbiA9IHNlbXZlci5pbmMocGFja2FnZVZlcnNpb24sICdwcmVyZWxlYXNlJywgZm9ybWF0QnVtcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEJ1bXAgdHlwZSBpcyBpbnZhbGlkLiBwbGVhc2UgbWFrZSBzdXJlIGl0IGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOiAke3ZhbGlkUmVsZWFzZXMuam9pbignLCAnKX0sICR7dmFsaWRQcmVSZWxlYXNlcy5qb2luKCcsICcpfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgY2FsbGJhY2soMSk7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEJ1bXAgdHlwZSBpcyBtaXNzaW5nLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgaWYobmV4dFZlcnNpb24gJiYgcGFja2FnZU1hbmFnZXIgPT09ICd5YXJuJykge1xuICAgIHB1Ymxpc2hPcHRpb25zLnB1c2goJy0tbmV3LXZlcnNpb24nLCBuZXh0VmVyc2lvbik7XG4gIH0gZWxzZSBpZihuZXh0VmVyc2lvbiAmJiBwYWNrYWdlSnNvbikge1xuICAgIHRyeSB7XG4gICAgICAvLyBTYXZlIHVwZGF0ZWQgdmVyc2lvblxuICAgICAgc2V0UGFja2FnZUpzb24oey4uLnBhY2thZ2VKc29uLCB2ZXJzaW9uOiBuZXh0VmVyc2lvbn0sIHBhY2thZ2VQYXRoKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFRoZSBmaWxlLCAke3BhY2thZ2VQYXRofSwgd2FzIG5vdCBmb3VuZCBvciBpcyBtYWxmb3JtZWQuICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXh0VmVyc2lvbiA9IHByZXZWZXJzaW9uO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjYShwYWNrYWdlTWFuYWdlciwgcHVibGlzaE9wdGlvbnMsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICBzdGRpbzogJ2luaGVyaXQnXG4gICAgfSk7XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoYFN1Y2Nlc3NmdWxseSBwdWJsaXNoZWQgbnBtIHBhY2thZ2U6ICR7cGFja2FnZU5hbWV9IWApO1xuXG4gICAgLy8gS2lsbCBwcm9jZXNzXG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAvLyBEaXNwbGF5IGVycm9yIG1lc3NhZ2VcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAvLyBTdG9wIHNwaW5uZXJcbiAgICBzcGlubmVyLmZhaWwoJ1B1Ymxpc2hpbmcgdG8gbnBtIGhhcyBmYWlsZWQuJyk7XG5cbiAgICAvLyBLaWxsIHByb2Nlc3NcbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTsiXSwibmFtZXMiOlsiZXhlY2EiLCJzZW12ZXIiLCJMZXhDb25maWciLCJjcmVhdGVTcGlubmVyIiwiZ2V0UGFja2FnZUpzb24iLCJzZXRQYWNrYWdlSnNvbiIsImxvZyIsInB1Ymxpc2giLCJjbWQiLCJjYWxsYmFjayIsInByb2Nlc3MiLCJleGl0IiwiYnVtcCIsImNsaU5hbWUiLCJuZXdWZXJzaW9uIiwib3RwIiwicGFja2FnZU1hbmFnZXIiLCJjbWRQYWNrYWdlTWFuYWdlciIsInByaXZhdGUiLCJhY2Nlc3NQcml2YXRlIiwidGFnIiwicXVpZXQiLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJjb25maWdQYWNrYWdlTWFuYWdlciIsImNvbmZpZyIsInB1Ymxpc2hPcHRpb25zIiwicHVzaCIsIm5leHRWZXJzaW9uIiwicGFja2FnZVBhdGgiLCJjd2QiLCJwYWNrYWdlSnNvbiIsInBhY2thZ2VOYW1lIiwicHJldlZlcnNpb24iLCJuYW1lIiwidmVyc2lvbiIsImVycm9yIiwibWVzc2FnZSIsImZvcm1hdEJ1bXAiLCJ0b1N0cmluZyIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInZhbGlkUmVsZWFzZXMiLCJ2YWxpZFByZVJlbGVhc2VzIiwicGFja2FnZVZlcnNpb24iLCJjb2VyY2UiLCJ2YWxpZCIsImluY2x1ZGVzIiwiaW5jIiwiam9pbiIsImVuY29kaW5nIiwic3RkaW8iLCJzdWNjZWVkIiwiZmFpbCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsS0FBSyxRQUFPLFFBQVE7QUFDNUIsT0FBT0MsWUFBMkIsU0FB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
|