@posthog/nextjs-config
Version:
NextJS configuration helper for Posthog 🦔
53 lines (52 loc) • 2.53 kB
JavaScript
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 };