gitlab-ci-local 4.65.1 → 4.66.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/src/executor.js DELETED
@@ -1,104 +0,0 @@
1
- import chalk from "chalk-template";
2
- import assert, { AssertionError } from "assert";
3
- import pMap from "p-map";
4
- export class Executor {
5
- static async runLoop(argv, jobs, stages, potentialStarters) {
6
- let startCandidates = [];
7
- do {
8
- startCandidates = Executor.getStartCandidates(jobs, stages, potentialStarters, argv.manual);
9
- if (startCandidates.length > 0) {
10
- const mapper = async (startCandidate) => startCandidate.start();
11
- await pMap(startCandidates, mapper, { concurrency: argv.concurrency ?? startCandidates.length });
12
- }
13
- } while (startCandidates.length > 0);
14
- }
15
- static getStartCandidates(jobs, stages, potentialStarters, manuals) {
16
- const startCandidates = [];
17
- for (const job of [...new Set(potentialStarters)]) {
18
- if (job.started)
19
- continue;
20
- const jobsToWaitFor = Executor.getPastToWaitFor(jobs, stages, job, manuals);
21
- if (Executor.isNotFinished(jobsToWaitFor)) {
22
- continue;
23
- }
24
- if (job.when === "on_success" && Executor.isPastFailed(jobsToWaitFor)) {
25
- continue;
26
- }
27
- if (job.when === "manual" && Executor.isPastFailed(jobsToWaitFor)) {
28
- continue;
29
- }
30
- if (job.when === "on_failure" && !Executor.isPastFailed(jobsToWaitFor)) {
31
- continue;
32
- }
33
- startCandidates.push(job);
34
- }
35
- return startCandidates;
36
- }
37
- static isPastFailed(jobsToWaitFor) {
38
- const failJobs = jobsToWaitFor.filter(j => {
39
- if (j.allowFailure) {
40
- return false;
41
- }
42
- return (j.preScriptsExitCode ? j.preScriptsExitCode : 0) > 0;
43
- });
44
- return failJobs.length > 0;
45
- }
46
- static isNotFinished(jobsToWaitFor) {
47
- const notFinishedJobs = jobsToWaitFor.filter(j => !j.finished);
48
- return notFinishedJobs.length > 0;
49
- }
50
- static getFailed(jobs) {
51
- return jobs.filter(j => j.finished && !j.allowFailure && (j.preScriptsExitCode ?? 0) > 0);
52
- }
53
- static getPastToWaitFor(jobs, stages, job, manuals) {
54
- const jobsToWaitForSet = new Set();
55
- let waitForLoopArray = [job];
56
- while (waitForLoopArray.length > 0) {
57
- const loopJob = waitForLoopArray.pop();
58
- assert(loopJob != null, "Job not found in getPastToWaitFor, should be impossible!");
59
- if (loopJob.needs) {
60
- const neededToWaitFor = this.getNeededToWaitFor(jobs, manuals, loopJob);
61
- waitForLoopArray.push(...neededToWaitFor);
62
- }
63
- else {
64
- const previousToWaitFor = this.getPreviousToWaitFor(jobs, stages, loopJob);
65
- waitForLoopArray = waitForLoopArray.concat(previousToWaitFor);
66
- waitForLoopArray = waitForLoopArray.filter(j => j.when !== "never");
67
- waitForLoopArray = waitForLoopArray.filter(j => j.when !== "manual" || manuals.includes(j.name));
68
- }
69
- waitForLoopArray.forEach(j => jobsToWaitForSet.add(j));
70
- }
71
- return [...jobsToWaitForSet];
72
- }
73
- static getNeededToWaitFor(jobs, manuals, job) {
74
- const toWaitFor = [];
75
- assert(job.needs != null, chalk `${job.name}.needs cannot be null in getNeededToWaitFor`);
76
- for (const need of job.needs) {
77
- const baseJobs = jobs.filter(j => j.baseName === need.job);
78
- for (const j of baseJobs) {
79
- if (j.when === "never" && !need.optional) {
80
- throw new AssertionError({ message: chalk `{blueBright ${j.name}} is when:never, but its needed by {blueBright ${job.name}}` });
81
- }
82
- if (j.when === "never" && need.optional) {
83
- continue;
84
- }
85
- if (j.when === "manual" && !manuals.includes(j.name)) {
86
- throw new AssertionError({ message: chalk `{blueBright ${j.name}} is when:manual, its needed by {blueBright ${job.name}}, and not specified in --manual` });
87
- }
88
- assert(job.name !== j.name, chalk `This GitLab CI configuration is invalid: The pipeline has circular dependencies: self-dependency: {blueBright ${need.job}}.`);
89
- toWaitFor.push(j);
90
- }
91
- }
92
- return toWaitFor;
93
- }
94
- static getPreviousToWaitFor(jobs, stages, job) {
95
- const previousToWaitFor = [];
96
- const stageIndex = stages.indexOf(job.stage);
97
- const pastStages = stages.slice(0, stageIndex);
98
- pastStages.forEach((pastStage) => {
99
- previousToWaitFor.push(...[...jobs.values()].filter(j => j.stage === pastStage));
100
- });
101
- return previousToWaitFor;
102
- }
103
- }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJleGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLE1BQU0sRUFBRSxFQUFDLGNBQWMsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUU5QyxPQUFPLElBQUksTUFBTSxPQUFPLENBQUM7QUFFekIsTUFBTSxPQUFPLFFBQVE7SUFFakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUUsSUFBVSxFQUFFLElBQXdCLEVBQUUsTUFBeUIsRUFBRSxpQkFBd0I7UUFDM0csSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBRXpCLEdBQUcsQ0FBQztZQUNBLGVBQWUsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUYsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QixNQUFNLE1BQU0sR0FBRyxLQUFLLEVBQUUsY0FBbUIsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNyRSxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDbkcsQ0FBQztRQUNMLENBQUMsUUFBUSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFFLElBQXdCLEVBQUUsTUFBeUIsRUFBRSxpQkFBaUMsRUFBRSxPQUFpQjtRQUNoSSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFFM0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQU0saUJB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QUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDL0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQzdCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDckYsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLGlCQUFpQixDQUFDO0lBQzdCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGstdGVtcGxhdGVcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2IuanNcIjtcbmltcG9ydCBhc3NlcnQsIHtBc3NlcnRpb25FcnJvcn0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2LmpzXCI7XG5pbXBvcnQgcE1hcCBmcm9tIFwicC1tYXBcIjtcblxuZXhwb3J0IGNsYXNzIEV4ZWN1dG9yIHtcblxuICAgIHN0YXRpYyBhc3luYyBydW5Mb29wIChhcmd2OiBBcmd2LCBqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10sIHBvdGVudGlhbFN0YXJ0ZXJzOiBKb2JbXSkge1xuICAgICAgICBsZXQgc3RhcnRDYW5kaWRhdGVzID0gW107XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgc3RhcnRDYW5kaWRhdGVzID0gRXhlY3V0b3IuZ2V0U3RhcnRDYW5kaWRhdGVzKGpvYnMsIHN0YWdlcywgcG90ZW50aWFsU3RhcnRlcnMsIGFyZ3YubWFudWFsKTtcbiAgICAgICAgICAgIGlmIChzdGFydENhbmRpZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlciA9IGFzeW5jIChzdGFydENhbmRpZGF0ZTogSm9iKSA9PiBzdGFydENhbmRpZGF0ZS5zdGFydCgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHBNYXAoc3RhcnRDYW5kaWRhdGVzLCBtYXBwZXIsIHtjb25jdXJyZW5jeTogYXJndi5jb25jdXJyZW5jeSA/PyBzdGFydENhbmRpZGF0ZXMubGVuZ3RofSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKHN0YXJ0Q2FuZGlkYXRlcy5sZW5ndGggPiAwKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0U3RhcnRDYW5kaWRhdGVzIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10sIHBvdGVudGlhbFN0YXJ0ZXJzOiByZWFkb25seSBKb2JbXSwgbWFudWFsczogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgc3RhcnRDYW5kaWRhdGVzID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2YgWy4uLm5ldyBTZXQ8Sm9iPihwb3RlbnRpYWxTdGFydGVycyldKSB7XG4gICAgICAgICAgICBpZiAoam9iLnN0YXJ0ZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCBqb2JzVG9XYWl0Rm9yID0gRXhlY3V0b3IuZ2V0UGFzdFRvV2FpdEZvcihqb2JzLCBzdGFnZXMsIGpvYiwgbWFudWFscyk7XG4gICAgICAgICAgICBpZiAoRXhlY3V0b3IuaXNOb3RGaW5pc2hlZChqb2JzVG9XYWl0Rm9yKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGpvYi53aGVuID09PSBcIm9uX3N1Y2Nlc3NcIiAmJiBFeGVjdXRvci5pc1Bhc3RGYWlsZWQoam9ic1RvV2FpdEZvcikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqb2Iud2hlbiA9PT0gXCJtYW51YWxcIiAmJiBFeGVjdXRvci5pc1Bhc3RGYWlsZWQoam9ic1RvV2FpdEZvcikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqb2Iud2hlbiA9PT0gXCJvbl9mYWlsdXJlXCIgJiYgIUV4ZWN1dG9yLmlzUGFzdEZhaWxlZChqb2JzVG9XYWl0Rm9yKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGFydENhbmRpZGF0ZXMucHVzaChqb2IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGFydENhbmRpZGF0ZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzUGFzdEZhaWxlZCAoam9ic1RvV2FpdEZvcjogUmVhZG9ubHlBcnJheTxKb2I+KSB7XG4gICAgICAgIGNvbnN0IGZhaWxKb2JzID0gam9ic1RvV2FpdEZvci5maWx0ZXIoaiA9PiB7XG4gICAgICAgICAgICBpZiAoai5hbGxvd0ZhaWx1cmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKGoucHJlU2NyaXB0c0V4aXRDb2RlID8gai5wcmVTY3JpcHRzRXhpdENvZGUgOiAwKSA+IDA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFpbEpvYnMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNOb3RGaW5pc2hlZCAoam9ic1RvV2FpdEZvcjogUmVhZG9ubHlBcnJheTxKb2I+KSB7XG4gICAgICAgIGNvbnN0IG5vdEZpbmlzaGVkSm9icyA9IGpvYnNUb1dhaXRGb3IuZmlsdGVyKGogPT4gIWouZmluaXNoZWQpO1xuICAgICAgICByZXR1cm4gbm90RmluaXNoZWRKb2JzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEZhaWxlZCAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+KSB7XG4gICAgICAgIHJldHVybiBqb2JzLmZpbHRlcihqID0+IGouZmluaXNoZWQgJiYgIWouYWxsb3dGYWlsdXJlICYmIChqLnByZVNjcmlwdHNFeGl0Q29kZSA/PyAwKSA+IDApO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQYXN0VG9XYWl0Rm9yIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10sIGpvYjogSm9iLCBtYW51YWxzOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBqb2JzVG9XYWl0Rm9yU2V0ID0gbmV3IFNldDxKb2I+KCk7XG4gICAgICAgIGxldCB3YWl0Rm9yTG9vcEFycmF5OiBKb2JbXSA9IFtqb2JdO1xuXG4gICAgICAgIHdoaWxlICh3YWl0Rm9yTG9vcEFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxvb3BKb2IgPSB3YWl0Rm9yTG9vcEFycmF5LnBvcCgpO1xuICAgICAgICAgICAgYXNzZXJ0KGxvb3BKb2IgIT0gbnVsbCwgXCJKb2Igbm90IGZvdW5kIGluIGdldFBhc3RUb1dhaXRGb3IsIHNob3VsZCBiZSBpbXBvc3NpYmxlIVwiKTtcbiAgICAgICAgICAgIGlmIChsb29wSm9iLm5lZWRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVlZGVkVG9XYWl0Rm9yID0gdGhpcy5nZXROZWVkZWRUb1dhaXRGb3Ioam9icywgbWFudWFscywgbG9vcEpvYik7XG4gICAgICAgICAgICAgICAgd2FpdEZvckxvb3BBcnJheS5wdXNoKC4uLm5lZWRlZFRvV2FpdEZvcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzVG9XYWl0Rm9yID0gdGhpcy5nZXRQcmV2aW91c1RvV2FpdEZvcihqb2JzLCBzdGFnZXMsIGxvb3BKb2IpO1xuICAgICAgICAgICAgICAgIHdhaXRGb3JMb29wQXJyYXkgPSB3YWl0Rm9yTG9vcEFycmF5LmNvbmNhdChwcmV2aW91c1RvV2FpdEZvcik7XG4gICAgICAgICAgICAgICAgd2FpdEZvckxvb3BBcnJheSA9IHdhaXRGb3JMb29wQXJyYXkuZmlsdGVyKGogPT4gai53aGVuICE9PSBcIm5ldmVyXCIpO1xuICAgICAgICAgICAgICAgIHdhaXRGb3JMb29wQXJyYXkgPSB3YWl0Rm9yTG9vcEFycmF5LmZpbHRlcihqID0+IGoud2hlbiAhPT0gXCJtYW51YWxcIiB8fCBtYW51YWxzLmluY2x1ZGVzKGoubmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2FpdEZvckxvb3BBcnJheS5mb3JFYWNoKGogPT4gam9ic1RvV2FpdEZvclNldC5hZGQoaikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4uam9ic1RvV2FpdEZvclNldF07XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE5lZWRlZFRvV2FpdEZvciAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+LCBtYW51YWxzOiBzdHJpbmdbXSwgam9iOiBKb2IpIHtcbiAgICAgICAgY29uc3QgdG9XYWl0Rm9yID0gW107XG4gICAgICAgIGFzc2VydChqb2IubmVlZHMgIT0gbnVsbCwgY2hhbGtgJHtqb2IubmFtZX0ubmVlZHMgY2Fubm90IGJlIG51bGwgaW4gZ2V0TmVlZGVkVG9XYWl0Rm9yYCk7XG4gICAgICAgIGZvciAoY29uc3QgbmVlZCBvZiBqb2IubmVlZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VKb2JzID0gam9icy5maWx0ZXIoaiA9PiBqLmJhc2VOYW1lID09PSBuZWVkLmpvYik7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGogb2YgYmFzZUpvYnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoai53aGVuID09PSBcIm5ldmVyXCIgJiYgIW5lZWQub3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBjaGFsa2B7Ymx1ZUJyaWdodCAke2oubmFtZX19IGlzIHdoZW46bmV2ZXIsIGJ1dCBpdHMgbmVlZGVkIGJ5IHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fWB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGoud2hlbiA9PT0gXCJuZXZlclwiICYmIG5lZWQub3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChqLndoZW4gPT09IFwibWFudWFsXCIgJiYgIW1hbnVhbHMuaW5jbHVkZXMoai5uYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGNoYWxrYHtibHVlQnJpZ2h0ICR7ai5uYW1lfX0gaXMgd2hlbjptYW51YWwsIGl0cyBuZWVkZWQgYnkge2JsdWVCcmlnaHQgJHtqb2IubmFtZX19LCBhbmQgbm90IHNwZWNpZmllZCBpbiAtLW1hbnVhbGB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGpvYi5uYW1lICE9PSBqLm5hbWUsIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogVGhlIHBpcGVsaW5lIGhhcyBjaXJjdWxhciBkZXBlbmRlbmNpZXM6IHNlbGYtZGVwZW5kZW5jeToge2JsdWVCcmlnaHQgJHtuZWVkLmpvYn19LmApO1xuICAgICAgICAgICAgICAgIHRvV2FpdEZvci5wdXNoKGopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b1dhaXRGb3I7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFByZXZpb3VzVG9XYWl0Rm9yIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10sIGpvYjogSm9iKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzVG9XYWl0Rm9yOiBKb2JbXSA9IFtdO1xuICAgICAgICBjb25zdCBzdGFnZUluZGV4ID0gc3RhZ2VzLmluZGV4T2Yoam9iLnN0YWdlKTtcbiAgICAgICAgY29uc3QgcGFzdFN0YWdlcyA9IHN0YWdlcy5zbGljZSgwLCBzdGFnZUluZGV4KTtcbiAgICAgICAgcGFzdFN0YWdlcy5mb3JFYWNoKChwYXN0U3RhZ2UpID0+IHtcbiAgICAgICAgICAgIHByZXZpb3VzVG9XYWl0Rm9yLnB1c2goLi4uWy4uLmpvYnMudmFsdWVzKCldLmZpbHRlcihqID0+IGouc3RhZ2UgPT09IHBhc3RTdGFnZSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzVG9XYWl0Rm9yO1xuICAgIH1cbn1cbiJdfQ==
package/src/git-data.js DELETED
@@ -1,168 +0,0 @@
1
- import { Utils } from "./utils.js";
2
- import assert, { AssertionError } from "assert";
3
- import chalk from "chalk-template";
4
- export class GitData {
5
- user = {
6
- GITLAB_USER_LOGIN: "local",
7
- GITLAB_USER_EMAIL: "local@gitlab.com",
8
- GITLAB_USER_NAME: "Bob Local",
9
- GITLAB_USER_ID: "1000",
10
- };
11
- branches = {
12
- default: "main",
13
- };
14
- remote = {
15
- schema: "git",
16
- port: "22",
17
- host: "gitlab.com",
18
- group: "fallback.group",
19
- project: "fallback.project",
20
- };
21
- commit = {
22
- REF_NAME: "main",
23
- SHA: "0000000000000000000000000000000000000000",
24
- SHORT_SHA: "00000000",
25
- TIMESTAMP: new Date().toISOString().split(".")[0] + "Z",
26
- };
27
- static async init(cwd, writeStreams) {
28
- const gitData = new GitData();
29
- const promises = [];
30
- promises.push(gitData.initCommitData(cwd, writeStreams));
31
- promises.push(gitData.initRemoteData(cwd, writeStreams));
32
- promises.push(gitData.initUserData(cwd, writeStreams));
33
- promises.push(gitData.initBranchData(cwd, writeStreams));
34
- await Promise.all(promises);
35
- return gitData;
36
- }
37
- async initCommitData(cwd, writeStreams) {
38
- const promises = [];
39
- const refNamePromise = Utils.spawn(["git", "rev-parse", "--abbrev-ref", "HEAD"], cwd);
40
- promises.push(refNamePromise.then(({ stdout }) => {
41
- this.commit.REF_NAME = stdout.trimEnd();
42
- }));
43
- const shaPromise = Utils.spawn(["git", "rev-parse", "HEAD"], cwd);
44
- promises.push(shaPromise.then(({ stdout }) => {
45
- this.commit.SHA = stdout.trimEnd();
46
- }));
47
- try {
48
- await Promise.all(promises);
49
- }
50
- catch (e) {
51
- if (e instanceof AssertionError) {
52
- return writeStreams.stderr(chalk `{yellow ${e.message}}\n`);
53
- }
54
- writeStreams.stderr(chalk `{yellow Using fallback git commit data}\n`);
55
- writeStreams.stderr(chalk `{yellow ${e.message}\n}`);
56
- }
57
- }
58
- async initBranchData(cwd, writeStreams) {
59
- try {
60
- const { stdout: gitRemoteDefaultBranch } = await Utils.spawn(["git", "symbolic-ref", "--short", "refs/remotes/origin/HEAD"], cwd);
61
- this.branches.default = gitRemoteDefaultBranch.replace("origin/", "");
62
- }
63
- catch (e) {
64
- if (e.stderr === "fatal: ref refs/remotes/origin/HEAD is not a symbolic ref") {
65
- writeStreams.stderr(chalk `{yellow Unable to retrieve default remote branch, falling back to \`${this.branches.default}\`. The default remote branch can be set via \`git remote set-head origin <default_branch>\`\n}`);
66
- writeStreams.stderr(chalk `{yellow ${e.message}\n}`);
67
- }
68
- else {
69
- writeStreams.stderr(chalk `{yellow Unable to retrieve default remote branch, falling back to \`${this.branches.default}\`.\n}`);
70
- writeStreams.stderr(chalk `{yellow ${e.message}\n}`);
71
- }
72
- }
73
- }
74
- static changedFiles(defaultBranch, cwd) {
75
- return Utils.syncSpawn(["git", "diff", "--name-only", defaultBranch], cwd).stdout.split("\n");
76
- }
77
- async initRemoteData(cwd, writeStreams) {
78
- try {
79
- let gitRemoteMatch;
80
- let gitRemote;
81
- try {
82
- // NOTE: For power user that wishes to customize the remote url
83
- const res = await Utils.spawn(["git", "remote", "get-url", "gcl-origin"], cwd);
84
- gitRemote = res.stdout;
85
- }
86
- catch {
87
- const res = await Utils.spawn(["git", "remote", "get-url", "origin"], cwd);
88
- gitRemote = res.stdout;
89
- }
90
- // To simplify the regex. Stripping the trailing `/` or `.git` since they're both optional.
91
- const normalizedGitRemote = gitRemote
92
- .replace(/\/$/, "")
93
- .replace(/\.git$/, "");
94
- if (normalizedGitRemote.startsWith("http")) {
95
- gitRemoteMatch = /(?<schema>https?):\/\/(?:([^:]+):([^@]+)@)?(?<host>[^/:]+):?(?<port>\d+)?\/(?<group>\S+)\/(?<project>\S+)/.exec(normalizedGitRemote); // regexr.com/7ve8l
96
- assert(gitRemoteMatch?.groups != null, "git remote get-url origin didn't provide valid matches");
97
- let port = "443";
98
- if (gitRemoteMatch.groups.schema === "https") {
99
- port = gitRemoteMatch.groups.port ?? "443";
100
- }
101
- else if (gitRemoteMatch.groups.schema === "http") {
102
- port = gitRemoteMatch.groups.port ?? "80";
103
- }
104
- this.remote.host = gitRemoteMatch.groups.host;
105
- this.remote.group = gitRemoteMatch.groups.group;
106
- this.remote.project = gitRemoteMatch.groups.project;
107
- this.remote.schema = gitRemoteMatch.groups.schema;
108
- this.remote.port = port;
109
- }
110
- else if (normalizedGitRemote.startsWith("ssh://")) {
111
- gitRemoteMatch = /(?<schema>ssh):\/\/(\w+)@(?<host>[^/:]+):?(?<port>\d+)?\/(?<group>\S+)\/(?<project>\S+)/.exec(normalizedGitRemote); // regexr.com/7vjq4
112
- assert(gitRemoteMatch?.groups != null, "git remote get-url origin didn't provide valid matches");
113
- this.remote.host = gitRemoteMatch.groups.host;
114
- this.remote.group = gitRemoteMatch.groups.group;
115
- this.remote.project = gitRemoteMatch.groups.project;
116
- this.remote.schema = gitRemoteMatch.groups.schema;
117
- this.remote.port = gitRemoteMatch.groups.port ?? "22";
118
- }
119
- else {
120
- gitRemoteMatch = /(?<username>\S+)@(?<host>[^:]+):(?<group>\S+)\/(?<project>\S+)/.exec(normalizedGitRemote); // regexr.com/7vjoq
121
- assert(gitRemoteMatch?.groups != null, "git remote get-url origin didn't provide valid matches");
122
- const { stdout } = await Utils.spawn(["ssh", "-G", `${gitRemoteMatch.groups.username}@${gitRemoteMatch.groups.host}`]);
123
- const port = stdout.split("\n").filter((line) => line.startsWith("port "))[0].split(" ")[1];
124
- this.remote.host = gitRemoteMatch.groups.host;
125
- this.remote.group = gitRemoteMatch.groups.group;
126
- this.remote.project = gitRemoteMatch.groups.project;
127
- this.remote.schema = "git";
128
- this.remote.port = port;
129
- }
130
- }
131
- catch (e) {
132
- if (e instanceof AssertionError) {
133
- writeStreams.stderr(chalk `{yellow ${e.message}}\n`);
134
- return;
135
- }
136
- writeStreams.stderr(chalk `{yellow Using fallback git remote data}\n`);
137
- writeStreams.stderr(chalk `{yellow ${e.message}\n}`);
138
- }
139
- }
140
- async initUserData(cwd, writeStreams) {
141
- const promises = [];
142
- const gitUsernamePromise = Utils.spawn(["git", "config", "user.name"], cwd).then(({ stdout }) => {
143
- this.user.GITLAB_USER_NAME = stdout.trimEnd();
144
- }).catch((e) => {
145
- writeStreams.stderr(chalk `{yellow Using fallback git user.name}\n`);
146
- writeStreams.stderr(chalk `{yellow ${e.message}\n}`);
147
- });
148
- promises.push(gitUsernamePromise);
149
- const gitEmailPromise = Utils.spawn(["git", "config", "user.email"], cwd).then(({ stdout }) => {
150
- const email = stdout.trimEnd();
151
- this.user.GITLAB_USER_EMAIL = email;
152
- this.user.GITLAB_USER_LOGIN = email.replace(/@.*/, "");
153
- }).catch((e) => {
154
- writeStreams.stderr(chalk `{yellow Using fallback git user.email}\n`);
155
- writeStreams.stderr(chalk `{yellow ${e.message}\n}`);
156
- });
157
- promises.push(gitEmailPromise);
158
- const osUidPromise = Utils.spawn(["id", "-u"], cwd).then(({ stdout }) => {
159
- this.user.GITLAB_USER_ID = stdout.trimEnd();
160
- }).catch((e) => {
161
- writeStreams.stderr(chalk `{yellow Using fallback linux user id}\n`);
162
- writeStreams.stderr(chalk `{yellow ${e.message}\n}`);
163
- });
164
- promises.push(osUidPromise);
165
- await Promise.all(promises);
166
- }
167
- }
168
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnaXQtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sTUFBTSxFQUFFLEVBQUMsY0FBYyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTlDLE9BQU8sS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBSW5DLE1BQU0sT0FBTyxPQUFPO0lBRUEsSUFBSSxHQUFHO1FBQ25CLGlCQUFpQixFQUFFLE9BQU87UUFDMUIsaUJBQWlCLEVBQUUsa0JBQWtCO1FBQ3JDLGdCQUFnQixFQUFFLFdBQVc7UUFDN0IsY0FBYyxFQUFFLE1BQU07S0FDekIsQ0FBQztJQUVjLFFBQVEsR0FBRztRQUN2QixPQUFPLEVBQUUsTUFBTTtLQUNsQixDQUFDO0lBRWMsTUFBTSxHQUFHO1FBQ3JCLE1BQU0sRUFBRSxLQUFrQjtRQUMxQixJQUFJLEVBQUUsSUFBSTtRQUNWLElBQUksRUFBRSxZQUFZO1FBQ2xCLEtBQUssRUFBRSxnQkFBZ0I7UUFDdkIsT0FBTyxFQUFFLGtCQUFrQjtLQUM5QixDQUFDO0lBRWMsTUFBTSxHQUFHO1FBQ3JCLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLEdBQUcsRUFBRSwwQ0FBMEM7UUFDL0MsU0FBUyxFQUFFLFVBQVU7UUFDckIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7S0FDMUQsQ0FBQztJQUVGLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFFLEdBQVcsRUFBRSxZQUEwQjtRQUN0RCxNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMs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QUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUU7WUFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1gsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUEseUNBQXlDLENBQUMsQ0FBQztZQUNwRSxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQSxhQUFhLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU1QixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHMuanNcIjtcbmltcG9ydCBhc3NlcnQsIHtBc3NlcnRpb25FcnJvcn0gZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtXcml0ZVN0cmVhbXN9IGZyb20gXCIuL3dyaXRlLXN0cmVhbXMuanNcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGstdGVtcGxhdGVcIjtcblxuZXhwb3J0IHR5cGUgR2l0U2NoZW1hID0gXCJnaXRcIiB8IFwiaHR0cFwiIHwgXCJodHRwc1wiIHwgXCJzc2hcIjtcblxuZXhwb3J0IGNsYXNzIEdpdERhdGEge1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHVzZXIgPSB7XG4gICAgICAgIEdJVExBQl9VU0VSX0xPR0lOOiBcImxvY2FsXCIsXG4gICAgICAgIEdJVExBQl9VU0VSX0VNQUlMOiBcImxvY2FsQGdpdGxhYi5jb21cIixcbiAgICAgICAgR0lUTEFCX1VTRVJfTkFNRTogXCJCb2IgTG9jYWxcIixcbiAgICAgICAgR0lUTEFCX1VTRVJfSUQ6IFwiMTAwMFwiLFxuICAgIH07XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgYnJhbmNoZXMgPSB7XG4gICAgICAgIGRlZmF1bHQ6IFwibWFpblwiLFxuICAgIH07XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVtb3RlID0ge1xuICAgICAgICBzY2hlbWE6IFwiZ2l0XCIgYXMgR2l0U2NoZW1hLFxuICAgICAgICBwb3J0OiBcIjIyXCIsXG4gICAgICAgIGhvc3Q6IFwiZ2l0bGFiLmNvbVwiLFxuICAgICAgICBncm91cDogXCJmYWxsYmFjay5ncm91cFwiLFxuICAgICAgICBwcm9qZWN0OiBcImZhbGxiYWNrLnByb2plY3RcIixcbiAgICB9O1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbW1pdCA9IHtcbiAgICAgICAgUkVGX05BTUU6IFwibWFpblwiLFxuICAgICAgICBTSEE6IFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFxuICAgICAgICBTSE9SVF9TSEE6IFwiMDAwMDAwMDBcIixcbiAgICAgICAgVElNRVNUQU1QOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzBdICsgXCJaXCIsXG4gICAgfTtcblxuICAgIHN0YXRpYyBhc3luYyBpbml0IChjd2Q6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpOiBQcm9taXNlPEdpdERhdGE+IHtcbiAgICAgICAgY29uc3QgZ2l0RGF0YSA9IG5ldyBHaXREYXRhKCk7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIHByb21pc2VzLnB1c2goZ2l0RGF0YS5pbml0Q29tbWl0RGF0YShjd2QsIHdyaXRlU3RyZWFtcykpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKGdpdERhdGEuaW5pdFJlbW90ZURhdGEoY3dkLCB3cml0ZVN0cmVhbXMpKTtcbiAgICAgICAgcHJvbWlzZXMucHVzaChnaXREYXRhLmluaXRVc2VyRGF0YShjd2QsIHdyaXRlU3RyZWFtcykpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKGdpdERhdGEuaW5pdEJyYW5jaERhdGEoY3dkLCB3cml0ZVN0cmVhbXMpKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICByZXR1cm4gZ2l0RGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRDb21taXREYXRhIChjd2Q6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgICBjb25zdCByZWZOYW1lUHJvbWlzZSA9IFV0aWxzLnNwYXduKFtcImdpdFwiLCBcInJldi1wYXJzZVwiLCBcIi0tYWJicmV2LXJlZlwiLCBcIkhFQURcIl0sIGN3ZCk7XG4gICAgICAgIHByb21pc2VzLnB1c2gocmVmTmFtZVByb21pc2UudGhlbigoe3N0ZG91dH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tbWl0LlJFRl9OQU1FID0gc3Rkb3V0LnRyaW1FbmQoKTtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IHNoYVByb21pc2UgPSBVdGlscy5zcGF3bihbXCJnaXRcIiwgXCJyZXYtcGFyc2VcIiwgXCJIRUFEXCJdLCBjd2QpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKHNoYVByb21pc2UudGhlbigoe3N0ZG91dH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29tbWl0LlNIQSA9IHN0ZG91dC50cmltRW5kKCk7XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgQXNzZXJ0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICR7ZS5tZXNzYWdlfX1cXG5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyBVc2luZyBmYWxsYmFjayBnaXQgY29tbWl0IGRhdGF9XFxuYCk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgICAke2UubWVzc2FnZX1cXG59YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRCcmFuY2hEYXRhIChjd2Q6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHtzdGRvdXQ6IGdpdFJlbW90ZURlZmF1bHRCcmFuY2h9ID0gYXdhaXQgVXRpbHMuc3Bhd24oW1wiZ2l0XCIsIFwic3ltYm9saWMtcmVmXCIsIFwiLS1zaG9ydFwiLCBcInJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRFwiXSwgY3dkKTtcbiAgICAgICAgICAgIHRoaXMuYnJhbmNoZXMuZGVmYXVsdCA9IGdpdFJlbW90ZURlZmF1bHRCcmFuY2gucmVwbGFjZShcIm9yaWdpbi9cIiwgXCJcIik7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgaWYgKGUuc3RkZXJyID09PSBcImZhdGFsOiByZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIGlzIG5vdCBhIHN5bWJvbGljIHJlZlwiKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93IFVuYWJsZSB0byByZXRyaWV2ZSBkZWZhdWx0IHJlbW90ZSBicmFuY2gsIGZhbGxpbmcgYmFjayB0byBcXGAke3RoaXMuYnJhbmNoZXMuZGVmYXVsdH1cXGAuIFRoZSBkZWZhdWx0IHJlbW90ZSBicmFuY2ggY2FuIGJlIHNldCB2aWEgXFxgZ2l0IHJlbW90ZSBzZXQtaGVhZCBvcmlnaW4gPGRlZmF1bHRfYnJhbmNoPlxcYFxcbn1gKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgICAke2UubWVzc2FnZX1cXG59YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyBVbmFibGUgdG8gcmV0cmlldmUgZGVmYXVsdCByZW1vdGUgYnJhbmNoLCBmYWxsaW5nIGJhY2sgdG8gXFxgJHt0aGlzLmJyYW5jaGVzLmRlZmF1bHR9XFxgLlxcbn1gKTtcbiAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgICAke2UubWVzc2FnZX1cXG59YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgY2hhbmdlZEZpbGVzIChkZWZhdWx0QnJhbmNoOiBzdHJpbmcsIGN3ZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBVdGlscy5zeW5jU3Bhd24oW1wiZ2l0XCIsIFwiZGlmZlwiLCBcIi0tbmFtZS1vbmx5XCIsIGRlZmF1bHRCcmFuY2hdLCBjd2QpLnN0ZG91dC5zcGxpdChcIlxcblwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluaXRSZW1vdGVEYXRhIChjd2Q6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBnaXRSZW1vdGVNYXRjaDtcbiAgICAgICAgICAgIGxldCBnaXRSZW1vdGU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIE5PVEU6IEZvciBwb3dlciB1c2VyIHRoYXQgd2lzaGVzIHRvIGN1c3RvbWl6ZSB0aGUgcmVtb3RlIHVybFxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IFV0aWxzLnNwYXduKFtcImdpdFwiLCBcInJlbW90ZVwiLCBcImdldC11cmxcIiwgXCJnY2wtb3JpZ2luXCJdLCBjd2QpO1xuICAgICAgICAgICAgICAgIGdpdFJlbW90ZSA9IHJlcy5zdGRvdXQ7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBVdGlscy5zcGF3bihbXCJnaXRcIiwgXCJyZW1vdGVcIiwgXCJnZXQtdXJsXCIsIFwib3JpZ2luXCJdLCBjd2QpO1xuICAgICAgICAgICAgICAgIGdpdFJlbW90ZSA9IHJlcy5zdGRvdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFRvIHNpbXBsaWZ5IHRoZSByZWdleC4gU3RyaXBwaW5nIHRoZSB0cmFpbGluZyBgL2Agb3IgYC5naXRgIHNpbmNlIHRoZXkncmUgYm90aCBvcHRpb25hbC5cbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRHaXRSZW1vdGUgPSBnaXRSZW1vdGVcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwvJC8sIFwiXCIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLmdpdCQvLCBcIlwiKTtcblxuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRHaXRSZW1vdGUuc3RhcnRzV2l0aChcImh0dHBcIikpIHtcbiAgICAgICAgICAgICAgICBnaXRSZW1vdGVNYXRjaCA9IC8oPzxzY2hlbWE+aHR0cHM/KTpcXC9cXC8oPzooW146XSspOihbXkBdKylAKT8oPzxob3N0PlteLzpdKyk6Pyg/PHBvcnQ+XFxkKyk/XFwvKD88Z3JvdXA+XFxTKylcXC8oPzxwcm9qZWN0PlxcUyspLy5leGVjKG5vcm1hbGl6ZWRHaXRSZW1vdGUpOyAvLyByZWdleHIuY29tLzd2ZThsXG4gICAgICAgICAgICAgICAgYXNzZXJ0KGdpdFJlbW90ZU1hdGNoPy5ncm91cHMgIT0gbnVsbCwgXCJnaXQgcmVtb3RlIGdldC11cmwgb3JpZ2luIGRpZG4ndCBwcm92aWRlIHZhbGlkIG1hdGNoZXNcIik7XG5cbiAgICAgICAgICAgICAgICBsZXQgcG9ydCA9IFwiNDQzXCI7XG4gICAgICAgICAgICAgICAgaWYgKGdpdFJlbW90ZU1hdGNoLmdyb3Vwcy5zY2hlbWEgPT09IFwiaHR0cHNcIikge1xuICAgICAgICAgICAgICAgICAgICBwb3J0ID0gZ2l0UmVtb3RlTWF0Y2guZ3JvdXBzLnBvcnQgPz8gXCI0NDNcIjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGdpdFJlbW90ZU1hdGNoLmdyb3Vwcy5zY2hlbWEgPT09IFwiaHR0cFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcnQgPSBnaXRSZW1vdGVNYXRjaC5ncm91cHMucG9ydCA/PyBcIjgwXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3RlLmhvc3QgPSBnaXRSZW1vdGVNYXRjaC5ncm91cHMuaG9zdDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW90ZS5ncm91cCA9IGdpdFJlbW90ZU1hdGNoLmdyb3Vwcy5ncm91cDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW90ZS5wcm9qZWN0ID0gZ2l0UmVtb3RlTWF0Y2guZ3JvdXBzLnByb2plY3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdGUuc2NoZW1hID0gZ2l0UmVtb3RlTWF0Y2guZ3JvdXBzLnNjaGVtYSBhcyBHaXRTY2hlbWE7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdGUucG9ydCA9IHBvcnQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRHaXRSZW1vdGUuc3RhcnRzV2l0aChcInNzaDovL1wiKSkge1xuICAgICAgICAgICAgICAgIGdpdFJlbW90ZU1hdGNoID0gLyg/PHNjaGVtYT5zc2gpOlxcL1xcLyhcXHcrKUAoPzxob3N0PlteLzpdKyk6Pyg/PHBvcnQ+XFxkKyk/XFwvKD88Z3JvdXA+XFxTKylcXC8oPzxwcm9qZWN0PlxcUyspLy5leGVjKG5vcm1hbGl6ZWRHaXRSZW1vdGUpOyAvLyByZWdleHIuY29tLzd2anE0XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGdpdFJlbW90ZU1hdGNoPy5ncm91cHMgIT0gbnVsbCwgXCJnaXQgcmVtb3RlIGdldC11cmwgb3JpZ2luIGRpZG4ndCBwcm92aWRlIHZhbGlkIG1hdGNoZXNcIik7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJlbW90ZS5ob3N0ID0gZ2l0UmVtb3RlTWF0Y2guZ3JvdXBzLmhvc3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdGUuZ3JvdXAgPSBnaXRSZW1vdGVNYXRjaC5ncm91cHMuZ3JvdXA7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdGUucHJvamVjdCA9IGdpdFJlbW90ZU1hdGNoLmdyb3Vwcy5wcm9qZWN0O1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3RlLnNjaGVtYSA9IGdpdFJlbW90ZU1hdGNoLmdyb3Vwcy5zY2hlbWEgYXMgR2l0U2NoZW1hO1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3RlLnBvcnQgPSBnaXRSZW1vdGVNYXRjaC5ncm91cHMucG9ydCA/PyBcIjIyXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdpdFJlbW90ZU1hdGNoID0gLyg/PHVzZXJuYW1lPlxcUyspQCg/PGhvc3Q+W146XSspOig/PGdyb3VwPlxcUyspXFwvKD88cHJvamVjdD5cXFMrKS8uZXhlYyhub3JtYWxpemVkR2l0UmVtb3RlKTsgLy8gcmVnZXhyLmNvbS83dmpvcVxuICAgICAgICAgICAgICAgIGFzc2VydChnaXRSZW1vdGVNYXRjaD8uZ3JvdXBzICE9IG51bGwsIFwiZ2l0IHJlbW90ZSBnZXQtdXJsIG9yaWdpbiBkaWRuJ3QgcHJvdmlkZSB2YWxpZCBtYXRjaGVzXCIpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qge3N0ZG91dH0gPSBhd2FpdCBVdGlscy5zcGF3bihbXCJzc2hcIiwgXCItR1wiLCBgJHtnaXRSZW1vdGVNYXRjaC5ncm91cHMudXNlcm5hbWV9QCR7Z2l0UmVtb3RlTWF0Y2guZ3JvdXBzLmhvc3R9YF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBzdGRvdXQuc3BsaXQoXCJcXG5cIikuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoXCJwb3J0IFwiKSlbMF0uc3BsaXQoXCIgXCIpWzFdO1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3RlLmhvc3QgPSBnaXRSZW1vdGVNYXRjaC5ncm91cHMuaG9zdDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW90ZS5ncm91cCA9IGdpdFJlbW90ZU1hdGNoLmdyb3Vwcy5ncm91cDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW90ZS5wcm9qZWN0ID0gZ2l0UmVtb3RlTWF0Y2guZ3JvdXBzLnByb2plY3Q7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdGUuc2NoZW1hID0gXCJnaXRcIjtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW90ZS5wb3J0ID0gcG9ydDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEFzc2VydGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICR7ZS5tZXNzYWdlfX1cXG5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgVXNpbmcgZmFsbGJhY2sgZ2l0IHJlbW90ZSBkYXRhfVxcbmApO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICAgJHtlLm1lc3NhZ2V9XFxufWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgaW5pdFVzZXJEYXRhIChjd2Q6IHN0cmluZywgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcblxuICAgICAgICBjb25zdCBnaXRVc2VybmFtZVByb21pc2UgPSBVdGlscy5zcGF3bihbXCJnaXRcIiwgXCJjb25maWdcIiwgXCJ1c2VyLm5hbWVcIl0sIGN3ZCkudGhlbigoe3N0ZG91dH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMudXNlci5HSVRMQUJfVVNFUl9OQU1FID0gc3Rkb3V0LnRyaW1FbmQoKTtcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyBVc2luZyBmYWxsYmFjayBnaXQgdXNlci5uYW1lfVxcbmApO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICAgJHtlLm1lc3NhZ2V9XFxufWApO1xuICAgICAgICB9KTtcbiAgICAgICAgcHJvbWlzZXMucHVzaChnaXRVc2VybmFtZVByb21pc2UpO1xuXG4gICAgICAgIGNvbnN0IGdpdEVtYWlsUHJvbWlzZSA9IFV0aWxzLnNwYXduKFtcImdpdFwiLCBcImNvbmZpZ1wiLCBcInVzZXIuZW1haWxcIl0sIGN3ZCkudGhlbigoe3N0ZG91dH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVtYWlsID0gc3Rkb3V0LnRyaW1FbmQoKTtcbiAgICAgICAgICAgIHRoaXMudXNlci5HSVRMQUJfVVNFUl9FTUFJTCA9IGVtYWlsO1xuICAgICAgICAgICAgdGhpcy51c2VyLkdJVExBQl9VU0VSX0xPR0lOID0gZW1haWwucmVwbGFjZSgvQC4qLywgXCJcIik7XG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgVXNpbmcgZmFsbGJhY2sgZ2l0IHVzZXIuZW1haWx9XFxuYCk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgICAke2UubWVzc2FnZX1cXG59YCk7XG4gICAgICAgIH0pO1xuICAgICAgICBwcm9taXNlcy5wdXNoKGdpdEVtYWlsUHJvbWlzZSk7XG5cbiAgICAgICAgY29uc3Qgb3NVaWRQcm9taXNlID0gVXRpbHMuc3Bhd24oW1wiaWRcIiwgXCItdVwiXSwgY3dkKS50aGVuKCh7c3Rkb3V0fSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51c2VyLkdJVExBQl9VU0VSX0lEID0gc3Rkb3V0LnRyaW1FbmQoKTtcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyBVc2luZyBmYWxsYmFjayBsaW51eCB1c2VyIGlkfVxcbmApO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7eWVsbG93ICAgJHtlLm1lc3NhZ2V9XFxufWApO1xuICAgICAgICB9KTtcbiAgICAgICAgcHJvbWlzZXMucHVzaChvc1VpZFByb21pc2UpO1xuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICB9XG59XG4iXX0=
@@ -1,24 +0,0 @@
1
- export var GitlabRunnerPreset;
2
- (function (GitlabRunnerPreset) {
3
- GitlabRunnerPreset["SMALL"] = "saas-linux-small";
4
- GitlabRunnerPreset["MEDIUM"] = "saas-linux-medium";
5
- GitlabRunnerPreset["LARGE"] = "saas-linux-large";
6
- GitlabRunnerPreset["XLARGE"] = "saas-linux-xlarge";
7
- GitlabRunnerPreset["TWO_XLARGE"] = "saas-linux-2xlarge";
8
- })(GitlabRunnerPreset || (GitlabRunnerPreset = {}));
9
- export const GitlabRunnerPresetValues = Object.values(GitlabRunnerPreset);
10
- export const GitlabRunnerMemoryPresetValue = {
11
- [GitlabRunnerPreset.SMALL]: 8 * 1024,
12
- [GitlabRunnerPreset.MEDIUM]: 16 * 1024,
13
- [GitlabRunnerPreset.LARGE]: 32 * 1024,
14
- [GitlabRunnerPreset.XLARGE]: 64 * 1024,
15
- [GitlabRunnerPreset.TWO_XLARGE]: 128 * 1024,
16
- };
17
- export const GitlabRunnerCPUsPresetValue = {
18
- [GitlabRunnerPreset.SMALL]: 2,
19
- [GitlabRunnerPreset.MEDIUM]: 4,
20
- [GitlabRunnerPreset.LARGE]: 8,
21
- [GitlabRunnerPreset.XLARGE]: 16,
22
- [GitlabRunnerPreset.TWO_XLARGE]: 32,
23
- };
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0bGFiLXByZXNldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImdpdGxhYi1wcmVzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksa0JBTVg7QUFORCxXQUFZLGtCQUFrQjtJQUMxQixnREFBMEIsQ0FBQTtJQUMxQixrREFBNEIsQ0FBQTtJQUM1QixnREFBMEIsQ0FBQTtJQUMxQixrREFBNEIsQ0FBQTtJQUM1Qix1REFBaUMsQ0FBQTtBQUNyQyxDQUFDLEVBTlcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQU03QjtBQUVELE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFhLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUVwRixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBMkI7SUFDakUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSTtJQUNwQyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJO0lBQ3RDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUk7SUFDckMsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSTtJQUN0QyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJO0NBQzlDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBMkI7SUFDL0QsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQzdCLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUM5QixDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDN0IsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFO0lBQy9CLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRTtDQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gR2l0bGFiUnVubmVyUHJlc2V0IHtcbiAgICBTTUFMTCA9IFwic2Fhcy1saW51eC1zbWFsbFwiLFxuICAgIE1FRElVTSA9IFwic2Fhcy1saW51eC1tZWRpdW1cIixcbiAgICBMQVJHRSA9IFwic2Fhcy1saW51eC1sYXJnZVwiLFxuICAgIFhMQVJHRSA9IFwic2Fhcy1saW51eC14bGFyZ2VcIixcbiAgICBUV09fWExBUkdFID0gXCJzYWFzLWxpbnV4LTJ4bGFyZ2VcIixcbn1cblxuZXhwb3J0IGNvbnN0IEdpdGxhYlJ1bm5lclByZXNldFZhbHVlczogc3RyaW5nW10gPSBPYmplY3QudmFsdWVzKEdpdGxhYlJ1bm5lclByZXNldCk7XG5cbmV4cG9ydCBjb25zdCBHaXRsYWJSdW5uZXJNZW1vcnlQcmVzZXRWYWx1ZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgICBbR2l0bGFiUnVubmVyUHJlc2V0LlNNQUxMXTogOCAqIDEwMjQsXG4gICAgW0dpdGxhYlJ1bm5lclByZXNldC5NRURJVU1dOiAxNiAqIDEwMjQsXG4gICAgW0dpdGxhYlJ1bm5lclByZXNldC5MQVJHRV06IDMyICogMTAyNCxcbiAgICBbR2l0bGFiUnVubmVyUHJlc2V0LlhMQVJHRV06IDY0ICogMTAyNCxcbiAgICBbR2l0bGFiUnVubmVyUHJlc2V0LlRXT19YTEFSR0VdOiAxMjggKiAxMDI0LFxufTtcblxuZXhwb3J0IGNvbnN0IEdpdGxhYlJ1bm5lckNQVXNQcmVzZXRWYWx1ZTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgICBbR2l0bGFiUnVubmVyUHJlc2V0LlNNQUxMXTogMixcbiAgICBbR2l0bGFiUnVubmVyUHJlc2V0Lk1FRElVTV06IDQsXG4gICAgW0dpdGxhYlJ1bm5lclByZXNldC5MQVJHRV06IDgsXG4gICAgW0dpdGxhYlJ1bm5lclByZXNldC5YTEFSR0VdOiAxNixcbiAgICBbR2l0bGFiUnVubmVyUHJlc2V0LlRXT19YTEFSR0VdOiAzMixcbn07XG4iXX0=
package/src/global.js DELETED
@@ -1,40 +0,0 @@
1
- String.prototype.matchRE2JS = function (o) {
2
- let results = null;
3
- const matcher = o.matcher(this.toString());
4
- while (matcher.find()) {
5
- const g = matcher.group();
6
- if (g == null || g == "")
7
- continue;
8
- results = results ?? [];
9
- results.push(g);
10
- }
11
- return results;
12
- };
13
- String.prototype.matchAllRE2JS = function (o) {
14
- const self = this.toString();
15
- const matcher = o.matcher(self);
16
- function* iterator() {
17
- while (matcher.find()) {
18
- const match = [];
19
- for (let i = 0; i <= matcher.groupCount(); i++) {
20
- match.push(matcher.group(i));
21
- }
22
- match.index = matcher.groups[0];
23
- match.input = self;
24
- if (matcher.namedGroups && Object.keys(matcher.namedGroups).length > 0) {
25
- const groups = Object.create(null);
26
- for (const [name, value] of Object.entries(matcher.namedGroups)) {
27
- groups[name] = matcher.group(value);
28
- }
29
- match.groups = groups;
30
- }
31
- else {
32
- match.groups = undefined;
33
- }
34
- yield match;
35
- }
36
- }
37
- return iterator();
38
- };
39
- export {};
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2xvYmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBUTtJQUM1QyxJQUFJLE9BQU8sR0FBb0IsSUFBSSxDQUFDO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0MsT0FBTyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNwQixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUUsU0FBUztRQUNuQyxPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQVE7SUFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEMsUUFBUSxDQUFDLENBQUMsUUFBUTtRQUNkLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDcEIsTUFBTSxLQUFLLEdBQW1CLEVBQStCLENBQUM7WUFDOUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUM3QyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBRW5CLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFxQyxDQUFDLEVBQUUsQ0FBQztvQkFDeEYsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDMUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQzdCLENBQUM7WUFFRCxNQUFNLEtBQUssQ0FBQztRQUNoQixDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sUUFBUSxFQUFFLENBQUM7QUFDdEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSRTJKU30gZnJvbSBcInJlMmpzXCI7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICBpbnRlcmZhY2UgU3RyaW5nIHtcbiAgICAgICAgbWF0Y2hSRTJKUyhvOiBSRTJKUyk6IEFycmF5PHN0cmluZz4gfCBudWxsO1xuICAgICAgICBtYXRjaEFsbFJFMkpTKG86IFJFMkpTKTogSXRlcmFibGVJdGVyYXRvcjxSZWdFeHBNYXRjaEFsbD47XG4gICAgfVxufVxuXG5pbnRlcmZhY2UgUmVnRXhwTWF0Y2hBbGwgZXh0ZW5kcyBBcnJheTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaW5kZXg/OiBudW1iZXI7XG4gICAgaW5wdXQ/OiBzdHJpbmc7XG4gICAgZ3JvdXBzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkO1xufVxuXG5TdHJpbmcucHJvdG90eXBlLm1hdGNoUkUySlMgPSBmdW5jdGlvbiAobzogUkUySlMpOiBBcnJheTxzdHJpbmc+IHwgbnVsbCB7XG4gICAgbGV0IHJlc3VsdHM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgbWF0Y2hlciA9IG8ubWF0Y2hlcih0aGlzLnRvU3RyaW5nKCkpO1xuICAgIHdoaWxlIChtYXRjaGVyLmZpbmQoKSkge1xuICAgICAgICBjb25zdCBnID0gbWF0Y2hlci5ncm91cCgpO1xuICAgICAgICBpZiAoZyA9PSBudWxsIHx8IGcgPT0gXCJcIikgY29udGludWU7XG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzID8/IFtdO1xuICAgICAgICByZXN1bHRzLnB1c2goZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xufTtcblxuU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbFJFMkpTID0gZnVuY3Rpb24gKG86IFJFMkpTKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXMudG9TdHJpbmcoKTtcbiAgICBjb25zdCBtYXRjaGVyID0gby5tYXRjaGVyKHNlbGYpO1xuXG4gICAgZnVuY3Rpb24qIGl0ZXJhdG9yICgpOiBJdGVyYWJsZUl0ZXJhdG9yPFJlZ0V4cE1hdGNoQWxsPiB7XG4gICAgICAgIHdoaWxlIChtYXRjaGVyLmZpbmQoKSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2g6IFJlZ0V4cE1hdGNoQWxsID0gW10gYXMgdW5rbm93biBhcyBSZWdFeHBNYXRjaEFsbDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IG1hdGNoZXIuZ3JvdXBDb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAgICAgICBtYXRjaC5wdXNoKG1hdGNoZXIuZ3JvdXAoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaGVyLmdyb3Vwc1swXTtcbiAgICAgICAgICAgIG1hdGNoLmlucHV0ID0gc2VsZjtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZXIubmFtZWRHcm91cHMgJiYgT2JqZWN0LmtleXMobWF0Y2hlci5uYW1lZEdyb3VwcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1hdGNoZXIubmFtZWRHcm91cHMgYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPikpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW25hbWVdID0gbWF0Y2hlci5ncm91cCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1hdGNoLmdyb3VwcyA9IGdyb3VwcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWF0Y2guZ3JvdXBzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB5aWVsZCBtYXRjaDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpdGVyYXRvcigpO1xufTtcbiJdfQ==
package/src/handler.js DELETED
@@ -1,119 +0,0 @@
1
- import * as yaml from "js-yaml";
2
- import chalk from "chalk-template";
3
- import path from "path";
4
- import fs from "fs-extra";
5
- import yargs from "yargs";
6
- import { Commander } from "./commander.js";
7
- import { Parser } from "./parser.js";
8
- import * as state from "./state.js";
9
- import prettyHrtime from "pretty-hrtime";
10
- import { cleanupJobResources } from "./job.js";
11
- import { Utils } from "./utils.js";
12
- import { Argv } from "./argv.js";
13
- import assert from "assert";
14
- const generateGitIgnore = (cwd, stateDir) => {
15
- const gitIgnoreFilePath = `${cwd}/${stateDir}/.gitignore`;
16
- const gitIgnoreContent = "*\n!.gitignore\n";
17
- if (!fs.existsSync(gitIgnoreFilePath)) {
18
- fs.outputFileSync(gitIgnoreFilePath, gitIgnoreContent);
19
- }
20
- };
21
- export async function handler(args, writeStreams, jobs = [], childPipelineDepth = 0) {
22
- assert(childPipelineDepth <= 2, "Parent and child pipelines have a maximum depth of two levels of child pipelines.");
23
- const argv = await Argv.build({ ...args, childPipelineDepth: childPipelineDepth }, writeStreams);
24
- const cwd = argv.cwd;
25
- const stateDir = argv.stateDir;
26
- const file = argv.file;
27
- let parser = null;
28
- if (argv.completion) {
29
- yargs(process.argv.slice(2)).showCompletionScript();
30
- return [];
31
- }
32
- assert(fs.existsSync(`${cwd}/${file}`), `${path.resolve(cwd)}/${file} could not be found`);
33
- if (argv.preview) {
34
- const pipelineIid = await state.getPipelineIid(cwd, stateDir);
35
- parser = await Parser.create(argv, writeStreams, pipelineIid, jobs, false);
36
- const gitlabData = parser.gitlabData;
37
- for (const jobName of Object.keys(gitlabData)) {
38
- if (jobName === "stages") {
39
- continue;
40
- }
41
- if (jobName.startsWith(".") || ["include", "after_script", "before_script", "default"].includes(jobName)) {
42
- // Remove since these are redundant info which are already "extended" in the jobs
43
- delete gitlabData[jobName];
44
- }
45
- }
46
- writeStreams.stdout(`---\n${yaml.dump(gitlabData, { lineWidth: 160 })}`);
47
- }
48
- else if (argv.list || argv.listAll) {
49
- const pipelineIid = await state.getPipelineIid(cwd, stateDir);
50
- parser = await Parser.create(argv, writeStreams, pipelineIid, jobs);
51
- Commander.runList(parser, writeStreams, argv.listAll);
52
- }
53
- else if (argv.validateDependencyChain) {
54
- const pipelineIid = await state.getPipelineIid(cwd, stateDir);
55
- parser = await Parser.create(argv, writeStreams, pipelineIid, jobs);
56
- Commander.validateDependencyChain(parser);
57
- writeStreams.stdout(chalk `{green ✓ All job dependencies are valid}\n`);
58
- }
59
- else if (argv.listJson) {
60
- const pipelineIid = await state.getPipelineIid(cwd, stateDir);
61
- parser = await Parser.create(argv, writeStreams, pipelineIid, jobs);
62
- Commander.runJson(parser, writeStreams);
63
- }
64
- else if (argv.listCsv || argv.listCsvAll) {
65
- const pipelineIid = await state.getPipelineIid(cwd, stateDir);
66
- parser = await Parser.create(argv, writeStreams, pipelineIid, jobs);
67
- Commander.runCsv(parser, writeStreams, argv.listCsvAll);
68
- }
69
- else if (argv.job.length > 0) {
70
- assert(argv.stage === null, "You cannot use --stage when starting individual jobs");
71
- if (argv.registry) {
72
- await Utils.startDockerRegistry(argv);
73
- }
74
- generateGitIgnore(cwd, stateDir);
75
- const time = process.hrtime();
76
- if (argv.needs || argv.onlyNeeds) {
77
- await state.incrementPipelineIid(cwd, stateDir);
78
- }
79
- const pipelineIid = await state.getPipelineIid(cwd, stateDir);
80
- parser = await Parser.create(argv, writeStreams, pipelineIid, jobs);
81
- await Utils.rsyncTrackedFiles(cwd, stateDir, ".docker");
82
- await Commander.runJobs(argv, parser, writeStreams);
83
- if (argv.needs || argv.onlyNeeds) {
84
- writeStreams.stderr(chalk `{grey pipeline finished} in {grey ${prettyHrtime(process.hrtime(time))}}\n`);
85
- }
86
- }
87
- else if (argv.stage) {
88
- if (argv.registry) {
89
- await Utils.startDockerRegistry(argv);
90
- }
91
- generateGitIgnore(cwd, stateDir);
92
- const time = process.hrtime();
93
- const pipelineIid = await state.getPipelineIid(cwd, stateDir);
94
- parser = await Parser.create(argv, writeStreams, pipelineIid, jobs);
95
- await Utils.rsyncTrackedFiles(cwd, stateDir, ".docker");
96
- await Commander.runJobsInStage(argv, parser, writeStreams);
97
- writeStreams.stderr(chalk `{grey pipeline finished} in {grey ${prettyHrtime(process.hrtime(time))}}\n`);
98
- }
99
- else {
100
- if (argv.registry) {
101
- await Utils.startDockerRegistry(argv);
102
- }
103
- generateGitIgnore(cwd, stateDir);
104
- const time = process.hrtime();
105
- await state.incrementPipelineIid(cwd, stateDir);
106
- const pipelineIid = await state.getPipelineIid(cwd, stateDir);
107
- parser = await Parser.create(argv, writeStreams, pipelineIid, jobs);
108
- await Utils.rsyncTrackedFiles(cwd, stateDir, ".docker");
109
- await Commander.runPipeline(argv, parser, writeStreams);
110
- if (childPipelineDepth == 0)
111
- writeStreams.stderr(chalk `{grey pipeline finished} in {grey ${prettyHrtime(process.hrtime(time))}}\n`);
112
- }
113
- writeStreams.flush();
114
- if (argv.registry) {
115
- await Utils.stopDockerRegistry(argv.containerExecutable);
116
- }
117
- return cleanupJobResources(jobs);
118
- }
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkMsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDbkMsT0FBTyxLQUFLLEtBQUssTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxZQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxtQkFBbUIsRUFBTSxNQUFNLFVBQVUsQ0FBQztBQUNsRCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDL0IsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO0lBQ3hELE1BQU0saUJBQWlCLEdBQUcsR0FBRyxHQUFHLElBQUksUUFBUSxhQUFhLENBQUM7SUFDMUQsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQztJQUM1QyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7UUFDcEMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNELENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FBRSxJQUFTLEVBQUUsWUFBMEIsRUFB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QUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3hELElBQUksa0JBQWtCLElBQUksQ0FBQztZQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFBLHFDQUFxQyxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBQ0QsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRXJCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDRCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB5YW1sIGZyb20gXCJqcy15YW1sXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrLXRlbXBsYXRlXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHlhcmdzIGZyb20gXCJ5YXJnc1wiO1xuaW1wb3J0IHtDb21tYW5kZXJ9IGZyb20gXCIuL2NvbW1hbmRlci5qc1wiO1xuaW1wb3J0IHtQYXJzZXJ9IGZyb20gXCIuL3BhcnNlci5qc1wiO1xuaW1wb3J0ICogYXMgc3RhdGUgZnJvbSBcIi4vc3RhdGUuanNcIjtcbmltcG9ydCBwcmV0dHlIcnRpbWUgZnJvbSBcInByZXR0eS1ocnRpbWVcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zLmpzXCI7XG5pbXBvcnQge2NsZWFudXBKb2JSZXNvdXJjZXMsIEpvYn0gZnJvbSBcIi4vam9iLmpzXCI7XG5pbXBvcnQge1V0aWxzfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2LmpzXCI7XG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcblxuY29uc3QgZ2VuZXJhdGVHaXRJZ25vcmUgPSAoY3dkOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBnaXRJZ25vcmVGaWxlUGF0aCA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vLmdpdGlnbm9yZWA7XG4gICAgY29uc3QgZ2l0SWdub3JlQ29udGVudCA9IFwiKlxcbiEuZ2l0aWdub3JlXFxuXCI7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGdpdElnbm9yZUZpbGVQYXRoKSkge1xuICAgICAgICBmcy5vdXRwdXRGaWxlU3luYyhnaXRJZ25vcmVGaWxlUGF0aCwgZ2l0SWdub3JlQ29udGVudCk7XG4gICAgfVxufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIgKGFyZ3M6IGFueSwgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXMsIGpvYnM6IEpvYltdID0gW10sIGNoaWxkUGlwZWxpbmVEZXB0aCA9IDApIHtcbiAgICBhc3NlcnQoY2hpbGRQaXBlbGluZURlcHRoIDw9IDIsIFwiUGFyZW50IGFuZCBjaGlsZCBwaXBlbGluZXMgaGF2ZSBhIG1heGltdW0gZGVwdGggb2YgdHdvIGxldmVscyBvZiBjaGlsZCBwaXBlbGluZXMuXCIpO1xuICAgIGNvbnN0IGFyZ3YgPSBhd2FpdCBBcmd2LmJ1aWxkKHsuLi5hcmdzLCBjaGlsZFBpcGVsaW5lRGVwdGg6IGNoaWxkUGlwZWxpbmVEZXB0aH0sIHdyaXRlU3RyZWFtcyk7XG4gICAgY29uc3QgY3dkID0gYXJndi5jd2Q7XG4gICAgY29uc3Qgc3RhdGVEaXIgPSBhcmd2LnN0YXRlRGlyO1xuICAgIGNvbnN0IGZpbGUgPSBhcmd2LmZpbGU7XG4gICAgbGV0IHBhcnNlcjogUGFyc2VyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoYXJndi5jb21wbGV0aW9uKSB7XG4gICAgICAgIHlhcmdzKHByb2Nlc3MuYXJndi5zbGljZSgyKSkuc2hvd0NvbXBsZXRpb25TY3JpcHQoKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGFzc2VydChmcy5leGlzdHNTeW5jKGAke2N3ZH0vJHtmaWxlfWApLCBgJHtwYXRoLnJlc29sdmUoY3dkKX0vJHtmaWxlfSBjb3VsZCBub3QgYmUgZm91bmRgKTtcblxuICAgIGlmIChhcmd2LnByZXZpZXcpIHtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVJaWQgPSBhd2FpdCBzdGF0ZS5nZXRQaXBlbGluZUlpZChjd2QsIHN0YXRlRGlyKTtcbiAgICAgICAgcGFyc2VyID0gYXdhaXQgUGFyc2VyLmNyZWF0ZShhcmd2LCB3cml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkLCBqb2JzLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IGdpdGxhYkRhdGEgPSBwYXJzZXIuZ2l0bGFiRGF0YTtcbiAgICAgICAgZm9yIChjb25zdCBqb2JOYW1lIG9mIE9iamVjdC5rZXlzKGdpdGxhYkRhdGEpKSB7XG4gICAgICAgICAgICBpZiAoam9iTmFtZSA9PT0gXCJzdGFnZXNcIikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGpvYk5hbWUuc3RhcnRzV2l0aChcIi5cIikgfHwgW1wiaW5jbHVkZVwiLCBcImFmdGVyX3NjcmlwdFwiLCBcImJlZm9yZV9zY3JpcHRcIiwgXCJkZWZhdWx0XCJdLmluY2x1ZGVzKGpvYk5hbWUpKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHNpbmNlIHRoZXNlIGFyZSByZWR1bmRhbnQgaW5mbyB3aGljaCBhcmUgYWxyZWFkeSBcImV4dGVuZGVkXCIgaW4gdGhlIGpvYnNcbiAgICAgICAgICAgICAgICBkZWxldGUgZ2l0bGFiRGF0YVtqb2JOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGAtLS1cXG4ke3lhbWwuZHVtcChnaXRsYWJEYXRhLCB7bGluZVdpZHRoOiAxNjB9KX1gKTtcbiAgICB9IGVsc2UgaWYgKGFyZ3YubGlzdCB8fCBhcmd2Lmxpc3RBbGwpIHtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVJaWQgPSBhd2FpdCBzdGF0ZS5nZXRQaXBlbGluZUlpZChjd2QsIHN0YXRlRGlyKTtcbiAgICAgICAgcGFyc2VyID0gYXdhaXQgUGFyc2VyLmNyZWF0ZShhcmd2LCB3cml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkLCBqb2JzKTtcbiAgICAgICAgQ29tbWFuZGVyLnJ1bkxpc3QocGFyc2VyLCB3cml0ZVN0cmVhbXMsIGFyZ3YubGlzdEFsbCk7XG4gICAgfSBlbHNlIGlmIChhcmd2LnZhbGlkYXRlRGVwZW5kZW5jeUNoYWluKSB7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lSWlkID0gYXdhaXQgc3RhdGUuZ2V0UGlwZWxpbmVJaWQoY3dkLCBzdGF0ZURpcik7XG4gICAgICAgIHBhcnNlciA9IGF3YWl0IFBhcnNlci5jcmVhdGUoYXJndiwgd3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZCwgam9icyk7XG4gICAgICAgIENvbW1hbmRlci52YWxpZGF0ZURlcGVuZGVuY3lDaGFpbihwYXJzZXIpO1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3Rkb3V0KGNoYWxrYHtncmVlbiDinJMgQWxsIGpvYiBkZXBlbmRlbmNpZXMgYXJlIHZhbGlkfVxcbmApO1xuICAgIH0gZWxzZSBpZiAoYXJndi5saXN0SnNvbikge1xuICAgICAgICBjb25zdCBwaXBlbGluZUlpZCA9IGF3YWl0IHN0YXRlLmdldFBpcGVsaW5lSWlkKGN3ZCwgc3RhdGVEaXIpO1xuICAgICAgICBwYXJzZXIgPSBhd2FpdCBQYXJzZXIuY3JlYXRlKGFyZ3YsIHdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQsIGpvYnMpO1xuICAgICAgICBDb21tYW5kZXIucnVuSnNvbihwYXJzZXIsIHdyaXRlU3RyZWFtcyk7XG4gICAgfSBlbHNlIGlmIChhcmd2Lmxpc3RDc3YgfHwgYXJndi5saXN0Q3N2QWxsKSB7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lSWlkID0gYXdhaXQgc3RhdGUuZ2V0UGlwZWxpbmVJaWQoY3dkLCBzdGF0ZURpcik7XG4gICAgICAgIHBhcnNlciA9IGF3YWl0IFBhcnNlci5jcmVhdGUoYXJndiwgd3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZCwgam9icyk7XG4gICAgICAgIENvbW1hbmRlci5ydW5Dc3YocGFyc2VyLCB3cml0ZVN0cmVhbXMsIGFyZ3YubGlzdENzdkFsbCk7XG4gICAgfSBlbHNlIGlmIChhcmd2LmpvYi5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFzc2VydChhcmd2LnN0YWdlID09PSBudWxsLCBcIllvdSBjYW5ub3QgdXNlIC0tc3RhZ2Ugd2hlbiBzdGFydGluZyBpbmRpdmlkdWFsIGpvYnNcIik7XG4gICAgICAgIGlmIChhcmd2LnJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICBhd2FpdCBVdGlscy5zdGFydERvY2tlclJlZ2lzdHJ5KGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIGdlbmVyYXRlR2l0SWdub3JlKGN3ZCwgc3RhdGVEaXIpO1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgaWYgKGFyZ3YubmVlZHMgfHwgYXJndi5vbmx5TmVlZHMpIHtcbiAgICAgICAgICAgIGF3YWl0IHN0YXRlLmluY3JlbWVudFBpcGVsaW5lSWlkKGN3ZCwgc3RhdGVEaXIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lSWlkID0gYXdhaXQgc3RhdGUuZ2V0UGlwZWxpbmVJaWQoY3dkLCBzdGF0ZURpcik7XG4gICAgICAgIHBhcnNlciA9IGF3YWl0IFBhcnNlci5jcmVhdGUoYXJndiwgd3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZCwgam9icyk7XG4gICAgICAgIGF3YWl0IFV0aWxzLnJzeW5jVHJhY2tlZEZpbGVzKGN3ZCwgc3RhdGVEaXIsIFwiLmRvY2tlclwiKTtcbiAgICAgICAgYXdhaXQgQ29tbWFuZGVyLnJ1bkpvYnMoYXJndiwgcGFyc2VyLCB3cml0ZVN0cmVhbXMpO1xuICAgICAgICBpZiAoYXJndi5uZWVkcyB8fCBhcmd2Lm9ubHlOZWVkcykge1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7Z3JleSBwaXBlbGluZSBmaW5pc2hlZH0gaW4ge2dyZXkgJHtwcmV0dHlIcnRpbWUocHJvY2Vzcy5ocnRpbWUodGltZSkpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJndi5zdGFnZSkge1xuICAgICAgICBpZiAoYXJndi5yZWdpc3RyeSkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3RhcnREb2NrZXJSZWdpc3RyeShhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICBnZW5lcmF0ZUdpdElnbm9yZShjd2QsIHN0YXRlRGlyKTtcbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lSWlkID0gYXdhaXQgc3RhdGUuZ2V0UGlwZWxpbmVJaWQoY3dkLCBzdGF0ZURpcik7XG4gICAgICAgIHBhcnNlciA9IGF3YWl0IFBhcnNlci5jcmVhdGUoYXJndiwgd3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZCwgam9icyk7XG4gICAgICAgIGF3YWl0IFV0aWxzLnJzeW5jVHJhY2tlZEZpbGVzKGN3ZCwgc3RhdGVEaXIsIFwiLmRvY2tlclwiKTtcbiAgICAgICAgYXdhaXQgQ29tbWFuZGVyLnJ1bkpvYnNJblN0YWdlKGFyZ3YsIHBhcnNlciwgd3JpdGVTdHJlYW1zKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7Z3JleSBwaXBlbGluZSBmaW5pc2hlZH0gaW4ge2dyZXkgJHtwcmV0dHlIcnRpbWUocHJvY2Vzcy5ocnRpbWUodGltZSkpfX1cXG5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYXJndi5yZWdpc3RyeSkge1xuICAgICAgICAgICAgYXdhaXQgVXRpbHMuc3RhcnREb2NrZXJSZWdpc3RyeShhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICBnZW5lcmF0ZUdpdElnbm9yZShjd2QsIHN0YXRlRGlyKTtcbiAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgIGF3YWl0IHN0YXRlLmluY3JlbWVudFBpcGVsaW5lSWlkKGN3ZCwgc3RhdGVEaXIpO1xuICAgICAgICBjb25zdCBwaXBlbGluZUlpZCA9IGF3YWl0IHN0YXRlLmdldFBpcGVsaW5lSWlkKGN3ZCwgc3RhdGVEaXIpO1xuICAgICAgICBwYXJzZXIgPSBhd2FpdCBQYXJzZXIuY3JlYXRlKGFyZ3YsIHdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQsIGpvYnMpO1xuICAgICAgICBhd2FpdCBVdGlscy5yc3luY1RyYWNrZWRGaWxlcyhjd2QsIHN0YXRlRGlyLCBcIi5kb2NrZXJcIik7XG4gICAgICAgIGF3YWl0IENvbW1hbmRlci5ydW5QaXBlbGluZShhcmd2LCBwYXJzZXIsIHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIGlmIChjaGlsZFBpcGVsaW5lRGVwdGggPT0gMCkgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7Z3JleSBwaXBlbGluZSBmaW5pc2hlZH0gaW4ge2dyZXkgJHtwcmV0dHlIcnRpbWUocHJvY2Vzcy5ocnRpbWUodGltZSkpfX1cXG5gKTtcbiAgICB9XG4gICAgd3JpdGVTdHJlYW1zLmZsdXNoKCk7XG5cbiAgICBpZiAoYXJndi5yZWdpc3RyeSkge1xuICAgICAgICBhd2FpdCBVdGlscy5zdG9wRG9ja2VyUmVnaXN0cnkoYXJndi5jb250YWluZXJFeGVjdXRhYmxlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsZWFudXBKb2JSZXNvdXJjZXMoam9icyk7XG59XG4iXX0=