@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.
- package/CHANGELOG.md +9 -0
- package/LICENSE +19 -0
- package/README.md +422 -0
- package/dist/PackageDetails.js +126 -0
- package/dist/applyPatches.js +414 -0
- package/dist/assertNever.js +7 -0
- package/dist/coerceSemVer.js +11 -0
- package/dist/createIssue.js +115 -0
- package/dist/detectPackageManager.js +98 -0
- package/dist/filterFiles.js +16 -0
- package/dist/getAppRootPath.js +22 -0
- package/dist/getPackageResolution.js +121 -0
- package/dist/getPackageVersion.js +8 -0
- package/dist/hash.js +26 -0
- package/dist/index.js +208 -0
- package/dist/makePatch.js +450 -0
- package/dist/makeRegExp.js +28 -0
- package/dist/packageIsDevDependency.js +14 -0
- package/dist/parseBunLockfile.js +16 -0
- package/dist/patch/apply.js +251 -0
- package/dist/patch/parse.js +335 -0
- package/dist/patch/read.js +48 -0
- package/dist/patch/reverse.js +97 -0
- package/dist/patchFs.js +55 -0
- package/dist/path.js +17 -0
- package/dist/rebase.js +147 -0
- package/dist/resolveRelativeFileDependencies.js +20 -0
- package/dist/spawnSafe.js +28 -0
- package/dist/stateFile.js +71 -0
- package/index.js +3 -0
- package/package.json +102 -0
|
@@ -0,0 +1,450 @@
|
|
|
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.makePatch = makePatch;
|
|
7
|
+
exports.logPatchSequenceError = logPatchSequenceError;
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const console_1 = __importDefault(require("console"));
|
|
10
|
+
const fs_1 = require("fs");
|
|
11
|
+
const fs_extra_1 = require("fs-extra");
|
|
12
|
+
const tmp_1 = require("tmp");
|
|
13
|
+
const zlib_1 = require("zlib");
|
|
14
|
+
const applyPatches_1 = require("./applyPatches");
|
|
15
|
+
const createIssue_1 = require("./createIssue");
|
|
16
|
+
const filterFiles_1 = require("./filterFiles");
|
|
17
|
+
const getPackageResolution_1 = require("./getPackageResolution");
|
|
18
|
+
const getPackageVersion_1 = require("./getPackageVersion");
|
|
19
|
+
const hash_1 = require("./hash");
|
|
20
|
+
const PackageDetails_1 = require("./PackageDetails");
|
|
21
|
+
const parse_1 = require("./patch/parse");
|
|
22
|
+
const patchFs_1 = require("./patchFs");
|
|
23
|
+
const path_1 = require("./path");
|
|
24
|
+
const resolveRelativeFileDependencies_1 = require("./resolveRelativeFileDependencies");
|
|
25
|
+
const spawnSafe_1 = require("./spawnSafe");
|
|
26
|
+
const stateFile_1 = require("./stateFile");
|
|
27
|
+
function printNoPackageFoundError(packageName, packageJsonPath) {
|
|
28
|
+
console_1.default.log(`No such package ${packageName}
|
|
29
|
+
|
|
30
|
+
File not found: ${packageJsonPath}`);
|
|
31
|
+
}
|
|
32
|
+
function makePatch({ packagePathSpecifier, appPath, packageManager, includePaths, excludePaths, patchDir, createIssue, mode, }) {
|
|
33
|
+
const packageDetails = (0, PackageDetails_1.getPatchDetailsFromCliString)(packagePathSpecifier);
|
|
34
|
+
if (!packageDetails) {
|
|
35
|
+
console_1.default.log("No such package", packagePathSpecifier);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const state = (0, stateFile_1.getPatchApplicationState)(packageDetails);
|
|
39
|
+
const isRebasing = state?.isRebasing ?? false;
|
|
40
|
+
// If we are rebasing and no patches have been applied, --append is the only valid option because
|
|
41
|
+
// there are no previous patches to overwrite/update
|
|
42
|
+
if (isRebasing &&
|
|
43
|
+
state?.patches.filter((p) => p.didApply).length === 0 &&
|
|
44
|
+
mode.type === "overwrite_last") {
|
|
45
|
+
mode = { type: "append", name: "initial" };
|
|
46
|
+
}
|
|
47
|
+
if (isRebasing && state) {
|
|
48
|
+
(0, stateFile_1.verifyAppliedPatches)({ appPath, patchDir, state });
|
|
49
|
+
}
|
|
50
|
+
if (mode.type === "overwrite_last" &&
|
|
51
|
+
isRebasing &&
|
|
52
|
+
state?.patches.length === 0) {
|
|
53
|
+
mode = { type: "append", name: "initial" };
|
|
54
|
+
}
|
|
55
|
+
const existingPatches = (0, patchFs_1.getGroupedPatches)(patchDir).pathSpecifierToPatchFiles[packageDetails.pathSpecifier] || [];
|
|
56
|
+
// apply all existing patches if appending
|
|
57
|
+
// otherwise apply all but the last
|
|
58
|
+
const previouslyAppliedPatches = state?.patches.filter((p) => p.didApply);
|
|
59
|
+
const patchesToApplyBeforeDiffing = isRebasing
|
|
60
|
+
? mode.type === "append"
|
|
61
|
+
? existingPatches.slice(0, previouslyAppliedPatches.length)
|
|
62
|
+
: state.patches[state.patches.length - 1].didApply
|
|
63
|
+
? existingPatches.slice(0, previouslyAppliedPatches.length - 1)
|
|
64
|
+
: existingPatches.slice(0, previouslyAppliedPatches.length)
|
|
65
|
+
: mode.type === "append"
|
|
66
|
+
? existingPatches
|
|
67
|
+
: existingPatches.slice(0, -1);
|
|
68
|
+
if (createIssue && mode.type === "append") {
|
|
69
|
+
console_1.default.log("--create-issue is not compatible with --append.");
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
if (createIssue && isRebasing) {
|
|
73
|
+
console_1.default.log("--create-issue is not compatible with rebasing.");
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
const numPatchesAfterCreate = mode.type === "append" || existingPatches.length === 0
|
|
77
|
+
? existingPatches.length + 1
|
|
78
|
+
: existingPatches.length;
|
|
79
|
+
const vcs = (0, createIssue_1.getPackageVCSDetails)(packageDetails);
|
|
80
|
+
const canCreateIssue = !isRebasing &&
|
|
81
|
+
(0, createIssue_1.shouldRecommendIssue)(vcs) &&
|
|
82
|
+
numPatchesAfterCreate === 1 &&
|
|
83
|
+
mode.type !== "append";
|
|
84
|
+
const appPackageJson = require((0, path_1.join)(appPath, "package.json"));
|
|
85
|
+
const packagePath = (0, path_1.join)(appPath, packageDetails.path);
|
|
86
|
+
const packageJsonPath = (0, path_1.join)(packagePath, "package.json");
|
|
87
|
+
if (!(0, fs_extra_1.existsSync)(packageJsonPath)) {
|
|
88
|
+
printNoPackageFoundError(packagePathSpecifier, packageJsonPath);
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
const tmpRepo = (0, tmp_1.dirSync)({ unsafeCleanup: true });
|
|
92
|
+
const tmpRepoPackagePath = (0, path_1.join)(tmpRepo.name, packageDetails.path);
|
|
93
|
+
const tmpRepoNpmRoot = tmpRepoPackagePath.slice(0, -`/node_modules/${packageDetails.name}`.length);
|
|
94
|
+
const tmpRepoPackageJsonPath = (0, path_1.join)(tmpRepoNpmRoot, "package.json");
|
|
95
|
+
try {
|
|
96
|
+
const patchesDir = (0, path_1.resolve)((0, path_1.join)(appPath, patchDir));
|
|
97
|
+
console_1.default.info(chalk_1.default.grey("•"), "Creating temporary folder");
|
|
98
|
+
// make a blank package.json
|
|
99
|
+
(0, fs_extra_1.mkdirpSync)(tmpRepoNpmRoot);
|
|
100
|
+
(0, fs_extra_1.writeFileSync)(tmpRepoPackageJsonPath, JSON.stringify({
|
|
101
|
+
dependencies: {
|
|
102
|
+
[packageDetails.name]: (0, getPackageResolution_1.getPackageResolution)({
|
|
103
|
+
packageDetails,
|
|
104
|
+
packageManager,
|
|
105
|
+
appPath,
|
|
106
|
+
}),
|
|
107
|
+
},
|
|
108
|
+
resolutions: (0, resolveRelativeFileDependencies_1.resolveRelativeFileDependencies)(appPath, appPackageJson.resolutions || {}),
|
|
109
|
+
}));
|
|
110
|
+
const packageVersion = (0, getPackageVersion_1.getPackageVersion)((0, path_1.join)((0, path_1.resolve)(packageDetails.path), "package.json"));
|
|
111
|
+
[".npmrc", ".yarnrc", ".yarn"].forEach((rcFile) => {
|
|
112
|
+
const rcPath = (0, path_1.join)(appPath, rcFile);
|
|
113
|
+
if ((0, fs_extra_1.existsSync)(rcPath)) {
|
|
114
|
+
(0, fs_extra_1.copySync)(rcPath, (0, path_1.join)(tmpRepo.name, rcFile), { dereference: true });
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
if (packageManager === "yarn") {
|
|
118
|
+
console_1.default.info(chalk_1.default.grey("•"), `Installing ${packageDetails.name}@${packageVersion} with yarn`);
|
|
119
|
+
try {
|
|
120
|
+
// try first without ignoring scripts in case they are required
|
|
121
|
+
// this works in 99.99% of cases
|
|
122
|
+
(0, spawnSafe_1.spawnSafeSync)(`yarn`, ["install", "--ignore-engines"], {
|
|
123
|
+
cwd: tmpRepoNpmRoot,
|
|
124
|
+
logStdErrOnError: false,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
// try again while ignoring scripts in case the script depends on
|
|
129
|
+
// an implicit context which we haven't reproduced
|
|
130
|
+
(0, spawnSafe_1.spawnSafeSync)(`yarn`, ["install", "--ignore-engines", "--ignore-scripts"], {
|
|
131
|
+
cwd: tmpRepoNpmRoot,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else if (packageManager === "bun") {
|
|
136
|
+
console_1.default.info(chalk_1.default.grey("•"), `Installing ${packageDetails.name}@${packageVersion} with bun`);
|
|
137
|
+
try {
|
|
138
|
+
(0, spawnSafe_1.spawnSafeSync)(`bun`, ["install"], {
|
|
139
|
+
cwd: tmpRepoNpmRoot,
|
|
140
|
+
logStdErrOnError: false,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
(0, spawnSafe_1.spawnSafeSync)(`bun`, ["install", "--no-save"], {
|
|
145
|
+
cwd: tmpRepoNpmRoot,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
console_1.default.info(chalk_1.default.grey("•"), `Installing ${packageDetails.name}@${packageVersion} with npm`);
|
|
151
|
+
try {
|
|
152
|
+
// try first without ignoring scripts in case they are required
|
|
153
|
+
// this works in 99.99% of cases
|
|
154
|
+
(0, spawnSafe_1.spawnSafeSync)(`npm`, ["i", "--force"], {
|
|
155
|
+
cwd: tmpRepoNpmRoot,
|
|
156
|
+
logStdErrOnError: false,
|
|
157
|
+
stdio: "ignore",
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
// try again while ignoring scripts in case the script depends on
|
|
162
|
+
// an implicit context which we haven't reproduced
|
|
163
|
+
(0, spawnSafe_1.spawnSafeSync)(`npm`, ["i", "--ignore-scripts", "--force"], {
|
|
164
|
+
cwd: tmpRepoNpmRoot,
|
|
165
|
+
stdio: "ignore",
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
const git = (...args) => (0, spawnSafe_1.spawnSafeSync)("git", args, {
|
|
170
|
+
cwd: tmpRepo.name,
|
|
171
|
+
env: { ...process.env, HOME: tmpRepo.name },
|
|
172
|
+
maxBuffer: 1024 * 1024 * 100,
|
|
173
|
+
});
|
|
174
|
+
// remove nested node_modules just to be safe
|
|
175
|
+
(0, fs_extra_1.removeSync)((0, path_1.join)(tmpRepoPackagePath, "node_modules"));
|
|
176
|
+
// remove .git just to be safe
|
|
177
|
+
(0, fs_extra_1.removeSync)((0, path_1.join)(tmpRepoPackagePath, ".git"));
|
|
178
|
+
// remove patch-package state file
|
|
179
|
+
(0, fs_extra_1.removeSync)((0, path_1.join)(tmpRepoPackagePath, stateFile_1.STATE_FILE_NAME));
|
|
180
|
+
// commit the package
|
|
181
|
+
console_1.default.info(chalk_1.default.grey("•"), "Diffing your files with clean files");
|
|
182
|
+
(0, fs_extra_1.writeFileSync)((0, path_1.join)(tmpRepo.name, ".gitignore"), "!/node_modules\n\n");
|
|
183
|
+
git("init");
|
|
184
|
+
git("config", "--local", "user.name", "patch-package");
|
|
185
|
+
git("config", "--local", "user.email", "patch@pack.age");
|
|
186
|
+
// remove ignored files first
|
|
187
|
+
(0, filterFiles_1.removeIgnoredFiles)(tmpRepoPackagePath, includePaths, excludePaths);
|
|
188
|
+
for (const patchDetails of patchesToApplyBeforeDiffing) {
|
|
189
|
+
if (!(0, applyPatches_1.applyPatch)({
|
|
190
|
+
patchDetails,
|
|
191
|
+
patchDir,
|
|
192
|
+
patchFilePath: (0, path_1.join)(appPath, patchDir, patchDetails.patchFilename),
|
|
193
|
+
reverse: false,
|
|
194
|
+
cwd: tmpRepo.name,
|
|
195
|
+
bestEffort: false,
|
|
196
|
+
})) {
|
|
197
|
+
// TODO: add better error message once --rebase is implemented
|
|
198
|
+
console_1.default.log(`Failed to apply patch ${patchDetails.patchFilename} to ${packageDetails.pathSpecifier}`);
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
git("add", "-f", packageDetails.path);
|
|
203
|
+
git("commit", "--allow-empty", "-m", "init");
|
|
204
|
+
// replace package with user's version
|
|
205
|
+
(0, fs_extra_1.removeSync)(tmpRepoPackagePath);
|
|
206
|
+
// pnpm installs packages as symlinks, copySync would copy only the symlink
|
|
207
|
+
(0, fs_extra_1.copySync)((0, fs_extra_1.realpathSync)(packagePath), tmpRepoPackagePath);
|
|
208
|
+
// remove nested node_modules just to be safe
|
|
209
|
+
(0, fs_extra_1.removeSync)((0, path_1.join)(tmpRepoPackagePath, "node_modules"));
|
|
210
|
+
// remove .git just to be safe
|
|
211
|
+
(0, fs_extra_1.removeSync)((0, path_1.join)(tmpRepoPackagePath, ".git"));
|
|
212
|
+
// remove patch-package state file
|
|
213
|
+
(0, fs_extra_1.removeSync)((0, path_1.join)(tmpRepoPackagePath, stateFile_1.STATE_FILE_NAME));
|
|
214
|
+
// also remove ignored files like before
|
|
215
|
+
(0, filterFiles_1.removeIgnoredFiles)(tmpRepoPackagePath, includePaths, excludePaths);
|
|
216
|
+
// stage all files
|
|
217
|
+
git("add", "-f", packageDetails.path);
|
|
218
|
+
// get diff of changes
|
|
219
|
+
const diffResult = git("diff", "--cached", "--no-color", "--ignore-space-at-eol", "--no-ext-diff", "--src-prefix=a/", "--dst-prefix=b/");
|
|
220
|
+
if (diffResult.stdout.length === 0) {
|
|
221
|
+
console_1.default.log(`⁉️ Not creating patch file for package '${packagePathSpecifier}'`);
|
|
222
|
+
console_1.default.log(`⁉️ There don't appear to be any changes.`);
|
|
223
|
+
if (isRebasing && mode.type === "overwrite_last") {
|
|
224
|
+
console_1.default.log("\n💡 To remove a patch file, delete it and then reinstall node_modules from scratch.");
|
|
225
|
+
}
|
|
226
|
+
process.exit(1);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
try {
|
|
230
|
+
(0, parse_1.parsePatchFile)(diffResult.stdout.toString());
|
|
231
|
+
}
|
|
232
|
+
catch (e) {
|
|
233
|
+
if (e.message.includes("Unexpected file mode string: 120000")) {
|
|
234
|
+
console_1.default.log(`
|
|
235
|
+
⛔️ ${chalk_1.default.red.bold("ERROR")}
|
|
236
|
+
|
|
237
|
+
Your changes involve creating symlinks. patch-package does not yet support
|
|
238
|
+
symlinks.
|
|
239
|
+
|
|
240
|
+
️Please use ${chalk_1.default.bold("--include")} and/or ${chalk_1.default.bold("--exclude")} to narrow the scope of your patch if
|
|
241
|
+
this was unintentional.
|
|
242
|
+
`);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
const outPath = "./patch-package-error.json.gz";
|
|
246
|
+
(0, fs_extra_1.writeFileSync)(outPath, (0, zlib_1.gzipSync)(JSON.stringify({
|
|
247
|
+
error: {
|
|
248
|
+
message: e.message,
|
|
249
|
+
stack: e.stack,
|
|
250
|
+
},
|
|
251
|
+
patch: diffResult.stdout.toString(),
|
|
252
|
+
})));
|
|
253
|
+
console_1.default.log(`
|
|
254
|
+
⛔️ ${chalk_1.default.red.bold("ERROR")}
|
|
255
|
+
|
|
256
|
+
patch-package was unable to read the patch-file made by git. This should not
|
|
257
|
+
happen.
|
|
258
|
+
|
|
259
|
+
A diagnostic file was written to
|
|
260
|
+
|
|
261
|
+
${outPath}
|
|
262
|
+
|
|
263
|
+
Please attach it to a github issue
|
|
264
|
+
|
|
265
|
+
https://github.com/ds300/patch-package/issues/new?title=New+patch+parse+failed&body=Please+attach+the+diagnostic+file+by+dragging+it+into+here+🙏
|
|
266
|
+
|
|
267
|
+
Note that this diagnostic file will contain code from the package you were
|
|
268
|
+
attempting to patch.
|
|
269
|
+
|
|
270
|
+
`);
|
|
271
|
+
}
|
|
272
|
+
process.exit(1);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
// maybe delete existing
|
|
276
|
+
if (mode.type === "append" && !isRebasing && existingPatches.length === 1) {
|
|
277
|
+
// if we are appending to an existing patch that doesn't have a sequence number let's rename it
|
|
278
|
+
const prevPatch = existingPatches[0];
|
|
279
|
+
if (prevPatch.sequenceNumber === undefined) {
|
|
280
|
+
const newFileName = createPatchFileName({
|
|
281
|
+
packageDetails,
|
|
282
|
+
packageVersion,
|
|
283
|
+
sequenceNumber: 1,
|
|
284
|
+
sequenceName: prevPatch.sequenceName ?? "initial",
|
|
285
|
+
});
|
|
286
|
+
const oldPath = (0, path_1.join)(appPath, patchDir, prevPatch.patchFilename);
|
|
287
|
+
const newPath = (0, path_1.join)(appPath, patchDir, newFileName);
|
|
288
|
+
(0, fs_1.renameSync)(oldPath, newPath);
|
|
289
|
+
prevPatch.sequenceNumber = 1;
|
|
290
|
+
prevPatch.patchFilename = newFileName;
|
|
291
|
+
prevPatch.sequenceName = prevPatch.sequenceName ?? "initial";
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
const lastPatch = existingPatches[state ? state.patches.length - 1 : existingPatches.length - 1];
|
|
295
|
+
const sequenceName = mode.type === "append" ? mode.name : lastPatch?.sequenceName;
|
|
296
|
+
const sequenceNumber = mode.type === "append"
|
|
297
|
+
? (lastPatch?.sequenceNumber ?? 0) + 1
|
|
298
|
+
: lastPatch?.sequenceNumber;
|
|
299
|
+
const patchFileName = createPatchFileName({
|
|
300
|
+
packageDetails,
|
|
301
|
+
packageVersion,
|
|
302
|
+
sequenceName,
|
|
303
|
+
sequenceNumber,
|
|
304
|
+
});
|
|
305
|
+
const patchPath = (0, path_1.join)(patchesDir, patchFileName);
|
|
306
|
+
if (!(0, fs_extra_1.existsSync)((0, path_1.dirname)(patchPath))) {
|
|
307
|
+
// scoped package
|
|
308
|
+
(0, fs_extra_1.mkdirSync)((0, path_1.dirname)(patchPath));
|
|
309
|
+
}
|
|
310
|
+
// if we are inserting a new patch into a sequence we most likely need to update the sequence numbers
|
|
311
|
+
if (isRebasing && mode.type === "append") {
|
|
312
|
+
const patchesToNudge = existingPatches.slice(state.patches.length);
|
|
313
|
+
if (sequenceNumber === undefined) {
|
|
314
|
+
throw new Error("sequenceNumber is undefined while rebasing");
|
|
315
|
+
}
|
|
316
|
+
if (patchesToNudge[0]?.sequenceNumber !== undefined &&
|
|
317
|
+
patchesToNudge[0].sequenceNumber <= sequenceNumber) {
|
|
318
|
+
let next = sequenceNumber + 1;
|
|
319
|
+
for (const p of patchesToNudge) {
|
|
320
|
+
const newName = createPatchFileName({
|
|
321
|
+
packageDetails,
|
|
322
|
+
packageVersion,
|
|
323
|
+
sequenceName: p.sequenceName,
|
|
324
|
+
sequenceNumber: next++,
|
|
325
|
+
});
|
|
326
|
+
console_1.default.log("Renaming", chalk_1.default.bold(p.patchFilename), "to", chalk_1.default.bold(newName));
|
|
327
|
+
const oldPath = (0, path_1.join)(appPath, patchDir, p.patchFilename);
|
|
328
|
+
const newPath = (0, path_1.join)(appPath, patchDir, newName);
|
|
329
|
+
(0, fs_1.renameSync)(oldPath, newPath);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
(0, fs_extra_1.writeFileSync)(patchPath, diffResult.stdout);
|
|
334
|
+
console_1.default.log(`${chalk_1.default.green("✔")} Created file ${(0, path_1.join)(patchDir, patchFileName)}\n`);
|
|
335
|
+
const prevState = patchesToApplyBeforeDiffing.map((p) => ({
|
|
336
|
+
patchFilename: p.patchFilename,
|
|
337
|
+
didApply: true,
|
|
338
|
+
patchContentHash: (0, hash_1.hashFile)((0, path_1.join)(appPath, patchDir, p.patchFilename)),
|
|
339
|
+
}));
|
|
340
|
+
const nextState = [
|
|
341
|
+
...prevState,
|
|
342
|
+
{
|
|
343
|
+
patchFilename: patchFileName,
|
|
344
|
+
didApply: true,
|
|
345
|
+
patchContentHash: (0, hash_1.hashFile)(patchPath),
|
|
346
|
+
},
|
|
347
|
+
];
|
|
348
|
+
// if any patches come after this one we just made, we should reapply them
|
|
349
|
+
let didFailWhileFinishingRebase = false;
|
|
350
|
+
if (isRebasing) {
|
|
351
|
+
const currentPatches = (0, patchFs_1.getGroupedPatches)((0, path_1.join)(appPath, patchDir))
|
|
352
|
+
.pathSpecifierToPatchFiles[packageDetails.pathSpecifier];
|
|
353
|
+
const previouslyUnappliedPatches = currentPatches.slice(nextState.length);
|
|
354
|
+
if (previouslyUnappliedPatches.length) {
|
|
355
|
+
console_1.default.log(`Fast forwarding...`);
|
|
356
|
+
for (const patch of previouslyUnappliedPatches) {
|
|
357
|
+
const patchFilePath = (0, path_1.join)(appPath, patchDir, patch.patchFilename);
|
|
358
|
+
if (!(0, applyPatches_1.applyPatch)({
|
|
359
|
+
patchDetails: patch,
|
|
360
|
+
patchDir,
|
|
361
|
+
patchFilePath,
|
|
362
|
+
reverse: false,
|
|
363
|
+
cwd: process.cwd(),
|
|
364
|
+
bestEffort: false,
|
|
365
|
+
})) {
|
|
366
|
+
didFailWhileFinishingRebase = true;
|
|
367
|
+
logPatchSequenceError({ patchDetails: patch });
|
|
368
|
+
nextState.push({
|
|
369
|
+
patchFilename: patch.patchFilename,
|
|
370
|
+
didApply: false,
|
|
371
|
+
patchContentHash: (0, hash_1.hashFile)(patchFilePath),
|
|
372
|
+
});
|
|
373
|
+
break;
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
console_1.default.log(` ${chalk_1.default.green("✔")} ${patch.patchFilename}`);
|
|
377
|
+
nextState.push({
|
|
378
|
+
patchFilename: patch.patchFilename,
|
|
379
|
+
didApply: true,
|
|
380
|
+
patchContentHash: (0, hash_1.hashFile)(patchFilePath),
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
if (isRebasing || numPatchesAfterCreate > 1) {
|
|
387
|
+
(0, stateFile_1.savePatchApplicationState)({
|
|
388
|
+
packageDetails,
|
|
389
|
+
patches: nextState,
|
|
390
|
+
isRebasing: didFailWhileFinishingRebase,
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
(0, stateFile_1.clearPatchApplicationState)(packageDetails);
|
|
395
|
+
}
|
|
396
|
+
if (canCreateIssue) {
|
|
397
|
+
if (createIssue) {
|
|
398
|
+
(0, createIssue_1.openIssueCreationLink)({
|
|
399
|
+
packageDetails,
|
|
400
|
+
patchFileContents: diffResult.stdout.toString(),
|
|
401
|
+
packageVersion,
|
|
402
|
+
patchPath,
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
(0, createIssue_1.maybePrintIssueCreationPrompt)(vcs, packageDetails, packageManager);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
catch (e) {
|
|
411
|
+
console_1.default.log(e);
|
|
412
|
+
throw e;
|
|
413
|
+
}
|
|
414
|
+
finally {
|
|
415
|
+
tmpRepo.removeCallback();
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
function createPatchFileName({ packageDetails, packageVersion, sequenceNumber, sequenceName, }) {
|
|
419
|
+
const packageNames = packageDetails.packageNames
|
|
420
|
+
.map((name) => name.replace(/\//g, "+"))
|
|
421
|
+
.join("++");
|
|
422
|
+
const nameAndVersion = `${packageNames}+${packageVersion}`;
|
|
423
|
+
const num = sequenceNumber === undefined
|
|
424
|
+
? ""
|
|
425
|
+
: `+${sequenceNumber.toString().padStart(3, "0")}`;
|
|
426
|
+
const name = !sequenceName ? "" : `+${sequenceName}`;
|
|
427
|
+
return `${nameAndVersion}${num}${name}.patch`;
|
|
428
|
+
}
|
|
429
|
+
function logPatchSequenceError({ patchDetails, }) {
|
|
430
|
+
console_1.default.log(`
|
|
431
|
+
${chalk_1.default.red.bold("⛔ ERROR")}
|
|
432
|
+
|
|
433
|
+
Failed to apply patch file ${chalk_1.default.bold(patchDetails.patchFilename)}.
|
|
434
|
+
|
|
435
|
+
If this patch file is no longer useful, delete it and run
|
|
436
|
+
|
|
437
|
+
${chalk_1.default.bold(`patch-package`)}
|
|
438
|
+
|
|
439
|
+
To partially apply the patch (if possible) and output a log of errors to fix, run
|
|
440
|
+
|
|
441
|
+
${chalk_1.default.bold(`patch-package --partial`)}
|
|
442
|
+
|
|
443
|
+
After which you should make any required changes inside ${patchDetails.path}, and finally run
|
|
444
|
+
|
|
445
|
+
${chalk_1.default.bold(`patch-package ${patchDetails.pathSpecifier}`)}
|
|
446
|
+
|
|
447
|
+
to update the patch file.
|
|
448
|
+
`);
|
|
449
|
+
}
|
|
450
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZVBhdGNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21ha2VQYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXdEQSw4QkFrZ0JDO0FBMkJELHNEQTBCQztBQS9tQkQsa0RBQXlCO0FBQ3pCLHNEQUE2QjtBQUM3QiwyQkFBK0I7QUFDL0IsdUNBUWlCO0FBQ2pCLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFDL0IsaURBQTJDO0FBQzNDLCtDQUtzQjtBQUV0QiwrQ0FBa0Q7QUFDbEQsaUVBQTZEO0FBQzdELDJEQUF1RDtBQUN2RCxpQ0FBaUM7QUFDakMscURBSXlCO0FBQ3pCLHlDQUE4QztBQUM5Qyx1Q0FBNkM7QUFDN0MsaUNBQStDO0FBQy9DLHVGQUFtRjtBQUNuRiwyQ0FBMkM7QUFDM0MsMkNBT29CO0FBRXBCLFNBQVMsd0JBQXdCLENBQy9CLFdBQW1CLEVBQ25CLGVBQXVCO0lBRXZCLGlCQUFPLENBQUMsR0FBRyxDQUNULG1CQUFtQixXQUFXOztvQkFFZCxlQUFlLEVBQUUsQ0FDbEMsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFnQixTQUFTLENBQUMsRUFDeEIsb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxjQUFjLEVBQ2QsWUFBWSxFQUNaLFlBQVksRUFDWixRQUFRLEVBQ1IsV0FBVyxFQUNYLElBQUksR0FVTDtJQUNDLE1BQU0sY0FBYyxHQUFHLElBQUEsNkNBQTRCLEVBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUV6RSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsaUJBQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQTtRQUNwRCxPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLElBQUEsb0NBQXdCLEVBQUMsY0FBYyxDQUFDLENBQUE7SUFDdEQsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLFVBQVUsSUFBSSxLQUFLLENBQUE7SUFFN0MsaUdBQWlHO0lBQ2pH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LEdBR2I7SUFDQyxpQkFBTyxDQUFDLEdBQUcsQ0FBQztFQUNaLGVBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzs7NkJBRUUsZUFBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDOzs7O0lBSS9ELGVBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDOzs7O0lBSTNCLGVBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUM7OzBEQUdyQyxZQUFZLENBQUMsSUFDZjs7SUFFRSxlQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7OztDQUc1RCxDQUFDLENBQUE7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiXHJcbmltcG9ydCBjb25zb2xlIGZyb20gXCJjb25zb2xlXCJcclxuaW1wb3J0IHsgcmVuYW1lU3luYyB9IGZyb20gXCJmc1wiXHJcbmltcG9ydCB7XHJcbiAgY29weVN5bmMsXHJcbiAgZXhpc3RzU3luYyxcclxuICBta2RpcnBTeW5jLFxyXG4gIG1rZGlyU3luYyxcclxuICByZWFscGF0aFN5bmMsXHJcbiAgcmVtb3ZlU3luYyxcclxuICB3cml0ZUZpbGVTeW5jLFxyXG59IGZyb20gXCJmcy1leHRyYVwiXHJcbmltcG9ydCB7IGRpclN5bmMgfSBmcm9tIFwidG1wXCJcclxuaW1wb3J0IHsgZ3ppcFN5bmMgfSBmcm9tIFwiemxpYlwiXHJcbmltcG9ydCB7IGFwcGx5UGF0Y2ggfSBmcm9tIFwiLi9hcHBseVBhdGNoZXNcIlxyXG5pbXBvcnQge1xyXG4gIGdldFBhY2thZ2VWQ1NEZXRhaWxzLFxyXG4gIG1heWJlUHJpbnRJc3N1ZUNyZWF0aW9uUHJvbXB0LFxyXG4gIG9wZW5Jc3N1ZUNyZWF0aW9uTGluayxcclxuICBzaG91bGRSZWNvbW1lbmRJc3N1ZSxcclxufSBmcm9tIFwiLi9jcmVhdGVJc3N1ZVwiXHJcbmltcG9ydCB7IFBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIi4vZGV0ZWN0UGFja2FnZU1hbmFnZXJcIlxyXG5pbXBvcnQgeyByZW1vdmVJZ25vcmVkRmlsZXMgfSBmcm9tIFwiLi9maWx0ZXJGaWxlc1wiXHJcbmltcG9ydCB7IGdldFBhY2thZ2VSZXNvbHV0aW9uIH0gZnJvbSBcIi4vZ2V0UGFja2FnZVJlc29sdXRpb25cIlxyXG5pbXBvcnQgeyBnZXRQYWNrYWdlVmVyc2lvbiB9IGZyb20gXCIuL2dldFBhY2thZ2VWZXJzaW9uXCJcclxuaW1wb3J0IHsgaGFzaEZpbGUgfSBmcm9tIFwiLi9oYXNoXCJcclxuaW1wb3J0IHtcclxuICBnZXRQYXRjaERldGFpbHNGcm9tQ2xpU3RyaW5nLFxyXG4gIFBhY2thZ2VEZXRhaWxzLFxyXG4gIFBhdGNoZWRQYWNrYWdlRGV0YWlscyxcclxufSBmcm9tIFwiLi9QYWNrYWdlRGV0YWlsc1wiXHJcbmltcG9ydCB7IHBhcnNlUGF0Y2hGaWxlIH0gZnJvbSBcIi4vcGF0Y2gvcGFyc2VcIlxyXG5pbXBvcnQgeyBnZXRHcm91cGVkUGF0Y2hlcyB9IGZyb20gXCIuL3BhdGNoRnNcIlxyXG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcIi4vcGF0aFwiXHJcbmltcG9ydCB7IHJlc29sdmVSZWxhdGl2ZUZpbGVEZXBlbmRlbmNpZXMgfSBmcm9tIFwiLi9yZXNvbHZlUmVsYXRpdmVGaWxlRGVwZW5kZW5jaWVzXCJcclxuaW1wb3J0IHsgc3Bhd25TYWZlU3luYyB9IGZyb20gXCIuL3NwYXduU2FmZVwiXHJcbmltcG9ydCB7XHJcbiAgY2xlYXJQYXRjaEFwcGxpY2F0aW9uU3RhdGUsXHJcbiAgZ2V0UGF0Y2hBcHBsaWNhdGlvblN0YXRlLFxyXG4gIFBhdGNoU3RhdGUsXHJcbiAgc2F2ZVBhdGNoQXBwbGljYXRpb25TdGF0ZSxcclxuICBTVEFURV9GSUxFX05BTUUsXHJcbiAgdmVyaWZ5QXBwbGllZFBhdGNoZXMsXHJcbn0gZnJvbSBcIi4vc3RhdGVGaWxlXCJcclxuXHJcbmZ1bmN0aW9uIHByaW50Tm9QYWNrYWdlRm91bmRFcnJvcihcclxuICBwYWNrYWdlTmFtZTogc3RyaW5nLFxyXG4gIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nLFxyXG4pIHtcclxuICBjb25zb2xlLmxvZyhcclxuICAgIGBObyBzdWNoIHBhY2thZ2UgJHtwYWNrYWdlTmFtZX1cclxuXHJcbiAgRmlsZSBub3QgZm91bmQ6ICR7cGFja2FnZUpzb25QYXRofWAsXHJcbiAgKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFrZVBhdGNoKHtcclxuICBwYWNrYWdlUGF0aFNwZWNpZmllcixcclxuICBhcHBQYXRoLFxyXG4gIHBhY2thZ2VNYW5hZ2VyLFxyXG4gIGluY2x1ZGVQYXRocyxcclxuICBleGNsdWRlUGF0aHMsXHJcbiAgcGF0Y2hEaXIsXHJcbiAgY3JlYXRlSXNzdWUsXHJcbiAgbW9kZSxcclxufToge1xyXG4gIHBhY2thZ2VQYXRoU3BlY2lmaWVyOiBzdHJpbmdcclxuICBhcHBQYXRoOiBzdHJpbmdcclxuICBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXJcclxuICBpbmNsdWRlUGF0aHM6IFJlZ0V4cFxyXG4gIGV4Y2x1ZGVQYXRoczogUmVnRXhwXHJcbiAgcGF0Y2hEaXI6IHN0cmluZ1xyXG4gIGNyZWF0ZUlzc3VlOiBib29sZWFuXHJcbiAgbW9kZTogeyB0eXBlOiBcIm92ZXJ3cml0ZV9sYXN0XCIgfSB8IHsgdHlwZTogXCJhcHBlbmRcIjsgbmFtZT86IHN0cmluZyB9XHJcbn0pIHtcclxuICBjb25zdCBwYWNrYWdlRGV0YWlscyA9IGdldFBhdGNoRGV0YWlsc0Zyb21DbGlTdHJpbmcocGFja2FnZVBhdGhTcGVjaWZpZXIpXHJcblxyXG4gIGlmICghcGFja2FnZURldGFpbHMpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiTm8gc3VjaCBwYWNrYWdlXCIsIHBhY2thZ2VQYXRoU3BlY2lmaWVyKVxyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICBjb25zdCBzdGF0ZSA9IGdldFBhdGNoQXBwbGljYXRpb25TdGF0ZShwYWNrYWdlRGV0YWlscylcclxuICBjb25zdCBpc1JlYmFzaW5nID0gc3RhdGU/LmlzUmViYXNpbmcgPz8gZmFsc2VcclxuXHJcbiAgLy8gSWYgd2UgYXJlIHJlYmFzaW5nIGFuZCBubyBwYXRjaGVzIGhhdmUgYmVlbiBhcHBsaWVkLCAtLWFwcGVuZCBpcyB0aGUgb25seSB2YWxpZCBvcHRpb24gYmVjYXVzZVxyXG4gIC8vIHRoZXJlIGFyZSBubyBwcmV2aW91cyBwYXRjaGVzIHRvIG92ZXJ3cml0ZS91cGRhdGVcclxuICBpZiAoXHJcbiAgICBpc1JlYmFzaW5nICYmXHJcbiAgICBzdGF0ZT8ucGF0Y2hlcy5maWx0ZXIoKHApID0+IHAuZGlkQXBwbHkpLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgbW9kZS50eXBlID09PSBcIm92ZXJ3cml0ZV9sYXN0XCJcclxuICApIHtcclxuICAgIG1vZGUgPSB7IHR5cGU6IFwiYXBwZW5kXCIsIG5hbWU6IFwiaW5pdGlhbFwiIH1cclxuICB9XHJcblxyXG4gIGlmIChpc1JlYmFzaW5nICYmIHN0YXRlKSB7XHJcbiAgICB2ZXJpZnlBcHBsaWVkUGF0Y2hlcyh7IGFwcFBhdGgsIHBhdGNoRGlyLCBzdGF0ZSB9KVxyXG4gIH1cclxuXHJcbiAgaWYgKFxyXG4gICAgbW9kZS50eXBlID09PSBcIm92ZXJ3cml0ZV9sYXN0XCIgJiZcclxuICAgIGlzUmViYXNpbmcgJiZcclxuICAgIHN0YXRlPy5wYXRjaGVzLmxlbmd0aCA9PT0gMFxyXG4gICkge1xyXG4gICAgbW9kZSA9IHsgdHlwZTogXCJhcHBlbmRcIiwgbmFtZTogXCJpbml0aWFsXCIgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgZXhpc3RpbmdQYXRjaGVzID1cclxuICAgIGdldEdyb3VwZWRQYXRjaGVzKHBhdGNoRGlyKS5wYXRoU3BlY2lmaWVyVG9QYXRjaEZpbGVzW1xyXG4gICAgICBwYWNrYWdlRGV0YWlscy5wYXRoU3BlY2lmaWVyXHJcbiAgICBdIHx8IFtdXHJcblxyXG4gIC8vIGFwcGx5IGFsbCBleGlzdGluZyBwYXRjaGVzIGlmIGFwcGVuZGluZ1xyXG4gIC8vIG90aGVyd2lzZSBhcHBseSBhbGwgYnV0IHRoZSBsYXN0XHJcbiAgY29uc3QgcHJldmlvdXNseUFwcGxpZWRQYXRjaGVzID0gc3RhdGU/LnBhdGNoZXMuZmlsdGVyKChwKSA9PiBwLmRpZEFwcGx5KVxyXG4gIGNvbnN0IHBhdGNoZXNUb0FwcGx5QmVmb3JlRGlmZmluZzogUGF0Y2hlZFBhY2thZ2VEZXRhaWxzW10gPSBpc1JlYmFzaW5nXHJcbiAgICA/IG1vZGUudHlwZSA9PT0gXCJhcHBlbmRcIlxyXG4gICAgICA/IGV4aXN0aW5nUGF0Y2hlcy5zbGljZSgwLCBwcmV2aW91c2x5QXBwbGllZFBhdGNoZXMhLmxlbmd0aClcclxuICAgICAgOiBzdGF0ZSEucGF0Y2hlc1tzdGF0ZSEucGF0Y2hlcy5sZW5ndGggLSAxXS5kaWRBcHBseVxyXG4gICAgICAgID8gZXhpc3RpbmdQYXRjaGVzLnNsaWNlKDAsIHByZXZpb3VzbHlBcHBsaWVkUGF0Y2hlcyEubGVuZ3RoIC0gMSlcclxuICAgICAgICA6IGV4aXN0aW5nUGF0Y2hlcy5zbGljZSgwLCBwcmV2aW91c2x5QXBwbGllZFBhdGNoZXMhLmxlbmd0aClcclxuICAgIDogbW9kZS50eXBlID09PSBcImFwcGVuZFwiXHJcbiAgICAgID8gZXhpc3RpbmdQYXRjaGVzXHJcbiAgICAgIDogZXhpc3RpbmdQYXRjaGVzLnNsaWNlKDAsIC0xKVxyXG5cclxuICBpZiAoY3JlYXRlSXNzdWUgJiYgbW9kZS50eXBlID09PSBcImFwcGVuZFwiKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIi0tY3JlYXRlLWlzc3VlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggLS1hcHBlbmQuXCIpXHJcbiAgICBwcm9jZXNzLmV4aXQoMSlcclxuICB9XHJcblxyXG4gIGlmIChjcmVhdGVJc3N1ZSAmJiBpc1JlYmFzaW5nKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIi0tY3JlYXRlLWlzc3VlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggcmViYXNpbmcuXCIpXHJcbiAgICBwcm9jZXNzLmV4aXQoMSlcclxuICB9XHJcblxyXG4gIGNvbnN0IG51bVBhdGNoZXNBZnRlckNyZWF0ZSA9XHJcbiAgICBtb2RlLnR5cGUgPT09IFwiYXBwZW5kXCIgfHwgZXhpc3RpbmdQYXRjaGVzLmxlbmd0aCA9PT0gMFxyXG4gICAgICA/IGV4aXN0aW5nUGF0Y2hlcy5sZW5ndGggKyAxXHJcbiAgICAgIDogZXhpc3RpbmdQYXRjaGVzLmxlbmd0aFxyXG4gIGNvbnN0IHZjcyA9IGdldFBhY2thZ2VWQ1NEZXRhaWxzKHBhY2thZ2VEZXRhaWxzKVxyXG4gIGNvbnN0IGNhbkNyZWF0ZUlzc3VlID1cclxuICAgICFpc1JlYmFzaW5nICYmXHJcbiAgICBzaG91bGRSZWNvbW1lbmRJc3N1ZSh2Y3MpICYmXHJcbiAgICBudW1QYXRjaGVzQWZ0ZXJDcmVhdGUgPT09IDEgJiZcclxuICAgIG1vZGUudHlwZSAhPT0gXCJhcHBlbmRcIlxyXG5cclxuICBjb25zdCBhcHBQYWNrYWdlSnNvbiA9IHJlcXVpcmUoam9pbihhcHBQYXRoLCBcInBhY2thZ2UuanNvblwiKSlcclxuICBjb25zdCBwYWNrYWdlUGF0aCA9IGpvaW4oYXBwUGF0aCwgcGFja2FnZURldGFpbHMucGF0aClcclxuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBqb2luKHBhY2thZ2VQYXRoLCBcInBhY2thZ2UuanNvblwiKVxyXG5cclxuICBpZiAoIWV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkge1xyXG4gICAgcHJpbnROb1BhY2thZ2VGb3VuZEVycm9yKHBhY2thZ2VQYXRoU3BlY2lmaWVyLCBwYWNrYWdlSnNvblBhdGgpXHJcbiAgICBwcm9jZXNzLmV4aXQoMSlcclxuICB9XHJcblxyXG4gIGNvbnN0IHRtcFJlcG8gPSBkaXJTeW5jKHsgdW5zYWZlQ2xlYW51cDogdHJ1ZSB9KVxyXG4gIGNvbnN0IHRtcFJlcG9QYWNrYWdlUGF0aCA9IGpvaW4odG1wUmVwby5uYW1lLCBwYWNrYWdlRGV0YWlscy5wYXRoKVxyXG4gIGNvbnN0IHRtcFJlcG9OcG1Sb290ID0gdG1wUmVwb1BhY2thZ2VQYXRoLnNsaWNlKFxyXG4gICAgMCxcclxuICAgIC1gL25vZGVfbW9kdWxlcy8ke3BhY2thZ2VEZXRhaWxzLm5hbWV9YC5sZW5ndGgsXHJcbiAgKVxyXG5cclxuICBjb25zdCB0bXBSZXBvUGFja2FnZUpzb25QYXRoID0gam9pbih0bXBSZXBvTnBtUm9vdCwgXCJwYWNrYWdlLmpzb25cIilcclxuXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IHBhdGNoZXNEaXIgPSByZXNvbHZlKGpvaW4oYXBwUGF0aCwgcGF0Y2hEaXIpKVxyXG5cclxuICAgIGNvbnNvbGUuaW5mbyhjaGFsay5ncmV5KFwi4oCiXCIpLCBcIkNyZWF0aW5nIHRlbXBvcmFyeSBmb2xkZXJcIilcclxuXHJcbiAgICAvLyBtYWtlIGEgYmxhbmsgcGFja2FnZS5qc29uXHJcbiAgICBta2RpcnBTeW5jKHRtcFJlcG9OcG1Sb290KVxyXG4gICAgd3JpdGVGaWxlU3luYyhcclxuICAgICAgdG1wUmVwb1BhY2thZ2VKc29uUGF0aCxcclxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgIGRlcGVuZGVuY2llczoge1xyXG4gICAgICAgICAgW3BhY2thZ2VEZXRhaWxzLm5hbWVdOiBnZXRQYWNrYWdlUmVzb2x1dGlvbih7XHJcbiAgICAgICAgICAgIHBhY2thZ2VEZXRhaWxzLFxyXG4gICAgICAgICAgICBwYWNrYWdlTWFuYWdlcixcclxuICAgICAgICAgICAgYXBwUGF0aCxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVzb2x1dGlvbnM6IHJlc29sdmVSZWxhdGl2ZUZpbGVEZXBlbmRlbmNpZXMoXHJcbiAgICAgICAgICBhcHBQYXRoLFxyXG4gICAgICAgICAgYXBwUGFja2FnZUpzb24ucmVzb2x1dGlvbnMgfHwge30sXHJcbiAgICAgICAgKSxcclxuICAgICAgfSksXHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgcGFja2FnZVZlcnNpb24gPSBnZXRQYWNrYWdlVmVyc2lvbihcclxuICAgICAgam9pbihyZXNvbHZlKHBhY2thZ2VEZXRhaWxzLnBhdGgpLCBcInBhY2thZ2UuanNvblwiKSxcclxuICAgIClcclxuXHJcbiAgICAvLyBjb3B5IC5ucG1yYy8ueWFybnJjIGluIGNhc2UgcGFja2FnZXMgYXJlIGhvc3RlZCBpbiBwcml2YXRlIHJlZ2lzdHJ5XHJcbiAgICAvLyBjb3B5IC55YXJuIGRpcmVjdG9yeSBhcyB3ZWxsIHRvIGVuc3VyZSBpbnN0YWxsYXRpb25zIHdvcmsgaW4geWFybiAyXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6YWxpZ25cclxuICAgIDtbXCIubnBtcmNcIiwgXCIueWFybnJjXCIsIFwiLnlhcm5cIl0uZm9yRWFjaCgocmNGaWxlKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJjUGF0aCA9IGpvaW4oYXBwUGF0aCwgcmNGaWxlKVxyXG4gICAgICBpZiAoZXhpc3RzU3luYyhyY1BhdGgpKSB7XHJcbiAgICAgICAgY29weVN5bmMocmNQYXRoLCBqb2luKHRtcFJlcG8ubmFtZSwgcmNGaWxlKSwgeyBkZXJlZmVyZW5jZTogdHJ1ZSB9KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGlmIChwYWNrYWdlTWFuYWdlciA9PT0gXCJ5YXJuXCIpIHtcclxuICAgICAgY29uc29sZS5pbmZvKFxyXG4gICAgICAgIGNoYWxrLmdyZXkoXCLigKJcIiksXHJcbiAgICAgICAgYEluc3RhbGxpbmcgJHtwYWNrYWdlRGV0YWlscy5uYW1lfUAke3BhY2thZ2VWZXJzaW9ufSB3aXRoIHlhcm5gLFxyXG4gICAgICApXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gdHJ5IGZpcnN0IHdpdGhvdXQgaWdub3Jpbmcgc2NyaXB0cyBpbiBjYXNlIHRoZXkgYXJlIHJlcXVpcmVkXHJcbiAgICAgICAgLy8gdGhpcyB3b3JrcyBpbiA5OS45OSUgb2YgY2FzZXNcclxuICAgICAgICBzcGF3blNhZmVTeW5jKGB5YXJuYCwgW1wiaW5zdGFsbFwiLCBcIi0taWdub3JlLWVuZ2luZXNcIl0sIHtcclxuICAgICAgICAgIGN3ZDogdG1wUmVwb05wbVJvb3QsXHJcbiAgICAgICAgICBsb2dTdGRFcnJPbkVycm9yOiBmYWxzZSxcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgLy8gdHJ5IGFnYWluIHdoaWxlIGlnbm9yaW5nIHNjcmlwdHMgaW4gY2FzZSB0aGUgc2NyaXB0IGRlcGVuZHMgb25cclxuICAgICAgICAvLyBhbiBpbXBsaWNpdCBjb250ZXh0IHdoaWNoIHdlIGhhdmVuJ3QgcmVwcm9kdWNlZFxyXG4gICAgICAgIHNwYXduU2FmZVN5bmMoXHJcbiAgICAgICAgICBgeWFybmAsXHJcbiAgICAgICAgICBbXCJpbnN0YWxsXCIsIFwiLS1pZ25vcmUtZW5naW5lc1wiLCBcIi0taWdub3JlLXNjcmlwdHNcIl0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGN3ZDogdG1wUmVwb05wbVJvb3QsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChwYWNrYWdlTWFuYWdlciA9PT0gXCJidW5cIikge1xyXG4gICAgICBjb25zb2xlLmluZm8oXHJcbiAgICAgICAgY2hhbGsuZ3JleShcIuKAolwiKSxcclxuICAgICAgICBgSW5zdGFsbGluZyAke3BhY2thZ2VEZXRhaWxzLm5hbWV9QCR7cGFja2FnZVZlcnNpb259IHdpdGggYnVuYCxcclxuICAgICAgKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHNwYXduU2FmZVN5bmMoYGJ1bmAsIFtcImluc3RhbGxcIl0sIHtcclxuICAgICAgICAgIGN3ZDogdG1wUmVwb05wbVJvb3QsXHJcbiAgICAgICAgICBsb2dTdGRFcnJPbkVycm9yOiBmYWxzZSxcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgc3Bhd25TYWZlU3luYyhgYnVuYCwgW1wiaW5zdGFsbFwiLCBcIi0tbm8tc2F2ZVwiXSwge1xyXG4gICAgICAgICAgY3dkOiB0bXBSZXBvTnBtUm9vdCxcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmluZm8oXHJcbiAgICAgICAgY2hhbGsuZ3JleShcIuKAolwiKSxcclxuICAgICAgICBgSW5zdGFsbGluZyAke3BhY2thZ2VEZXRhaWxzLm5hbWV9QCR7cGFja2FnZVZlcnNpb259IHdpdGggbnBtYCxcclxuICAgICAgKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIHRyeSBmaXJzdCB3aXRob3V0IGlnbm9yaW5nIHNjcmlwdHMgaW4gY2FzZSB0aGV5IGFyZSByZXF1aXJlZFxyXG4gICAgICAgIC8vIHRoaXMgd29ya3MgaW4gOTkuOTklIG9mIGNhc2VzXHJcbiAgICAgICAgc3Bhd25TYWZlU3luYyhgbnBtYCwgW1wiaVwiLCBcIi0tZm9yY2VcIl0sIHtcclxuICAgICAgICAgIGN3ZDogdG1wUmVwb05wbVJvb3QsXHJcbiAgICAgICAgICBsb2dTdGRFcnJPbkVycm9yOiBmYWxzZSxcclxuICAgICAgICAgIHN0ZGlvOiBcImlnbm9yZVwiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvLyB0cnkgYWdhaW4gd2hpbGUgaWdub3Jpbmcgc2NyaXB0cyBpbiBjYXNlIHRoZSBzY3JpcHQgZGVwZW5kcyBvblxyXG4gICAgICAgIC8vIGFuIGltcGxpY2l0IGNvbnRleHQgd2hpY2ggd2UgaGF2ZW4ndCByZXByb2R1Y2VkXHJcbiAgICAgICAgc3Bhd25TYWZlU3luYyhgbnBtYCwgW1wiaVwiLCBcIi0taWdub3JlLXNjcmlwdHNcIiwgXCItLWZvcmNlXCJdLCB7XHJcbiAgICAgICAgICBjd2Q6IHRtcFJlcG9OcG1Sb290LFxyXG4gICAgICAgICAgc3RkaW86IFwiaWdub3JlXCIsXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdpdCA9ICguLi5hcmdzOiBzdHJpbmdbXSkgPT5cclxuICAgICAgc3Bhd25TYWZlU3luYyhcImdpdFwiLCBhcmdzLCB7XHJcbiAgICAgICAgY3dkOiB0bXBSZXBvLm5hbWUsXHJcbiAgICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCBIT01FOiB0bXBSZXBvLm5hbWUgfSxcclxuICAgICAgICBtYXhCdWZmZXI6IDEwMjQgKiAxMDI0ICogMTAwLFxyXG4gICAgICB9KVxyXG5cclxuICAgIC8vIHJlbW92ZSBuZXN0ZWQgbm9kZV9tb2R1bGVzIGp1c3QgdG8gYmUgc2FmZVxyXG4gICAgcmVtb3ZlU3luYyhqb2luKHRtcFJlcG9QYWNrYWdlUGF0aCwgXCJub2RlX21vZHVsZXNcIikpXHJcbiAgICAvLyByZW1vdmUgLmdpdCBqdXN0IHRvIGJlIHNhZmVcclxuICAgIHJlbW92ZVN5bmMoam9pbih0bXBSZXBvUGFja2FnZVBhdGgsIFwiLmdpdFwiKSlcclxuICAgIC8vIHJlbW92ZSBwYXRjaC1wYWNrYWdlIHN0YXRlIGZpbGVcclxuICAgIHJlbW92ZVN5bmMoam9pbih0bXBSZXBvUGFja2FnZVBhdGgsIFNUQVRFX0ZJTEVfTkFNRSkpXHJcblxyXG4gICAgLy8gY29tbWl0IHRoZSBwYWNrYWdlXHJcbiAgICBjb25zb2xlLmluZm8oY2hhbGsuZ3JleShcIuKAolwiKSwgXCJEaWZmaW5nIHlvdXIgZmlsZXMgd2l0aCBjbGVhbiBmaWxlc1wiKVxyXG4gICAgd3JpdGVGaWxlU3luYyhqb2luKHRtcFJlcG8ubmFtZSwgXCIuZ2l0aWdub3JlXCIpLCBcIiEvbm9kZV9tb2R1bGVzXFxuXFxuXCIpXHJcbiAgICBnaXQoXCJpbml0XCIpXHJcbiAgICBnaXQoXCJjb25maWdcIiwgXCItLWxvY2FsXCIsIFwidXNlci5uYW1lXCIsIFwicGF0Y2gtcGFja2FnZVwiKVxyXG4gICAgZ2l0KFwiY29uZmlnXCIsIFwiLS1sb2NhbFwiLCBcInVzZXIuZW1haWxcIiwgXCJwYXRjaEBwYWNrLmFnZVwiKVxyXG5cclxuICAgIC8vIHJlbW92ZSBpZ25vcmVkIGZpbGVzIGZpcnN0XHJcbiAgICByZW1vdmVJZ25vcmVkRmlsZXModG1wUmVwb1BhY2thZ2VQYXRoLCBpbmNsdWRlUGF0aHMsIGV4Y2x1ZGVQYXRocylcclxuXHJcbiAgICBmb3IgKGNvbnN0IHBhdGNoRGV0YWlscyBvZiBwYXRjaGVzVG9BcHBseUJlZm9yZURpZmZpbmcpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICFhcHBseVBhdGNoKHtcclxuICAgICAgICAgIHBhdGNoRGV0YWlscyxcclxuICAgICAgICAgIHBhdGNoRGlyLFxyXG4gICAgICAgICAgcGF0Y2hGaWxlUGF0aDogam9pbihhcHBQYXRoLCBwYXRjaERpciwgcGF0Y2hEZXRhaWxzLnBhdGNoRmlsZW5hbWUpLFxyXG4gICAgICAgICAgcmV2ZXJzZTogZmFsc2UsXHJcbiAgICAgICAgICBjd2Q6IHRtcFJlcG8ubmFtZSxcclxuICAgICAgICAgIGJlc3RFZmZvcnQ6IGZhbHNlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICkge1xyXG4gICAgICAgIC8vIFRPRE86IGFkZCBiZXR0ZXIgZXJyb3IgbWVzc2FnZSBvbmNlIC0tcmViYXNlIGlzIGltcGxlbWVudGVkXHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBgRmFpbGVkIHRvIGFwcGx5IHBhdGNoICR7cGF0Y2hEZXRhaWxzLnBhdGNoRmlsZW5hbWV9IHRvICR7cGFja2FnZURldGFpbHMucGF0aFNwZWNpZmllcn1gLFxyXG4gICAgICAgIClcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2l0KFwiYWRkXCIsIFwiLWZcIiwgcGFja2FnZURldGFpbHMucGF0aClcclxuICAgIGdpdChcImNvbW1pdFwiLCBcIi0tYWxsb3ctZW1wdHlcIiwgXCItbVwiLCBcImluaXRcIilcclxuXHJcbiAgICAvLyByZXBsYWNlIHBhY2thZ2Ugd2l0aCB1c2VyJ3MgdmVyc2lvblxyXG4gICAgcmVtb3ZlU3luYyh0bXBSZXBvUGFja2FnZVBhdGgpXHJcblxyXG4gICAgLy8gcG5wbSBpbnN0YWxscyBwYWNrYWdlcyBhcyBzeW1saW5rcywgY29weVN5bmMgd291bGQgY29weSBvbmx5IHRoZSBzeW1saW5rXHJcbiAgICBjb3B5U3luYyhyZWFscGF0aFN5bmMocGFja2FnZVBhdGgpLCB0bXBSZXBvUGFja2FnZVBhdGgpXHJcblxyXG4gICAgLy8gcmVtb3ZlIG5lc3RlZCBub2RlX21vZHVsZXMganVzdCB0byBiZSBzYWZlXHJcbiAgICByZW1vdmVTeW5jKGpvaW4odG1wUmVwb1BhY2thZ2VQYXRoLCBcIm5vZGVfbW9kdWxlc1wiKSlcclxuICAgIC8vIHJlbW92ZSAuZ2l0IGp1c3QgdG8gYmUgc2FmZVxyXG4gICAgcmVtb3ZlU3luYyhqb2luKHRtcFJlcG9QYWNrYWdlUGF0aCwgXCIuZ2l0XCIpKVxyXG4gICAgLy8gcmVtb3ZlIHBhdGNoLXBhY2thZ2Ugc3RhdGUgZmlsZVxyXG4gICAgcmVtb3ZlU3luYyhqb2luKHRtcFJlcG9QYWNrYWdlUGF0aCwgU1RBVEVfRklMRV9OQU1FKSlcclxuXHJcbiAgICAvLyBhbHNvIHJlbW92ZSBpZ25vcmVkIGZpbGVzIGxpa2UgYmVmb3JlXHJcbiAgICByZW1vdmVJZ25vcmVkRmlsZXModG1wUmVwb1BhY2thZ2VQYXRoLCBpbmNsdWRlUGF0aHMsIGV4Y2x1ZGVQYXRocylcclxuXHJcbiAgICAvLyBzdGFnZSBhbGwgZmlsZXNcclxuICAgIGdpdChcImFkZFwiLCBcIi1mXCIsIHBhY2thZ2VEZXRhaWxzLnBhdGgpXHJcblxyXG4gICAgLy8gZ2V0IGRpZmYgb2YgY2hhbmdlc1xyXG4gICAgY29uc3QgZGlmZlJlc3VsdCA9IGdpdChcclxuICAgICAgXCJkaWZmXCIsXHJcbiAgICAgIFwiLS1jYWNoZWRcIixcclxuICAgICAgXCItLW5vLWNvbG9yXCIsXHJcbiAgICAgIFwiLS1pZ25vcmUtc3BhY2UtYXQtZW9sXCIsXHJcbiAgICAgIFwiLS1uby1leHQtZGlmZlwiLFxyXG4gICAgICBcIi0tc3JjLXByZWZpeD1hL1wiLFxyXG4gICAgICBcIi0tZHN0LXByZWZpeD1iL1wiLFxyXG4gICAgKVxyXG5cclxuICAgIGlmIChkaWZmUmVzdWx0LnN0ZG91dC5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgYOKBie+4jyAgTm90IGNyZWF0aW5nIHBhdGNoIGZpbGUgZm9yIHBhY2thZ2UgJyR7cGFja2FnZVBhdGhTcGVjaWZpZXJ9J2AsXHJcbiAgICAgIClcclxuICAgICAgY29uc29sZS5sb2coYOKBie+4jyAgVGhlcmUgZG9uJ3QgYXBwZWFyIHRvIGJlIGFueSBjaGFuZ2VzLmApXHJcbiAgICAgIGlmIChpc1JlYmFzaW5nICYmIG1vZGUudHlwZSA9PT0gXCJvdmVyd3JpdGVfbGFzdFwiKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBcIlxcbvCfkqEgVG8gcmVtb3ZlIGEgcGF0Y2ggZmlsZSwgZGVsZXRlIGl0IGFuZCB0aGVuIHJlaW5zdGFsbCBub2RlX21vZHVsZXMgZnJvbSBzY3JhdGNoLlwiLFxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICBwcm9jZXNzLmV4aXQoMSlcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcGFyc2VQYXRjaEZpbGUoZGlmZlJlc3VsdC5zdGRvdXQudG9TdHJpbmcoKSlcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIChlIGFzIEVycm9yKS5tZXNzYWdlLmluY2x1ZGVzKFwiVW5leHBlY3RlZCBmaWxlIG1vZGUgc3RyaW5nOiAxMjAwMDBcIilcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYFxyXG7im5TvuI8gJHtjaGFsay5yZWQuYm9sZChcIkVSUk9SXCIpfVxyXG5cclxuICBZb3VyIGNoYW5nZXMgaW52b2x2ZSBjcmVhdGluZyBzeW1saW5rcy4gcGF0Y2gtcGFja2FnZSBkb2VzIG5vdCB5ZXQgc3VwcG9ydFxyXG4gIHN5bWxpbmtzLlxyXG5cclxuICDvuI9QbGVhc2UgdXNlICR7Y2hhbGsuYm9sZChcIi0taW5jbHVkZVwiKX0gYW5kL29yICR7Y2hhbGsuYm9sZChcclxuICAgIFwiLS1leGNsdWRlXCIsXHJcbiAgKX0gdG8gbmFycm93IHRoZSBzY29wZSBvZiB5b3VyIHBhdGNoIGlmXHJcbiAgdGhpcyB3YXMgdW5pbnRlbnRpb25hbC5cclxuYClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBvdXRQYXRoID0gXCIuL3BhdGNoLXBhY2thZ2UtZXJyb3IuanNvbi5nelwiXHJcbiAgICAgICAgd3JpdGVGaWxlU3luYyhcclxuICAgICAgICAgIG91dFBhdGgsXHJcbiAgICAgICAgICBnemlwU3luYyhcclxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgIGVycm9yOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAoZSBhcyBFcnJvcikubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIHN0YWNrOiAoZSBhcyBFcnJvcikuc3RhY2ssXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBwYXRjaDogZGlmZlJlc3VsdC5zdGRvdXQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgIClcclxuICAgICAgICBjb25zb2xlLmxvZyhgXHJcbuKblO+4jyAke2NoYWxrLnJlZC5ib2xkKFwiRVJST1JcIil9XHJcblxyXG4gIHBhdGNoLXBhY2thZ2Ugd2FzIHVuYWJsZSB0byByZWFkIHRoZSBwYXRjaC1maWxlIG1hZGUgYnkgZ2l0LiBUaGlzIHNob3VsZCBub3RcclxuICBoYXBwZW4uXHJcblxyXG4gIEEgZGlhZ25vc3RpYyBmaWxlIHdhcyB3cml0dGVuIHRvXHJcblxyXG4gICAgJHtvdXRQYXRofVxyXG5cclxuICBQbGVhc2UgYXR0YWNoIGl0IHRvIGEgZ2l0aHViIGlzc3VlXHJcblxyXG4gICAgaHR0cHM6Ly9naXRodWIuY29tL2RzMzAwL3BhdGNoLXBhY2thZ2UvaXNzdWVzL25ldz90aXRsZT1OZXcrcGF0Y2grcGFyc2UrZmFpbGVkJmJvZHk9UGxlYXNlK2F0dGFjaCt0aGUrZGlhZ25vc3RpYytmaWxlK2J5K2RyYWdnaW5nK2l0K2ludG8raGVyZSvwn5mPXHJcblxyXG4gIE5vdGUgdGhhdCB0aGlzIGRpYWdub3N0aWMgZmlsZSB3aWxsIGNvbnRhaW4gY29kZSBmcm9tIHRoZSBwYWNrYWdlIHlvdSB3ZXJlXHJcbiAgYXR0ZW1wdGluZyB0byBwYXRjaC5cclxuXHJcbmApXHJcbiAgICAgIH1cclxuICAgICAgcHJvY2Vzcy5leGl0KDEpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIC8vIG1heWJlIGRlbGV0ZSBleGlzdGluZ1xyXG4gICAgaWYgKG1vZGUudHlwZSA9PT0gXCJhcHBlbmRcIiAmJiAhaXNSZWJhc2luZyAmJiBleGlzdGluZ1BhdGNoZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIC8vIGlmIHdlIGFyZSBhcHBlbmRpbmcgdG8gYW4gZXhpc3RpbmcgcGF0Y2ggdGhhdCBkb2Vzbid0IGhhdmUgYSBzZXF1ZW5jZSBudW1iZXIgbGV0J3MgcmVuYW1lIGl0XHJcbiAgICAgIGNvbnN0IHByZXZQYXRjaCA9IGV4aXN0aW5nUGF0Y2hlc1swXVxyXG4gICAgICBpZiAocHJldlBhdGNoLnNlcXVlbmNlTnVtYmVyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBuZXdGaWxlTmFtZSA9IGNyZWF0ZVBhdGNoRmlsZU5hbWUoe1xyXG4gICAgICAgICAgcGFja2FnZURldGFpbHMsXHJcbiAgICAgICAgICBwYWNrYWdlVmVyc2lvbixcclxuICAgICAgICAgIHNlcXVlbmNlTnVtYmVyOiAxLFxyXG4gICAgICAgICAgc2VxdWVuY2VOYW1lOiBwcmV2UGF0Y2guc2VxdWVuY2VOYW1lID8/IFwiaW5pdGlhbFwiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3Qgb2xkUGF0aCA9IGpvaW4oYXBwUGF0aCwgcGF0Y2hEaXIsIHByZXZQYXRjaC5wYXRjaEZpbGVuYW1lKVxyXG4gICAgICAgIGNvbnN0IG5ld1BhdGggPSBqb2luKGFwcFBhdGgsIHBhdGNoRGlyLCBuZXdGaWxlTmFtZSlcclxuICAgICAgICByZW5hbWVTeW5jKG9sZFBhdGgsIG5ld1BhdGgpXHJcbiAgICAgICAgcHJldlBhdGNoLnNlcXVlbmNlTnVtYmVyID0gMVxyXG4gICAgICAgIHByZXZQYXRjaC5wYXRjaEZpbGVuYW1lID0gbmV3RmlsZU5hbWVcclxuICAgICAgICBwcmV2UGF0Y2guc2VxdWVuY2VOYW1lID0gcHJldlBhdGNoLnNlcXVlbmNlTmFtZSA/PyBcImluaXRpYWxcIlxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGFzdFBhdGNoID0gZXhpc3RpbmdQYXRjaGVzW1xyXG4gICAgICBzdGF0ZSA/IHN0YXRlLnBhdGNoZXMubGVuZ3RoIC0gMSA6IGV4aXN0aW5nUGF0Y2hlcy5sZW5ndGggLSAxXHJcbiAgICBdIGFzIFBhdGNoZWRQYWNrYWdlRGV0YWlscyB8IHVuZGVmaW5lZFxyXG4gICAgY29uc3Qgc2VxdWVuY2VOYW1lID1cclxuICAgICAgbW9kZS50eXBlID09PSBcImFwcGVuZFwiID8gbW9kZS5uYW1lIDogbGFzdFBhdGNoPy5zZXF1ZW5jZU5hbWVcclxuICAgIGNvbnN0IHNlcXVlbmNlTnVtYmVyID1cclxuICAgICAgbW9kZS50eXBlID09PSBcImFwcGVuZFwiXHJcbiAgICAgICAgPyAobGFzdFBhdGNoPy5zZXF1ZW5jZU51bWJlciA/PyAwKSArIDFcclxuICAgICAgICA6IGxhc3RQYXRjaD8uc2VxdWVuY2VOdW1iZXJcclxuXHJcbiAgICBjb25zdCBwYXRjaEZpbGVOYW1lID0gY3JlYXRlUGF0Y2hGaWxlTmFtZSh7XHJcbiAgICAgIHBhY2thZ2VEZXRhaWxzLFxyXG4gICAgICBwYWNrYWdlVmVyc2lvbixcclxuICAgICAgc2VxdWVuY2VOYW1lLFxyXG4gICAgICBzZXF1ZW5jZU51bWJlcixcclxuICAgIH0pXHJcblxyXG4gICAgY29uc3QgcGF0Y2hQYXRoOiBzdHJpbmcgPSBqb2luKHBhdGNoZXNEaXIsIHBhdGNoRmlsZU5hbWUpXHJcbiAgICBpZiAoIWV4aXN0c1N5bmMoZGlybmFtZShwYXRjaFBhdGgpKSkge1xyXG4gICAgICAvLyBzY29wZWQgcGFja2FnZVxyXG4gICAgICBta2RpclN5bmMoZGlybmFtZShwYXRjaFBhdGgpKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIHdlIGFyZSBpbnNlcnRpbmcgYSBuZXcgcGF0Y2ggaW50byBhIHNlcXVlbmNlIHdlIG1vc3QgbGlrZWx5IG5lZWQgdG8gdXBkYXRlIHRoZSBzZXF1ZW5jZSBudW1iZXJzXHJcbiAgICBpZiAoaXNSZWJhc2luZyAmJiBtb2RlLnR5cGUgPT09IFwiYXBwZW5kXCIpIHtcclxuICAgICAgY29uc3QgcGF0Y2hlc1RvTnVkZ2UgPSBleGlzdGluZ1BhdGNoZXMuc2xpY2Uoc3RhdGUhLnBhdGNoZXMubGVuZ3RoKVxyXG4gICAgICBpZiAoc2VxdWVuY2VOdW1iZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInNlcXVlbmNlTnVtYmVyIGlzIHVuZGVmaW5lZCB3aGlsZSByZWJhc2luZ1wiKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwYXRjaGVzVG9OdWRnZVswXT8uc2VxdWVuY2VOdW1iZXIgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHBhdGNoZXNUb051ZGdlWzBdLnNlcXVlbmNlTnVtYmVyIDw9IHNlcXVlbmNlTnVtYmVyXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBuZXh0ID0gc2VxdWVuY2VOdW1iZXIgKyAxXHJcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHBhdGNoZXNUb051ZGdlKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdOYW1lID0gY3JlYXRlUGF0Y2hGaWxlTmFtZSh7XHJcbiAgICAgICAgICAgIHBhY2thZ2VEZXRhaWxzLFxyXG4gICAgICAgICAgICBwYWNrYWdlVmVyc2lvbixcclxuICAgICAgICAgICAgc2VxdWVuY2VOYW1lOiBwLnNlcXVlbmNlTmFtZSxcclxuICAgICAgICAgICAgc2VxdWVuY2VOdW1iZXI6IG5leHQrKyxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgXCJSZW5hbWluZ1wiLFxyXG4gICAgICAgICAgICBjaGFsay5ib2xkKHAucGF0Y2hGaWxlbmFtZSksXHJcbiAgICAgICAgICAgIFwidG9cIixcclxuICAgICAgICAgICAgY2hhbGsuYm9sZChuZXdOYW1lKSxcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGNvbnN0IG9sZFBhdGggPSBqb2luKGFwcFBhdGgsIHBhdGNoRGlyLCBwLnBhdGNoRmlsZW5hbWUpXHJcbiAgICAgICAgICBjb25zdCBuZXdQYXRoID0gam9pbihhcHBQYXRoLCBwYXRjaERpciwgbmV3TmFtZSlcclxuICAgICAgICAgIHJlbmFtZVN5bmMob2xkUGF0aCwgbmV3UGF0aClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB3cml0ZUZpbGVTeW5jKHBhdGNoUGF0aCwgZGlmZlJlc3VsdC5zdGRvdXQpXHJcbiAgICBjb25zb2xlLmxvZyhcclxuICAgICAgYCR7Y2hhbGsuZ3JlZW4oXCLinJRcIil9IENyZWF0ZWQgZmlsZSAke2pvaW4ocGF0Y2hEaXIsIHBhdGNoRmlsZU5hbWUpfVxcbmAsXHJcbiAgICApXHJcblxyXG4gICAgY29uc3QgcHJldlN0YXRlOiBQYXRjaFN0YXRlW10gPSBwYXRjaGVzVG9BcHBseUJlZm9yZURpZmZpbmcubWFwKFxyXG4gICAgICAocCk6IFBhdGNoU3RhdGUgPT4gKHtcclxuICAgICAgICBwYXRjaEZpbGVuYW1lOiBwLnBhdGNoRmlsZW5hbWUsXHJcbiAgICAgICAgZGlkQXBwbHk6IHRydWUsXHJcbiAgICAgICAgcGF0Y2hDb250ZW50SGFzaDogaGFzaEZpbGUoam9pbihhcHBQYXRoLCBwYXRjaERpciwgcC5wYXRjaEZpbGVuYW1lKSksXHJcbiAgICAgIH0pLFxyXG4gICAgKVxyXG4gICAgY29uc3QgbmV4dFN0YXRlOiBQYXRjaFN0YXRlW10gPSBbXHJcbiAgICAgIC4uLnByZXZTdGF0ZSxcclxuICAgICAge1xyXG4gICAgICAgIHBhdGNoRmlsZW5hbWU6IHBhdGNoRmlsZU5hbWUsXHJcbiAgICAgICAgZGlkQXBwbHk6IHRydWUsXHJcbiAgICAgICAgcGF0Y2hDb250ZW50SGFzaDogaGFzaEZpbGUocGF0Y2hQYXRoKSxcclxuICAgICAgfSxcclxuICAgIF1cclxuXHJcbiAgICAvLyBpZiBhbnkgcGF0Y2hlcyBjb21lIGFmdGVyIHRoaXMgb25lIHdlIGp1c3QgbWFkZSwgd2Ugc2hvdWxkIHJlYXBwbHkgdGhlbVxyXG4gICAgbGV0IGRpZEZhaWxXaGlsZUZpbmlzaGluZ1JlYmFzZSA9IGZhbHNlXHJcbiAgICBpZiAoaXNSZWJhc2luZykge1xyXG4gICAgICBjb25zdCBjdXJyZW50UGF0Y2hlcyA9IGdldEdyb3VwZWRQYXRjaGVzKGpvaW4oYXBwUGF0aCwgcGF0Y2hEaXIpKVxyXG4gICAgICAgIC5wYXRoU3BlY2lmaWVyVG9QYXRjaEZpbGVzW3BhY2thZ2VEZXRhaWxzLnBhdGhTcGVjaWZpZXJdXHJcblxyXG4gICAgICBjb25zdCBwcmV2aW91c2x5VW5hcHBsaWVkUGF0Y2hlcyA9IGN1cnJlbnRQYXRjaGVzLnNsaWNlKG5leHRTdGF0ZS5sZW5ndGgpXHJcbiAgICAgIGlmIChwcmV2aW91c2x5VW5hcHBsaWVkUGF0Y2hlcy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgRmFzdCBmb3J3YXJkaW5nLi4uYClcclxuICAgICAgICBmb3IgKGNvbnN0IHBhdGNoIG9mIHByZXZpb3VzbHlVbmFwcGxpZWRQYXRjaGVzKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXRjaEZpbGVQYXRoID0gam9pbihhcHBQYXRoLCBwYXRjaERpciwgcGF0Y2gucGF0Y2hGaWxlbmFtZSlcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIWFwcGx5UGF0Y2goe1xyXG4gICAgICAgICAgICAgIHBhdGNoRGV0YWlsczogcGF0Y2gsXHJcbiAgICAgICAgICAgICAgcGF0Y2hEaXIsXHJcbiAgICAgICAgICAgICAgcGF0Y2hGaWxlUGF0aCxcclxuICAgICAgICAgICAgICByZXZlcnNlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXHJcbiAgICAgICAgICAgICAgYmVzdEVmZm9ydDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgZGlkRmFpbFdoaWxlRmluaXNoaW5nUmViYXNlID0gdHJ1ZVxyXG4gICAgICAgICAgICBsb2dQYXRjaFNlcXVlbmNlRXJyb3IoeyBwYXRjaERldGFpbHM6IHBhdGNoIH0pXHJcbiAgICAgICAgICAgIG5leHRTdGF0ZS5wdXNoKHtcclxuICAgICAgICAgICAgICBwYXRjaEZpbGVuYW1lOiBwYXRjaC5wYXRjaEZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgIGRpZEFwcGx5OiBmYWxzZSxcclxuICAgICAgICAgICAgICBwYXRjaENvbnRlbnRIYXNoOiBoYXNoRmlsZShwYXRjaEZpbGVQYXRoKSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y2hhbGsuZ3JlZW4oXCLinJRcIil9ICR7cGF0Y2gucGF0Y2hGaWxlbmFtZX1gKVxyXG4gICAgICAgICAgICBuZXh0U3RhdGUucHVzaCh7XHJcbiAgICAgICAgICAgICAgcGF0Y2hGaWxlbmFtZTogcGF0Y2gucGF0Y2hGaWxlbmFtZSxcclxuICAgICAgICAgICAgICBkaWRBcHBseTogdHJ1ZSxcclxuICAgICAgICAgICAgICBwYXRjaENvbnRlbnRIYXNoOiBoYXNoRmlsZShwYXRjaEZpbGVQYXRoKSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNSZWJhc2luZyB8fCBudW1QYXRjaGVzQWZ0ZXJDcmVhdGUgPiAxKSB7XHJcbiAgICAgIHNhdmVQYXRjaEFwcGxpY2F0aW9uU3RhdGUoe1xyXG4gICAgICAgIHBhY2thZ2VEZXRhaWxzLFxyXG4gICAgICAgIHBhdGNoZXM6IG5leHRTdGF0ZSxcclxuICAgICAgICBpc1JlYmFzaW5nOiBkaWRGYWlsV2hpbGVGaW5pc2hpbmdSZWJhc2UsXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjbGVhclBhdGNoQXBwbGljYXRpb25TdGF0ZShwYWNrYWdlRGV0YWlscylcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2FuQ3JlYXRlSXNzdWUpIHtcclxuICAgICAgaWYgKGNyZWF0ZUlzc3VlKSB7XHJcbiAgICAgICAgb3Blbklzc3VlQ3JlYXRpb25MaW5rKHtcclxuICAgICAgICAgIHBhY2thZ2VEZXRhaWxzLFxyXG4gICAgICAgICAgcGF0Y2hGaWxlQ29udGVudHM6IGRpZmZSZXN1bHQuc3Rkb3V0LnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBwYWNrYWdlVmVyc2lvbixcclxuICAgICAgICAgIHBhdGNoUGF0aCxcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1heWJlUHJpbnRJc3N1ZUNyZWF0aW9uUHJvbXB0KHZjcywgcGFja2FnZURldGFpbHMsIHBhY2thZ2VNYW5hZ2VyKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgY29uc29sZS5sb2coZSlcclxuICAgIHRocm93IGVcclxuICB9IGZpbmFsbHkge1xyXG4gICAgdG1wUmVwby5yZW1vdmVDYWxsYmFjaygpXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVQYXRjaEZpbGVOYW1lKHtcclxuICBwYWNrYWdlRGV0YWlscyxcclxuICBwYWNrYWdlVmVyc2lvbixcclxuICBzZXF1ZW5jZU51bWJlcixcclxuICBzZXF1ZW5jZU5hbWUsXHJcbn06IHtcclxuICBwYWNrYWdlRGV0YWlsczogUGFja2FnZURldGFpbHNcclxuICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nXHJcbiAgc2VxdWVuY2VOdW1iZXI/OiBudW1iZXJcclxuICBzZXF1ZW5jZU5hbWU/OiBzdHJpbmdcclxufSkge1xyXG4gIGNvbnN0IHBhY2thZ2VOYW1lcyA9IHBhY2thZ2VEZXRhaWxzLnBhY2thZ2VOYW1lc1xyXG4gICAgLm1hcCgobmFtZSkgPT4gbmFtZS5yZXBsYWNlKC9cXC8vZywgXCIrXCIpKVxyXG4gICAgLmpvaW4oXCIrK1wiKVxyXG5cclxuICBjb25zdCBuYW1lQW5kVmVyc2lvbiA9IGAke3BhY2thZ2VOYW1lc30rJHtwYWNrYWdlVmVyc2lvbn1gXHJcbiAgY29uc3QgbnVtID1cclxuICAgIHNlcXVlbmNlTnVtYmVyID09PSB1bmRlZmluZWRcclxuICAgICAgPyBcIlwiXHJcbiAgICAgIDogYCske3NlcXVlbmNlTnVtYmVyLnRvU3RyaW5nKCkucGFkU3RhcnQoMywgXCIwXCIpfWBcclxuICBjb25zdCBuYW1lID0gIXNlcXVlbmNlTmFtZSA/IFwiXCIgOiBgKyR7c2VxdWVuY2VOYW1lfWBcclxuXHJcbiAgcmV0dXJuIGAke25hbWVBbmRWZXJzaW9ufSR7bnVtfSR7bmFtZX0ucGF0Y2hgXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2dQYXRjaFNlcXVlbmNlRXJyb3Ioe1xyXG4gIHBhdGNoRGV0YWlscyxcclxufToge1xyXG4gIHBhdGNoRGV0YWlsczogUGF0Y2hlZFBhY2thZ2VEZXRhaWxzXHJcbn0pIHtcclxuICBjb25zb2xlLmxvZyhgXHJcbiR7Y2hhbGsucmVkLmJvbGQoXCLim5QgRVJST1JcIil9XHJcblxyXG5GYWlsZWQgdG8gYXBwbHkgcGF0Y2ggZmlsZSAke2NoYWxrLmJvbGQocGF0Y2hEZXRhaWxzLnBhdGNoRmlsZW5hbWUpfS5cclxuXHJcbklmIHRoaXMgcGF0Y2ggZmlsZSBpcyBubyBsb25nZXIgdXNlZnVsLCBkZWxldGUgaXQgYW5kIHJ1blxyXG5cclxuICAke2NoYWxrLmJvbGQoYHBhdGNoLXBhY2thZ2VgKX1cclxuXHJcblRvIHBhcnRpYWxseSBhcHBseSB0aGUgcGF0Y2ggKGlmIHBvc3NpYmxlKSBhbmQgb3V0cHV0IGEgbG9nIG9mIGVycm9ycyB0byBmaXgsIHJ1blxyXG5cclxuICAke2NoYWxrLmJvbGQoYHBhdGNoLXBhY2thZ2UgLS1wYXJ0aWFsYCl9XHJcblxyXG5BZnRlciB3aGljaCB5b3Ugc2hvdWxkIG1ha2UgYW55IHJlcXVpcmVkIGNoYW5nZXMgaW5zaWRlICR7XHJcbiAgICBwYXRjaERldGFpbHMucGF0aFxyXG4gIH0sIGFuZCBmaW5hbGx5IHJ1blxyXG5cclxuICAke2NoYWxrLmJvbGQoYHBhdGNoLXBhY2thZ2UgJHtwYXRjaERldGFpbHMucGF0aFNwZWNpZmllcn1gKX1cclxuXHJcbnRvIHVwZGF0ZSB0aGUgcGF0Y2ggZmlsZS5cclxuYClcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,28 @@
|
|
|
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.makeRegExp = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const makeRegExp = (reString, name, defaultValue, caseSensitive) => {
|
|
9
|
+
if (!reString) {
|
|
10
|
+
return defaultValue;
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
try {
|
|
14
|
+
return new RegExp(reString, caseSensitive ? "" : "i");
|
|
15
|
+
}
|
|
16
|
+
catch (_) {
|
|
17
|
+
console.log(`${chalk_1.default.red.bold("***ERROR***")}
|
|
18
|
+
Invalid format for option --${name}
|
|
19
|
+
|
|
20
|
+
Unable to convert the string ${JSON.stringify(reString)} to a regular expression.
|
|
21
|
+
`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
return /unreachable/;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.makeRegExp = makeRegExp;
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZVJlZ0V4cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWtlUmVnRXhwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUF5QjtBQUVsQixNQUFNLFVBQVUsR0FBRyxDQUN4QixRQUFnQixFQUNoQixJQUFZLEVBQ1osWUFBb0IsRUFDcEIsYUFBc0IsRUFDZCxFQUFFO0lBQ1YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsT0FBTyxZQUFZLENBQUE7SUFDckIsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdkQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDOzhCQUNwQixJQUFJOztpQ0FFRCxJQUFJLENBQUMsU0FBUyxDQUMzQyxRQUFRLENBQ1Q7Q0FDRixDQUFDLENBQUE7WUFFSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ2YsT0FBTyxhQUFhLENBQUE7UUFDdEIsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUE7QUF4QlksUUFBQSxVQUFVLGNBd0J0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIlxyXG5cclxuZXhwb3J0IGNvbnN0IG1ha2VSZWdFeHAgPSAoXHJcbiAgcmVTdHJpbmc6IHN0cmluZyxcclxuICBuYW1lOiBzdHJpbmcsXHJcbiAgZGVmYXVsdFZhbHVlOiBSZWdFeHAsXHJcbiAgY2FzZVNlbnNpdGl2ZTogYm9vbGVhbixcclxuKTogUmVnRXhwID0+IHtcclxuICBpZiAoIXJlU3RyaW5nKSB7XHJcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlXHJcbiAgfSBlbHNlIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBuZXcgUmVnRXhwKHJlU3RyaW5nLCBjYXNlU2Vuc2l0aXZlID8gXCJcIiA6IFwiaVwiKVxyXG4gICAgfSBjYXRjaCAoXykge1xyXG4gICAgICBjb25zb2xlLmxvZyhgJHtjaGFsay5yZWQuYm9sZChcIioqKkVSUk9SKioqXCIpfVxyXG5JbnZhbGlkIGZvcm1hdCBmb3Igb3B0aW9uIC0tJHtuYW1lfVxyXG5cclxuICBVbmFibGUgdG8gY29udmVydCB0aGUgc3RyaW5nICR7SlNPTi5zdHJpbmdpZnkoXHJcbiAgICByZVN0cmluZyxcclxuICApfSB0byBhIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuYClcclxuXHJcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxyXG4gICAgICByZXR1cm4gL3VucmVhY2hhYmxlL1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.packageIsDevDependency = packageIsDevDependency;
|
|
4
|
+
const path_1 = require("./path");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
function packageIsDevDependency({ appPath, patchDetails, }) {
|
|
7
|
+
const packageJsonPath = (0, path_1.join)(appPath, "package.json");
|
|
8
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
const { devDependencies } = require(packageJsonPath);
|
|
12
|
+
return Boolean(devDependencies && devDependencies[patchDetails.packageNames[0]]);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZUlzRGV2RGVwZW5kZW5jeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wYWNrYWdlSXNEZXZEZXBlbmRlbmN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsd0RBZUM7QUFsQkQsaUNBQTZCO0FBQzdCLDJCQUErQjtBQUUvQixTQUFnQixzQkFBc0IsQ0FBQyxFQUNyQyxPQUFPLEVBQ1AsWUFBWSxHQUliO0lBQ0MsTUFBTSxlQUFlLEdBQUcsSUFBQSxXQUFJLEVBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQ3JELElBQUksQ0FBQyxJQUFBLGVBQVUsRUFBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELE1BQU0sRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDcEQsT0FBTyxPQUFPLENBQ1osZUFBZSxJQUFJLGVBQWUsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2pFLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGF0Y2hlZFBhY2thZ2VEZXRhaWxzIH0gZnJvbSBcIi4vUGFja2FnZURldGFpbHNcIlxyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIi4vcGF0aFwiXHJcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhY2thZ2VJc0RldkRlcGVuZGVuY3koe1xyXG4gIGFwcFBhdGgsXHJcbiAgcGF0Y2hEZXRhaWxzLFxyXG59OiB7XHJcbiAgYXBwUGF0aDogc3RyaW5nXHJcbiAgcGF0Y2hEZXRhaWxzOiBQYXRjaGVkUGFja2FnZURldGFpbHNcclxufSkge1xyXG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGpvaW4oYXBwUGF0aCwgXCJwYWNrYWdlLmpzb25cIilcclxuICBpZiAoIWV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG4gIGNvbnN0IHsgZGV2RGVwZW5kZW5jaWVzIH0gPSByZXF1aXJlKHBhY2thZ2VKc29uUGF0aClcclxuICByZXR1cm4gQm9vbGVhbihcclxuICAgIGRldkRlcGVuZGVuY2llcyAmJiBkZXZEZXBlbmRlbmNpZXNbcGF0Y2hEZXRhaWxzLnBhY2thZ2VOYW1lc1swXV0sXHJcbiAgKVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseBunLockfile = parseBunLockfile;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
// Adapted from https://github.com/oven-sh/bun/blob/main/packages/bun-vscode/src/features/lockfile.ts,
|
|
6
|
+
// rewritten to use spawnSync instead of spawn.
|
|
7
|
+
function parseBunLockfile(lockFilePath) {
|
|
8
|
+
const process = (0, child_process_1.spawnSync)("bun", [lockFilePath], {
|
|
9
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
10
|
+
});
|
|
11
|
+
if (process.status !== 0) {
|
|
12
|
+
throw new Error(`Bun exited with code: ${process.status}\n${process.stderr.toString()}`);
|
|
13
|
+
}
|
|
14
|
+
return process.stdout.toString();
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VCdW5Mb2NrZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJzZUJ1bkxvY2tmaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsNENBVUM7QUFkRCxpREFBeUM7QUFFekMsc0dBQXNHO0FBQ3RHLCtDQUErQztBQUMvQyxTQUFnQixnQkFBZ0IsQ0FBQyxZQUFvQjtJQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFBLHlCQUFTLEVBQUMsS0FBSyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUU7UUFDL0MsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7S0FDbEMsQ0FBQyxDQUFBO0lBQ0YsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ2IseUJBQXlCLE9BQU8sQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUN4RSxDQUFBO0lBQ0gsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQTtBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3Bhd25TeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxyXG5cclxuLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9vdmVuLXNoL2J1bi9ibG9iL21haW4vcGFja2FnZXMvYnVuLXZzY29kZS9zcmMvZmVhdHVyZXMvbG9ja2ZpbGUudHMsXHJcbi8vIHJld3JpdHRlbiB0byB1c2Ugc3Bhd25TeW5jIGluc3RlYWQgb2Ygc3Bhd24uXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUJ1bkxvY2tmaWxlKGxvY2tGaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCBwcm9jZXNzID0gc3Bhd25TeW5jKFwiYnVuXCIsIFtsb2NrRmlsZVBhdGhdLCB7XHJcbiAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXHJcbiAgfSlcclxuICBpZiAocHJvY2Vzcy5zdGF0dXMgIT09IDApIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYEJ1biBleGl0ZWQgd2l0aCBjb2RlOiAke3Byb2Nlc3Muc3RhdHVzfVxcbiR7cHJvY2Vzcy5zdGRlcnIudG9TdHJpbmcoKX1gLFxyXG4gICAgKVxyXG4gIH1cclxuICByZXR1cm4gcHJvY2Vzcy5zdGRvdXQudG9TdHJpbmcoKVxyXG59XHJcbiJdfQ==
|