UNPKG

@honeybadger-io/webpack

Version:

Webpack plugin to upload source maps to Honeybadger's API - http://docs.honeybadger.io/guides/source-maps.html

134 lines (132 loc) 5.69 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _path = require("path"); var _helpers = require("./helpers"); var _pluginCore = require("@honeybadger-io/plugin-core"); var PLUGIN_NAME = 'HoneybadgerSourceMapPlugin'; /** * @typedef {Object} DeployObject * @property {?string} environment - production, development, staging, etc * @property {?string} repository - URL for repository IE: https://github.com/foo/bar * @property {?string} localUsername - The name of the user deploying. IE: Jane */ var HoneybadgerSourceMapPlugin = /*#__PURE__*/function () { function HoneybadgerSourceMapPlugin(options) { (0, _classCallCheck2["default"])(this, HoneybadgerSourceMapPlugin); this.sendDeployNotification = _pluginCore.sendDeployNotification; this.uploadSourceMaps = _pluginCore.uploadSourcemaps; this.options = (0, _pluginCore.cleanOptions)(options); } (0, _createClass2["default"])(HoneybadgerSourceMapPlugin, [{ key: "afterEmit", value: function () { var _afterEmit = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(compilation) { var assets, _compilation$errors, _compilation$warnings; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!this.isDevEnv(this.options.developmentEnvironments)) { _context.next = 3; break; } if (!this.options.silent) { console.info('\nHoneybadgerSourceMapPlugin will not upload source maps because webpack-dev-server is running.'); } return _context.abrupt("return"); case 3: _context.prev = 3; assets = this.getAssets(compilation); _context.next = 7; return this.uploadSourceMaps(assets, this.options); case 7: if (!this.options.deploy) { _context.next = 10; break; } _context.next = 10; return this.sendDeployNotification(this.options); case 10: _context.next = 15; break; case 12: _context.prev = 12; _context.t0 = _context["catch"](3); if (!this.options.ignoreErrors) { (_compilation$errors = compilation.errors).push.apply(_compilation$errors, (0, _toConsumableArray2["default"])((0, _helpers.handleError)(_context.t0))); } else if (!this.options.silent) { (_compilation$warnings = compilation.warnings).push.apply(_compilation$warnings, (0, _toConsumableArray2["default"])((0, _helpers.handleError)(_context.t0))); } case 15: case "end": return _context.stop(); } } }, _callee, this, [[3, 12]]); })); function afterEmit(_x) { return _afterEmit.apply(this, arguments); } return afterEmit; }() }, { key: "isDevEnv", value: function isDevEnv(devEnvironments) { if (process.env.WEBPACK_DEV_SERVER === 'true') { return true; } return !!(devEnvironments && devEnvironments.includes(process.env.NODE_ENV)); } }, { key: "apply", value: function apply(compiler) { compiler.hooks.afterEmit.tapPromise(PLUGIN_NAME, this.afterEmit.bind(this)); } }, { key: "getAssetPath", value: function getAssetPath(compilation, name) { if (!name) { return ''; } return (0, _path.join)(compilation.getPath(compilation.compiler.outputPath), name.split('?')[0]); } }, { key: "getAssets", value: function getAssets(compilation) { var _this = this; var _compilation$getStats = compilation.getStats().toJson(), chunks = _compilation$getStats.chunks; return chunks.map(function (_ref) { var files = _ref.files, auxiliaryFiles = _ref.auxiliaryFiles; var jsFilename = files.find(function (file) { return /\.js$/.test(file); }); var jsFilePath = _this.getAssetPath(compilation, jsFilename); // Webpack 4 using chunk.files, Webpack 5 uses chunk.auxiliaryFiles // https://webpack.js.org/blog/2020-10-10-webpack-5-release/#stats var sourcemapFilename = (auxiliaryFiles || files).find(function (file) { return /\.js\.map$/.test(file); }); var sourcemapFilePath = _this.getAssetPath(compilation, sourcemapFilename); return { sourcemapFilename: sourcemapFilename, sourcemapFilePath: sourcemapFilePath, jsFilename: jsFilename, jsFilePath: jsFilePath }; }).filter(function (_ref2) { var sourcemapFilename = _ref2.sourcemapFilename, jsFilename = _ref2.jsFilename; return sourcemapFilename && jsFilename; }); } }]); return HoneybadgerSourceMapPlugin; }(); module.exports = HoneybadgerSourceMapPlugin;