{"version":3,"file":"config.cjs","sources":["../src/util/highlight-webpack-plugin.ts","../src/util/with-highlight-config.ts"],"sourcesContent":["import { uploadSourcemaps } from '@highlight-run/sourcemap-uploader/dist/lib'\n\nexport default class HighlightWebpackPlugin {\n\tapiKey: string\n\tappVersion: string\n\tpath: string\n\tbasePath: string\n\tbackendUrl?: string\n\n\tconstructor(\n\t\tapiKey: string,\n\t\tappVersion: string,\n\t\tpath: string,\n\t\tbasePath: string,\n\t\tbackendUrl?: string,\n\t) {\n\t\tthis.apiKey = apiKey\n\t\tthis.appVersion = appVersion\n\t\tthis.path = path\n\t\tthis.basePath = basePath\n\t\tthis.backendUrl = backendUrl\n\t}\n\n\tapply(compiler: any) {\n\t\tcompiler.hooks.afterEmit.tap('HighlightWebpackPlugin', async () => {\n\t\t\ttry {\n\t\t\t\tawait uploadSourcemaps({\n\t\t\t\t\tapiKey: this.apiKey,\n\t\t\t\t\tappVersion: this.appVersion,\n\t\t\t\t\tpath: this.path,\n\t\t\t\t\tbasePath: this.basePath,\n\t\t\t\t\tbackendUrl: this.backendUrl,\n\t\t\t\t\tallowNoop: true,\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(`Highlight Failed to upload sourcemaps: ${e}`)\n\t\t\t}\n\t\t})\n\t\treturn compiler\n\t}\n}\n","import { NextConfig } from 'next'\nimport { Rewrite } from 'next/dist/lib/load-custom-routes'\nimport { WebpackConfigContext } from 'next/dist/server/config-shared'\nimport HighlightWebpackPlugin from './highlight-webpack-plugin.js'\n\ninterface HighlightConfigOptionsDefault {\n\tuploadSourceMaps: boolean\n\tconfigureHighlightProxy: boolean\n\tapiKey: string\n\tappVersion: string\n\tenvironment: string\n\tserviceName: string\n\tsourceMapsPath: string\n\tsourceMapsBasePath: string\n\tsourceMapsBackendUrl?: string\n}\n\nexport interface HighlightConfigOptions {\n\t/**\n\t * Explicitly enable or disable source map uploading during production builds.\n\t * By default, source maps are uploaded if both:\n\t * 1. The NextConfig.productionBrowserSourceMaps is not true\n\t * 2. An API key is set through the apiKey option\n\t * or HIGHLIGHT_SOURCEMAP_UPLOAD_API_KEY environment variable\n\t */\n\tuploadSourceMaps?: boolean\n\t/**\n\t * Configures a rewrite at /highlight-events for proxying Highlight requests.\n\t * @default true\n\t */\n\tconfigureHighlightProxy?: boolean\n\t/**\n\t * API key used to link to your Highlight project when uploading source maps.\n\t * This can also be set through the HIGHLIGHT_SOURCEMAP_UPLOAD_API_KEY environment variable.\n\t */\n\tapiKey?: string\n\t/**\n\t * App version used when uploading source maps.\n\t */\n\tappVersion?: string\n\t/**\n\t * Specifies the environment your application is running in.\n\t * This is useful to distinguish whether your session was recorded on localhost or in production.\n\t */\n\tenvironment?: string\n\t/**\n\t * Name of your app.\n\t */\n\tserviceName?: string\n\t/**\n\t * File system root directory containing all your source map files.\n\t * @default '.next/'\n\t */\n\tsourceMapsPath?: string\n\t/**\n\t * Base path to append to your source map URLs when uploaded to Highlight.\n\t * @default '_next/'\n\t */\n\tsourceMapsBasePath?: string\n\t/**\n\t * Optional, backend url for private graph to use for uploading (for self-hosted highlight deployments).\n\t */\n\tsourceMapsBackendUrl?: string\n}\n\nconst getDefaultOpts = async (\n\tconfig: NextConfig,\n\thighlightOpts?: HighlightConfigOptions,\n): Promise<HighlightConfigOptionsDefault> => {\n\tconst isProdBuild = process.env.NODE_ENV === 'production'\n\tconst hasSourcemapApiKey =\n\t\t!!process.env.HIGHLIGHT_SOURCEMAP_UPLOAD_API_KEY ||\n\t\t!!highlightOpts?.apiKey\n\tlet version: string | null = null\n\tif (config.generateBuildId) {\n\t\tconst buildId = config.generateBuildId()\n\t\tif (typeof buildId === 'string') {\n\t\t\tversion = buildId\n\t\t} else {\n\t\t\tversion = await buildId\n\t\t}\n\t}\n\n\treturn {\n\t\t// upload source maps even if config.productionBrowserSourceMaps is set to upload server maps\n\t\tuploadSourceMaps:\n\t\t\tisProdBuild &&\n\t\t\t(highlightOpts?.uploadSourceMaps ?? hasSourcemapApiKey),\n\t\tconfigureHighlightProxy: highlightOpts?.configureHighlightProxy ?? true,\n\t\tapiKey: highlightOpts?.apiKey ?? '',\n\t\tappVersion: highlightOpts?.appVersion ?? version ?? '',\n\t\tenvironment: highlightOpts?.environment ?? '',\n\t\tserviceName: highlightOpts?.serviceName ?? '',\n\t\tsourceMapsPath: highlightOpts?.sourceMapsPath ?? '.next/',\n\t\tsourceMapsBasePath: highlightOpts?.sourceMapsBasePath ?? '_next/',\n\t\tsourceMapsBackendUrl: highlightOpts?.sourceMapsBackendUrl,\n\t}\n}\n\ntype NextConfigObject = NextConfig\ntype NextConfigFunction = (\n\tphase: string,\n\t{ defaultConfig }: { defaultConfig: any },\n) => NextConfig\ntype NextConfigAsyncFunction = (\n\tphase: string,\n\t{ defaultConfig }: { defaultConfig: any },\n) => Promise<NextConfig>\ntype NextConfigInput =\n\t| NextConfigObject\n\t| NextConfigFunction\n\t| NextConfigAsyncFunction\n\nconst getHighlightConfig = async (\n\tconfig: NextConfig,\n\thighlightOpts?: HighlightConfigOptions,\n) => {\n\tconst defaultOpts = await getDefaultOpts(config, highlightOpts)\n\n\tlet newRewrites = config.rewrites\n\tif (defaultOpts.uploadSourceMaps || defaultOpts.configureHighlightProxy) {\n\t\tnewRewrites = async () => {\n\t\t\tlet re:\n\t\t\t\t| Rewrite[]\n\t\t\t\t| {\n\t\t\t\t\t\tbeforeFiles: Rewrite[]\n\t\t\t\t\t\tafterFiles: Rewrite[]\n\t\t\t\t\t\tfallback: Rewrite[]\n\t\t\t\t  }\n\t\t\tif (!config.rewrites) {\n\t\t\t\tre = new Array<Rewrite>()\n\t\t\t} else {\n\t\t\t\tre = await config.rewrites()\n\t\t\t}\n\n\t\t\tconst sourcemapRewrite = {\n\t\t\t\tsource: '/:path*.map',\n\t\t\t\tdestination: '/404',\n\t\t\t}\n\n\t\t\tconst highlightRewrites = [\n\t\t\t\t{\n\t\t\t\t\tsource: '/highlight-events',\n\t\t\t\t\tdestination: 'https://pub.highlight.io',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsource: '/v1/traces',\n\t\t\t\t\tdestination: 'https://otel.highlight.io/v1/traces',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsource: '/v1/metrics',\n\t\t\t\t\tdestination: 'https://otel.highlight.io/v1/metrics',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tsource: '/v1/logs',\n\t\t\t\t\tdestination: 'https://otel.highlight.io/v1/logs',\n\t\t\t\t},\n\t\t\t]\n\n\t\t\tif (!re || Array.isArray(re)) {\n\t\t\t\tre = re ?? []\n\t\t\t\tif (defaultOpts.uploadSourceMaps) {\n\t\t\t\t\tre.push(sourcemapRewrite)\n\t\t\t\t}\n\t\t\t\tif (defaultOpts.configureHighlightProxy) {\n\t\t\t\t\tre = re.concat(...highlightRewrites)\n\t\t\t\t}\n\t\t\t\treturn re\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tbeforeFiles: defaultOpts.uploadSourceMaps\n\t\t\t\t\t\t? (re.beforeFiles ?? []).concat(sourcemapRewrite)\n\t\t\t\t\t\t: re.beforeFiles,\n\t\t\t\t\tafterFiles: defaultOpts.configureHighlightProxy\n\t\t\t\t\t\t? (re.afterFiles ?? []).concat(...highlightRewrites)\n\t\t\t\t\t\t: re.afterFiles,\n\t\t\t\t\tfallback: re.fallback,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tlet newWebpack = config.webpack\n\tif (defaultOpts.uploadSourceMaps) {\n\t\tnewWebpack = (webpackConfig: any, opts: WebpackConfigContext) => {\n\t\t\tlet originalConfig = webpackConfig\n\t\t\tif (config.webpack) {\n\t\t\t\toriginalConfig = config.webpack(webpackConfig, opts)\n\t\t\t}\n\t\t\tif (opts.isServer) {\n\t\t\t\toriginalConfig.devtool = 'source-map'\n\t\t\t}\n\n\t\t\toriginalConfig.plugins.push(\n\t\t\t\tnew HighlightWebpackPlugin(\n\t\t\t\t\tdefaultOpts.apiKey,\n\t\t\t\t\tdefaultOpts.appVersion,\n\t\t\t\t\tdefaultOpts.sourceMapsPath,\n\t\t\t\t\tdefaultOpts.sourceMapsBasePath,\n\t\t\t\t\tdefaultOpts.sourceMapsBackendUrl,\n\t\t\t\t),\n\t\t\t)\n\n\t\t\treturn originalConfig\n\t\t}\n\t}\n\n\treturn {\n\t\t...config,\n\t\tenv: {\n\t\t\t...config.env,\n\t\t\tconfigureHighlightProxy: defaultOpts.configureHighlightProxy\n\t\t\t\t? 'true'\n\t\t\t\t: '',\n\t\t},\n\t\tproductionBrowserSourceMaps:\n\t\t\tdefaultOpts.uploadSourceMaps || config.productionBrowserSourceMaps,\n\t\trewrites: newRewrites,\n\t\twebpack: newWebpack,\n\t}\n}\n\nexport const withHighlightConfig = async (\n\tconfig: NextConfigInput,\n\thighlightOpts?: HighlightConfigOptions,\n): Promise<NextConfig> => {\n\tif (typeof config === 'function') {\n\t\treturn async (\n\t\t\tphase: string,\n\t\t\t{ defaultConfig }: { defaultConfig: any },\n\t\t): Promise<NextConfig> => {\n\t\t\tconst userNextConfigObject: NextConfig | Promise<NextConfig> =\n\t\t\t\tconfig(phase, { defaultConfig })\n\t\t\tif (typeof userNextConfigObject === 'function') {\n\t\t\t\tconst nc = await (userNextConfigObject as Promise<NextConfig>)\n\t\t\t\treturn await getHighlightConfig(nc, highlightOpts)\n\t\t\t} else {\n\t\t\t\treturn await getHighlightConfig(\n\t\t\t\t\tuserNextConfigObject as NextConfig,\n\t\t\t\t\thighlightOpts,\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t} else {\n\t\treturn await getHighlightConfig(config, highlightOpts)\n\t}\n}\n"],"names":["HighlightWebpackPlugin","apiKey","appVersion","path","basePath","backendUrl","constructor","this","apply","compiler","hooks","afterEmit","tap","async","uploadSourcemaps","allowNoop","e","console","error","getHighlightConfig","config","highlightOpts","defaultOpts","isProdBuild","process","env","NODE_ENV","hasSourcemapApiKey","HIGHLIGHT_SOURCEMAP_UPLOAD_API_KEY","version","generateBuildId","buildId","uploadSourceMaps","configureHighlightProxy","environment","serviceName","sourceMapsPath","sourceMapsBasePath","sourceMapsBackendUrl","getDefaultOpts","newRewrites","rewrites","re","Array","sourcemapRewrite","source","destination","highlightRewrites","isArray","push","concat","beforeFiles","afterFiles","fallback","newWebpack","webpack","webpackConfig","opts","originalConfig","isServer","devtool","plugins","productionBrowserSourceMaps","phase","defaultConfig","userNextConfigObject","nc"],"mappings":"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"}