@datadog/rspack-plugin 2.4.2 → 2.5.1-dev

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../factory/src/helpers.ts","../../../../plugins/rum/src/sourcemaps/files.ts","../../../../core/src/constants.ts","../../../../core/src/helpers.ts","../../../../plugins/rum/src/sourcemaps/payload.ts","../../../../plugins/rum/src/sourcemaps/sender.ts","../../../../plugins/rum/src/sourcemaps/index.ts","../../../../plugins/rum/src/constants.ts","../../../../plugins/rum/src/validate.ts","../../../../plugins/rum/src/index.ts","../../../../plugins/telemetry/src/constants.ts","../../../../plugins/telemetry/src/common/filters.ts","../../../../plugins/telemetry/src/common/helpers.ts","../../../../plugins/telemetry/src/common/metrics/common.ts","../../../../plugins/telemetry/src/common/aggregator.ts","../../../../plugins/telemetry/src/common/output/files.ts","../../../../plugins/build-report/src/helpers.ts","../../../../plugins/telemetry/src/common/output/text.ts","../../../../plugins/telemetry/src/common/sender.ts","../../../../plugins/telemetry/src/esbuild-plugin/plugins.ts","../../../../plugins/telemetry/src/esbuild-plugin/index.ts","../../../../plugins/telemetry/src/webpack-plugin/loaders.ts","../../../../plugins/telemetry/src/webpack-plugin/tapables.ts","../../../../plugins/telemetry/src/webpack-plugin/index.ts","../../../../plugins/telemetry/src/index.ts","../../../../plugins/build-report/src/esbuild.ts","../../../../plugins/build-report/src/rollup.ts","../../../../plugins/build-report/src/xpack.ts","../../../../plugins/build-report/src/index.ts","../../../../plugins/bundler-report/src/index.ts","../../../../plugins/git/src/trackedFilesMatcher.ts","../../../../plugins/git/src/helpers.ts","../../../../plugins/git/src/index.ts","../../../../plugins/injection/src/constants.ts","../../../../plugins/injection/src/helpers.ts","../../../../plugins/injection/src/index.ts","../../../../factory/src/index.ts","../../src/index.ts"],"sourcesContent":["// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type {\n BuildReport,\n BundlerFullName,\n BundlerName,\n FactoryMeta,\n GetLogger,\n GlobalContext,\n LogLevel,\n Options,\n OptionsWithDefaults,\n ToInjectItem,\n} from '@dd/core/types';\nimport c from 'chalk';\n\nconst logPriority: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n none: 4,\n};\n\n// Exported for testing.\nexport const getLoggerFactory =\n (build: BuildReport, logLevel: LogLevel = 'warn'): GetLogger =>\n (name) => {\n const log = (text: any, type: LogLevel = 'debug') => {\n // By default (debug) we print dimmed.\n let color = c.dim;\n let logFn = console.log;\n\n if (type === 'error') {\n color = c.red;\n logFn = console.error;\n } else if (type === 'warn') {\n color = c.yellow;\n logFn = console.warn;\n } else if (type === 'info') {\n color = c.cyan;\n logFn = console.log;\n }\n\n const prefix = `[${type}|${name}]`;\n\n // Keep a trace of the log in the build report.\n const content = typeof text === 'string' ? text : JSON.stringify(text, null, 2);\n build.logs.push({ pluginName: name, type, message: content, time: Date.now() });\n if (type === 'error') {\n build.errors.push(content);\n }\n if (type === 'warn') {\n build.warnings.push(content);\n }\n\n // Only log if the log level is high enough.\n if (logPriority[type] >= logPriority[logLevel]) {\n logFn(`${color(prefix)} ${content}`);\n }\n };\n\n return {\n getLogger: (subName: string) => {\n const logger = getLoggerFactory(build, logLevel);\n return logger(`${name}:${subName}`);\n },\n error: (text: any) => log(text, 'error'),\n warn: (text: any) => log(text, 'warn'),\n info: (text: any) => log(text, 'info'),\n debug: (text: any) => log(text, 'debug'),\n };\n };\n\nexport const getContext = ({\n options,\n bundlerName,\n bundlerVersion,\n injections,\n version,\n}: {\n options: OptionsWithDefaults;\n bundlerName: BundlerName;\n bundlerVersion: string;\n injections: ToInjectItem[];\n version: FactoryMeta['version'];\n}): GlobalContext => {\n const cwd = process.cwd();\n const variant = bundlerName === 'webpack' ? bundlerVersion.split('.')[0] : '';\n const build: BuildReport = {\n errors: [],\n warnings: [],\n logs: [],\n };\n const context: GlobalContext = {\n auth: options.auth,\n pluginNames: [],\n bundler: {\n name: bundlerName,\n fullName: `${bundlerName}${variant}` as BundlerFullName,\n variant,\n outDir: cwd,\n version: bundlerVersion,\n },\n build,\n cwd,\n inject: (item: ToInjectItem) => {\n injections.push(item);\n },\n start: Date.now(),\n version,\n };\n\n return context;\n};\n\nexport const validateOptions = (options: Options = {}): OptionsWithDefaults => {\n return {\n auth: {},\n disableGit: false,\n logLevel: 'warn',\n ...options,\n };\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { GlobalContext } from '@dd/core/types';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport type { RumSourcemapsOptionsWithDefaults, Sourcemap } from '../types';\n\ntype PartialSourcemap = Pick<Sourcemap, 'minifiedFilePath' | 'minifiedUrl' | 'relativePath'>;\n\nconst decomposePath = (\n options: RumSourcemapsOptionsWithDefaults,\n context: GlobalContext,\n sourcemapFilePath: string,\n): PartialSourcemap => {\n if (path.extname(sourcemapFilePath) !== '.map') {\n throw new Error(`The file ${chalk.green.bold(sourcemapFilePath)} is not a sourcemap.`);\n }\n\n const minifiedFilePath = sourcemapFilePath.replace(/\\.map$/, '');\n const relativePath = minifiedFilePath.replace(context.bundler.outDir, '');\n const minifiedUrl = options.minifiedPathPrefix\n ? path.join(options.minifiedPathPrefix, relativePath)\n : relativePath;\n\n return {\n minifiedFilePath,\n minifiedUrl,\n relativePath,\n };\n};\n\nexport const getSourcemapsFiles = (\n options: RumSourcemapsOptionsWithDefaults,\n context: GlobalContext,\n): Sourcemap[] => {\n if (!context.build.outputs || context.build.outputs.length === 0) {\n throw new Error('No output files found.');\n }\n\n const sourcemapFilesList = context.build.outputs\n .filter((file) => file.filepath.endsWith('.map'))\n .map((file) => file.filepath);\n\n const sourcemapFiles = sourcemapFilesList.map((sourcemapFilePath) => {\n return {\n ...decomposePath(options, context, sourcemapFilePath),\n sourcemapFilePath,\n minifiedPathPrefix: options.minifiedPathPrefix,\n };\n });\n\n return sourcemapFiles;\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nexport const INJECTED_FILE = '__datadog-helper-file';\n\nexport const ALL_BUNDLERS = ['webpack', 'vite', 'esbuild', 'rollup', 'rspack', 'rolldown', 'farm'];\nexport const SUPPORTED_BUNDLERS = ['webpack', 'vite', 'esbuild', 'rollup', 'rspack'] as const;\nexport const FULL_NAME_BUNDLERS = [\n 'webpack4',\n 'webpack5',\n 'vite',\n 'esbuild',\n 'rollup',\n 'rspack',\n] as const;\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { INJECTED_FILE } from '@dd/core/constants';\nimport retry from 'async-retry';\nimport fsp from 'fs/promises';\nimport fs from 'fs';\nimport path from 'path';\nimport type { RequestInit } from 'undici-types';\n\nimport type { RequestOpts } from './types';\n\n// Format a duration 0h 0m 0s 0ms\nexport const formatDuration = (duration: number) => {\n const days = Math.floor(duration / 1000 / 60 / 60 / 24);\n const usedDuration = duration - days * 24 * 60 * 60 * 1000;\n const d = new Date(usedDuration);\n const hours = d.getUTCHours();\n const minutes = d.getUTCMinutes();\n const seconds = d.getUTCSeconds();\n const milliseconds = d.getUTCMilliseconds();\n return `${days ? `${days}d ` : ''}${hours ? `${hours}h ` : ''}${minutes ? `${minutes}m ` : ''}${\n seconds ? `${seconds}s ` : ''\n }${milliseconds ? `${milliseconds}ms` : ''}`.trim();\n};\n\nexport const getResolvedPath = (filepath: string) => {\n try {\n return require.resolve(filepath);\n } catch (e) {\n return filepath;\n }\n};\n\nexport const ERROR_CODES_NO_RETRY = [400, 403, 413];\nexport const NB_RETRIES = 5;\n// Do a retriable fetch.\nexport const doRequest = <T>(opts: RequestOpts): Promise<T> => {\n const { url, method = 'GET', getData, onRetry, type = 'text' } = opts;\n return retry(\n async (bail: (e: Error) => void, attempt: number) => {\n let response: Response;\n try {\n const requestInit: RequestInit = {\n method,\n // This is needed for sending body in NodeJS' Fetch.\n // https://github.com/nodejs/node/issues/46221\n duplex: 'half',\n };\n\n if (typeof getData === 'function') {\n const { data, headers } = await getData();\n requestInit.body = data;\n requestInit.headers = headers;\n }\n\n response = await fetch(url, requestInit);\n } catch (error: any) {\n // We don't want to retry if there is a non-fetch related error.\n bail(error);\n // bail(error) throws so the return is never executed.\n return {} as T;\n }\n\n if (!response.ok) {\n // Not instantiating the error here, as it will make Jest throw in the tests.\n const errorMessage = `HTTP ${response.status} ${response.statusText}`;\n if (ERROR_CODES_NO_RETRY.includes(response.status)) {\n bail(new Error(errorMessage));\n // bail(error) throws so the return is never executed.\n return {} as T;\n } else {\n // Trigger the retry.\n throw new Error(errorMessage);\n }\n }\n\n try {\n let result;\n // Await it so we catch any parsing error and bail.\n if (type === 'json') {\n result = await response.json();\n } else {\n result = await response.text();\n }\n\n return result as T;\n } catch (error: any) {\n // We don't want to retry on parsing errors.\n bail(error);\n // bail(error) throws so the return is never executed.\n return {} as T;\n }\n },\n {\n retries: NB_RETRIES,\n onRetry,\n },\n );\n};\n\n// Truncate a string to a certain length.\n// Placing a [...] placeholder in the middle.\n// \"A way too long sentence could be truncated a bit.\" => \"A way too[...]could be truncated a bit.\"\nexport const truncateString = (\n str: string,\n maxLength: number = 60,\n placeholder: string = '[...]',\n) => {\n if (str.length <= maxLength) {\n return str;\n }\n\n // We want to keep at the very least 4 characters.\n const stringLength = Math.max(4, maxLength - placeholder.length);\n\n // We want to keep most of the end of the string, hence the 10 chars top limit for left.\n const leftStop = Math.min(10, Math.floor(stringLength / 2));\n const rightStop = stringLength - leftStop;\n\n return `${str.slice(0, leftStop)}${placeholder}${str.slice(-rightStop)}`;\n};\n\n// Is the file coming from the injection plugin?\nexport const isInjectionFile = (filename: string) => filename.includes(INJECTED_FILE);\n\n// Replacing fs-extra with local helpers.\n// Delete folders recursively.\nexport const rm = async (dir: string) => {\n return fsp.rm(dir, { force: true, maxRetries: 3, recursive: true });\n};\n\n// Mkdir recursively.\nexport const mkdir = async (dir: string) => {\n return fsp.mkdir(dir, { recursive: true });\n};\n\nexport const mkdirSync = (dir: string) => {\n return fs.mkdirSync(dir, { recursive: true });\n};\n\n// Write a file but first ensure the directory exists.\nexport const outputFile = async (filepath: string, data: string) => {\n await mkdir(path.dirname(filepath));\n await fsp.writeFile(filepath, data, { encoding: 'utf-8' });\n};\n\nexport const outputFileSync = (filepath: string, data: string) => {\n mkdirSync(path.dirname(filepath));\n fs.writeFileSync(filepath, data, { encoding: 'utf-8' });\n};\n\n// Output a JSON file.\nexport const outputJson = async (filepath: string, data: any) => {\n // FIXME: This will crash on strings too long.\n const dataString = JSON.stringify(data, null, 4);\n return outputFile(filepath, dataString);\n};\n\nexport const outputJsonSync = (filepath: string, data: any) => {\n // FIXME: This will crash on strings too long.\n const dataString = JSON.stringify(data, null, 4);\n outputFileSync(filepath, dataString);\n};\n\n// Read a JSON file.\nexport const readJsonSync = (filepath: string) => {\n const data = fs.readFileSync(filepath, { encoding: 'utf-8' });\n return JSON.parse(data);\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { RepositoryData } from '@dd/core/types';\nimport { promises as fs } from 'fs';\nimport path from 'path';\n\nimport type { Sourcemap } from '../types';\n\nexport type Payload = {\n content: Map<string, MultipartValue>;\n errors: string[];\n warnings: string[];\n};\n\nexport type Metadata = {\n plugin_version: string;\n project_path: string;\n service: string;\n type: string;\n version: string;\n git_repository_url?: string;\n git_commit_sha?: string;\n};\n\ntype FileValidity = {\n empty: boolean;\n exists: boolean;\n};\n\ntype SourcemapValidity = {\n file: FileValidity;\n sourcemap: FileValidity;\n repeatedPrefix: string;\n};\n\nexport interface LocalAppendOptions {\n contentType: string;\n filename: string;\n}\n\nexport interface MultipartStringValue {\n type: 'string';\n value: string;\n options: LocalAppendOptions;\n}\n\nexport interface MultipartFileValue {\n type: 'file';\n path: string;\n options: LocalAppendOptions;\n}\n\nexport type MultipartValue = MultipartStringValue | MultipartFileValue;\n\nconst SLASH_RX = /[/]+|[\\\\]+/g;\nconst SLASH_TRIM_RX = /^[/]+|^[\\\\]+|[/]+$|[\\\\]+$/g;\n\n// Verify any repeated pattern between the path and prefix.\nexport const prefixRepeat = (filePath: string, prefix: string): string => {\n const pathParts = filePath.replace(SLASH_TRIM_RX, '').split(SLASH_RX);\n const prefixParts = prefix.replace(SLASH_TRIM_RX, '').split(SLASH_RX);\n const normalizedPath = pathParts.join('/');\n\n let result = '';\n\n for (let i = 0; i < prefixParts.length; i += 1) {\n const partialPrefix = prefixParts.slice(-i).join('/');\n if (normalizedPath.startsWith(partialPrefix)) {\n result = partialPrefix;\n }\n }\n\n return result;\n};\n\n// Verify that every files are available.\nexport const checkFile = async (filePath: string): Promise<FileValidity> => {\n const validity: FileValidity = {\n empty: false,\n exists: true,\n };\n\n try {\n const stats = await fs.stat(filePath);\n if (stats.size === 0) {\n validity.empty = true;\n }\n } catch (error: any) {\n if (error.code === 'ENOENT') {\n validity.exists = false;\n } else {\n // Other kind of error\n throw error;\n }\n }\n\n return validity;\n};\n\nconst getSourcemapValidity = async (\n sourcemap: Sourcemap,\n prefix: string,\n): Promise<SourcemapValidity> => {\n const [resultMinFile, resultSourcemap] = await Promise.all([\n checkFile(sourcemap.minifiedFilePath),\n checkFile(sourcemap.sourcemapFilePath),\n ]);\n\n return {\n file: resultMinFile,\n sourcemap: resultSourcemap,\n repeatedPrefix: prefixRepeat(sourcemap.relativePath, prefix),\n };\n};\n\nexport const getPayload = async (\n sourcemap: Sourcemap,\n metadata: Metadata,\n prefix: string,\n git?: RepositoryData,\n): Promise<Payload> => {\n const validity = await getSourcemapValidity(sourcemap, prefix);\n const errors: string[] = [];\n const warnings: string[] = [];\n const content = new Map<string, MultipartValue>([\n [\n 'event',\n {\n type: 'string',\n options: {\n contentType: 'application/json',\n filename: 'event',\n },\n value: JSON.stringify({\n ...metadata,\n minified_url: sourcemap.minifiedUrl,\n }),\n },\n ],\n [\n 'source_map',\n {\n type: 'file',\n path: sourcemap.sourcemapFilePath,\n options: { filename: 'source_map', contentType: 'application/json' },\n },\n ],\n [\n 'minified_file',\n {\n type: 'file',\n path: sourcemap.minifiedFilePath,\n options: { filename: 'minified_file', contentType: 'application/javascript' },\n },\n ],\n ]);\n\n // Add git payload if available.\n if (git) {\n try {\n content.set('repository', {\n type: 'string',\n options: {\n contentType: 'application/json',\n filename: 'repository',\n },\n value: JSON.stringify({\n data: [\n {\n files: git.trackedFilesMatcher.matchSourcemap(\n sourcemap.sourcemapFilePath,\n (reason) => {\n warnings.push(\n `${path.basename(sourcemap.sourcemapFilePath)}: \"${reason}\"`,\n );\n },\n ),\n hash: git.hash,\n repository_url: git.remote,\n },\n ],\n // NOTE: Make sure to update the version if the format of the JSON payloads changes in any way.\n version: 1,\n }),\n });\n } catch (error: any) {\n warnings.push(\n `Could not attach git data for sourcemap ${sourcemap.sourcemapFilePath}: ${error.message}`,\n );\n }\n }\n\n if (validity.file.empty) {\n errors.push(`Minified file is empty: ${sourcemap.minifiedFilePath}`);\n }\n if (!validity.file.exists) {\n errors.push(`Minified file not found: ${sourcemap.minifiedFilePath}`);\n }\n if (validity.sourcemap.empty) {\n errors.push(`Sourcemap file is empty: ${sourcemap.sourcemapFilePath}`);\n }\n if (!validity.sourcemap.exists) {\n errors.push(`Sourcemap file not found: ${sourcemap.sourcemapFilePath}`);\n }\n if (validity.repeatedPrefix) {\n warnings.push(\n `The minified file path contains a repeated pattern with the minified path prefix: ${validity.repeatedPrefix}`,\n );\n }\n\n return { content, errors, warnings };\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { NB_RETRIES, doRequest, formatDuration } from '@dd/core/helpers';\nimport type { Logger, GlobalContext } from '@dd/core/types';\nimport { File } from 'buffer';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport PQueue from 'p-queue';\nimport { Readable } from 'stream';\nimport type { Gzip } from 'zlib';\nimport { createGzip } from 'zlib';\n\nimport type { RumSourcemapsOptionsWithDefaults, Sourcemap } from '../types';\n\nimport type { LocalAppendOptions, Metadata, MultipartFileValue, Payload } from './payload';\nimport { getPayload } from './payload';\n\ntype DataResponse = { data: Gzip; headers: Record<string, string> };\n\nconst green = chalk.green.bold;\nconst yellow = chalk.yellow.bold;\nconst red = chalk.red.bold;\n\ntype FileMetadata = {\n sourcemap: string;\n file: string;\n};\n\n// From a path, returns a File to use with native FormData and fetch.\nconst getFile = async (path: string, options: LocalAppendOptions) => {\n // @ts-expect-error openAsBlob is not in the NodeJS types until 19+\n if (typeof fs.openAsBlob === 'function') {\n // Support NodeJS 19+\n // @ts-expect-error openAsBlob is not in the NodeJS types until 19+\n const blob = await fs.openAsBlob(path, { type: options.contentType });\n return new File([blob], options.filename);\n } else {\n // Support NodeJS 18-\n const stream = Readable.toWeb(fs.createReadStream(path));\n const blob = await new Response(stream).blob();\n const file = new File([blob], options.filename, { type: options.contentType });\n return file;\n }\n};\n\n// Use a function to get new streams for each retry.\nexport const getData =\n (payload: Payload, defaultHeaders: Record<string, string> = {}) =>\n async (): Promise<DataResponse> => {\n const form = new FormData();\n const gz = createGzip();\n\n for (const [key, content] of payload.content) {\n const value =\n content.type === 'file'\n ? // eslint-disable-next-line no-await-in-loop\n await getFile(content.path, content.options)\n : new Blob([content.value], { type: content.options.contentType });\n\n form.append(key, value, content.options.filename);\n }\n\n // GZip data, we use a Request to serialize the data and transform it into a stream.\n const req = new Request('fake://url', { method: 'POST', body: form });\n const formStream = Readable.fromWeb(req.body!);\n const data = formStream.pipe(gz);\n\n const headers = {\n 'Content-Encoding': 'gzip',\n ...defaultHeaders,\n ...Object.fromEntries(req.headers.entries()),\n };\n\n return { data, headers };\n };\n\nexport const upload = async (\n payloads: Payload[],\n options: RumSourcemapsOptionsWithDefaults,\n context: GlobalContext,\n log: Logger,\n) => {\n const errors: { metadata?: FileMetadata; error: Error }[] = [];\n const warnings: string[] = [];\n\n if (!context.auth?.apiKey) {\n errors.push({ error: new Error('No authentication token provided') });\n return { errors, warnings };\n }\n\n if (payloads.length === 0) {\n warnings.push('No sourcemaps to upload');\n return { errors, warnings };\n }\n\n // @ts-expect-error PQueue's default isn't typed.\n const Queue = PQueue.default ? PQueue.default : PQueue;\n const queue = new Queue({ concurrency: options.maxConcurrency });\n const defaultHeaders = {\n 'DD-API-KEY': context.auth.apiKey,\n 'DD-EVP-ORIGIN': `${context.bundler.fullName}-build-plugin_sourcemaps`,\n 'DD-EVP-ORIGIN-VERSION': context.version,\n };\n\n const addPromises = [];\n\n for (const payload of payloads) {\n const metadata = {\n sourcemap: (payload.content.get('source_map') as MultipartFileValue)?.path.replace(\n context.bundler.outDir,\n '.',\n ),\n file: (payload.content.get('minified_file') as MultipartFileValue)?.path.replace(\n context.bundler.outDir,\n '.',\n ),\n };\n\n log.debug(`Queuing ${green(metadata.sourcemap)} | ${green(metadata.file)}`);\n\n addPromises.push(\n queue.add(async () => {\n try {\n await doRequest({\n url: options.intakeUrl,\n method: 'POST',\n getData: getData(payload, defaultHeaders),\n // On retry we store the error as a warning.\n onRetry: (error: Error, attempt: number) => {\n const warningMessage = `Failed to upload ${yellow(metadata.sourcemap)} | ${yellow(metadata.file)}:\\n ${error.message}\\nRetrying ${attempt}/${NB_RETRIES}`;\n warnings.push(warningMessage);\n log.warn(warningMessage);\n },\n });\n log.debug(`Sent ${green(metadata.sourcemap)} | ${green(metadata.file)}`);\n } catch (e: any) {\n errors.push({ metadata, error: e });\n // Depending on the configuration we throw or not.\n if (options.bailOnError === true) {\n throw e;\n }\n }\n }),\n );\n }\n\n await Promise.all(addPromises);\n await queue.onIdle();\n return { warnings, errors };\n};\n\nexport const sendSourcemaps = async (\n sourcemaps: Sourcemap[],\n options: RumSourcemapsOptionsWithDefaults,\n context: GlobalContext,\n log: Logger,\n) => {\n const start = Date.now();\n const prefix = options.minifiedPathPrefix;\n\n const metadata: Metadata = {\n git_repository_url: context.git?.remote,\n git_commit_sha: context.git?.hash,\n plugin_version: context.version,\n project_path: context.bundler.outDir,\n service: options.service,\n type: 'js_sourcemap',\n version: options.releaseVersion,\n };\n\n const payloads = await Promise.all(\n sourcemaps.map((sourcemap) => getPayload(sourcemap, metadata, prefix, context.git)),\n );\n\n const errors = payloads.map((payload) => payload.errors).flat();\n const warnings = payloads.map((payload) => payload.warnings).flat();\n\n if (warnings.length > 0) {\n log.warn(`Warnings while preparing payloads:\\n - ${warnings.join('\\n - ')}`);\n }\n\n if (errors.length > 0) {\n const errorMsg = `Failed to prepare payloads, aborting upload :\\n - ${errors.join('\\n - ')}`;\n log.error(errorMsg);\n // Depending on the configuration we throw or not.\n if (options.bailOnError === true) {\n throw new Error(errorMsg);\n }\n return;\n }\n\n const { errors: uploadErrors, warnings: uploadWarnings } = await upload(\n payloads,\n options,\n context,\n log,\n );\n\n log.info(\n `Done uploading ${green(sourcemaps.length.toString())} sourcemaps in ${green(formatDuration(Date.now() - start))}.`,\n );\n\n if (uploadErrors.length > 0) {\n const listOfErrors = ` - ${uploadErrors\n .map(({ metadata: fileMetadata, error }) => {\n if (fileMetadata) {\n return `${red(fileMetadata.file)} | ${red(fileMetadata.sourcemap)} : ${error.message}`;\n }\n return error.message;\n })\n .join('\\n - ')}`;\n\n const errorMsg = `Failed to upload some sourcemaps:\\n${listOfErrors}`;\n log.error(errorMsg);\n // Depending on the configuration we throw or not.\n // This should not be reached as we'd have thrown earlier.\n if (options.bailOnError === true) {\n throw new Error(errorMsg);\n }\n }\n\n if (uploadWarnings.length > 0) {\n log.warn(`Warnings while uploading sourcemaps:\\n - ${warnings.join('\\n - ')}`);\n }\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { Logger, GlobalContext } from '@dd/core/types';\nimport chalk from 'chalk';\nimport { outdent } from 'outdent';\n\nimport type { RumOptionsWithSourcemaps } from '../types';\n\nimport { getSourcemapsFiles } from './files';\nimport { sendSourcemaps } from './sender';\n\nexport const uploadSourcemaps = async (\n options: RumOptionsWithSourcemaps,\n context: GlobalContext,\n log: Logger,\n) => {\n // Show a pretty summary of the configuration.\n const green = chalk.green.bold;\n const configurationString = Object.entries(options.sourcemaps)\n .map(([key, value]) => ` - ${key}: ${green(value.toString())}`)\n .join('\\n');\n\n // Gather the sourcemaps files.\n const sourcemaps = getSourcemapsFiles(options.sourcemaps, context);\n\n const summary = outdent`\n Uploading ${green(sourcemaps.length.toString())} sourcemaps with configuration:\n ${configurationString}\n `;\n\n log.info(summary);\n\n // Send everything.\n await sendSourcemaps(sourcemaps, options.sourcemaps, context, log);\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { PluginName } from '@dd/core/types';\n\nexport const CONFIG_KEY = 'rum' as const;\nexport const PLUGIN_NAME: PluginName = 'datadog-rum-plugin' as const;\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { Logger } from '@dd/core/types';\nimport chalk from 'chalk';\n\nimport { CONFIG_KEY, PLUGIN_NAME } from './constants';\nimport type {\n OptionsWithRum,\n RumOptions,\n RumOptionsWithDefaults,\n RumSourcemapsOptionsWithDefaults,\n} from './types';\n\nexport const defaultIntakeUrl = `https://sourcemap-intake.${process.env.DATADOG_SITE || 'datadoghq.com'}/api/v2/srcmap`;\n\n// Deal with validation and defaults here.\nexport const validateOptions = (\n config: Partial<OptionsWithRum>,\n log: Logger,\n): RumOptionsWithDefaults => {\n const errors: string[] = [];\n\n // Validate and add defaults sub-options.\n const sourcemapsResults = validateSourcemapsOptions(config);\n errors.push(...sourcemapsResults.errors);\n\n // Throw if there are any errors.\n if (errors.length) {\n log.error(`\\n - ${errors.join('\\n - ')}`);\n throw new Error(`Invalid configuration for ${PLUGIN_NAME}.`);\n }\n\n // Build the final configuration.\n const toReturn: RumOptionsWithDefaults = {\n ...config[CONFIG_KEY],\n sourcemaps: undefined,\n };\n\n // Fill in the defaults.\n if (sourcemapsResults.config) {\n toReturn.sourcemaps = sourcemapsResults.config;\n }\n\n return toReturn;\n};\n\ntype ToReturn<T> = {\n errors: string[];\n config?: T;\n};\n\nconst validateMinifiedPathPrefix = (minifiedPathPrefix: string): boolean => {\n let host;\n try {\n const objUrl = new URL(minifiedPathPrefix!);\n host = objUrl.host;\n } catch {\n // Do nothing.\n }\n\n if (!host && !minifiedPathPrefix!.startsWith('/')) {\n return false;\n }\n\n return true;\n};\n\nexport const validateSourcemapsOptions = (\n config: Partial<OptionsWithRum>,\n): ToReturn<RumOptionsWithDefaults['sourcemaps']> => {\n const red = chalk.bold.red;\n const validatedOptions: RumOptions = config[CONFIG_KEY] || {};\n const toReturn: ToReturn<Required<RumSourcemapsOptionsWithDefaults>> = {\n errors: [],\n };\n\n if (validatedOptions.sourcemaps) {\n // Validate the configuration.\n if (!validatedOptions.sourcemaps.releaseVersion) {\n toReturn.errors.push(`${red('sourcemaps.releaseVersion')} is required.`);\n }\n if (!validatedOptions.sourcemaps.service) {\n toReturn.errors.push(`${red('sourcemaps.service')} is required.`);\n }\n if (!validatedOptions.sourcemaps.minifiedPathPrefix) {\n toReturn.errors.push(`${red('sourcemaps.minifiedPathPrefix')} is required.`);\n }\n\n // Validate the minifiedPathPrefix.\n if (validatedOptions.sourcemaps.minifiedPathPrefix) {\n if (!validateMinifiedPathPrefix(validatedOptions.sourcemaps.minifiedPathPrefix)) {\n toReturn.errors.push(\n `${red('sourcemaps.minifiedPathPrefix')} must be a valid URL or start with '/'.`,\n );\n }\n }\n\n // Add the defaults.\n const sourcemapsWithDefaults: RumSourcemapsOptionsWithDefaults = {\n bailOnError: false,\n dryRun: false,\n maxConcurrency: 20,\n intakeUrl:\n process.env.DATADOG_SOURCEMAP_INTAKE_URL ||\n validatedOptions.sourcemaps.intakeUrl ||\n defaultIntakeUrl,\n ...validatedOptions.sourcemaps,\n };\n\n // Save the config.\n toReturn.config = sourcemapsWithDefaults;\n }\n\n return toReturn;\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { GlobalContext, GetPlugins, Logger } from '@dd/core/types';\n\nimport { uploadSourcemaps } from './sourcemaps';\nimport type { OptionsWithRum, RumOptions, RumOptionsWithSourcemaps } from './types';\nimport { validateOptions } from './validate';\n\nexport { CONFIG_KEY, PLUGIN_NAME } from './constants';\n\nexport type types = {\n // Add the types you'd like to expose here.\n RumOptions: RumOptions;\n OptionsWithRum: OptionsWithRum;\n};\n\nexport const getPlugins: GetPlugins<OptionsWithRum> = (\n opts: OptionsWithRum,\n context: GlobalContext,\n log: Logger,\n) => {\n // Verify configuration.\n const rumOptions = validateOptions(opts, log);\n return [\n {\n name: 'datadog-rum-sourcemaps-plugin',\n enforce: 'post',\n async writeBundle() {\n if (rumOptions.disabled) {\n return;\n }\n\n if (rumOptions.sourcemaps) {\n // Need the \"as\" because Typescript doesn't understand that we've already checked for sourcemaps.\n await uploadSourcemaps(rumOptions as RumOptionsWithSourcemaps, context, log);\n }\n },\n },\n ];\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { PluginName } from '@dd/core/types';\n\nexport const CONFIG_KEY = 'telemetry' as const;\nexport const PLUGIN_NAME: PluginName = `datadog-telemetry-plugin` as const;\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { Metric } from '@dd/telemetry-plugin/types';\n\nconst filterTreeMetrics = (metric: Metric): Metric | null =>\n // Remove tree metrics because way too verbose\n !/modules\\.tree\\.(count|size)$/.test(metric.metric) ? metric : null;\n\nconst filterSourcemapsAndNodeModules = (metric: Metric): Metric | null =>\n metric.tags.some(\n (tag: string) =>\n // Remove sourcemaps.\n /^assetName:.*\\.map$/.test(tag) ||\n // Remove third parties.\n /^moduleName:\\/node_modules/.test(tag),\n )\n ? null\n : metric;\n\nconst filterMetricsOnThreshold = (metric: Metric): Metric | null => {\n const thresholds = {\n size: 100000,\n count: 10,\n duration: 1000,\n };\n // Allow count for smaller results.\n if (/(entries|loaders|warnings|errors)\\.count$/.test(metric.metric)) {\n thresholds.count = 0;\n }\n // Dependencies are huges, lets submit a bit less.\n if (/(modules\\.(dependencies|dependents)$)/.test(metric.metric)) {\n thresholds.count = 30;\n }\n // Dependency tree calculation can output a lot of metrics.\n if (/modules\\.tree\\.count$/.test(metric.metric)) {\n thresholds.count = 150;\n }\n if (/modules\\.tree\\.size$/.test(metric.metric)) {\n thresholds.size = 1500000;\n }\n // We want to track entry size whatever their size.\n if (/entries\\.size$/.test(metric.metric)) {\n thresholds.size = 0;\n }\n // We want to track entry module count whatever their number\n if (/entries\\.modules\\.count$/.test(metric.metric)) {\n thresholds.count = 0;\n }\n\n return metric.value > thresholds[metric.type] ? metric : null;\n};\n\nexport const defaultFilters: ((metric: Metric) => Metric | null)[] = [\n filterTreeMetrics,\n filterSourcemapsAndNodeModules,\n filterMetricsOnThreshold,\n];\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { CONFIG_KEY } from '@dd/telemetry-plugin/constants';\nimport type {\n OptionsDD,\n Metric,\n MetricToSend,\n TelemetryOptions,\n OptionsWithTelemetry,\n Module,\n Compilation,\n ValueContext,\n TelemetryOptionsWithDefaults,\n} from '@dd/telemetry-plugin/types';\n\nimport { defaultFilters } from './filters';\n\nexport const validateOptions = (opts: OptionsWithTelemetry): TelemetryOptionsWithDefaults => {\n const options: TelemetryOptions = opts[CONFIG_KEY] || {};\n const endPoint = options.endPoint || 'https://app.datadoghq.com';\n return {\n disabled: false,\n enableTracing: false,\n filters: defaultFilters,\n output: false,\n prefix: '',\n tags: [],\n ...options,\n endPoint: endPoint.startsWith('http') ? endPoint : `https://${endPoint}`,\n };\n};\n\nexport const getMetric = (metric: Metric, opts: OptionsDD): MetricToSend => ({\n type: 'gauge',\n tags: [...metric.tags, ...opts.tags],\n metric: `${opts.prefix ? `${opts.prefix}.` : ''}${metric.metric}`,\n points: [[opts.timestamp, metric.value]],\n});\n\nexport const getOptionsDD = (options: TelemetryOptionsWithDefaults): OptionsDD => {\n return {\n timestamp: Math.floor((options.timestamp || Date.now()) / 1000),\n tags: options.tags,\n prefix: options.prefix,\n filters: options.filters,\n };\n};\n\nexport const getPluginName = (opts: string | { name: string }) =>\n typeof opts === 'string' ? opts : opts.name;\n\n// We want to ensure cwd ends with a slash.\nconst formatCwd = (cwd: string = ''): string => {\n return cwd.endsWith('/') ? cwd : `${cwd}/`;\n};\n\n// Format a module name by trimming the user's specific part out.\nexport const getDisplayName = (name: string, cwd?: string) => {\n let toReturn: string = name;\n const nameSplit: string[] = name.split(formatCwd(cwd));\n if (cwd && nameSplit.length) {\n toReturn = nameSplit.pop()!;\n }\n\n return (\n toReturn\n // Remove loaders query\n .split('!')\n .pop()!\n // Remove everything in front of /node_modules\n .replace(/(.*)?\\/node_modules\\//, '/node_modules/')\n // Remove any prefixing ../\n .replace(/^((\\.)*\\/)+/, '')\n );\n};\n\nexport const formatModuleName = (name: string, context?: string) =>\n name\n // Remove loaders query\n .split('!')\n .pop()!\n // Webpack store its modules with a relative path\n // let's do the same so we can integrate better with it.\n .replace(formatCwd(context), './');\n\nexport const getModulePath = (module: Module, compilation: Compilation) => {\n let path: string | undefined = module.userRequest;\n if (!path) {\n let issuer;\n if (compilation.moduleGraph && typeof compilation.moduleGraph.getIssuer === 'function') {\n issuer = compilation.moduleGraph.getIssuer(module);\n } else {\n issuer = module.issuer;\n }\n\n path = issuer?.userRequest;\n\n if (!path) {\n // eslint-disable-next-line no-underscore-dangle\n path = module._identifier?.split('!').pop();\n }\n }\n return path || 'unknown';\n};\n\n// Find the module name and format it the same way as webpack.\nexport const getModuleName = (module: Module, compilation: Compilation, context?: string) => {\n let name: string = module.name || module.userRequest;\n if (!name) {\n name = getModulePath(module, compilation);\n }\n return formatModuleName(name || 'no-name', context);\n};\n\n// Format the loader's name by extracting it from the query.\n// \"[...]/node_modules/babel-loader/lib/index.js\" => babel-loader\nconst formatLoaderName = (loader: string) =>\n loader.replace(/^.*\\/node_modules\\/(@[a-z0-9][\\w-.]+\\/[a-z0-9][\\w-.]*|[^/]+).*$/, '$1');\n\n// Find a module's loaders names and format them.\nexport const getLoaderNames = (module: Module) =>\n (module.loaders || []).map((l: any) => l.loader || l).map(formatLoaderName);\n\nexport const getValueContext = (args: any[]): ValueContext[] => {\n return args.map((arg) => ({\n type: arg?.constructor?.name ?? typeof arg,\n name: arg?.name,\n value: typeof arg === 'string' ? arg : undefined,\n }));\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { TimingsMap, Metric } from '@dd/telemetry-plugin/types';\n\nexport const addPluginMetrics = (plugins: TimingsMap, metrics: Set<Metric>): void => {\n metrics.add({\n metric: 'plugins.count',\n type: 'count',\n value: plugins.size,\n tags: [],\n });\n\n for (const plugin of plugins.values()) {\n let pluginDuration = 0;\n let pluginCount = 0;\n\n for (const hook of Object.values(plugin.events)) {\n let hookDuration = 0;\n pluginCount += hook.values.length;\n for (const v of hook.values) {\n const duration = v.end - v.start;\n hookDuration += duration;\n pluginDuration += duration;\n }\n metrics\n .add({\n metric: 'plugins.hooks.duration',\n type: 'duration',\n value: hookDuration,\n tags: [`pluginName:${plugin.name}`, `hookName:${hook.name}`],\n })\n .add({\n metric: 'plugins.hooks.increment',\n type: 'count',\n value: hook.values.length,\n tags: [`pluginName:${plugin.name}`, `hookName:${hook.name}`],\n });\n }\n\n metrics\n .add({\n metric: 'plugins.duration',\n type: 'duration',\n value: pluginDuration,\n tags: [`pluginName:${plugin.name}`],\n })\n .add({\n metric: 'plugins.increment',\n type: 'count',\n value: pluginCount,\n tags: [`pluginName:${plugin.name}`],\n });\n }\n};\n\nexport const addLoaderMetrics = (loaders: TimingsMap, metrics: Set<Metric>): void => {\n metrics.add({\n metric: 'loaders.count',\n type: 'count',\n value: loaders.size,\n tags: [],\n });\n\n for (const loader of loaders.values()) {\n metrics\n .add({\n metric: 'loaders.duration',\n type: 'duration',\n value: loader.duration,\n tags: [`loaderName:${loader.name}`],\n })\n .add({\n metric: 'loaders.increment',\n type: 'count',\n value: loader.increment,\n tags: [`loaderName:${loader.name}`],\n });\n }\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { GlobalContext } from '@dd/core/types';\nimport type { Metric, MetricToSend, OptionsDD, Report } from '@dd/telemetry-plugin/types';\n\nimport { getMetric } from './helpers';\nimport { addPluginMetrics, addLoaderMetrics } from './metrics/common';\n\nconst addUniversalMetrics = (globalContext: GlobalContext, metrics: Set<Metric>) => {\n const inputs = globalContext.build.inputs || [];\n const outputs = globalContext.build.outputs || [];\n const entries = globalContext.build.entries || [];\n const nbWarnings = globalContext.build.warnings.length;\n const nbErrors = globalContext.build.errors.length;\n const duration = globalContext.build.duration;\n\n // Create some indexes to speed up the process.\n const entriesPerInput = new Map<string, string[]>();\n const assetsPerInput = new Map<string, string[]>();\n const entriesPerAsset = new Map<string, string[]>();\n\n for (const entry of entries) {\n for (const input of entry.inputs) {\n if (!entriesPerInput.has(input.filepath)) {\n entriesPerInput.set(input.filepath, []);\n }\n entriesPerInput.get(input.filepath)!.push(entry.name);\n }\n for (const output of entry.outputs) {\n const cleanAssetName = output.filepath.replace(/\\.map$/, '');\n if (!entriesPerAsset.has(cleanAssetName)) {\n entriesPerAsset.set(cleanAssetName, []);\n }\n entriesPerAsset.get(cleanAssetName)!.push(entry.name);\n }\n }\n\n for (const output of outputs) {\n for (const input of output.inputs) {\n if (!assetsPerInput.has(input.filepath)) {\n assetsPerInput.set(input.filepath, []);\n }\n assetsPerInput.get(input.filepath)!.push(output.name);\n }\n }\n\n // Counts\n metrics\n .add({\n metric: 'assets.count',\n type: 'count',\n value: outputs.length,\n tags: [],\n })\n .add({\n metric: 'entries.count',\n type: 'count',\n value: entries.length,\n tags: [],\n })\n .add({\n metric: 'errors.count',\n type: 'count',\n value: nbErrors,\n tags: [],\n })\n .add({\n metric: 'modules.count',\n type: 'count',\n value: inputs.length,\n tags: [],\n })\n .add({\n metric: 'warnings.count',\n type: 'count',\n value: nbWarnings,\n tags: [],\n });\n\n if (duration) {\n metrics.add({\n metric: 'compilation.duration',\n type: 'duration',\n value: duration,\n tags: [],\n });\n }\n\n // Modules\n for (const input of inputs) {\n const tags = [`moduleName:${input.name}`, `moduleType:${input.type}`];\n if (entriesPerInput.has(input.filepath)) {\n tags.push(\n ...entriesPerInput\n .get(input.filepath)!\n .map((entryName) => `entryName:${entryName}`),\n );\n }\n\n if (assetsPerInput.has(input.filepath)) {\n tags.push(\n ...assetsPerInput.get(input.filepath)!.map((assetName) => `assetName:${assetName}`),\n );\n }\n metrics\n .add({\n metric: 'modules.size',\n type: 'size',\n value: input.size,\n tags,\n })\n .add({\n metric: 'modules.dependencies',\n type: 'count',\n value: input.dependencies.size,\n tags,\n })\n .add({\n metric: 'modules.dependents',\n type: 'count',\n value: input.dependents.size,\n tags,\n });\n }\n\n // Assets\n for (const output of outputs) {\n const tags = [`assetName:${output.name}`, `assetType:${output.type}`];\n const cleanAssetName = output.filepath.replace(/\\.map$/, '');\n if (entriesPerAsset.has(cleanAssetName)) {\n tags.push(\n ...entriesPerAsset\n .get(cleanAssetName)!\n .map((entryName) => `entryName:${entryName}`),\n );\n }\n metrics\n .add({\n metric: 'assets.size',\n type: 'size',\n value: output.size,\n tags,\n })\n .add({\n metric: 'assets.modules.count',\n type: 'count',\n value: output.inputs.length,\n tags,\n });\n }\n\n // Entries\n for (const entry of entries) {\n const tags = [`entryName:${entry.name}`];\n metrics\n .add({\n metric: 'entries.size',\n type: 'size',\n value: entry.size,\n tags,\n })\n .add({\n metric: 'entries.modules.count',\n type: 'count',\n value: entry.inputs.length,\n tags,\n })\n .add({\n metric: 'entries.assets.count',\n type: 'count',\n value: entry.outputs.length,\n tags,\n });\n }\n\n return metrics;\n};\n\nexport const addMetrics = (\n globalContext: GlobalContext,\n optionsDD: OptionsDD,\n metricsToSend: Set<MetricToSend>,\n report?: Report,\n): void => {\n const metrics: Set<Metric> = new Set();\n\n if (report) {\n const { timings } = report;\n\n if (timings) {\n if (timings.tapables) {\n addPluginMetrics(timings.tapables, metrics);\n }\n if (timings.loaders) {\n addLoaderMetrics(timings.loaders, metrics);\n }\n }\n }\n\n addUniversalMetrics(globalContext, metrics);\n\n // Format metrics to be DD ready and apply filters\n for (const metric of metrics) {\n if (optionsDD.filters?.length) {\n let filteredMetric: Metric | null = metric;\n for (const filter of optionsDD.filters) {\n // If it's already been filtered out, no need to keep going.\n if (!filteredMetric) {\n break;\n }\n filteredMetric = filter(metric);\n }\n if (filteredMetric) {\n metricsToSend.add(getMetric(filteredMetric, optionsDD));\n }\n } else {\n metricsToSend.add(getMetric(metric, optionsDD));\n }\n }\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { formatDuration, outputJson } from '@dd/core/helpers';\nimport type { Logger } from '@dd/core/types';\nimport type { MetricToSend, OutputOptions, Report } from '@dd/telemetry-plugin/types';\nimport path from 'path';\n\ntype Files = 'timings' | 'metrics';\n\ntype FilesToWrite = {\n [key in Files]?: { content: any };\n};\n\nexport const outputFiles: (\n data: {\n report?: Report;\n metrics: Set<MetricToSend>;\n },\n outputOptions: OutputOptions,\n log: Logger,\n cwd: string,\n) => Promise<void> = async (data, outputOptions, log, cwd) => {\n // Don't write any file if it's not enabled.\n if (typeof outputOptions !== 'string' && typeof outputOptions !== 'object' && !outputOptions) {\n return;\n }\n\n const { report, metrics } = data;\n\n const startWriting = Date.now();\n let destination = '';\n const files = {\n timings: true,\n metrics: true,\n };\n\n if (typeof outputOptions === 'object') {\n destination = outputOptions.destination;\n files.timings = outputOptions.timings || false;\n files.metrics = outputOptions.metrics || false;\n } else if (typeof outputOptions === 'string') {\n destination = outputOptions;\n }\n\n const outputPath = path.resolve(cwd, destination);\n\n try {\n const errors: { [key: string]: Error } = {};\n const filesToWrite: FilesToWrite = {};\n\n if (files.timings && report?.timings) {\n filesToWrite.timings = {\n content: {\n tapables: report.timings.tapables\n ? Array.from(report.timings.tapables.values())\n : null,\n loaders: report.timings.loaders\n ? Array.from(report.timings.loaders.values())\n : null,\n modules: report.timings.modules\n ? Array.from(report.timings.modules.values())\n : null,\n },\n };\n }\n\n if (files.metrics) {\n filesToWrite.metrics = { content: Array.from(metrics) };\n }\n\n const proms = Object.entries(filesToWrite).map(async ([filename, file]): Promise<void> => {\n const start = Date.now();\n log.debug(`Start writing ${filename}.json.`);\n try {\n await outputJson(path.join(outputPath, `${filename}.json`), file.content);\n log.debug(`Wrote ${filename}.json in ${formatDuration(Date.now() - start)}`);\n } catch (e: any) {\n log.error(\n `Failed to write ${filename}.json in ${formatDuration(Date.now() - start)}`,\n );\n errors[filename] = e;\n }\n });\n\n // We can't use Promise.allSettled because we want to support NodeJS 10+\n await Promise.all(proms);\n log.debug(`Wrote files in ${formatDuration(Date.now() - startWriting)}.`);\n // If we had some errors.\n const fileErrored = Object.keys(errors);\n if (fileErrored.length) {\n log.error(\n `Couldn't write files.\\n${fileErrored.map(\n (file) => ` - ${file}: ${errors[file].toString()}`,\n )}`,\n );\n }\n } catch (e) {\n log.error(`Couldn't write files. ${e}`);\n }\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { INJECTED_FILE } from '@dd/core/constants';\nimport { isInjectionFile } from '@dd/core/helpers';\nimport type {\n BuildReport,\n SerializedEntry,\n File,\n GlobalContext,\n SerializedInput,\n SerializedBuildReport,\n SerializedOutput,\n Entry,\n Input,\n Output,\n} from '@dd/core/types';\nimport path from 'path';\n\n// Will match any last part of a path after a dot or slash and is a word character.\nconst EXTENSION_RX = /\\.(?!.*(?:\\.|\\/|\\\\))(\\w{1,})/g;\n\n// Will match any type of query characters.\n// \"?\" or \"%3F\" (url encoded \"?\") or \"|\"\nconst QUERY_RX = /(\\?|%3F|\\|)+/gi;\n\nconst getExtension = (filepath: string) => {\n // Reset RX first.\n EXTENSION_RX.lastIndex = 0;\n return EXTENSION_RX.exec(filepath)?.[1];\n};\n\nexport const getType = (name: string): string => {\n if (name === 'unknown') {\n return name;\n }\n\n if (name.includes('webpack/runtime')) {\n return 'runtime';\n }\n\n return getExtension(cleanPath(name)) || 'unknown';\n};\n\n// Returns an object that is safe to serialize to JSON.\n// Mostly useful for debugging and testing.\nexport const serializeBuildReport = (report: BuildReport): SerializedBuildReport => {\n // Report is an object that self reference some of its values.\n // To make it JSON serializable, we need to remove the self references\n // and replace them with strings, we'll use \"filepath\" to still have them uniquely identifiable.\n const jsonReport: SerializedBuildReport = {\n errors: report.errors,\n warnings: report.warnings,\n logs: report.logs,\n start: report.start,\n end: report.end,\n duration: report.duration,\n writeDuration: report.writeDuration,\n entries: [],\n inputs: [],\n outputs: [],\n };\n\n for (const entry of report.entries || []) {\n const newEntry: SerializedEntry = { ...entry, inputs: [], outputs: [] };\n if (entry.inputs) {\n newEntry.inputs = entry.inputs.map((file: File) => file.filepath);\n }\n if (entry.outputs) {\n newEntry.outputs = entry.outputs.map((file: File) => file.filepath);\n }\n jsonReport.entries.push(newEntry);\n }\n\n for (const input of report.inputs || []) {\n const newInput: SerializedInput = { ...input, dependencies: [], dependents: [] };\n if (input.dependencies) {\n for (const dependency of input.dependencies) {\n newInput.dependencies.push(dependency.filepath);\n }\n }\n if (input.dependents) {\n for (const dependent of input.dependents) {\n newInput.dependents.push(dependent.filepath);\n }\n }\n jsonReport.inputs.push(newInput);\n }\n\n for (const output of report.outputs || []) {\n const newOutput: SerializedOutput = { ...output, inputs: [] };\n if (output.inputs) {\n newOutput.inputs = output.inputs.map((file: File) => file.filepath);\n }\n jsonReport.outputs.push(newOutput);\n }\n\n return jsonReport;\n};\n\n// Returns an object that is unserialized from serializeBuildReport().\n// Mostly useful for debugging and testing.\nexport const unserializeBuildReport = (report: SerializedBuildReport): BuildReport => {\n const buildReport: BuildReport = {\n errors: report.errors,\n warnings: report.warnings,\n logs: report.logs,\n start: report.start,\n end: report.end,\n duration: report.duration,\n writeDuration: report.writeDuration,\n };\n\n const reportInputs = report.inputs || [];\n const reportOutputs = report.outputs || [];\n\n const entries: Entry[] = [];\n\n // Prefill inputs and outputs as they are sometimes self-referencing themselves.\n const indexedInputs: Map<string, Input> = new Map();\n const inputs: Input[] = reportInputs.map<Input>((input) => {\n const newInput: Input = {\n ...input,\n // Keep them empty for now, we'll fill them later.\n dependencies: new Set(),\n dependents: new Set(),\n };\n indexedInputs.set(input.filepath, newInput);\n return newInput;\n });\n\n const indexedOutputs: Map<string, Output> = new Map();\n const outputs: Output[] = reportOutputs.map<Output>((output) => {\n const newOutput: Output = { ...output, inputs: [] };\n indexedOutputs.set(output.filepath, newOutput);\n return newOutput;\n });\n\n // Fill in the inputs' dependencies and dependents.\n for (const input of reportInputs) {\n const newInput: Input = indexedInputs.get(input.filepath)!;\n\n // Re-assign the dependencies and dependents to the actual objects.\n if (input.dependencies) {\n for (const dependency of input.dependencies) {\n const newDependency = indexedInputs.get(dependency)!;\n newInput.dependencies.add(newDependency);\n }\n }\n if (input.dependents) {\n for (const dependent of input.dependents) {\n const newDependent = indexedInputs.get(dependent)!;\n newInput.dependents.add(newDependent);\n }\n }\n }\n\n // Fill in the outputs' inputs.\n for (const output of reportOutputs) {\n const newOutput: Output = indexedOutputs.get(output.filepath)!;\n if (output.inputs) {\n // Re-assign the inputs to the actual objects.\n newOutput.inputs = output.inputs\n .map<\n // Can be either an input or an output (for sourcemaps).\n Input | Output | undefined\n >((filepath: string) => indexedInputs.get(filepath) || indexedOutputs.get(filepath))\n .filter(Boolean) as (Input | Output)[];\n }\n }\n\n for (const entry of report.entries || []) {\n const newEntry: Entry = { ...entry, inputs: [], outputs: [] };\n if (entry.inputs) {\n newEntry.inputs = entry.inputs\n .map((filepath: string) => indexedInputs.get(filepath))\n .filter(Boolean) as (Output | Input)[];\n }\n if (entry.outputs) {\n newEntry.outputs = entry.outputs\n .map((filepath: string) => indexedOutputs.get(filepath))\n .filter(Boolean) as Output[];\n }\n entries.push(newEntry);\n }\n\n return {\n ...buildReport,\n entries,\n inputs,\n outputs,\n };\n};\n\nconst BUNDLER_SPECIFICS = ['unknown', 'commonjsHelpers.js', 'vite/preload-helper.js'];\n// Make list of paths unique, remove the current file and particularities.\nexport const cleanReport = <T = string>(\n report: Set<string>,\n filepath: string,\n filter?: (p: string) => T,\n) => {\n const cleanedReport: Set<T> = new Set();\n for (const reportFilepath of report) {\n const cleanedPath = cleanPath(reportFilepath);\n if (\n // Don't add injections.\n isInjectionFile(reportFilepath) ||\n // Don't add itself into it.\n cleanedPath === filepath ||\n // Remove common specific files injected by bundlers.\n BUNDLER_SPECIFICS.includes(cleanedPath)\n ) {\n continue;\n }\n\n if (filter) {\n const filteredValue = filter(cleanedPath);\n if (filteredValue) {\n cleanedReport.add(filteredValue);\n }\n } else {\n cleanedReport.add(cleanedPath as unknown as T);\n }\n }\n return cleanedReport;\n};\n\n// Clean a path from its query parameters and leading invisible characters.\n// Careful with this and webpack/rspack as loaders may add \"|\" before and after the filepath.\nexport const cleanPath = (filepath: string) => {\n return (\n filepath\n // [webpack] Only keep the loaded part of a loader query.\n .split('!')\n .pop()!\n // Remove query parameters.\n .split(QUERY_RX)\n .shift()!\n // Remove leading, invisible characters,\n // sometimes added in rollup by the commonjs plugin.\n .replace(/^[^\\w\\s.,!@#$%^&*()=+~`\\-/]+/, '')\n );\n};\n\n// Will only prepend the cwd if not already there.\nexport const getAbsolutePath = (cwd: string, filepath: string) => {\n if (isInjectionFile(filepath)) {\n return INJECTED_FILE;\n }\n\n if (filepath.startsWith(cwd)) {\n return filepath;\n }\n return path.resolve(cwd, filepath);\n};\n\n// Extract a name from a path based on the context (out dir and cwd).\nexport const cleanName = (context: GlobalContext, filepath: string) => {\n if (isInjectionFile(filepath)) {\n return INJECTED_FILE;\n }\n\n if (filepath === 'unknown') {\n return filepath;\n }\n\n if (filepath.includes('webpack/runtime')) {\n return filepath.replace('webpack/runtime/', '').replace(/ +/g, '-');\n }\n\n return (\n filepath\n // [webpack] Only keep the loaded part of a loader query.\n .split('!')\n .pop()!\n // Remove outDir's path.\n .replace(context.bundler.outDir, '')\n // Remove the cwd's path.\n .replace(context.cwd, '')\n // Remove node_modules path.\n .split('node_modules')\n .pop()!\n // Remove query parameters.\n .split(QUERY_RX)\n .shift()!\n // Remove leading slashes.\n .replace(/^\\/+/, '')\n );\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { formatDuration, truncateString } from '@dd/core/helpers';\nimport type { Logger, Entry, GlobalContext, Output } from '@dd/core/types';\nimport { serializeBuildReport } from '@dd/internal-build-report-plugin/helpers';\nimport chalk from 'chalk';\nimport prettyBytes from 'pretty-bytes';\n\nimport type { Report, TimingsMap } from '../../types';\n\n// How many items do we show in the top lists.\nconst TOP = 5;\n// How long a path can be before we truncate it.\nconst MAX_VALUE_LENGTH = 60;\n\nconst numColor = chalk.bold.red;\nconst nameColor = chalk.bold.cyan;\n\ntype ValuesToPrint = { name: string; top: boolean; values: { name: string; value: string }[] };\n\ntype FileReport = {\n name: string;\n aggregatedSize?: number;\n size: number;\n dependencies: Set<string>;\n dependents: Set<string>;\n};\n\n// Sort a collection by attribute\nconst sortDesc = (attr: ((arg: any) => any) | string) => (a: any, b: any) => {\n let aVal;\n let bVal;\n\n if (typeof attr === 'function') {\n aVal = attr(a);\n bVal = attr(b);\n } else {\n aVal = a[attr];\n bVal = b[attr];\n }\n\n if (aVal > bVal) {\n return -1;\n } else if (aVal < bVal) {\n return 1;\n } else {\n return 0;\n }\n};\n\nexport const getGeneralValues = (context: GlobalContext): ValuesToPrint[] => {\n const valuesToPrint: ValuesToPrint = {\n name: 'General Numbers',\n values: [],\n top: false,\n };\n\n const nbModules = context.build.inputs ? context.build.inputs.length : 0;\n const nbAssets = context.build.outputs ? context.build.outputs.length : 0;\n const nbWarnings = context.build.warnings.length;\n const nbErrors = context.build.errors.length;\n const nbEntries = context.build.entries ? context.build.entries.length : 0;\n\n if (context.build.start) {\n valuesToPrint.values.push({\n name: 'Overhead duration',\n value: formatDuration(context.build.start - context.start),\n });\n }\n\n if (context.build.duration) {\n valuesToPrint.values.push({\n name: 'Build duration',\n value: formatDuration(context.build.duration),\n });\n }\n\n if (context.build.writeDuration) {\n valuesToPrint.values.push({\n name: 'Write duration',\n value: formatDuration(context.build.writeDuration),\n });\n }\n\n valuesToPrint.values.push(\n {\n name: 'Number of modules',\n value: nbModules.toString(),\n },\n {\n name: 'Number of assets',\n value: nbAssets.toString(),\n },\n {\n name: 'Number of entries',\n value: nbEntries.toString(),\n },\n {\n name: 'Number of warnings',\n value: nbWarnings.toString(),\n },\n {\n name: 'Number of errors',\n value: nbErrors.toString(),\n },\n );\n\n return [valuesToPrint];\n};\n\nconst getAssetsValues = (context: GlobalContext): ValuesToPrint[] => {\n const assetSizesToPrint: ValuesToPrint = {\n name: 'Asset size',\n values: (context.build.outputs || [])\n // We don't want to report on sourcemaps here.\n .filter((output) => output.type !== 'map')\n .sort(sortDesc((output: Output) => output.size))\n .map((output) => ({\n name: output.name,\n value: prettyBytes(output.size),\n })),\n top: true,\n };\n\n const entrySizesToPrint: ValuesToPrint = {\n name: 'Entry aggregated size',\n values: (context.build.entries || [])\n .sort(sortDesc((entry: Entry) => entry.size))\n .map((entry) => ({\n name: entry.name,\n value: prettyBytes(entry.size),\n })),\n top: true,\n };\n\n const entryModulesToPrint: ValuesToPrint = {\n name: 'Entry number of modules',\n values:\n (context.build.entries || [])\n .sort(sortDesc((entry: Entry) => entry.size))\n .map((entry) => ({\n name: entry.name,\n value: entry.inputs.length.toString(),\n })) || [],\n top: true,\n };\n\n return [assetSizesToPrint, entrySizesToPrint, entryModulesToPrint];\n};\n\nconst getModulesValues = (context: GlobalContext): ValuesToPrint[] => {\n const dependentsToPrint: ValuesToPrint = {\n name: `Module total dependents`,\n values: [],\n top: true,\n };\n\n const dependenciesToPrint: ValuesToPrint = {\n name: `Module total dependencies`,\n values: [],\n top: true,\n };\n\n const sizesToPrint: ValuesToPrint = {\n name: `Module size`,\n values: [],\n top: true,\n };\n\n const aggregatedSizesToPrint: ValuesToPrint = {\n name: `Module aggregated size`,\n values: [],\n top: true,\n };\n\n const dependencies: Set<FileReport> = new Set();\n\n // Build our collections.\n const serializedReport = serializeBuildReport(context.build);\n const inputs: Map<string, FileReport> = new Map();\n const fileDependencies: Map<string, Set<string>> = new Map();\n const fileDependents: Map<string, Set<string>> = new Map();\n\n for (const input of serializedReport.inputs || []) {\n // We don't want to report on sourcemaps here.\n if (input.type === 'map') {\n continue;\n }\n\n const dependenciesSet = new Set(input.dependencies);\n const dependentsSet = new Set(input.dependents);\n\n // Create the sets for all the dependencies.\n for (const dep of dependenciesSet) {\n if (!fileDependents.has(dep)) {\n fileDependents.set(dep, new Set());\n }\n fileDependents.get(dep)!.add(input.filepath);\n }\n\n // Create the sets for all the dependents.\n for (const dep of dependentsSet) {\n if (!fileDependencies.has(dep)) {\n fileDependencies.set(dep, new Set());\n }\n fileDependencies.get(dep)!.add(input.filepath);\n }\n\n if (fileDependencies.has(input.filepath)) {\n // If we already have a set for this file, we complete it.\n const existingDependencies = fileDependencies.get(input.filepath)!;\n for (const dep of existingDependencies) {\n dependenciesSet.add(dep);\n }\n }\n\n if (fileDependents.has(input.filepath)) {\n // If we already have a set for this file, we complete it.\n const existingDependents = fileDependents.get(input.filepath)!;\n for (const dep of existingDependents) {\n dependentsSet.add(dep);\n }\n }\n\n fileDependencies.set(input.filepath, dependenciesSet);\n fileDependents.set(input.filepath, dependentsSet);\n\n inputs.set(input.filepath, {\n name: input.name,\n size: input.size,\n dependencies: dependenciesSet,\n dependents: dependentsSet,\n });\n }\n\n for (const [filepath, input] of inputs) {\n const inputDependencies = fileDependencies.get(filepath) || new Set();\n const inputDependents = fileDependents.get(filepath) || new Set();\n\n // Aggregate size.\n let aggregatedSize = input.size;\n for (const dep of inputDependencies) {\n aggregatedSize += inputs.get(dep)?.size || 0;\n }\n\n dependencies.add({\n name: input.name,\n size: input.size,\n aggregatedSize,\n dependents: inputDependents,\n dependencies: inputDependencies,\n });\n }\n\n if (!dependencies.size) {\n return [dependentsToPrint, dependenciesToPrint, sizesToPrint];\n }\n\n const dependenciesArray = Array.from(dependencies);\n // Sort by dependents, biggest first\n dependenciesArray.sort(sortDesc((file: FileReport) => file.dependents.size));\n dependentsToPrint.values = dependenciesArray.map((file) => ({\n name: file.name,\n value: file.dependents.size.toString(),\n }));\n // Sort by dependencies, biggest first\n dependenciesArray.sort(sortDesc((file: FileReport) => file.dependencies.size));\n dependenciesToPrint.values = dependenciesArray.map((file) => ({\n name: file.name,\n value: file.dependencies.size.toString(),\n }));\n // Sort by size, biggest first\n dependenciesArray.sort(sortDesc('size'));\n sizesToPrint.values = dependenciesArray.map((file) => ({\n name: file.name,\n value: prettyBytes(file.size),\n }));\n // Sort by aggregated size, biggest first\n dependenciesArray.sort(sortDesc('aggregatedSize'));\n aggregatedSizesToPrint.values = dependenciesArray.map((file) => ({\n name: file.name,\n value: prettyBytes(file.aggregatedSize || file.size),\n }));\n\n return [dependentsToPrint, dependenciesToPrint, sizesToPrint, aggregatedSizesToPrint];\n};\n\nconst getTimingValues = (name: string, timings?: TimingsMap): ValuesToPrint[] => {\n if (!timings || !timings.size) {\n return [];\n }\n\n const times = Array.from(timings.values());\n // Sort by duration, longest first\n times.sort(sortDesc('duration'));\n const durationsToPrint: ValuesToPrint = {\n name: `${name} duration`,\n values: times.map((module) => ({\n name: module.name,\n value: formatDuration(module.duration),\n })),\n top: true,\n };\n\n // Sort by increment, biggest first\n times.sort(sortDesc('increment'));\n const hitsToPrint: ValuesToPrint = {\n name: `${name} hits`,\n values: times.map((module) => ({\n name: module.name,\n value: module.increment.toString(),\n })),\n top: true,\n };\n\n return [durationsToPrint, hitsToPrint];\n};\n\nconst renderValues = (values: ValuesToPrint[]): string => {\n let outputString = '';\n\n const titlePadding = 4;\n const valuePadding = 4;\n\n // Cleaning and preparing out the groups.\n for (const group of values) {\n // Only keep the top values if requested.\n if (group.top && group.values.length >= TOP) {\n group.values = group.values.slice(0, TOP);\n group.name = `Top ${TOP} ${group.name}`;\n }\n\n // Truncate values' names when they are way too long.\n for (const value of group.values) {\n value.name = truncateString(value.name, MAX_VALUE_LENGTH);\n }\n }\n\n // Calculating the width of the columns.\n const maxTitleWidth = Math.max(...values.map((val) => val.name.length));\n const maxNameWidth = Math.max(...values.flatMap((val) => val.values.map((v) => v.name.length)));\n const maxValueWidth = Math.max(\n ...values.flatMap((val) => val.values.map((v) => v.value.length)),\n );\n const totalWidth = Math.max(\n maxTitleWidth + titlePadding,\n maxNameWidth + maxValueWidth + valuePadding,\n );\n\n // Composing the output.\n for (const group of values) {\n if (group.values.length === 0) {\n continue;\n }\n\n const titlePad = totalWidth - (group.name.length + titlePadding);\n\n outputString += `\\n== ${group.name} ${'='.repeat(titlePad)}=\\n`;\n\n for (const value of group.values) {\n const valuePad = maxValueWidth - value.value.length;\n outputString += ` [${numColor(value.value)}] ${' '.repeat(valuePad)}${nameColor(value.name)}\\n`;\n }\n }\n\n return outputString;\n};\n\nexport const outputTexts = (globalContext: GlobalContext, log: Logger, report?: Report) => {\n const valuesToPrint: ValuesToPrint[] = [];\n\n if (report) {\n // Output legacy/tracing.\n valuesToPrint.push(...getTimingValues('Loader', report.timings.loaders));\n valuesToPrint.push(...getTimingValues('Tapable', report.timings.tapables));\n valuesToPrint.push(...getTimingValues('Module', report.timings.modules));\n }\n\n valuesToPrint.push(...getModulesValues(globalContext));\n valuesToPrint.push(...getAssetsValues(globalContext));\n valuesToPrint.push(...getGeneralValues(globalContext));\n\n const outputString = renderValues(valuesToPrint);\n\n log.info(outputString);\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { doRequest, formatDuration } from '@dd/core/helpers';\nimport type { Logger } from '@dd/core/types';\nimport type { MetricToSend } from '@dd/telemetry-plugin/types';\n\nexport const sendMetrics = (\n metrics: Set<MetricToSend>,\n auth: { apiKey?: string; endPoint: string },\n log: Logger,\n) => {\n const startSending = Date.now();\n if (!auth.apiKey) {\n log.warn(`Won't send metrics to Datadog: missing API Key.`);\n return;\n }\n if (!metrics.size) {\n log.warn(`No metrics to send.`);\n return;\n }\n\n const metricIterations: Map<string, number> = new Map();\n for (const metric of metrics) {\n if (!metricIterations.has(metric.metric)) {\n metricIterations.set(metric.metric, 0);\n }\n metricIterations.set(metric.metric, metricIterations.get(metric.metric)! + 1);\n }\n\n const metricsNames = Array.from(metricIterations.entries()).map(\n ([name, count]) => `${name} - ${count}`,\n );\n\n log.debug(`\nSending ${metrics.size} metrics.\nMetrics:\n - ${metricsNames.join('\\n - ')}`);\n\n return doRequest({\n method: 'POST',\n url: `${auth.endPoint}/api/v1/series?api_key=${auth.apiKey}`,\n getData: () => ({\n data: JSON.stringify({ series: Array.from(metrics) } satisfies {\n series: MetricToSend[];\n }),\n }),\n })\n .then(() => {\n log.debug(`Sent metrics in ${formatDuration(Date.now() - startSending)}.`);\n })\n .catch((e) => {\n log.error(`Error sending metrics ${e}`);\n });\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { formatModuleName, getValueContext } from '@dd/telemetry-plugin/common/helpers';\nimport { PLUGIN_NAME } from '@dd/telemetry-plugin/constants';\nimport type { TimingsMap, Timing, Value } from '@dd/telemetry-plugin/types';\nimport type { PluginBuild } from 'esbuild';\nimport { performance } from 'perf_hooks';\n\nconst FN_TO_WRAP = ['onStart', 'onLoad', 'onResolve', 'onEnd'] as const;\n\nconst pluginsMap: TimingsMap = new Map();\nconst modulesMap: TimingsMap = new Map();\n\nexport const wrapPlugins = (build: PluginBuild, context: string) => {\n const plugins = build.initialOptions.plugins;\n if (plugins) {\n // We clone plugins so we don't pass modified options to other plugins.\n const initialPlugins = plugins.map((plugin) => {\n return {\n ...plugin,\n };\n });\n for (const plugin of plugins) {\n // Skip the current plugin.\n if (plugin.name.includes(PLUGIN_NAME)) {\n continue;\n }\n\n const oldSetup = plugin.setup;\n plugin.setup = async (esbuild) => {\n const newBuildObject = getNewBuildObject(esbuild, plugin.name, context);\n await oldSetup({\n ...newBuildObject,\n // Use non-modified plugins for other plugins\n initialOptions: { ...newBuildObject.initialOptions, plugins: initialPlugins },\n });\n };\n }\n }\n};\n\nconst getNewBuildObject = (\n build: PluginBuild,\n pluginName: string,\n context: string,\n): PluginBuild => {\n const newBuildObject: any = Object.assign({}, build);\n for (const fn of FN_TO_WRAP) {\n newBuildObject[fn] = async (opts: any, cb: any) => {\n const pluginTiming: Timing = pluginsMap.get(pluginName) || {\n name: pluginName,\n increment: 0,\n duration: 0,\n events: {},\n };\n\n pluginTiming.events[fn] = pluginTiming.events[fn] || {\n name: fn,\n values: [],\n };\n const initialFunction: any = build[fn];\n return initialFunction(opts, async (...args: any[]) => {\n const modulePath = formatModuleName(args[0].path, context);\n const moduleTiming: Timing = modulesMap.get(modulePath) || {\n name: modulePath,\n increment: 0,\n duration: 0,\n events: {},\n };\n moduleTiming.events[fn] = moduleTiming.events[fn] || {\n name: fn,\n values: [],\n };\n const start = performance.now();\n\n try {\n return await cb(...args);\n } finally {\n const end = performance.now();\n const duration = end - start;\n const statsObject: Value = {\n start,\n end,\n duration,\n context: getValueContext(args),\n };\n\n pluginTiming.events[fn]!.values.push(statsObject);\n pluginTiming.duration += duration;\n pluginTiming.increment += 1;\n pluginsMap.set(pluginName, pluginTiming);\n\n moduleTiming.events[fn].values.push(statsObject);\n moduleTiming.duration += duration;\n moduleTiming.increment += 1;\n modulesMap.set(modulePath, moduleTiming);\n }\n });\n };\n }\n return newBuildObject;\n};\n\nexport const getResults = () => ({ plugins: pluginsMap, modules: modulesMap });\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { Logger, GlobalContext, PluginOptions } from '@dd/core/types';\nimport type { BundlerContext } from '@dd/telemetry-plugin/types';\nimport type { BuildResult } from 'esbuild';\n\nimport { wrapPlugins, getResults as getPluginsResults } from './plugins';\n\nexport const getEsbuildPlugin = (\n bundlerContext: BundlerContext,\n globalContext: GlobalContext,\n logger: Logger,\n): PluginOptions['esbuild'] => {\n return {\n setup: (build) => {\n globalContext.build.start = Date.now();\n\n // We force esbuild to produce its metafile.\n build.initialOptions.metafile = true;\n wrapPlugins(build, globalContext.cwd);\n build.onEnd(async (result: BuildResult) => {\n if (!result.metafile) {\n logger.warn(\"Missing metafile, can't proceed with modules data.\");\n return;\n }\n\n const { plugins, modules } = getPluginsResults();\n\n bundlerContext.report = {\n timings: {\n tapables: plugins,\n modules,\n },\n };\n });\n },\n };\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { getDisplayName, getModuleName, getLoaderNames } from '@dd/telemetry-plugin/common/helpers';\nimport type { Module, Event, Timing, Compilation, TimingsMap } from '@dd/telemetry-plugin/types';\nimport { performance } from 'perf_hooks';\n\nexport class Loaders {\n constructor(cwd: string) {\n this.cwd = cwd;\n }\n cwd: string;\n started: { [key: string]: Event } = {};\n finished: Event[] = [];\n\n buildModule(module: Module, compilation: Compilation): void {\n const moduleName = getModuleName(module, compilation, this.cwd);\n const loaders = getLoaderNames(module);\n\n if (!loaders.length) {\n // Keep a track of modules without a loader.\n loaders.push('no-loader');\n }\n\n // Store the event until the module is complete.\n this.started[moduleName] = {\n module: getDisplayName(moduleName),\n timings: {\n start: performance.now(),\n duration: 0,\n end: 0,\n },\n loaders,\n };\n }\n\n succeedModule(module: Module, compilation: Compilation): void {\n const moduleName = getModuleName(module, compilation, this.cwd);\n // Get the event for this module.\n const event = this.started[moduleName];\n\n if (!event) {\n return;\n }\n\n event.timings.end = performance.now();\n event.timings.duration = event.timings.end - event.timings.start;\n\n // Store the event.\n this.finished.push(event);\n\n // Delete the entry so another import\n // of the same module can be also reported.\n delete this.started[moduleName];\n }\n\n getResults(): {\n modules: TimingsMap;\n loaders: TimingsMap;\n } {\n const loaders: Map<string, Timing> = new Map();\n const modules: Map<string, Timing> = new Map();\n for (const event of this.finished) {\n const duration = event.timings.end! - event.timings.start;\n\n // Aggregate module timings\n const moduleTiming = modules.get(event.module) || {\n name: event.module,\n increment: 0,\n duration: 0,\n events: {},\n };\n\n const eventName = event.loaders.join(',');\n moduleTiming.events[eventName] = moduleTiming.events[eventName] || {\n name: eventName,\n values: [],\n };\n\n moduleTiming.events[eventName].values.push(event.timings);\n moduleTiming.increment += 1;\n moduleTiming.duration += duration;\n modules.set(event.module, moduleTiming);\n\n // Aggregate loader timings\n for (const loader of event.loaders) {\n const loaderTiming = loaders.get(loader) || {\n name: loader,\n increment: 0,\n duration: 0,\n events: {},\n };\n\n loaderTiming.increment += 1;\n loaderTiming.duration += duration;\n loaders.set(loader, loaderTiming);\n }\n }\n\n return { loaders, modules };\n }\n}\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { getPluginName, getValueContext } from '@dd/telemetry-plugin/common/helpers';\nimport { PLUGIN_NAME } from '@dd/telemetry-plugin/constants';\nimport type {\n MonitoredTaps,\n Tapable,\n Hooks,\n TimingsMap,\n ValueContext,\n TAP_TYPES,\n TapablesResult,\n TapPromise,\n TapAsync,\n Tap,\n Hook,\n Timing,\n} from '@dd/telemetry-plugin/types';\nimport { performance } from 'perf_hooks';\n\nexport class Tapables {\n constructor(cwd: Tapables['cwd']) {\n this.cwd = cwd;\n }\n cwd: string;\n monitoredTaps: MonitoredTaps = {};\n tapables: Tapable[] = [];\n hooks: Hooks = {};\n timings: TimingsMap = new Map();\n ignoredHooks = [\n // This one triggers a DEP_WEBPACK_COMPILATION_NORMAL_MODULE_LOADER_HOOK warning.\n 'normalModuleLoader',\n ];\n\n saveResult(\n type: TAP_TYPES,\n pluginName: string,\n hookName: string,\n context: ValueContext[],\n start: number,\n end: number,\n ) {\n const timing: Timing = this.timings.get(pluginName) || {\n name: pluginName,\n duration: 0,\n increment: 0,\n events: {},\n };\n if (!timing.events[hookName]) {\n timing.events[hookName] = {\n name: hookName,\n values: [],\n };\n }\n\n timing.events[hookName].values.push({\n start,\n end,\n duration: end - start,\n context,\n type,\n });\n timing.duration += end - start;\n timing.increment += 1;\n this.timings.set(pluginName, timing);\n }\n\n getResults(): TapablesResult {\n const timings = this.timings;\n\n // Aggregate the durations for each plugin.\n for (const [tapableName, tapable] of this.timings) {\n const timing = tapable;\n timing.duration = Object.values(tapable.events)\n .map((hookArray) =>\n hookArray.values.reduce((previous, current) => {\n return previous + current.end - current.start;\n }, 0),\n )\n .reduce((previous, current) => previous + current, 0);\n timings.set(tapableName, timing);\n }\n\n return {\n monitoredTaps: this.monitoredTaps,\n tapables: this.tapables,\n hooks: this.hooks,\n timings,\n };\n }\n\n getPromiseTapPatch(type: TAP_TYPES, fn: TapPromise, pluginName: string, hookName: string) {\n return (...args: [any]) => {\n // Find new hooks\n this.checkNewHooks();\n const startTime = performance.now();\n const returnValue = fn.apply(this, args);\n const cb = () => {\n this.saveResult(\n type,\n pluginName,\n hookName,\n getValueContext(args),\n startTime,\n performance.now(),\n );\n };\n // Save the result whether it succeeds or not.\n returnValue.then(cb, cb);\n return returnValue;\n };\n }\n\n getAsyncTapPatch(type: TAP_TYPES, fn: TapAsync, pluginName: string, hookName: string) {\n return (...args: [any]) => {\n // Find new hooks\n this.checkNewHooks();\n const startTime = performance.now();\n // Callback is the last argument.\n const originalCB = args.pop();\n const newCB = (...a: [any]) => {\n this.saveResult(\n type,\n pluginName,\n hookName,\n getValueContext(args),\n startTime,\n performance.now(),\n );\n return originalCB(...a);\n };\n return fn.apply(this, [...args, newCB]);\n };\n }\n\n getDefaultTapPatch(type: TAP_TYPES, fn: Tap, pluginName: string, hookName: string) {\n return (...args: [any]) => {\n // Find new hooks\n this.checkNewHooks();\n const startTime = performance.now();\n const returnValue = fn.apply(this, args);\n this.saveResult(\n type,\n pluginName,\n hookName,\n getValueContext(args),\n startTime,\n performance.now(),\n );\n return returnValue;\n };\n }\n\n // Patch the tap so we can report its execution duration.\n getTapPatch(type: TAP_TYPES, fn: (args: any) => any, pluginName: string, hookName: string) {\n switch (type) {\n case 'promise':\n return this.getPromiseTapPatch(type, fn, pluginName, hookName);\n case 'async':\n return this.getAsyncTapPatch(type, fn, pluginName, hookName);\n case 'default':\n default:\n return this.getDefaultTapPatch(type, fn, pluginName, hookName);\n }\n }\n\n newTap(\n type: TAP_TYPES,\n hookName: string,\n originalTap: Tap | TapAsync | TapPromise,\n scope: any,\n ) {\n return (options: any, fn: (args: any) => any) => {\n const pluginName = getPluginName(options);\n const key = `${hookName}-${pluginName}`;\n if (this.monitoredTaps[key]) {\n // Since it's monitored, fn is already patched.\n return originalTap.call(scope, options, fn);\n }\n this.monitoredTaps[key] = true;\n const newFn = this.getTapPatch(type, fn, pluginName, hookName);\n return originalTap.call(scope, options, newFn);\n };\n }\n\n replaceTaps(hookName: string, hook: Hook) {\n // Cover three types of tap.\n hook.tap = this.newTap('default', hookName, hook.tap!, hook);\n hook.tapAsync = this.newTap('async', hookName, hook.tapAsync!, hook);\n hook.tapPromise = this.newTap('promise', hookName, hook.tapPromise!, hook);\n }\n\n patchHook(tapableName: string, hookName: string, hook: Hook) {\n // Webpack 5 specific, these _fakeHook are not writable.\n // eslint-disable-next-line no-underscore-dangle\n if (hook._fakeHook) {\n return;\n }\n\n // Skip the current plugin.\n if (tapableName.includes(PLUGIN_NAME)) {\n return;\n }\n\n if (!this.hooks[tapableName]) {\n this.hooks[tapableName] = [];\n }\n\n if (this.hooks[tapableName].includes(hookName)) {\n return;\n }\n\n this.hooks[tapableName].push(hookName);\n this.replaceTaps(hookName, hook);\n }\n\n patchHooks(tapable: Tapable) {\n const name = tapable.constructor.name;\n const hooksToPatch = Object.keys(tapable.hooks).filter((hookName) => {\n // Skip the ignored hooks.\n if (this.ignoredHooks.includes(hookName)) {\n return false;\n }\n\n // Skip the already patched hooks.\n if (this.hooks[name]?.includes(hookName)) {\n return false;\n }\n\n return true;\n });\n\n for (const hookName of hooksToPatch) {\n this.patchHook(name, hookName, tapable.hooks[hookName]);\n }\n }\n\n checkNewHooks() {\n // We reparse hooks in case new ones arrived.\n for (const tapable of this.tapables) {\n this.patchHooks(tapable);\n }\n }\n\n // Let's navigate through all the hooks we can find.\n throughHooks(tapable: Tapable) {\n if (!this.tapables.includes(tapable)) {\n this.tapables.push(tapable);\n }\n\n this.patchHooks(tapable);\n }\n}\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { GlobalContext, PluginOptions } from '@dd/core/types';\nimport { PLUGIN_NAME } from '@dd/telemetry-plugin/constants';\nimport type { Compilation, BundlerContext } from '@dd/telemetry-plugin/types';\n\nimport { Loaders } from './loaders';\nimport { Tapables } from './tapables';\n\nexport const getWebpackPlugin = (\n bundlerContext: BundlerContext,\n globalContext: GlobalContext,\n): PluginOptions['webpack'] & PluginOptions['rspack'] => {\n return async (compiler) => {\n globalContext.build.start = Date.now();\n\n const HOOK_OPTIONS = { name: PLUGIN_NAME };\n\n const tapables = new Tapables(globalContext.cwd);\n const loaders = new Loaders(globalContext.cwd);\n\n // @ts-expect-error - webpack 4 and 5 nonsense.\n tapables.throughHooks(compiler);\n\n // @ts-expect-error - webpack 4 and 5 nonsense.\n compiler.hooks.thisCompilation.tap(HOOK_OPTIONS, (compilation: Compilation) => {\n tapables.throughHooks(compilation);\n\n compilation.hooks.buildModule.tap(HOOK_OPTIONS, (module) => {\n loaders.buildModule(module, compilation);\n });\n\n compilation.hooks.succeedModule.tap(HOOK_OPTIONS, (module) => {\n loaders.succeedModule(module, compilation);\n });\n });\n\n // We're losing some tracing from plugins by using `afterEmit` instead of `done` but\n // it allows us to centralize the common process better.\n compiler.hooks.afterEmit.tapPromise(HOOK_OPTIONS, async (compilation) => {\n const { timings: tapableTimings } = tapables.getResults();\n const { loaders: loadersTimings, modules: modulesTimings } = loaders.getResults();\n\n bundlerContext.report = {\n timings: {\n tapables: tapableTimings,\n loaders: loadersTimings,\n modules: modulesTimings,\n },\n };\n });\n };\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { GlobalContext, GetPlugins, PluginOptions, Logger } from '@dd/core/types';\n\nimport { addMetrics } from './common/aggregator';\nimport { defaultFilters } from './common/filters';\nimport { getOptionsDD, validateOptions } from './common/helpers';\nimport { outputFiles } from './common/output/files';\nimport { outputTexts } from './common/output/text';\nimport { sendMetrics } from './common/sender';\nimport { PLUGIN_NAME, CONFIG_KEY } from './constants';\nimport { getEsbuildPlugin } from './esbuild-plugin';\nimport type {\n BundlerContext,\n Filter,\n Metric,\n MetricToSend,\n OptionsWithTelemetry,\n TelemetryOptions,\n} from './types';\nimport { getWebpackPlugin } from './webpack-plugin';\n\nexport { CONFIG_KEY, PLUGIN_NAME };\n\nexport const helpers = {\n filters: defaultFilters,\n};\n\nexport type types = {\n Filter: Filter;\n Metric: Metric;\n TelemetryOptions: TelemetryOptions;\n};\n\nexport const getPlugins: GetPlugins<OptionsWithTelemetry> = (\n options: OptionsWithTelemetry,\n context: GlobalContext,\n logger: Logger,\n) => {\n let realBuildEnd: number = 0;\n const bundlerContext: BundlerContext = {\n start: Date.now(),\n };\n\n const telemetryOptions = validateOptions(options);\n const plugins: PluginOptions[] = [];\n\n // Webpack and Esbuild specific plugins.\n // LEGACY\n const legacyPlugin: PluginOptions = {\n name: PLUGIN_NAME,\n enforce: 'pre',\n esbuild: getEsbuildPlugin(bundlerContext, context, logger),\n webpack: getWebpackPlugin(bundlerContext, context),\n rspack: getWebpackPlugin(bundlerContext, context),\n };\n // Universal plugin.\n const universalPlugin: PluginOptions = {\n name: 'datadog-universal-telemetry-plugin',\n enforce: 'post',\n buildStart() {\n context.build.start = context.build.start || Date.now();\n },\n buildEnd() {\n realBuildEnd = Date.now();\n },\n\n // Move as much as possible in the universal plugin.\n async writeBundle() {\n context.build.end = Date.now();\n context.build.duration = context.build.end - context.build.start!;\n context.build.writeDuration = context.build.end - realBuildEnd;\n\n const metrics: Set<MetricToSend> = new Set();\n const optionsDD = getOptionsDD(telemetryOptions);\n\n addMetrics(context, optionsDD, metrics, bundlerContext.report);\n\n // TODO Extract the files output in an internal plugin.\n await outputFiles(\n { report: bundlerContext.report, metrics },\n telemetryOptions.output,\n logger,\n context.bundler.outDir,\n );\n outputTexts(context, logger, bundlerContext.report);\n\n await sendMetrics(\n metrics,\n { apiKey: context.auth?.apiKey, endPoint: telemetryOptions.endPoint },\n logger,\n );\n },\n };\n\n if (telemetryOptions.enableTracing) {\n plugins.push(legacyPlugin);\n }\n\n plugins.push(universalPlugin);\n\n return plugins;\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { getResolvedPath, isInjectionFile } from '@dd/core/helpers';\nimport type { Logger, Entry, GlobalContext, Input, Output, PluginOptions } from '@dd/core/types';\nimport { glob } from 'glob';\n\nimport { cleanName, getAbsolutePath, getType } from './helpers';\n\n// Re-index metafile data for easier access.\nconst reIndexMeta = <T>(obj: Record<string, T>, cwd: string) =>\n Object.fromEntries(\n Object.entries(obj).map(([key, value]) => {\n const newKey = getAbsolutePath(cwd, key);\n return [newKey, value];\n }),\n );\n\n// https://esbuild.github.io/api/#glob-style-entry-points\nconst getAllEntryFiles = (filepath: string, cwd: string): string[] => {\n if (!filepath.includes('*')) {\n return [filepath];\n }\n\n const files = glob.sync(filepath);\n return files;\n};\n\n// Exported for testing purposes.\nexport const getEntryNames = (\n entrypoints: string[] | Record<string, string> | { in: string; out: string }[] | undefined,\n context: GlobalContext,\n): Map<string, string> => {\n const entryNames = new Map();\n if (Array.isArray(entrypoints)) {\n // We don't have an indexed object as entry, so we can't get an entry name from it.\n for (const entry of entrypoints) {\n const fullPath = entry && typeof entry === 'object' ? entry.in : entry;\n const allFiles = getAllEntryFiles(fullPath, context.cwd);\n for (const file of allFiles) {\n // Using getResolvedPath because entries can be written with unresolved paths.\n const cleanedName = cleanName(context, getResolvedPath(file));\n entryNames.set(cleanedName, cleanedName);\n }\n }\n } else if (typeof entrypoints === 'object') {\n const entryList = entrypoints ? Object.entries(entrypoints) : [];\n for (const [entryName, entryPath] of entryList) {\n const allFiles = getAllEntryFiles(entryPath, context.cwd);\n for (const file of allFiles) {\n const cleanedName = cleanName(context, getResolvedPath(file));\n entryNames.set(cleanedName, entryName);\n }\n }\n }\n return entryNames;\n};\n\nexport const getEsbuildPlugin = (context: GlobalContext, log: Logger): PluginOptions['esbuild'] => {\n return {\n setup(build) {\n const cwd = context.cwd;\n\n // Store entry names based on the configuration.\n const entrypoints = build.initialOptions.entryPoints;\n const entryNames = getEntryNames(entrypoints, context);\n\n build.onEnd((result) => {\n for (const error of result.errors) {\n context.build.errors.push(error.text);\n }\n for (const warning of result.warnings) {\n context.build.warnings.push(warning.text);\n }\n\n const warn = (warning: string) => {\n context.build.warnings.push(warning);\n log.warn(warning);\n };\n\n if (!result.metafile) {\n warn('Missing metafile from build result.');\n return;\n }\n\n const inputs: Input[] = [];\n const outputs: Output[] = [];\n const tempEntryFiles: Entry[] = [];\n const tempSourcemaps: Output[] = [];\n const entries: Entry[] = [];\n\n const reportInputsIndexed: Record<string, Input> = {};\n const reportOutputsIndexed: Record<string, Output> = {};\n\n const metaInputsIndexed = reIndexMeta(result.metafile.inputs, cwd);\n const metaOutputsIndexed = reIndexMeta(result.metafile.outputs, cwd);\n\n // From a proxy entry point, created by our injection plugin, get the real path.\n const getRealPathFromInjectionProxy = (entryPoint: string): string => {\n if (!isInjectionFile(entryPoint)) {\n return entryPoint;\n }\n\n const metaInput = metaInputsIndexed[getAbsolutePath(cwd, entryPoint)];\n if (!metaInput) {\n return entryPoint;\n }\n\n // Get the first non-injection import.\n const actualImport = metaInput.imports.find(\n (imp) => !isInjectionFile(imp.path),\n );\n if (!actualImport) {\n return entryPoint;\n }\n\n return actualImport.path;\n };\n\n // Loop through inputs.\n for (const [filename, input] of Object.entries(result.metafile.inputs)) {\n if (isInjectionFile(filename)) {\n continue;\n }\n\n const filepath = getAbsolutePath(cwd, filename);\n const name = cleanName(context, filename);\n\n const file: Input = {\n name,\n filepath,\n dependents: new Set(),\n dependencies: new Set(),\n size: input.bytes,\n type: getType(filename),\n };\n reportInputsIndexed[filepath] = file;\n inputs.push(file);\n }\n\n // Loop through outputs.\n for (const [filename, output] of Object.entries(result.metafile.outputs)) {\n const fullPath = getAbsolutePath(cwd, filename);\n const cleanedName = cleanName(context, fullPath);\n // Get inputs of this output.\n const inputFiles: Input[] = [];\n for (const inputName of Object.keys(output.inputs)) {\n if (isInjectionFile(inputName)) {\n continue;\n }\n\n const inputFound = reportInputsIndexed[getAbsolutePath(cwd, inputName)];\n if (!inputFound) {\n warn(`Input ${inputName} not found for output ${cleanedName}`);\n continue;\n }\n\n inputFiles.push(inputFound);\n }\n\n // When splitting, esbuild creates an empty entryPoint wrapper for the chunk.\n // It has no inputs, but still relates to its entryPoint.\n if (output.entryPoint && !inputFiles.length) {\n const inputFound =\n reportInputsIndexed[getAbsolutePath(cwd, output.entryPoint!)];\n if (!inputFound) {\n warn(`Input ${output.entryPoint} not found for output ${cleanedName}`);\n continue;\n }\n inputFiles.push(inputFound);\n }\n\n const file: Output = {\n name: cleanedName,\n filepath: fullPath,\n inputs: inputFiles,\n size: output.bytes,\n type: getType(fullPath),\n };\n\n reportOutputsIndexed[fullPath] = file;\n\n // Store sourcemaps for later filling.\n if (file.type === 'map') {\n tempSourcemaps.push(file);\n }\n\n outputs.push(file);\n\n if (!output.entryPoint) {\n continue;\n }\n\n // The entryPoint may have been altered by our injection plugin.\n const inputFile =\n reportInputsIndexed[\n getAbsolutePath(cwd, getRealPathFromInjectionProxy(output.entryPoint))\n ];\n\n if (inputFile) {\n // In the case of \"splitting: true\", all the files are considered entries to esbuild.\n // Not to us.\n // Verify we have listed it as an entry earlier.\n if (!entryNames.get(inputFile.name)) {\n continue;\n }\n\n const entry = {\n ...file,\n name: entryNames.get(inputFile.name) || inputFile.name,\n outputs: [file],\n size: file.size,\n };\n\n tempEntryFiles.push(entry);\n }\n }\n\n // Loop through sourcemaps.\n for (const sourcemap of tempSourcemaps) {\n const outputFilepath = sourcemap.filepath.replace(/\\.map$/, '');\n const foundOutput = reportOutputsIndexed[outputFilepath];\n\n if (!foundOutput) {\n warn(`Could not find output for sourcemap ${sourcemap.name}`);\n continue;\n }\n\n sourcemap.inputs.push(foundOutput);\n }\n\n // Build our references for the entries.\n const references = {\n inputs: {\n report: reportInputsIndexed,\n meta: metaInputsIndexed,\n },\n outputs: {\n report: reportOutputsIndexed,\n meta: metaOutputsIndexed,\n },\n };\n\n // There are some exceptions we want to ignore.\n const FILE_EXCEPTIONS_RX = /(<runtime>|https:|file:|data:|#)/g;\n const isFileSupported = (filePath: string) => {\n if (isInjectionFile(filePath) || filePath.match(FILE_EXCEPTIONS_RX)) {\n return false;\n }\n return true;\n };\n\n // Go through all imports.\n const getAllImports = <T extends Input | Output>(\n filePath: string,\n ref: typeof references.inputs | typeof references.outputs,\n allImports: Record<string, T> = {},\n ): Record<string, T> => {\n if (!isFileSupported(filePath)) {\n return allImports;\n }\n\n const file = ref.report[filePath];\n if (!file) {\n warn(`Could not find report's ${filePath}`);\n return allImports;\n }\n\n // Check if we already have processed it.\n if (allImports[file.filepath]) {\n return allImports;\n }\n\n allImports[file.filepath] = file as T;\n\n const metaFile = ref.meta[filePath];\n if (!metaFile) {\n warn(`Could not find metafile's ${filePath}`);\n return allImports;\n }\n\n // If there are no imports, we can return what we have.\n if (!metaFile.imports || !metaFile.imports.length) {\n return allImports;\n }\n\n for (const imported of metaFile.imports) {\n const importPath = getAbsolutePath(cwd, imported.path);\n // Look for the other inputs.\n getAllImports<T>(importPath, ref, allImports);\n }\n\n return allImports;\n };\n\n // Loop through entries.\n // TODO This is slightly underperformant due to getAllImports' recursivity.\n for (const entryFile of tempEntryFiles) {\n const entryInputs: Record<string, Input> = {};\n const entryOutputs: Record<string, Output> = {};\n\n // Do inputs for this entry.\n for (const input of entryFile.inputs) {\n getAllImports<Input>(input.filepath, references.inputs, entryInputs);\n }\n\n // Do outputs for this entry.\n for (const outputFile of entryFile.outputs) {\n getAllImports<Output>(\n outputFile.filepath,\n references.outputs,\n entryOutputs,\n );\n }\n\n entryFile.inputs = Object.values(entryInputs);\n entryFile.outputs = Object.values(entryOutputs);\n entryFile.size = entryFile.outputs.reduce(\n (acc, output) => acc + output.size,\n 0,\n );\n\n entries.push(entryFile);\n }\n\n // Loop through all inputs to aggregate dependencies and dependents.\n for (const input of inputs) {\n const metaFile = references.inputs.meta[input.filepath];\n if (!metaFile) {\n warn(`Could not find metafile's ${input.name}`);\n continue;\n }\n\n for (const dependency of metaFile.imports) {\n if (!isFileSupported(dependency.path)) {\n continue;\n }\n const dependencyPath = getAbsolutePath(cwd, dependency.path);\n const dependencyFile = references.inputs.report[dependencyPath];\n\n if (!dependencyFile) {\n warn(`Could not find input file of ${dependency.path}`);\n continue;\n }\n\n input.dependencies.add(dependencyFile);\n // Add itself to the dependency's dependents.\n dependencyFile.dependents.add(input);\n }\n }\n\n context.build.outputs = outputs;\n context.build.inputs = inputs;\n context.build.entries = entries;\n });\n },\n };\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { Logger, Entry, GlobalContext, Input, Output, PluginOptions } from '@dd/core/types';\n\nimport { cleanName, cleanPath, cleanReport, getAbsolutePath, getType } from './helpers';\n\nexport const getRollupPlugin = (context: GlobalContext, log: Logger): PluginOptions['rollup'] => {\n const importsReport: Record<\n string,\n {\n dependencies: Set<string>;\n dependents: Set<string>;\n }\n > = {};\n return {\n onLog(level, logItem) {\n if (level === 'warn') {\n context.build.warnings.push(logItem.message || logItem.toString());\n }\n },\n renderError(error) {\n if (error) {\n context.build.errors.push(error.message);\n }\n },\n moduleParsed(info) {\n // Store import infos.\n const cleanId = cleanPath(info.id);\n const report = importsReport[cleanId] || {\n dependencies: new Set(),\n dependents: new Set(),\n };\n\n // Clean new dependencies and dependents.\n const newDependencies = cleanReport(\n new Set([...info.dynamicallyImportedIds, ...info.importedIds]),\n cleanId,\n );\n\n const newDependents = cleanReport(\n new Set([...info.dynamicImporters, ...info.importers]),\n cleanId,\n );\n\n for (const dependent of newDependents) {\n report.dependents.add(dependent);\n }\n\n for (const dependency of newDependencies) {\n report.dependencies.add(dependency);\n }\n\n importsReport[cleanId] = report;\n },\n writeBundle(options, bundle) {\n const inputs: Input[] = [];\n const outputs: Output[] = [];\n const tempEntryFiles: Entry[] = [];\n const tempSourcemaps: Output[] = [];\n const entries: Entry[] = [];\n\n const reportInputsIndexed: Record<string, Input> = {};\n const reportOutputsIndexed: Record<string, Output> = {};\n\n const warn = (warning: string) => {\n context.build.warnings.push(warning);\n log.warn(warning);\n };\n\n // Complete the importsReport with missing dependents and dependencies.\n for (const [filepath, { dependencies, dependents }] of Object.entries(importsReport)) {\n for (const dependency of dependencies) {\n const cleanedDependency = cleanPath(dependency);\n if (!importsReport[cleanedDependency]) {\n importsReport[cleanedDependency] = {\n dependencies: new Set(),\n dependents: new Set(),\n };\n }\n\n if (importsReport[cleanedDependency].dependents.has(filepath)) {\n continue;\n }\n\n importsReport[cleanedDependency].dependents.add(filepath);\n }\n\n for (const dependent of dependents) {\n const cleanedDependent = cleanPath(dependent);\n if (!importsReport[cleanedDependent]) {\n importsReport[cleanedDependent] = {\n dependencies: new Set(),\n dependents: new Set(),\n };\n }\n\n if (importsReport[cleanedDependent].dependencies.has(filepath)) {\n continue;\n }\n\n importsReport[cleanedDependent].dependencies.add(filepath);\n }\n }\n\n // Fill in inputs and outputs.\n for (const [filename, asset] of Object.entries(bundle)) {\n const filepath = getAbsolutePath(context.bundler.outDir, filename);\n const size =\n 'code' in asset\n ? Buffer.byteLength(asset.code, 'utf8')\n : Buffer.byteLength(asset.source, 'utf8');\n\n const file: Output = {\n name: filename,\n filepath,\n inputs: [],\n size,\n type: getType(filename),\n };\n\n // Store sourcemaps for later filling.\n // Because we may not have reported its input yet.\n if (file.type === 'map') {\n tempSourcemaps.push(file);\n }\n\n if ('modules' in asset) {\n for (const [modulepath, module] of Object.entries(asset.modules)) {\n // We don't want to include commonjs wrappers that have a path like:\n // \\u0000{{path}}?commonjs-proxy\n if (cleanPath(modulepath) !== modulepath) {\n continue;\n }\n const moduleFile: Input = {\n name: cleanName(context, modulepath),\n dependencies: new Set(),\n dependents: new Set(),\n filepath: modulepath,\n // Since we store as input, we use the originalLength.\n size: module.originalLength,\n type: getType(modulepath),\n };\n file.inputs.push(moduleFile);\n\n reportInputsIndexed[moduleFile.filepath] = moduleFile;\n inputs.push(moduleFile);\n }\n }\n\n // Store entries for later filling.\n // As we may not have reported its outputs and inputs yet.\n if ('isEntry' in asset && asset.isEntry) {\n tempEntryFiles.push({ ...file, name: asset.name, size: 0, outputs: [file] });\n }\n\n reportOutputsIndexed[file.filepath] = file;\n outputs.push(file);\n }\n\n // Fill in inputs' dependencies and dependents.\n for (const input of inputs) {\n const importReport = importsReport[input.filepath];\n if (!importReport) {\n warn(`Could not find the import report for ${input.name}.`);\n continue;\n }\n\n for (const dependency of importReport.dependencies) {\n const foundInput = reportInputsIndexed[dependency];\n if (!foundInput) {\n warn(\n `Could not find input for dependency ${cleanName(context, dependency)} of ${input.name}`,\n );\n continue;\n }\n input.dependencies.add(foundInput);\n }\n\n for (const dependent of importReport.dependents) {\n const foundInput = reportInputsIndexed[dependent];\n if (!foundInput) {\n warn(\n `Could not find input for dependent ${cleanName(context, dependent)} of ${input.name}`,\n );\n continue;\n }\n input.dependents.add(foundInput);\n }\n }\n\n // Fill in sourcemaps' inputs if necessary\n if (tempSourcemaps.length) {\n for (const sourcemap of tempSourcemaps) {\n const outputPath = sourcemap.filepath.replace(/\\.map$/, '');\n const foundOutput = reportOutputsIndexed[outputPath];\n\n if (!foundOutput) {\n warn(`Could not find output for sourcemap ${sourcemap.name}`);\n continue;\n }\n\n sourcemap.inputs.push(foundOutput);\n }\n }\n\n // Gather all outputs from a filepath, following imports.\n const getAllOutputs = (filepath: string, allOutputs: Record<string, Output> = {}) => {\n // We already processed it.\n if (allOutputs[filepath]) {\n return allOutputs;\n }\n const filename = cleanName(context, filepath);\n\n // Get its output.\n const foundOutput = reportOutputsIndexed[filepath];\n if (!foundOutput) {\n warn(`Could not find output for ${filename}`);\n return allOutputs;\n }\n allOutputs[filepath] = foundOutput;\n\n const asset = bundle[filename];\n if (!asset) {\n warn(`Could not find asset for ${filename}`);\n return allOutputs;\n }\n\n // Imports are stored in two different places.\n const imports = [];\n if ('imports' in asset) {\n imports.push(...asset.imports);\n }\n if ('dynamicImports' in asset) {\n imports.push(...asset.dynamicImports);\n }\n\n for (const importName of imports) {\n getAllOutputs(getAbsolutePath(context.bundler.outDir, importName), allOutputs);\n }\n\n return allOutputs;\n };\n\n // Fill in entries\n for (const entryFile of tempEntryFiles) {\n const entryOutputs = getAllOutputs(entryFile.filepath);\n entryFile.outputs = Object.values(entryOutputs);\n\n // NOTE: This might not be as accurate as expected, some inputs could be side-effects.\n // Rollup doesn't provide a way to get the imports of an input.\n entryFile.inputs = Array.from(\n new Set(entryFile.outputs.flatMap((output) => output.inputs)),\n );\n entryFile.size = entryFile.outputs.reduce((acc, output) => acc + output.size, 0);\n entries.push(entryFile);\n }\n\n context.build.inputs = inputs;\n context.build.outputs = outputs;\n context.build.entries = entries;\n },\n };\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type {\n Logger,\n Entry,\n GlobalContext,\n Input,\n IterableElement,\n Output,\n PluginOptions,\n} from '@dd/core/types';\n\nimport { cleanName, getAbsolutePath, getType } from './helpers';\n\nexport const getXpackPlugin =\n (\n context: GlobalContext,\n PLUGIN_NAME: string,\n log: Logger,\n ): PluginOptions['rspack'] & PluginOptions['webpack'] =>\n (compiler) => {\n const inputs: Input[] = [];\n const outputs: Output[] = [];\n const entries: Entry[] = [];\n\n // Types for the xpack hooks.\n type Compilation = Parameters<Parameters<typeof compiler.hooks.thisCompilation.tap>[1]>[0];\n type Module = IterableElement<\n Parameters<Parameters<Compilation['hooks']['finishModules']['tap']>[1]>[0]\n >;\n type Dependency = IterableElement<IterableElement<Module['blocks']>['dependencies']>;\n type Chunk = IterableElement<Compilation['chunks']>;\n\n // Some indexes to help with the report generation.\n const reportInputsIndexed: Map<string, Input> = new Map();\n const reportOutputsIndexed: Map<string, Output> = new Map();\n const modulesPerFile: Map<string, string[]> = new Map();\n const moduleIndex: Map<string, Module> = new Map();\n\n // Some temporary holders to later fill in more data.\n const tempSourcemaps: Output[] = [];\n const tempDeps: Map<string, { dependencies: Set<string>; dependents: Set<string> }> =\n new Map();\n\n const isModuleSupported = (moduleIdentifier?: string): boolean => {\n // console.log('Module Identifier supported', moduleIdentifier);\n return (\n // Ignore unidentified modules and runtimes.\n !!moduleIdentifier &&\n !moduleIdentifier.startsWith('webpack/runtime') &&\n !moduleIdentifier.includes('/webpack4/buildin/') &&\n !moduleIdentifier.startsWith('multi ')\n );\n };\n\n const warn = (warning: string) => {\n context.build.warnings.push(warning);\n log.warn(warning);\n };\n\n /**\n * Let's get build data from webpack 4 and 5.\n * 1. Build a dependency graph from all the initial modules once they're finished\n * In afterEmit, modules are concatenated and obfuscated.\n * 2. Once the build is finished and emitted, we can compute the outputs and the entries.\n */\n\n // Index the module by its identifier, resource, request, rawRequest, and userRequest.\n const getKeysToIndex = (mod: Module): Set<string> => {\n const values: Record<string, string> = {\n identifier: mod.identifier(),\n };\n\n if ('resource' in mod && typeof mod.resource === 'string') {\n values.resource = mod.resource;\n }\n if ('request' in mod && typeof mod.request === 'string') {\n values.request = mod.request;\n }\n if ('rawRequest' in mod && typeof mod.rawRequest === 'string') {\n values.rawRequest = mod.rawRequest;\n }\n if ('userRequest' in mod && typeof mod.userRequest === 'string') {\n values.userRequest = mod.userRequest;\n }\n\n const keysToIndex: Set<string> = new Set();\n\n for (const [key, value] of Object.entries(values)) {\n if (!value) {\n continue;\n }\n\n if (moduleIndex.has(value)) {\n warn(`Module ${mod.identifier()} is already indexed by ${key}.`);\n if (moduleIndex.get(value) !== mod) {\n warn(`Module ${mod.identifier()} is indexed with a different value.`);\n }\n } else {\n keysToIndex.add(value);\n }\n }\n\n return keysToIndex;\n };\n\n // Aggregate all dependencies from a module.\n const getAllDependencies = (\n module: Module | Dependency | Module['blocks'][number],\n dependencies: Dependency[] = [],\n ) => {\n if ('dependencies' in module) {\n for (const dependency of module.dependencies) {\n dependencies.push(dependency);\n getAllDependencies(dependency, dependencies);\n }\n }\n\n if ('blocks' in module) {\n for (const block of module.blocks) {\n getAllDependencies(block, dependencies);\n }\n }\n\n return dependencies;\n };\n\n const getModuleFromDep = (mod: Module, dep: Dependency): Module | undefined => {\n if ('request' in dep && dep.request) {\n if (moduleIndex.has(dep.request)) {\n return moduleIndex.get(dep.request);\n }\n if (mod.context && moduleIndex.has(getAbsolutePath(mod.context, dep.request))) {\n return moduleIndex.get(getAbsolutePath(mod.context, dep.request));\n }\n }\n };\n\n // Intercept the compilation to then get the modules.\n compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {\n // Intercept the modules to build the dependency graph.\n compilation.hooks.finishModules.tap(\n PLUGIN_NAME,\n (finishedModules: Iterable<Module>) => {\n // First loop to create indexes.\n for (const module of finishedModules) {\n const keysToIndex = getKeysToIndex(module);\n for (const key of keysToIndex) {\n moduleIndex.set(key, module);\n }\n }\n\n // Second loop to create the dependency graph.\n for (const module of finishedModules) {\n const moduleIdentifier = module.identifier();\n const dependencies: Set<string> = new Set(\n getAllDependencies(module)\n .map((dep) => {\n const mod = getModuleFromDep(module, dep);\n\n // Ignore those we can't identify.\n if (!mod || !mod.identifier()) {\n return false;\n }\n\n const identifier = mod.identifier();\n\n // Only what we support.\n if (!isModuleSupported(identifier)) {\n return false;\n }\n\n // Don't add itself as a dependency.\n if (identifier === moduleIdentifier) {\n return false;\n }\n\n return identifier;\n })\n .filter(Boolean) as string[],\n );\n\n if (!isModuleSupported(moduleIdentifier)) {\n continue;\n }\n\n // Create dependents relationships.\n for (const depIdentifier of dependencies) {\n const depDeps = tempDeps.get(depIdentifier) || {\n dependencies: new Set(),\n dependents: new Set(),\n };\n depDeps.dependents.add(moduleIdentifier);\n tempDeps.set(depIdentifier, depDeps);\n }\n\n const moduleDeps = tempDeps.get(moduleIdentifier) || {\n dependents: new Set(),\n dependencies: new Set(),\n };\n\n for (const moduleDep of dependencies) {\n moduleDeps.dependencies.add(moduleDep);\n }\n\n // Store the dependencies.\n tempDeps.set(moduleIdentifier, moduleDeps);\n\n // Store the inputs.\n const file: Input = {\n size: module.size() || 0,\n name: cleanName(context, moduleIdentifier),\n dependencies: new Set(),\n dependents: new Set(),\n filepath: moduleIdentifier,\n type: getType(moduleIdentifier),\n };\n inputs.push(file);\n reportInputsIndexed.set(moduleIdentifier, file);\n }\n\n // Assign dependencies and dependents.\n for (const input of inputs) {\n const depsReport = tempDeps.get(input.filepath);\n\n if (!depsReport) {\n warn(`Could not find dependency report for ${input.name}`);\n continue;\n }\n\n for (const dependency of depsReport.dependencies) {\n const depInput = reportInputsIndexed.get(dependency);\n if (!depInput) {\n warn(`Could not find input of dependency ${dependency}`);\n continue;\n }\n input.dependencies.add(depInput);\n }\n\n for (const dependent of depsReport.dependents) {\n const depInput = reportInputsIndexed.get(dependent);\n if (!depInput) {\n warn(`Could not find input of dependent ${dependent}`);\n continue;\n }\n input.dependents.add(depInput);\n }\n }\n },\n );\n });\n\n compiler.hooks.afterEmit.tap(PLUGIN_NAME, (result: Compilation) => {\n const chunks = result.chunks;\n const assets = result.getAssets();\n\n const getChunkFiles = (chunk: Chunk) => {\n return [...(chunk.files || []), ...(chunk.auxiliaryFiles || [])].map((f: string) =>\n getAbsolutePath(context.bundler.outDir, f),\n );\n };\n\n const chunkGraph = result.chunkGraph;\n for (const chunk of chunks) {\n const files = getChunkFiles(chunk);\n\n const chunkModules = (\n chunkGraph\n ? // @ts-expect-error: Reconciliating Webpack 4, Webpack 5 and Rspack is hard.\n chunkGraph?.getChunkModules(chunk)\n : // This one is for webpack 4.\n 'getModules' in chunk && typeof chunk.getModules === 'function'\n ? (chunk.getModules() as Module[])\n : []\n )\n .flatMap((m) => {\n // modules exists but isn't in the types.\n return 'modules' in m && Array.isArray(m.modules)\n ? m.modules.map((m2) => m2.identifier())\n : m.identifier();\n })\n .filter(isModuleSupported);\n\n for (const file of files) {\n if (getType(file) === 'map') {\n continue;\n }\n const fileModules = modulesPerFile.get(file) || [];\n modulesPerFile.set(file, [...fileModules, ...chunkModules]);\n }\n }\n\n // Build outputs\n for (const asset of assets) {\n const file: Output = {\n size: asset.source.size() || 0,\n name: asset.name,\n inputs: [],\n filepath: getAbsolutePath(context.bundler.outDir, asset.name),\n type: getType(asset.name),\n };\n\n reportOutputsIndexed.set(file.filepath, file);\n outputs.push(file);\n\n // If it's a sourcemap, store it, we'll fill its input when we'll have\n // referenced all the outputs.\n if (file.type === 'map') {\n tempSourcemaps.push(file);\n continue;\n }\n\n // Add the inputs.\n const fileModules = modulesPerFile.get(file.filepath);\n if (!fileModules) {\n warn(`Could not find modules for ${file.name}`);\n continue;\n }\n\n for (const moduleIdentifier of fileModules) {\n const inputFound = reportInputsIndexed.get(moduleIdentifier);\n if (!inputFound) {\n warn(`Could not find input of ${moduleIdentifier}`);\n continue;\n }\n file.inputs.push(inputFound);\n }\n }\n\n // Fill in inputs for sourcemaps.\n for (const sourcemap of tempSourcemaps) {\n const outputFound = reportOutputsIndexed.get(\n sourcemap.filepath.replace(/\\.map$/, ''),\n );\n\n if (!outputFound) {\n warn(`Output not found for sourcemap ${sourcemap.name}`);\n continue;\n }\n\n sourcemap.inputs.push(outputFound);\n }\n\n // Build entries\n for (const [name, entrypoint] of result.entrypoints) {\n const entryOutputs: Output[] = [];\n const entryInputs: Input[] = [];\n let size = 0;\n const entryFiles = entrypoint.chunks.flatMap(getChunkFiles);\n // FIXME This is not a 100% reliable way to get the entry filename.\n const entryFilename = entrypoint.chunks\n // Get the chunks that have entry modules.\n .filter((chunk: Chunk) =>\n chunkGraph\n ? // @ts-expect-error: Reconciliating Webpack 4, Webpack 5 and Rspack is hard.\n chunkGraph.getChunkEntryModulesIterable(chunk)\n : // This one is for webpack 4.\n 'hasEntryModule' in chunk &&\n typeof chunk.hasEntryModule === 'function'\n ? chunk.hasEntryModule()\n : false,\n )\n // Get the files of those chunks.\n .flatMap((c) => Array.from(c.files))\n // Filter the ones that includes the entry name.\n .filter(\n (f) => f.includes(name) || (entrypoint.name && f.includes(entrypoint.name)),\n )\n // Only keep JS files.\n .find((f) => getType(f) === 'js');\n\n for (const file of entryFiles) {\n const outputFound = reportOutputsIndexed.get(file);\n if (!file || !outputFound) {\n warn(`Could not find output of ${JSON.stringify(file)}`);\n continue;\n }\n\n if (outputFound.type !== 'map' && !entryOutputs.includes(outputFound)) {\n entryOutputs.push(outputFound);\n // We know it's not a map, so we cast it.\n entryInputs.push(...(outputFound.inputs as Input[]));\n // We don't want to include sourcemaps in the sizing.\n size += outputFound.size;\n }\n }\n\n const file: Entry = {\n name,\n filepath: entryFilename\n ? getAbsolutePath(context.bundler.outDir, entryFilename)\n : 'unknown',\n size,\n inputs: Array.from(new Set(entryInputs)),\n outputs: entryOutputs,\n type: entryFilename ? getType(entryFilename) : 'unknown',\n };\n\n entries.push(file);\n }\n\n // Save everything in the context.\n for (const error of result.errors) {\n context.build.errors.push(error.message);\n }\n for (const warning of result.warnings) {\n context.build.warnings.push(warning.message);\n }\n context.build.inputs = inputs;\n context.build.outputs = outputs;\n context.build.entries = entries;\n });\n };\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { GlobalContext, Logger, PluginOptions } from '@dd/core/types';\n\nimport { getEsbuildPlugin } from './esbuild';\nimport { getRollupPlugin } from './rollup';\nimport { getXpackPlugin } from './xpack';\n\nexport const PLUGIN_NAME = 'datadog-build-report-plugin';\n\nexport const getBuildReportPlugins = (context: GlobalContext, log: Logger): PluginOptions[] => {\n return [\n {\n name: PLUGIN_NAME,\n enforce: 'post',\n esbuild: getEsbuildPlugin(context, log),\n rspack: getXpackPlugin(context, PLUGIN_NAME, log),\n webpack: getXpackPlugin(context, PLUGIN_NAME, log),\n // Vite and Rollup have the same API.\n vite: getRollupPlugin(context, log),\n rollup: getRollupPlugin(context, log),\n },\n ];\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { GlobalContext, PluginOptions } from '@dd/core/types';\nimport path from 'path';\n\nexport const PLUGIN_NAME = 'datadog-bundler-report-plugin';\n\nconst rollupPlugin: (context: GlobalContext) => PluginOptions['rollup'] = (context) => ({\n options(options) {\n context.bundler.rawConfig = options;\n const outputOptions = (options as any).output;\n if (outputOptions) {\n context.bundler.outDir = outputOptions.dir;\n }\n },\n outputOptions(options) {\n if (options.dir) {\n context.bundler.outDir = options.dir;\n }\n },\n});\n\nconst xpackPlugin: (context: GlobalContext) => PluginOptions['webpack'] & PluginOptions['rspack'] =\n (context) => (compiler) => {\n context.bundler.rawConfig = compiler.options;\n\n if (compiler.options.output?.path) {\n context.bundler.outDir = compiler.options.output.path;\n }\n };\n\n// TODO: Add universal config report with list of plugins (names), loaders.\nexport const getBundlerReportPlugins = (globalContext: GlobalContext): PluginOptions[] => {\n const bundlerReportPlugin: PluginOptions = {\n name: PLUGIN_NAME,\n enforce: 'pre',\n esbuild: {\n setup(build) {\n globalContext.bundler.rawConfig = build.initialOptions;\n\n if (build.initialOptions.outdir) {\n globalContext.bundler.outDir = build.initialOptions.outdir;\n }\n\n if (build.initialOptions.outfile) {\n globalContext.bundler.outDir = path.dirname(build.initialOptions.outfile);\n }\n\n // We force esbuild to produce its metafile.\n build.initialOptions.metafile = true;\n },\n },\n webpack: xpackPlugin(globalContext),\n rspack: xpackPlugin(globalContext),\n // Vite and Rollup have the same API.\n vite: rollupPlugin(globalContext),\n rollup: rollupPlugin(globalContext),\n };\n\n return [bundlerReportPlugin];\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport fs from 'fs';\n\n// TrackedFilesMatcher can compute the list of tracked files related to a particular sourcemap.\n// The current implementation simply returns all tracked files whose filename is found inside\n// the sourcemap 'sources' field.\n// It is used so that we don't send every tracked files to the backend since most won't be of any use\n// for a particular sourcemap.\nexport class TrackedFilesMatcher {\n // A map with tracked filenames as key and the related tracked file paths as value.\n private trackedFilenames: Map<string, string[]>;\n\n constructor(trackedFiles: string[]) {\n this.trackedFilenames = new Map<string, string[]>();\n for (const f of trackedFiles) {\n const filename = this.getFilename(f);\n const list = this.trackedFilenames.get(filename);\n if (list) {\n list.push(f);\n } else {\n this.trackedFilenames.set(filename, new Array<string>(f));\n }\n }\n }\n\n private displaySource(src: string) {\n if (src.length <= 40) {\n return src;\n }\n return `[...]${src.slice(-35)}`;\n }\n\n // Looks up the sources declared in the sourcemap and return a list of related tracked files.\n public matchSourcemap(\n srcmapPath: string,\n onSourcesNotFound: (reason: string) => void,\n ): string[] | undefined {\n const buff = fs.readFileSync(srcmapPath, 'utf8');\n const srcmapObj = JSON.parse(buff);\n if (!srcmapObj.sources) {\n onSourcesNotFound(`Missing 'sources' field in sourcemap.`);\n return undefined;\n }\n const sources = srcmapObj.sources as string[];\n if (sources.length === 0) {\n onSourcesNotFound(`Empty 'sources' field in sourcemap.`);\n return undefined;\n }\n const filtered = this.matchSources(sources);\n if (filtered.length === 0) {\n onSourcesNotFound(\n `${sources.map(this.displaySource).join(', ')} not in the tracked files.`,\n );\n return undefined;\n }\n\n return filtered;\n }\n\n public matchSources(sources: string[]): string[] {\n let filtered: string[] = [];\n const filenameAlreadyMatched = new Set<string>();\n for (const source of sources) {\n const filename = this.getFilename(source);\n if (filenameAlreadyMatched.has(filename)) {\n continue;\n }\n filenameAlreadyMatched.add(filename);\n const trackedFiles = this.trackedFilenames.get(filename);\n if (trackedFiles) {\n filtered = filtered.concat(trackedFiles);\n }\n }\n\n return filtered;\n }\n\n // Return a list of all tracked files\n public rawTrackedFilesList() {\n let rawList: string[] = [];\n this.trackedFilenames.forEach((value) => {\n rawList = rawList.concat(value);\n });\n\n return rawList;\n }\n\n // Extract the filename from a path.\n //\n // We are removing any suffix that is after the character '?'. The only reason this is done\n // is because we noticed that a non-negligible (~5%) amount of source paths from our customers\n // source maps contained query parameters.\n // We are assuming that the files may not actually be named with the interrogation mark but that\n // it is only an artifact of the build process. The query parameters look random. It looks\n // like it may be used as a trick to force a web browser to reload the file content.\n // The only side effect of doing that operation is that more tracked files paths may be sent\n // alongside the sourcemap which is not a problem.\n // Example: webpack:///./src/folder/ui/select.vue?821e\n private getFilename(s: string): string {\n let start = s.lastIndexOf('/');\n if (start === -1) {\n start = 0;\n } else {\n start++;\n }\n let end = s.lastIndexOf('?');\n if (end === -1 || end <= start) {\n end = s.length;\n }\n\n return s.substring(start, end);\n }\n}\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { RepositoryData } from '@dd/core/types';\nimport type { SimpleGit, BranchSummary } from 'simple-git';\nimport { simpleGit } from 'simple-git';\nimport { URL } from 'url';\n\nimport { TrackedFilesMatcher } from './trackedFilesMatcher';\n\n// Returns a configured SimpleGit.\nexport const newSimpleGit = async (cwd?: string): Promise<SimpleGit> => {\n const options = {\n baseDir: cwd || process.cwd(),\n binary: 'git',\n // We are invoking at most 3 git commands at the same time.\n maxConcurrentProcesses: 3,\n };\n try {\n // Attempt to set the baseDir to the root of the repository so the 'git ls-files' command\n // returns the tracked files paths relative to the root of the repository.\n const git = simpleGit(options);\n const root = await git.revparse('--show-toplevel');\n options.baseDir = root;\n } catch {\n // Ignore exception as it will fail if we are not inside a git repository.\n }\n\n return simpleGit(options);\n};\n\n// Returns the remote of the current repository.\nexport const gitRemote = async (git: SimpleGit): Promise<string> => {\n const remotes = await git.getRemotes(true);\n if (remotes.length === 0) {\n throw new Error('No git remotes available');\n }\n const defaultRemote = await getDefaultRemoteName(git);\n\n for (const remote of remotes) {\n if (remote.name === defaultRemote) {\n return stripCredentials(remote.refs.push);\n }\n }\n\n // Falling back to picking the first remote in the list if the default remote is not found.\n return stripCredentials(remotes[0].refs.push);\n};\n\nexport const getDefaultRemoteName = async (git: SimpleGit): Promise<string> => {\n try {\n return (await git.getConfig('clone.defaultRemoteName'))?.value ?? 'origin';\n } catch (e) {\n return 'origin';\n }\n};\n\n// StripCredentials removes credentials from a remote HTTP url.\nexport const stripCredentials = (remote: string) => {\n try {\n const url = new URL(remote);\n url.username = '';\n url.password = '';\n\n return url.toString();\n } catch {\n return remote;\n }\n};\n\n// Returns the hash of the current repository.\nexport const gitHash = async (git: SimpleGit): Promise<string> => git.revparse('HEAD');\n\n// Returns the tracked files of the current repository.\nexport const gitTrackedFiles = async (git: SimpleGit): Promise<string[]> => {\n const files = await git.raw('ls-files');\n\n return files.split(/\\r\\n|\\r|\\n/);\n};\n\nexport const gitBranch = async (git: SimpleGit): Promise<BranchSummary> => git.branch();\n\nexport const gitMessage = async (git: SimpleGit): Promise<string> =>\n git.show(['-s', '--format=%s']);\n\nexport const gitAuthorAndCommitter = async (git: SimpleGit): Promise<string> =>\n git.show(['-s', '--format=%an,%ae,%aI,%cn,%ce,%cI']);\n\nexport const gitRepositoryURL = async (git: SimpleGit): Promise<string> =>\n git.listRemote(['--get-url']);\n\n// Returns the current hash and remote as well as a TrackedFilesMatcher.\n//\n// To obtain the list of tracked files paths tied to a specific sourcemap, invoke the 'matchSourcemap' method.\nexport const getRepositoryData = async (\n git: SimpleGit,\n repositoryURL?: string | undefined,\n): Promise<RepositoryData> => {\n // Invoke git commands to retrieve the remote, hash and tracked files.\n // We're using Promise.all instead of Promise.allSettled since we want to fail early if\n // any of the promises fails.\n let remote: string;\n let hash: string;\n let trackedFiles: string[];\n\n if (repositoryURL) {\n [hash, trackedFiles] = await Promise.all([gitHash(git), gitTrackedFiles(git)]);\n remote = repositoryURL;\n } else {\n [remote, hash, trackedFiles] = await Promise.all([\n gitRemote(git),\n gitHash(git),\n gitTrackedFiles(git),\n ]);\n }\n\n const data = {\n hash,\n remote,\n trackedFilesMatcher: new TrackedFilesMatcher(trackedFiles),\n };\n\n return data;\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { GlobalContext, Options, PluginOptions } from '@dd/core/types';\n\nimport { getRepositoryData, newSimpleGit } from './helpers';\n\nexport const PLUGIN_NAME = 'datadog-git-plugin';\n\nexport const getGitPlugins = (options: Options, context: GlobalContext): PluginOptions[] => {\n return [\n {\n name: PLUGIN_NAME,\n enforce: 'pre',\n async buildStart() {\n // Verify that we should get the git information based on the options.\n // Only get git information if sourcemaps are enabled and git is not disabled.\n const shouldGetGitInfo = options.rum?.sourcemaps && options.disableGit !== true;\n\n if (!shouldGetGitInfo) {\n return;\n }\n // Add git information to the context.\n const repositoryData = await getRepositoryData(await newSimpleGit(context.cwd));\n context.git = repositoryData;\n },\n },\n ];\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nexport const PREPARATION_PLUGIN_NAME = 'datadog-injection-preparation-plugin';\nexport const PLUGIN_NAME = 'datadog-injection-plugin';\nexport const DISTANT_FILE_RX = /^https?:\\/\\//;\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { doRequest, truncateString } from '@dd/core/helpers';\nimport type { Logger, ToInjectItem } from '@dd/core/types';\nimport { getAbsolutePath } from '@dd/internal-build-report-plugin/helpers';\nimport { readFile } from 'fs/promises';\n\nimport { DISTANT_FILE_RX } from './constants';\n\nconst MAX_TIMEOUT_IN_MS = 5000;\n\nexport const processDistantFile = async (\n item: ToInjectItem,\n timeout: number = MAX_TIMEOUT_IN_MS,\n): Promise<string> => {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n return Promise.race([\n doRequest<string>({ url: item.value }).finally(() => {\n if (timeout) {\n clearTimeout(timeoutId);\n }\n }),\n new Promise<string>((_, reject) => {\n timeoutId = setTimeout(() => {\n reject(new Error('Timeout'));\n }, timeout);\n }),\n ]);\n};\n\nexport const processLocalFile = async (item: ToInjectItem): Promise<string> => {\n const absolutePath = getAbsolutePath(process.cwd(), item.value);\n return readFile(absolutePath, { encoding: 'utf-8' });\n};\n\nexport const processRawCode = async (item: ToInjectItem): Promise<string> => {\n // TODO: Confirm the code actually executes without errors.\n return item.value;\n};\n\nexport const processItem = async (item: ToInjectItem, log: Logger): Promise<string> => {\n let result: string;\n try {\n if (item.type === 'file') {\n if (item.value.match(DISTANT_FILE_RX)) {\n result = await processDistantFile(item);\n } else {\n result = await processLocalFile(item);\n }\n } else if (item.type === 'code') {\n result = await processRawCode(item);\n } else {\n throw new Error(`Invalid item type \"${item.type}\", only accepts \"code\" or \"file\".`);\n }\n } catch (error: any) {\n const itemId = `${item.type} - ${truncateString(item.value)}`;\n if (item.fallback) {\n // In case of any error, we'll fallback to next item in queue.\n log.warn(`Fallback for \"${itemId}\": ${error.toString()}`);\n result = await processItem(item.fallback, log);\n } else {\n // Or return an empty string.\n log.warn(`Failed \"${itemId}\": ${error.toString()}`);\n result = '';\n }\n }\n\n return result;\n};\n\nexport const processInjections = async (\n toInject: ToInjectItem[],\n log: Logger,\n): Promise<string[]> => {\n const proms: (Promise<string> | string)[] = [];\n\n for (const item of toInject) {\n proms.push(processItem(item, log));\n }\n\n const results = await Promise.all(proms);\n return results.filter(Boolean);\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport { INJECTED_FILE } from '@dd/core/constants';\nimport { outputFile, rm } from '@dd/core/helpers';\nimport type { GlobalContext, Logger, PluginOptions, ToInjectItem } from '@dd/core/types';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { PLUGIN_NAME, PREPARATION_PLUGIN_NAME } from './constants';\nimport { processInjections } from './helpers';\n\nexport { PLUGIN_NAME } from './constants';\n\nexport const getInjectionPlugins = (\n bundler: any,\n context: GlobalContext,\n toInject: ToInjectItem[],\n log: Logger,\n): PluginOptions[] => {\n const contentToInject: string[] = [];\n\n const getContentToInject = () => {\n // Needs a non empty string otherwise ESBuild will throw 'Do not know how to load path'.\n // Most likely because it tries to generate an empty file.\n const before = `\n/********************************************/\n/* BEGIN INJECTION BY DATADOG BUILD PLUGINS */`;\n const after = `\n/* END INJECTION BY DATADOG BUILD PLUGINS */\n/********************************************/`;\n\n return `${before}\\n${contentToInject.join('\\n\\n')}\\n${after}`;\n };\n\n // Rollup uses its own banner hook.\n // We use its native functionality.\n const rollupInjectionPlugin: PluginOptions['rollup'] = {\n banner(chunk) {\n if (chunk.isEntry) {\n return getContentToInject();\n }\n return '';\n },\n };\n\n // Create a unique filename to avoid conflicts.\n const INJECTED_FILE_PATH = `${Date.now()}.${performance.now()}.${INJECTED_FILE}.js`;\n\n // This plugin happens in 2 steps in order to cover all bundlers:\n // 1. Prepare the content to inject, fetching distant/local files and anything necessary.\n // a. [esbuild] We also create the actual file for esbuild to avoid any resolution errors\n // and keep the inject override safe.\n // b. [esbuild] With a custom resolver, every client side sub-builds would fail to resolve\n // the file when re-using the same config as the parent build (with the inject).\n // 2. Inject a virtual file into the bundling, this file will be home of all injected content.\n const plugins: PluginOptions[] = [\n // Prepare and fetch the content to inject for all bundlers.\n {\n name: PREPARATION_PLUGIN_NAME,\n enforce: 'pre',\n // We use buildStart as it is the first async hook.\n async buildStart() {\n const results = await processInjections(toInject, log);\n contentToInject.push(...results);\n\n // Only esbuild needs the following.\n if (context.bundler.name !== 'esbuild') {\n return;\n }\n\n // We put it in the outDir to avoid impacting any other part of the build.\n // While still being under esbuild's cwd.\n const absolutePathInjectFile = path.resolve(\n context.bundler.outDir,\n INJECTED_FILE_PATH,\n );\n\n // Actually create the file to avoid any resolution errors.\n // It needs to be within cwd.\n try {\n // Verify that the file doesn't already exist.\n if (fs.existsSync(absolutePathInjectFile)) {\n log.warn(`Temporary file \"${INJECTED_FILE_PATH}\" already exists.`);\n }\n await outputFile(absolutePathInjectFile, getContentToInject());\n } catch (e: any) {\n log.error(`Could not create the file: ${e.message}`);\n }\n },\n\n async buildEnd() {\n // Only esbuild needs the following.\n if (context.bundler.name !== 'esbuild') {\n return;\n }\n\n const absolutePathInjectFile = path.resolve(\n context.bundler.outDir,\n INJECTED_FILE_PATH,\n );\n\n // Remove our assets.\n log.debug(`Removing temporary file \"${INJECTED_FILE_PATH}\".`);\n await rm(absolutePathInjectFile);\n },\n },\n // Inject the file that will be home of all injected content.\n // Each bundler has its own way to inject a file.\n {\n name: PLUGIN_NAME,\n esbuild: {\n setup(build) {\n const { initialOptions } = build;\n const absolutePathInjectFile = path.resolve(\n context.bundler.outDir,\n INJECTED_FILE_PATH,\n );\n\n // Inject the file in the build.\n // This is made safe for sub-builds by actually creating the file.\n initialOptions.inject = initialOptions.inject || [];\n initialOptions.inject.push(absolutePathInjectFile);\n },\n },\n webpack: (compiler) => {\n const BannerPlugin =\n compiler?.webpack?.BannerPlugin ||\n bundler?.BannerPlugin ||\n bundler?.default?.BannerPlugin;\n\n const ChunkGraph =\n compiler?.webpack?.ChunkGraph ||\n bundler?.ChunkGraph ||\n bundler?.default?.ChunkGraph;\n\n if (!BannerPlugin) {\n log.error('Missing BannerPlugin');\n }\n\n // Intercept the compilation's ChunkGraph\n let chunkGraph: InstanceType<typeof ChunkGraph>;\n compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {\n compilation.hooks.afterChunks.tap(PLUGIN_NAME, () => {\n chunkGraph = compilation.chunkGraph;\n });\n });\n\n compiler.options.plugins = compiler.options.plugins || [];\n compiler.options.plugins.push(\n new BannerPlugin({\n // Not wrapped in comments.\n raw: true,\n // Doesn't seem to work, but it's supposed to only add\n // the banner to entry modules.\n entryOnly: true,\n banner(data) {\n // In webpack5 we HAVE to use the chunkGraph.\n if (context.bundler.variant === '5') {\n if (\n !chunkGraph ||\n chunkGraph.getNumberOfEntryModules(data.chunk) === 0\n ) {\n return '';\n }\n\n return getContentToInject();\n } else {\n if (!data.chunk?.hasEntryModule()) {\n return '';\n }\n\n return getContentToInject();\n }\n },\n }),\n );\n },\n rspack: (compiler) => {\n compiler.options.plugins = compiler.options.plugins || [];\n compiler.options.plugins.push(\n new compiler.rspack.BannerPlugin({\n // Not wrapped in comments.\n raw: true,\n // Only entry modules.\n entryOnly: true,\n banner() {\n return getContentToInject();\n },\n }),\n );\n },\n rollup: rollupInjectionPlugin,\n vite: rollupInjectionPlugin,\n },\n ];\n\n return plugins;\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\n// This file is mostly generated.\n// Anything between\n// - #imports-injection-marker\n// - #types-export-injection-marker\n// - #internal-plugins-injection-marker\n// - #helpers-injection-marker\n// - #configs-injection-marker\n// will be updated using the 'yarn cli integrity' command.\n\nimport type {\n BundlerName,\n FactoryMeta,\n GlobalContext,\n Options,\n OptionsWithDefaults,\n PluginOptions,\n ToInjectItem,\n} from '@dd/core/types';\nimport type { UnpluginContextMeta, UnpluginInstance, UnpluginOptions } from 'unplugin';\nimport { createUnplugin } from 'unplugin';\n\nimport { getContext, getLoggerFactory, validateOptions } from './helpers';\n\n/* eslint-disable arca/import-ordering, arca/newline-after-import-section */\n// #imports-injection-marker\nimport type { OptionsWithRum } from '@dd/rum-plugin/types';\nimport * as rum from '@dd/rum-plugin';\nimport type { OptionsWithTelemetry } from '@dd/telemetry-plugin/types';\nimport * as telemetry from '@dd/telemetry-plugin';\nimport { getBuildReportPlugins } from '@dd/internal-build-report-plugin';\nimport { getBundlerReportPlugins } from '@dd/internal-bundler-report-plugin';\nimport { getGitPlugins } from '@dd/internal-git-plugin';\nimport { getInjectionPlugins } from '@dd/internal-injection-plugin';\n// #imports-injection-marker\n// #types-export-injection-marker\nexport type { types as RumTypes } from '@dd/rum-plugin';\nexport type { types as TelemetryTypes } from '@dd/telemetry-plugin';\n// #types-export-injection-marker\n/* eslint-enable arca/import-ordering, arca/newline-after-import-section */\n\nexport const helpers = {\n // Each product should have a unique entry.\n // #helpers-injection-marker\n [telemetry.CONFIG_KEY]: telemetry.helpers,\n // #helpers-injection-marker\n};\n\nconst HOST_NAME = 'datadog-build-plugins';\n\nexport const buildPluginFactory = ({\n bundler,\n version,\n}: FactoryMeta): UnpluginInstance<Options, true> => {\n return createUnplugin((opts: Options, unpluginMetaContext: UnpluginContextMeta) => {\n // TODO: Implement config overrides with environment variables.\n // TODO: Validate API Key and endpoint.\n // TODO: Inject a metric logger into the global context.\n\n const options: OptionsWithDefaults = validateOptions(opts);\n\n // Set the host name for the esbuild plugin.\n if (unpluginMetaContext.framework === 'esbuild') {\n unpluginMetaContext.esbuildHostName = HOST_NAME;\n }\n\n // Create the global context.\n const injections: ToInjectItem[] = [];\n const context: GlobalContext = getContext({\n options,\n bundlerVersion: bundler.version || bundler.VERSION,\n bundlerName: unpluginMetaContext.framework as BundlerName,\n injections,\n version,\n });\n\n const getLogger = getLoggerFactory(context.build, options.logLevel);\n\n context.pluginNames.push(HOST_NAME);\n\n // List of plugins to be returned.\n // We keep the UnpluginOptions type for the custom plugins.\n const plugins: (PluginOptions | UnpluginOptions)[] = [\n // Prefill with our internal plugins.\n // #internal-plugins-injection-marker\n ...getBuildReportPlugins(context, getLogger('datadog-build-report-plugin')),\n ...getBundlerReportPlugins(context),\n ...getGitPlugins(options, context),\n ...getInjectionPlugins(\n bundler,\n context,\n injections,\n getLogger('datadog-injection-plugin'),\n ),\n // #internal-plugins-injection-marker\n ];\n\n // Add custom, on the fly plugins, if any.\n if (options.customPlugins) {\n const customPlugins = options.customPlugins(\n options,\n context,\n getLogger('datadog-custom-plugins'),\n );\n plugins.push(...customPlugins);\n }\n\n // Based on configuration add corresponding plugin.\n // #configs-injection-marker\n if (options[rum.CONFIG_KEY] && options[rum.CONFIG_KEY].disabled !== true) {\n plugins.push(\n ...rum.getPlugins(options as OptionsWithRum, context, getLogger(rum.PLUGIN_NAME)),\n );\n }\n if (options[telemetry.CONFIG_KEY] && options[telemetry.CONFIG_KEY].disabled !== true) {\n plugins.push(\n ...telemetry.getPlugins(\n options as OptionsWithTelemetry,\n context,\n getLogger(telemetry.PLUGIN_NAME),\n ),\n );\n }\n // #configs-injection-marker\n\n // List all our plugins in the context.\n context.pluginNames.push(...plugins.map((plugin) => plugin.name));\n\n return plugins;\n });\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\n// This file is partially generated.\n// Anything between #types-export-injection-marker\n// will be updated using the 'yarn cli integrity' command.\n\nimport type { Options } from '@dd/core/types';\nimport * as factory from '@dd/factory';\nimport rspack from '@rspack/core';\n\nimport pkg from '../package.json';\n\nexport const datadogRspackPlugin = factory.buildPluginFactory({\n bundler: rspack,\n version: pkg.version,\n}).rspack;\n\nexport type RspackPluginOptions = Options;\n\nexport type {\n // #types-export-injection-marker\n RumTypes,\n TelemetryTypes,\n // #types-export-injection-marker\n} from '@dd/factory';\n\nexport const version = pkg.version;\nexport const helpers = factory.helpers;\n"],"names":["c","validateOptions","fs","CONFIG_KEY","PLUGIN_NAME","getPlugins","performance","getEsbuildPlugin","getPluginsResults","helpers","file","URL","telemetry.CONFIG_KEY","telemetry.helpers","rum.CONFIG_KEY","rum.getPlugins","rum.PLUGIN_NAME","telemetry.getPlugins","telemetry.PLUGIN_NAME","factory.buildPluginFactory","factory.helpers"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../core/src/constants.ts","../../../../plugins/error-tracking/src/sourcemaps/index.ts"],"sourcesContent":["// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nexport const INJECTED_FILE = '__datadog-helper-file';\n\nexport const ALL_ENVS = ['development', 'production', 'test'] as const;\nexport const ALL_BUNDLERS = ['webpack', 'vite', 'esbuild', 'rollup', 'rspack', 'rolldown', 'farm'];\nexport const SUPPORTED_BUNDLERS = ['webpack', 'vite', 'esbuild', 'rollup', 'rspack'] as const;\nexport const FULL_NAME_BUNDLERS = [\n 'esbuild',\n 'rollup',\n 'rspack',\n 'vite',\n 'webpack4',\n 'webpack5',\n] as const;\nexport const ENV_VAR_REQUESTED_BUNDLERS = 'PLAYWRIGHT_REQUESTED_BUNDLERS';\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { Logger, GlobalContext } from '@dd/core/types';\nimport chalk from 'chalk';\nimport { outdent } from 'outdent';\n\nimport type { ErrorTrackingOptionsWithSourcemaps } from '../types';\n\nimport { getSourcemapsFiles } from './files';\nimport { sendSourcemaps } from './sender';\n\nexport const uploadSourcemaps = async (\n options: ErrorTrackingOptionsWithSourcemaps,\n context: GlobalContext,\n log: Logger,\n) => {\n // Show a pretty summary of the configuration.\n const green = chalk.green.bold;\n const configurationString = Object.entries(options.sourcemaps)\n .map(([key, value]) => ` - ${key}: ${green(value.toString())}`)\n .join('\\n');\n\n // Gather the sourcemaps files.\n const sourcemaps = getSourcemapsFiles(options.sourcemaps, context);\n\n const summary = outdent`\n Uploading ${green(sourcemaps.length.toString())} sourcemaps with configuration:\n ${configurationString}\n `;\n\n log.info(summary);\n\n // Send everything.\n await sendSourcemaps(sourcemaps, options.sourcemaps, context, log);\n};\n"],"names":["green","configurationString"],"mappings":";;;;;;;;AAIO;ACwBSA;AACVC;"}