@sentry/bundler-plugin-core 2.2.2 → 2.4.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/dist/cjs/index.js CHANGED
@@ -15,6 +15,7 @@ var glob = require('glob');
15
15
  var util = require('util');
16
16
  var utils = require('@sentry/utils');
17
17
  var node = require('@sentry/node');
18
+ var dotenv = require('dotenv');
18
19
 
19
20
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
20
21
 
@@ -47,6 +48,7 @@ var os__default = /*#__PURE__*/_interopDefaultLegacy(os);
47
48
  var crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto);
48
49
  var childProcess__default = /*#__PURE__*/_interopDefaultLegacy(childProcess);
49
50
  var util__namespace = /*#__PURE__*/_interopNamespace(util);
51
+ var dotenv__namespace = /*#__PURE__*/_interopNamespace(dotenv);
50
52
 
51
53
  function ownKeys(object, enumerableOnly) {
52
54
  var keys = Object.keys(object);
@@ -566,7 +568,11 @@ function stringToUUID(str) {
566
568
  var md5sum = crypto__default["default"].createHash("md5");
567
569
  md5sum.update(str);
568
570
  var md5Hash = md5sum.digest("hex");
569
- return (md5Hash.substring(0, 8) + "-" + md5Hash.substring(8, 12) + "-4" + md5Hash.substring(13, 16) + "-" + md5Hash.substring(16, 20) + "-" + md5Hash.substring(20)).toLowerCase();
571
+
572
+ // Position 16 is fixed to either 8, 9, a, or b in the uuid v4 spec (10xx in binary)
573
+ // RFC 4122 section 4.4
574
+ var v4variant = ["8", "9", "a", "b"][md5Hash.substring(16, 17).charCodeAt(0) % 4];
575
+ return (md5Hash.substring(0, 8) + "-" + md5Hash.substring(8, 12) + "-4" + md5Hash.substring(13, 16) + "-" + v4variant + md5Hash.substring(17, 20) + "-" + md5Hash.substring(20)).toLowerCase();
570
576
  }
571
577
 
572
578
  /**
@@ -575,7 +581,7 @@ function stringToUUID(str) {
575
581
  function determineReleaseName() {
576
582
  var gitRevision;
577
583
  try {
578
- gitRevision = childProcess__default["default"].execSync("git rev-parse --short HEAD").toString().trim();
584
+ gitRevision = childProcess__default["default"].execSync("git rev-parse HEAD").toString().trim();
579
585
  } catch (e) {
580
586
  // noop
581
587
  }
@@ -634,7 +640,7 @@ function stripQueryAndHashFromPath(path) {
634
640
 
635
641
  var SENTRY_SAAS_URL = "https://sentry.io";
636
642
  function normalizeUserOptions(userOptions) {
637
- var _userOptions$org, _userOptions$project, _userOptions$authToke, _ref, _userOptions$url, _userOptions$debug, _userOptions$silent, _userOptions$telemetr, _userOptions$disable, _userOptions$release$, _userOptions$release, _userOptions$release$2, _userOptions$release2, _userOptions$release$3, _userOptions$release3, _userOptions$release$4, _userOptions$release4, _ref2, _userOptions$release$5, _userOptions$release5, _userOptions$release$6, _userOptions$release6, _userOptions$_experim;
643
+ var _userOptions$org, _userOptions$project, _userOptions$authToke, _ref, _userOptions$url, _userOptions$debug, _userOptions$silent, _userOptions$telemetr, _userOptions$disable, _ref2, _userOptions$release$, _userOptions$release, _userOptions$release$2, _userOptions$release2, _userOptions$release$3, _userOptions$release3, _userOptions$release$4, _userOptions$release4, _ref3, _userOptions$release$5, _userOptions$release5, _userOptions$release$6, _userOptions$release6, _userOptions$_experim;
638
644
  var options = {
639
645
  org: (_userOptions$org = userOptions.org) !== null && _userOptions$org !== void 0 ? _userOptions$org : process.env["SENTRY_ORG"],
640
646
  project: (_userOptions$project = userOptions.project) !== null && _userOptions$project !== void 0 ? _userOptions$project : process.env["SENTRY_PROJECT"],
@@ -648,11 +654,11 @@ function normalizeUserOptions(userOptions) {
648
654
  disable: (_userOptions$disable = userOptions.disable) !== null && _userOptions$disable !== void 0 ? _userOptions$disable : false,
649
655
  sourcemaps: userOptions.sourcemaps,
650
656
  release: _objectSpread2(_objectSpread2({}, userOptions.release), {}, {
651
- name: (_userOptions$release$ = (_userOptions$release = userOptions.release) === null || _userOptions$release === void 0 ? void 0 : _userOptions$release.name) !== null && _userOptions$release$ !== void 0 ? _userOptions$release$ : determineReleaseName(),
657
+ name: (_ref2 = (_userOptions$release$ = (_userOptions$release = userOptions.release) === null || _userOptions$release === void 0 ? void 0 : _userOptions$release.name) !== null && _userOptions$release$ !== void 0 ? _userOptions$release$ : process.env["SENTRY_RELEASE"]) !== null && _ref2 !== void 0 ? _ref2 : determineReleaseName(),
652
658
  inject: (_userOptions$release$2 = (_userOptions$release2 = userOptions.release) === null || _userOptions$release2 === void 0 ? void 0 : _userOptions$release2.inject) !== null && _userOptions$release$2 !== void 0 ? _userOptions$release$2 : true,
653
659
  create: (_userOptions$release$3 = (_userOptions$release3 = userOptions.release) === null || _userOptions$release3 === void 0 ? void 0 : _userOptions$release3.create) !== null && _userOptions$release$3 !== void 0 ? _userOptions$release$3 : true,
654
660
  finalize: (_userOptions$release$4 = (_userOptions$release4 = userOptions.release) === null || _userOptions$release4 === void 0 ? void 0 : _userOptions$release4.finalize) !== null && _userOptions$release$4 !== void 0 ? _userOptions$release$4 : true,
655
- vcsRemote: (_ref2 = (_userOptions$release$5 = (_userOptions$release5 = userOptions.release) === null || _userOptions$release5 === void 0 ? void 0 : _userOptions$release5.vcsRemote) !== null && _userOptions$release$5 !== void 0 ? _userOptions$release$5 : process.env["SENTRY_VSC_REMOTE"]) !== null && _ref2 !== void 0 ? _ref2 : "origin",
661
+ vcsRemote: (_ref3 = (_userOptions$release$5 = (_userOptions$release5 = userOptions.release) === null || _userOptions$release5 === void 0 ? void 0 : _userOptions$release5.vcsRemote) !== null && _userOptions$release$5 !== void 0 ? _userOptions$release$5 : process.env["SENTRY_VSC_REMOTE"]) !== null && _ref3 !== void 0 ? _ref3 : "origin",
656
662
  cleanArtifacts: (_userOptions$release$6 = (_userOptions$release6 = userOptions.release) === null || _userOptions$release6 === void 0 ? void 0 : _userOptions$release6.cleanArtifacts) !== null && _userOptions$release$6 !== void 0 ? _userOptions$release$6 : false
657
663
  }),
658
664
  _experiments: (_userOptions$_experim = userOptions._experiments) !== null && _userOptions$_experim !== void 0 ? _userOptions$_experim : {}
@@ -702,7 +708,7 @@ function createDebugIdUploadFunction(_ref) {
702
708
  sentryClient = _ref.sentryClient,
703
709
  sentryCliOptions = _ref.sentryCliOptions,
704
710
  rewriteSourcesHook = _ref.rewriteSourcesHook,
705
- deleteFilesAfterUpload = _ref.deleteFilesAfterUpload;
711
+ filesToDeleteAfterUpload = _ref.filesToDeleteAfterUpload;
706
712
  return /*#__PURE__*/function () {
707
713
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(buildArtifactPaths) {
708
714
  var artifactBundleUploadTransaction, folderToCleanUp, mkdtempSpan, tmpUploadFolder, globAssets, globSpan, globResult, debugIdChunkFilePaths, prepareSpan, files, stats, uploadSize, uploadSpan, cliInstance, deleteGlobSpan, filePathsToDelete, deleteSpan, cleanupSpan;
@@ -742,27 +748,29 @@ function createDebugIdUploadFunction(_ref) {
742
748
  globSpan.finish();
743
749
  debugIdChunkFilePaths = globResult.filter(function (debugIdChunkFilePath) {
744
750
  return debugIdChunkFilePath.endsWith(".js") || debugIdChunkFilePath.endsWith(".mjs") || debugIdChunkFilePath.endsWith(".cjs");
745
- });
751
+ }); // The order of the files output by glob() is not deterministic
752
+ // Ensure order within the files so that {debug-id}-{chunkIndex} coupling is consistent
753
+ debugIdChunkFilePaths.sort();
746
754
  if (!(Array.isArray(assets) && assets.length === 0)) {
747
- _context2.next = 19;
755
+ _context2.next = 20;
748
756
  break;
749
757
  }
750
758
  logger.debug("Empty `sourcemaps.assets` option provided. Will not upload sourcemaps with debug ID.");
751
- _context2.next = 41;
759
+ _context2.next = 43;
752
760
  break;
753
- case 19:
761
+ case 20:
754
762
  if (!(debugIdChunkFilePaths.length === 0)) {
755
- _context2.next = 23;
763
+ _context2.next = 24;
756
764
  break;
757
765
  }
758
766
  logger.warn("Didn't find any matching sources for debug ID upload. Please check the `sourcemaps.assets` option.");
759
- _context2.next = 41;
767
+ _context2.next = 43;
760
768
  break;
761
- case 23:
769
+ case 24:
762
770
  prepareSpan = artifactBundleUploadTransaction.startChild({
763
771
  description: "prepare-bundles"
764
772
  });
765
- _context2.next = 26;
773
+ _context2.next = 27;
766
774
  return Promise.all(debugIdChunkFilePaths.map( /*#__PURE__*/function () {
767
775
  var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(chunkFilePath, chunkIndex) {
768
776
  return _regeneratorRuntime().wrap(function _callee$(_context) {
@@ -780,18 +788,18 @@ function createDebugIdUploadFunction(_ref) {
780
788
  return _ref3.apply(this, arguments);
781
789
  };
782
790
  }()));
783
- case 26:
791
+ case 27:
784
792
  prepareSpan.finish();
785
- _context2.next = 29;
793
+ _context2.next = 30;
786
794
  return fs__default["default"].promises.readdir(tmpUploadFolder);
787
- case 29:
795
+ case 30:
788
796
  files = _context2.sent;
789
797
  stats = files.map(function (file) {
790
798
  return fs__default["default"].promises.stat(path__default["default"].join(tmpUploadFolder, file));
791
799
  });
792
- _context2.next = 33;
800
+ _context2.next = 34;
793
801
  return Promise.all(stats);
794
- case 33:
802
+ case 34:
795
803
  uploadSize = _context2.sent.reduce(function (accumulator, _ref4) {
796
804
  var size = _ref4.size;
797
805
  return accumulator + size;
@@ -808,7 +816,7 @@ function createDebugIdUploadFunction(_ref) {
808
816
  baggage: utils.dynamicSamplingContextToSentryBaggageHeader(artifactBundleUploadTransaction.getDynamicSamplingContext())
809
817
  }, sentryCliOptions.headers)
810
818
  }));
811
- _context2.next = 40;
819
+ _context2.next = 41;
812
820
  return cliInstance.releases.uploadSourceMaps(releaseName !== null && releaseName !== void 0 ? releaseName : "undefined",
813
821
  // unfortunetly this needs a value for now but it will not matter since debug IDs overpower releases anyhow
814
822
  {
@@ -819,22 +827,23 @@ function createDebugIdUploadFunction(_ref) {
819
827
  }],
820
828
  useArtifactBundle: true
821
829
  });
822
- case 40:
823
- uploadSpan.finish();
824
830
  case 41:
825
- if (!deleteFilesAfterUpload) {
826
- _context2.next = 52;
831
+ uploadSpan.finish();
832
+ logger.info("Successfully uploaded source maps to Sentry");
833
+ case 43:
834
+ if (!filesToDeleteAfterUpload) {
835
+ _context2.next = 54;
827
836
  break;
828
837
  }
829
838
  deleteGlobSpan = artifactBundleUploadTransaction.startChild({
830
839
  description: "delete-glob"
831
840
  });
832
- _context2.next = 45;
833
- return glob.glob(deleteFilesAfterUpload, {
841
+ _context2.next = 47;
842
+ return glob.glob(filesToDeleteAfterUpload, {
834
843
  absolute: true,
835
844
  nodir: true
836
845
  });
837
- case 45:
846
+ case 47:
838
847
  filePathsToDelete = _context2.sent;
839
848
  deleteGlobSpan.finish();
840
849
  filePathsToDelete.forEach(function (filePathToDelete) {
@@ -843,27 +852,27 @@ function createDebugIdUploadFunction(_ref) {
843
852
  deleteSpan = artifactBundleUploadTransaction.startChild({
844
853
  description: "delete-files-after-upload"
845
854
  });
846
- _context2.next = 51;
855
+ _context2.next = 53;
847
856
  return Promise.all(filePathsToDelete.map(function (filePathToDelete) {
848
857
  return fs__default["default"].promises.rm(filePathToDelete, {
849
858
  force: true
850
859
  });
851
860
  }));
852
- case 51:
861
+ case 53:
853
862
  deleteSpan.finish();
854
- case 52:
855
- _context2.next = 58;
856
- break;
857
863
  case 54:
858
- _context2.prev = 54;
864
+ _context2.next = 60;
865
+ break;
866
+ case 56:
867
+ _context2.prev = 56;
859
868
  _context2.t0 = _context2["catch"](1);
860
869
  sentryHub.withScope(function (scope) {
861
870
  scope.setSpan(artifactBundleUploadTransaction);
862
871
  sentryHub.captureException('Error in "debugIdUploadPlugin" writeBundle hook');
863
872
  });
864
873
  handleRecoverableError(_context2.t0);
865
- case 58:
866
- _context2.prev = 58;
874
+ case 60:
875
+ _context2.prev = 60;
867
876
  if (folderToCleanUp) {
868
877
  cleanupSpan = artifactBundleUploadTransaction.startChild({
869
878
  description: "cleanup"
@@ -875,15 +884,15 @@ function createDebugIdUploadFunction(_ref) {
875
884
  cleanupSpan.finish();
876
885
  }
877
886
  artifactBundleUploadTransaction.finish();
878
- _context2.next = 63;
887
+ _context2.next = 65;
879
888
  return sentryClient.flush();
880
- case 63:
881
- return _context2.finish(58);
882
- case 64:
889
+ case 65:
890
+ return _context2.finish(60);
891
+ case 66:
883
892
  case "end":
884
893
  return _context2.stop();
885
894
  }
886
- }, _callee2, null, [[1, 54, 58, 64]]);
895
+ }, _callee2, null, [[1, 56, 60, 66]]);
887
896
  }));
888
897
  return function (_x) {
889
898
  return _ref2.apply(this, arguments);
@@ -1284,7 +1293,7 @@ function createSentryInstance(options, shouldSendTelemetry, bundler) {
1284
1293
  dsn: "https://4c2bae7d9fbc413e8f7385f55c515d51@o1.ingest.sentry.io/6690737",
1285
1294
  tracesSampleRate: 1,
1286
1295
  sampleRate: 1,
1287
- release: "2.2.2",
1296
+ release: "2.4.0",
1288
1297
  integrations: [],
1289
1298
  tracePropagationTargets: ["sentry.io/api"],
1290
1299
  stackParser: node.defaultStackParser,
@@ -1368,7 +1377,7 @@ function setTelemetryDataOnHub(options, hub, bundler) {
1368
1377
  // Miscelaneous options
1369
1378
  hub.setTag("custom-error-handler", !!errorHandler);
1370
1379
  hub.setTag("sourcemaps-assets", !!(sourcemaps !== null && sourcemaps !== void 0 && sourcemaps.assets));
1371
- hub.setTag("delete-after-upload", !!(sourcemaps !== null && sourcemaps !== void 0 && sourcemaps.deleteFilesAfterUpload));
1380
+ hub.setTag("delete-after-upload", !!(sourcemaps !== null && sourcemaps !== void 0 && sourcemaps.deleteFilesAfterUpload) || !!(sourcemaps !== null && sourcemaps !== void 0 && sourcemaps.filesToDeleteAfterUpload));
1372
1381
  hub.setTag("node", process.version);
1373
1382
  hub.setTag("platform", process.platform);
1374
1383
  hub.setTags({
@@ -1473,6 +1482,24 @@ function sentryUnpluginFactory(_ref) {
1473
1482
  debugIdInjectionPlugin = _ref.debugIdInjectionPlugin,
1474
1483
  debugIdUploadPlugin = _ref.debugIdUploadPlugin;
1475
1484
  return unplugin.createUnplugin(function (userOptions, unpluginMetaContext) {
1485
+ var _userOptions$silent, _userOptions$debug;
1486
+ var logger = createLogger({
1487
+ prefix: "[sentry-".concat(unpluginMetaContext.framework, "-plugin]"),
1488
+ silent: (_userOptions$silent = userOptions.silent) !== null && _userOptions$silent !== void 0 ? _userOptions$silent : false,
1489
+ debug: (_userOptions$debug = userOptions.debug) !== null && _userOptions$debug !== void 0 ? _userOptions$debug : false
1490
+ });
1491
+ var dotenvResult = dotenv__namespace.config({
1492
+ path: path__namespace.join(process.cwd(), ".env.sentry-build-plugin")
1493
+ });
1494
+
1495
+ // Ignore "file not found" errors but throw all others
1496
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
1497
+ // @ts-ignore Accessing `code` on error should be safe
1498
+ if (dotenvResult.error && dotenvResult.error.code !== "ENOENT") {
1499
+ throw dotenvResult.error;
1500
+ } else if (dotenvResult.parsed) {
1501
+ logger.info('Using environment variables configured in ".env.sentry-build-plugin".');
1502
+ }
1476
1503
  var options = normalizeUserOptions(userOptions);
1477
1504
  if (unpluginMetaContext.watchMode || options.disable) {
1478
1505
  return [{
@@ -1493,14 +1520,9 @@ function sentryUnpluginFactory(_ref) {
1493
1520
  sentEndSession = true;
1494
1521
  }
1495
1522
  });
1496
- var logger = createLogger({
1497
- prefix: "[sentry-".concat(unpluginMetaContext.framework, "-plugin]"),
1498
- silent: options.silent,
1499
- debug: options.debug
1500
- });
1501
1523
 
1502
1524
  // Set the User-Agent that Sentry CLI will use when interacting with Sentry
1503
- process.env["SENTRY_PIPELINE"] = "".concat(unpluginMetaContext.framework, "-plugin/", "2.2.2");
1525
+ process.env["SENTRY_PIPELINE"] = "".concat(unpluginMetaContext.framework, "-plugin/", "2.4.0");
1504
1526
  function handleRecoverableError(unknownError) {
1505
1527
  sentrySession.status = "abnormal";
1506
1528
  try {
@@ -1580,6 +1602,7 @@ function sentryUnpluginFactory(_ref) {
1580
1602
  }
1581
1603
  }));
1582
1604
  }
1605
+ plugins.push(debugIdInjectionPlugin());
1583
1606
  if (!options.authToken) {
1584
1607
  logger.warn("No auth token provided. Will not upload source maps. Please set the `authToken` option. You can find information on how to generate a Sentry auth token here: https://docs.sentry.io/api/auth/");
1585
1608
  } else if (!options.org) {
@@ -1587,17 +1610,16 @@ function sentryUnpluginFactory(_ref) {
1587
1610
  } else if (!options.project) {
1588
1611
  logger.warn("No project provided. Will not upload source maps. Please set the `project` option to your Sentry project slug.");
1589
1612
  } else {
1590
- var _options$sourcemaps, _options$sourcemaps2, _options$sourcemaps3, _options$sourcemaps4;
1591
- plugins.push(debugIdInjectionPlugin());
1613
+ var _options$sourcemaps, _options$sourcemaps2, _options$sourcemaps$f, _options$sourcemaps3, _options$sourcemaps4, _options$sourcemaps5;
1592
1614
  plugins.push(debugIdUploadPlugin(createDebugIdUploadFunction({
1593
1615
  assets: (_options$sourcemaps = options.sourcemaps) === null || _options$sourcemaps === void 0 ? void 0 : _options$sourcemaps.assets,
1594
1616
  ignore: (_options$sourcemaps2 = options.sourcemaps) === null || _options$sourcemaps2 === void 0 ? void 0 : _options$sourcemaps2.ignore,
1595
- deleteFilesAfterUpload: (_options$sourcemaps3 = options.sourcemaps) === null || _options$sourcemaps3 === void 0 ? void 0 : _options$sourcemaps3.deleteFilesAfterUpload,
1617
+ filesToDeleteAfterUpload: (_options$sourcemaps$f = (_options$sourcemaps3 = options.sourcemaps) === null || _options$sourcemaps3 === void 0 ? void 0 : _options$sourcemaps3.filesToDeleteAfterUpload) !== null && _options$sourcemaps$f !== void 0 ? _options$sourcemaps$f : (_options$sourcemaps4 = options.sourcemaps) === null || _options$sourcemaps4 === void 0 ? void 0 : _options$sourcemaps4.deleteFilesAfterUpload,
1596
1618
  dist: options.release.dist,
1597
1619
  releaseName: options.release.name,
1598
1620
  logger: logger,
1599
1621
  handleRecoverableError: handleRecoverableError,
1600
- rewriteSourcesHook: (_options$sourcemaps4 = options.sourcemaps) === null || _options$sourcemaps4 === void 0 ? void 0 : _options$sourcemaps4.rewriteSources,
1622
+ rewriteSourcesHook: (_options$sourcemaps5 = options.sourcemaps) === null || _options$sourcemaps5 === void 0 ? void 0 : _options$sourcemaps5.rewriteSources,
1601
1623
  sentryHub: sentryHub,
1602
1624
  sentryClient: sentryClient,
1603
1625
  sentryCliOptions: {
@@ -1784,4 +1806,5 @@ exports.getBuildInformation = getBuildInformation;
1784
1806
  exports.getDebugIdSnippet = getDebugIdSnippet;
1785
1807
  exports.sentryCliBinaryExists = sentryCliBinaryExists;
1786
1808
  exports.sentryUnpluginFactory = sentryUnpluginFactory;
1809
+ exports.stringToUUID = stringToUUID;
1787
1810
  //# sourceMappingURL=index.js.map