@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,335 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EXECUTABLE_FILE_MODE = exports.NON_EXECUTABLE_FILE_MODE = exports.parseHunkHeaderLine = void 0;
4
+ exports.interpretParsedPatchFile = interpretParsedPatchFile;
5
+ exports.parsePatchFile = parsePatchFile;
6
+ exports.verifyHunkIntegrity = verifyHunkIntegrity;
7
+ const assertNever_1 = require("../assertNever");
8
+ const parseHunkHeaderLine = (headerLine) => {
9
+ const match = headerLine
10
+ .trim()
11
+ .match(/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/);
12
+ if (!match) {
13
+ throw new Error(`Bad header line: '${headerLine}'`);
14
+ }
15
+ return {
16
+ original: {
17
+ start: Math.max(Number(match[1]), 1),
18
+ length: Number(match[3] || 1),
19
+ },
20
+ patched: {
21
+ start: Math.max(Number(match[4]), 1),
22
+ length: Number(match[6] || 1),
23
+ },
24
+ };
25
+ };
26
+ exports.parseHunkHeaderLine = parseHunkHeaderLine;
27
+ exports.NON_EXECUTABLE_FILE_MODE = 0o644;
28
+ exports.EXECUTABLE_FILE_MODE = 0o755;
29
+ const emptyFilePatch = () => ({
30
+ diffLineFromPath: null,
31
+ diffLineToPath: null,
32
+ oldMode: null,
33
+ newMode: null,
34
+ deletedFileMode: null,
35
+ newFileMode: null,
36
+ renameFrom: null,
37
+ renameTo: null,
38
+ beforeHash: null,
39
+ afterHash: null,
40
+ fromPath: null,
41
+ toPath: null,
42
+ hunks: null,
43
+ });
44
+ const emptyHunk = (headerLine) => ({
45
+ header: (0, exports.parseHunkHeaderLine)(headerLine),
46
+ parts: [],
47
+ source: "",
48
+ });
49
+ const hunkLinetypes = {
50
+ "@": "header",
51
+ "-": "deletion",
52
+ "+": "insertion",
53
+ " ": "context",
54
+ "\\": "pragma",
55
+ // Treat blank lines as context
56
+ undefined: "context",
57
+ "\r": "context",
58
+ };
59
+ function parsePatchLines(lines, { supportLegacyDiffs }) {
60
+ const result = [];
61
+ let currentFilePatch = emptyFilePatch();
62
+ let state = "parsing header";
63
+ let currentHunk = null;
64
+ let currentHunkMutationPart = null;
65
+ let hunkStartLineIndex = 0;
66
+ function commitHunk(i) {
67
+ if (currentHunk) {
68
+ if (currentHunkMutationPart) {
69
+ currentHunk.parts.push(currentHunkMutationPart);
70
+ currentHunkMutationPart = null;
71
+ }
72
+ currentHunk.source = lines.slice(hunkStartLineIndex, i).join("\n");
73
+ currentFilePatch.hunks.push(currentHunk);
74
+ currentHunk = null;
75
+ }
76
+ }
77
+ function commitFilePatch(i) {
78
+ commitHunk(i);
79
+ result.push(currentFilePatch);
80
+ currentFilePatch = emptyFilePatch();
81
+ }
82
+ for (let i = 0; i < lines.length; i++) {
83
+ const line = lines[i];
84
+ if (state === "parsing header") {
85
+ if (line.startsWith("@@")) {
86
+ hunkStartLineIndex = i;
87
+ state = "parsing hunks";
88
+ currentFilePatch.hunks = [];
89
+ i--;
90
+ }
91
+ else if (line.startsWith("diff --git ")) {
92
+ if (currentFilePatch && currentFilePatch.diffLineFromPath) {
93
+ commitFilePatch(i);
94
+ }
95
+ const match = line.match(/^diff --git a\/(.*?) b\/(.*?)\s*$/);
96
+ if (!match) {
97
+ throw new Error("Bad diff line: " + line);
98
+ }
99
+ currentFilePatch.diffLineFromPath = match[1];
100
+ currentFilePatch.diffLineToPath = match[2];
101
+ }
102
+ else if (line.startsWith("old mode ")) {
103
+ currentFilePatch.oldMode = line.slice("old mode ".length).trim();
104
+ }
105
+ else if (line.startsWith("new mode ")) {
106
+ currentFilePatch.newMode = line.slice("new mode ".length).trim();
107
+ }
108
+ else if (line.startsWith("deleted file mode ")) {
109
+ currentFilePatch.deletedFileMode = line
110
+ .slice("deleted file mode ".length)
111
+ .trim();
112
+ }
113
+ else if (line.startsWith("new file mode ")) {
114
+ currentFilePatch.newFileMode = line
115
+ .slice("new file mode ".length)
116
+ .trim();
117
+ }
118
+ else if (line.startsWith("rename from ")) {
119
+ currentFilePatch.renameFrom = line.slice("rename from ".length).trim();
120
+ }
121
+ else if (line.startsWith("rename to ")) {
122
+ currentFilePatch.renameTo = line.slice("rename to ".length).trim();
123
+ }
124
+ else if (line.startsWith("index ")) {
125
+ const match = line.match(/(\w+)\.\.(\w+)/);
126
+ if (!match) {
127
+ continue;
128
+ }
129
+ currentFilePatch.beforeHash = match[1];
130
+ currentFilePatch.afterHash = match[2];
131
+ }
132
+ else if (line.startsWith("--- ")) {
133
+ currentFilePatch.fromPath = line.slice("--- a/".length).trim();
134
+ }
135
+ else if (line.startsWith("+++ ")) {
136
+ currentFilePatch.toPath = line.slice("+++ b/".length).trim();
137
+ }
138
+ }
139
+ else {
140
+ if (supportLegacyDiffs && line.startsWith("--- a/")) {
141
+ state = "parsing header";
142
+ commitFilePatch(i);
143
+ i--;
144
+ continue;
145
+ }
146
+ // parsing hunks
147
+ const lineType = hunkLinetypes[line[0]] || null;
148
+ switch (lineType) {
149
+ case "header":
150
+ commitHunk(i);
151
+ currentHunk = emptyHunk(line);
152
+ break;
153
+ case null:
154
+ // unrecognized, bail out
155
+ state = "parsing header";
156
+ commitFilePatch(i);
157
+ i--;
158
+ break;
159
+ case "pragma":
160
+ if (!line.startsWith("\")) {
161
+ throw new Error("Unrecognized pragma in patch file: " + line);
162
+ }
163
+ if (!currentHunkMutationPart) {
164
+ throw new Error("Bad parser state: No newline at EOF pragma encountered without context");
165
+ }
166
+ currentHunkMutationPart.noNewlineAtEndOfFile = true;
167
+ break;
168
+ case "insertion":
169
+ case "deletion":
170
+ case "context":
171
+ if (!currentHunk) {
172
+ throw new Error("Bad parser state: Hunk lines encountered before hunk header");
173
+ }
174
+ if (currentHunkMutationPart &&
175
+ currentHunkMutationPart.type !== lineType) {
176
+ currentHunk.parts.push(currentHunkMutationPart);
177
+ currentHunkMutationPart = null;
178
+ }
179
+ if (!currentHunkMutationPart) {
180
+ currentHunkMutationPart = {
181
+ type: lineType,
182
+ lines: [],
183
+ noNewlineAtEndOfFile: false,
184
+ };
185
+ }
186
+ currentHunkMutationPart.lines.push(line.slice(1));
187
+ break;
188
+ default:
189
+ // exhausitveness check
190
+ (0, assertNever_1.assertNever)(lineType);
191
+ }
192
+ }
193
+ }
194
+ commitFilePatch(lines.length);
195
+ for (const { hunks } of result) {
196
+ if (hunks) {
197
+ for (const hunk of hunks) {
198
+ verifyHunkIntegrity(hunk);
199
+ }
200
+ }
201
+ }
202
+ return result;
203
+ }
204
+ function interpretParsedPatchFile(files) {
205
+ const result = [];
206
+ for (const file of files) {
207
+ const { diffLineFromPath, diffLineToPath, oldMode, newMode, deletedFileMode, newFileMode, renameFrom, renameTo, beforeHash, afterHash, fromPath, toPath, hunks, } = file;
208
+ const type = renameFrom
209
+ ? "rename"
210
+ : deletedFileMode
211
+ ? "file deletion"
212
+ : newFileMode
213
+ ? "file creation"
214
+ : hunks && hunks.length > 0
215
+ ? "patch"
216
+ : "mode change";
217
+ let destinationFilePath = null;
218
+ switch (type) {
219
+ case "rename":
220
+ if (!renameFrom || !renameTo) {
221
+ throw new Error("Bad parser state: rename from & to not given");
222
+ }
223
+ result.push({
224
+ type: "rename",
225
+ fromPath: renameFrom,
226
+ toPath: renameTo,
227
+ });
228
+ destinationFilePath = renameTo;
229
+ break;
230
+ case "file deletion": {
231
+ const path = diffLineFromPath || fromPath;
232
+ if (!path) {
233
+ throw new Error("Bad parse state: no path given for file deletion");
234
+ }
235
+ result.push({
236
+ type: "file deletion",
237
+ hunk: (hunks && hunks[0]) || null,
238
+ path,
239
+ mode: parseFileMode(deletedFileMode),
240
+ hash: beforeHash,
241
+ });
242
+ break;
243
+ }
244
+ case "file creation": {
245
+ const path = diffLineToPath || toPath;
246
+ if (!path) {
247
+ throw new Error("Bad parse state: no path given for file creation");
248
+ }
249
+ result.push({
250
+ type: "file creation",
251
+ hunk: (hunks && hunks[0]) || null,
252
+ path,
253
+ mode: parseFileMode(newFileMode),
254
+ hash: afterHash,
255
+ });
256
+ break;
257
+ }
258
+ case "patch":
259
+ case "mode change":
260
+ destinationFilePath = toPath || diffLineToPath;
261
+ break;
262
+ default:
263
+ (0, assertNever_1.assertNever)(type);
264
+ }
265
+ if (destinationFilePath && oldMode && newMode && oldMode !== newMode) {
266
+ result.push({
267
+ type: "mode change",
268
+ path: destinationFilePath,
269
+ oldMode: parseFileMode(oldMode),
270
+ newMode: parseFileMode(newMode),
271
+ });
272
+ }
273
+ if (destinationFilePath && hunks && hunks.length) {
274
+ result.push({
275
+ type: "patch",
276
+ path: destinationFilePath,
277
+ hunks,
278
+ beforeHash,
279
+ afterHash,
280
+ });
281
+ }
282
+ }
283
+ return result;
284
+ }
285
+ function parseFileMode(mode) {
286
+ // tslint:disable-next-line:no-bitwise
287
+ const parsedMode = parseInt(mode, 8) & 0o777;
288
+ if (parsedMode !== exports.NON_EXECUTABLE_FILE_MODE &&
289
+ parsedMode !== exports.EXECUTABLE_FILE_MODE) {
290
+ throw new Error("Unexpected file mode string: " + mode);
291
+ }
292
+ return parsedMode;
293
+ }
294
+ function parsePatchFile(file) {
295
+ const lines = file.split(/\n/g);
296
+ if (lines[lines.length - 1] === "") {
297
+ lines.pop();
298
+ }
299
+ try {
300
+ return interpretParsedPatchFile(parsePatchLines(lines, { supportLegacyDiffs: false }));
301
+ }
302
+ catch (e) {
303
+ if (e instanceof Error &&
304
+ e.message === "hunk header integrity check failed") {
305
+ return interpretParsedPatchFile(parsePatchLines(lines, { supportLegacyDiffs: true }));
306
+ }
307
+ throw e;
308
+ }
309
+ }
310
+ function verifyHunkIntegrity(hunk) {
311
+ // verify hunk integrity
312
+ let originalLength = 0;
313
+ let patchedLength = 0;
314
+ for (const { type, lines } of hunk.parts) {
315
+ switch (type) {
316
+ case "context":
317
+ patchedLength += lines.length;
318
+ originalLength += lines.length;
319
+ break;
320
+ case "deletion":
321
+ originalLength += lines.length;
322
+ break;
323
+ case "insertion":
324
+ patchedLength += lines.length;
325
+ break;
326
+ default:
327
+ (0, assertNever_1.assertNever)(type);
328
+ }
329
+ }
330
+ if (originalLength !== hunk.header.original.length ||
331
+ patchedLength !== hunk.header.patched.length) {
332
+ throw new Error("hunk header integrity check failed");
333
+ }
334
+ }
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGF0Y2gvcGFyc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNFNBLDREQW1HQztBQWNELHdDQW9CQztBQUVELGtEQTJCQztBQTljRCxnREFBNEM7QUFhckMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFVBQWtCLEVBQWMsRUFBRTtJQUNwRSxNQUFNLEtBQUssR0FBRyxVQUFVO1NBQ3JCLElBQUksRUFBRTtTQUNOLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO0lBQ3JELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLFVBQVUsR0FBRyxDQUFDLENBQUE7SUFDckQsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRLEVBQUU7WUFDUixLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtRQUNELE9BQU8sRUFBRTtZQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCO0tBQ0YsQ0FBQTtBQUNILENBQUMsQ0FBQTtBQWxCWSxRQUFBLG1CQUFtQix1QkFrQi9CO0FBRVksUUFBQSx3QkFBd0IsR0FBRyxLQUFLLENBQUE7QUFDaEMsUUFBQSxvQkFBb0IsR0FBRyxLQUFLLENBQUE7QUFnRnpDLE1BQU0sY0FBYyxHQUFHLEdBQWMsRUFBRSxDQUFDLENBQUM7SUFDdkMsZ0JBQWdCLEVBQUUsSUFBSTtJ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dmVyIH0gZnJvbSBcIi4uL2Fzc2VydE5ldmVyXCJcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSHVua0hlYWRlciB7XHJcbiAgb3JpZ2luYWw6IHtcclxuICAgIHN0YXJ0OiBudW1iZXJcclxuICAgIGxlbmd0aDogbnVtYmVyXHJcbiAgfVxyXG4gIHBhdGNoZWQ6IHtcclxuICAgIHN0YXJ0OiBudW1iZXJcclxuICAgIGxlbmd0aDogbnVtYmVyXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcGFyc2VIdW5rSGVhZGVyTGluZSA9IChoZWFkZXJMaW5lOiBzdHJpbmcpOiBIdW5rSGVhZGVyID0+IHtcclxuICBjb25zdCBtYXRjaCA9IGhlYWRlckxpbmVcclxuICAgIC50cmltKClcclxuICAgIC5tYXRjaCgvXkBAIC0oXFxkKykoLChcXGQrKSk/IFxcKyhcXGQrKSgsKFxcZCspKT8gQEAuKi8pXHJcbiAgaWYgKCFtYXRjaCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgaGVhZGVyIGxpbmU6ICcke2hlYWRlckxpbmV9J2ApXHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgb3JpZ2luYWw6IHtcclxuICAgICAgc3RhcnQ6IE1hdGgubWF4KE51bWJlcihtYXRjaFsxXSksIDEpLFxyXG4gICAgICBsZW5ndGg6IE51bWJlcihtYXRjaFszXSB8fCAxKSxcclxuICAgIH0sXHJcbiAgICBwYXRjaGVkOiB7XHJcbiAgICAgIHN0YXJ0OiBNYXRoLm1heChOdW1iZXIobWF0Y2hbNF0pLCAxKSxcclxuICAgICAgbGVuZ3RoOiBOdW1iZXIobWF0Y2hbNl0gfHwgMSksXHJcbiAgICB9LFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IE5PTl9FWEVDVVRBQkxFX0ZJTEVfTU9ERSA9IDBvNjQ0XHJcbmV4cG9ydCBjb25zdCBFWEVDVVRBQkxFX0ZJTEVfTU9ERSA9IDBvNzU1XHJcblxyXG50eXBlIEZpbGVNb2RlID0gdHlwZW9mIE5PTl9FWEVDVVRBQkxFX0ZJTEVfTU9ERSB8IHR5cGVvZiBFWEVDVVRBQkxFX0ZJTEVfTU9ERVxyXG5cclxuaW50ZXJmYWNlIFBhdGNoTXV0YXRpb25QYXJ0IHtcclxuICB0eXBlOiBcImNvbnRleHRcIiB8IFwiaW5zZXJ0aW9uXCIgfCBcImRlbGV0aW9uXCJcclxuICBsaW5lczogc3RyaW5nW11cclxuICBub05ld2xpbmVBdEVuZE9mRmlsZTogYm9vbGVhblxyXG59XHJcblxyXG5pbnRlcmZhY2UgRmlsZVJlbmFtZSB7XHJcbiAgdHlwZTogXCJyZW5hbWVcIlxyXG4gIGZyb21QYXRoOiBzdHJpbmdcclxuICB0b1BhdGg6IHN0cmluZ1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRmlsZU1vZGVDaGFuZ2Uge1xyXG4gIHR5cGU6IFwibW9kZSBjaGFuZ2VcIlxyXG4gIHBhdGg6IHN0cmluZ1xyXG4gIG9sZE1vZGU6IEZpbGVNb2RlXHJcbiAgbmV3TW9kZTogRmlsZU1vZGVcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWxlUGF0Y2gge1xyXG4gIHR5cGU6IFwicGF0Y2hcIlxyXG4gIHBhdGg6IHN0cmluZ1xyXG4gIGh1bmtzOiBIdW5rW11cclxuICBiZWZvcmVIYXNoOiBzdHJpbmcgfCBudWxsXHJcbiAgYWZ0ZXJIYXNoOiBzdHJpbmcgfCBudWxsXHJcbn1cclxuXHJcbmludGVyZmFjZSBGaWxlRGVsZXRpb24ge1xyXG4gIHR5cGU6IFwiZmlsZSBkZWxldGlvblwiXHJcbiAgcGF0aDogc3RyaW5nXHJcbiAgbW9kZTogRmlsZU1vZGVcclxuICBodW5rOiBIdW5rIHwgbnVsbFxyXG4gIGhhc2g6IHN0cmluZyB8IG51bGxcclxufVxyXG5cclxuaW50ZXJmYWNlIEZpbGVDcmVhdGlvbiB7XHJcbiAgdHlwZTogXCJmaWxlIGNyZWF0aW9uXCJcclxuICBtb2RlOiBGaWxlTW9kZVxyXG4gIHBhdGg6IHN0cmluZ1xyXG4gIGh1bms6IEh1bmsgfCBudWxsXHJcbiAgaGFzaDogc3RyaW5nIHwgbnVsbFxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQYXRjaEZpbGVQYXJ0ID1cclxuICB8IEZpbGVQYXRjaFxyXG4gIHwgRmlsZURlbGV0aW9uXHJcbiAgfCBGaWxlQ3JlYXRpb25cclxuICB8IEZpbGVSZW5hbWVcclxuICB8IEZpbGVNb2RlQ2hhbmdlXHJcblxyXG5leHBvcnQgdHlwZSBQYXJzZWRQYXRjaEZpbGUgPSBQYXRjaEZpbGVQYXJ0W11cclxuXHJcbnR5cGUgU3RhdGUgPSBcInBhcnNpbmcgaGVhZGVyXCIgfCBcInBhcnNpbmcgaHVua3NcIlxyXG5cclxuaW50ZXJmYWNlIEZpbGVEZWV0cyB7XHJcbiAgZGlmZkxpbmVGcm9tUGF0aDogc3RyaW5nIHwgbnVsbFxyXG4gIGRpZmZMaW5lVG9QYXRoOiBzdHJpbmcgfCBudWxsXHJcbiAgb2xkTW9kZTogc3RyaW5nIHwgbnVsbFxyXG4gIG5ld01vZGU6IHN0cmluZyB8IG51bGxcclxuICBkZWxldGVkRmlsZU1vZGU6IHN0cmluZyB8IG51bGxcclxuICBuZXdGaWxlTW9kZTogc3RyaW5nIHwgbnVsbFxyXG4gIHJlbmFtZUZyb206IHN0cmluZyB8IG51bGxcclxuICByZW5hbWVUbzogc3RyaW5nIHwgbnVsbFxyXG4gIGJlZm9yZUhhc2g6IHN0cmluZyB8IG51bGxcclxuICBhZnRlckhhc2g6IHN0cmluZyB8IG51bGxcclxuICBmcm9tUGF0aDogc3RyaW5nIHwgbnVsbFxyXG4gIHRvUGF0aDogc3RyaW5nIHwgbnVsbFxyXG4gIGh1bmtzOiBIdW5rW10gfCBudWxsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSHVuayB7XHJcbiAgaGVhZGVyOiBIdW5rSGVhZGVyXHJcbiAgcGFydHM6IFBhdGNoTXV0YXRpb25QYXJ0W11cclxuICBzb3VyY2U6IHN0cmluZ1xyXG59XHJcblxyXG5jb25zdCBlbXB0eUZpbGVQYXRjaCA9ICgpOiBGaWxlRGVldHMgPT4gKHtcclxuICBkaWZmTGluZUZyb21QYXRoOiBudWxsLFxyXG4gIGRpZmZMaW5lVG9QYXRoOiBudWxsLFxyXG4gIG9sZE1vZGU6IG51bGwsXHJcbiAgbmV3TW9kZTogbnVsbCxcclxuICBkZWxldGVkRmlsZU1vZGU6IG51bGwsXHJcbiAgbmV3RmlsZU1vZGU6IG51bGwsXHJcbiAgcmVuYW1lRnJvbTogbnVsbCxcclxuICByZW5hbWVUbzogbnVsbCxcclxuICBiZWZvcmVIYXNoOiBudWxsLFxyXG4gIGFmdGVySGFzaDogbnVsbCxcclxuICBmcm9tUGF0aDogbnVsbCxcclxuICB0b1BhdGg6IG51bGwsXHJcbiAgaHVua3M6IG51bGwsXHJcbn0pXHJcblxyXG5jb25zdCBlbXB0eUh1bmsgPSAoaGVhZGVyTGluZTogc3RyaW5nKTogSHVuayA9PiAoe1xyXG4gIGhlYWRlcjogcGFyc2VIdW5rSGVhZGVyTGluZShoZWFkZXJMaW5lKSxcclxuICBwYXJ0czogW10sXHJcbiAgc291cmNlOiBcIlwiLFxyXG59KVxyXG5cclxuY29uc3QgaHVua0xpbmV0eXBlczoge1xyXG4gIFtrOiBzdHJpbmddOiBQYXRjaE11dGF0aW9uUGFydFtcInR5cGVcIl0gfCBcInByYWdtYVwiIHwgXCJoZWFkZXJcIlxyXG59ID0ge1xyXG4gIFwiQFwiOiBcImhlYWRlclwiLFxyXG4gIFwiLVwiOiBcImRlbGV0aW9uXCIsXHJcbiAgXCIrXCI6IFwiaW5zZXJ0aW9uXCIsXHJcbiAgXCIgXCI6IFwiY29udGV4dFwiLFxyXG4gIFwiXFxcXFwiOiBcInByYWdtYVwiLFxyXG4gIC8vIFRyZWF0IGJsYW5rIGxpbmVzIGFzIGNvbnRleHRcclxuICB1bmRlZmluZWQ6IFwiY29udGV4dFwiLFxyXG4gIFwiXFxyXCI6IFwiY29udGV4dFwiLFxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVBhdGNoTGluZXMoXHJcbiAgbGluZXM6IHN0cmluZ1tdLFxyXG4gIHsgc3VwcG9ydExlZ2FjeURpZmZzIH06IHsgc3VwcG9ydExlZ2FjeURpZmZzOiBib29sZWFuIH0sXHJcbik6IEZpbGVEZWV0c1tdIHtcclxuICBjb25zdCByZXN1bHQ6IEZpbGVEZWV0c1tdID0gW11cclxuICBsZXQgY3VycmVudEZpbGVQYXRjaDogRmlsZURlZXRzID0gZW1wdHlGaWxlUGF0Y2goKVxyXG4gIGxldCBzdGF0ZTogU3RhdGUgPSBcInBhcnNpbmcgaGVhZGVyXCJcclxuICBsZXQgY3VycmVudEh1bms6IEh1bmsgfCBudWxsID0gbnVsbFxyXG4gIGxldCBjdXJyZW50SHVua011dGF0aW9uUGFydDogUGF0Y2hNdXRhdGlvblBhcnQgfCBudWxsID0gbnVsbFxyXG4gIGxldCBodW5rU3RhcnRMaW5lSW5kZXggPSAwXHJcblxyXG4gIGZ1bmN0aW9uIGNvbW1pdEh1bmsoaTogbnVtYmVyKSB7XHJcbiAgICBpZiAoY3VycmVudEh1bmspIHtcclxuICAgICAgaWYgKGN1cnJlbnRIdW5rTXV0YXRpb25QYXJ0KSB7XHJcbiAgICAgICAgY3VycmVudEh1bmsucGFydHMucHVzaChjdXJyZW50SHVua011dGF0aW9uUGFydClcclxuICAgICAgICBjdXJyZW50SHVua011dGF0aW9uUGFydCA9IG51bGxcclxuICAgICAgfVxyXG4gICAgICBjdXJyZW50SHVuay5zb3VyY2UgPSBsaW5lcy5zbGljZShodW5rU3RhcnRMaW5lSW5kZXgsIGkpLmpvaW4oXCJcXG5cIilcclxuICAgICAgY3VycmVudEZpbGVQYXRjaC5odW5rcyEucHVzaChjdXJyZW50SHVuaylcclxuICAgICAgY3VycmVudEh1bmsgPSBudWxsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjb21taXRGaWxlUGF0Y2goaTogbnVtYmVyKSB7XHJcbiAgICBjb21taXRIdW5rKGkpXHJcbiAgICByZXN1bHQucHVzaChjdXJyZW50RmlsZVBhdGNoKVxyXG4gICAgY3VycmVudEZpbGVQYXRjaCA9IGVtcHR5RmlsZVBhdGNoKClcclxuICB9XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXVxyXG5cclxuICAgIGlmIChzdGF0ZSA9PT0gXCJwYXJzaW5nIGhlYWRlclwiKSB7XHJcbiAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoXCJAQFwiKSkge1xyXG4gICAgICAgIGh1bmtTdGFydExpbmVJbmRleCA9IGlcclxuICAgICAgICBzdGF0ZSA9IFwicGFyc2luZyBodW5rc1wiXHJcbiAgICAgICAgY3VycmVudEZpbGVQYXRjaC5odW5rcyA9IFtdXHJcbiAgICAgICAgaS0tXHJcbiAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKFwiZGlmZiAtLWdpdCBcIikpIHtcclxuICAgICAgICBpZiAoY3VycmVudEZpbGVQYXRjaCAmJiBjdXJyZW50RmlsZVBhdGNoLmRpZmZMaW5lRnJvbVBhdGgpIHtcclxuICAgICAgICAgIGNvbW1pdEZpbGVQYXRjaChpKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtYXRjaCA9IGxpbmUubWF0Y2goL15kaWZmIC0tZ2l0IGFcXC8oLio/KSBiXFwvKC4qPylcXHMqJC8pXHJcbiAgICAgICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIGRpZmYgbGluZTogXCIgKyBsaW5lKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50RmlsZVBhdGNoLmRpZmZMaW5lRnJvbVBhdGggPSBtYXRjaFsxXVxyXG4gICAgICAgIGN1cnJlbnRGaWxlUGF0Y2guZGlmZkxpbmVUb1BhdGggPSBtYXRjaFsyXVxyXG4gICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChcIm9sZCBtb2RlIFwiKSkge1xyXG4gICAgICAgIGN1cnJlbnRGaWxlUGF0Y2gub2xkTW9kZSA9IGxpbmUuc2xpY2UoXCJvbGQgbW9kZSBcIi5sZW5ndGgpLnRyaW0oKVxyXG4gICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChcIm5ldyBtb2RlIFwiKSkge1xyXG4gICAgICAgIGN1cnJlbnRGaWxlUGF0Y2gubmV3TW9kZSA9IGxpbmUuc2xpY2UoXCJuZXcgbW9kZSBcIi5sZW5ndGgpLnRyaW0oKVxyXG4gICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChcImRlbGV0ZWQgZmlsZSBtb2RlIFwiKSkge1xyXG4gICAgICAgIGN1cnJlbnRGaWxlUGF0Y2guZGVsZXRlZEZpbGVNb2RlID0gbGluZVxyXG4gICAgICAgICAgLnNsaWNlKFwiZGVsZXRlZCBmaWxlIG1vZGUgXCIubGVuZ3RoKVxyXG4gICAgICAgICAgLnRyaW0oKVxyXG4gICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChcIm5ldyBmaWxlIG1vZGUgXCIpKSB7XHJcbiAgICAgICAgY3VycmVudEZpbGVQYXRjaC5uZXdGaWxlTW9kZSA9IGxpbmVcclxuICAgICAgICAgIC5zbGljZShcIm5ldyBmaWxlIG1vZGUgXCIubGVuZ3RoKVxyXG4gICAgICAgICAgLnRyaW0oKVxyXG4gICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChcInJlbmFtZSBmcm9tIFwiKSkge1xyXG4gICAgICAgIGN1cnJlbnRGaWxlUGF0Y2gucmVuYW1lRnJvbSA9IGxpbmUuc2xpY2UoXCJyZW5hbWUgZnJvbSBcIi5sZW5ndGgpLnRyaW0oKVxyXG4gICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChcInJlbmFtZSB0byBcIikpIHtcclxuICAgICAgICBjdXJyZW50RmlsZVBhdGNoLnJlbmFtZVRvID0gbGluZS5zbGljZShcInJlbmFtZSB0byBcIi5sZW5ndGgpLnRyaW0oKVxyXG4gICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChcImluZGV4IFwiKSkge1xyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gbGluZS5tYXRjaCgvKFxcdyspXFwuXFwuKFxcdyspLylcclxuICAgICAgICBpZiAoIW1hdGNoKSB7XHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50RmlsZVBhdGNoLmJlZm9yZUhhc2ggPSBtYXRjaFsxXVxyXG4gICAgICAgIGN1cnJlbnRGaWxlUGF0Y2guYWZ0ZXJIYXNoID0gbWF0Y2hbMl1cclxuICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoXCItLS0gXCIpKSB7XHJcbiAgICAgICAgY3VycmVudEZpbGVQYXRjaC5mcm9tUGF0aCA9IGxpbmUuc2xpY2UoXCItLS0gYS9cIi5sZW5ndGgpLnRyaW0oKVxyXG4gICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChcIisrKyBcIikpIHtcclxuICAgICAgICBjdXJyZW50RmlsZVBhdGNoLnRvUGF0aCA9IGxpbmUuc2xpY2UoXCIrKysgYi9cIi5sZW5ndGgpLnRyaW0oKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoc3VwcG9ydExlZ2FjeURpZmZzICYmIGxpbmUuc3RhcnRzV2l0aChcIi0tLSBhL1wiKSkge1xyXG4gICAgICAgIHN0YXRlID0gXCJwYXJzaW5nIGhlYWRlclwiXHJcbiAgICAgICAgY29tbWl0RmlsZVBhdGNoKGkpXHJcbiAgICAgICAgaS0tXHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICAvLyBwYXJzaW5nIGh1bmtzXHJcbiAgICAgIGNvbnN0IGxpbmVUeXBlID0gaHVua0xpbmV0eXBlc1tsaW5lWzBdXSB8fCBudWxsXHJcbiAgICAgIHN3aXRjaCAobGluZVR5cGUpIHtcclxuICAgICAgICBjYXNlIFwiaGVhZGVyXCI6XHJcbiAgICAgICAgICBjb21taXRIdW5rKGkpXHJcbiAgICAgICAgICBjdXJyZW50SHVuayA9IGVtcHR5SHVuayhsaW5lKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlIG51bGw6XHJcbiAgICAgICAgICAvLyB1bnJlY29nbml6ZWQsIGJhaWwgb3V0XHJcbiAgICAgICAgICBzdGF0ZSA9IFwicGFyc2luZyBoZWFkZXJcIlxyXG4gICAgICAgICAgY29tbWl0RmlsZVBhdGNoKGkpXHJcbiAgICAgICAgICBpLS1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSBcInByYWdtYVwiOlxyXG4gICAgICAgICAgaWYgKCFsaW5lLnN0YXJ0c1dpdGgoXCJcXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcIikpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIHByYWdtYSBpbiBwYXRjaCBmaWxlOiBcIiArIGxpbmUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIWN1cnJlbnRIdW5rTXV0YXRpb25QYXJ0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICBcIkJhZCBwYXJzZXIgc3RhdGU6IE5vIG5ld2xpbmUgYXQgRU9GIHByYWdtYSBlbmNvdW50ZXJlZCB3aXRob3V0IGNvbnRleHRcIixcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY3VycmVudEh1bmtNdXRhdGlvblBhcnQubm9OZXdsaW5lQXRFbmRPZkZpbGUgPSB0cnVlXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGNhc2UgXCJpbnNlcnRpb25cIjpcclxuICAgICAgICBjYXNlIFwiZGVsZXRpb25cIjpcclxuICAgICAgICBjYXNlIFwiY29udGV4dFwiOlxyXG4gICAgICAgICAgaWYgKCFjdXJyZW50SHVuaykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgXCJCYWQgcGFyc2VyIHN0YXRlOiBIdW5rIGxpbmVzIGVuY291bnRlcmVkIGJlZm9yZSBodW5rIGhlYWRlclwiLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGN1cnJlbnRIdW5rTXV0YXRpb25QYXJ0ICYmXHJcbiAgICAgICAgICAgIGN1cnJlbnRIdW5rTXV0YXRpb25QYXJ0LnR5cGUgIT09IGxpbmVUeXBlXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY3VycmVudEh1bmsucGFydHMucHVzaChjdXJyZW50SHVua011dGF0aW9uUGFydClcclxuICAgICAgICAgICAgY3VycmVudEh1bmtNdXRhdGlvblBhcnQgPSBudWxsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIWN1cnJlbnRIdW5rTXV0YXRpb25QYXJ0KSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRIdW5rTXV0YXRpb25QYXJ0ID0ge1xyXG4gICAgICAgICAgICAgIHR5cGU6IGxpbmVUeXBlLFxyXG4gICAgICAgICAgICAgIGxpbmVzOiBbXSxcclxuICAgICAgICAgICAgICBub05ld2xpbmVBdEVuZE9mRmlsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGN1cnJlbnRIdW5rTXV0YXRpb25QYXJ0LmxpbmVzLnB1c2gobGluZS5zbGljZSgxKSlcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIC8vIGV4aGF1c2l0dmVuZXNzIGNoZWNrXHJcbiAgICAgICAgICBhc3NlcnROZXZlcihsaW5lVHlwZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tbWl0RmlsZVBhdGNoKGxpbmVzLmxlbmd0aClcclxuXHJcbiAgZm9yIChjb25zdCB7IGh1bmtzIH0gb2YgcmVzdWx0KSB7XHJcbiAgICBpZiAoaHVua3MpIHtcclxuICAgICAgZm9yIChjb25zdCBodW5rIG9mIGh1bmtzKSB7XHJcbiAgICAgICAgdmVyaWZ5SHVua0ludGVncml0eShodW5rKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmVzdWx0XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnByZXRQYXJzZWRQYXRjaEZpbGUoZmlsZXM6IEZpbGVEZWV0c1tdKTogUGFyc2VkUGF0Y2hGaWxlIHtcclxuICBjb25zdCByZXN1bHQ6IFBhcnNlZFBhdGNoRmlsZSA9IFtdXHJcblxyXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBkaWZmTGluZUZyb21QYXRoLFxyXG4gICAgICBkaWZmTGluZVRvUGF0aCxcclxuICAgICAgb2xkTW9kZSxcclxuICAgICAgbmV3TW9kZSxcclxuICAgICAgZGVsZXRlZEZpbGVNb2RlLFxyXG4gICAgICBuZXdGaWxlTW9kZSxcclxuICAgICAgcmVuYW1lRnJvbSxcclxuICAgICAgcmVuYW1lVG8sXHJcbiAgICAgIGJlZm9yZUhhc2gsXHJcbiAgICAgIGFmdGVySGFzaCxcclxuICAgICAgZnJvbVBhdGgsXHJcbiAgICAgIHRvUGF0aCxcclxuICAgICAgaHVua3MsXHJcbiAgICB9ID0gZmlsZVxyXG4gICAgY29uc3QgdHlwZTogUGF0Y2hGaWxlUGFydFtcInR5cGVcIl0gPSByZW5hbWVGcm9tXHJcbiAgICAgID8gXCJyZW5hbWVcIlxyXG4gICAgICA6IGRlbGV0ZWRGaWxlTW9kZVxyXG4gICAgICA/IFwiZmlsZSBkZWxldGlvblwiXHJcbiAgICAgIDogbmV3RmlsZU1vZGVcclxuICAgICAgPyBcImZpbGUgY3JlYXRpb25cIlxyXG4gICAgICA6IGh1bmtzICYmIGh1bmtzLmxlbmd0aCA+IDBcclxuICAgICAgPyBcInBhdGNoXCJcclxuICAgICAgOiBcIm1vZGUgY2hhbmdlXCJcclxuXHJcbiAgICBsZXQgZGVzdGluYXRpb25GaWxlUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlIFwicmVuYW1lXCI6XHJcbiAgICAgICAgaWYgKCFyZW5hbWVGcm9tIHx8ICFyZW5hbWVUbykge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIHBhcnNlciBzdGF0ZTogcmVuYW1lIGZyb20gJiB0byBub3QgZ2l2ZW5cIilcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgICAgdHlwZTogXCJyZW5hbWVcIixcclxuICAgICAgICAgIGZyb21QYXRoOiByZW5hbWVGcm9tLFxyXG4gICAgICAgICAgdG9QYXRoOiByZW5hbWVUbyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIGRlc3RpbmF0aW9uRmlsZVBhdGggPSByZW5hbWVUb1xyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgXCJmaWxlIGRlbGV0aW9uXCI6IHtcclxuICAgICAgICBjb25zdCBwYXRoID0gZGlmZkxpbmVGcm9tUGF0aCB8fCBmcm9tUGF0aFxyXG4gICAgICAgIGlmICghcGF0aCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIHBhcnNlIHN0YXRlOiBubyBwYXRoIGdpdmVuIGZvciBmaWxlIGRlbGV0aW9uXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6IFwiZmlsZSBkZWxldGlvblwiLFxyXG4gICAgICAgICAgaHVuazogKGh1bmtzICYmIGh1bmtzWzBdKSB8fCBudWxsLFxyXG4gICAgICAgICAgcGF0aCxcclxuICAgICAgICAgIG1vZGU6IHBhcnNlRmlsZU1vZGUoZGVsZXRlZEZpbGVNb2RlISksXHJcbiAgICAgICAgICBoYXNoOiBiZWZvcmVIYXNoLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFwiZmlsZSBjcmVhdGlvblwiOiB7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IGRpZmZMaW5lVG9QYXRoIHx8IHRvUGF0aFxyXG4gICAgICAgIGlmICghcGF0aCkge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIHBhcnNlIHN0YXRlOiBubyBwYXRoIGdpdmVuIGZvciBmaWxlIGNyZWF0aW9uXCIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6IFwiZmlsZSBjcmVhdGlvblwiLFxyXG4gICAgICAgICAgaHVuazogKGh1bmtzICYmIGh1bmtzWzBdKSB8fCBudWxsLFxyXG4gICAgICAgICAgcGF0aCxcclxuICAgICAgICAgIG1vZGU6IHBhcnNlRmlsZU1vZGUobmV3RmlsZU1vZGUhKSxcclxuICAgICAgICAgIGhhc2g6IGFmdGVySGFzaCxcclxuICAgICAgICB9KVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgICAgY2FzZSBcInBhdGNoXCI6XHJcbiAgICAgIGNhc2UgXCJtb2RlIGNoYW5nZVwiOlxyXG4gICAgICAgIGRlc3RpbmF0aW9uRmlsZVBhdGggPSB0b1BhdGggfHwgZGlmZkxpbmVUb1BhdGhcclxuICAgICAgICBicmVha1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGFzc2VydE5ldmVyKHR5cGUpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRlc3RpbmF0aW9uRmlsZVBhdGggJiYgb2xkTW9kZSAmJiBuZXdNb2RlICYmIG9sZE1vZGUgIT09IG5ld01vZGUpIHtcclxuICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgIHR5cGU6IFwibW9kZSBjaGFuZ2VcIixcclxuICAgICAgICBwYXRoOiBkZXN0aW5hdGlvbkZpbGVQYXRoLFxyXG4gICAgICAgIG9sZE1vZGU6IHBhcnNlRmlsZU1vZGUob2xkTW9kZSksXHJcbiAgICAgICAgbmV3TW9kZTogcGFyc2VGaWxlTW9kZShuZXdNb2RlKSxcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGVzdGluYXRpb25GaWxlUGF0aCAmJiBodW5rcyAmJiBodW5rcy5sZW5ndGgpIHtcclxuICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgIHR5cGU6IFwicGF0Y2hcIixcclxuICAgICAgICBwYXRoOiBkZXN0aW5hdGlvbkZpbGVQYXRoLFxyXG4gICAgICAgIGh1bmtzLFxyXG4gICAgICAgIGJlZm9yZUhhc2gsXHJcbiAgICAgICAgYWZ0ZXJIYXNoLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdFxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUZpbGVNb2RlKG1vZGU6IHN0cmluZyk6IEZpbGVNb2RlIHtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYml0d2lzZVxyXG4gIGNvbnN0IHBhcnNlZE1vZGUgPSBwYXJzZUludChtb2RlLCA4KSAmIDBvNzc3XHJcbiAgaWYgKFxyXG4gICAgcGFyc2VkTW9kZSAhPT0gTk9OX0VYRUNVVEFCTEVfRklMRV9NT0RFICYmXHJcbiAgICBwYXJzZWRNb2RlICE9PSBFWEVDVVRBQkxFX0ZJTEVfTU9ERVxyXG4gICkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBmaWxlIG1vZGUgc3RyaW5nOiBcIiArIG1vZGUpXHJcbiAgfVxyXG4gIHJldHVybiBwYXJzZWRNb2RlXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhdGNoRmlsZShmaWxlOiBzdHJpbmcpOiBQYXJzZWRQYXRjaEZpbGUge1xyXG4gIGNvbnN0IGxpbmVzID0gZmlsZS5zcGxpdCgvXFxuL2cpXHJcbiAgaWYgKGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdID09PSBcIlwiKSB7XHJcbiAgICBsaW5lcy5wb3AoKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgcmV0dXJuIGludGVycHJldFBhcnNlZFBhdGNoRmlsZShcclxuICAgICAgcGFyc2VQYXRjaExpbmVzKGxpbmVzLCB7IHN1cHBvcnRMZWdhY3lEaWZmczogZmFsc2UgfSksXHJcbiAgICApXHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgaWYgKFxyXG4gICAgICBlIGluc3RhbmNlb2YgRXJyb3IgJiZcclxuICAgICAgZS5tZXNzYWdlID09PSBcImh1bmsgaGVhZGVyIGludGVncml0eSBjaGVjayBmYWlsZWRcIlxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBpbnRlcnByZXRQYXJzZWRQYXRjaEZpbGUoXHJcbiAgICAgICAgcGFyc2VQYXRjaExpbmVzKGxpbmVzLCB7IHN1cHBvcnRMZWdhY3lEaWZmczogdHJ1ZSB9KSxcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgdGhyb3cgZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeUh1bmtJbnRlZ3JpdHkoaHVuazogSHVuaykge1xyXG4gIC8vIHZlcmlmeSBodW5rIGludGVncml0eVxyXG4gIGxldCBvcmlnaW5hbExlbmd0aCA9IDBcclxuICBsZXQgcGF0Y2hlZExlbmd0aCA9IDBcclxuICBmb3IgKGNvbnN0IHsgdHlwZSwgbGluZXMgfSBvZiBodW5rLnBhcnRzKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBcImNvbnRleHRcIjpcclxuICAgICAgICBwYXRjaGVkTGVuZ3RoICs9IGxpbmVzLmxlbmd0aFxyXG4gICAgICAgIG9yaWdpbmFsTGVuZ3RoICs9IGxpbmVzLmxlbmd0aFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgXCJkZWxldGlvblwiOlxyXG4gICAgICAgIG9yaWdpbmFsTGVuZ3RoICs9IGxpbmVzLmxlbmd0aFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgXCJpbnNlcnRpb25cIjpcclxuICAgICAgICBwYXRjaGVkTGVuZ3RoICs9IGxpbmVzLmxlbmd0aFxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYXNzZXJ0TmV2ZXIodHlwZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmIChcclxuICAgIG9yaWdpbmFsTGVuZ3RoICE9PSBodW5rLmhlYWRlci5vcmlnaW5hbC5sZW5ndGggfHxcclxuICAgIHBhdGNoZWRMZW5ndGggIT09IGh1bmsuaGVhZGVyLnBhdGNoZWQubGVuZ3RoXHJcbiAgKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJodW5rIGhlYWRlciBpbnRlZ3JpdHkgY2hlY2sgZmFpbGVkXCIpXHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,48 @@
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.readPatch = readPatch;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const fs_extra_1 = require("fs-extra");
9
+ const path_1 = require("../path");
10
+ const path_2 = require("path");
11
+ const parse_1 = require("./parse");
12
+ function readPatch({ patchFilePath, patchDetails, patchDir, }) {
13
+ try {
14
+ return (0, parse_1.parsePatchFile)((0, fs_extra_1.readFileSync)(patchFilePath).toString());
15
+ }
16
+ catch (e) {
17
+ const fixupSteps = [];
18
+ const relativePatchFilePath = (0, path_2.normalize)((0, path_1.relative)(process.cwd(), patchFilePath));
19
+ const patchBaseDir = relativePatchFilePath.slice(0, relativePatchFilePath.indexOf(patchDir));
20
+ if (patchBaseDir) {
21
+ fixupSteps.push(`cd ${patchBaseDir}`);
22
+ }
23
+ fixupSteps.push(`patch -p1 -i ${relativePatchFilePath.slice(relativePatchFilePath.indexOf(patchDir))}`);
24
+ fixupSteps.push(`npx patch-package ${patchDetails.pathSpecifier}`);
25
+ if (patchBaseDir) {
26
+ fixupSteps.push(`cd ${(0, path_1.relative)((0, path_1.resolve)(process.cwd(), patchBaseDir), process.cwd())}`);
27
+ }
28
+ console.log(`
29
+ ${chalk_1.default.red.bold("**ERROR**")} ${chalk_1.default.red(`Failed to apply patch for package ${chalk_1.default.bold(patchDetails.humanReadablePathSpecifier)}`)}
30
+
31
+ This happened because the patch file ${relativePatchFilePath} could not be parsed.
32
+
33
+ If you just upgraded patch-package, you can try running:
34
+
35
+ ${fixupSteps.join("\n ")}
36
+
37
+ Otherwise, try manually creating the patch file again.
38
+
39
+ If the problem persists, please submit a bug report:
40
+
41
+ https://github.com/ds300/patch-package/issues/new?title=Patch+file+parse+error&body=%3CPlease+attach+the+patch+file+in+question%3E
42
+
43
+ `);
44
+ process.exit(1);
45
+ }
46
+ return [];
47
+ }
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9yZWFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBT0EsOEJBMERDO0FBakVELGtEQUF5QjtBQUN6Qix1Q0FBdUM7QUFDdkMsa0NBQTJDO0FBQzNDLCtCQUFnQztBQUVoQyxtQ0FBdUQ7QUFFdkQsU0FBZ0IsU0FBUyxDQUFDLEVBQ3hCLGFBQWEsRUFDYixZQUFZLEVBQ1osUUFBUSxHQUtUO0lBQ0MsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFBLHNCQUFjLEVBQUMsSUFBQSx1QkFBWSxFQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDL0QsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUE7UUFDL0IsTUFBTSxxQkFBcUIsR0FBRyxJQUFBLGdCQUFTLEVBQ3JDLElBQUEsZUFBUSxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxhQUFhLENBQUMsQ0FDdkMsQ0FBQTtRQUNELE1BQU0sWUFBWSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FDOUMsQ0FBQyxFQUNELHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FDeEMsQ0FBQTtRQUNELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLFlBQVksRUFBRSxDQUFDLENBQUE7UUFDdkMsQ0FBQztRQUNELFVBQVUsQ0FBQyxJQUFJLENBQ2IsZ0JBQWdCLHFCQUFxQixDQUFDLEtBQUssQ0FDekMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUN4QyxFQUFFLENBQ0osQ0FBQTtRQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFBO1FBQ2xFLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsVUFBVSxDQUFDLElBQUksQ0FDYixNQUFNLElBQUEsZUFBUSxFQUFDLElBQUEsY0FBTyxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUN0RSxDQUFBO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUM7RUFDZCxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxlQUFLLENBQUMsR0FBRyxDQUNwQyxxQ0FBcUMsZUFBSyxDQUFDLElBQUksQ0FDN0MsWUFBWSxDQUFDLDBCQUEwQixDQUN4QyxFQUFFLENBQ0o7O3lDQUVvQyxxQkFBcUI7Ozs7TUFJeEQsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7Ozs7Ozs7O0NBUTlCLENBQUMsQ0FBQTtRQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFBO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIlxyXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwiZnMtZXh0cmFcIlxyXG5pbXBvcnQgeyByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gXCIuLi9wYXRoXCJcclxuaW1wb3J0IHsgbm9ybWFsaXplIH0gZnJvbSBcInBhdGhcIlxyXG5pbXBvcnQgeyBQYWNrYWdlRGV0YWlscyB9IGZyb20gXCIuLi9QYWNrYWdlRGV0YWlsc1wiXHJcbmltcG9ydCB7IHBhcnNlUGF0Y2hGaWxlLCBQYXRjaEZpbGVQYXJ0IH0gZnJvbSBcIi4vcGFyc2VcIlxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRQYXRjaCh7XHJcbiAgcGF0Y2hGaWxlUGF0aCxcclxuICBwYXRjaERldGFpbHMsXHJcbiAgcGF0Y2hEaXIsXHJcbn06IHtcclxuICBwYXRjaEZpbGVQYXRoOiBzdHJpbmdcclxuICBwYXRjaERldGFpbHM6IFBhY2thZ2VEZXRhaWxzXHJcbiAgcGF0Y2hEaXI6IHN0cmluZ1xyXG59KTogUGF0Y2hGaWxlUGFydFtdIHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIHBhcnNlUGF0Y2hGaWxlKHJlYWRGaWxlU3luYyhwYXRjaEZpbGVQYXRoKS50b1N0cmluZygpKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIGNvbnN0IGZpeHVwU3RlcHM6IHN0cmluZ1tdID0gW11cclxuICAgIGNvbnN0IHJlbGF0aXZlUGF0Y2hGaWxlUGF0aCA9IG5vcm1hbGl6ZShcclxuICAgICAgcmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgcGF0Y2hGaWxlUGF0aCksXHJcbiAgICApXHJcbiAgICBjb25zdCBwYXRjaEJhc2VEaXIgPSByZWxhdGl2ZVBhdGNoRmlsZVBhdGguc2xpY2UoXHJcbiAgICAgIDAsXHJcbiAgICAgIHJlbGF0aXZlUGF0Y2hGaWxlUGF0aC5pbmRleE9mKHBhdGNoRGlyKSxcclxuICAgIClcclxuICAgIGlmIChwYXRjaEJhc2VEaXIpIHtcclxuICAgICAgZml4dXBTdGVwcy5wdXNoKGBjZCAke3BhdGNoQmFzZURpcn1gKVxyXG4gICAgfVxyXG4gICAgZml4dXBTdGVwcy5wdXNoKFxyXG4gICAgICBgcGF0Y2ggLXAxIC1pICR7cmVsYXRpdmVQYXRjaEZpbGVQYXRoLnNsaWNlKFxyXG4gICAgICAgIHJlbGF0aXZlUGF0Y2hGaWxlUGF0aC5pbmRleE9mKHBhdGNoRGlyKSxcclxuICAgICAgKX1gLFxyXG4gICAgKVxyXG4gICAgZml4dXBTdGVwcy5wdXNoKGBucHggcGF0Y2gtcGFja2FnZSAke3BhdGNoRGV0YWlscy5wYXRoU3BlY2lmaWVyfWApXHJcbiAgICBpZiAocGF0Y2hCYXNlRGlyKSB7XHJcbiAgICAgIGZpeHVwU3RlcHMucHVzaChcclxuICAgICAgICBgY2QgJHtyZWxhdGl2ZShyZXNvbHZlKHByb2Nlc3MuY3dkKCksIHBhdGNoQmFzZURpciksIHByb2Nlc3MuY3dkKCkpfWAsXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhgXHJcbiR7Y2hhbGsucmVkLmJvbGQoXCIqKkVSUk9SKipcIil9ICR7Y2hhbGsucmVkKFxyXG4gICAgICBgRmFpbGVkIHRvIGFwcGx5IHBhdGNoIGZvciBwYWNrYWdlICR7Y2hhbGsuYm9sZChcclxuICAgICAgICBwYXRjaERldGFpbHMuaHVtYW5SZWFkYWJsZVBhdGhTcGVjaWZpZXIsXHJcbiAgICAgICl9YCxcclxuICAgICl9XHJcbiAgICBcclxuICBUaGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHBhdGNoIGZpbGUgJHtyZWxhdGl2ZVBhdGNoRmlsZVBhdGh9IGNvdWxkIG5vdCBiZSBwYXJzZWQuXHJcbiAgIFxyXG4gIElmIHlvdSBqdXN0IHVwZ3JhZGVkIHBhdGNoLXBhY2thZ2UsIHlvdSBjYW4gdHJ5IHJ1bm5pbmc6XHJcbiAgXHJcbiAgICAke2ZpeHVwU3RlcHMuam9pbihcIlxcbiAgICBcIil9XHJcbiAgICBcclxuICBPdGhlcndpc2UsIHRyeSBtYW51YWxseSBjcmVhdGluZyB0aGUgcGF0Y2ggZmlsZSBhZ2Fpbi5cclxuICBcclxuICBJZiB0aGUgcHJvYmxlbSBwZXJzaXN0cywgcGxlYXNlIHN1Ym1pdCBhIGJ1ZyByZXBvcnQ6XHJcbiAgXHJcbiAgICBodHRwczovL2dpdGh1Yi5jb20vZHMzMDAvcGF0Y2gtcGFja2FnZS9pc3N1ZXMvbmV3P3RpdGxlPVBhdGNoK2ZpbGUrcGFyc2UrZXJyb3ImYm9keT0lM0NQbGVhc2UrYXR0YWNoK3RoZStwYXRjaCtmaWxlK2luK3F1ZXN0aW9uJTNFXHJcblxyXG5gKVxyXG4gICAgcHJvY2Vzcy5leGl0KDEpXHJcbiAgfVxyXG4gIHJldHVybiBbXVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reversePatch = void 0;
4
+ const parse_1 = require("./parse");
5
+ const assertNever_1 = require("../assertNever");
6
+ function reverseHunk(hunk) {
7
+ const header = {
8
+ original: hunk.header.patched,
9
+ patched: hunk.header.original,
10
+ };
11
+ const parts = [];
12
+ for (const part of hunk.parts) {
13
+ switch (part.type) {
14
+ case "context":
15
+ parts.push(part);
16
+ break;
17
+ case "deletion":
18
+ parts.push({
19
+ type: "insertion",
20
+ lines: part.lines,
21
+ noNewlineAtEndOfFile: part.noNewlineAtEndOfFile,
22
+ });
23
+ break;
24
+ case "insertion":
25
+ parts.push({
26
+ type: "deletion",
27
+ lines: part.lines,
28
+ noNewlineAtEndOfFile: part.noNewlineAtEndOfFile,
29
+ });
30
+ break;
31
+ default:
32
+ (0, assertNever_1.assertNever)(part.type);
33
+ }
34
+ }
35
+ // swap insertions and deletions over so deletions always come first
36
+ for (let i = 0; i < parts.length - 1; i++) {
37
+ if (parts[i].type === "insertion" && parts[i + 1].type === "deletion") {
38
+ const tmp = parts[i];
39
+ parts[i] = parts[i + 1];
40
+ parts[i + 1] = tmp;
41
+ i += 1;
42
+ }
43
+ }
44
+ const result = {
45
+ header,
46
+ parts,
47
+ source: hunk.source,
48
+ };
49
+ (0, parse_1.verifyHunkIntegrity)(result);
50
+ return result;
51
+ }
52
+ function reversePatchPart(part) {
53
+ switch (part.type) {
54
+ case "file creation":
55
+ return {
56
+ type: "file deletion",
57
+ path: part.path,
58
+ hash: part.hash,
59
+ hunk: part.hunk && reverseHunk(part.hunk),
60
+ mode: part.mode,
61
+ };
62
+ case "file deletion":
63
+ return {
64
+ type: "file creation",
65
+ path: part.path,
66
+ hunk: part.hunk && reverseHunk(part.hunk),
67
+ mode: part.mode,
68
+ hash: part.hash,
69
+ };
70
+ case "rename":
71
+ return {
72
+ type: "rename",
73
+ fromPath: part.toPath,
74
+ toPath: part.fromPath,
75
+ };
76
+ case "patch":
77
+ return {
78
+ type: "patch",
79
+ path: part.path,
80
+ hunks: part.hunks.map(reverseHunk),
81
+ beforeHash: part.afterHash,
82
+ afterHash: part.beforeHash,
83
+ };
84
+ case "mode change":
85
+ return {
86
+ type: "mode change",
87
+ path: part.path,
88
+ newMode: part.oldMode,
89
+ oldMode: part.newMode,
90
+ };
91
+ }
92
+ }
93
+ const reversePatch = (patch) => {
94
+ return patch.map(reversePatchPart).reverse();
95
+ };
96
+ exports.reversePatch = reversePatch;
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV2ZXJzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9yZXZlcnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQU1nQjtBQUNoQixnREFBNEM7QUFFNUMsU0FBUyxXQUFXLENBQUMsSUFBVTtJQUM3QixNQUFNLE1BQU0sR0FBZTtRQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1FBQzdCLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7S0FDOUIsQ0FBQTtJQUNELE1BQU0sS0FBSyxHQUFrQixFQUFFLENBQUE7SUFFL0IsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsS0FBSyxTQUFTO2dCQUNaLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ2hCLE1BQUs7WUFDUCxLQUFLLFVBQVU7Z0JBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDVCxJQUFJLEVBQUUsV0FBVztvQkFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO2lCQUNoRCxDQUFDLENBQUE7Z0JBQ0YsTUFBSztZQUNQLEtBQUssV0FBVztnQkFDZCxLQUFLLENBQUMsSUFBSSxDQUFDO29CQUNULElBQUksRUFBRSxVQUFVO29CQUNoQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7b0JBQ2pCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxvQkFBb0I7aUJBQ2hELENBQUMsQ0FBQTtnQkFDRixNQUFLO1lBQ1A7Z0JBQ0UsSUFBQSx5QkFBVyxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUMxQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNwQixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUN2QixLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtZQUNsQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ1IsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBUztRQUNuQixNQUFNO1FBQ04sS0FBSztRQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtLQUNwQixDQUFBO0lBRUQsSUFBQSwyQkFBbUIsRUFBQyxNQUFNLENBQUMsQ0FBQTtJQUUzQixPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLElBQW1CO0lBQzNDLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLEtBQUssZUFBZTtZQUNsQixPQUFPO2dCQUNMLElBQUksRUFBRSxlQUFlO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUN6QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDaEIsQ0FBQTtRQUNILEtBQUssZUFBZTtZQUNsQixPQUFPO2dCQUNMLElBQUksRUFBRSxlQUFlO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3pDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDaEIsQ0FBQTtRQUNILEtBQUssUUFBUTtZQUNYLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVE7YUFDdEIsQ0FBQTtRQUNILEtBQUssT0FBTztZQUNWLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7Z0JBQ2xDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzNCLENBQUE7UUFDSCxLQUFLLGFBQWE7WUFDaEIsT0FBTztnQkFDTCxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3RCLENBQUE7SUFDTCxDQUFDO0FBQ0gsQ0FBQztBQUVNLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBc0IsRUFBbUIsRUFBRTtJQUN0RSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtBQUM5QyxDQUFDLENBQUE7QUFGWSxRQUFBLFlBQVksZ0JBRXhCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBQYXJzZWRQYXRjaEZpbGUsXHJcbiAgUGF0Y2hGaWxlUGFydCxcclxuICBIdW5rLFxyXG4gIEh1bmtIZWFkZXIsXHJcbiAgdmVyaWZ5SHVua0ludGVncml0eSxcclxufSBmcm9tIFwiLi9wYXJzZVwiXHJcbmltcG9ydCB7IGFzc2VydE5ldmVyIH0gZnJvbSBcIi4uL2Fzc2VydE5ldmVyXCJcclxuXHJcbmZ1bmN0aW9uIHJldmVyc2VIdW5rKGh1bms6IEh1bmspOiBIdW5rIHtcclxuICBjb25zdCBoZWFkZXI6IEh1bmtIZWFkZXIgPSB7XHJcbiAgICBvcmlnaW5hbDogaHVuay5oZWFkZXIucGF0Y2hlZCxcclxuICAgIHBhdGNoZWQ6IGh1bmsuaGVhZGVyLm9yaWdpbmFsLFxyXG4gIH1cclxuICBjb25zdCBwYXJ0czogSHVua1tcInBhcnRzXCJdID0gW11cclxuXHJcbiAgZm9yIChjb25zdCBwYXJ0IG9mIGh1bmsucGFydHMpIHtcclxuICAgIHN3aXRjaCAocGFydC50eXBlKSB7XHJcbiAgICAgIGNhc2UgXCJjb250ZXh0XCI6XHJcbiAgICAgICAgcGFydHMucHVzaChwYXJ0KVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgXCJkZWxldGlvblwiOlxyXG4gICAgICAgIHBhcnRzLnB1c2goe1xyXG4gICAgICAgICAgdHlwZTogXCJpbnNlcnRpb25cIixcclxuICAgICAgICAgIGxpbmVzOiBwYXJ0LmxpbmVzLFxyXG4gICAgICAgICAgbm9OZXdsaW5lQXRFbmRPZkZpbGU6IHBhcnQubm9OZXdsaW5lQXRFbmRPZkZpbGUsXHJcbiAgICAgICAgfSlcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIFwiaW5zZXJ0aW9uXCI6XHJcbiAgICAgICAgcGFydHMucHVzaCh7XHJcbiAgICAgICAgICB0eXBlOiBcImRlbGV0aW9uXCIsXHJcbiAgICAgICAgICBsaW5lczogcGFydC5saW5lcyxcclxuICAgICAgICAgIG5vTmV3bGluZUF0RW5kT2ZGaWxlOiBwYXJ0Lm5vTmV3bGluZUF0RW5kT2ZGaWxlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBhc3NlcnROZXZlcihwYXJ0LnR5cGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBzd2FwIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucyBvdmVyIHNvIGRlbGV0aW9ucyBhbHdheXMgY29tZSBmaXJzdFxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICBpZiAocGFydHNbaV0udHlwZSA9PT0gXCJpbnNlcnRpb25cIiAmJiBwYXJ0c1tpICsgMV0udHlwZSA9PT0gXCJkZWxldGlvblwiKSB7XHJcbiAgICAgIGNvbnN0IHRtcCA9IHBhcnRzW2ldXHJcbiAgICAgIHBhcnRzW2ldID0gcGFydHNbaSArIDFdXHJcbiAgICAgIHBhcnRzW2kgKyAxXSA9IHRtcFxyXG4gICAgICBpICs9IDFcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IHJlc3VsdDogSHVuayA9IHtcclxuICAgIGhlYWRlcixcclxuICAgIHBhcnRzLFxyXG4gICAgc291cmNlOiBodW5rLnNvdXJjZSxcclxuICB9XHJcblxyXG4gIHZlcmlmeUh1bmtJbnRlZ3JpdHkocmVzdWx0KVxyXG5cclxuICByZXR1cm4gcmVzdWx0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJldmVyc2VQYXRjaFBhcnQocGFydDogUGF0Y2hGaWxlUGFydCk6IFBhdGNoRmlsZVBhcnQge1xyXG4gIHN3aXRjaCAocGFydC50eXBlKSB7XHJcbiAgICBjYXNlIFwiZmlsZSBjcmVhdGlvblwiOlxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IFwiZmlsZSBkZWxldGlvblwiLFxyXG4gICAgICAgIHBhdGg6IHBhcnQucGF0aCxcclxuICAgICAgICBoYXNoOiBwYXJ0Lmhhc2gsXHJcbiAgICAgICAgaHVuazogcGFydC5odW5rICYmIHJldmVyc2VIdW5rKHBhcnQuaHVuayksXHJcbiAgICAgICAgbW9kZTogcGFydC5tb2RlLFxyXG4gICAgICB9XHJcbiAgICBjYXNlIFwiZmlsZSBkZWxldGlvblwiOlxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IFwiZmlsZSBjcmVhdGlvblwiLFxyXG4gICAgICAgIHBhdGg6IHBhcnQucGF0aCxcclxuICAgICAgICBodW5rOiBwYXJ0Lmh1bmsgJiYgcmV2ZXJzZUh1bmsocGFydC5odW5rKSxcclxuICAgICAgICBtb2RlOiBwYXJ0Lm1vZGUsXHJcbiAgICAgICAgaGFzaDogcGFydC5oYXNoLFxyXG4gICAgICB9XHJcbiAgICBjYXNlIFwicmVuYW1lXCI6XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdHlwZTogXCJyZW5hbWVcIixcclxuICAgICAgICBmcm9tUGF0aDogcGFydC50b1BhdGgsXHJcbiAgICAgICAgdG9QYXRoOiBwYXJ0LmZyb21QYXRoLFxyXG4gICAgICB9XHJcbiAgICBjYXNlIFwicGF0Y2hcIjpcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0eXBlOiBcInBhdGNoXCIsXHJcbiAgICAgICAgcGF0aDogcGFydC5wYXRoLFxyXG4gICAgICAgIGh1bmtzOiBwYXJ0Lmh1bmtzLm1hcChyZXZlcnNlSHVuayksXHJcbiAgICAgICAgYmVmb3JlSGFzaDogcGFydC5hZnRlckhhc2gsXHJcbiAgICAgICAgYWZ0ZXJIYXNoOiBwYXJ0LmJlZm9yZUhhc2gsXHJcbiAgICAgIH1cclxuICAgIGNhc2UgXCJtb2RlIGNoYW5nZVwiOlxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHR5cGU6IFwibW9kZSBjaGFuZ2VcIixcclxuICAgICAgICBwYXRoOiBwYXJ0LnBhdGgsXHJcbiAgICAgICAgbmV3TW9kZTogcGFydC5vbGRNb2RlLFxyXG4gICAgICAgIG9sZE1vZGU6IHBhcnQubmV3TW9kZSxcclxuICAgICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHJldmVyc2VQYXRjaCA9IChwYXRjaDogUGFyc2VkUGF0Y2hGaWxlKTogUGFyc2VkUGF0Y2hGaWxlID0+IHtcclxuICByZXR1cm4gcGF0Y2gubWFwKHJldmVyc2VQYXRjaFBhcnQpLnJldmVyc2UoKVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,55 @@
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.getGroupedPatches = exports.getPatchFiles = void 0;
7
+ const PackageDetails_1 = require("./PackageDetails");
8
+ const path_1 = require("./path");
9
+ const klaw_sync_1 = __importDefault(require("klaw-sync"));
10
+ const getPatchFiles = (patchesDir) => {
11
+ try {
12
+ return (0, klaw_sync_1.default)(patchesDir, { nodir: true })
13
+ .map(({ path }) => (0, path_1.relative)(patchesDir, path))
14
+ .filter((path) => path.endsWith(".patch"));
15
+ }
16
+ catch (e) {
17
+ return [];
18
+ }
19
+ };
20
+ exports.getPatchFiles = getPatchFiles;
21
+ const getGroupedPatches = (patchesDirectory) => {
22
+ const files = (0, exports.getPatchFiles)(patchesDirectory);
23
+ if (files.length === 0) {
24
+ return {
25
+ numPatchFiles: 0,
26
+ pathSpecifierToPatchFiles: {},
27
+ warnings: [],
28
+ };
29
+ }
30
+ const warnings = [];
31
+ const pathSpecifierToPatchFiles = {};
32
+ for (const file of files) {
33
+ const details = (0, PackageDetails_1.getPackageDetailsFromPatchFilename)(file);
34
+ if (!details) {
35
+ warnings.push(`Unrecognized patch file in patches directory ${file}`);
36
+ continue;
37
+ }
38
+ if (!pathSpecifierToPatchFiles[details.pathSpecifier]) {
39
+ pathSpecifierToPatchFiles[details.pathSpecifier] = [];
40
+ }
41
+ pathSpecifierToPatchFiles[details.pathSpecifier].push(details);
42
+ }
43
+ for (const arr of Object.values(pathSpecifierToPatchFiles)) {
44
+ arr.sort((a, b) => {
45
+ return (a.sequenceNumber ?? 0) - (b.sequenceNumber ?? 0);
46
+ });
47
+ }
48
+ return {
49
+ numPatchFiles: files.length,
50
+ pathSpecifierToPatchFiles,
51
+ warnings,
52
+ };
53
+ };
54
+ exports.getGroupedPatches = getGroupedPatches;
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0Y2hGcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXRjaEZzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUd5QjtBQUN6QixpQ0FBaUM7QUFDakMsMERBQWdDO0FBRXpCLE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBa0IsRUFBRSxFQUFFO0lBQ2xELElBQUksQ0FBQztRQUNILE9BQU8sSUFBQSxtQkFBUSxFQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUN6QyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFBLGVBQVEsRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDN0MsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7QUFDSCxDQUFDLENBQUE7QUFSWSxRQUFBLGFBQWEsaUJBUXpCO0FBT00sTUFBTSxpQkFBaUIsR0FBRyxDQUFDLGdCQUF3QixFQUFrQixFQUFFO0lBQzVFLE1BQU0sS0FBSyxHQUFHLElBQUEscUJBQWEsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBRTdDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2QixPQUFPO1lBQ0wsYUFBYSxFQUFFLENBQUM7WUFDaEIseUJBQXlCLEVBQUUsRUFBRTtZQUM3QixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFBO0lBRTdCLE1BQU0seUJBQXlCLEdBQTRDLEVBQUUsQ0FBQTtJQUM3RSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUEsbURBQWtDLEVBQUMsSUFBSSxDQUFDLENBQUE7UUFDeEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxnREFBZ0QsSUFBSSxFQUFFLENBQUMsQ0FBQTtZQUNyRSxTQUFRO1FBQ1YsQ0FBQztRQUNELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN0RCx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFBO1FBQ3ZELENBQUM7UUFDRCx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDO1FBQzNELEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQzFELENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxhQUFhLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDM0IseUJBQXlCO1FBQ3pCLFFBQVE7S0FDVCxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBcENZLFFBQUEsaUJBQWlCLHFCQW9DN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIFBhdGNoZWRQYWNrYWdlRGV0YWlscyxcclxuICBnZXRQYWNrYWdlRGV0YWlsc0Zyb21QYXRjaEZpbGVuYW1lLFxyXG59IGZyb20gXCIuL1BhY2thZ2VEZXRhaWxzXCJcclxuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tIFwiLi9wYXRoXCJcclxuaW1wb3J0IGtsYXdTeW5jIGZyb20gXCJrbGF3LXN5bmNcIlxyXG5cclxuZXhwb3J0IGNvbnN0IGdldFBhdGNoRmlsZXMgPSAocGF0Y2hlc0Rpcjogc3RyaW5nKSA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBrbGF3U3luYyhwYXRjaGVzRGlyLCB7IG5vZGlyOiB0cnVlIH0pXHJcbiAgICAgIC5tYXAoKHsgcGF0aCB9KSA9PiByZWxhdGl2ZShwYXRjaGVzRGlyLCBwYXRoKSlcclxuICAgICAgLmZpbHRlcigocGF0aCkgPT4gcGF0aC5lbmRzV2l0aChcIi5wYXRjaFwiKSlcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICByZXR1cm4gW11cclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBHcm91cGVkUGF0Y2hlcyB7XHJcbiAgbnVtUGF0Y2hGaWxlczogbnVtYmVyXHJcbiAgcGF0aFNwZWNpZmllclRvUGF0Y2hGaWxlczogUmVjb3JkPHN0cmluZywgUGF0Y2hlZFBhY2thZ2VEZXRhaWxzW10+XHJcbiAgd2FybmluZ3M6IHN0cmluZ1tdXHJcbn1cclxuZXhwb3J0IGNvbnN0IGdldEdyb3VwZWRQYXRjaGVzID0gKHBhdGNoZXNEaXJlY3Rvcnk6IHN0cmluZyk6IEdyb3VwZWRQYXRjaGVzID0+IHtcclxuICBjb25zdCBmaWxlcyA9IGdldFBhdGNoRmlsZXMocGF0Y2hlc0RpcmVjdG9yeSlcclxuXHJcbiAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbnVtUGF0Y2hGaWxlczogMCxcclxuICAgICAgcGF0aFNwZWNpZmllclRvUGF0Y2hGaWxlczoge30sXHJcbiAgICAgIHdhcm5pbmdzOiBbXSxcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdXHJcblxyXG4gIGNvbnN0IHBhdGhTcGVjaWZpZXJUb1BhdGNoRmlsZXM6IFJlY29yZDxzdHJpbmcsIFBhdGNoZWRQYWNrYWdlRGV0YWlsc1tdPiA9IHt9XHJcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XHJcbiAgICBjb25zdCBkZXRhaWxzID0gZ2V0UGFja2FnZURldGFpbHNGcm9tUGF0Y2hGaWxlbmFtZShmaWxlKVxyXG4gICAgaWYgKCFkZXRhaWxzKSB7XHJcbiAgICAgIHdhcm5pbmdzLnB1c2goYFVucmVjb2duaXplZCBwYXRjaCBmaWxlIGluIHBhdGNoZXMgZGlyZWN0b3J5ICR7ZmlsZX1gKVxyXG4gICAgICBjb250aW51ZVxyXG4gICAgfVxyXG4gICAgaWYgKCFwYXRoU3BlY2lmaWVyVG9QYXRjaEZpbGVzW2RldGFpbHMucGF0aFNwZWNpZmllcl0pIHtcclxuICAgICAgcGF0aFNwZWNpZmllclRvUGF0Y2hGaWxlc1tkZXRhaWxzLnBhdGhTcGVjaWZpZXJdID0gW11cclxuICAgIH1cclxuICAgIHBhdGhTcGVjaWZpZXJUb1BhdGNoRmlsZXNbZGV0YWlscy5wYXRoU3BlY2lmaWVyXS5wdXNoKGRldGFpbHMpXHJcbiAgfVxyXG4gIGZvciAoY29uc3QgYXJyIG9mIE9iamVjdC52YWx1ZXMocGF0aFNwZWNpZmllclRvUGF0Y2hGaWxlcykpIHtcclxuICAgIGFyci5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIHJldHVybiAoYS5zZXF1ZW5jZU51bWJlciA/PyAwKSAtIChiLnNlcXVlbmNlTnVtYmVyID8/IDApXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIG51bVBhdGNoRmlsZXM6IGZpbGVzLmxlbmd0aCxcclxuICAgIHBhdGhTcGVjaWZpZXJUb1BhdGNoRmlsZXMsXHJcbiAgICB3YXJuaW5ncyxcclxuICB9XHJcbn1cclxuIl19
package/dist/path.js ADDED
@@ -0,0 +1,17 @@
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.relative = exports.resolve = exports.dirname = exports.join = void 0;
7
+ const slash_1 = __importDefault(require("slash"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const join = (...args) => (0, slash_1.default)(path_1.default.join(...args));
10
+ exports.join = join;
11
+ var path_2 = require("path");
12
+ Object.defineProperty(exports, "dirname", { enumerable: true, get: function () { return path_2.dirname; } });
13
+ const resolve = (...args) => (0, slash_1.default)(path_1.default.resolve(...args));
14
+ exports.resolve = resolve;
15
+ const relative = (...args) => (0, slash_1.default)(path_1.default.relative(...args));
16
+ exports.relative = relative;
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUF5QjtBQUN6QixnREFBdUI7QUFFaEIsTUFBTSxJQUFJLEdBQXFCLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUEsZUFBSyxFQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQS9ELFFBQUEsSUFBSSxRQUEyRDtBQUU1RSw2QkFBOEI7QUFBckIsK0ZBQUEsT0FBTyxPQUFBO0FBRVQsTUFBTSxPQUFPLEdBQXdCLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUN0RCxJQUFBLGVBQUssRUFBQyxjQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQURqQixRQUFBLE9BQU8sV0FDVTtBQUV2QixNQUFNLFFBQVEsR0FBeUIsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQ3hELElBQUEsZUFBSyxFQUFDLGNBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBRGxCLFFBQUEsUUFBUSxZQUNVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNsYXNoIGZyb20gXCJzbGFzaFwiXHJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcclxuXHJcbmV4cG9ydCBjb25zdCBqb2luOiB0eXBlb2YgcGF0aC5qb2luID0gKC4uLmFyZ3MpID0+IHNsYXNoKHBhdGguam9pbiguLi5hcmdzKSlcclxuXHJcbmV4cG9ydCB7IGRpcm5hbWUgfSBmcm9tIFwicGF0aFwiXHJcblxyXG5leHBvcnQgY29uc3QgcmVzb2x2ZTogdHlwZW9mIHBhdGgucmVzb2x2ZSA9ICguLi5hcmdzKSA9PlxyXG4gIHNsYXNoKHBhdGgucmVzb2x2ZSguLi5hcmdzKSlcclxuXHJcbmV4cG9ydCBjb25zdCByZWxhdGl2ZTogdHlwZW9mIHBhdGgucmVsYXRpdmUgPSAoLi4uYXJncykgPT5cclxuICBzbGFzaChwYXRoLnJlbGF0aXZlKC4uLmFyZ3MpKVxyXG4iXX0=