@psync/patch-package 1.0.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.
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectPackageManager = void 0;
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const path_1 = require("./path");
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ const process_1 = __importDefault(require("process"));
11
+ const find_yarn_workspace_root_1 = __importDefault(require("find-yarn-workspace-root"));
12
+ function printNoYarnLockfileError() {
13
+ console.log(`
14
+ ${chalk_1.default.red.bold("**ERROR**")} ${chalk_1.default.red(`The --use-yarn option was specified but there is no yarn.lock file`)}
15
+ `);
16
+ }
17
+ function printNoBunLockfileError() {
18
+ console.log(`
19
+ ${chalk_1.default.red.bold("**ERROR**")} ${chalk_1.default.red(`The --use-bun option was specified but there is no bun.lockb file`)}
20
+ `);
21
+ }
22
+ function printNoLockfilesError() {
23
+ console.log(`
24
+ ${chalk_1.default.red.bold("**ERROR**")} ${chalk_1.default.red(`No package-lock.json, npm-shrinkwrap.json, yarn.lock, or bun.lockb file.
25
+
26
+ You must use either npm@>=5, yarn, npm-shrinkwrap, or bun to manage this project's
27
+ dependencies.`)}
28
+ `);
29
+ }
30
+ function printSelectingDefaultMessage() {
31
+ console.info(`${chalk_1.default.bold("patch-package")}: you have multiple lockfiles, e.g. yarn.lock and package-lock.json
32
+ Defaulting to using ${chalk_1.default.bold("npm")}
33
+ You can override this setting by passing --use-yarn, --use-bun, or
34
+ deleting the conflicting lockfile if you don't need it
35
+ `);
36
+ }
37
+ function printSelectingDefaultYarnMessage() {
38
+ console.info(`${chalk_1.default.bold("patch-package")}: you have both yarn.lock and bun.lockb lockfiles
39
+ Defaulting to using ${chalk_1.default.bold("yarn")}
40
+ You can override this setting by passing --use-bun, or
41
+ deleting yarn.lock if you don't need it
42
+ `);
43
+ }
44
+ function checkForYarnOverride(overridePackageManager) {
45
+ if (overridePackageManager === "yarn") {
46
+ printNoYarnLockfileError();
47
+ process_1.default.exit(1);
48
+ }
49
+ }
50
+ function checkForBunOverride(overridePackageManager) {
51
+ if (overridePackageManager === "bun") {
52
+ printNoBunLockfileError();
53
+ process_1.default.exit(1);
54
+ }
55
+ }
56
+ const detectPackageManager = (appRootPath, overridePackageManager) => {
57
+ const packageLockExists = fs_extra_1.default.existsSync((0, path_1.join)(appRootPath, "package-lock.json"));
58
+ const shrinkWrapExists = fs_extra_1.default.existsSync((0, path_1.join)(appRootPath, "npm-shrinkwrap.json"));
59
+ const yarnLockExists = fs_extra_1.default.existsSync((0, path_1.join)((0, find_yarn_workspace_root_1.default)() ?? appRootPath, "yarn.lock"));
60
+ // Bun workspaces seem to work the same as yarn workspaces - https://bun.sh/docs/install/workspaces
61
+ const bunLockbExists = fs_extra_1.default.existsSync((0, path_1.join)((0, find_yarn_workspace_root_1.default)() ?? appRootPath, "bun.lockb"));
62
+ if ([
63
+ packageLockExists || shrinkWrapExists,
64
+ yarnLockExists,
65
+ bunLockbExists,
66
+ ].filter(Boolean).length > 1) {
67
+ if (overridePackageManager) {
68
+ return overridePackageManager;
69
+ }
70
+ if (!packageLockExists && !shrinkWrapExists) {
71
+ // The only case where we don't want to default to npm is when we have both yarn and bun lockfiles.
72
+ printSelectingDefaultYarnMessage();
73
+ return "yarn";
74
+ }
75
+ printSelectingDefaultMessage();
76
+ return shrinkWrapExists ? "npm-shrinkwrap" : "npm";
77
+ }
78
+ else if (packageLockExists || shrinkWrapExists) {
79
+ checkForYarnOverride(overridePackageManager);
80
+ checkForBunOverride(overridePackageManager);
81
+ return shrinkWrapExists ? "npm-shrinkwrap" : "npm";
82
+ }
83
+ else if (yarnLockExists) {
84
+ checkForBunOverride(overridePackageManager);
85
+ return "yarn";
86
+ }
87
+ else if (bunLockbExists) {
88
+ checkForYarnOverride(overridePackageManager);
89
+ return "bun";
90
+ }
91
+ else {
92
+ printNoLockfilesError();
93
+ process_1.default.exit(1);
94
+ }
95
+ throw Error();
96
+ };
97
+ exports.detectPackageManager = detectPackageManager;
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0UGFja2FnZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGV0ZWN0UGFja2FnZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsd0RBQXlCO0FBQ3pCLGlDQUE2QjtBQUM3QixrREFBeUI7QUFDekIsc0RBQTZCO0FBQzdCLHdGQUF3RDtBQUl4RCxTQUFTLHdCQUF3QjtJQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDO0VBQ1osZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksZUFBSyxDQUFDLEdBQUcsQ0FDdEMsb0VBQW9FLENBQ3JFO0NBQ0YsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQUVELFNBQVMsdUJBQXVCO0lBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUM7RUFDWixlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxlQUFLLENBQUMsR0FBRyxDQUN0QyxtRUFBbUUsQ0FDcEU7Q0FDRixDQUFDLENBQUE7QUFDRixDQUFDO0FBRUQsU0FBUyxxQkFBcUI7SUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQztFQUNaLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLGVBQUssQ0FBQyxHQUFHLENBQ3RDOzs7Y0FHVSxDQUNYO0NBQ0YsQ0FBQyxDQUFBO0FBQ0YsQ0FBQztBQUVELFNBQVMsNEJBQTRCO0lBQ25DLE9BQU8sQ0FBQyxJQUFJLENBQ1YsR0FBRyxlQUFLLENBQUMsSUFBSSxDQUNYLGVBQWUsQ0FDaEI7c0JBQ2lCLGVBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDOzs7Q0FHdEMsQ0FDRSxDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsZ0NBQWdDO0lBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsR0FBRyxlQUFLLENBQUMsSUFBSSxDQUNYLGVBQWUsQ0FDaEI7c0JBQ2lCLGVBQUssQ0FBQyxJQUFJ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fSBmcm9tIFwiLi9wYXRoXCJcclxuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiXHJcbmltcG9ydCBwcm9jZXNzIGZyb20gXCJwcm9jZXNzXCJcclxuaW1wb3J0IGZpbmRXb3Jrc3BhY2VSb290IGZyb20gXCJmaW5kLXlhcm4td29ya3NwYWNlLXJvb3RcIlxyXG5cclxuZXhwb3J0IHR5cGUgUGFja2FnZU1hbmFnZXIgPSBcInlhcm5cIiB8IFwibnBtXCIgfCBcIm5wbS1zaHJpbmt3cmFwXCIgfCBcImJ1blwiXHJcblxyXG5mdW5jdGlvbiBwcmludE5vWWFybkxvY2tmaWxlRXJyb3IoKSB7XHJcbiAgY29uc29sZS5sb2coYFxyXG4ke2NoYWxrLnJlZC5ib2xkKFwiKipFUlJPUioqXCIpfSAke2NoYWxrLnJlZChcclxuICAgIGBUaGUgLS11c2UteWFybiBvcHRpb24gd2FzIHNwZWNpZmllZCBidXQgdGhlcmUgaXMgbm8geWFybi5sb2NrIGZpbGVgLFxyXG4gICl9XHJcbmApXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByaW50Tm9CdW5Mb2NrZmlsZUVycm9yKCkge1xyXG4gIGNvbnNvbGUubG9nKGBcclxuJHtjaGFsay5yZWQuYm9sZChcIioqRVJST1IqKlwiKX0gJHtjaGFsay5yZWQoXHJcbiAgICBgVGhlIC0tdXNlLWJ1biBvcHRpb24gd2FzIHNwZWNpZmllZCBidXQgdGhlcmUgaXMgbm8gYnVuLmxvY2tiIGZpbGVgLFxyXG4gICl9XHJcbmApXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByaW50Tm9Mb2NrZmlsZXNFcnJvcigpIHtcclxuICBjb25zb2xlLmxvZyhgXHJcbiR7Y2hhbGsucmVkLmJvbGQoXCIqKkVSUk9SKipcIil9ICR7Y2hhbGsucmVkKFxyXG4gICAgYE5vIHBhY2thZ2UtbG9jay5qc29uLCBucG0tc2hyaW5rd3JhcC5qc29uLCB5YXJuLmxvY2ssIG9yIGJ1bi5sb2NrYiBmaWxlLlxyXG5cclxuWW91IG11c3QgdXNlIGVpdGhlciBucG1APj01LCB5YXJuLCBucG0tc2hyaW5rd3JhcCwgb3IgYnVuIHRvIG1hbmFnZSB0aGlzIHByb2plY3Qnc1xyXG5kZXBlbmRlbmNpZXMuYCxcclxuICApfVxyXG5gKVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcmludFNlbGVjdGluZ0RlZmF1bHRNZXNzYWdlKCkge1xyXG4gIGNvbnNvbGUuaW5mbyhcclxuICAgIGAke2NoYWxrLmJvbGQoXHJcbiAgICAgIFwicGF0Y2gtcGFja2FnZVwiLFxyXG4gICAgKX06IHlvdSBoYXZlIG11bHRpcGxlIGxvY2tmaWxlcywgZS5nLiB5YXJuLmxvY2sgYW5kIHBhY2thZ2UtbG9jay5qc29uXHJcbkRlZmF1bHRpbmcgdG8gdXNpbmcgJHtjaGFsay5ib2xkKFwibnBtXCIpfVxyXG5Zb3UgY2FuIG92ZXJyaWRlIHRoaXMgc2V0dGluZyBieSBwYXNzaW5nIC0tdXNlLXlhcm4sIC0tdXNlLWJ1biwgb3JcclxuZGVsZXRpbmcgdGhlIGNvbmZsaWN0aW5nIGxvY2tmaWxlIGlmIHlvdSBkb24ndCBuZWVkIGl0XHJcbmAsXHJcbiAgKVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcmludFNlbGVjdGluZ0RlZmF1bHRZYXJuTWVzc2FnZSgpIHtcclxuICBjb25zb2xlLmluZm8oXHJcbiAgICBgJHtjaGFsay5ib2xkKFxyXG4gICAgICBcInBhdGNoLXBhY2thZ2VcIixcclxuICAgICl9OiB5b3UgaGF2ZSBib3RoIHlhcm4ubG9jayBhbmQgYnVuLmxvY2tiIGxvY2tmaWxlc1xyXG5EZWZhdWx0aW5nIHRvIHVzaW5nICR7Y2hhbGsuYm9sZChcInlhcm5cIil9XHJcbllvdSBjYW4gb3ZlcnJpZGUgdGhpcyBzZXR0aW5nIGJ5IHBhc3NpbmcgLS11c2UtYnVuLCBvclxyXG5kZWxldGluZyB5YXJuLmxvY2sgaWYgeW91IGRvbid0IG5lZWQgaXRcclxuYCxcclxuICApXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrRm9yWWFybk92ZXJyaWRlKG92ZXJyaWRlUGFja2FnZU1hbmFnZXI6IFBhY2thZ2VNYW5hZ2VyIHwgbnVsbCkge1xyXG4gIGlmIChvdmVycmlkZVBhY2thZ2VNYW5hZ2VyID09PSBcInlhcm5cIikge1xyXG4gICAgcHJpbnROb1lhcm5Mb2NrZmlsZUVycm9yKClcclxuICAgIHByb2Nlc3MuZXhpdCgxKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2hlY2tGb3JCdW5PdmVycmlkZShvdmVycmlkZVBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlciB8IG51bGwpIHtcclxuICBpZiAob3ZlcnJpZGVQYWNrYWdlTWFuYWdlciA9PT0gXCJidW5cIikge1xyXG4gICAgcHJpbnROb0J1bkxvY2tmaWxlRXJyb3IoKVxyXG4gICAgcHJvY2Vzcy5leGl0KDEpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGV0ZWN0UGFja2FnZU1hbmFnZXIgPSAoXHJcbiAgYXBwUm9vdFBhdGg6IHN0cmluZyxcclxuICBvdmVycmlkZVBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlciB8IG51bGwsXHJcbik6IFBhY2thZ2VNYW5hZ2VyID0+IHtcclxuICBjb25zdCBwYWNrYWdlTG9ja0V4aXN0cyA9IGZzLmV4aXN0c1N5bmMoXHJcbiAgICBqb2luKGFwcFJvb3RQYXRoLCBcInBhY2thZ2UtbG9jay5qc29uXCIpLFxyXG4gIClcclxuICBjb25zdCBzaHJpbmtXcmFwRXhpc3RzID0gZnMuZXhpc3RzU3luYyhcclxuICAgIGpvaW4oYXBwUm9vdFBhdGgsIFwibnBtLXNocmlua3dyYXAuanNvblwiKSxcclxuICApXHJcbiAgY29uc3QgeWFybkxvY2tFeGlzdHMgPSBmcy5leGlzdHNTeW5jKFxyXG4gICAgam9pbihmaW5kV29ya3NwYWNlUm9vdCgpID8/IGFwcFJvb3RQYXRoLCBcInlhcm4ubG9ja1wiKSxcclxuICApXHJcbiAgLy8gQnVuIHdvcmtzcGFjZXMgc2VlbSB0byB3b3JrIHRoZSBzYW1lIGFzIHlhcm4gd29ya3NwYWNlcyAtIGh0dHBzOi8vYnVuLnNoL2RvY3MvaW5zdGFsbC93b3Jrc3BhY2VzXHJcbiAgY29uc3QgYnVuTG9ja2JFeGlzdHMgPSBmcy5leGlzdHNTeW5jKFxyXG4gICAgam9pbihmaW5kV29ya3NwYWNlUm9vdCgpID8/IGFwcFJvb3RQYXRoLCBcImJ1bi5sb2NrYlwiKSxcclxuICApXHJcbiAgaWYgKFxyXG4gICAgW1xyXG4gICAgICBwYWNrYWdlTG9ja0V4aXN0cyB8fCBzaHJpbmtXcmFwRXhpc3RzLFxyXG4gICAgICB5YXJuTG9ja0V4aXN0cyxcclxuICAgICAgYnVuTG9ja2JFeGlzdHMsXHJcbiAgICBdLmZpbHRlcihCb29sZWFuKS5sZW5ndGggPiAxXHJcbiAgKSB7XHJcbiAgICBpZiAob3ZlcnJpZGVQYWNrYWdlTWFuYWdlcikge1xyXG4gICAgICByZXR1cm4gb3ZlcnJpZGVQYWNrYWdlTWFuYWdlclxyXG4gICAgfVxyXG4gICAgaWYgKCFwYWNrYWdlTG9ja0V4aXN0cyAmJiAhc2hyaW5rV3JhcEV4aXN0cykge1xyXG4gICAgICAvLyBUaGUgb25seSBjYXNlIHdoZXJlIHdlIGRvbid0IHdhbnQgdG8gZGVmYXVsdCB0byBucG0gaXMgd2hlbiB3ZSBoYXZlIGJvdGggeWFybiBhbmQgYnVuIGxvY2tmaWxlcy5cclxuICAgICAgcHJpbnRTZWxlY3RpbmdEZWZhdWx0WWFybk1lc3NhZ2UoKVxyXG4gICAgICByZXR1cm4gXCJ5YXJuXCJcclxuICAgIH1cclxuICAgIHByaW50U2VsZWN0aW5nRGVmYXVsdE1lc3NhZ2UoKVxyXG4gICAgcmV0dXJuIHNocmlua1dyYXBFeGlzdHMgPyBcIm5wbS1zaHJpbmt3cmFwXCIgOiBcIm5wbVwiXHJcbiAgfSBlbHNlIGlmIChwYWNrYWdlTG9ja0V4aXN0cyB8fCBzaHJpbmtXcmFwRXhpc3RzKSB7XHJcbiAgICBjaGVja0Zvcllhcm5PdmVycmlkZShvdmVycmlkZVBhY2thZ2VNYW5hZ2VyKVxyXG4gICAgY2hlY2tGb3JCdW5PdmVycmlkZShvdmVycmlkZVBhY2thZ2VNYW5hZ2VyKVxyXG4gICAgcmV0dXJuIHNocmlua1dyYXBFeGlzdHMgPyBcIm5wbS1zaHJpbmt3cmFwXCIgOiBcIm5wbVwiXHJcbiAgfSBlbHNlIGlmICh5YXJuTG9ja0V4aXN0cykge1xyXG4gICAgY2hlY2tGb3JCdW5PdmVycmlkZShvdmVycmlkZVBhY2thZ2VNYW5hZ2VyKVxyXG4gICAgcmV0dXJuIFwieWFyblwiXHJcbiAgfSBlbHNlIGlmIChidW5Mb2NrYkV4aXN0cykge1xyXG4gICAgY2hlY2tGb3JZYXJuT3ZlcnJpZGUob3ZlcnJpZGVQYWNrYWdlTWFuYWdlcilcclxuICAgIHJldHVybiBcImJ1blwiXHJcbiAgfSBlbHNlIHtcclxuICAgIHByaW50Tm9Mb2NrZmlsZXNFcnJvcigpXHJcbiAgICBwcm9jZXNzLmV4aXQoMSlcclxuICB9XHJcbiAgdGhyb3cgRXJyb3IoKVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.removeIgnoredFiles = removeIgnoredFiles;
7
+ const path_1 = require("./path");
8
+ const fs_extra_1 = require("fs-extra");
9
+ const klaw_sync_1 = __importDefault(require("klaw-sync"));
10
+ function removeIgnoredFiles(dir, includePaths, excludePaths) {
11
+ (0, klaw_sync_1.default)(dir, { nodir: true })
12
+ .map((item) => item.path.slice(`${dir}/`.length))
13
+ .filter((relativePath) => !relativePath.match(includePaths) || relativePath.match(excludePaths))
14
+ .forEach((relativePath) => (0, fs_extra_1.removeSync)((0, path_1.join)(dir, relativePath)));
15
+ }
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyRmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZmlsdGVyRmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSxnREFZQztBQWhCRCxpQ0FBNkI7QUFDN0IsdUNBQXFDO0FBQ3JDLDBEQUFnQztBQUVoQyxTQUFnQixrQkFBa0IsQ0FDaEMsR0FBVyxFQUNYLFlBQW9CLEVBQ3BCLFlBQW9CO0lBRXBCLElBQUEsbUJBQVEsRUFBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDM0IsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2hELE1BQU0sQ0FDTCxDQUFDLFlBQVksRUFBRSxFQUFFLENBQ2YsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQ3hFO1NBQ0EsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFBLHFCQUFVLEVBQUMsSUFBQSxXQUFJLEVBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNuRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gXCIuL3BhdGhcIlxyXG5pbXBvcnQgeyByZW1vdmVTeW5jIH0gZnJvbSBcImZzLWV4dHJhXCJcclxuaW1wb3J0IGtsYXdTeW5jIGZyb20gXCJrbGF3LXN5bmNcIlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUlnbm9yZWRGaWxlcyhcclxuICBkaXI6IHN0cmluZyxcclxuICBpbmNsdWRlUGF0aHM6IFJlZ0V4cCxcclxuICBleGNsdWRlUGF0aHM6IFJlZ0V4cCxcclxuKSB7XHJcbiAga2xhd1N5bmMoZGlyLCB7IG5vZGlyOiB0cnVlIH0pXHJcbiAgICAubWFwKChpdGVtKSA9PiBpdGVtLnBhdGguc2xpY2UoYCR7ZGlyfS9gLmxlbmd0aCkpXHJcbiAgICAuZmlsdGVyKFxyXG4gICAgICAocmVsYXRpdmVQYXRoKSA9PlxyXG4gICAgICAgICFyZWxhdGl2ZVBhdGgubWF0Y2goaW5jbHVkZVBhdGhzKSB8fCByZWxhdGl2ZVBhdGgubWF0Y2goZXhjbHVkZVBhdGhzKSxcclxuICAgIClcclxuICAgIC5mb3JFYWNoKChyZWxhdGl2ZVBhdGgpID0+IHJlbW92ZVN5bmMoam9pbihkaXIsIHJlbGF0aXZlUGF0aCkpKVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getAppRootPath = void 0;
7
+ const path_1 = require("./path");
8
+ const process_1 = __importDefault(require("process"));
9
+ const fs_extra_1 = require("fs-extra");
10
+ const getAppRootPath = () => {
11
+ let cwd = process_1.default.cwd();
12
+ while (!(0, fs_extra_1.existsSync)((0, path_1.join)(cwd, "package.json"))) {
13
+ const up = (0, path_1.resolve)(cwd, "../");
14
+ if (up === cwd) {
15
+ throw new Error("no package.json found for this project");
16
+ }
17
+ cwd = up;
18
+ }
19
+ return cwd;
20
+ };
21
+ exports.getAppRootPath = getAppRootPath;
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0QXBwUm9vdFBhdGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2V0QXBwUm9vdFBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsaUNBQXNDO0FBQ3RDLHNEQUE2QjtBQUM3Qix1Q0FBcUM7QUFFOUIsTUFBTSxjQUFjLEdBQUcsR0FBVyxFQUFFO0lBQ3pDLElBQUksR0FBRyxHQUFHLGlCQUFPLENBQUMsR0FBRyxFQUFFLENBQUE7SUFDdkIsT0FBTyxDQUFDLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUEsY0FBTyxFQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM5QixJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQTtRQUMzRCxDQUFDO1FBQ0QsR0FBRyxHQUFHLEVBQUUsQ0FBQTtJQUNWLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMsQ0FBQTtBQVZZLFFBQUEsY0FBYyxrQkFVMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSBcIi4vcGF0aFwiXHJcbmltcG9ydCBwcm9jZXNzIGZyb20gXCJwcm9jZXNzXCJcclxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJmcy1leHRyYVwiXHJcblxyXG5leHBvcnQgY29uc3QgZ2V0QXBwUm9vdFBhdGggPSAoKTogc3RyaW5nID0+IHtcclxuICBsZXQgY3dkID0gcHJvY2Vzcy5jd2QoKVxyXG4gIHdoaWxlICghZXhpc3RzU3luYyhqb2luKGN3ZCwgXCJwYWNrYWdlLmpzb25cIikpKSB7XHJcbiAgICBjb25zdCB1cCA9IHJlc29sdmUoY3dkLCBcIi4uL1wiKVxyXG4gICAgaWYgKHVwID09PSBjd2QpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gcGFja2FnZS5qc29uIGZvdW5kIGZvciB0aGlzIHByb2plY3RcIilcclxuICAgIH1cclxuICAgIGN3ZCA9IHVwXHJcbiAgfVxyXG4gIHJldHVybiBjd2RcclxufVxyXG4iXX0=
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getPackageResolution = getPackageResolution;
7
+ const path_1 = require("./path");
8
+ const PackageDetails_1 = require("./PackageDetails");
9
+ const detectPackageManager_1 = require("./detectPackageManager");
10
+ const fs_extra_1 = require("fs-extra");
11
+ const lockfile_1 = require("@yarnpkg/lockfile");
12
+ const yaml_1 = __importDefault(require("yaml"));
13
+ const find_yarn_workspace_root_1 = __importDefault(require("find-yarn-workspace-root"));
14
+ const getPackageVersion_1 = require("./getPackageVersion");
15
+ const coerceSemVer_1 = require("./coerceSemVer");
16
+ const parseBunLockfile_1 = require("./parseBunLockfile");
17
+ function getPackageResolution({ packageDetails, packageManager, appPath, }) {
18
+ if (packageManager === "yarn" || packageManager === "bun") {
19
+ const isBun = packageManager === "bun";
20
+ const lockFileName = isBun ? "bun.lockb" : "yarn.lock";
21
+ let lockFilePath = lockFileName;
22
+ if (!(0, fs_extra_1.existsSync)(lockFilePath)) {
23
+ const workspaceRoot = (0, find_yarn_workspace_root_1.default)();
24
+ if (!workspaceRoot) {
25
+ throw new Error(`Can't find ${lockFileName} file`);
26
+ }
27
+ lockFilePath = (0, path_1.join)(workspaceRoot, lockFilePath);
28
+ }
29
+ if (!(0, fs_extra_1.existsSync)(lockFilePath)) {
30
+ throw new Error(`Can't find ${lockFileName} file`);
31
+ }
32
+ const lockFileString = isBun
33
+ ? (0, parseBunLockfile_1.parseBunLockfile)(lockFilePath)
34
+ : (0, fs_extra_1.readFileSync)(lockFilePath).toString();
35
+ let appLockFile;
36
+ if (lockFileString.includes("yarn lockfile v1")) {
37
+ const parsedYarnLockFile = (0, lockfile_1.parse)(lockFileString);
38
+ if (parsedYarnLockFile.type !== "success") {
39
+ throw new Error(`Could not parse yarn v1 lock file ${isBun ? "- was originally a bun.lockb file" : ""}`);
40
+ }
41
+ else {
42
+ appLockFile = parsedYarnLockFile.object;
43
+ }
44
+ }
45
+ else {
46
+ try {
47
+ appLockFile = yaml_1.default.parse(lockFileString);
48
+ }
49
+ catch (e) {
50
+ console.log(e);
51
+ throw new Error(`Could not parse yarn v2 lock file ${isBun ? "- was originally a bun.lockb file (should not happen)" : ""}`);
52
+ }
53
+ }
54
+ const installedVersion = (0, getPackageVersion_1.getPackageVersion)((0, path_1.join)((0, path_1.resolve)(appPath, packageDetails.path), "package.json"));
55
+ const entries = Object.entries(appLockFile).filter(([k, v]) => k.startsWith(packageDetails.name + "@") &&
56
+ // @ts-ignore
57
+ (0, coerceSemVer_1.coerceSemVer)(v.version) === (0, coerceSemVer_1.coerceSemVer)(installedVersion));
58
+ const resolutions = entries.map(([_, v]) => {
59
+ // @ts-ignore
60
+ return v.resolved;
61
+ });
62
+ if (resolutions.length === 0) {
63
+ throw new Error(`\`${packageDetails.pathSpecifier}\`'s installed version is ${installedVersion} but a lockfile entry for it couldn't be found. Your lockfile is likely to be corrupt or you forgot to reinstall your packages.`);
64
+ }
65
+ if (new Set(resolutions).size !== 1) {
66
+ console.log(`Ambigious lockfile entries for ${packageDetails.pathSpecifier}. Using version ${installedVersion}`);
67
+ return installedVersion;
68
+ }
69
+ if (resolutions[0]) {
70
+ return resolutions[0];
71
+ }
72
+ const resolution = entries[0][0].slice(packageDetails.name.length + 1);
73
+ // resolve relative file path
74
+ if (resolution.startsWith("file:.")) {
75
+ return `file:${(0, path_1.resolve)(appPath, resolution.slice("file:".length))}`;
76
+ }
77
+ if (resolution.startsWith("npm:")) {
78
+ return resolution.replace("npm:", "");
79
+ }
80
+ return resolution;
81
+ }
82
+ else {
83
+ const lockfile = require((0, path_1.join)(appPath, packageManager === "npm-shrinkwrap"
84
+ ? "npm-shrinkwrap.json"
85
+ : "package-lock.json"));
86
+ const lockFileStack = [lockfile];
87
+ for (const name of packageDetails.packageNames.slice(0, -1)) {
88
+ const child = lockFileStack[0].dependencies;
89
+ if (child && name in child) {
90
+ lockFileStack.push(child[name]);
91
+ }
92
+ }
93
+ lockFileStack.reverse();
94
+ const relevantStackEntry = lockFileStack.find((entry) => {
95
+ if (entry.dependencies) {
96
+ return entry.dependencies && packageDetails.name in entry.dependencies;
97
+ }
98
+ else if (entry.packages) {
99
+ return entry.packages && packageDetails.path in entry.packages;
100
+ }
101
+ throw new Error("Cannot find dependencies or packages in lockfile");
102
+ });
103
+ const pkg = relevantStackEntry.dependencies
104
+ ? relevantStackEntry.dependencies[packageDetails.name]
105
+ : relevantStackEntry.packages[packageDetails.path];
106
+ return pkg.resolved || pkg.version || pkg.from;
107
+ }
108
+ }
109
+ if (require.main === module) {
110
+ const packageDetails = (0, PackageDetails_1.getPatchDetailsFromCliString)(process.argv[2]);
111
+ if (!packageDetails) {
112
+ console.log(`Can't find package ${process.argv[2]}`);
113
+ process.exit(1);
114
+ }
115
+ console.log(getPackageResolution({
116
+ appPath: process.cwd(),
117
+ packageDetails,
118
+ packageManager: (0, detectPackageManager_1.detectPackageManager)(process.cwd(), null),
119
+ }));
120
+ }
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0UGFja2FnZVJlc29sdXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2V0UGFja2FnZVJlc29sdXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFXQSxvREE4SEM7QUF6SUQsaUNBQXNDO0FBQ3RDLHFEQUErRTtBQUMvRSxpRUFBNkU7QUFDN0UsdUNBQW1EO0FBQ25ELGdEQUE4RDtBQUM5RCxnREFBdUI7QUFDdkIsd0ZBQXdEO0FBQ3hELDJEQUF1RDtBQUN2RCxpREFBNkM7QUFDN0MseURBQXFEO0FBRXJELFNBQWdCLG9CQUFvQixDQUFDLEVBQ25DLGNBQWMsRUFDZCxjQUFjLEVBQ2QsT0FBTyxHQUtSO0lBQ0MsSUFBSSxjQUFjLEtBQUssTUFBTSxJQUFJLGNBQWMsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUMxRCxNQUFNLEtBQUssR0FBRyxjQUFjLEtBQUssS0FBSyxDQUFBO1FBQ3RDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUE7UUFDdEQsSUFBSSxZQUFZLEdBQUcsWUFBWSxDQUFBO1FBQy9CLElBQUksQ0FBQyxJQUFBLHFCQUFVLEVBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFBLGtDQUFpQixHQUFFLENBQUE7WUFDekMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsWUFBWSxPQUFPLENBQUMsQ0FBQTtZQUNwRCxDQUFDO1lBQ0QsWUFBWSxHQUFHLElBQUEsV0FBSSxFQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUNsRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUEscUJBQVUsRUFBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxZQUFZLE9BQU8sQ0FBQyxDQUFBO1FBQ3BELENB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b0IsRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDO0tBQzFELENBQUMsQ0FDSCxDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tIFwiLi9wYXRoXCJcclxuaW1wb3J0IHsgUGFja2FnZURldGFpbHMsIGdldFBhdGNoRGV0YWlsc0Zyb21DbGlTdHJpbmcgfSBmcm9tIFwiLi9QYWNrYWdlRGV0YWlsc1wiXHJcbmltcG9ydCB7IFBhY2thZ2VNYW5hZ2VyLCBkZXRlY3RQYWNrYWdlTWFuYWdlciB9IGZyb20gXCIuL2RldGVjdFBhY2thZ2VNYW5hZ2VyXCJcclxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBleGlzdHNTeW5jIH0gZnJvbSBcImZzLWV4dHJhXCJcclxuaW1wb3J0IHsgcGFyc2UgYXMgcGFyc2VZYXJuTG9ja0ZpbGUgfSBmcm9tIFwiQHlhcm5wa2cvbG9ja2ZpbGVcIlxyXG5pbXBvcnQgeWFtbCBmcm9tIFwieWFtbFwiXHJcbmltcG9ydCBmaW5kV29ya3NwYWNlUm9vdCBmcm9tIFwiZmluZC15YXJuLXdvcmtzcGFjZS1yb290XCJcclxuaW1wb3J0IHsgZ2V0UGFja2FnZVZlcnNpb24gfSBmcm9tIFwiLi9nZXRQYWNrYWdlVmVyc2lvblwiXHJcbmltcG9ydCB7IGNvZXJjZVNlbVZlciB9IGZyb20gXCIuL2NvZXJjZVNlbVZlclwiXHJcbmltcG9ydCB7IHBhcnNlQnVuTG9ja2ZpbGUgfSBmcm9tIFwiLi9wYXJzZUJ1bkxvY2tmaWxlXCJcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlUmVzb2x1dGlvbih7XHJcbiAgcGFja2FnZURldGFpbHMsXHJcbiAgcGFja2FnZU1hbmFnZXIsXHJcbiAgYXBwUGF0aCxcclxufToge1xyXG4gIHBhY2thZ2VEZXRhaWxzOiBQYWNrYWdlRGV0YWlsc1xyXG4gIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlclxyXG4gIGFwcFBhdGg6IHN0cmluZ1xyXG59KSB7XHJcbiAgaWYgKHBhY2thZ2VNYW5hZ2VyID09PSBcInlhcm5cIiB8fCBwYWNrYWdlTWFuYWdlciA9PT0gXCJidW5cIikge1xyXG4gICAgY29uc3QgaXNCdW4gPSBwYWNrYWdlTWFuYWdlciA9PT0gXCJidW5cIlxyXG4gICAgY29uc3QgbG9ja0ZpbGVOYW1lID0gaXNCdW4gPyBcImJ1bi5sb2NrYlwiIDogXCJ5YXJuLmxvY2tcIlxyXG4gICAgbGV0IGxvY2tGaWxlUGF0aCA9IGxvY2tGaWxlTmFtZVxyXG4gICAgaWYgKCFleGlzdHNTeW5jKGxvY2tGaWxlUGF0aCkpIHtcclxuICAgICAgY29uc3Qgd29ya3NwYWNlUm9vdCA9IGZpbmRXb3Jrc3BhY2VSb290KClcclxuICAgICAgaWYgKCF3b3Jrc3BhY2VSb290KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4ndCBmaW5kICR7bG9ja0ZpbGVOYW1lfSBmaWxlYClcclxuICAgICAgfVxyXG4gICAgICBsb2NrRmlsZVBhdGggPSBqb2luKHdvcmtzcGFjZVJvb3QsIGxvY2tGaWxlUGF0aClcclxuICAgIH1cclxuICAgIGlmICghZXhpc3RzU3luYyhsb2NrRmlsZVBhdGgpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgZmluZCAke2xvY2tGaWxlTmFtZX0gZmlsZWApXHJcbiAgICB9XHJcbiAgICBjb25zdCBsb2NrRmlsZVN0cmluZyA9IGlzQnVuXHJcbiAgICAgID8gcGFyc2VCdW5Mb2NrZmlsZShsb2NrRmlsZVBhdGgpXHJcbiAgICAgIDogcmVhZEZpbGVTeW5jKGxvY2tGaWxlUGF0aCkudG9TdHJpbmcoKVxyXG4gICAgbGV0IGFwcExvY2tGaWxlXHJcbiAgICBpZiAobG9ja0ZpbGVTdHJpbmcuaW5jbHVkZXMoXCJ5YXJuIGxvY2tmaWxlIHYxXCIpKSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZFlhcm5Mb2NrRmlsZSA9IHBhcnNlWWFybkxvY2tGaWxlKGxvY2tGaWxlU3RyaW5nKVxyXG4gICAgICBpZiAocGFyc2VkWWFybkxvY2tGaWxlLnR5cGUgIT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYENvdWxkIG5vdCBwYXJzZSB5YXJuIHYxIGxvY2sgZmlsZSAke1xyXG4gICAgICAgICAgICBpc0J1biA/IFwiLSB3YXMgb3JpZ2luYWxseSBhIGJ1bi5sb2NrYiBmaWxlXCIgOiBcIlwiXHJcbiAgICAgICAgICB9YCxcclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXBwTG9ja0ZpbGUgPSBwYXJzZWRZYXJuTG9ja0ZpbGUub2JqZWN0XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXBwTG9ja0ZpbGUgPSB5YW1sLnBhcnNlKGxvY2tGaWxlU3RyaW5nKVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZSlcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICBgQ291bGQgbm90IHBhcnNlIHlhcm4gdjIgbG9jayBmaWxlICR7XHJcbiAgICAgICAgICAgIGlzQnVuID8gXCItIHdhcyBvcmlnaW5hbGx5IGEgYnVuLmxvY2tiIGZpbGUgKHNob3VsZCBub3QgaGFwcGVuKVwiIDogXCJcIlxyXG4gICAgICAgICAgfWAsXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5zdGFsbGVkVmVyc2lvbiA9IGdldFBhY2thZ2VWZXJzaW9uKFxyXG4gICAgICBqb2luKHJlc29sdmUoYXBwUGF0aCwgcGFja2FnZURldGFpbHMucGF0aCksIFwicGFja2FnZS5qc29uXCIpLFxyXG4gICAgKVxyXG5cclxuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhhcHBMb2NrRmlsZSkuZmlsdGVyKFxyXG4gICAgICAoW2ssIHZdKSA9PlxyXG4gICAgICAgIGsuc3RhcnRzV2l0aChwYWNrYWdlRGV0YWlscy5uYW1lICsgXCJAXCIpICYmXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIGNvZXJjZVNlbVZlcih2LnZlcnNpb24pID09PSBjb2VyY2VTZW1WZXIoaW5zdGFsbGVkVmVyc2lvbiksXHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgcmVzb2x1dGlvbnMgPSBlbnRyaWVzLm1hcCgoW18sIHZdKSA9PiB7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgcmV0dXJuIHYucmVzb2x2ZWRcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHJlc29sdXRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgYFxcYCR7cGFja2FnZURldGFpbHMucGF0aFNwZWNpZmllcn1cXGAncyBpbnN0YWxsZWQgdmVyc2lvbiBpcyAke2luc3RhbGxlZFZlcnNpb259IGJ1dCBhIGxvY2tmaWxlIGVudHJ5IGZvciBpdCBjb3VsZG4ndCBiZSBmb3VuZC4gWW91ciBsb2NrZmlsZSBpcyBsaWtlbHkgdG8gYmUgY29ycnVwdCBvciB5b3UgZm9yZ290IHRvIHJlaW5zdGFsbCB5b3VyIHBhY2thZ2VzLmAsXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBpZiAobmV3IFNldChyZXNvbHV0aW9ucykuc2l6ZSAhPT0gMSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBgQW1iaWdpb3VzIGxvY2tmaWxlIGVudHJpZXMgZm9yICR7cGFja2FnZURldGFpbHMucGF0aFNwZWNpZmllcn0uIFVzaW5nIHZlcnNpb24gJHtpbnN0YWxsZWRWZXJzaW9ufWAsXHJcbiAgICAgIClcclxuICAgICAgcmV0dXJuIGluc3RhbGxlZFZlcnNpb25cclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzb2x1dGlvbnNbMF0pIHtcclxuICAgICAgcmV0dXJuIHJlc29sdXRpb25zWzBdXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzb2x1dGlvbiA9IGVudHJpZXNbMF1bMF0uc2xpY2UocGFja2FnZURldGFpbHMubmFtZS5sZW5ndGggKyAxKVxyXG5cclxuICAgIC8vIHJlc29sdmUgcmVsYXRpdmUgZmlsZSBwYXRoXHJcbiAgICBpZiAocmVzb2x1dGlvbi5zdGFydHNXaXRoKFwiZmlsZTouXCIpKSB7XHJcbiAgICAgIHJldHVybiBgZmlsZToke3Jlc29sdmUoYXBwUGF0aCwgcmVzb2x1dGlvbi5zbGljZShcImZpbGU6XCIubGVuZ3RoKSl9YFxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXNvbHV0aW9uLnN0YXJ0c1dpdGgoXCJucG06XCIpKSB7XHJcbiAgICAgIHJldHVybiByZXNvbHV0aW9uLnJlcGxhY2UoXCJucG06XCIsIFwiXCIpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc29sdXRpb25cclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgbG9ja2ZpbGUgPSByZXF1aXJlKFxyXG4gICAgICBqb2luKFxyXG4gICAgICAgIGFwcFBhdGgsXHJcbiAgICAgICAgcGFja2FnZU1hbmFnZXIgPT09IFwibnBtLXNocmlua3dyYXBcIlxyXG4gICAgICAgICAgPyBcIm5wbS1zaHJpbmt3cmFwLmpzb25cIlxyXG4gICAgICAgICAgOiBcInBhY2thZ2UtbG9jay5qc29uXCIsXHJcbiAgICAgICksXHJcbiAgICApXHJcbiAgICBjb25zdCBsb2NrRmlsZVN0YWNrID0gW2xvY2tmaWxlXVxyXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHBhY2thZ2VEZXRhaWxzLnBhY2thZ2VOYW1lcy5zbGljZSgwLCAtMSkpIHtcclxuICAgICAgY29uc3QgY2hpbGQgPSBsb2NrRmlsZVN0YWNrWzBdLmRlcGVuZGVuY2llc1xyXG4gICAgICBpZiAoY2hpbGQgJiYgbmFtZSBpbiBjaGlsZCkge1xyXG4gICAgICAgIGxvY2tGaWxlU3RhY2sucHVzaChjaGlsZFtuYW1lXSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbG9ja0ZpbGVTdGFjay5yZXZlcnNlKClcclxuICAgIGNvbnN0IHJlbGV2YW50U3RhY2tFbnRyeSA9IGxvY2tGaWxlU3RhY2suZmluZCgoZW50cnkpID0+IHtcclxuICAgICAgaWYgKGVudHJ5LmRlcGVuZGVuY2llcykge1xyXG4gICAgICAgIHJldHVybiBlbnRyeS5kZXBlbmRlbmNpZXMgJiYgcGFja2FnZURldGFpbHMubmFtZSBpbiBlbnRyeS5kZXBlbmRlbmNpZXNcclxuICAgICAgfSBlbHNlIGlmIChlbnRyeS5wYWNrYWdlcykge1xyXG4gICAgICAgIHJldHVybiBlbnRyeS5wYWNrYWdlcyAmJiBwYWNrYWdlRGV0YWlscy5wYXRoIGluIGVudHJ5LnBhY2thZ2VzXHJcbiAgICAgIH1cclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgZGVwZW5kZW5jaWVzIG9yIHBhY2thZ2VzIGluIGxvY2tmaWxlXCIpXHJcbiAgICB9KVxyXG4gICAgY29uc3QgcGtnID0gcmVsZXZhbnRTdGFja0VudHJ5LmRlcGVuZGVuY2llc1xyXG4gICAgICA/IHJlbGV2YW50U3RhY2tFbnRyeS5kZXBlbmRlbmNpZXNbcGFja2FnZURldGFpbHMubmFtZV1cclxuICAgICAgOiByZWxldmFudFN0YWNrRW50cnkucGFja2FnZXNbcGFja2FnZURldGFpbHMucGF0aF1cclxuICAgIHJldHVybiBwa2cucmVzb2x2ZWQgfHwgcGtnLnZlcnNpb24gfHwgcGtnLmZyb21cclxuICB9XHJcbn1cclxuXHJcbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xyXG4gIGNvbnN0IHBhY2thZ2VEZXRhaWxzID0gZ2V0UGF0Y2hEZXRhaWxzRnJvbUNsaVN0cmluZyhwcm9jZXNzLmFyZ3ZbMl0pXHJcbiAgaWYgKCFwYWNrYWdlRGV0YWlscykge1xyXG4gICAgY29uc29sZS5sb2coYENhbid0IGZpbmQgcGFja2FnZSAke3Byb2Nlc3MuYXJndlsyXX1gKVxyXG4gICAgcHJvY2Vzcy5leGl0KDEpXHJcbiAgfVxyXG4gIGNvbnNvbGUubG9nKFxyXG4gICAgZ2V0UGFja2FnZVJlc29sdXRpb24oe1xyXG4gICAgICBhcHBQYXRoOiBwcm9jZXNzLmN3ZCgpLFxyXG4gICAgICBwYWNrYWdlRGV0YWlscyxcclxuICAgICAgcGFja2FnZU1hbmFnZXI6IGRldGVjdFBhY2thZ2VNYW5hZ2VyKHByb2Nlc3MuY3dkKCksIG51bGwpLFxyXG4gICAgfSksXHJcbiAgKVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPackageVersion = getPackageVersion;
4
+ function getPackageVersion(packageJsonPath) {
5
+ // remove build metadata
6
+ return require(packageJsonPath).version.replace(/\+.*$/, "");
7
+ }
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0UGFja2FnZVZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ2V0UGFja2FnZVZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw4Q0FHQztBQUhELFNBQWdCLGlCQUFpQixDQUFDLGVBQXVCO0lBQ3ZELHdCQUF3QjtJQUN4QixPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUM5RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2thZ2VWZXJzaW9uKHBhY2thZ2VKc29uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAvLyByZW1vdmUgYnVpbGQgbWV0YWRhdGFcclxuICByZXR1cm4gcmVxdWlyZShwYWNrYWdlSnNvblBhdGgpLnZlcnNpb24ucmVwbGFjZSgvXFwrLiokLywgXCJcIilcclxufVxyXG4iXX0=
package/dist/hash.js ADDED
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hashFile = hashFile;
4
+ const crypto_1 = require("crypto");
5
+ const fs_1 = require("fs");
6
+ const bufferSize = 1024;
7
+ const buffer = Buffer.alloc(bufferSize);
8
+ function hashFile(filePath) {
9
+ const sha = (0, crypto_1.createHash)("sha256");
10
+ const fileDescriptor = (0, fs_1.openSync)(filePath, "r");
11
+ const size = (0, fs_1.statSync)(filePath).size;
12
+ let totalBytesRead = 0;
13
+ while (totalBytesRead < size) {
14
+ const bytesRead = (0, fs_1.readSync)(fileDescriptor, buffer, 0, Math.min(size - totalBytesRead, bufferSize), totalBytesRead);
15
+ if (bytesRead < bufferSize) {
16
+ sha.update(buffer.slice(0, bytesRead));
17
+ }
18
+ else {
19
+ sha.update(buffer);
20
+ }
21
+ totalBytesRead += bytesRead;
22
+ }
23
+ (0, fs_1.closeSync)(fileDescriptor);
24
+ return sha.digest("hex");
25
+ }
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oYXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0EsNEJBc0JDO0FBN0JELG1DQUFtQztBQUNuQywyQkFBNEQ7QUFFNUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFBO0FBRXZCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7QUFFdkMsU0FBZ0IsUUFBUSxDQUFDLFFBQWdCO0lBQ3ZDLE1BQU0sR0FBRyxHQUFHLElBQUEsbUJBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQTtJQUNoQyxNQUFNLGNBQWMsR0FBRyxJQUFBLGFBQVEsRUFBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDOUMsTUFBTSxJQUFJLEdBQUcsSUFBQSxhQUFRLEVBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFBO0lBQ3BDLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQTtJQUN0QixPQUFPLGNBQWMsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUM3QixNQUFNLFNBQVMsR0FBRyxJQUFBLGFBQVEsRUFDeEIsY0FBYyxFQUNkLE1BQU0sRUFDTixDQUFDLEVBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsY0FBYyxFQUFFLFVBQVUsQ0FBQyxFQUMzQyxjQUFjLENBQ2YsQ0FBQTtRQUNELElBQUksU0FBUyxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUN4QyxDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDcEIsQ0FBQztRQUNELGNBQWMsSUFBSSxTQUFTLENBQUE7SUFDN0IsQ0FBQztJQUNELElBQUEsY0FBUyxFQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3pCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJjcnlwdG9cIlxyXG5pbXBvcnQgeyBvcGVuU3luYywgcmVhZFN5bmMsIGNsb3NlU3luYywgc3RhdFN5bmMgfSBmcm9tIFwiZnNcIlxyXG5cclxuY29uc3QgYnVmZmVyU2l6ZSA9IDEwMjRcclxuXHJcbmNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhidWZmZXJTaXplKVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGhhc2hGaWxlKGZpbGVQYXRoOiBzdHJpbmcpIHtcclxuICBjb25zdCBzaGEgPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpXHJcbiAgY29uc3QgZmlsZURlc2NyaXB0b3IgPSBvcGVuU3luYyhmaWxlUGF0aCwgXCJyXCIpXHJcbiAgY29uc3Qgc2l6ZSA9IHN0YXRTeW5jKGZpbGVQYXRoKS5zaXplXHJcbiAgbGV0IHRvdGFsQnl0ZXNSZWFkID0gMFxyXG4gIHdoaWxlICh0b3RhbEJ5dGVzUmVhZCA8IHNpemUpIHtcclxuICAgIGNvbnN0IGJ5dGVzUmVhZCA9IHJlYWRTeW5jKFxyXG4gICAgICBmaWxlRGVzY3JpcHRvcixcclxuICAgICAgYnVmZmVyLFxyXG4gICAgICAwLFxyXG4gICAgICBNYXRoLm1pbihzaXplIC0gdG90YWxCeXRlc1JlYWQsIGJ1ZmZlclNpemUpLFxyXG4gICAgICB0b3RhbEJ5dGVzUmVhZCxcclxuICAgIClcclxuICAgIGlmIChieXRlc1JlYWQgPCBidWZmZXJTaXplKSB7XHJcbiAgICAgIHNoYS51cGRhdGUoYnVmZmVyLnNsaWNlKDAsIGJ5dGVzUmVhZCkpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzaGEudXBkYXRlKGJ1ZmZlcilcclxuICAgIH1cclxuICAgIHRvdGFsQnl0ZXNSZWFkICs9IGJ5dGVzUmVhZFxyXG4gIH1cclxuICBjbG9zZVN5bmMoZmlsZURlc2NyaXB0b3IpXHJcbiAgcmV0dXJuIHNoYS5kaWdlc3QoXCJoZXhcIilcclxufVxyXG4iXX0=
package/dist/index.js ADDED
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const chalk_1 = __importDefault(require("chalk"));
7
+ const process_1 = __importDefault(require("process"));
8
+ const minimist_1 = __importDefault(require("minimist"));
9
+ const applyPatches_1 = require("./applyPatches");
10
+ const getAppRootPath_1 = require("./getAppRootPath");
11
+ const makePatch_1 = require("./makePatch");
12
+ const makeRegExp_1 = require("./makeRegExp");
13
+ const detectPackageManager_1 = require("./detectPackageManager");
14
+ const path_1 = require("./path");
15
+ const path_2 = require("path");
16
+ const slash = require("slash");
17
+ const ci_info_1 = require("ci-info");
18
+ const rebase_1 = require("./rebase");
19
+ const appPath = (0, getAppRootPath_1.getAppRootPath)();
20
+ const argv = (0, minimist_1.default)(process_1.default.argv.slice(2), {
21
+ boolean: [
22
+ "use-yarn",
23
+ "use-bun",
24
+ "case-sensitive-path-filtering",
25
+ "reverse",
26
+ "help",
27
+ "version",
28
+ "error-on-fail",
29
+ "error-on-warn",
30
+ "create-issue",
31
+ "partial",
32
+ "",
33
+ ],
34
+ string: ["patch-dir", "append", "rebase"],
35
+ });
36
+ const packageNames = argv._;
37
+ console.log(chalk_1.default.bold("patch-package"),
38
+ // tslint:disable-next-line:no-var-requires
39
+ require((0, path_1.join)(__dirname, "../package.json")).version);
40
+ if (argv.version || argv.v) {
41
+ // noop
42
+ }
43
+ else if (argv.help || argv.h) {
44
+ printHelp();
45
+ }
46
+ else {
47
+ const patchDir = slash((0, path_2.normalize)((argv["patch-dir"] || "patches") + path_2.sep));
48
+ if (patchDir.startsWith("/")) {
49
+ throw new Error("--patch-dir must be a relative path");
50
+ }
51
+ if ("rebase" in argv) {
52
+ if (!argv.rebase) {
53
+ console.log(chalk_1.default.red("You must specify a patch file name or number when rebasing patches"));
54
+ process_1.default.exit(1);
55
+ }
56
+ if (packageNames.length !== 1) {
57
+ console.log(chalk_1.default.red("You must specify exactly one package name when rebasing patches"));
58
+ process_1.default.exit(1);
59
+ }
60
+ (0, rebase_1.rebase)({
61
+ appPath,
62
+ packagePathSpecifier: packageNames[0],
63
+ patchDir,
64
+ targetPatch: argv.rebase,
65
+ });
66
+ }
67
+ else if (packageNames.length) {
68
+ const includePaths = (0, makeRegExp_1.makeRegExp)(argv.include, "include", /.*/, argv["case-sensitive-path-filtering"]);
69
+ const excludePaths = (0, makeRegExp_1.makeRegExp)(argv.exclude, "exclude", /^package\.json$/, argv["case-sensitive-path-filtering"]);
70
+ const packageManager = (0, detectPackageManager_1.detectPackageManager)(appPath, argv["use-yarn"] ? "yarn" : argv["use-bun"] ? "bun" : null);
71
+ const createIssue = argv["create-issue"];
72
+ packageNames.forEach((packagePathSpecifier) => {
73
+ (0, makePatch_1.makePatch)({
74
+ packagePathSpecifier,
75
+ appPath,
76
+ packageManager,
77
+ includePaths,
78
+ excludePaths,
79
+ patchDir,
80
+ createIssue,
81
+ mode: "append" in argv
82
+ ? { type: "append", name: argv.append || undefined }
83
+ : { type: "overwrite_last" },
84
+ });
85
+ });
86
+ }
87
+ else {
88
+ console.log("Applying patches...");
89
+ const reverse = !!argv["reverse"];
90
+ // don't want to exit(1) on postinstall locally.
91
+ // see https://github.com/ds300/patch-package/issues/86
92
+ const shouldExitWithError = !!argv["error-on-fail"] ||
93
+ (process_1.default.env.NODE_ENV === "production" && ci_info_1.isCI) ||
94
+ (ci_info_1.isCI && !process_1.default.env.PATCH_PACKAGE_INTEGRATION_TEST) ||
95
+ process_1.default.env.NODE_ENV === "test";
96
+ const shouldExitWithWarning = !!argv["error-on-warn"];
97
+ (0, applyPatches_1.applyPatchesForApp)({
98
+ appPath,
99
+ reverse,
100
+ patchDir,
101
+ shouldExitWithError,
102
+ shouldExitWithWarning,
103
+ bestEffort: argv.partial,
104
+ });
105
+ }
106
+ }
107
+ function printHelp() {
108
+ console.log(`
109
+ Usage:
110
+
111
+ 1. Patching packages
112
+ ====================
113
+
114
+ ${chalk_1.default.bold("patch-package")}
115
+
116
+ Without arguments, the ${chalk_1.default.bold("patch-package")} command will attempt to find and apply
117
+ patch files to your project. It looks for files named like
118
+
119
+ ./patches/<package-name>+<version>.patch
120
+
121
+ Options:
122
+
123
+ ${chalk_1.default.bold("--patch-dir <dirname>")}
124
+
125
+ Specify the name for the directory in which the patch files are located.
126
+
127
+ ${chalk_1.default.bold("--error-on-fail")}
128
+
129
+ Forces patch-package to exit with code 1 after failing.
130
+
131
+ When running locally patch-package always exits with 0 by default.
132
+ This happens even after failing to apply patches because otherwise
133
+ yarn.lock and package.json might get out of sync with node_modules,
134
+ which can be very confusing.
135
+
136
+ --error-on-fail is ${chalk_1.default.bold("switched on")} by default on CI.
137
+
138
+ See https://github.com/ds300/patch-package/issues/86 for background.
139
+
140
+ ${chalk_1.default.bold("--error-on-warn")}
141
+
142
+ Forces patch-package to exit with code 1 after warning.
143
+
144
+ See https://github.com/ds300/patch-package/issues/314 for background.
145
+
146
+ ${chalk_1.default.bold("--reverse")}
147
+
148
+ Un-applies all patches.
149
+
150
+ Note that this will fail if the patched files have changed since being
151
+ patched. In that case, you'll probably need to re-install 'node_modules'.
152
+
153
+ This option was added to help people using CircleCI avoid an issue around caching
154
+ and patch file updates (https://github.com/ds300/patch-package/issues/37),
155
+ but might be useful in other contexts too.
156
+
157
+
158
+ 2. Creating patch files
159
+ =======================
160
+
161
+ ${chalk_1.default.bold("patch-package")} <package-name>${chalk_1.default.italic("[ <package-name>]")}
162
+
163
+ When given package names as arguments, patch-package will create patch files
164
+ based on any changes you've made to the versions installed by yarn/npm.
165
+
166
+ Options:
167
+
168
+ ${chalk_1.default.bold("--create-issue")}
169
+
170
+ For packages whose source is hosted on GitHub this option opens a web
171
+ browser with a draft issue based on your diff.
172
+
173
+ ${chalk_1.default.bold("--use-yarn")}
174
+
175
+ By default, patch-package checks whether you use npm, yarn or bun based on
176
+ which lockfile you have. If you have multiple lockfiles, it uses npm by
177
+ default (in cases where npm is not available, it will resort to yarn). Set
178
+ this option to override that default and always use yarn.
179
+
180
+ ${chalk_1.default.bold("--use-bun")}
181
+
182
+ Similar to --use-yarn, but for bun. If both --use-yarn and --use-bun are
183
+ specified, --use-yarn takes precedence.
184
+
185
+ ${chalk_1.default.bold("--exclude <regexp>")}
186
+
187
+ Ignore paths matching the regexp when creating patch files.
188
+ Paths are relative to the root dir of the package to be patched.
189
+
190
+ Default: 'package\\.json$'
191
+
192
+ ${chalk_1.default.bold("--include <regexp>")}
193
+
194
+ Only consider paths matching the regexp when creating patch files.
195
+ Paths are relative to the root dir of the package to be patched.
196
+
197
+ Default '.*'
198
+
199
+ ${chalk_1.default.bold("--case-sensitive-path-filtering")}
200
+
201
+ Make regexps used in --include or --exclude filters case-sensitive.
202
+
203
+ ${chalk_1.default.bold("--patch-dir")}
204
+
205
+ Specify the name for the directory in which to put the patch files.
206
+ `);
207
+ }
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBeUI7QUFDekIsc0RBQTZCO0FBQzdCLHdEQUErQjtBQUUvQixpREFBbUQ7QUFDbkQscURBQWlEO0FBQ2pELDJDQUF1QztBQUN2Qyw2Q0FBeUM7QUFDekMsaUVBQTZEO0FBQzdELGlDQUE2QjtBQUM3QiwrQkFBcUM7QUFDckMsK0JBQStCO0FBQy9CLHFDQUE4QjtBQUM5QixxQ0FBaUM7QUFFakMsTUFBTSxPQUFPLEdBQUcsSUFBQSwrQkFBYyxHQUFFLENBQUE7QUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBQSxrQkFBUSxFQUFDLGlCQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtJQUMzQyxPQUFPLEVBQUU7UUFDUCxVQUFVO1FBQ1YsU0FBUztRQUNULCtCQUErQjtRQUMvQixTQUFTO1FBQ1QsTUFBTTtRQUNOLFNBQVM7UUFDVCxlQUFlO1FBQ2YsZUFBZTtRQUNmLGNBQWM7UUFDZCxTQUFTO1FBQ1QsRUFBRTtLQUNIO0lBQ0QsTUFBTSxFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7Q0FDMUMsQ0FBQyxDQUFBO0FBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUUzQixPQUFPLENBQUMsR0FBRyxDQUNULGVBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO0FBQzNCLDJDQUEyQztBQUMzQyxPQUFPLENBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3BELENBQUE7QUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNCLE9BQU87QUFDVCxDQUFDO0tBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FB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VyxDQUFDOzs7OztNQUt2QixlQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDOzs7Ozs7O01BT2hDLGVBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7Ozs7Ozs7TUFPaEMsZUFBSyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQzs7OztNQUk3QyxlQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQzs7O0NBRzlCLENBQUMsQ0FBQTtBQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCJcclxuaW1wb3J0IHByb2Nlc3MgZnJvbSBcInByb2Nlc3NcIlxyXG5pbXBvcnQgbWluaW1pc3QgZnJvbSBcIm1pbmltaXN0XCJcclxuXHJcbmltcG9ydCB7IGFwcGx5UGF0Y2hlc0ZvckFwcCB9IGZyb20gXCIuL2FwcGx5UGF0Y2hlc1wiXHJcbmltcG9ydCB7IGdldEFwcFJvb3RQYXRoIH0gZnJvbSBcIi4vZ2V0QXBwUm9vdFBhdGhcIlxyXG5pbXBvcnQgeyBtYWtlUGF0Y2ggfSBmcm9tIFwiLi9tYWtlUGF0Y2hcIlxyXG5pbXBvcnQgeyBtYWtlUmVnRXhwIH0gZnJvbSBcIi4vbWFrZVJlZ0V4cFwiXHJcbmltcG9ydCB7IGRldGVjdFBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIi4vZGV0ZWN0UGFja2FnZU1hbmFnZXJcIlxyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIi4vcGF0aFwiXHJcbmltcG9ydCB7IG5vcm1hbGl6ZSwgc2VwIH0gZnJvbSBcInBhdGhcIlxyXG5pbXBvcnQgc2xhc2ggPSByZXF1aXJlKFwic2xhc2hcIilcclxuaW1wb3J0IHsgaXNDSSB9IGZyb20gXCJjaS1pbmZvXCJcclxuaW1wb3J0IHsgcmViYXNlIH0gZnJvbSBcIi4vcmViYXNlXCJcclxuXHJcbmNvbnN0IGFwcFBhdGggPSBnZXRBcHBSb290UGF0aCgpXHJcbmNvbnN0IGFyZ3YgPSBtaW5pbWlzdChwcm9jZXNzLmFyZ3Yuc2xpY2UoMiksIHtcclxuICBib29sZWFuOiBbXHJcbiAgICBcInVzZS15YXJuXCIsXHJcbiAgICBcInVzZS1idW5cIixcclxuICAgIFwiY2FzZS1zZW5zaXRpdmUtcGF0aC1maWx0ZXJpbmdcIixcclxuICAgIFwicmV2ZXJzZVwiLFxyXG4gICAgXCJoZWxwXCIsXHJcbiAgICBcInZlcnNpb25cIixcclxuICAgIFwiZXJyb3Itb24tZmFpbFwiLFxyXG4gICAgXCJlcnJvci1vbi13YXJuXCIsXHJcbiAgICBcImNyZWF0ZS1pc3N1ZVwiLFxyXG4gICAgXCJwYXJ0aWFsXCIsXHJcbiAgICBcIlwiLFxyXG4gIF0sXHJcbiAgc3RyaW5nOiBbXCJwYXRjaC1kaXJcIiwgXCJhcHBlbmRcIiwgXCJyZWJhc2VcIl0sXHJcbn0pXHJcbmNvbnN0IHBhY2thZ2VOYW1lcyA9IGFyZ3YuX1xyXG5cclxuY29uc29sZS5sb2coXHJcbiAgY2hhbGsuYm9sZChcInBhdGNoLXBhY2thZ2VcIiksXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXZhci1yZXF1aXJlc1xyXG4gIHJlcXVpcmUoam9pbihfX2Rpcm5hbWUsIFwiLi4vcGFja2FnZS5qc29uXCIpKS52ZXJzaW9uLFxyXG4pXHJcblxyXG5pZiAoYXJndi52ZXJzaW9uIHx8IGFyZ3Yudikge1xyXG4gIC8vIG5vb3BcclxufSBlbHNlIGlmIChhcmd2LmhlbHAgfHwgYXJndi5oKSB7XHJcbiAgcHJpbnRIZWxwKClcclxufSBlbHNlIHtcclxuICBjb25zdCBwYXRjaERpciA9IHNsYXNoKG5vcm1hbGl6ZSgoYXJndltcInBhdGNoLWRpclwiXSB8fCBcInBhdGNoZXNcIikgKyBzZXApKVxyXG4gIGlmIChwYXRjaERpci5zdGFydHNXaXRoKFwiL1wiKSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiLS1wYXRjaC1kaXIgbXVzdCBiZSBhIHJlbGF0aXZlIHBhdGhcIilcclxuICB9XHJcbiAgaWYgKFwicmViYXNlXCIgaW4gYXJndikge1xyXG4gICAgaWYgKCFhcmd2LnJlYmFzZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBjaGFsay5yZWQoXHJcbiAgICAgICAgICBcIllvdSBtdXN0IHNwZWNpZnkgYSBwYXRjaCBmaWxlIG5hbWUgb3IgbnVtYmVyIHdoZW4gcmViYXNpbmcgcGF0Y2hlc1wiLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgcHJvY2Vzcy5leGl0KDEpXHJcbiAgICB9XHJcbiAgICBpZiAocGFja2FnZU5hbWVzLmxlbmd0aCAhPT0gMSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBjaGFsay5yZWQoXHJcbiAgICAgICAgICBcIllvdSBtdXN0IHNwZWNpZnkgZXhhY3RseSBvbmUgcGFja2FnZSBuYW1lIHdoZW4gcmViYXNpbmcgcGF0Y2hlc1wiLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgcHJvY2Vzcy5leGl0KDEpXHJcbiAgICB9XHJcbiAgICByZWJhc2Uoe1xyXG4gICAgICBhcHBQYXRoLFxyXG4gICAgICBwYWNrYWdlUGF0aFNwZWNpZmllcjogcGFja2FnZU5hbWVzWzBdLFxyXG4gICAgICBwYXRjaERpcixcclxuICAgICAgdGFyZ2V0UGF0Y2g6IGFyZ3YucmViYXNlLFxyXG4gICAgfSlcclxuICB9IGVsc2UgaWYgKHBhY2thZ2VOYW1lcy5sZW5ndGgpIHtcclxuICAgIGNvbnN0IGluY2x1ZGVQYXRocyA9IG1ha2VSZWdFeHAoXHJcbiAgICAgIGFyZ3YuaW5jbHVkZSxcclxuICAgICAgXCJpbmNsdWRlXCIsXHJcbiAgICAgIC8uKi8sXHJcbiAgICAgIGFyZ3ZbXCJjYXNlLXNlbnNpdGl2ZS1wYXRoLWZpbHRlcmluZ1wiXSxcclxuICAgIClcclxuICAgIGNvbnN0IGV4Y2x1ZGVQYXRocyA9IG1ha2VSZWdFeHAoXHJcbiAgICAgIGFyZ3YuZXhjbHVkZSxcclxuICAgICAgXCJleGNsdWRlXCIsXHJcbiAgICAgIC9ecGFja2FnZVxcLmpzb24kLyxcclxuICAgICAgYXJndltcImNhc2Utc2Vuc2l0aXZlLXBhdGgtZmlsdGVyaW5nXCJdLFxyXG4gICAgKVxyXG4gICAgY29uc3QgcGFja2FnZU1hbmFnZXIgPSBkZXRlY3RQYWNrYWdlTWFuYWdlcihcclxuICAgICAgYXBwUGF0aCxcclxuICAgICAgYXJndltcInVzZS15YXJuXCJdID8gXCJ5YXJuXCIgOiBhcmd2W1widXNlLWJ1blwiXSA/IFwiYnVuXCIgOiBudWxsLFxyXG4gICAgKVxyXG4gICAgY29uc3QgY3JlYXRlSXNzdWUgPSBhcmd2W1wiY3JlYXRlLWlzc3VlXCJdXHJcbiAgICBwYWNrYWdlTmFtZXMuZm9yRWFjaCgocGFja2FnZVBhdGhTcGVjaWZpZXI6IHN0cmluZykgPT4ge1xyXG4gICAgICBtYWtlUGF0Y2goe1xyXG4gICAgICAgIHBhY2thZ2VQYXRoU3BlY2lmaWVyLFxyXG4gICAgICAgIGFwcFBhdGgsXHJcbiAgICAgICAgcGFja2FnZU1hbmFnZXIsXHJcbiAgICAgICAgaW5jbHVkZVBhdGhzLFxyXG4gICAgICAgIGV4Y2x1ZGVQYXRocyxcclxuICAgICAgICBwYXRjaERpcixcclxuICAgICAgICBjcmVhdGVJc3N1ZSxcclxuICAgICAgICBtb2RlOlxyXG4gICAgICAgICAgXCJhcHBlbmRcIiBpbiBhcmd2XHJcbiAgICAgICAgICAgID8geyB0eXBlOiBcImFwcGVuZFwiLCBuYW1lOiBhcmd2LmFwcGVuZCB8fCB1bmRlZmluZWQgfVxyXG4gICAgICAgICAgICA6IHsgdHlwZTogXCJvdmVyd3JpdGVfbGFzdFwiIH0sXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIkFwcGx5aW5nIHBhdGNoZXMuLi5cIilcclxuICAgIGNvbnN0IHJldmVyc2UgPSAhIWFyZ3ZbXCJyZXZlcnNlXCJdXHJcbiAgICAvLyBkb24ndCB3YW50IHRvIGV4aXQoMSkgb24gcG9zdGluc3RhbGwgbG9jYWxseS5cclxuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZHMzMDAvcGF0Y2gtcGFja2FnZS9pc3N1ZXMvODZcclxuICAgIGNvbnN0IHNob3VsZEV4aXRXaXRoRXJyb3IgPVxyXG4gICAgICAhIWFyZ3ZbXCJlcnJvci1vbi1mYWlsXCJdIHx8XHJcbiAgICAgIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgJiYgaXNDSSkgfHxcclxuICAgICAgKGlzQ0kgJiYgIXByb2Nlc3MuZW52LlBBVENIX1BBQ0tBR0VfSU5URUdSQVRJT05fVEVTVCkgfHxcclxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiXHJcblxyXG4gICAgY29uc3Qgc2hvdWxkRXhpdFdpdGhXYXJuaW5nID0gISFhcmd2W1wiZXJyb3Itb24td2FyblwiXVxyXG5cclxuICAgIGFwcGx5UGF0Y2hlc0ZvckFwcCh7XHJcbiAgICAgIGFwcFBhdGgsXHJcbiAgICAgIHJldmVyc2UsXHJcbiAgICAgIHBhdGNoRGlyLFxyXG4gICAgICBzaG91bGRFeGl0V2l0aEVycm9yLFxyXG4gICAgICBzaG91bGRFeGl0V2l0aFdhcm5pbmcsXHJcbiAgICAgIGJlc3RFZmZvcnQ6IGFyZ3YucGFydGlhbCxcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcmludEhlbHAoKSB7XHJcbiAgY29uc29sZS5sb2coYFxyXG5Vc2FnZTpcclxuXHJcbiAgMS4gUGF0Y2hpbmcgcGFja2FnZXNcclxuICA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAgICR7Y2hhbGsuYm9sZChcInBhdGNoLXBhY2thZ2VcIil9XHJcblxyXG4gIFdpdGhvdXQgYXJndW1lbnRzLCB0aGUgJHtjaGFsay5ib2xkKFxyXG4gICAgXCJwYXRjaC1wYWNrYWdlXCIsXHJcbiAgKX0gY29tbWFuZCB3aWxsIGF0dGVtcHQgdG8gZmluZCBhbmQgYXBwbHlcclxuICBwYXRjaCBmaWxlcyB0byB5b3VyIHByb2plY3QuIEl0IGxvb2tzIGZvciBmaWxlcyBuYW1lZCBsaWtlXHJcblxyXG4gICAgIC4vcGF0Y2hlcy88cGFja2FnZS1uYW1lPis8dmVyc2lvbj4ucGF0Y2hcclxuXHJcbiAgT3B0aW9uczpcclxuXHJcbiAgICAke2NoYWxrLmJvbGQoXCItLXBhdGNoLWRpciA8ZGlybmFtZT5cIil9XHJcblxyXG4gICAgICBTcGVjaWZ5IHRoZSBuYW1lIGZvciB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBwYXRjaCBmaWxlcyBhcmUgbG9jYXRlZC5cclxuXHJcbiAgICAke2NoYWxrLmJvbGQoXCItLWVycm9yLW9uLWZhaWxcIil9XHJcblxyXG4gICAgICBGb3JjZXMgcGF0Y2gtcGFja2FnZSB0byBleGl0IHdpdGggY29kZSAxIGFmdGVyIGZhaWxpbmcuXHJcblxyXG4gICAgICBXaGVuIHJ1bm5pbmcgbG9jYWxseSBwYXRjaC1wYWNrYWdlIGFsd2F5cyBleGl0cyB3aXRoIDAgYnkgZGVmYXVsdC5cclxuICAgICAgVGhpcyBoYXBwZW5zIGV2ZW4gYWZ0ZXIgZmFpbGluZyB0byBhcHBseSBwYXRjaGVzIGJlY2F1c2Ugb3RoZXJ3aXNlXHJcbiAgICAgIHlhcm4ubG9jayBhbmQgcGFja2FnZS5qc29uIG1pZ2h0IGdldCBvdXQgb2Ygc3luYyB3aXRoIG5vZGVfbW9kdWxlcyxcclxuICAgICAgd2hpY2ggY2FuIGJlIHZlcnkgY29uZnVzaW5nLlxyXG5cclxuICAgICAgLS1lcnJvci1vbi1mYWlsIGlzICR7Y2hhbGsuYm9sZChcInN3aXRjaGVkIG9uXCIpfSBieSBkZWZhdWx0IG9uIENJLlxyXG5cclxuICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kczMwMC9wYXRjaC1wYWNrYWdlL2lzc3Vlcy84NiBmb3IgYmFja2dyb3VuZC5cclxuXHJcbiAgICAke2NoYWxrLmJvbGQoXCItLWVycm9yLW9uLXdhcm5cIil9XHJcblxyXG4gICAgICBGb3JjZXMgcGF0Y2gtcGFja2FnZSB0byBleGl0IHdpdGggY29kZSAxIGFmdGVyIHdhcm5pbmcuXHJcblxyXG4gICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2RzMzAwL3BhdGNoLXBhY2thZ2UvaXNzdWVzLzMxNCBmb3IgYmFja2dyb3VuZC5cclxuXHJcbiAgICAke2NoYWxrLmJvbGQoXCItLXJldmVyc2VcIil9XHJcblxyXG4gICAgICBVbi1hcHBsaWVzIGFsbCBwYXRjaGVzLlxyXG5cclxuICAgICAgTm90ZSB0aGF0IHRoaXMgd2lsbCBmYWlsIGlmIHRoZSBwYXRjaGVkIGZpbGVzIGhhdmUgY2hhbmdlZCBzaW5jZSBiZWluZ1xyXG4gICAgICBwYXRjaGVkLiBJbiB0aGF0IGNhc2UsIHlvdSdsbCBwcm9iYWJseSBuZWVkIHRvIHJlLWluc3RhbGwgJ25vZGVfbW9kdWxlcycuXHJcblxyXG4gICAgICBUaGlzIG9wdGlvbiB3YXMgYWRkZWQgdG8gaGVscCBwZW9wbGUgdXNpbmcgQ2lyY2xlQ0kgYXZvaWQgYW4gaXNzdWUgYXJvdW5kIGNhY2hpbmdcclxuICAgICAgYW5kIHBhdGNoIGZpbGUgdXBkYXRlcyAoaHR0cHM6Ly9naXRodWIuY29tL2RzMzAwL3BhdGNoLXBhY2thZ2UvaXNzdWVzLzM3KSxcclxuICAgICAgYnV0IG1pZ2h0IGJlIHVzZWZ1bCBpbiBvdGhlciBjb250ZXh0cyB0b28uXHJcblxyXG5cclxuICAyLiBDcmVhdGluZyBwYXRjaCBmaWxlc1xyXG4gID09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gICAgJHtjaGFsay5ib2xkKFwicGF0Y2gtcGFja2FnZVwiKX0gPHBhY2thZ2UtbmFtZT4ke2NoYWxrLml0YWxpYyhcclxuICAgICAgXCJbIDxwYWNrYWdlLW5hbWU+XVwiLFxyXG4gICAgKX1cclxuXHJcbiAgV2hlbiBnaXZlbiBwYWNrYWdlIG5hbWVzIGFzIGFyZ3VtZW50cywgcGF0Y2gtcGFja2FnZSB3aWxsIGNyZWF0ZSBwYXRjaCBmaWxlc1xyXG4gIGJhc2VkIG9uIGFueSBjaGFuZ2VzIHlvdSd2ZSBtYWRlIHRvIHRoZSB2ZXJzaW9ucyBpbnN0YWxsZWQgYnkgeWFybi9ucG0uXHJcblxyXG4gIE9wdGlvbnM6XHJcblxyXG4gICAgJHtjaGFsay5ib2xkKFwiLS1jcmVhdGUtaXNzdWVcIil9XHJcblxyXG4gICAgICAgRm9yIHBhY2thZ2VzIHdob3NlIHNvdXJjZSBpcyBob3N0ZWQgb24gR2l0SHViIHRoaXMgb3B0aW9uIG9wZW5zIGEgd2ViXHJcbiAgICAgICBicm93c2VyIHdpdGggYSBkcmFmdCBpc3N1ZSBiYXNlZCBvbiB5b3VyIGRpZmYuXHJcblxyXG4gICAgJHtjaGFsay5ib2xkKFwiLS11c2UteWFyblwiKX1cclxuXHJcbiAgICAgICAgQnkgZGVmYXVsdCwgcGF0Y2gtcGFja2FnZSBjaGVja3Mgd2hldGhlciB5b3UgdXNlIG5wbSwgeWFybiBvciBidW4gYmFzZWQgb25cclxuICAgICAgICB3aGljaCBsb2NrZmlsZSB5b3UgaGF2ZS4gSWYgeW91IGhhdmUgbXVsdGlwbGUgbG9ja2ZpbGVzLCBpdCB1c2VzIG5wbSBieVxyXG4gICAgICAgIGRlZmF1bHQgKGluIGNhc2VzIHdoZXJlIG5wbSBpcyBub3QgYXZhaWxhYmxlLCBpdCB3aWxsIHJlc29ydCB0byB5YXJuKS4gU2V0XHJcbiAgICAgICAgdGhpcyBvcHRpb24gdG8gb3ZlcnJpZGUgdGhhdCBkZWZhdWx0IGFuZCBhbHdheXMgdXNlIHlhcm4uXHJcblxyXG4gICAgJHtjaGFsay5ib2xkKFwiLS11c2UtYnVuXCIpfVxyXG5cclxuICAgICAgICBTaW1pbGFyIHRvIC0tdXNlLXlhcm4sIGJ1dCBmb3IgYnVuLiBJZiBib3RoIC0tdXNlLXlhcm4gYW5kIC0tdXNlLWJ1biBhcmVcclxuICAgICAgICBzcGVjaWZpZWQsIC0tdXNlLXlhcm4gdGFrZXMgcHJlY2VkZW5jZS5cclxuXHJcbiAgICAke2NoYWxrLmJvbGQoXCItLWV4Y2x1ZGUgPHJlZ2V4cD5cIil9XHJcblxyXG4gICAgICAgIElnbm9yZSBwYXRocyBtYXRjaGluZyB0aGUgcmVnZXhwIHdoZW4gY3JlYXRpbmcgcGF0Y2ggZmlsZXMuXHJcbiAgICAgICAgUGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSByb290IGRpciBvZiB0aGUgcGFja2FnZSB0byBiZSBwYXRjaGVkLlxyXG5cclxuICAgICAgICBEZWZhdWx0OiAncGFja2FnZVxcXFwuanNvbiQnXHJcblxyXG4gICAgJHtjaGFsay5ib2xkKFwiLS1pbmNsdWRlIDxyZWdleHA+XCIpfVxyXG5cclxuICAgICAgICBPbmx5IGNvbnNpZGVyIHBhdGhzIG1hdGNoaW5nIHRoZSByZWdleHAgd2hlbiBjcmVhdGluZyBwYXRjaCBmaWxlcy5cclxuICAgICAgICBQYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIHJvb3QgZGlyIG9mIHRoZSBwYWNrYWdlIHRvIGJlIHBhdGNoZWQuXHJcblxyXG4gICAgICAgIERlZmF1bHQgJy4qJ1xyXG5cclxuICAgICR7Y2hhbGsuYm9sZChcIi0tY2FzZS1zZW5zaXRpdmUtcGF0aC1maWx0ZXJpbmdcIil9XHJcblxyXG4gICAgICAgIE1ha2UgcmVnZXhwcyB1c2VkIGluIC0taW5jbHVkZSBvciAtLWV4Y2x1ZGUgZmlsdGVycyBjYXNlLXNlbnNpdGl2ZS5cclxuXHJcbiAgICAke2NoYWxrLmJvbGQoXCItLXBhdGNoLWRpclwiKX1cclxuXHJcbiAgICAgICAgU3BlY2lmeSB0aGUgbmFtZSBmb3IgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0byBwdXQgdGhlIHBhdGNoIGZpbGVzLlxyXG5gKVxyXG59XHJcbiJdfQ==