@cloudsnorkel/cdk-github-runners 0.9.5 → 0.9.7

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.
Files changed (46) hide show
  1. package/.gitattributes +2 -0
  2. package/.jsii +118 -101
  3. package/API.md +28 -15
  4. package/README.md +120 -63
  5. package/assets/delete-runner.lambda/index.js +69 -63
  6. package/assets/image-builders/aws-image-builder/reaper.lambda/index.js +163 -0
  7. package/assets/image-builders/aws-image-builder/versioner.lambda/index.js +69 -63
  8. package/assets/status.lambda/index.js +69 -63
  9. package/assets/token-retriever.lambda/index.js +69 -63
  10. package/cdk.json +10 -0
  11. package/lib/access.js +1 -1
  12. package/lib/image-builders/api.js +1 -1
  13. package/lib/image-builders/aws-image-builder/builder.d.ts +1 -1
  14. package/lib/image-builders/aws-image-builder/builder.js +62 -26
  15. package/lib/image-builders/aws-image-builder/deprecated/ami.d.ts +2 -2
  16. package/lib/image-builders/aws-image-builder/deprecated/ami.js +4 -4
  17. package/lib/image-builders/aws-image-builder/deprecated/container.d.ts +3 -3
  18. package/lib/image-builders/aws-image-builder/deprecated/container.js +11 -14
  19. package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +1 -1
  20. package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +1 -1
  21. package/lib/image-builders/aws-image-builder/reaper-function.d.ts +13 -0
  22. package/lib/image-builders/aws-image-builder/reaper-function.js +23 -0
  23. package/lib/image-builders/aws-image-builder/reaper.lambda.d.ts +1 -0
  24. package/lib/image-builders/aws-image-builder/reaper.lambda.js +149 -0
  25. package/lib/image-builders/codebuild-deprecated.d.ts +4 -4
  26. package/lib/image-builders/codebuild-deprecated.js +18 -22
  27. package/lib/image-builders/codebuild.d.ts +1 -1
  28. package/lib/image-builders/codebuild.js +24 -25
  29. package/lib/image-builders/common.d.ts +2 -2
  30. package/lib/image-builders/common.js +1 -1
  31. package/lib/image-builders/components.js +4 -4
  32. package/lib/image-builders/static.d.ts +1 -1
  33. package/lib/image-builders/static.js +7 -6
  34. package/lib/providers/codebuild.js +2 -2
  35. package/lib/providers/common.d.ts +6 -0
  36. package/lib/providers/common.js +4 -4
  37. package/lib/providers/ec2.d.ts +1 -1
  38. package/lib/providers/ec2.js +3 -3
  39. package/lib/providers/ecs.d.ts +6 -2
  40. package/lib/providers/ecs.js +64 -32
  41. package/lib/providers/fargate.js +2 -2
  42. package/lib/providers/lambda.js +12 -3
  43. package/lib/runner.d.ts +3 -3
  44. package/lib/runner.js +5 -5
  45. package/lib/secrets.js +1 -1
  46. package/package.json +7 -5
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+
25
+ // src/image-builders/aws-image-builder/reaper.lambda.ts
26
+ var AWS = __toESM(require("aws-sdk"));
27
+ var ec2 = new AWS.EC2();
28
+ var ecr = new AWS.ECR();
29
+ var ib = new AWS.Imagebuilder();
30
+ async function iterateImageVersions(imageName) {
31
+ let result = [];
32
+ let params = {
33
+ owner: "Self",
34
+ filters: [
35
+ {
36
+ name: "name",
37
+ values: [imageName]
38
+ }
39
+ ]
40
+ };
41
+ while (true) {
42
+ const response = await ib.listImages(params).promise();
43
+ if (response.imageVersionList) {
44
+ for (const imageVersion of response.imageVersionList) {
45
+ if (imageVersion.arn) {
46
+ result.push(imageVersion.arn);
47
+ }
48
+ }
49
+ }
50
+ if (!response.nextToken) {
51
+ break;
52
+ }
53
+ params.nextToken = response.nextToken;
54
+ }
55
+ return result;
56
+ }
57
+ async function iterateImageBuildVersions(imageVersionArn) {
58
+ var _a;
59
+ let result = [];
60
+ let params = {
61
+ imageVersionArn
62
+ };
63
+ while (true) {
64
+ const response = await ib.listImageBuildVersions(params).promise();
65
+ if (response.imageSummaryList) {
66
+ for (const imageBuildVersion of response.imageSummaryList) {
67
+ if (((_a = imageBuildVersion.state) == null ? void 0 : _a.status) !== "AVAILABLE") {
68
+ console.log(`${imageBuildVersion.arn} is still being created, so we can't delete it`);
69
+ continue;
70
+ }
71
+ result.push(imageBuildVersion);
72
+ }
73
+ }
74
+ if (!response.nextToken) {
75
+ break;
76
+ }
77
+ params.nextToken = response.nextToken;
78
+ }
79
+ return result;
80
+ }
81
+ async function amisGone(amis) {
82
+ var _a;
83
+ if (!amis) {
84
+ console.log("No AMIs found, so we can delete the image version build");
85
+ return true;
86
+ }
87
+ for (const ami of amis) {
88
+ console.log(`Checking if ${ami.image} exists`);
89
+ if (!ami.image) {
90
+ console.log("No AMI, so we can delete it");
91
+ continue;
92
+ }
93
+ try {
94
+ const response = await ec2.describeImages({
95
+ ImageIds: [ami.image]
96
+ }).promise();
97
+ if (((_a = response.Images) == null ? void 0 : _a.length) ?? 0 > 0) {
98
+ console.log("AMI still available, so we can't delete it");
99
+ return false;
100
+ }
101
+ } catch (e) {
102
+ if (e.code != "InvalidAMIID.NotFound") {
103
+ console.error(`Unknown exception while checking if ${ami.image} exists:`, e);
104
+ return false;
105
+ }
106
+ }
107
+ }
108
+ console.log("All AMIs are gone, so we can delete the image version build");
109
+ return true;
110
+ }
111
+ async function dockerImagesGone(dockerImages) {
112
+ var _a;
113
+ if (!dockerImages) {
114
+ console.log("No docker images, so we can delete the image version build");
115
+ return true;
116
+ }
117
+ for (const images of dockerImages) {
118
+ for (const image of images.imageUris ?? []) {
119
+ const [repo, version] = image.split(":", 2);
120
+ const [_, repoName] = repo.split("/", 2);
121
+ if (version === "latest") {
122
+ continue;
123
+ }
124
+ console.log(`Checking if ${repoName}:${version} exists`);
125
+ try {
126
+ const response = await ecr.describeImages({
127
+ repositoryName: repoName,
128
+ imageIds: [{ imageTag: version }]
129
+ }).promise();
130
+ if (response.imageDetails && response.imageDetails.length > 0) {
131
+ if ((_a = response.imageDetails[0].imageTags) == null ? void 0 : _a.includes("latest")) {
132
+ console.log(`Docker image ${repoName}:${version} still available and tagged latest, so we can't delete it`);
133
+ return false;
134
+ }
135
+ }
136
+ } catch (e) {
137
+ if (e.code != "RepositoryNotFoundException" && e.code != "ImageNotFoundException") {
138
+ console.error(`Unknown exception while checking if ${repoName}:${version} exists:`, e);
139
+ return false;
140
+ }
141
+ }
142
+ }
143
+ }
144
+ console.log("All Docker images are gone, so we can delete the image version build");
145
+ return true;
146
+ }
147
+ exports.handler = async function(event, _context) {
148
+ var _a, _b;
149
+ for (const imageVersion of await iterateImageVersions(event.RecipeName)) {
150
+ for (const imageBuildVersion of await iterateImageBuildVersions(imageVersion)) {
151
+ if (!imageBuildVersion.arn) {
152
+ continue;
153
+ }
154
+ console.log(`Checking ${imageBuildVersion.name}/${imageBuildVersion.version}`);
155
+ if (await amisGone((_a = imageBuildVersion.outputResources) == null ? void 0 : _a.amis) && await dockerImagesGone((_b = imageBuildVersion.outputResources) == null ? void 0 : _b.containers)) {
156
+ console.log("Deleting image version build", imageBuildVersion.arn);
157
+ await ib.deleteImage({
158
+ imageBuildVersionArn: imageBuildVersion.arn
159
+ }).promise();
160
+ }
161
+ }
162
+ }
163
+ };
@@ -188,7 +188,7 @@ var require_semver = __commonJS({
188
188
  version = version.version;
189
189
  }
190
190
  } else if (typeof version !== "string") {
191
- throw new TypeError(`Invalid Version: ${version}`);
191
+ throw new TypeError(`Invalid Version: ${require("util").inspect(version)}`);
192
192
  }
193
193
  if (version.length > MAX_LENGTH) {
194
194
  throw new TypeError(
@@ -361,9 +361,13 @@ var require_semver = __commonJS({
361
361
  }
362
362
  this.prerelease = [];
363
363
  break;
364
- case "pre":
364
+ case "pre": {
365
+ const base = Number(identifierBase) ? 1 : 0;
366
+ if (!identifier && identifierBase === false) {
367
+ throw new Error("invalid increment argument: identifier is empty");
368
+ }
365
369
  if (this.prerelease.length === 0) {
366
- this.prerelease = [0];
370
+ this.prerelease = [base];
367
371
  } else {
368
372
  let i = this.prerelease.length;
369
373
  while (--i >= 0) {
@@ -373,20 +377,27 @@ var require_semver = __commonJS({
373
377
  }
374
378
  }
375
379
  if (i === -1) {
376
- this.prerelease.push(0);
380
+ if (identifier === this.prerelease.join(".") && identifierBase === false) {
381
+ throw new Error("invalid increment argument: identifier already exists");
382
+ }
383
+ this.prerelease.push(base);
377
384
  }
378
385
  }
379
386
  if (identifier) {
380
- const base = Number(identifierBase) ? 1 : 0;
387
+ let prerelease = [identifier, base];
388
+ if (identifierBase === false) {
389
+ prerelease = [identifier];
390
+ }
381
391
  if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
382
392
  if (isNaN(this.prerelease[1])) {
383
- this.prerelease = [identifier, base];
393
+ this.prerelease = prerelease;
384
394
  }
385
395
  } else {
386
- this.prerelease = [identifier, base];
396
+ this.prerelease = prerelease;
387
397
  }
388
398
  }
389
399
  break;
400
+ }
390
401
  default:
391
402
  throw new Error(`invalid increment argument: ${release}`);
392
403
  }
@@ -402,22 +413,18 @@ var require_semver = __commonJS({
402
413
  // node_modules/semver/functions/parse.js
403
414
  var require_parse = __commonJS({
404
415
  "node_modules/semver/functions/parse.js"(exports, module2) {
405
- var { MAX_LENGTH } = require_constants();
406
416
  var SemVer = require_semver();
407
- var parse = (version, options) => {
417
+ var parse = (version, options, throwErrors = false) => {
408
418
  if (version instanceof SemVer) {
409
419
  return version;
410
420
  }
411
- if (typeof version !== "string") {
412
- return null;
413
- }
414
- if (version.length > MAX_LENGTH) {
415
- return null;
416
- }
417
421
  try {
418
422
  return new SemVer(version, options);
419
423
  } catch (er) {
420
- return null;
424
+ if (!throwErrors) {
425
+ return null;
426
+ }
427
+ throw er;
421
428
  }
422
429
  };
423
430
  module2.exports = parse;
@@ -471,60 +478,41 @@ var require_inc = __commonJS({
471
478
  }
472
479
  });
473
480
 
474
- // node_modules/semver/functions/compare.js
475
- var require_compare = __commonJS({
476
- "node_modules/semver/functions/compare.js"(exports, module2) {
477
- var SemVer = require_semver();
478
- var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
479
- module2.exports = compare;
480
- }
481
- });
482
-
483
- // node_modules/semver/functions/eq.js
484
- var require_eq = __commonJS({
485
- "node_modules/semver/functions/eq.js"(exports, module2) {
486
- var compare = require_compare();
487
- var eq = (a, b, loose) => compare(a, b, loose) === 0;
488
- module2.exports = eq;
489
- }
490
- });
491
-
492
481
  // node_modules/semver/functions/diff.js
493
482
  var require_diff = __commonJS({
494
483
  "node_modules/semver/functions/diff.js"(exports, module2) {
495
484
  var parse = require_parse();
496
- var eq = require_eq();
497
485
  var diff = (version1, version2) => {
498
- const v1 = parse(version1);
499
- const v2 = parse(version2);
500
- if (eq(v1, v2)) {
486
+ const v1 = parse(version1, null, true);
487
+ const v2 = parse(version2, null, true);
488
+ const comparison = v1.compare(v2);
489
+ if (comparison === 0) {
501
490
  return null;
502
- } else {
503
- const hasPre = v1.prerelease.length || v2.prerelease.length;
504
- const prefix = hasPre ? "pre" : "";
505
- const defaultResult = hasPre ? "prerelease" : "";
506
- if (v1.major !== v2.major) {
507
- return prefix + "major";
508
- }
509
- if (v1.minor !== v2.minor) {
510
- return prefix + "minor";
511
- }
512
- if (v1.patch !== v2.patch) {
513
- return prefix + "patch";
514
- }
515
- if (!v1.prerelease.length || !v2.prerelease.length) {
516
- if (v1.patch) {
517
- return "patch";
518
- }
519
- if (v1.minor) {
520
- return "minor";
521
- }
522
- if (v1.major) {
523
- return "major";
524
- }
525
- }
526
- return defaultResult;
527
491
  }
492
+ const v1Higher = comparison > 0;
493
+ const highVersion = v1Higher ? v1 : v2;
494
+ const lowVersion = v1Higher ? v2 : v1;
495
+ const highHasPre = !!highVersion.prerelease.length;
496
+ const prefix = highHasPre ? "pre" : "";
497
+ if (v1.major !== v2.major) {
498
+ return prefix + "major";
499
+ }
500
+ if (v1.minor !== v2.minor) {
501
+ return prefix + "minor";
502
+ }
503
+ if (v1.patch !== v2.patch) {
504
+ return prefix + "patch";
505
+ }
506
+ if (highHasPre) {
507
+ return "prerelease";
508
+ }
509
+ if (lowVersion.patch) {
510
+ return "patch";
511
+ }
512
+ if (lowVersion.minor) {
513
+ return "minor";
514
+ }
515
+ return "major";
528
516
  };
529
517
  module2.exports = diff;
530
518
  }
@@ -569,6 +557,15 @@ var require_prerelease = __commonJS({
569
557
  }
570
558
  });
571
559
 
560
+ // node_modules/semver/functions/compare.js
561
+ var require_compare = __commonJS({
562
+ "node_modules/semver/functions/compare.js"(exports, module2) {
563
+ var SemVer = require_semver();
564
+ var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
565
+ module2.exports = compare;
566
+ }
567
+ });
568
+
572
569
  // node_modules/semver/functions/rcompare.js
573
570
  var require_rcompare = __commonJS({
574
571
  "node_modules/semver/functions/rcompare.js"(exports, module2) {
@@ -636,6 +633,15 @@ var require_lt = __commonJS({
636
633
  }
637
634
  });
638
635
 
636
+ // node_modules/semver/functions/eq.js
637
+ var require_eq = __commonJS({
638
+ "node_modules/semver/functions/eq.js"(exports, module2) {
639
+ var compare = require_compare();
640
+ var eq = (a, b, loose) => compare(a, b, loose) === 0;
641
+ module2.exports = eq;
642
+ }
643
+ });
644
+
639
645
  // node_modules/semver/functions/neq.js
640
646
  var require_neq = __commonJS({
641
647
  "node_modules/semver/functions/neq.js"(exports, module2) {
@@ -10322,7 +10322,7 @@ var require_semver = __commonJS({
10322
10322
  version = version.version;
10323
10323
  }
10324
10324
  } else if (typeof version !== "string") {
10325
- throw new TypeError(`Invalid Version: ${version}`);
10325
+ throw new TypeError(`Invalid Version: ${require("util").inspect(version)}`);
10326
10326
  }
10327
10327
  if (version.length > MAX_LENGTH) {
10328
10328
  throw new TypeError(
@@ -10495,9 +10495,13 @@ var require_semver = __commonJS({
10495
10495
  }
10496
10496
  this.prerelease = [];
10497
10497
  break;
10498
- case "pre":
10498
+ case "pre": {
10499
+ const base = Number(identifierBase) ? 1 : 0;
10500
+ if (!identifier && identifierBase === false) {
10501
+ throw new Error("invalid increment argument: identifier is empty");
10502
+ }
10499
10503
  if (this.prerelease.length === 0) {
10500
- this.prerelease = [0];
10504
+ this.prerelease = [base];
10501
10505
  } else {
10502
10506
  let i = this.prerelease.length;
10503
10507
  while (--i >= 0) {
@@ -10507,20 +10511,27 @@ var require_semver = __commonJS({
10507
10511
  }
10508
10512
  }
10509
10513
  if (i === -1) {
10510
- this.prerelease.push(0);
10514
+ if (identifier === this.prerelease.join(".") && identifierBase === false) {
10515
+ throw new Error("invalid increment argument: identifier already exists");
10516
+ }
10517
+ this.prerelease.push(base);
10511
10518
  }
10512
10519
  }
10513
10520
  if (identifier) {
10514
- const base = Number(identifierBase) ? 1 : 0;
10521
+ let prerelease = [identifier, base];
10522
+ if (identifierBase === false) {
10523
+ prerelease = [identifier];
10524
+ }
10515
10525
  if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
10516
10526
  if (isNaN(this.prerelease[1])) {
10517
- this.prerelease = [identifier, base];
10527
+ this.prerelease = prerelease;
10518
10528
  }
10519
10529
  } else {
10520
- this.prerelease = [identifier, base];
10530
+ this.prerelease = prerelease;
10521
10531
  }
10522
10532
  }
10523
10533
  break;
10534
+ }
10524
10535
  default:
10525
10536
  throw new Error(`invalid increment argument: ${release}`);
10526
10537
  }
@@ -10536,22 +10547,18 @@ var require_semver = __commonJS({
10536
10547
  // node_modules/semver/functions/parse.js
10537
10548
  var require_parse = __commonJS({
10538
10549
  "node_modules/semver/functions/parse.js"(exports2, module2) {
10539
- var { MAX_LENGTH } = require_constants();
10540
10550
  var SemVer = require_semver();
10541
- var parse = (version, options) => {
10551
+ var parse = (version, options, throwErrors = false) => {
10542
10552
  if (version instanceof SemVer) {
10543
10553
  return version;
10544
10554
  }
10545
- if (typeof version !== "string") {
10546
- return null;
10547
- }
10548
- if (version.length > MAX_LENGTH) {
10549
- return null;
10550
- }
10551
10555
  try {
10552
10556
  return new SemVer(version, options);
10553
10557
  } catch (er) {
10554
- return null;
10558
+ if (!throwErrors) {
10559
+ return null;
10560
+ }
10561
+ throw er;
10555
10562
  }
10556
10563
  };
10557
10564
  module2.exports = parse;
@@ -10605,60 +10612,41 @@ var require_inc = __commonJS({
10605
10612
  }
10606
10613
  });
10607
10614
 
10608
- // node_modules/semver/functions/compare.js
10609
- var require_compare = __commonJS({
10610
- "node_modules/semver/functions/compare.js"(exports2, module2) {
10611
- var SemVer = require_semver();
10612
- var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
10613
- module2.exports = compare;
10614
- }
10615
- });
10616
-
10617
- // node_modules/semver/functions/eq.js
10618
- var require_eq = __commonJS({
10619
- "node_modules/semver/functions/eq.js"(exports2, module2) {
10620
- var compare = require_compare();
10621
- var eq = (a, b, loose) => compare(a, b, loose) === 0;
10622
- module2.exports = eq;
10623
- }
10624
- });
10625
-
10626
10615
  // node_modules/semver/functions/diff.js
10627
10616
  var require_diff = __commonJS({
10628
10617
  "node_modules/semver/functions/diff.js"(exports2, module2) {
10629
10618
  var parse = require_parse();
10630
- var eq = require_eq();
10631
10619
  var diff = (version1, version2) => {
10632
- const v1 = parse(version1);
10633
- const v2 = parse(version2);
10634
- if (eq(v1, v2)) {
10620
+ const v1 = parse(version1, null, true);
10621
+ const v2 = parse(version2, null, true);
10622
+ const comparison = v1.compare(v2);
10623
+ if (comparison === 0) {
10635
10624
  return null;
10636
- } else {
10637
- const hasPre = v1.prerelease.length || v2.prerelease.length;
10638
- const prefix = hasPre ? "pre" : "";
10639
- const defaultResult = hasPre ? "prerelease" : "";
10640
- if (v1.major !== v2.major) {
10641
- return prefix + "major";
10642
- }
10643
- if (v1.minor !== v2.minor) {
10644
- return prefix + "minor";
10645
- }
10646
- if (v1.patch !== v2.patch) {
10647
- return prefix + "patch";
10648
- }
10649
- if (!v1.prerelease.length || !v2.prerelease.length) {
10650
- if (v1.patch) {
10651
- return "patch";
10652
- }
10653
- if (v1.minor) {
10654
- return "minor";
10655
- }
10656
- if (v1.major) {
10657
- return "major";
10658
- }
10659
- }
10660
- return defaultResult;
10661
10625
  }
10626
+ const v1Higher = comparison > 0;
10627
+ const highVersion = v1Higher ? v1 : v2;
10628
+ const lowVersion = v1Higher ? v2 : v1;
10629
+ const highHasPre = !!highVersion.prerelease.length;
10630
+ const prefix = highHasPre ? "pre" : "";
10631
+ if (v1.major !== v2.major) {
10632
+ return prefix + "major";
10633
+ }
10634
+ if (v1.minor !== v2.minor) {
10635
+ return prefix + "minor";
10636
+ }
10637
+ if (v1.patch !== v2.patch) {
10638
+ return prefix + "patch";
10639
+ }
10640
+ if (highHasPre) {
10641
+ return "prerelease";
10642
+ }
10643
+ if (lowVersion.patch) {
10644
+ return "patch";
10645
+ }
10646
+ if (lowVersion.minor) {
10647
+ return "minor";
10648
+ }
10649
+ return "major";
10662
10650
  };
10663
10651
  module2.exports = diff;
10664
10652
  }
@@ -10703,6 +10691,15 @@ var require_prerelease = __commonJS({
10703
10691
  }
10704
10692
  });
10705
10693
 
10694
+ // node_modules/semver/functions/compare.js
10695
+ var require_compare = __commonJS({
10696
+ "node_modules/semver/functions/compare.js"(exports2, module2) {
10697
+ var SemVer = require_semver();
10698
+ var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
10699
+ module2.exports = compare;
10700
+ }
10701
+ });
10702
+
10706
10703
  // node_modules/semver/functions/rcompare.js
10707
10704
  var require_rcompare = __commonJS({
10708
10705
  "node_modules/semver/functions/rcompare.js"(exports2, module2) {
@@ -10770,6 +10767,15 @@ var require_lt = __commonJS({
10770
10767
  }
10771
10768
  });
10772
10769
 
10770
+ // node_modules/semver/functions/eq.js
10771
+ var require_eq = __commonJS({
10772
+ "node_modules/semver/functions/eq.js"(exports2, module2) {
10773
+ var compare = require_compare();
10774
+ var eq = (a, b, loose) => compare(a, b, loose) === 0;
10775
+ module2.exports = eq;
10776
+ }
10777
+ });
10778
+
10773
10779
  // node_modules/semver/functions/neq.js
10774
10780
  var require_neq = __commonJS({
10775
10781
  "node_modules/semver/functions/neq.js"(exports2, module2) {