@honeybadger-io/nextjs 5.9.12 → 5.10.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.
@@ -5,12 +5,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var fs = require('fs');
6
6
  var path = require('path');
7
7
  var HoneybadgerSourceMapPlugin = require('@honeybadger-io/webpack');
8
+ var Honeybadger = require('@honeybadger-io/js');
8
9
 
9
10
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
11
 
11
12
  var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
12
13
  var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
13
14
  var HoneybadgerSourceMapPlugin__default = /*#__PURE__*/_interopDefaultLegacy(HoneybadgerSourceMapPlugin);
15
+ var Honeybadger__default = /*#__PURE__*/_interopDefaultLegacy(Honeybadger);
14
16
 
15
17
  const URL_DOCS_SOURCE_MAPS_UPLOAD = 'https://docs.honeybadger.io/lib/javascript/integration/nextjs/#source-map-upload-and-tracking-deploys';
16
18
  let _silent = true;
@@ -203,5 +205,58 @@ function setupHoneybadger(config, honeybadgerNextJsConfig) {
203
205
  };
204
206
  }
205
207
 
208
+ function configure() {
209
+ var _a;
210
+ if (((_a = Honeybadger__default["default"].config.apiKey) === null || _a === void 0 ? void 0 : _a.length) > 0) {
211
+ return;
212
+ }
213
+ let projectRoot = undefined;
214
+ try {
215
+ // not available on edge runtime
216
+ projectRoot = process.cwd();
217
+ }
218
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
219
+ catch (error) {
220
+ // do nothing
221
+ }
222
+ Honeybadger__default["default"]
223
+ .configure({
224
+ apiKey: process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY,
225
+ environment: process.env.NEXT_PUBLIC_VERCEL_ENV || process.env.VERCEL_ENV || process.env.NODE_ENV,
226
+ revision: process.env.NEXT_PUBLIC_HONEYBADGER_REVISION,
227
+ projectRoot: 'webpack://_N_E/./'
228
+ })
229
+ .beforeNotify((notice) => {
230
+ if (!projectRoot) {
231
+ return;
232
+ }
233
+ notice === null || notice === void 0 ? void 0 : notice.backtrace.forEach((line) => {
234
+ if (line.file) {
235
+ line.file = line.file.replace(`${projectRoot}/.next/server`, `${process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL}/..`);
236
+ }
237
+ return line;
238
+ });
239
+ });
240
+ }
241
+ /**
242
+ * Wraps a handler function with Honeybadger error reporting.
243
+ * Use with Next.js API route handlers or middleware.
244
+ */
245
+ function withHoneybadger(handler) {
246
+ configure();
247
+ return new Proxy(handler, {
248
+ apply: async (target, thisArg, args) => {
249
+ try {
250
+ return await Reflect.apply(target, thisArg, args);
251
+ }
252
+ catch (error) {
253
+ await Honeybadger__default["default"].notifyAsync(error);
254
+ throw error; // Re-throw the error after reporting it
255
+ }
256
+ },
257
+ });
258
+ }
259
+
206
260
  exports.setupHoneybadger = setupHoneybadger;
261
+ exports.withHoneybadger = withHoneybadger;
207
262
  //# sourceMappingURL=honeybadger-nextjs.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"honeybadger-nextjs.cjs.js","sources":["../../build/index.js"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport HoneybadgerSourceMapPlugin from '@honeybadger-io/webpack';\nconst URL_DOCS_SOURCE_MAPS_UPLOAD = 'https://docs.honeybadger.io/lib/javascript/integration/nextjs/#source-map-upload-and-tracking-deploys';\nlet _silent = true;\nfunction log(type, msg) {\n if (['error', 'warn'].includes(type) || !_silent) {\n console[type]('[HoneybadgerNextJs]', msg);\n }\n}\nfunction shouldUploadSourceMaps(honeybadgerNextJsConfig, context) {\n const { dev } = context;\n if (honeybadgerNextJsConfig.disableSourceMapUpload) {\n return false;\n }\n if (!honeybadgerNextJsConfig.webpackPluginOptions || !honeybadgerNextJsConfig.webpackPluginOptions.apiKey) {\n log('warn', `skipping source map upload; here's how to enable: ${URL_DOCS_SOURCE_MAPS_UPLOAD}`);\n return false;\n }\n if (dev || process.env.NODE_ENV === 'development') {\n return false;\n }\n return true;\n}\nfunction mergeWithExistingWebpackConfig(nextJsWebpackConfig, honeybadgerNextJsConfig) {\n return function webpackFunctionMergedWithHb(webpackConfig, context) {\n const { isServer, dir: projectDir, nextRuntime } = context;\n const configType = isServer ? (nextRuntime === 'edge' ? 'edge' : 'server') : 'browser';\n log('debug', `reached webpackFunctionMergedWithHb isServer[${isServer}] configType[${configType}]`);\n let result = { ...webpackConfig };\n if (typeof nextJsWebpackConfig === 'function') {\n result = nextJsWebpackConfig(result, context);\n }\n const originalEntry = result.entry;\n result.entry = async () => injectHoneybadgerConfigToEntry(originalEntry, projectDir, configType);\n if (shouldUploadSourceMaps(honeybadgerNextJsConfig, context)) {\n // `result.devtool` must be 'hidden-source-map' or 'source-map' to properly pass sourcemaps.\n // Next.js uses regular `source-map` which doesnt pass its sourcemaps to Webpack.\n // https://github.com/vercel/next.js/blob/89ec21ed686dd79a5770b5c669abaff8f55d8fef/packages/next/build/webpack/config/blocks/base.ts#L40\n // Use the hidden-source-map option when you don't want the source maps to be\n // publicly available on the servers, only to the error reporting\n result.devtool = 'hidden-source-map';\n if (!result.plugins) {\n result.plugins = [];\n }\n const options = getWebpackPluginOptions(honeybadgerNextJsConfig);\n if (options) {\n result.plugins.push(new HoneybadgerSourceMapPlugin(options));\n }\n }\n return result;\n };\n}\nasync function injectHoneybadgerConfigToEntry(originalEntry, projectDir, configType) {\n const result = typeof originalEntry === 'function' ? await originalEntry() : { ...originalEntry };\n const hbConfigFile = getHoneybadgerConfigFile(projectDir, configType);\n if (!hbConfigFile) {\n return result;\n }\n const hbConfigFileRelativePath = `./${hbConfigFile}`;\n if (!Object.keys(result).length) {\n log('debug', `no entry points for configType[${configType}]`);\n }\n for (const entryName in result) {\n addHoneybadgerConfigToEntry(result, entryName, hbConfigFileRelativePath, configType);\n }\n return result;\n}\nfunction addHoneybadgerConfigToEntry(entry, entryName, hbConfigFile, configType) {\n log('debug', `adding entry[${entryName}] to configType[${configType}]`);\n switch (configType) {\n case 'server':\n if (!entryName.startsWith('pages/')) {\n return;\n }\n break;\n case 'browser':\n if (!['pages/_app', 'main-app'].includes(entryName)) {\n return;\n }\n break;\n case 'edge':\n // nothing?\n break;\n }\n const currentEntryPoint = entry[entryName];\n let newEntryPoint = currentEntryPoint;\n if (typeof currentEntryPoint === 'string') {\n newEntryPoint = [hbConfigFile, currentEntryPoint];\n }\n else if (Array.isArray(currentEntryPoint)) {\n newEntryPoint = [hbConfigFile, ...currentEntryPoint];\n } // descriptor object (webpack 5+)\n else if (typeof currentEntryPoint === 'object' && currentEntryPoint && 'import' in currentEntryPoint) {\n const currentImportValue = currentEntryPoint['import'];\n const newImportValue = [hbConfigFile];\n if (typeof currentImportValue === 'string') {\n newImportValue.push(currentImportValue);\n }\n else {\n newImportValue.push(...(currentImportValue));\n }\n newEntryPoint = {\n ...currentEntryPoint,\n import: newImportValue,\n };\n }\n else {\n log('error', 'Could not inject Honeybadger config to entry point: ' + JSON.stringify(currentEntryPoint, null, 2));\n }\n entry[entryName] = newEntryPoint;\n}\nfunction getHoneybadgerConfigFile(projectDir, configType) {\n const possibilities = [`honeybadger.${configType}.config.ts`, `honeybadger.${configType}.config.js`];\n for (const filename of possibilities) {\n if (fs.existsSync(path.resolve(projectDir, filename))) {\n return filename;\n }\n }\n log('debug', `could not find config file in ${projectDir} for ${configType}`);\n return null;\n}\nfunction getWebpackPluginOptions(honeybadgerNextJsConfig) {\n var _a, _b, _c;\n const apiKey = ((_a = honeybadgerNextJsConfig.webpackPluginOptions) === null || _a === void 0 ? void 0 : _a.apiKey) || process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY;\n const assetsUrl = ((_b = honeybadgerNextJsConfig.webpackPluginOptions) === null || _b === void 0 ? void 0 : _b.assetsUrl) || process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL;\n if (!apiKey || !assetsUrl) {\n log('error', 'Missing Honeybadger required configuration for webpack plugin. Source maps will not be uploaded to Honeybadger.');\n return null;\n }\n return {\n ...honeybadgerNextJsConfig.webpackPluginOptions,\n apiKey,\n assetsUrl,\n revision: ((_c = honeybadgerNextJsConfig.webpackPluginOptions) === null || _c === void 0 ? void 0 : _c.revision) || process.env.NEXT_PUBLIC_HONEYBADGER_REVISION,\n silent: _silent,\n };\n}\nfunction getNextJsVersionInstalled() {\n var _a;\n try {\n return (_a = require('next/package.json').version) === null || _a === void 0 ? void 0 : _a.split('.');\n }\n catch (e) {\n return null;\n }\n}\n/**\n * NextJs will report a warning if the `serverExternalPackages` option is not present.\n * This is because @honeybadger-io/js will try to require configuration files dynamically (https://github.com/honeybadger-io/honeybadger-js/pull/1268).\n *\n * First reported here: https://github.com/honeybadger-io/honeybadger-js/issues/1351\n */\nfunction addServerExternalPackagesOption(config) {\n var _a, _b;\n // this should be available in the upcoming version of Next.js (14.3.0)\n if (config.serverExternalPackages && Array.isArray(config.serverExternalPackages)) {\n log('debug', 'adding @honeybadger-io/js to serverExternalPackages');\n config.serverExternalPackages.push('@honeybadger-io/js');\n return;\n }\n if (((_a = config.experimental) === null || _a === void 0 ? void 0 : _a.serverComponentsExternalPackages) && Array.isArray((_b = config.experimental) === null || _b === void 0 ? void 0 : _b.serverComponentsExternalPackages)) {\n log('debug', 'adding @honeybadger-io/js to experimental.serverComponentsExternalPackages');\n config.experimental.serverComponentsExternalPackages.push('@honeybadger-io/js');\n return;\n }\n const nextJsVersion = getNextJsVersionInstalled();\n if (nextJsVersion) {\n if ((+nextJsVersion[0] === 14 && +nextJsVersion[1] >= 3) || +nextJsVersion[0] > 14) {\n log('debug', 'adding serverExternalPackages option with value [\"@honeybadger-io/js\"]');\n config.serverExternalPackages = ['@honeybadger-io/js'];\n }\n else {\n log('debug', 'adding experimental.serverComponentsExternalPackages option with value [\"@honeybadger-io/js\"]');\n if (!config.experimental) {\n config.experimental = {};\n }\n config.experimental.serverComponentsExternalPackages = ['@honeybadger-io/js'];\n }\n }\n}\nexport function setupHoneybadger(config, honeybadgerNextJsConfig) {\n var _a;\n if (!honeybadgerNextJsConfig) {\n honeybadgerNextJsConfig = {\n silent: true,\n disableSourceMapUpload: false,\n };\n }\n _silent = (_a = honeybadgerNextJsConfig.silent) !== null && _a !== void 0 ? _a : true;\n addServerExternalPackagesOption(config);\n return {\n ...config,\n webpack: mergeWithExistingWebpackConfig(config.webpack, honeybadgerNextJsConfig)\n };\n}\n//# sourceMappingURL=index.js.map"],"names":["HoneybadgerSourceMapPlugin","fs","path"],"mappings":"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"}
1
+ {"version":3,"file":"honeybadger-nextjs.cjs.js","sources":["../../build/webpack.js","../../build/with-honeybadger.js"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport HoneybadgerSourceMapPlugin from '@honeybadger-io/webpack';\nconst URL_DOCS_SOURCE_MAPS_UPLOAD = 'https://docs.honeybadger.io/lib/javascript/integration/nextjs/#source-map-upload-and-tracking-deploys';\nlet _silent = true;\nfunction log(type, msg) {\n if (['error', 'warn'].includes(type) || !_silent) {\n console[type]('[HoneybadgerNextJs]', msg);\n }\n}\nfunction shouldUploadSourceMaps(honeybadgerNextJsConfig, context) {\n const { dev } = context;\n if (honeybadgerNextJsConfig.disableSourceMapUpload) {\n return false;\n }\n if (!honeybadgerNextJsConfig.webpackPluginOptions || !honeybadgerNextJsConfig.webpackPluginOptions.apiKey) {\n log('warn', `skipping source map upload; here's how to enable: ${URL_DOCS_SOURCE_MAPS_UPLOAD}`);\n return false;\n }\n if (dev || process.env.NODE_ENV === 'development') {\n return false;\n }\n return true;\n}\nfunction mergeWithExistingWebpackConfig(nextJsWebpackConfig, honeybadgerNextJsConfig) {\n return function webpackFunctionMergedWithHb(webpackConfig, context) {\n const { isServer, dir: projectDir, nextRuntime } = context;\n const configType = isServer ? (nextRuntime === 'edge' ? 'edge' : 'server') : 'browser';\n log('debug', `reached webpackFunctionMergedWithHb isServer[${isServer}] configType[${configType}]`);\n let result = { ...webpackConfig };\n if (typeof nextJsWebpackConfig === 'function') {\n result = nextJsWebpackConfig(result, context);\n }\n const originalEntry = result.entry;\n result.entry = async () => injectHoneybadgerConfigToEntry(originalEntry, projectDir, configType);\n if (shouldUploadSourceMaps(honeybadgerNextJsConfig, context)) {\n // `result.devtool` must be 'hidden-source-map' or 'source-map' to properly pass sourcemaps.\n // Next.js uses regular `source-map` which doesnt pass its sourcemaps to Webpack.\n // https://github.com/vercel/next.js/blob/89ec21ed686dd79a5770b5c669abaff8f55d8fef/packages/next/build/webpack/config/blocks/base.ts#L40\n // Use the hidden-source-map option when you don't want the source maps to be\n // publicly available on the servers, only to the error reporting\n result.devtool = 'hidden-source-map';\n if (!result.plugins) {\n result.plugins = [];\n }\n const options = getWebpackPluginOptions(honeybadgerNextJsConfig);\n if (options) {\n result.plugins.push(new HoneybadgerSourceMapPlugin(options));\n }\n }\n return result;\n };\n}\nasync function injectHoneybadgerConfigToEntry(originalEntry, projectDir, configType) {\n const result = typeof originalEntry === 'function' ? await originalEntry() : { ...originalEntry };\n const hbConfigFile = getHoneybadgerConfigFile(projectDir, configType);\n if (!hbConfigFile) {\n return result;\n }\n const hbConfigFileRelativePath = `./${hbConfigFile}`;\n if (!Object.keys(result).length) {\n log('debug', `no entry points for configType[${configType}]`);\n }\n for (const entryName in result) {\n addHoneybadgerConfigToEntry(result, entryName, hbConfigFileRelativePath, configType);\n }\n return result;\n}\nfunction addHoneybadgerConfigToEntry(entry, entryName, hbConfigFile, configType) {\n log('debug', `adding entry[${entryName}] to configType[${configType}]`);\n switch (configType) {\n case 'server':\n if (!entryName.startsWith('pages/')) {\n return;\n }\n break;\n case 'browser':\n if (!['pages/_app', 'main-app'].includes(entryName)) {\n return;\n }\n break;\n case 'edge':\n // nothing?\n break;\n }\n const currentEntryPoint = entry[entryName];\n let newEntryPoint = currentEntryPoint;\n if (typeof currentEntryPoint === 'string') {\n newEntryPoint = [hbConfigFile, currentEntryPoint];\n }\n else if (Array.isArray(currentEntryPoint)) {\n newEntryPoint = [hbConfigFile, ...currentEntryPoint];\n } // descriptor object (webpack 5+)\n else if (typeof currentEntryPoint === 'object' && currentEntryPoint && 'import' in currentEntryPoint) {\n const currentImportValue = currentEntryPoint['import'];\n const newImportValue = [hbConfigFile];\n if (typeof currentImportValue === 'string') {\n newImportValue.push(currentImportValue);\n }\n else {\n newImportValue.push(...(currentImportValue));\n }\n newEntryPoint = {\n ...currentEntryPoint,\n import: newImportValue,\n };\n }\n else {\n log('error', 'Could not inject Honeybadger config to entry point: ' + JSON.stringify(currentEntryPoint, null, 2));\n }\n entry[entryName] = newEntryPoint;\n}\nfunction getHoneybadgerConfigFile(projectDir, configType) {\n const possibilities = [`honeybadger.${configType}.config.ts`, `honeybadger.${configType}.config.js`];\n for (const filename of possibilities) {\n if (fs.existsSync(path.resolve(projectDir, filename))) {\n return filename;\n }\n }\n log('debug', `could not find config file in ${projectDir} for ${configType}`);\n return null;\n}\nfunction getWebpackPluginOptions(honeybadgerNextJsConfig) {\n var _a, _b, _c;\n const apiKey = ((_a = honeybadgerNextJsConfig.webpackPluginOptions) === null || _a === void 0 ? void 0 : _a.apiKey) || process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY;\n const assetsUrl = ((_b = honeybadgerNextJsConfig.webpackPluginOptions) === null || _b === void 0 ? void 0 : _b.assetsUrl) || process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL;\n if (!apiKey || !assetsUrl) {\n log('error', 'Missing Honeybadger required configuration for webpack plugin. Source maps will not be uploaded to Honeybadger.');\n return null;\n }\n return {\n ...honeybadgerNextJsConfig.webpackPluginOptions,\n apiKey,\n assetsUrl,\n revision: ((_c = honeybadgerNextJsConfig.webpackPluginOptions) === null || _c === void 0 ? void 0 : _c.revision) || process.env.NEXT_PUBLIC_HONEYBADGER_REVISION,\n silent: _silent,\n };\n}\nfunction getNextJsVersionInstalled() {\n var _a;\n try {\n return (_a = require('next/package.json').version) === null || _a === void 0 ? void 0 : _a.split('.');\n }\n catch (e) {\n return null;\n }\n}\n/**\n * NextJs will report a warning if the `serverExternalPackages` option is not present.\n * This is because @honeybadger-io/js will try to require configuration files dynamically (https://github.com/honeybadger-io/honeybadger-js/pull/1268).\n *\n * First reported here: https://github.com/honeybadger-io/honeybadger-js/issues/1351\n */\nfunction addServerExternalPackagesOption(config) {\n var _a, _b;\n // this should be available in the upcoming version of Next.js (14.3.0)\n if (config.serverExternalPackages && Array.isArray(config.serverExternalPackages)) {\n log('debug', 'adding @honeybadger-io/js to serverExternalPackages');\n config.serverExternalPackages.push('@honeybadger-io/js');\n return;\n }\n if (((_a = config.experimental) === null || _a === void 0 ? void 0 : _a.serverComponentsExternalPackages) && Array.isArray((_b = config.experimental) === null || _b === void 0 ? void 0 : _b.serverComponentsExternalPackages)) {\n log('debug', 'adding @honeybadger-io/js to experimental.serverComponentsExternalPackages');\n config.experimental.serverComponentsExternalPackages.push('@honeybadger-io/js');\n return;\n }\n const nextJsVersion = getNextJsVersionInstalled();\n if (nextJsVersion) {\n if ((+nextJsVersion[0] === 14 && +nextJsVersion[1] >= 3) || +nextJsVersion[0] > 14) {\n log('debug', 'adding serverExternalPackages option with value [\"@honeybadger-io/js\"]');\n config.serverExternalPackages = ['@honeybadger-io/js'];\n }\n else {\n log('debug', 'adding experimental.serverComponentsExternalPackages option with value [\"@honeybadger-io/js\"]');\n if (!config.experimental) {\n config.experimental = {};\n }\n config.experimental.serverComponentsExternalPackages = ['@honeybadger-io/js'];\n }\n }\n}\nexport function setupHoneybadger(config, honeybadgerNextJsConfig) {\n var _a;\n if (!honeybadgerNextJsConfig) {\n honeybadgerNextJsConfig = {\n silent: true,\n disableSourceMapUpload: false,\n };\n }\n _silent = (_a = honeybadgerNextJsConfig.silent) !== null && _a !== void 0 ? _a : true;\n addServerExternalPackagesOption(config);\n return {\n ...config,\n webpack: mergeWithExistingWebpackConfig(config.webpack, honeybadgerNextJsConfig)\n };\n}\n//# sourceMappingURL=webpack.js.map","import Honeybadger from '@honeybadger-io/js';\nfunction configure() {\n var _a;\n if (((_a = Honeybadger.config.apiKey) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n return;\n }\n let projectRoot = undefined;\n try {\n // not available on edge runtime\n projectRoot = process.cwd();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n catch (error) {\n // do nothing\n }\n Honeybadger\n .configure({\n apiKey: process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY,\n environment: process.env.NEXT_PUBLIC_VERCEL_ENV || process.env.VERCEL_ENV || process.env.NODE_ENV,\n revision: process.env.NEXT_PUBLIC_HONEYBADGER_REVISION,\n projectRoot: 'webpack://_N_E/./'\n })\n .beforeNotify((notice) => {\n if (!projectRoot) {\n return;\n }\n notice === null || notice === void 0 ? void 0 : notice.backtrace.forEach((line) => {\n if (line.file) {\n line.file = line.file.replace(`${projectRoot}/.next/server`, `${process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL}/..`);\n }\n return line;\n });\n });\n}\n/**\n * Wraps a handler function with Honeybadger error reporting.\n * Use with Next.js API route handlers or middleware.\n */\nexport function withHoneybadger(handler) {\n configure();\n return new Proxy(handler, {\n apply: async (target, thisArg, args) => {\n try {\n return await Reflect.apply(target, thisArg, args);\n }\n catch (error) {\n await Honeybadger.notifyAsync(error);\n throw error; // Re-throw the error after reporting it\n }\n },\n });\n}\n//# sourceMappingURL=with-honeybadger.js.map"],"names":["HoneybadgerSourceMapPlugin","fs","path","Honeybadger"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import fs from 'fs';
2
2
  import path from 'path';
3
3
  import HoneybadgerSourceMapPlugin from '@honeybadger-io/webpack';
4
+ import Honeybadger from '@honeybadger-io/js';
4
5
 
5
6
  const URL_DOCS_SOURCE_MAPS_UPLOAD = 'https://docs.honeybadger.io/lib/javascript/integration/nextjs/#source-map-upload-and-tracking-deploys';
6
7
  let _silent = true;
@@ -193,5 +194,57 @@ function setupHoneybadger(config, honeybadgerNextJsConfig) {
193
194
  };
194
195
  }
195
196
 
196
- export { setupHoneybadger };
197
+ function configure() {
198
+ var _a;
199
+ if (((_a = Honeybadger.config.apiKey) === null || _a === void 0 ? void 0 : _a.length) > 0) {
200
+ return;
201
+ }
202
+ let projectRoot = undefined;
203
+ try {
204
+ // not available on edge runtime
205
+ projectRoot = process.cwd();
206
+ }
207
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
208
+ catch (error) {
209
+ // do nothing
210
+ }
211
+ Honeybadger
212
+ .configure({
213
+ apiKey: process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY,
214
+ environment: process.env.NEXT_PUBLIC_VERCEL_ENV || process.env.VERCEL_ENV || process.env.NODE_ENV,
215
+ revision: process.env.NEXT_PUBLIC_HONEYBADGER_REVISION,
216
+ projectRoot: 'webpack://_N_E/./'
217
+ })
218
+ .beforeNotify((notice) => {
219
+ if (!projectRoot) {
220
+ return;
221
+ }
222
+ notice === null || notice === void 0 ? void 0 : notice.backtrace.forEach((line) => {
223
+ if (line.file) {
224
+ line.file = line.file.replace(`${projectRoot}/.next/server`, `${process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL}/..`);
225
+ }
226
+ return line;
227
+ });
228
+ });
229
+ }
230
+ /**
231
+ * Wraps a handler function with Honeybadger error reporting.
232
+ * Use with Next.js API route handlers or middleware.
233
+ */
234
+ function withHoneybadger(handler) {
235
+ configure();
236
+ return new Proxy(handler, {
237
+ apply: async (target, thisArg, args) => {
238
+ try {
239
+ return await Reflect.apply(target, thisArg, args);
240
+ }
241
+ catch (error) {
242
+ await Honeybadger.notifyAsync(error);
243
+ throw error; // Re-throw the error after reporting it
244
+ }
245
+ },
246
+ });
247
+ }
248
+
249
+ export { setupHoneybadger, withHoneybadger };
197
250
  //# sourceMappingURL=honeybadger-nextjs.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"honeybadger-nextjs.esm.js","sources":["../../build/index.js"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport HoneybadgerSourceMapPlugin from '@honeybadger-io/webpack';\nconst URL_DOCS_SOURCE_MAPS_UPLOAD = 'https://docs.honeybadger.io/lib/javascript/integration/nextjs/#source-map-upload-and-tracking-deploys';\nlet _silent = true;\nfunction log(type, msg) {\n if (['error', 'warn'].includes(type) || !_silent) {\n console[type]('[HoneybadgerNextJs]', msg);\n }\n}\nfunction shouldUploadSourceMaps(honeybadgerNextJsConfig, context) {\n const { dev } = context;\n if (honeybadgerNextJsConfig.disableSourceMapUpload) {\n return false;\n }\n if (!honeybadgerNextJsConfig.webpackPluginOptions || !honeybadgerNextJsConfig.webpackPluginOptions.apiKey) {\n log('warn', `skipping source map upload; here's how to enable: ${URL_DOCS_SOURCE_MAPS_UPLOAD}`);\n return false;\n }\n if (dev || process.env.NODE_ENV === 'development') {\n return false;\n }\n return true;\n}\nfunction mergeWithExistingWebpackConfig(nextJsWebpackConfig, honeybadgerNextJsConfig) {\n return function webpackFunctionMergedWithHb(webpackConfig, context) {\n const { isServer, dir: projectDir, nextRuntime } = context;\n const configType = isServer ? (nextRuntime === 'edge' ? 'edge' : 'server') : 'browser';\n log('debug', `reached webpackFunctionMergedWithHb isServer[${isServer}] configType[${configType}]`);\n let result = { ...webpackConfig };\n if (typeof nextJsWebpackConfig === 'function') {\n result = nextJsWebpackConfig(result, context);\n }\n const originalEntry = result.entry;\n result.entry = async () => injectHoneybadgerConfigToEntry(originalEntry, projectDir, configType);\n if (shouldUploadSourceMaps(honeybadgerNextJsConfig, context)) {\n // `result.devtool` must be 'hidden-source-map' or 'source-map' to properly pass sourcemaps.\n // Next.js uses regular `source-map` which doesnt pass its sourcemaps to Webpack.\n // https://github.com/vercel/next.js/blob/89ec21ed686dd79a5770b5c669abaff8f55d8fef/packages/next/build/webpack/config/blocks/base.ts#L40\n // Use the hidden-source-map option when you don't want the source maps to be\n // publicly available on the servers, only to the error reporting\n result.devtool = 'hidden-source-map';\n if (!result.plugins) {\n result.plugins = [];\n }\n const options = getWebpackPluginOptions(honeybadgerNextJsConfig);\n if (options) {\n result.plugins.push(new HoneybadgerSourceMapPlugin(options));\n }\n }\n return result;\n };\n}\nasync function injectHoneybadgerConfigToEntry(originalEntry, projectDir, configType) {\n const result = typeof originalEntry === 'function' ? await originalEntry() : { ...originalEntry };\n const hbConfigFile = getHoneybadgerConfigFile(projectDir, configType);\n if (!hbConfigFile) {\n return result;\n }\n const hbConfigFileRelativePath = `./${hbConfigFile}`;\n if (!Object.keys(result).length) {\n log('debug', `no entry points for configType[${configType}]`);\n }\n for (const entryName in result) {\n addHoneybadgerConfigToEntry(result, entryName, hbConfigFileRelativePath, configType);\n }\n return result;\n}\nfunction addHoneybadgerConfigToEntry(entry, entryName, hbConfigFile, configType) {\n log('debug', `adding entry[${entryName}] to configType[${configType}]`);\n switch (configType) {\n case 'server':\n if (!entryName.startsWith('pages/')) {\n return;\n }\n break;\n case 'browser':\n if (!['pages/_app', 'main-app'].includes(entryName)) {\n return;\n }\n break;\n case 'edge':\n // nothing?\n break;\n }\n const currentEntryPoint = entry[entryName];\n let newEntryPoint = currentEntryPoint;\n if (typeof currentEntryPoint === 'string') {\n newEntryPoint = [hbConfigFile, currentEntryPoint];\n }\n else if (Array.isArray(currentEntryPoint)) {\n newEntryPoint = [hbConfigFile, ...currentEntryPoint];\n } // descriptor object (webpack 5+)\n else if (typeof currentEntryPoint === 'object' && currentEntryPoint && 'import' in currentEntryPoint) {\n const currentImportValue = currentEntryPoint['import'];\n const newImportValue = [hbConfigFile];\n if (typeof currentImportValue === 'string') {\n newImportValue.push(currentImportValue);\n }\n else {\n newImportValue.push(...(currentImportValue));\n }\n newEntryPoint = {\n ...currentEntryPoint,\n import: newImportValue,\n };\n }\n else {\n log('error', 'Could not inject Honeybadger config to entry point: ' + JSON.stringify(currentEntryPoint, null, 2));\n }\n entry[entryName] = newEntryPoint;\n}\nfunction getHoneybadgerConfigFile(projectDir, configType) {\n const possibilities = [`honeybadger.${configType}.config.ts`, `honeybadger.${configType}.config.js`];\n for (const filename of possibilities) {\n if (fs.existsSync(path.resolve(projectDir, filename))) {\n return filename;\n }\n }\n log('debug', `could not find config file in ${projectDir} for ${configType}`);\n return null;\n}\nfunction getWebpackPluginOptions(honeybadgerNextJsConfig) {\n var _a, _b, _c;\n const apiKey = ((_a = honeybadgerNextJsConfig.webpackPluginOptions) === null || _a === void 0 ? void 0 : _a.apiKey) || process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY;\n const assetsUrl = ((_b = honeybadgerNextJsConfig.webpackPluginOptions) === null || _b === void 0 ? void 0 : _b.assetsUrl) || process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL;\n if (!apiKey || !assetsUrl) {\n log('error', 'Missing Honeybadger required configuration for webpack plugin. Source maps will not be uploaded to Honeybadger.');\n return null;\n }\n return {\n ...honeybadgerNextJsConfig.webpackPluginOptions,\n apiKey,\n assetsUrl,\n revision: ((_c = honeybadgerNextJsConfig.webpackPluginOptions) === null || _c === void 0 ? void 0 : _c.revision) || process.env.NEXT_PUBLIC_HONEYBADGER_REVISION,\n silent: _silent,\n };\n}\nfunction getNextJsVersionInstalled() {\n var _a;\n try {\n return (_a = require('next/package.json').version) === null || _a === void 0 ? void 0 : _a.split('.');\n }\n catch (e) {\n return null;\n }\n}\n/**\n * NextJs will report a warning if the `serverExternalPackages` option is not present.\n * This is because @honeybadger-io/js will try to require configuration files dynamically (https://github.com/honeybadger-io/honeybadger-js/pull/1268).\n *\n * First reported here: https://github.com/honeybadger-io/honeybadger-js/issues/1351\n */\nfunction addServerExternalPackagesOption(config) {\n var _a, _b;\n // this should be available in the upcoming version of Next.js (14.3.0)\n if (config.serverExternalPackages && Array.isArray(config.serverExternalPackages)) {\n log('debug', 'adding @honeybadger-io/js to serverExternalPackages');\n config.serverExternalPackages.push('@honeybadger-io/js');\n return;\n }\n if (((_a = config.experimental) === null || _a === void 0 ? void 0 : _a.serverComponentsExternalPackages) && Array.isArray((_b = config.experimental) === null || _b === void 0 ? void 0 : _b.serverComponentsExternalPackages)) {\n log('debug', 'adding @honeybadger-io/js to experimental.serverComponentsExternalPackages');\n config.experimental.serverComponentsExternalPackages.push('@honeybadger-io/js');\n return;\n }\n const nextJsVersion = getNextJsVersionInstalled();\n if (nextJsVersion) {\n if ((+nextJsVersion[0] === 14 && +nextJsVersion[1] >= 3) || +nextJsVersion[0] > 14) {\n log('debug', 'adding serverExternalPackages option with value [\"@honeybadger-io/js\"]');\n config.serverExternalPackages = ['@honeybadger-io/js'];\n }\n else {\n log('debug', 'adding experimental.serverComponentsExternalPackages option with value [\"@honeybadger-io/js\"]');\n if (!config.experimental) {\n config.experimental = {};\n }\n config.experimental.serverComponentsExternalPackages = ['@honeybadger-io/js'];\n }\n }\n}\nexport function setupHoneybadger(config, honeybadgerNextJsConfig) {\n var _a;\n if (!honeybadgerNextJsConfig) {\n honeybadgerNextJsConfig = {\n silent: true,\n disableSourceMapUpload: false,\n };\n }\n _silent = (_a = honeybadgerNextJsConfig.silent) !== null && _a !== void 0 ? _a : true;\n addServerExternalPackagesOption(config);\n return {\n ...config,\n webpack: mergeWithExistingWebpackConfig(config.webpack, honeybadgerNextJsConfig)\n };\n}\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"honeybadger-nextjs.esm.js","sources":["../../build/webpack.js","../../build/with-honeybadger.js"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport HoneybadgerSourceMapPlugin from '@honeybadger-io/webpack';\nconst URL_DOCS_SOURCE_MAPS_UPLOAD = 'https://docs.honeybadger.io/lib/javascript/integration/nextjs/#source-map-upload-and-tracking-deploys';\nlet _silent = true;\nfunction log(type, msg) {\n if (['error', 'warn'].includes(type) || !_silent) {\n console[type]('[HoneybadgerNextJs]', msg);\n }\n}\nfunction shouldUploadSourceMaps(honeybadgerNextJsConfig, context) {\n const { dev } = context;\n if (honeybadgerNextJsConfig.disableSourceMapUpload) {\n return false;\n }\n if (!honeybadgerNextJsConfig.webpackPluginOptions || !honeybadgerNextJsConfig.webpackPluginOptions.apiKey) {\n log('warn', `skipping source map upload; here's how to enable: ${URL_DOCS_SOURCE_MAPS_UPLOAD}`);\n return false;\n }\n if (dev || process.env.NODE_ENV === 'development') {\n return false;\n }\n return true;\n}\nfunction mergeWithExistingWebpackConfig(nextJsWebpackConfig, honeybadgerNextJsConfig) {\n return function webpackFunctionMergedWithHb(webpackConfig, context) {\n const { isServer, dir: projectDir, nextRuntime } = context;\n const configType = isServer ? (nextRuntime === 'edge' ? 'edge' : 'server') : 'browser';\n log('debug', `reached webpackFunctionMergedWithHb isServer[${isServer}] configType[${configType}]`);\n let result = { ...webpackConfig };\n if (typeof nextJsWebpackConfig === 'function') {\n result = nextJsWebpackConfig(result, context);\n }\n const originalEntry = result.entry;\n result.entry = async () => injectHoneybadgerConfigToEntry(originalEntry, projectDir, configType);\n if (shouldUploadSourceMaps(honeybadgerNextJsConfig, context)) {\n // `result.devtool` must be 'hidden-source-map' or 'source-map' to properly pass sourcemaps.\n // Next.js uses regular `source-map` which doesnt pass its sourcemaps to Webpack.\n // https://github.com/vercel/next.js/blob/89ec21ed686dd79a5770b5c669abaff8f55d8fef/packages/next/build/webpack/config/blocks/base.ts#L40\n // Use the hidden-source-map option when you don't want the source maps to be\n // publicly available on the servers, only to the error reporting\n result.devtool = 'hidden-source-map';\n if (!result.plugins) {\n result.plugins = [];\n }\n const options = getWebpackPluginOptions(honeybadgerNextJsConfig);\n if (options) {\n result.plugins.push(new HoneybadgerSourceMapPlugin(options));\n }\n }\n return result;\n };\n}\nasync function injectHoneybadgerConfigToEntry(originalEntry, projectDir, configType) {\n const result = typeof originalEntry === 'function' ? await originalEntry() : { ...originalEntry };\n const hbConfigFile = getHoneybadgerConfigFile(projectDir, configType);\n if (!hbConfigFile) {\n return result;\n }\n const hbConfigFileRelativePath = `./${hbConfigFile}`;\n if (!Object.keys(result).length) {\n log('debug', `no entry points for configType[${configType}]`);\n }\n for (const entryName in result) {\n addHoneybadgerConfigToEntry(result, entryName, hbConfigFileRelativePath, configType);\n }\n return result;\n}\nfunction addHoneybadgerConfigToEntry(entry, entryName, hbConfigFile, configType) {\n log('debug', `adding entry[${entryName}] to configType[${configType}]`);\n switch (configType) {\n case 'server':\n if (!entryName.startsWith('pages/')) {\n return;\n }\n break;\n case 'browser':\n if (!['pages/_app', 'main-app'].includes(entryName)) {\n return;\n }\n break;\n case 'edge':\n // nothing?\n break;\n }\n const currentEntryPoint = entry[entryName];\n let newEntryPoint = currentEntryPoint;\n if (typeof currentEntryPoint === 'string') {\n newEntryPoint = [hbConfigFile, currentEntryPoint];\n }\n else if (Array.isArray(currentEntryPoint)) {\n newEntryPoint = [hbConfigFile, ...currentEntryPoint];\n } // descriptor object (webpack 5+)\n else if (typeof currentEntryPoint === 'object' && currentEntryPoint && 'import' in currentEntryPoint) {\n const currentImportValue = currentEntryPoint['import'];\n const newImportValue = [hbConfigFile];\n if (typeof currentImportValue === 'string') {\n newImportValue.push(currentImportValue);\n }\n else {\n newImportValue.push(...(currentImportValue));\n }\n newEntryPoint = {\n ...currentEntryPoint,\n import: newImportValue,\n };\n }\n else {\n log('error', 'Could not inject Honeybadger config to entry point: ' + JSON.stringify(currentEntryPoint, null, 2));\n }\n entry[entryName] = newEntryPoint;\n}\nfunction getHoneybadgerConfigFile(projectDir, configType) {\n const possibilities = [`honeybadger.${configType}.config.ts`, `honeybadger.${configType}.config.js`];\n for (const filename of possibilities) {\n if (fs.existsSync(path.resolve(projectDir, filename))) {\n return filename;\n }\n }\n log('debug', `could not find config file in ${projectDir} for ${configType}`);\n return null;\n}\nfunction getWebpackPluginOptions(honeybadgerNextJsConfig) {\n var _a, _b, _c;\n const apiKey = ((_a = honeybadgerNextJsConfig.webpackPluginOptions) === null || _a === void 0 ? void 0 : _a.apiKey) || process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY;\n const assetsUrl = ((_b = honeybadgerNextJsConfig.webpackPluginOptions) === null || _b === void 0 ? void 0 : _b.assetsUrl) || process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL;\n if (!apiKey || !assetsUrl) {\n log('error', 'Missing Honeybadger required configuration for webpack plugin. Source maps will not be uploaded to Honeybadger.');\n return null;\n }\n return {\n ...honeybadgerNextJsConfig.webpackPluginOptions,\n apiKey,\n assetsUrl,\n revision: ((_c = honeybadgerNextJsConfig.webpackPluginOptions) === null || _c === void 0 ? void 0 : _c.revision) || process.env.NEXT_PUBLIC_HONEYBADGER_REVISION,\n silent: _silent,\n };\n}\nfunction getNextJsVersionInstalled() {\n var _a;\n try {\n return (_a = require('next/package.json').version) === null || _a === void 0 ? void 0 : _a.split('.');\n }\n catch (e) {\n return null;\n }\n}\n/**\n * NextJs will report a warning if the `serverExternalPackages` option is not present.\n * This is because @honeybadger-io/js will try to require configuration files dynamically (https://github.com/honeybadger-io/honeybadger-js/pull/1268).\n *\n * First reported here: https://github.com/honeybadger-io/honeybadger-js/issues/1351\n */\nfunction addServerExternalPackagesOption(config) {\n var _a, _b;\n // this should be available in the upcoming version of Next.js (14.3.0)\n if (config.serverExternalPackages && Array.isArray(config.serverExternalPackages)) {\n log('debug', 'adding @honeybadger-io/js to serverExternalPackages');\n config.serverExternalPackages.push('@honeybadger-io/js');\n return;\n }\n if (((_a = config.experimental) === null || _a === void 0 ? void 0 : _a.serverComponentsExternalPackages) && Array.isArray((_b = config.experimental) === null || _b === void 0 ? void 0 : _b.serverComponentsExternalPackages)) {\n log('debug', 'adding @honeybadger-io/js to experimental.serverComponentsExternalPackages');\n config.experimental.serverComponentsExternalPackages.push('@honeybadger-io/js');\n return;\n }\n const nextJsVersion = getNextJsVersionInstalled();\n if (nextJsVersion) {\n if ((+nextJsVersion[0] === 14 && +nextJsVersion[1] >= 3) || +nextJsVersion[0] > 14) {\n log('debug', 'adding serverExternalPackages option with value [\"@honeybadger-io/js\"]');\n config.serverExternalPackages = ['@honeybadger-io/js'];\n }\n else {\n log('debug', 'adding experimental.serverComponentsExternalPackages option with value [\"@honeybadger-io/js\"]');\n if (!config.experimental) {\n config.experimental = {};\n }\n config.experimental.serverComponentsExternalPackages = ['@honeybadger-io/js'];\n }\n }\n}\nexport function setupHoneybadger(config, honeybadgerNextJsConfig) {\n var _a;\n if (!honeybadgerNextJsConfig) {\n honeybadgerNextJsConfig = {\n silent: true,\n disableSourceMapUpload: false,\n };\n }\n _silent = (_a = honeybadgerNextJsConfig.silent) !== null && _a !== void 0 ? _a : true;\n addServerExternalPackagesOption(config);\n return {\n ...config,\n webpack: mergeWithExistingWebpackConfig(config.webpack, honeybadgerNextJsConfig)\n };\n}\n//# sourceMappingURL=webpack.js.map","import Honeybadger from '@honeybadger-io/js';\nfunction configure() {\n var _a;\n if (((_a = Honeybadger.config.apiKey) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n return;\n }\n let projectRoot = undefined;\n try {\n // not available on edge runtime\n projectRoot = process.cwd();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n catch (error) {\n // do nothing\n }\n Honeybadger\n .configure({\n apiKey: process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY,\n environment: process.env.NEXT_PUBLIC_VERCEL_ENV || process.env.VERCEL_ENV || process.env.NODE_ENV,\n revision: process.env.NEXT_PUBLIC_HONEYBADGER_REVISION,\n projectRoot: 'webpack://_N_E/./'\n })\n .beforeNotify((notice) => {\n if (!projectRoot) {\n return;\n }\n notice === null || notice === void 0 ? void 0 : notice.backtrace.forEach((line) => {\n if (line.file) {\n line.file = line.file.replace(`${projectRoot}/.next/server`, `${process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL}/..`);\n }\n return line;\n });\n });\n}\n/**\n * Wraps a handler function with Honeybadger error reporting.\n * Use with Next.js API route handlers or middleware.\n */\nexport function withHoneybadger(handler) {\n configure();\n return new Proxy(handler, {\n apply: async (target, thisArg, args) => {\n try {\n return await Reflect.apply(target, thisArg, args);\n }\n catch (error) {\n await Honeybadger.notifyAsync(error);\n throw error; // Re-throw the error after reporting it\n }\n },\n });\n}\n//# sourceMappingURL=with-honeybadger.js.map"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import { HoneybadgerNextJsConfig } from './types';
2
- export declare function setupHoneybadger(config: any, honeybadgerNextJsConfig?: HoneybadgerNextJsConfig): any;
1
+ export * from './webpack';
2
+ export * from './with-honeybadger';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,3 @@
1
+ import { HoneybadgerNextJsConfig } from './types';
2
+ export declare function setupHoneybadger(config: any, honeybadgerNextJsConfig?: HoneybadgerNextJsConfig): any;
3
+ //# sourceMappingURL=webpack.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+ /**
3
+ * Wraps a handler function with Honeybadger error reporting.
4
+ * Use with Next.js API route handlers or middleware.
5
+ */
6
+ export declare function withHoneybadger(handler: (req: NextRequest | Request, ...args: unknown[]) => Promise<NextResponse>): (req: NextRequest | Request, ...args: unknown[]) => Promise<NextResponse>;
7
+ //# sourceMappingURL=with-honeybadger.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@honeybadger-io/nextjs",
3
- "version": "5.9.12",
3
+ "version": "5.10.0",
4
4
  "description": "Next.js integration for Honeybadger",
5
5
  "keywords": [
6
6
  "nextjs",
@@ -63,5 +63,5 @@
63
63
  "publishConfig": {
64
64
  "access": "public"
65
65
  },
66
- "gitHead": "0fb9be8dc958a4add1950fcd8271bef733687e3a"
66
+ "gitHead": "bf46fc963f6e53ddcc5fe27a22505dba06df4b63"
67
67
  }
package/src/index.ts CHANGED
@@ -1,228 +1,2 @@
1
- import fs from 'fs'
2
- import path from 'path'
3
- import HoneybadgerSourceMapPlugin from '@honeybadger-io/webpack'
4
- import type { WebpackConfigContext } from 'next/dist/server/config-shared'
5
- import { HoneybadgerNextJsConfig, NextJsRuntime, HoneybadgerWebpackPluginOptions } from './types'
6
-
7
- const URL_DOCS_SOURCE_MAPS_UPLOAD = 'https://docs.honeybadger.io/lib/javascript/integration/nextjs/#source-map-upload-and-tracking-deploys'
8
- let _silent = true
9
- function log(type: 'error' | 'warn' | 'debug', msg: string): void {
10
- if (['error', 'warn'].includes(type) || !_silent) {
11
- console[type]('[HoneybadgerNextJs]', msg)
12
- }
13
- }
14
-
15
- function shouldUploadSourceMaps(honeybadgerNextJsConfig: HoneybadgerNextJsConfig, context: WebpackConfigContext): boolean {
16
- const { dev } = context
17
-
18
- if (honeybadgerNextJsConfig.disableSourceMapUpload) {
19
- return false
20
- }
21
-
22
- if (!honeybadgerNextJsConfig.webpackPluginOptions || !honeybadgerNextJsConfig.webpackPluginOptions.apiKey) {
23
- log('warn', `skipping source map upload; here's how to enable: ${URL_DOCS_SOURCE_MAPS_UPLOAD}`)
24
- return false
25
- }
26
-
27
- if (dev || process.env.NODE_ENV === 'development') {
28
- return false
29
- }
30
-
31
- return true
32
- }
33
-
34
- function mergeWithExistingWebpackConfig(nextJsWebpackConfig, honeybadgerNextJsConfig: HoneybadgerNextJsConfig) {
35
- return function webpackFunctionMergedWithHb(webpackConfig, context: WebpackConfigContext) {
36
-
37
- const { isServer, dir: projectDir, nextRuntime } = context
38
- const configType = isServer ? (nextRuntime === 'edge' ? 'edge' : 'server') : 'browser'
39
- log('debug', `reached webpackFunctionMergedWithHb isServer[${isServer}] configType[${configType}]`)
40
-
41
- let result = { ...webpackConfig }
42
- if (typeof nextJsWebpackConfig === 'function') {
43
- result = nextJsWebpackConfig(result, context)
44
- }
45
-
46
- const originalEntry = result.entry
47
- result.entry = async () => injectHoneybadgerConfigToEntry(originalEntry, projectDir, configType)
48
-
49
- if (shouldUploadSourceMaps(honeybadgerNextJsConfig, context)) {
50
- // `result.devtool` must be 'hidden-source-map' or 'source-map' to properly pass sourcemaps.
51
- // Next.js uses regular `source-map` which doesnt pass its sourcemaps to Webpack.
52
- // https://github.com/vercel/next.js/blob/89ec21ed686dd79a5770b5c669abaff8f55d8fef/packages/next/build/webpack/config/blocks/base.ts#L40
53
- // Use the hidden-source-map option when you don't want the source maps to be
54
- // publicly available on the servers, only to the error reporting
55
- result.devtool = 'hidden-source-map'
56
- if (!result.plugins) {
57
- result.plugins = []
58
- }
59
- const options = getWebpackPluginOptions(honeybadgerNextJsConfig)
60
- if (options) {
61
- result.plugins.push(new HoneybadgerSourceMapPlugin(options))
62
- }
63
- }
64
-
65
- return result
66
- }
67
- }
68
-
69
- async function injectHoneybadgerConfigToEntry(originalEntry, projectDir: string, configType: NextJsRuntime) {
70
- const result = typeof originalEntry === 'function' ? await originalEntry() : { ...originalEntry }
71
- const hbConfigFile = getHoneybadgerConfigFile(projectDir, configType)
72
- if (!hbConfigFile) {
73
- return result
74
- }
75
-
76
- const hbConfigFileRelativePath = `./${hbConfigFile}`
77
- if (!Object.keys(result).length) {
78
- log('debug', `no entry points for configType[${configType}]`)
79
- }
80
- for (const entryName in result) {
81
- addHoneybadgerConfigToEntry(result, entryName, hbConfigFileRelativePath, configType)
82
- }
83
-
84
- return result
85
- }
86
-
87
- function addHoneybadgerConfigToEntry(entry, entryName: string, hbConfigFile: string, configType: NextJsRuntime) {
88
-
89
- log('debug', `adding entry[${entryName}] to configType[${configType}]`)
90
-
91
- switch (configType) {
92
- case 'server':
93
- if (!entryName.startsWith('pages/')) {
94
- return
95
- }
96
-
97
- break
98
- case 'browser':
99
- if (!['pages/_app', 'main-app'].includes(entryName)) {
100
- return
101
- }
102
-
103
- break
104
- case 'edge':
105
- // nothing?
106
-
107
- break
108
- }
109
-
110
- const currentEntryPoint = entry[entryName]
111
- let newEntryPoint = currentEntryPoint
112
-
113
- if (typeof currentEntryPoint === 'string') {
114
- newEntryPoint = [hbConfigFile, currentEntryPoint]
115
- } else if (Array.isArray(currentEntryPoint)) {
116
- newEntryPoint = [hbConfigFile, ...currentEntryPoint]
117
- } // descriptor object (webpack 5+)
118
- else if (typeof currentEntryPoint === 'object' && currentEntryPoint && 'import' in currentEntryPoint) {
119
- const currentImportValue = currentEntryPoint['import']
120
- const newImportValue = [hbConfigFile]
121
- if (typeof currentImportValue === 'string') {
122
- newImportValue.push(currentImportValue)
123
- } else {
124
- newImportValue.push(...(currentImportValue))
125
- }
126
- newEntryPoint = {
127
- ...currentEntryPoint,
128
- import: newImportValue,
129
- };
130
- } else {
131
- log('error', 'Could not inject Honeybadger config to entry point: ' + JSON.stringify(currentEntryPoint, null, 2))
132
- }
133
-
134
- entry[entryName] = newEntryPoint
135
- }
136
-
137
- function getHoneybadgerConfigFile(projectDir: string, configType: NextJsRuntime): string | null {
138
- const possibilities = [`honeybadger.${configType}.config.ts`, `honeybadger.${configType}.config.js`]
139
-
140
- for (const filename of possibilities) {
141
- if (fs.existsSync(path.resolve(projectDir, filename))) {
142
- return filename;
143
- }
144
- }
145
-
146
- log('debug', `could not find config file in ${projectDir} for ${configType}`)
147
- return null
148
- }
149
-
150
- function getWebpackPluginOptions(honeybadgerNextJsConfig: HoneybadgerNextJsConfig): HoneybadgerWebpackPluginOptions | null {
151
- const apiKey = honeybadgerNextJsConfig.webpackPluginOptions?.apiKey || process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY
152
- const assetsUrl = honeybadgerNextJsConfig.webpackPluginOptions?.assetsUrl || process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL
153
- if (!apiKey || !assetsUrl) {
154
- log('error', 'Missing Honeybadger required configuration for webpack plugin. Source maps will not be uploaded to Honeybadger.')
155
-
156
- return null
157
- }
158
-
159
- return {
160
- ...honeybadgerNextJsConfig.webpackPluginOptions,
161
- apiKey,
162
- assetsUrl,
163
- revision: honeybadgerNextJsConfig.webpackPluginOptions?.revision || process.env.NEXT_PUBLIC_HONEYBADGER_REVISION,
164
- silent: _silent,
165
- }
166
- }
167
-
168
- function getNextJsVersionInstalled(): [major: string, minor: string, patch: string] | null {
169
- try {
170
- return require('next/package.json').version?.split('.')
171
- } catch (e) {
172
- return null
173
- }
174
- }
175
-
176
- /**
177
- * NextJs will report a warning if the `serverExternalPackages` option is not present.
178
- * This is because @honeybadger-io/js will try to require configuration files dynamically (https://github.com/honeybadger-io/honeybadger-js/pull/1268).
179
- *
180
- * First reported here: https://github.com/honeybadger-io/honeybadger-js/issues/1351
181
- */
182
- function addServerExternalPackagesOption(config) {
183
- // this should be available in the upcoming version of Next.js (14.3.0)
184
- if (config.serverExternalPackages && Array.isArray(config.serverExternalPackages)) {
185
- log('debug', 'adding @honeybadger-io/js to serverExternalPackages')
186
- config.serverExternalPackages.push('@honeybadger-io/js')
187
- return
188
- }
189
-
190
- if (config.experimental?.serverComponentsExternalPackages && Array.isArray(config.experimental?.serverComponentsExternalPackages)) {
191
- log('debug', 'adding @honeybadger-io/js to experimental.serverComponentsExternalPackages')
192
- config.experimental.serverComponentsExternalPackages.push('@honeybadger-io/js')
193
- return
194
- }
195
-
196
- const nextJsVersion = getNextJsVersionInstalled();
197
- if (nextJsVersion) {
198
- if ((+nextJsVersion[0] === 14 && +nextJsVersion[1] >= 3) || +nextJsVersion[0] > 14) {
199
- log('debug', 'adding serverExternalPackages option with value ["@honeybadger-io/js"]')
200
- config.serverExternalPackages = ['@honeybadger-io/js']
201
- }
202
- else {
203
- log('debug', 'adding experimental.serverComponentsExternalPackages option with value ["@honeybadger-io/js"]')
204
- if (!config.experimental) {
205
- config.experimental = {}
206
- }
207
- config.experimental.serverComponentsExternalPackages = ['@honeybadger-io/js']
208
- }
209
- }
210
- }
211
-
212
- export function setupHoneybadger(config, honeybadgerNextJsConfig?: HoneybadgerNextJsConfig) {
213
- if (!honeybadgerNextJsConfig) {
214
- honeybadgerNextJsConfig = {
215
- silent: true,
216
- disableSourceMapUpload: false,
217
- }
218
- }
219
-
220
- _silent = honeybadgerNextJsConfig.silent ?? true
221
-
222
- addServerExternalPackagesOption(config)
223
-
224
- return {
225
- ...config,
226
- webpack: mergeWithExistingWebpackConfig(config.webpack, honeybadgerNextJsConfig)
227
- }
228
- }
1
+ export * from './webpack'
2
+ export * from './with-honeybadger'
package/src/webpack.ts ADDED
@@ -0,0 +1,228 @@
1
+ import fs from 'fs'
2
+ import path from 'path'
3
+ import HoneybadgerSourceMapPlugin from '@honeybadger-io/webpack'
4
+ import type { WebpackConfigContext } from 'next/dist/server/config-shared'
5
+ import { HoneybadgerNextJsConfig, NextJsRuntime, HoneybadgerWebpackPluginOptions } from './types'
6
+
7
+ const URL_DOCS_SOURCE_MAPS_UPLOAD = 'https://docs.honeybadger.io/lib/javascript/integration/nextjs/#source-map-upload-and-tracking-deploys'
8
+ let _silent = true
9
+ function log(type: 'error' | 'warn' | 'debug', msg: string): void {
10
+ if (['error', 'warn'].includes(type) || !_silent) {
11
+ console[type]('[HoneybadgerNextJs]', msg)
12
+ }
13
+ }
14
+
15
+ function shouldUploadSourceMaps(honeybadgerNextJsConfig: HoneybadgerNextJsConfig, context: WebpackConfigContext): boolean {
16
+ const { dev } = context
17
+
18
+ if (honeybadgerNextJsConfig.disableSourceMapUpload) {
19
+ return false
20
+ }
21
+
22
+ if (!honeybadgerNextJsConfig.webpackPluginOptions || !honeybadgerNextJsConfig.webpackPluginOptions.apiKey) {
23
+ log('warn', `skipping source map upload; here's how to enable: ${URL_DOCS_SOURCE_MAPS_UPLOAD}`)
24
+ return false
25
+ }
26
+
27
+ if (dev || process.env.NODE_ENV === 'development') {
28
+ return false
29
+ }
30
+
31
+ return true
32
+ }
33
+
34
+ function mergeWithExistingWebpackConfig(nextJsWebpackConfig, honeybadgerNextJsConfig: HoneybadgerNextJsConfig) {
35
+ return function webpackFunctionMergedWithHb(webpackConfig, context: WebpackConfigContext) {
36
+
37
+ const { isServer, dir: projectDir, nextRuntime } = context
38
+ const configType = isServer ? (nextRuntime === 'edge' ? 'edge' : 'server') : 'browser'
39
+ log('debug', `reached webpackFunctionMergedWithHb isServer[${isServer}] configType[${configType}]`)
40
+
41
+ let result = { ...webpackConfig }
42
+ if (typeof nextJsWebpackConfig === 'function') {
43
+ result = nextJsWebpackConfig(result, context)
44
+ }
45
+
46
+ const originalEntry = result.entry
47
+ result.entry = async () => injectHoneybadgerConfigToEntry(originalEntry, projectDir, configType)
48
+
49
+ if (shouldUploadSourceMaps(honeybadgerNextJsConfig, context)) {
50
+ // `result.devtool` must be 'hidden-source-map' or 'source-map' to properly pass sourcemaps.
51
+ // Next.js uses regular `source-map` which doesnt pass its sourcemaps to Webpack.
52
+ // https://github.com/vercel/next.js/blob/89ec21ed686dd79a5770b5c669abaff8f55d8fef/packages/next/build/webpack/config/blocks/base.ts#L40
53
+ // Use the hidden-source-map option when you don't want the source maps to be
54
+ // publicly available on the servers, only to the error reporting
55
+ result.devtool = 'hidden-source-map'
56
+ if (!result.plugins) {
57
+ result.plugins = []
58
+ }
59
+ const options = getWebpackPluginOptions(honeybadgerNextJsConfig)
60
+ if (options) {
61
+ result.plugins.push(new HoneybadgerSourceMapPlugin(options))
62
+ }
63
+ }
64
+
65
+ return result
66
+ }
67
+ }
68
+
69
+ async function injectHoneybadgerConfigToEntry(originalEntry, projectDir: string, configType: NextJsRuntime) {
70
+ const result = typeof originalEntry === 'function' ? await originalEntry() : { ...originalEntry }
71
+ const hbConfigFile = getHoneybadgerConfigFile(projectDir, configType)
72
+ if (!hbConfigFile) {
73
+ return result
74
+ }
75
+
76
+ const hbConfigFileRelativePath = `./${hbConfigFile}`
77
+ if (!Object.keys(result).length) {
78
+ log('debug', `no entry points for configType[${configType}]`)
79
+ }
80
+ for (const entryName in result) {
81
+ addHoneybadgerConfigToEntry(result, entryName, hbConfigFileRelativePath, configType)
82
+ }
83
+
84
+ return result
85
+ }
86
+
87
+ function addHoneybadgerConfigToEntry(entry, entryName: string, hbConfigFile: string, configType: NextJsRuntime) {
88
+
89
+ log('debug', `adding entry[${entryName}] to configType[${configType}]`)
90
+
91
+ switch (configType) {
92
+ case 'server':
93
+ if (!entryName.startsWith('pages/')) {
94
+ return
95
+ }
96
+
97
+ break
98
+ case 'browser':
99
+ if (!['pages/_app', 'main-app'].includes(entryName)) {
100
+ return
101
+ }
102
+
103
+ break
104
+ case 'edge':
105
+ // nothing?
106
+
107
+ break
108
+ }
109
+
110
+ const currentEntryPoint = entry[entryName]
111
+ let newEntryPoint = currentEntryPoint
112
+
113
+ if (typeof currentEntryPoint === 'string') {
114
+ newEntryPoint = [hbConfigFile, currentEntryPoint]
115
+ } else if (Array.isArray(currentEntryPoint)) {
116
+ newEntryPoint = [hbConfigFile, ...currentEntryPoint]
117
+ } // descriptor object (webpack 5+)
118
+ else if (typeof currentEntryPoint === 'object' && currentEntryPoint && 'import' in currentEntryPoint) {
119
+ const currentImportValue = currentEntryPoint['import']
120
+ const newImportValue = [hbConfigFile]
121
+ if (typeof currentImportValue === 'string') {
122
+ newImportValue.push(currentImportValue)
123
+ } else {
124
+ newImportValue.push(...(currentImportValue))
125
+ }
126
+ newEntryPoint = {
127
+ ...currentEntryPoint,
128
+ import: newImportValue,
129
+ };
130
+ } else {
131
+ log('error', 'Could not inject Honeybadger config to entry point: ' + JSON.stringify(currentEntryPoint, null, 2))
132
+ }
133
+
134
+ entry[entryName] = newEntryPoint
135
+ }
136
+
137
+ function getHoneybadgerConfigFile(projectDir: string, configType: NextJsRuntime): string | null {
138
+ const possibilities = [`honeybadger.${configType}.config.ts`, `honeybadger.${configType}.config.js`]
139
+
140
+ for (const filename of possibilities) {
141
+ if (fs.existsSync(path.resolve(projectDir, filename))) {
142
+ return filename;
143
+ }
144
+ }
145
+
146
+ log('debug', `could not find config file in ${projectDir} for ${configType}`)
147
+ return null
148
+ }
149
+
150
+ function getWebpackPluginOptions(honeybadgerNextJsConfig: HoneybadgerNextJsConfig): HoneybadgerWebpackPluginOptions | null {
151
+ const apiKey = honeybadgerNextJsConfig.webpackPluginOptions?.apiKey || process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY
152
+ const assetsUrl = honeybadgerNextJsConfig.webpackPluginOptions?.assetsUrl || process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL
153
+ if (!apiKey || !assetsUrl) {
154
+ log('error', 'Missing Honeybadger required configuration for webpack plugin. Source maps will not be uploaded to Honeybadger.')
155
+
156
+ return null
157
+ }
158
+
159
+ return {
160
+ ...honeybadgerNextJsConfig.webpackPluginOptions,
161
+ apiKey,
162
+ assetsUrl,
163
+ revision: honeybadgerNextJsConfig.webpackPluginOptions?.revision || process.env.NEXT_PUBLIC_HONEYBADGER_REVISION,
164
+ silent: _silent,
165
+ }
166
+ }
167
+
168
+ function getNextJsVersionInstalled(): [major: string, minor: string, patch: string] | null {
169
+ try {
170
+ return require('next/package.json').version?.split('.')
171
+ } catch (e) {
172
+ return null
173
+ }
174
+ }
175
+
176
+ /**
177
+ * NextJs will report a warning if the `serverExternalPackages` option is not present.
178
+ * This is because @honeybadger-io/js will try to require configuration files dynamically (https://github.com/honeybadger-io/honeybadger-js/pull/1268).
179
+ *
180
+ * First reported here: https://github.com/honeybadger-io/honeybadger-js/issues/1351
181
+ */
182
+ function addServerExternalPackagesOption(config) {
183
+ // this should be available in the upcoming version of Next.js (14.3.0)
184
+ if (config.serverExternalPackages && Array.isArray(config.serverExternalPackages)) {
185
+ log('debug', 'adding @honeybadger-io/js to serverExternalPackages')
186
+ config.serverExternalPackages.push('@honeybadger-io/js')
187
+ return
188
+ }
189
+
190
+ if (config.experimental?.serverComponentsExternalPackages && Array.isArray(config.experimental?.serverComponentsExternalPackages)) {
191
+ log('debug', 'adding @honeybadger-io/js to experimental.serverComponentsExternalPackages')
192
+ config.experimental.serverComponentsExternalPackages.push('@honeybadger-io/js')
193
+ return
194
+ }
195
+
196
+ const nextJsVersion = getNextJsVersionInstalled();
197
+ if (nextJsVersion) {
198
+ if ((+nextJsVersion[0] === 14 && +nextJsVersion[1] >= 3) || +nextJsVersion[0] > 14) {
199
+ log('debug', 'adding serverExternalPackages option with value ["@honeybadger-io/js"]')
200
+ config.serverExternalPackages = ['@honeybadger-io/js']
201
+ }
202
+ else {
203
+ log('debug', 'adding experimental.serverComponentsExternalPackages option with value ["@honeybadger-io/js"]')
204
+ if (!config.experimental) {
205
+ config.experimental = {}
206
+ }
207
+ config.experimental.serverComponentsExternalPackages = ['@honeybadger-io/js']
208
+ }
209
+ }
210
+ }
211
+
212
+ export function setupHoneybadger(config, honeybadgerNextJsConfig?: HoneybadgerNextJsConfig) {
213
+ if (!honeybadgerNextJsConfig) {
214
+ honeybadgerNextJsConfig = {
215
+ silent: true,
216
+ disableSourceMapUpload: false,
217
+ }
218
+ }
219
+
220
+ _silent = honeybadgerNextJsConfig.silent ?? true
221
+
222
+ addServerExternalPackagesOption(config)
223
+
224
+ return {
225
+ ...config,
226
+ webpack: mergeWithExistingWebpackConfig(config.webpack, honeybadgerNextJsConfig)
227
+ }
228
+ }
@@ -0,0 +1,56 @@
1
+ import Honeybadger from '@honeybadger-io/js';
2
+ import { NextRequest, NextResponse } from 'next/server';
3
+
4
+ function configure() {
5
+ if (Honeybadger.config.apiKey?.length > 0) {
6
+ return;
7
+ }
8
+
9
+ let projectRoot: string | undefined = undefined;
10
+ try {
11
+ // not available on edge runtime
12
+ projectRoot = process.cwd();
13
+ }
14
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
15
+ catch (error) {
16
+ // do nothing
17
+ }
18
+
19
+ Honeybadger
20
+ .configure({
21
+ apiKey: process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY,
22
+ environment: process.env.NEXT_PUBLIC_VERCEL_ENV || process.env.VERCEL_ENV || process.env.NODE_ENV,
23
+ revision: process.env.NEXT_PUBLIC_HONEYBADGER_REVISION,
24
+ projectRoot: 'webpack://_N_E/./'
25
+ })
26
+ .beforeNotify((notice) => {
27
+ if (!projectRoot) {
28
+ return
29
+ }
30
+
31
+ notice?.backtrace.forEach((line) => {
32
+ if (line.file) {
33
+ line.file = line.file.replace(`${projectRoot}/.next/server`, `${process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL}/..`)
34
+ }
35
+ return line
36
+ })
37
+ })
38
+ }
39
+
40
+ /**
41
+ * Wraps a handler function with Honeybadger error reporting.
42
+ * Use with Next.js API route handlers or middleware.
43
+ */
44
+ export function withHoneybadger(handler: (req: NextRequest | Request, ...args: unknown[]) => Promise<NextResponse>) {
45
+ configure();
46
+ return new Proxy(handler, {
47
+ apply: async (target, thisArg, args) => {
48
+ try {
49
+ return await Reflect.apply(target, thisArg, args);
50
+ } catch (error) {
51
+ await Honeybadger.notifyAsync(error as Error);
52
+ throw error; // Re-throw the error after reporting it
53
+ }
54
+ },
55
+ });
56
+ }
@@ -1,7 +1,6 @@
1
- import { Honeybadger } from '@honeybadger-io/react'
1
+ import Honeybadger from '@honeybadger-io/js'
2
2
 
3
3
  Honeybadger.configure({
4
-
5
4
  apiKey: process.env.NEXT_PUBLIC_HONEYBADGER_API_KEY,
6
5
  environment: process.env.NEXT_PUBLIC_VERCEL_ENV || process.env.VERCEL_ENV || process.env.NODE_ENV,
7
6
  revision: process.env.NEXT_PUBLIC_HONEYBADGER_REVISION,
@@ -1,4 +1,4 @@
1
- import { Honeybadger } from '@honeybadger-io/react'
1
+ import Honeybadger from '@honeybadger-io/js'
2
2
 
3
3
  const projectRoot = process.cwd()
4
4
  Honeybadger
@@ -11,6 +11,9 @@ Honeybadger
11
11
  // reportData: true,
12
12
  })
13
13
  .beforeNotify((notice) => {
14
+ if (!notice) {
15
+ return
16
+ }
14
17
  notice.backtrace.forEach((line) => {
15
18
  if (line.file) {
16
19
  line.file = line.file.replace(`${projectRoot}/.next/server`, `${process.env.NEXT_PUBLIC_HONEYBADGER_ASSETS_URL}/..`)