UNPKG

@posthog/nextjs-config

Version:

NextJS configuration helper for Posthog 🦔

53 lines (52 loc) • 2.53 kB
import { SourcemapWebpackPlugin } from "./webpack-plugin.mjs"; function withPostHogConfig(userNextConfig, posthogConfig) { const posthogNextConfigComplete = resolvePostHogConfig(posthogConfig); return async (phase, param)=>{ let { defaultConfig } = param; const { webpack: userWebPackConfig, distDir, ...userConfig } = await resolveUserConfig(userNextConfig, phase, defaultConfig); const defaultWebpackConfig = userWebPackConfig || ((config)=>config); const sourceMapEnabled = posthogNextConfigComplete.sourcemaps.enabled; return { ...userConfig, distDir, productionBrowserSourceMaps: sourceMapEnabled, webpack: (config, options)=>{ const webpackConfig = defaultWebpackConfig(config, options); if (webpackConfig && options.isServer && sourceMapEnabled) webpackConfig.devtool = 'source-map'; if (sourceMapEnabled) { webpackConfig.plugins = webpackConfig.plugins || []; webpackConfig.plugins.push(new SourcemapWebpackPlugin(posthogNextConfigComplete, options.isServer, options.nextRuntime, distDir)); } return webpackConfig; } }; }; } function resolveUserConfig(userNextConfig, phase, defaultConfig) { if ('function' == typeof userNextConfig) { const maybePromise = userNextConfig(phase, { defaultConfig }); if (maybePromise instanceof Promise) return maybePromise; return Promise.resolve(maybePromise); } if ('object' == typeof userNextConfig) return Promise.resolve(userNextConfig); throw new Error('Invalid user config'); } function resolvePostHogConfig(posthogProvidedConfig) { const { personalApiKey, envId, host, verbose, sourcemaps = {} } = posthogProvidedConfig; var _sourcemaps_enabled, _sourcemaps_deleteAfterUpload; return { personalApiKey, envId, host: null != host ? host : 'https://us.posthog.com', verbose: null != verbose ? verbose : true, sourcemaps: { enabled: null != (_sourcemaps_enabled = sourcemaps.enabled) ? _sourcemaps_enabled : 'production' == process.env.NODE_ENV, project: sourcemaps.project, version: sourcemaps.version, deleteAfterUpload: null != (_sourcemaps_deleteAfterUpload = sourcemaps.deleteAfterUpload) ? _sourcemaps_deleteAfterUpload : true } }; } export { withPostHogConfig };