@datadog/rspack-plugin 2.5.1-dev-7 → 2.5.1

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,4 +1,4 @@
1
- import{createUnplugin as e}from"unplugin";import t from"chalk";import n from"async-retry";import s,{readFile as o}from"fs/promises";import i,{promises as r}from"fs";import{glob as a}from"glob";import u from"path";import{outdent as p}from"outdent";import{File as c}from"buffer";import l from"p-queue";import{Readable as d}from"stream";import{createGzip as m}from"zlib";import f from"pretty-bytes";import{performance as h}from"perf_hooks";import{simpleGit as g}from"simple-git";import{URL as w}from"url";import y from"os";import{createRequire as b}from"module";import v from"@rspack/core";
1
+ import{createUnplugin as e}from"unplugin";import t from"chalk";import{outdent as n}from"outdent";import s from"path";import o from"async-retry";import r,{readFile as i}from"fs/promises";import a,{promises as u}from"fs";import{glob as p}from"glob";import{File as c}from"buffer";import l from"p-queue";import{Readable as d}from"stream";import{createGzip as f}from"zlib";import m from"pretty-bytes";import{performance as h}from"perf_hooks";import{simpleGit as g}from"simple-git";import{URL as w}from"url";import y from"os";import{createRequire as b}from"module";import v from"@rspack/core";
2
2
  // -- Shims --
3
3
  import cjsUrl from 'node:url';
4
4
  import cjsPath from 'node:path';
@@ -6,8 +6,8 @@ import cjsModule from 'node:module';
6
6
  const __filename = cjsUrl.fileURLToPath(import.meta.url);
7
7
  const __dirname = cjsPath.dirname(__filename);
8
8
  const require = cjsModule.createRequire(import.meta.url);
9
- const $="__datadog-helper-file",k=["development","production","test"],S=e=>{const t=Math.floor(e/1e3/60/60/24),n=new Date(e-24*t*60*60*1e3),s=n.getUTCHours(),o=n.getUTCMinutes(),i=n.getUTCSeconds(),r=n.getUTCMilliseconds(),a=`${t?`${t}d `:""}${s?`${s}h `:""}${o?`${o}m `:""}${i?`${i}s`:""}`.trim();return`${a}${!a||r?` ${r}ms`:""}`.trim()},D=async(e,t,n)=>{const s=[],o=e.initialOptions.entryPoints,i=[],r=[];if(Array.isArray(o))for(const e of o){const t=e&&"object"==typeof e?e.in:e;i.push({path:t})}else o&&"object"==typeof o&&i.push(...Object.entries(o).map((([e,t])=>({name:e,path:t}))));const u=i.flatMap((e=>{return(t=e.path,t.includes("*")?a.sync(t):[t]).map((t=>[e,t]));var t})).map((async([n,o])=>{const i=await e.resolve(o,{kind:"entry-point",resolveDir:t.cwd});i.errors.length&&r.push(...i.errors.map((e=>e.text))),i.path&&s.push({name:n.name,resolved:i.path,original:n.path})}));for(const e of r)n.error(e);return await Promise.all(u),s},E=[400,403,413],M=e=>{const{auth:t,url:s,method:o="GET",getData:i,type:r="text"}=e,a={retries:0===e.retries?0:e.retries||5,onRetry:e.onRetry,maxTimeout:e.maxTimeout,minTimeout:e.minTimeout};return n((async(e,n)=>{let a;try{const e={method:o,duplex:"half"};let n={};if(t?.apiKey&&(n["DD-API-KEY"]=t.apiKey),t?.appKey&&(n["DD-APPLICATION-KEY"]=t.appKey),"function"==typeof i){const{data:t,headers:s}=await i();e.body=t,n={...n,...s}}a=await fetch(s,{...e,headers:n})}catch(t){return e(t),{}}if(!a.ok){const t=`HTTP ${a.status} ${a.statusText}`;if(E.includes(a.status))return e(new Error(t)),{};throw new Error(t)}try{let e;return e="json"===r?await a.json():await a.text(),e}catch(t){return e(t),{}}}),a)},P=(e,t=60,n="[...]")=>{if(e.length<=t)return e;const s=Math.max(4,t-n.length),o=Math.min(10,Math.floor(s/2)),i=s-o;return`${e.slice(0,o)}${n}${e.slice(-i)}`},j=e=>e.includes($),O=async(e,t)=>{await(async e=>s.mkdir(e,{recursive:!0}))(u.dirname(e)),await s.writeFile(e,t,{encoding:"utf-8"})},T=(e,t)=>{var n;n=u.dirname(e),i.mkdirSync(n,{recursive:!0}),i.writeFileSync(e,t,{encoding:"utf-8"})};let z=0;const N=()=>`${Date.now()}.${performance.now()}.${++z}`,R={debug:0,info:1,warn:2,error:3,none:4},x=(e,n="warn")=>s=>{const o=(e=>e.split(">").map((e=>e.replace(/^datadog-|-plugin$/g,""))).join(">"))(s),i=(s,i="debug")=>{let r=t.dim,a=console.log;"error"===i?(r=t.red,a=console.error):"warn"===i?(r=t.yellow,a=console.warn):"info"===i&&(r=t.cyan,a=console.log);const u=`[${i}|${e.bundler.fullName}|${o}]`,p="string"==typeof s?s:JSON.stringify(s,null,2);e.logs.push({bundler:e.bundler.fullName,pluginName:o,type:i,message:p,time:Date.now()}),"error"===i&&e.errors.push(p),"warn"===i&&e.warnings.push(p),R[i]>=R[n]&&a(`${r(u)} ${p}`)},r=new Map,a=(e,n="debug")=>{const s=r.get(e);if(s){r.delete(e);const o=Date.now()-s.timestamp;i(`[${t.cyan(e)}] : ${t.cyan(S(o))}`,n)}};return{getLogger:t=>x(e,n)(`${o}>${t}`),time:(e,t="debug")=>(r.set(e,{timestamp:Date.now(),logLevel:t}),()=>a(e,t)),timeEnd:a,error:e=>i(e,"error"),warn:e=>i(e,"warn"),info:e=>i(e,"info"),debug:e=>i(e,"debug")}},I="errorTracking",A="datadog-error-tracking-plugin",F=(e,n,s)=>{if(".map"!==u.extname(s))throw new Error(`The file ${t.green.bold(s)} is not a sourcemap.`);const o=s.replace(/\.map$/,""),i=o.replace(n.bundler.outDir,"");return{minifiedFilePath:o,minifiedUrl:e.minifiedPathPrefix?u.join(e.minifiedPathPrefix,i):i,relativePath:i}},C=/[/]+|[\\]+/g,L=/^[/]+|^[\\]+|[/]+$|[\\]+$/g,_=(e,t)=>{const n=e.replace(L,"").split(C),s=t.replace(L,"").split(C),o=n.join("/");let i="";for(let e=0;e<s.length;e+=1){const t=s.slice(-e).join("/");o.startsWith(t)&&(i=t)}return i},q=async e=>{const t={empty:!1,exists:!0};try{0===(await r.stat(e)).size&&(t.empty=!0)}catch(e){if("ENOENT"!==e.code)throw e;t.exists=!1}return t},K=async(e,t,n,s)=>{const o=await(async(e,t)=>{const[n,s]=await Promise.all([q(e.minifiedFilePath),q(e.sourcemapFilePath)]);return{file:n,sourcemap:s,repeatedPrefix:_(e.relativePath,t)}})(e,n),i=[],r=[],a=new Map([["event",{type:"string",options:{contentType:"application/json",filename:"event"},value:JSON.stringify({...t,minified_url:e.minifiedUrl})}],["source_map",{type:"file",path:e.sourcemapFilePath,options:{filename:"source_map",contentType:"application/json"}}],["minified_file",{type:"file",path:e.minifiedFilePath,options:{filename:"minified_file",contentType:"application/javascript"}}]]);if(s)try{a.set("repository",{type:"string",options:{contentType:"application/json",filename:"repository"},value:JSON.stringify({data:[{files:s.trackedFilesMatcher.matchSourcemap(e.sourcemapFilePath,(t=>{r.push(`${u.basename(e.sourcemapFilePath)}: "${t}"`)})),hash:s.hash,repository_url:s.remote}],version:1})})}catch(t){r.push(`Could not attach git data for sourcemap ${e.sourcemapFilePath}: ${t.message}`)}return o.file.empty&&i.push(`Minified file is empty: ${e.minifiedFilePath}`),o.file.exists||i.push(`Minified file not found: ${e.minifiedFilePath}`),o.sourcemap.empty&&i.push(`Sourcemap file is empty: ${e.sourcemapFilePath}`),o.sourcemap.exists||i.push(`Sourcemap file not found: ${e.sourcemapFilePath}`),o.repeatedPrefix&&r.push(`The minified file path contains a repeated pattern with the minified path prefix: ${o.repeatedPrefix}`),{content:a,errors:i,warnings:r}},B=t.green.bold,H=t.yellow.bold,W=t.red.bold,U=async(e,t)=>{if("function"==typeof i.openAsBlob){const n=await i.openAsBlob(e,{type:t.contentType});return new c([n],t.filename)}{const n=d.toWeb(i.createReadStream(e)),s=await new Response(n).blob();return new c([s],t.filename,{type:t.contentType})}},G=(e,t={})=>async()=>{const n=new FormData,s=m();for(const[t,s]of e.content){const e="file"===s.type?await U(s.path,s.options):new Blob([s.value],{type:s.options.contentType});n.append(t,e,s.options.filename)}const o=new Request("fake://url",{method:"POST",body:n});return{data:d.fromWeb(o.body).pipe(s),headers:{"Content-Encoding":"gzip",...t,...Object.fromEntries(o.headers.entries())}}},J=async(e,t,n,s)=>{const o=Date.now(),i=t.minifiedPathPrefix,r={git_repository_url:n.git?.remote,git_commit_sha:n.git?.hash,plugin_version:n.version,project_path:n.bundler.outDir,service:t.service,type:"js_sourcemap",version:t.releaseVersion},a=await Promise.all(e.map((e=>K(e,r,i,n.git)))),u=a.map((e=>e.errors)).flat(),p=a.map((e=>e.warnings)).flat();if(p.length>0&&s.warn(`Warnings while preparing payloads:\n - ${p.join("\n - ")}`),u.length>0){const e=`Failed to prepare payloads, aborting upload :\n - ${u.join("\n - ")}`;if(s.error(e),!0===t.bailOnError)throw new Error(e);return}const{errors:c,warnings:d}=await(async(e,t,n,s)=>{const o=[],i=[];if(!n.auth?.apiKey)return o.push({error:new Error("No authentication token provided")}),{errors:o,warnings:i};if(0===e.length)return i.push("No sourcemaps to upload"),{errors:o,warnings:i};const r=new(l.default?l.default:l)({concurrency:t.maxConcurrency}),a={"DD-API-KEY":n.auth.apiKey,"DD-EVP-ORIGIN":`${n.bundler.fullName}-build-plugin_sourcemaps`,"DD-EVP-ORIGIN-VERSION":n.version},u=[];for(const p of e){const e={sourcemap:p.content.get("source_map")?.path.replace(n.bundler.outDir,"."),file:p.content.get("minified_file")?.path.replace(n.bundler.outDir,".")};s.debug(`Queuing ${B(e.sourcemap)} | ${B(e.file)}`),u.push(r.add((async()=>{try{await M({url:t.intakeUrl,method:"POST",getData:G(p,a),onRetry:(t,n)=>{const o=`Failed to upload ${H(e.sourcemap)} | ${H(e.file)}:\n ${t.message}\nRetrying ${n}/5`;i.push(o),s.debug(o)}}),s.debug(`Sent ${B(e.sourcemap)} | ${B(e.file)}`)}catch(n){if(o.push({metadata:e,error:n}),!0===t.bailOnError)throw n}})))}return await Promise.all(u),await r.onIdle(),{warnings:i,errors:o}})(a,t,n,s);if(s.info(`Done uploading ${B(e.length.toString())} sourcemaps in ${B(S(Date.now()-o))}.`),c.length>0){const e=`Failed to upload some sourcemaps:\n${` - ${c.map((({metadata:e,error:t})=>e?`${W(e.file)} | ${W(e.sourcemap)} : ${t.message}`:t.message)).join("\n - ")}`}`;if(s.error(e),!0===t.bailOnError)throw new Error(e)}d.length>0&&s.warn(`Warnings while uploading sourcemaps:\n - ${d.join("\n - ")}`)},V=async(e,n,s)=>{const o=t.green.bold,i=Object.entries(e.sourcemaps).map((([e,t])=>` - ${e}: ${o(t.toString())}`)).join("\n"),r=((e,t)=>{if(!t.build.outputs||0===t.build.outputs.length)throw new Error("No output files found.");return t.build.outputs.filter((e=>e.filepath.endsWith(".map"))).map((e=>e.filepath)).map((n=>({...F(e,t,n),sourcemapFilePath:n,minifiedPathPrefix:e.minifiedPathPrefix})))})(e.sourcemaps,n),a=p`
10
- Uploading ${o(r.length.toString())} sourcemaps with configuration:
9
+ const $="__datadog-helper-file",k=["development","production","test"],S={debug:0,info:1,warn:2,error:3,none:4},D=(e,n="warn")=>s=>{const o=(e=>e.split(">").map((e=>e.replace(/^datadog-|-plugin$/g,""))).join(">"))(s),r=(s,r="debug")=>{let i=t.dim,a=console.log;"error"===r?(i=t.red,a=console.error):"warn"===r?(i=t.yellow,a=console.warn):"info"===r&&(i=t.cyan,a=console.log);const u=`[${r}|${e.bundler.fullName}|${o}]`,p="string"==typeof s?s:JSON.stringify(s,null,2);e.logs.push({bundler:e.bundler.fullName,pluginName:o,type:r,message:p,time:Date.now()}),"error"===r&&e.errors.push(p),"warn"===r&&e.warnings.push(p),S[r]>=S[n]&&a(`${i(u)} ${p}`)};return{getLogger:t=>D(e,n)(`${o}>${t}`),error:e=>r(e,"error"),warn:e=>r(e,"warn"),info:e=>r(e,"info"),debug:e=>r(e,"debug")}},E="errorTracking",M="datadog-error-tracking-plugin",P=(e,n,o)=>{if(".map"!==s.extname(o))throw new Error(`The file ${t.green.bold(o)} is not a sourcemap.`);const r=o.replace(/\.map$/,""),i=r.replace(n.bundler.outDir,"");return{minifiedFilePath:r,minifiedUrl:e.minifiedPathPrefix?s.join(e.minifiedPathPrefix,i):i,relativePath:i}},j=e=>{const t=Math.floor(e/1e3/60/60/24),n=new Date(e-24*t*60*60*1e3),s=n.getUTCHours(),o=n.getUTCMinutes(),r=n.getUTCSeconds(),i=n.getUTCMilliseconds(),a=`${t?`${t}d `:""}${s?`${s}h `:""}${o?`${o}m `:""}${r?`${r}s`:""}`.trim();return`${a}${!a||i?` ${i}ms`:""}`.trim()},T=async(e,t,n)=>{const s=[],o=e.initialOptions.entryPoints,r=[],i=[];if(Array.isArray(o))for(const e of o){const t=e&&"object"==typeof e?e.in:e;r.push({path:t})}else o&&"object"==typeof o&&r.push(...Object.entries(o).map((([e,t])=>({name:e,path:t}))));const a=r.flatMap((e=>{return(t=e.path,t.includes("*")?p.sync(t):[t]).map((t=>[e,t]));var t})).map((async([n,o])=>{const r=await e.resolve(o,{kind:"entry-point",resolveDir:t.cwd});r.errors.length&&i.push(...r.errors.map((e=>e.text))),r.path&&s.push({name:n.name,resolved:r.path,original:n.path})}));for(const e of i)n.error(e);return await Promise.all(a),s},O=[400,403,413],x=e=>{const{auth:t,url:n,method:s="GET",getData:r,type:i="text"}=e,a={retries:0===e.retries?0:e.retries||5,onRetry:e.onRetry,maxTimeout:e.maxTimeout,minTimeout:e.minTimeout};return o((async(e,o)=>{let a;try{const e={method:s,duplex:"half"};let o={};if(t?.apiKey&&(o["DD-API-KEY"]=t.apiKey),t?.appKey&&(o["DD-APPLICATION-KEY"]=t.appKey),"function"==typeof r){const{data:t,headers:n}=await r();e.body=t,o={...o,...n}}a=await fetch(n,{...e,headers:o})}catch(t){return e(t),{}}if(!a.ok){const t=`HTTP ${a.status} ${a.statusText}`;if(O.includes(a.status))return e(new Error(t)),{};throw new Error(t)}try{let e;return e="json"===i?await a.json():await a.text(),e}catch(t){return e(t),{}}}),a)},z=(e,t=60,n="[...]")=>{if(e.length<=t)return e;const s=Math.max(4,t-n.length),o=Math.min(10,Math.floor(s/2)),r=s-o;return`${e.slice(0,o)}${n}${e.slice(-r)}`},N=e=>e.includes($),R=async(e,t)=>{await(async e=>r.mkdir(e,{recursive:!0}))(s.dirname(e)),await r.writeFile(e,t,{encoding:"utf-8"})},I=(e,t)=>{var n;n=s.dirname(e),a.mkdirSync(n,{recursive:!0}),a.writeFileSync(e,t,{encoding:"utf-8"})};let A=0;const C=()=>`${Date.now()}.${performance.now()}.${++A}`,F=(e,t)=>N(t)?$:t.startsWith(e)||s.isAbsolute(t)?t:s.resolve(e,t),L=/[/]+|[\\]+/g,_=/^[/]+|^[\\]+|[/]+$|[\\]+$/g,q=(e,t)=>{const n=e.replace(_,"").split(L),s=t.replace(_,"").split(L),o=n.join("/");let r="";for(let e=0;e<s.length;e+=1){const t=s.slice(-e).join("/");o.startsWith(t)&&(r=t)}return r},K=async e=>{const t={empty:!1,exists:!0};try{0===(await u.stat(e)).size&&(t.empty=!0)}catch(e){if("ENOENT"!==e.code)throw e;t.exists=!1}return t},W=async(e,t,n,o)=>{const r=await(async(e,t)=>{const[n,s]=await Promise.all([K(e.minifiedFilePath),K(e.sourcemapFilePath)]);return{file:n,sourcemap:s,repeatedPrefix:q(e.relativePath,t)}})(e,n),i=[],a=[],u=new Map([["event",{type:"string",options:{contentType:"application/json",filename:"event"},value:JSON.stringify({...t,minified_url:e.minifiedUrl})}],["source_map",{type:"file",path:e.sourcemapFilePath,options:{filename:"source_map",contentType:"application/json"}}],["minified_file",{type:"file",path:e.minifiedFilePath,options:{filename:"minified_file",contentType:"application/javascript"}}]]);if(o)try{u.set("repository",{type:"string",options:{contentType:"application/json",filename:"repository"},value:JSON.stringify({data:[{files:o.trackedFilesMatcher.matchSourcemap(e.sourcemapFilePath,(t=>{a.push(`${s.basename(e.sourcemapFilePath)}: "${t}"`)})),hash:o.hash,repository_url:o.remote}],version:1})})}catch(t){a.push(`Could not attach git data for sourcemap ${e.sourcemapFilePath}: ${t.message}`)}return r.file.empty&&i.push(`Minified file is empty: ${e.minifiedFilePath}`),r.file.exists||i.push(`Minified file not found: ${e.minifiedFilePath}`),r.sourcemap.empty&&i.push(`Sourcemap file is empty: ${e.sourcemapFilePath}`),r.sourcemap.exists||i.push(`Sourcemap file not found: ${e.sourcemapFilePath}`),r.repeatedPrefix&&a.push(`The minified file path contains a repeated pattern with the minified path prefix: ${r.repeatedPrefix}`),{content:u,errors:i,warnings:a}},B=t.green.bold,H=t.yellow.bold,U=t.red.bold,G=async(e,t)=>{if("function"==typeof a.openAsBlob){const n=await a.openAsBlob(e,{type:t.contentType});return new c([n],t.filename)}{const n=d.toWeb(a.createReadStream(e)),s=await new Response(n).blob();return new c([s],t.filename,{type:t.contentType})}},J=(e,t={})=>async()=>{const n=new FormData,s=f();for(const[t,s]of e.content){const e="file"===s.type?await G(s.path,s.options):new Blob([s.value],{type:s.options.contentType});n.append(t,e,s.options.filename)}const o=new Request("fake://url",{method:"POST",body:n});return{data:d.fromWeb(o.body).pipe(s),headers:{"Content-Encoding":"gzip",...t,...Object.fromEntries(o.headers.entries())}}},V=async(e,t,n,s)=>{const o=Date.now(),r=t.minifiedPathPrefix,i={git_repository_url:n.git?.remote,git_commit_sha:n.git?.hash,plugin_version:n.version,project_path:n.bundler.outDir,service:t.service,type:"js_sourcemap",version:t.releaseVersion},a=await Promise.all(e.map((e=>W(e,i,r,n.git)))),u=a.map((e=>e.errors)).flat(),p=a.map((e=>e.warnings)).flat();if(p.length>0&&s.warn(`Warnings while preparing payloads:\n - ${p.join("\n - ")}`),u.length>0){const e=`Failed to prepare payloads, aborting upload :\n - ${u.join("\n - ")}`;if(s.error(e),!0===t.bailOnError)throw new Error(e);return}const{errors:c,warnings:d}=await(async(e,t,n,s)=>{const o=[],r=[];if(!n.auth?.apiKey)return o.push({error:new Error("No authentication token provided")}),{errors:o,warnings:r};if(0===e.length)return r.push("No sourcemaps to upload"),{errors:o,warnings:r};const i=new(l.default?l.default:l)({concurrency:t.maxConcurrency}),a={"DD-API-KEY":n.auth.apiKey,"DD-EVP-ORIGIN":`${n.bundler.fullName}-build-plugin_sourcemaps`,"DD-EVP-ORIGIN-VERSION":n.version},u=[];for(const p of e){const e={sourcemap:p.content.get("source_map")?.path.replace(n.bundler.outDir,"."),file:p.content.get("minified_file")?.path.replace(n.bundler.outDir,".")};s.debug(`Queuing ${B(e.sourcemap)} | ${B(e.file)}`),u.push(i.add((async()=>{try{await x({url:t.intakeUrl,method:"POST",getData:J(p,a),onRetry:(t,n)=>{const o=`Failed to upload ${H(e.sourcemap)} | ${H(e.file)}:\n ${t.message}\nRetrying ${n}/5`;r.push(o),s.debug(o)}}),s.debug(`Sent ${B(e.sourcemap)} | ${B(e.file)}`)}catch(n){if(o.push({metadata:e,error:n}),!0===t.bailOnError)throw n}})))}return await Promise.all(u),await i.onIdle(),{warnings:r,errors:o}})(a,t,n,s);if(s.info(`Done uploading ${B(e.length.toString())} sourcemaps in ${B(j(Date.now()-o))}.`),c.length>0){const e=`Failed to upload some sourcemaps:\n${` - ${c.map((({metadata:e,error:t})=>e?`${U(e.file)} | ${U(e.sourcemap)} : ${t.message}`:t.message)).join("\n - ")}`}`;if(s.error(e),!0===t.bailOnError)throw new Error(e)}d.length>0&&s.warn(`Warnings while uploading sourcemaps:\n - ${d.join("\n - ")}`)},Y=async(e,s,o)=>{const r=t.green.bold,i=Object.entries(e.sourcemaps).map((([e,t])=>` - ${e}: ${r(t.toString())}`)).join("\n"),a=((e,t)=>{if(!t.build.outputs||0===t.build.outputs.length)throw new Error("No output files found.");return t.build.outputs.filter((e=>e.filepath.endsWith(".map"))).map((e=>e.filepath)).map((n=>({...P(e,t,n),sourcemapFilePath:n,minifiedPathPrefix:e.minifiedPathPrefix})))})(e.sourcemaps,s),u=n`
10
+ Uploading ${r(a.length.toString())} sourcemaps with configuration:
11
11
  ${i}
12
- `;s.info(a),await J(r,e.sourcemaps,n,s)},Y=`https://sourcemap-intake.${process.env.DATADOG_SITE||"datadoghq.com"}/api/v2/srcmap`,Q=e=>{const n=t.bold.red,s=e[I]||{},o={errors:[]};if(s.sourcemaps){s.sourcemaps.releaseVersion||o.errors.push(`${n("sourcemaps.releaseVersion")} is required.`),s.sourcemaps.service||o.errors.push(`${n("sourcemaps.service")} is required.`),s.sourcemaps.minifiedPathPrefix||o.errors.push(`${n("sourcemaps.minifiedPathPrefix")} is required.`),s.sourcemaps.minifiedPathPrefix&&((e=>{let t;try{t=new URL(e).host}catch{}return!(!t&&!e.startsWith("/"))})(s.sourcemaps.minifiedPathPrefix)||o.errors.push(`${n("sourcemaps.minifiedPathPrefix")} must be a valid URL or start with '/'.`));const e={bailOnError:!1,disableGit:!1,dryRun:!1,maxConcurrency:20,intakeUrl:process.env.DATADOG_SOURCEMAP_INTAKE_URL||s.sourcemaps.intakeUrl||Y,...s.sourcemaps};o.config=e}return o},X=(e,t)=>{const n=t.getLogger(A),s=((e,t)=>{const n=[],s=Q(e);if(n.push(...s.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${A}.`);const o={...e[I],sourcemaps:void 0};return s.config&&(o.sourcemaps=s.config),o})(e,n);return[{name:A,enforce:"post",async writeBundle(){s.disabled||s.sourcemaps&&await V(s,t,n)}}]};var Z=(e=>(e[e.BEFORE=0]="BEFORE",e[e.MIDDLE=1]="MIDDLE",e[e.AFTER=2]="AFTER",e))(Z||{});const ee="rum",te="datadog-rum-plugin",ne=e=>`DD_RUM.init({${JSON.stringify(e.sdk).replace(/(^{|}$)/g,"")}});\n`,se=(e,t)=>{const n=e.sdk;if(n.clientToken)return ne(e);if(!t.auth?.apiKey||!t.auth?.appKey)throw new Error('Missing "auth.apiKey" and/or "auth.appKey" to fetch "rum.sdk.clientToken".');return async()=>{let s;try{const e=await M({url:`https://api.datadoghq.com/api/v2/rum/applications/${n.applicationId}`,type:"json",auth:t.auth});s=e.data?.attributes?.client_token}catch(e){throw new Error(`Could not fetch the clientToken: ${e.message}`)}if(!s)throw new Error("Missing clientToken in the API response.");return ne({...e,sdk:{clientToken:s,...n}})}},oe=e=>{const n=t.bold.red,s=e[ee]||{},o={errors:[]};if(s.sdk){s.sdk.applicationId||o.errors.push(`Missing ${n("applicationId")} in the SDK configuration.`),e.auth?.apiKey&&e.auth?.appKey||s.sdk.clientToken||o.errors.push(`Missing ${n('"auth.apiKey"')} and/or ${n('"auth.appKey"')} to fetch missing client token.`);const t={applicationId:"unknown_application_id",allowUntrustedEvents:!1,compressIntakeRequests:!1,defaultPrivacyLevel:"mask",enablePrivacyForActionName:!1,sessionReplaySampleRate:0,sessionSampleRate:100,silentMultipleInit:!1,site:"datadoghq.com",startSessionReplayRecordingManually:!1,storeContextsAcrossPages:!1,telemetrySampleRate:20,traceSampleRate:100,trackingConsent:"granted",trackLongTasks:!1,trackResources:!1,trackUserInteractions:!1,trackViewsManually:!1};o.config={...t,...s.sdk}}return o},ie=(e,t)=>{const n=((e,t)=>{const n=[],s=oe(e);if(n.push(...s.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${te}.`);const o={...e[ee],sdk:void 0};return s.config&&(o.sdk=s.config),o})(e,t.getLogger(te));return n.sdk&&(t.inject({type:"file",position:Z.MIDDLE,value:u.join(__dirname,"./rum-browser-sdk.js")}),t.inject({type:"code",position:Z.MIDDLE,value:se(n,t)})),[]},re="telemetry",ae="datadog-telemetry-plugin",ue=[e=>/modules\.tree\.(count|size)$/.test(e.metric)?null:e,e=>e.tags.some((e=>/^assetName:.*\.map$/.test(e)||/^moduleName:\/node_modules/.test(e)))?null:e,e=>{const t={size:1e5,count:10,duration:1e3};return/(entries|loaders|warnings|errors)\.count$/.test(e.metric)&&(t.count=0),/(modules\.(dependencies|dependents)$)/.test(e.metric)&&(t.count=30),/modules\.tree\.count$/.test(e.metric)&&(t.count=150),/modules\.tree\.size$/.test(e.metric)&&(t.size=15e5),/entries\.size$/.test(e.metric)&&(t.size=0),/entries\.modules\.count$/.test(e.metric)&&(t.count=0),e.value>t[e.type]?e:null}],pe=(e,t)=>({type:"gauge",tags:[...e.tags,...t.tags],metric:`${t.prefix?`${t.prefix}.`:""}${e.metric}`,points:[[t.timestamp,e.value]]}),ce=(e="")=>e.endsWith("/")?e:`${e}/`,le=(e,t)=>{let n=e;return e.split(ce(t)),n.split("!").pop().replace(/(.*)?\/node_modules\//,"/node_modules/").replace(/^((\.)*\/)+/,"")},de=(e,t)=>e.split("!").pop().replace(ce(t),"./"),me=(e,t,n)=>{let s=e.name||e.userRequest;return s||(s=((e,t)=>{let n=e.userRequest;if(!n){let s;s=t.moduleGraph&&"function"==typeof t.moduleGraph.getIssuer?t.moduleGraph.getIssuer(e):e.issuer,n=s?.userRequest,n||(n=e._identifier?.split("!").pop())}return n||"unknown"})(e,t)),de(s||"no-name",n)},fe=e=>e.replace(/^.*\/node_modules\/(@[a-z0-9][\w-.]+\/[a-z0-9][\w-.]*|[^/]+).*$/,"$1"),he=e=>e.map((e=>({type:e?.constructor?.name??typeof e,name:e?.name,value:"string"==typeof e?e:void 0}))),ge=(e,t,n,s)=>{const o=new Set;if(s){const{timings:e}=s;e&&(e.tapables&&((e,t)=>{t.add({metric:"plugins.count",type:"count",value:e.size,tags:[]});for(const n of e.values()){let e=0,s=0;for(const o of Object.values(n.events)){let i=0;s+=o.values.length;for(const t of o.values){const n=t.end-t.start;i+=n,e+=n}t.add({metric:"plugins.hooks.duration",type:"duration",value:i,tags:[`pluginName:${n.name}`,`hookName:${o.name}`]}).add({metric:"plugins.hooks.increment",type:"count",value:o.values.length,tags:[`pluginName:${n.name}`,`hookName:${o.name}`]})}t.add({metric:"plugins.duration",type:"duration",value:e,tags:[`pluginName:${n.name}`]}).add({metric:"plugins.increment",type:"count",value:s,tags:[`pluginName:${n.name}`]})}})(e.tapables,o),e.loaders&&((e,t)=>{t.add({metric:"loaders.count",type:"count",value:e.size,tags:[]});for(const n of e.values())t.add({metric:"loaders.duration",type:"duration",value:n.duration,tags:[`loaderName:${n.name}`]}).add({metric:"loaders.increment",type:"count",value:n.increment,tags:[`loaderName:${n.name}`]})})(e.loaders,o))}((e,t)=>{const n=e.build.inputs||[],s=e.build.outputs||[],o=e.build.entries||[],i=e.build.warnings.length,r=e.build.errors.length,a=e.build.duration,u=new Map,p=new Map,c=new Map;for(const e of o){for(const t of e.inputs)u.has(t.filepath)||u.set(t.filepath,[]),u.get(t.filepath).push(e.name);for(const t of e.outputs){const n=t.filepath.replace(/\.map$/,"");c.has(n)||c.set(n,[]),c.get(n).push(e.name)}}for(const e of s)for(const t of e.inputs)p.has(t.filepath)||p.set(t.filepath,[]),p.get(t.filepath).push(e.name);t.add({metric:"assets.count",type:"count",value:s.length,tags:[]}).add({metric:"entries.count",type:"count",value:o.length,tags:[]}).add({metric:"errors.count",type:"count",value:r,tags:[]}).add({metric:"modules.count",type:"count",value:n.length,tags:[]}).add({metric:"warnings.count",type:"count",value:i,tags:[]}),a&&t.add({metric:"compilation.duration",type:"duration",value:a,tags:[]});for(const e of n){const n=[`moduleName:${e.name}`,`moduleType:${e.type}`];u.has(e.filepath)&&n.push(...u.get(e.filepath).map((e=>`entryName:${e}`))),p.has(e.filepath)&&n.push(...p.get(e.filepath).map((e=>`assetName:${e}`))),t.add({metric:"modules.size",type:"size",value:e.size,tags:n}).add({metric:"modules.dependencies",type:"count",value:e.dependencies.size,tags:n}).add({metric:"modules.dependents",type:"count",value:e.dependents.size,tags:n})}for(const e of s){const n=[`assetName:${e.name}`,`assetType:${e.type}`],s=e.filepath.replace(/\.map$/,"");c.has(s)&&n.push(...c.get(s).map((e=>`entryName:${e}`))),t.add({metric:"assets.size",type:"size",value:e.size,tags:n}).add({metric:"assets.modules.count",type:"count",value:e.inputs.length,tags:n})}for(const e of o){const n=[`entryName:${e.name}`];t.add({metric:"entries.size",type:"size",value:e.size,tags:n}).add({metric:"entries.modules.count",type:"count",value:e.inputs.length,tags:n}).add({metric:"entries.assets.count",type:"count",value:e.outputs.length,tags:n})}})(e,o);for(const e of o)if(t.filters?.length){let s=e;for(const n of t.filters){if(!s)break;s=n(e)}s&&n.add(pe(s,t))}else n.add(pe(e,t))},we=async(e,t,n,s)=>{if("string"!=typeof t&&"object"!=typeof t&&!t)return;const{report:o,metrics:i}=e,r=Date.now();let a="";const p={timings:!0,metrics:!0};"object"==typeof t?(a=t.destination,p.timings=t.timings||!1,p.metrics=t.metrics||!1):"string"==typeof t&&(a=t);const c=u.resolve(s,a);try{const e={},t={};p.timings&&o?.timings&&(t.timings={content:{tapables:o.timings.tapables?Array.from(o.timings.tapables.values()):null,loaders:o.timings.loaders?Array.from(o.timings.loaders.values()):null,modules:o.timings.modules?Array.from(o.timings.modules.values()):null}}),p.metrics&&(t.metrics={content:Array.from(i)});const s=Object.entries(t).map((async([t,s])=>{const o=Date.now();n.debug(`Start writing ${t}.json.`);try{await(async(e,t)=>{const n=JSON.stringify(t,null,4);return O(e,n)})(u.join(c,`${t}.json`),s.content),n.debug(`Wrote ${t}.json in ${S(Date.now()-o)}`)}catch(s){n.error(`Failed to write ${t}.json in ${S(Date.now()-o)}`),e[t]=s}}));await Promise.all(s),n.debug(`Wrote files in ${S(Date.now()-r)}.`);const a=Object.keys(e);a.length&&n.error(`Couldn't write files.\n${a.map((t=>` - ${t}: ${e[t].toString()}`))}`)}catch(e){n.error(`Couldn't write files. ${e}`)}},ye=t.bold.red,be=t.bold.cyan,ve=e=>(t,n)=>{let s,o;return"function"==typeof e?(s=e(t),o=e(n)):(s=t[e],o=n[e]),s>o?-1:s<o?1:0},$e=(e,t)=>{if(!t||!t.size)return[];const n=Array.from(t.values());n.sort(ve("duration"));const s={name:`${e} duration`,values:n.map((e=>({name:e.name,value:S(e.duration)}))),top:!0};n.sort(ve("increment"));const o={name:`${e} hits`,values:n.map((e=>({name:e.name,value:e.increment.toString()}))),top:!0};return[s,o]},ke=(e,t,n)=>{const s=[];var o;n&&(s.push(...$e("Loader",n.timings.loaders)),s.push(...$e("Tapable",n.timings.tapables)),s.push(...$e("Module",n.timings.modules))),s.push(...(e=>{const t={name:"Module total dependents",values:[],top:!0},n={name:"Module total dependencies",values:[],top:!0},s={name:"Module size",values:[],top:!0},o={name:"Module aggregated size",values:[],top:!0},i=new Set,r=(e=>{const t={bundler:e.bundler,errors:e.errors,warnings:e.warnings,logs:e.logs,start:e.start,end:e.end,duration:e.duration,writeDuration:e.writeDuration,entries:[],inputs:[],outputs:[]};for(const n of e.entries||[]){const e={...n,inputs:[],outputs:[]};n.inputs&&(e.inputs=n.inputs.map((e=>e.filepath))),n.outputs&&(e.outputs=n.outputs.map((e=>e.filepath))),t.entries.push(e)}for(const n of e.inputs||[]){const e={...n,dependencies:[],dependents:[]};if(n.dependencies)for(const t of n.dependencies)e.dependencies.push(t.filepath);if(n.dependents)for(const t of n.dependents)e.dependents.push(t.filepath);t.inputs.push(e)}for(const n of e.outputs||[]){const e={...n,inputs:[]};n.inputs&&(e.inputs=n.inputs.map((e=>e.filepath))),t.outputs.push(e)}return t})(e.build),a=new Map,u=new Map,p=new Map;for(const e of r.inputs||[]){if("map"===e.type)continue;const t=new Set(e.dependencies),n=new Set(e.dependents);for(const n of t)p.has(n)||p.set(n,new Set),p.get(n).add(e.filepath);for(const t of n)u.has(t)||u.set(t,new Set),u.get(t).add(e.filepath);if(u.has(e.filepath)){const n=u.get(e.filepath);for(const e of n)t.add(e)}if(p.has(e.filepath)){const t=p.get(e.filepath);for(const e of t)n.add(e)}u.set(e.filepath,t),p.set(e.filepath,n),a.set(e.filepath,{name:e.name,size:e.size,dependencies:t,dependents:n})}for(const[e,t]of a){const n=u.get(e)||new Set,s=p.get(e)||new Set;let o=t.size;for(const e of n)o+=a.get(e)?.size||0;i.add({name:t.name,size:t.size,aggregatedSize:o,dependents:s,dependencies:n})}if(!i.size)return[t,n,s];const c=Array.from(i);return c.sort(ve((e=>e.dependents.size))),t.values=c.map((e=>({name:e.name,value:e.dependents.size.toString()}))),c.sort(ve((e=>e.dependencies.size))),n.values=c.map((e=>({name:e.name,value:e.dependencies.size.toString()}))),c.sort(ve("size")),s.values=c.map((e=>({name:e.name,value:f(e.size)}))),c.sort(ve("aggregatedSize")),o.values=c.map((e=>({name:e.name,value:f(e.aggregatedSize||e.size)}))),[t,n,s,o]})(e)),s.push(...(o=e,[{name:"Asset size",values:(o.build.outputs||[]).filter((e=>"map"!==e.type)).sort(ve((e=>e.size))).map((e=>({name:e.name,value:f(e.size)}))),top:!0},{name:"Entry aggregated size",values:(o.build.entries||[]).sort(ve((e=>e.size))).map((e=>({name:e.name,value:f(e.size)}))),top:!0},{name:"Entry number of modules",values:(o.build.entries||[]).sort(ve((e=>e.size))).map((e=>({name:e.name,value:e.inputs.length.toString()})))||[],top:!0}])),s.push(...(e=>{const t={name:"General Numbers",values:[],top:!1},n=e.build.inputs?e.build.inputs.length:0,s=e.build.outputs?e.build.outputs.length:0,o=e.build.warnings.length,i=e.build.errors.length,r=e.build.entries?e.build.entries.length:0;return e.build.start&&t.values.push({name:"Overhead duration",value:S(e.build.start-e.start)}),e.build.duration&&t.values.push({name:"Build duration",value:S(e.build.duration)}),e.build.writeDuration&&t.values.push({name:"Write duration",value:S(e.build.writeDuration)}),t.values.push({name:"Number of modules",value:n.toString()},{name:"Number of assets",value:s.toString()},{name:"Number of entries",value:r.toString()},{name:"Number of warnings",value:o.toString()},{name:"Number of errors",value:i.toString()}),[t]})(e));const i=(e=>{let t="";for(const t of e){t.top&&t.values.length>=5&&(t.values=t.values.slice(0,5),t.name=`Top 5 ${t.name}`);for(const e of t.values)e.name=P(e.name,60)}const n=Math.max(...e.map((e=>e.name.length))),s=Math.max(...e.flatMap((e=>e.values.map((e=>e.name.length))))),o=Math.max(...e.flatMap((e=>e.values.map((e=>e.value.length))))),i=Math.max(n+4,s+o+4);for(const n of e){if(0===n.values.length)continue;const e=i-(n.name.length+4);t+=`\n== ${n.name} ${"=".repeat(e)}=\n`;for(const e of n.values){const n=o-e.value.length;t+=` [${ye(e.value)}] ${" ".repeat(n)}${be(e.name)}\n`}}return t})(s);t.info(i)},Se=["onStart","onLoad","onResolve","onEnd"],De=new Map,Ee=new Map,Me=(e,t,n)=>{const s=Object.assign({},e);for(const o of Se)s[o]=async(s,i)=>{const r=De.get(t)||{name:t,increment:0,duration:0,events:{}};r.events[o]=r.events[o]||{name:o,values:[]};return(0,e[o])(s,(async(...e)=>{const s=de(e[0].path,n),a=Ee.get(s)||{name:s,increment:0,duration:0,events:{}};a.events[o]=a.events[o]||{name:o,values:[]};const u=h.now();try{return await i(...e)}finally{const n=h.now(),i=n-u,p={start:u,end:n,duration:i,context:he(e)};r.events[o].values.push(p),r.duration+=i,r.increment+=1,De.set(t,r),a.events[o].values.push(p),a.duration+=i,a.increment+=1,Ee.set(s,a)}}))};return s},Pe=(e,t,n)=>({setup:s=>{t.build.start=Date.now(),s.initialOptions.metafile=!0;const o=n.time("wrapping plugins");((e,t)=>{const n=e.initialOptions.plugins;if(n){const e=n.map((e=>({...e})));for(const s of n){if(s.name.includes(ae))continue;const n=s.setup;s.setup=async o=>{const i=Me(o,s.name,t);await n({...i,initialOptions:{...i.initialOptions,plugins:e}})}}}})(s,t.cwd),o(),s.onEnd((async t=>{if(!t.metafile)return void n.warn("Missing metafile, can't proceed with modules data.");const s=n.time("getting plugins results"),{plugins:o,modules:i}={plugins:De,modules:Ee};s(),e.report={timings:{tapables:o,modules:i}}}))}});class je{constructor(e){this.started={},this.finished=[],this.cwd=e}buildModule(e,t){const n=me(e,t,this.cwd),s=(e=>(e.loaders||[]).map((e=>e.loader||e)).map(fe))(e);s.length||s.push("no-loader"),this.started[n]={module:le(n),timings:{start:h.now(),duration:0,end:0},loaders:s}}succeedModule(e,t){const n=me(e,t,this.cwd),s=this.started[n];s&&(s.timings.end=h.now(),s.timings.duration=s.timings.end-s.timings.start,this.finished.push(s),delete this.started[n])}getResults(){const e=new Map,t=new Map;for(const n of this.finished){const s=n.timings.end-n.timings.start,o=t.get(n.module)||{name:n.module,increment:0,duration:0,events:{}},i=n.loaders.join(",");o.events[i]=o.events[i]||{name:i,values:[]},o.events[i].values.push(n.timings),o.increment+=1,o.duration+=s,t.set(n.module,o);for(const t of n.loaders){const n=e.get(t)||{name:t,increment:0,duration:0,events:{}};n.increment+=1,n.duration+=s,e.set(t,n)}}return{loaders:e,modules:t}}}class Oe{constructor(e){this.monitoredTaps={},this.tapables=[],this.hooks={},this.timings=new Map,this.ignoredHooks=["normalModuleLoader"],this.cwd=e}saveResult(e,t,n,s,o,i){const r=this.timings.get(t)||{name:t,duration:0,increment:0,events:{}};r.events[n]||(r.events[n]={name:n,values:[]}),r.events[n].values.push({start:o,end:i,duration:i-o,context:s,type:e}),r.duration+=i-o,r.increment+=1,this.timings.set(t,r)}getResults(){const e=this.timings;for(const[t,n]of this.timings){const s=n;s.duration=Object.values(n.events).map((e=>e.values.reduce(((e,t)=>e+t.end-t.start),0))).reduce(((e,t)=>e+t),0),e.set(t,s)}return{monitoredTaps:this.monitoredTaps,tapables:this.tapables,hooks:this.hooks,timings:e}}getPromiseTapPatch(e,t,n,s){return(...o)=>{this.checkNewHooks();const i=h.now(),r=t.apply(this,o),a=()=>{this.saveResult(e,n,s,he(o),i,h.now())};return r.then(a,a),r}}getAsyncTapPatch(e,t,n,s){return(...o)=>{this.checkNewHooks();const i=h.now(),r=o.pop();return t.apply(this,[...o,(...t)=>(this.saveResult(e,n,s,he(o),i,h.now()),r(...t))])}}getDefaultTapPatch(e,t,n,s){return(...o)=>{this.checkNewHooks();const i=h.now(),r=t.apply(this,o);return this.saveResult(e,n,s,he(o),i,h.now()),r}}getTapPatch(e,t,n,s){switch(e){case"promise":return this.getPromiseTapPatch(e,t,n,s);case"async":return this.getAsyncTapPatch(e,t,n,s);default:return this.getDefaultTapPatch(e,t,n,s)}}newTap(e,t,n,s){return(o,i)=>{const r="string"==typeof(a=o)?a:a.name;var a;const u=`${t}-${r}`;if(this.monitoredTaps[u])return n.call(s,o,i);this.monitoredTaps[u]=!0;const p=this.getTapPatch(e,i,r,t);return n.call(s,o,p)}}replaceTaps(e,t){t.tap=this.newTap("default",e,t.tap,t),t.tapAsync=this.newTap("async",e,t.tapAsync,t),t.tapPromise=this.newTap("promise",e,t.tapPromise,t)}patchHook(e,t,n){n._fakeHook||e.includes(ae)||(this.hooks[e]||(this.hooks[e]=[]),this.hooks[e].includes(t)||(this.hooks[e].push(t),this.replaceTaps(t,n)))}patchHooks(e){const t=e.constructor.name,n=Object.keys(e.hooks).filter((e=>!this.ignoredHooks.includes(e)&&!this.hooks[t]?.includes(e)));for(const s of n)this.patchHook(t,s,e.hooks[s])}checkNewHooks(){for(const e of this.tapables)this.patchHooks(e)}throughHooks(e){this.tapables.includes(e)||this.tapables.push(e),this.patchHooks(e)}}const Te=(e,t)=>async n=>{t.build.start=Date.now();const s={name:ae},o=new Oe(t.cwd),i=new je(t.cwd);o.throughHooks(n),n.hooks.thisCompilation.tap(s,(e=>{o.throughHooks(e),e.hooks.buildModule.tap(s,(t=>{i.buildModule(t,e)})),e.hooks.succeedModule.tap(s,(t=>{i.succeedModule(t,e)}))})),n.hooks.afterEmit.tapPromise(s,(async t=>{const{timings:n}=o.getResults(),{loaders:s,modules:r}=i.getResults();e.report={timings:{tapables:n,loaders:s,modules:r}}}))},ze={filters:ue},Ne=(e,t)=>{const n=t.getLogger(ae);let s=0;const o={start:Date.now()},i=(e=>{const t=e[re]||{},n=t.endPoint||"https://app.datadoghq.com";return{disabled:!1,enableTracing:!1,filters:ue,output:!1,prefix:"",tags:[],...t,endPoint:n.startsWith("http")?n:`https://${n}`}})(e),r=[],a={name:ae,enforce:"pre",esbuild:Pe(o,t,n),webpack:Te(o,t),rspack:Te(o,t)};let u;const p={name:"datadog-universal-telemetry-plugin",enforce:"post",buildStart(){u=n.time("build"),t.build.start=t.build.start||Date.now()},buildEnd(){u(),s=Date.now()},async writeBundle(){t.build.end=Date.now(),t.build.duration=t.build.end-t.build.start,t.build.writeDuration=t.build.end-s;const e=new Set,r=(e=>({timestamp:Math.floor((e.timestamp||Date.now())/1e3),tags:e.tags,prefix:e.prefix,filters:e.filters}))(i),a=n.time("adding metrics");ge(t,r,e,o.report),a();const u=n.time("writing to files");await we({report:o.report,metrics:e},i.output,n,t.bundler.outDir),u();const p=n.time("outputing report");ke(t,n,o.report),p();const c=n.time("sending metrics to Datadog.");await((e,t,n)=>{const s=Date.now();if(!t.apiKey)return void n.info("Won't send metrics to Datadog: missing API Key.");if(!e.size)return void n.info("No metrics to send.");const o=new Map;for(const t of e)o.has(t.metric)||o.set(t.metric,0),o.set(t.metric,o.get(t.metric)+1);const i=Array.from(o.entries()).map((([e,t])=>`${e} - ${t}`));return n.debug(`\nSending ${e.size} metrics.\nMetrics:\n - ${i.join("\n - ")}`),M({method:"POST",url:`${t.endPoint}/api/v1/series?api_key=${t.apiKey}`,getData:()=>({data:JSON.stringify({series:Array.from(e)})})}).then((()=>{n.debug(`Sent metrics in ${S(Date.now()-s)}.`)})).catch((e=>{n.error(`Error sending metrics ${e}`)}))})(e,{apiKey:t.auth?.apiKey,endPoint:i.endPoint},n),c()}};return i.enableTracing&&r.push(a),r.push(p),r},Re="datadog-analytics-plugin",xe=e=>{const t=e.getLogger(Re);return e.sendLog=async(n,s={})=>{if("production"===e.env)try{const t={name:e.bundler.name,version:e.bundler.version};await M({retries:2,minTimeout:100,url:"https://browser-http-intake.logs.datadoghq.com/v1/input/pub44d5f4eb86e1392037b7501f7adc540e",method:"POST",type:"json",getData:async()=>{const o={ddsource:`@datadog/${t.name}-plugin`,env:e.env,message:n,service:"build-plugins",bundler:t,plugins:e.pluginNames,version:e.version,team:"language-foundations",...s};return{data:JSON.stringify(o),headers:{"Content-Type":"application/json"}}}})}catch(e){t.debug(`Could not submit data to Datadog: ${e}`)}},[{name:Re,async buildStart(){await e.sendLog("Build started")}}]},Ie=/\.(?!.*(?:\.|\/|\\))(\w{1,})/g,Ae=/(\?|%3F|\|)+/gi,Fe=e=>{return"unknown"===e?e:e.includes("webpack/runtime")?"runtime":(t=_e(e),Ie.lastIndex=0,Ie.exec(t)?.[1]||"unknown");var t},Ce=["unknown","commonjsHelpers.js","vite/preload-helper.js"],Le=(e,t,n)=>{const s=new Set;for(const n of e){const e=_e(n);j(n)||e===t||Ce.includes(e)||s.add(e)}return s},_e=e=>e.split("!").pop().split(Ae).shift().replace(/^[^\w\s.,!@#$%^&*()=+~`\-/]+/,""),qe=(e,t)=>j(t)?$:t.startsWith(e)?t:u.resolve(e,t),Ke=(e,t)=>j(t)?$:"unknown"===t?t:t.includes("webpack/runtime")?t.replace("webpack/runtime/","").replace(/ +/g,"-"):t.split("!").pop().replace(e.bundler.outDir,"").replace(e.cwd,"").split("node_modules").pop().split(Ae).shift().replace(/^\/+/,""),Be=(e,t)=>Object.fromEntries(Object.entries(e).map((([e,n])=>[qe(t,e),n]))),He=(e,t)=>({setup(n){const s=new Map,o=[];n.onStart((async()=>{const i=t.time("process entries");o.push(...await D(n,e,t));for(const t of o){const n=Ke(e,t.resolved);t.name?s.set(n,t.name):s.set(n,n)}i()})),n.onEnd((n=>{const o=t.time("collecting errors and warnings"),i=e.cwd;for(const t of n.errors)e.build.errors.push(t.text);for(const t of n.warnings)e.build.warnings.push(t.text);if(o(),!n.metafile){const n="Missing metafile from build report.";return e.build.warnings.push(n),void t.warn(n)}const r=[],a=[],u=[],p=[],c=[],l={},d={},m=t.time("indexing metafile data"),f=Be(n.metafile.inputs,i),h=Be(n.metafile.outputs,i);m();const g=e=>{if(!j(e))return e;const t=f[qe(i,e)];if(!t)return e;const n=t.imports.find((e=>!j(e.path)));return n?n.path:e},w=t.time("looping through inputs");for(const[t,s]of Object.entries(n.metafile.inputs)){if(j(t))continue;const n=qe(i,t),o={name:Ke(e,t),filepath:n,dependents:new Set,dependencies:new Set,size:s.bytes,type:Fe(t)};l[n]=o,r.push(o)}w();const y=t.time("looping through outputs");for(const[o,r]of Object.entries(n.metafile.outputs)){const n=qe(i,o),c=Ke(e,n),m=[];for(const e of Object.keys(r.inputs)){if(j(e))continue;const n=l[qe(i,e)];n?m.push(n):t.debug(`Input ${e} not found for output ${c}`)}if(r.entryPoint&&!m.length){const e=l[qe(i,r.entryPoint)];if(!e){t.debug(`Input ${r.entryPoint} not found for output ${c}`);continue}m.push(e)}const f={name:c,filepath:n,inputs:m,size:r.bytes,type:Fe(n)};if(d[n]=f,"map"===f.type&&p.push(f),a.push(f),!r.entryPoint)continue;const h=l[qe(i,g(r.entryPoint))];if(h){if(!s.get(h.name))continue;const e={...f,name:s.get(h.name)||h.name,outputs:[f],size:f.size};u.push(e)}}y();const b=t.time("looping through sourcemaps");for(const e of p){const n=d[e.filepath.replace(/\.map$/,"")];n?e.inputs.push(n):t.debug(`Could not find output for sourcemap ${e.name}`)}b();const v={inputs:{report:l,meta:f},outputs:{report:d,meta:h}},$=/(<runtime>|https:|file:|data:|#)/g,k=e=>!j(e)&&!e.match($),S=(e,n,s={})=>{if(!k(e))return s;const o=n.report[e];if(!o)return t.debug(`Could not find report's ${e}`),s;if(s[o.filepath])return s;s[o.filepath]=o;const r=n.meta[e];if(!r)return t.debug(`Could not find metafile's ${e}`),s;if(!r.imports||!r.imports.length)return s;for(const e of r.imports){const t=qe(i,e.path);S(t,n,s)}return s},D=t.time("looping through entries");for(const e of u){const t={},n={};for(const n of e.inputs)S(n.filepath,v.inputs,t);for(const t of e.outputs)S(t.filepath,v.outputs,n);e.inputs=Object.values(t),e.outputs=Object.values(n),e.size=e.outputs.reduce(((e,t)=>e+t.size),0),c.push(e)}D();const E=t.time("aggregate dependencies and dependents");for(const e of r){const n=v.inputs.meta[e.filepath];if(n)for(const s of n.imports){if(!k(s.path))continue;const n=qe(i,s.path),o=v.inputs.report[n];o?(e.dependencies.add(o),o.dependents.add(e)):t.debug(`Could not find input file of ${s.path}`)}else t.debug(`Could not find metafile's ${e.name}`)}E(),e.build.outputs=a,e.build.inputs=r,e.build.entries=c}))}}),We=(e,t)=>{const n={};return{onLog(t,n){"warn"===t&&e.build.warnings.push(n.message||n.toString())},renderError(t){t&&e.build.errors.push(t.message)},moduleParsed(e){const t=_e(e.id),s=n[t]||{dependencies:new Set,dependents:new Set},o=Le(new Set([...e.dynamicallyImportedIds,...e.importedIds]),t),i=Le(new Set([...e.dynamicImporters,...e.importers]),t);for(const e of i)s.dependents.add(e);for(const e of o)s.dependencies.add(e);n[t]=s},writeBundle(s,o){const i=[],r=[],a=[],u=[],p=[],c={},l={};for(const[e,{dependencies:t,dependents:s}]of Object.entries(n)){for(const s of t){const t=_e(s);n[t]||(n[t]={dependencies:new Set,dependents:new Set}),n[t].dependents.has(e)||n[t].dependents.add(e)}for(const t of s){const s=_e(t);n[s]||(n[s]={dependencies:new Set,dependents:new Set}),n[s].dependencies.has(e)||n[s].dependencies.add(e)}}for(const[t,n]of Object.entries(o)){const s={name:t,filepath:qe(e.bundler.outDir,t),inputs:[],size:"code"in n?Buffer.byteLength(n.code,"utf8"):Buffer.byteLength(n.source,"utf8"),type:Fe(t)};if("map"===s.type&&u.push(s),"modules"in n)for(const[t,o]of Object.entries(n.modules)){if(_e(t)!==t)continue;const n={name:Ke(e,t),dependencies:new Set,dependents:new Set,filepath:t,size:o.originalLength,type:Fe(t)};s.inputs.push(n),c[n.filepath]=n,i.push(n)}"isEntry"in n&&n.isEntry&&a.push({...s,name:n.name,size:0,outputs:[s]}),l[s.filepath]=s,r.push(s)}for(const s of i){const o=n[s.filepath];if(o){for(const n of o.dependencies){const o=c[n];o?s.dependencies.add(o):t.debug(`Could not find input for dependency ${Ke(e,n)} of ${s.name}`)}for(const n of o.dependents){const o=c[n];o?s.dependents.add(o):t.debug(`Could not find input for dependent ${Ke(e,n)} of ${s.name}`)}}else t.debug(`Could not find the import report for ${s.name}.`)}if(u.length)for(const e of u){const n=e.filepath.replace(/\.map$/,""),s=l[n];s?e.inputs.push(s):t.debug(`Could not find output for sourcemap ${e.name}`)}const d=(n,s={})=>{if(s[n])return s;const i=Ke(e,n),r=l[n];if(!r)return t.debug(`Could not find output for ${i}`),s;s[n]=r;const a=o[i];if(!a)return t.debug(`Could not find asset for ${i}`),s;const u=[];"imports"in a&&u.push(...a.imports),"dynamicImports"in a&&u.push(...a.dynamicImports);for(const t of u)d(qe(e.bundler.outDir,t),s);return s};for(const e of a){const t=d(e.filepath);e.outputs=Object.values(t),e.inputs=Array.from(new Set(e.outputs.flatMap((e=>e.inputs)))),e.size=e.outputs.reduce(((e,t)=>e+t.size),0),p.push(e)}e.build.inputs=i,e.build.outputs=r,e.build.entries=p}}},Ue=(e,t,n)=>s=>{const o=[],i=[],r=[],a=new Map,u=new Map,p=new Map,c=new Map,l=[],d=new Map,m=e=>!(!e||e.startsWith("webpack/runtime")||e.includes("/webpack4/buildin/")||e.startsWith("multi ")||j(e)),f=e=>{const t={identifier:e.identifier()};"resource"in e&&"string"==typeof e.resource&&(t.resource=e.resource),"request"in e&&"string"==typeof e.request&&(t.request=e.request),"rawRequest"in e&&"string"==typeof e.rawRequest&&(t.rawRequest=e.rawRequest),"userRequest"in e&&"string"==typeof e.userRequest&&(t.userRequest=e.userRequest);const s=new Set;for(const[o,i]of Object.entries(t))i&&(c.has(i)?(n.debug(`Module ${e.identifier()} is already indexed by ${o}.`),c.get(i)!==e&&n.debug(`Module ${e.identifier()} is indexed with a different value.`)):s.add(i));return s},h=(e,t=[])=>{if("dependencies"in e)for(const n of e.dependencies)t.push(n),h(n,t);if("blocks"in e)for(const n of e.blocks)h(n,t);return t},g=(e,t)=>{if("request"in t&&t.request){if(c.has(t.request))return c.get(t.request);if(e.context&&c.has(qe(e.context,t.request)))return c.get(qe(e.context,t.request))}};s.hooks.thisCompilation.tap(t,(s=>{s.hooks.finishModules.tap(t,(t=>{for(const e of t){const t=f(e);for(const n of t)c.set(n,e)}for(const n of t){const t=n.identifier(),s=new Set(h(n).map((e=>{const s=g(n,e);if(!s||!s.identifier())return!1;const o=s.identifier();return!!m(o)&&(o!==t&&o)})).filter(Boolean));if(!m(t))continue;for(const e of s){const n=d.get(e)||{dependencies:new Set,dependents:new Set};n.dependents.add(t),d.set(e,n)}const i=d.get(t)||{dependents:new Set,dependencies:new Set};for(const e of s)i.dependencies.add(e);d.set(t,i);const r={size:n.size()||0,name:Ke(e,t),dependencies:new Set,dependents:new Set,filepath:t,type:Fe(t)};o.push(r),a.set(t,r)}for(const e of o){const t=d.get(e.filepath);if(t){for(const s of t.dependencies){const t=a.get(s);t?e.dependencies.add(t):n.debug(`Could not find input of dependency ${s}`)}for(const s of t.dependents){const t=a.get(s);t?e.dependents.add(t):n.debug(`Could not find input of dependent ${s}`)}}else n.debug(`Could not find dependency report for ${e.name}`)}}))})),s.hooks.afterEmit.tap(t,(t=>{const s=t.chunks,c=t.getAssets(),d=t=>[...t.files||[],...t.auxiliaryFiles||[]].map((t=>qe(e.bundler.outDir,t))),f=t.chunkGraph;for(const e of s){const t=d(e),n=(f?f?.getChunkModules(e):"getModules"in e&&"function"==typeof e.getModules?e.getModules():[]).flatMap((e=>"modules"in e&&Array.isArray(e.modules)?e.modules.map((e=>e.identifier())):e.identifier())).filter(m);for(const e of t){if("map"===Fe(e))continue;const t=p.get(e)||[];p.set(e,[...t,...n])}}for(const t of c){const s={size:t.source.size()||0,name:t.name,inputs:[],filepath:qe(e.bundler.outDir,t.name),type:Fe(t.name)};if(u.set(s.filepath,s),i.push(s),"map"===s.type){l.push(s);continue}const o=p.get(s.filepath);if(o)for(const e of o){const t=a.get(e);t?s.inputs.push(t):n.debug(`Could not find input of ${e}`)}else n.debug(`Could not find modules for ${s.name}`)}for(const e of l){const t=u.get(e.filepath.replace(/\.map$/,""));t?e.inputs.push(t):n.debug(`Output not found for sourcemap ${e.name}`)}for(const[s,o]of t.entrypoints){const t=[],i=[];let a=0;const p=o.chunks.flatMap(d),c=o.chunks.filter((e=>f?f.getChunkEntryModulesIterable(e):"hasEntryModule"in e&&"function"==typeof e.hasEntryModule&&e.hasEntryModule())).flatMap((e=>Array.from(e.files))).filter((e=>e.includes(s)||o.name&&e.includes(o.name))).find((e=>"js"===Fe(e)));for(const e of p){const s=u.get(e);e&&s?"map"===s.type||t.includes(s)||(t.push(s),i.push(...s.inputs),a+=s.size):n.debug(`Could not find output of ${JSON.stringify(e)}`)}const l={name:s,filepath:c?qe(e.bundler.outDir,c):"unknown",size:a,inputs:Array.from(new Set(i)),outputs:t,type:c?Fe(c):"unknown"};r.push(l)}for(const n of t.errors)e.build.errors.push(n.message);for(const n of t.warnings)e.build.warnings.push(n.message);e.build.inputs=o,e.build.outputs=i,e.build.entries=r}))},Ge="datadog-build-report-plugin",Je=e=>{const t=e.getLogger(Ge);return[{name:Ge,enforce:"post",esbuild:He(e,t),rspack:Ue(e,Ge,t),webpack:Ue(e,Ge,t),vite:We(e,t),rollup:We(e,t)}]},Ve=(e,t)=>{const n=((e,t)=>{const n=e.map((e=>(u.isAbsolute(e)?e:u.resolve(t,e)).split(u.sep))),s=Math.min(...n.map((e=>e.length))),o=[];for(let e=0;e<s;e++){const t=n[0][e];if(!n.every((n=>n[e]===t)))break;o.push(t)}return o.length>0?o.join(u.sep):u.sep})(e,t.cwd);n!==u.sep&&(t.cwd=n)},Ye=e=>t=>{e.bundler.rawConfig=t.options,t.options.output?.path&&(e.bundler.outDir=t.options.output.path),t.options.context&&(e.cwd=t.options.context)},Qe=e=>{const t=new Set,n=n=>{n&&(n.dir?(e.bundler.outDir=n.dir,t.add(n.dir)):n.file&&(e.bundler.outDir=u.dirname(n.file),t.add(n.dir)),"vite"!==e.bundler.name&&Ve(Array.from(t),e))},s=()=>({options(s){if(e.bundler.rawConfig=s,s.input)if(Array.isArray(s.input))for(const e of s.input)t.add(u.dirname(e));else if("object"==typeof s.input)for(const e of Object.values(s.input))t.add(u.dirname(e));else{if("string"!=typeof s.input)throw new Error("Invalid input type");t.add(u.dirname(s.input))}"output"in s&&n(s.output)},outputOptions(e){n(e)}});return[{name:"datadog-bundler-report-plugin",enforce:"pre",esbuild:{setup(t){e.bundler.rawConfig=t.initialOptions,t.initialOptions.outdir&&(e.bundler.outDir=t.initialOptions.outdir),t.initialOptions.outfile&&(e.bundler.outDir=u.dirname(t.initialOptions.outfile)),t.initialOptions.absWorkingDir&&(e.cwd=t.initialOptions.absWorkingDir),t.initialOptions.metafile=!0}},webpack:Ye(e),rspack:Ye(e),vite:{...s(),config(n){n.root?e.cwd=n.root:Ve(Array.from(t),e)}},rollup:s()}]};class Xe{constructor(e){this.trackedFilenames=new Map;for(const t of e){const e=this.getFilename(t),n=this.trackedFilenames.get(e);n?n.push(t):this.trackedFilenames.set(e,new Array(t))}}displaySource(e){return e.length<=40?e:`[...]${e.slice(-35)}`}matchSourcemap(e,t){const n=i.readFileSync(e,"utf8"),s=JSON.parse(n);if(!s.sources)return void t("Missing 'sources' field in sourcemap.");const o=s.sources;if(0===o.length)return void t("Empty 'sources' field in sourcemap.");const r=this.matchSources(o);if(0!==r.length)return r;t(`${o.map(this.displaySource).join(", ")} not in the tracked files.`)}matchSources(e){let t=[];const n=new Set;for(const s of e){const e=this.getFilename(s);if(n.has(e))continue;n.add(e);const o=this.trackedFilenames.get(e);o&&(t=t.concat(o))}return t}rawTrackedFilesList(){let e=[];return this.trackedFilenames.forEach((t=>{e=e.concat(t)})),e}getFilename(e){let t=e.lastIndexOf("/");-1===t?t=0:t++;let n=e.lastIndexOf("?");return(-1===n||n<=t)&&(n=e.length),e.substring(t,n)}}const Ze=async e=>{const t=await e.getRemotes(!0);if(0===t.length)throw new Error("No git remotes available");const n=await et(e);for(const e of t)if(e.name===n)return tt(e.refs.push);return tt(t[0].refs.push)},et=async e=>{try{return(await e.getConfig("clone.defaultRemoteName"))?.value??"origin"}catch(e){return"origin"}},tt=e=>{try{const t=new w(e);return t.username="",t.password="",t.toString()}catch{return e}},nt=async e=>e.revparse("HEAD"),st=async e=>(await e.raw("ls-files")).split(/\r\n|\r|\n/),ot="datadog-git-plugin",it=(e,t)=>{const n=t.getLogger(ot);return[{name:ot,enforce:"pre",async buildStart(){if(e.errorTracking?.sourcemaps&&!0!==e.errorTracking?.sourcemaps.disableGit&&!0!==e.disableGit)try{const e=await(async e=>{let t,n,s;return[t,n,s]=await Promise.all([Ze(e),nt(e),st(e)]),{hash:n,remote:t,trackedFilesMatcher:new Xe(s)}})(await(async e=>{const t={baseDir:e||process.cwd(),binary:"git",maxConcurrentProcesses:3};try{const e=g(t),n=await e.revparse("--show-toplevel");t.baseDir=n}catch{}return g(t)})(t.cwd));t.git=e}catch(e){n.error(`Could not get git information: ${e.message}`)}}}]},rt="datadog-injection-plugin",at=/^https?:\/\//,ut=async(e,t,n=process.cwd())=>{let s;const i=await(async e=>"function"==typeof e.value?e.value():e.value)(e);try{if("file"===e.type)s=i.match(at)?await(async(e,t=5e3)=>{let n;return Promise.race([M({retries:2,minTimeout:100,url:e}).finally((()=>{t&&clearTimeout(n)})),new Promise(((e,s)=>{n=setTimeout((()=>{s(new Error("Timeout"))}),t)}))])})(i):await(async(e,t=process.cwd())=>{const n=qe(t,e);return o(n,{encoding:"utf-8"})})(i,n);else{if("code"!==e.type)throw new Error(`Invalid item type "${e.type}", only accepts "code" or "file".`);s=i}}catch(n){const o=`${e.type} - ${P(i)}`;e.fallback?(t.info(`Fallback for "${o}": ${n.toString()}`),s=await ut(e.fallback,t)):(t.warn(`Failed "${o}": ${n.toString()}`),s="")}return s},pt=e=>{if(0===e.size)return"";return`// begin injection by Datadog build plugins\n${Array.from(e.values()).map((e=>`(() => {${e}})();`)).join("\n\n")}\n// end injection by Datadog build plugins`},ct=async(e,t,n,s=process.cwd())=>{const o=await(async(e,t,n=process.cwd())=>{const s=new Map;for(const[o,i]of e.entries()){const e=await ut(i,t,n);e&&s.set(o,{value:e,position:i.position||Z.BEFORE})}return s})(t,e,s);for(const[e,t]of o.entries())n[t.position].set(e,t.value)},lt=i.promises,dt=(e,t,n)=>({setup(s){const{onStart:o,onResolve:r,onLoad:a,onEnd:p,esbuild:c,initialOptions:l}=s,d=[],m=`${N()}.${Z.MIDDLE}.${$}.js`,f=i.realpathSync(y.tmpdir()),h=u.resolve(f,m),g=new RegExp(`${m}$`),w=l.inject;l.inject=w?[...w]:[],l.inject.push(h),o((async()=>{d.push(...await D(s,t,e)),s.initialOptions.inject=w;try{await O(h,"")}catch(t){e.error(`Could not create the files: ${t.message}`)}})),r({filter:g},(async e=>({path:e.path,namespace:rt}))),a({filter:g,namespace:rt},(async()=>({contents:pt(n[Z.MIDDLE])||" ",resolveDir:t.cwd,loader:"js"}))),p((async s=>{if(!s.metafile)return void e.warn("Missing metafile from build result.");const o=pt(n[Z.BEFORE]),i=pt(n[Z.AFTER]);if(!o&&!i)return;const r=Object.entries(s.metafile.outputs).map((([e,n])=>{const s=n.entryPoint;if(!s)return;return d.find((e=>e.resolved.endsWith(s)))?qe(t.cwd,e):void 0})).filter(Boolean).map((async e=>{const t=await lt.readFile(e,"utf-8"),n=await c.transform(t,{loader:"default",banner:o,footer:i});await lt.writeFile(e,n.code)}));await Promise.all(r)}))}}),mt=$,ft="?inject-proxy",ht=e=>({banner:t=>t.isEntry?pt(e[Z.BEFORE]):"",async resolveId(t,n,s){if(j(t))return{id:t,moduleSideEffects:!0};if(s.isEntry&&pt(e[Z.MIDDLE])){const e=await this.resolve(t,n,s);if(!e||e.external)return e;return(await this.load(e)).moduleSideEffects=!0,`${e.id}${ft}`}return null},load(t){if(j(t))return pt(e[Z.MIDDLE]);if(t.endsWith(ft)){const e=t.slice(0,-13),n=this.getModuleInfo(e);let s=`import ${JSON.stringify(mt)};\nexport * from ${JSON.stringify(e)};`;return n?.hasDefaultExport&&(s+=`export { default } from ${JSON.stringify(e)};`),s}return null},footer:t=>t.isEntry?pt(e[Z.AFTER]):""}),gt=(e,t,n,s,o)=>r=>{const a=new WeakMap,p=(e=>{if(!e?.sources?.ConcatSource)return b(require.resolve("webpack"))("webpack-sources").ConcatSource;return e.sources.ConcatSource})(e),c=u.resolve(n.bundler.outDir,`${N()}.${Z.MIDDLE}.${$}.js`);T(c,"");const l=()=>{(async e=>{i.rmSync(e,{force:!0,maxRetries:3,recursive:!0})})(c)};r.hooks.shutdown?r.hooks.shutdown.tap(rt,l):(r.hooks.done.tap(rt,l),r.hooks.failed.tap(rt,l));r.hooks.beforeRun.tapPromise(rt,(async()=>{await ct(t,s,o,n.cwd)})),r.hooks.compilation.tap(rt,(t=>{const n=()=>{const e=pt(o[Z.BEFORE]),n=pt(o[Z.AFTER]);for(const s of t.chunks)if(s.canBeInitial())for(const o of s.files)t.updateAsset(o,(t=>{const s=a.get(t);if(!s||s.banner!==e||s.footer!==n){const s=new p(e,"\n",t,"\n",n);return a.set(t,{source:s,banner:e,footer:n}),s}return s.source}))};if(t.hooks.processAssets){const s=e.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS;t.hooks.processAssets.tap({name:rt,stage:s},n)}else t.hooks.optimizeChunkAssets.tap({name:rt},n)}));const d=(e=>{const s="webpack4"===n.bundler.fullName?c:{import:[c]},o=e=>{for(const[n,s]of Object.entries(e))"object"==typeof s?(s.import=s.import||[],s.import.unshift(c)):"string"==typeof s?e[n]=[c,s]:Array.isArray(s)?s.unshift(c):t.error("Invalid entry type: "+typeof s)};return e?"function"==typeof e?async()=>{const t=await e();return o(t),t}:"object"!=typeof e?"string"==typeof e?[s,e]:(t.error("Invalid entry type: "+typeof e),e):(o(e),e):{ddHelper:s}})(r.options.entry);r.options.entry=d},wt=(e,t)=>{const n=t.getLogger(rt),s=new Map,o={[Z.BEFORE]:new Map,[Z.MIDDLE]:new Map,[Z.AFTER]:new Map};t.inject=e=>{s.set(N(),e)};const i={name:rt,enforce:"post",esbuild:dt(n,t,o),webpack:gt(e,n,t,s,o),rspack:gt(e,n,t,s,o),rollup:ht(o),vite:{...ht(o),enforce:"pre"}};var r;return r=t.bundler.fullName,["rspack","webpack4","webpack5","webpack"].includes(r)?(i.loadInclude=e=>!!j(e)||null,i.load=e=>j(e)?{code:pt(o[Z.MIDDLE])}:null):i.buildStart=async()=>{await ct(n,s,o,t.cwd)},[i]},yt={[re]:ze},bt="datadog-build-plugins";var vt="2.5.1-dev-7";const $t=(({bundler:n,version:s})=>e(((e,o)=>{const i=((e={})=>({auth:{},disableGit:!1,logLevel:"warn",...e}))(e);"esbuild"===o.framework&&(o.esbuildHostName=bt);const r=(({options:e,bundlerName:t,bundlerVersion:n,version:s})=>{const o=process.cwd(),i="webpack"===t?n.split(".")[0]:"",r={errors:[],warnings:[],logs:[],bundler:{name:t,fullName:`${t}${i}`,variant:i,version:n}},a=process.env.BUILD_PLUGINS_ENV||"production",u=k.includes(a)?a:"development";return{auth:e.auth,pluginNames:[],bundler:{...r.bundler,outDir:o},build:r,cwd:o,env:u,getLogger:x(r,e.logLevel),inject:()=>{throw new Error("Inject function called before it was initialized.")},sendLog:()=>{throw new Error("SendLog function called before it was initialized.")},start:Date.now(),version:s}})({options:i,bundlerVersion:n.version||n.VERSION,bundlerName:o.framework,version:s});r.pluginNames.push(bt);const a=[...xe(r),...Je(r),...Qe(r),...it(i,r),...wt(n,r)];if(i.customPlugins){const e=i.customPlugins(i,r);a.push(...e)}i[I]&&!0!==i[I].disabled&&a.push(...X(i,r)),i[ee]&&!0!==i[ee].disabled&&a.push(...ie(i,r)),i[re]&&!0!==i[re].disabled&&a.push(...Ne(i,r)),r.pluginNames.push(...a.map((e=>e.name)));const u=new Set(r.pluginNames.filter((e=>r.pluginNames.filter((t=>t===e)).length>1)));if(u.size>0)throw new Error(`Duplicate plugin names: ${t.bold.red(Array.from(u).join(", "))}`);return a})))({bundler:v,version:vt}).rspack,kt=vt,St=yt;export{$t as datadogRspackPlugin,St as helpers,kt as version};
12
+ `;o.info(u),await V(a,e.sourcemaps,s,o)},Q=`https://sourcemap-intake.${process.env.DATADOG_SITE||"datadoghq.com"}/api/v2/srcmap`,X=e=>{const n=t.bold.red,s=e[E]||{},o={errors:[]};if(s.sourcemaps){s.sourcemaps.releaseVersion||o.errors.push(`${n("sourcemaps.releaseVersion")} is required.`),s.sourcemaps.service||o.errors.push(`${n("sourcemaps.service")} is required.`),s.sourcemaps.minifiedPathPrefix||o.errors.push(`${n("sourcemaps.minifiedPathPrefix")} is required.`),s.sourcemaps.minifiedPathPrefix&&((e=>{let t;try{t=new URL(e).host}catch{}return!(!t&&!e.startsWith("/"))})(s.sourcemaps.minifiedPathPrefix)||o.errors.push(`${n("sourcemaps.minifiedPathPrefix")} must be a valid URL or start with '/'.`));const e={bailOnError:!1,disableGit:!1,dryRun:!1,maxConcurrency:20,intakeUrl:process.env.DATADOG_SOURCEMAP_INTAKE_URL||s.sourcemaps.intakeUrl||Q,...s.sourcemaps};o.config=e}return o},Z=(e,t)=>{const n=t.getLogger(M),s=((e,t)=>{const n=[],s=X(e);if(n.push(...s.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${M}.`);const o={...e[E],sourcemaps:void 0};return s.config&&(o.sourcemaps=s.config),o})(e,n);return[{name:M,enforce:"post",async writeBundle(){s.disabled||s.sourcemaps&&await Y(s,t,n)}}]};var ee=(e=>(e[e.BEFORE=0]="BEFORE",e[e.MIDDLE=1]="MIDDLE",e[e.AFTER=2]="AFTER",e))(ee||{});const te="rum",ne="datadog-rum-plugin",se=e=>`DD_RUM.init({${JSON.stringify(e.sdk).replace(/(^{|}$)/g,"")}});\n`,oe=(e,t)=>{const n=e.sdk;if(n.clientToken)return se(e);if(!t.auth?.apiKey||!t.auth?.appKey)throw new Error('Missing "auth.apiKey" and/or "auth.appKey" to fetch "rum.sdk.clientToken".');return async()=>{let s;try{const e=await x({url:`https://api.datadoghq.com/api/v2/rum/applications/${n.applicationId}`,type:"json",auth:t.auth});s=e.data?.attributes?.client_token}catch(e){throw new Error(`Could not fetch the clientToken: ${e.message}`)}if(!s)throw new Error("Missing clientToken in the API response.");return se({...e,sdk:{clientToken:s,...n}})}},re=e=>{const n=t.bold.red,s=e[te]||{},o={errors:[]};if(s.sdk){s.sdk.applicationId||o.errors.push(`Missing ${n("applicationId")} in the SDK configuration.`),e.auth?.apiKey&&e.auth?.appKey||s.sdk.clientToken||o.errors.push(`Missing ${n('"auth.apiKey"')} and/or ${n('"auth.appKey"')} to fetch missing client token.`);const t={applicationId:"unknown_application_id",allowUntrustedEvents:!1,compressIntakeRequests:!1,defaultPrivacyLevel:"mask",enablePrivacyForActionName:!1,sessionReplaySampleRate:0,sessionSampleRate:100,silentMultipleInit:!1,site:"datadoghq.com",startSessionReplayRecordingManually:!1,storeContextsAcrossPages:!1,telemetrySampleRate:20,traceSampleRate:100,trackingConsent:"granted",trackLongTasks:!1,trackResources:!1,trackUserInteractions:!1,trackViewsManually:!1};o.config={...t,...s.sdk}}return o},ie=(e,t)=>{const n=((e,t)=>{const n=[],s=re(e);if(n.push(...s.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${ne}.`);const o={...e[te],sdk:void 0};return s.config&&(o.sdk=s.config),o})(e,t.getLogger(ne));return n.sdk&&(t.inject({type:"file",position:ee.MIDDLE,value:s.join(__dirname,"./rum-browser-sdk.js")}),t.inject({type:"code",position:ee.MIDDLE,value:oe(n,t)})),[]},ae="telemetry",ue="datadog-telemetry-plugin",pe=[e=>/modules\.tree\.(count|size)$/.test(e.metric)?null:e,e=>e.tags.some((e=>/^assetName:.*\.map$/.test(e)||/^moduleName:\/node_modules/.test(e)))?null:e,e=>{const t={size:1e5,count:10,duration:1e3};return/(entries|loaders|warnings|errors)\.count$/.test(e.metric)&&(t.count=0),/(modules\.(dependencies|dependents)$)/.test(e.metric)&&(t.count=30),/modules\.tree\.count$/.test(e.metric)&&(t.count=150),/modules\.tree\.size$/.test(e.metric)&&(t.size=15e5),/entries\.size$/.test(e.metric)&&(t.size=0),/entries\.modules\.count$/.test(e.metric)&&(t.count=0),e.value>t[e.type]?e:null}],ce=(e,t)=>({type:"gauge",tags:[...e.tags,...t.tags],metric:`${t.prefix?`${t.prefix}.`:""}${e.metric}`,points:[[t.timestamp,e.value]]}),le=(e="")=>e.endsWith("/")?e:`${e}/`,de=(e,t)=>{let n=e;return e.split(le(t)),n.split("!").pop().replace(/(.*)?\/node_modules\//,"/node_modules/").replace(/^((\.)*\/)+/,"")},fe=(e,t)=>e.split("!").pop().replace(le(t),"./"),me=(e,t,n)=>{let s=e.name||e.userRequest;return s||(s=((e,t)=>{let n=e.userRequest;if(!n){let s;s=t.moduleGraph&&"function"==typeof t.moduleGraph.getIssuer?t.moduleGraph.getIssuer(e):e.issuer,n=s?.userRequest,n||(n=e._identifier?.split("!").pop())}return n||"unknown"})(e,t)),fe(s||"no-name",n)},he=e=>e.replace(/^.*\/node_modules\/(@[a-z0-9][\w-.]+\/[a-z0-9][\w-.]*|[^/]+).*$/,"$1"),ge=e=>e.map((e=>({type:e?.constructor?.name??typeof e,name:e?.name,value:"string"==typeof e?e:void 0}))),we=(e,t,n,s)=>{const o=new Set;if(s){const{timings:e}=s;e&&(e.tapables&&((e,t)=>{t.add({metric:"plugins.count",type:"count",value:e.size,tags:[]});for(const n of e.values()){let e=0,s=0;for(const o of Object.values(n.events)){let r=0;s+=o.values.length;for(const t of o.values){const n=t.end-t.start;r+=n,e+=n}t.add({metric:"plugins.hooks.duration",type:"duration",value:r,tags:[`pluginName:${n.name}`,`hookName:${o.name}`]}).add({metric:"plugins.hooks.increment",type:"count",value:o.values.length,tags:[`pluginName:${n.name}`,`hookName:${o.name}`]})}t.add({metric:"plugins.duration",type:"duration",value:e,tags:[`pluginName:${n.name}`]}).add({metric:"plugins.increment",type:"count",value:s,tags:[`pluginName:${n.name}`]})}})(e.tapables,o),e.loaders&&((e,t)=>{t.add({metric:"loaders.count",type:"count",value:e.size,tags:[]});for(const n of e.values())t.add({metric:"loaders.duration",type:"duration",value:n.duration,tags:[`loaderName:${n.name}`]}).add({metric:"loaders.increment",type:"count",value:n.increment,tags:[`loaderName:${n.name}`]})})(e.loaders,o))}((e,t)=>{const n=e.build.inputs||[],s=e.build.outputs||[],o=e.build.entries||[],r=e.build.warnings.length,i=e.build.errors.length,a=e.build.duration,u=new Map,p=new Map,c=new Map;for(const e of o){for(const t of e.inputs)u.has(t.filepath)||u.set(t.filepath,[]),u.get(t.filepath).push(e.name);for(const t of e.outputs){const n=t.filepath.replace(/\.map$/,"");c.has(n)||c.set(n,[]),c.get(n).push(e.name)}}for(const e of s)for(const t of e.inputs)p.has(t.filepath)||p.set(t.filepath,[]),p.get(t.filepath).push(e.name);t.add({metric:"assets.count",type:"count",value:s.length,tags:[]}).add({metric:"entries.count",type:"count",value:o.length,tags:[]}).add({metric:"errors.count",type:"count",value:i,tags:[]}).add({metric:"modules.count",type:"count",value:n.length,tags:[]}).add({metric:"warnings.count",type:"count",value:r,tags:[]}),a&&t.add({metric:"compilation.duration",type:"duration",value:a,tags:[]});for(const e of n){const n=[`moduleName:${e.name}`,`moduleType:${e.type}`];u.has(e.filepath)&&n.push(...u.get(e.filepath).map((e=>`entryName:${e}`))),p.has(e.filepath)&&n.push(...p.get(e.filepath).map((e=>`assetName:${e}`))),t.add({metric:"modules.size",type:"size",value:e.size,tags:n}).add({metric:"modules.dependencies",type:"count",value:e.dependencies.size,tags:n}).add({metric:"modules.dependents",type:"count",value:e.dependents.size,tags:n})}for(const e of s){const n=[`assetName:${e.name}`,`assetType:${e.type}`],s=e.filepath.replace(/\.map$/,"");c.has(s)&&n.push(...c.get(s).map((e=>`entryName:${e}`))),t.add({metric:"assets.size",type:"size",value:e.size,tags:n}).add({metric:"assets.modules.count",type:"count",value:e.inputs.length,tags:n})}for(const e of o){const n=[`entryName:${e.name}`];t.add({metric:"entries.size",type:"size",value:e.size,tags:n}).add({metric:"entries.modules.count",type:"count",value:e.inputs.length,tags:n}).add({metric:"entries.assets.count",type:"count",value:e.outputs.length,tags:n})}})(e,o);for(const e of o)if(t.filters?.length){let s=e;for(const n of t.filters){if(!s)break;s=n(e)}s&&n.add(ce(s,t))}else n.add(ce(e,t))},ye=async(e,t,n,o)=>{if("string"!=typeof t&&"object"!=typeof t&&!t)return;const{report:r,metrics:i}=e,a=Date.now();let u="";const p={timings:!0,metrics:!0};"object"==typeof t?(u=t.destination,p.timings=t.timings||!1,p.metrics=t.metrics||!1):"string"==typeof t&&(u=t);const c=s.resolve(o,u);try{const e={},t={};p.timings&&r?.timings&&(t.timings={content:{tapables:r.timings.tapables?Array.from(r.timings.tapables.values()):null,loaders:r.timings.loaders?Array.from(r.timings.loaders.values()):null,modules:r.timings.modules?Array.from(r.timings.modules.values()):null}}),p.metrics&&(t.metrics={content:Array.from(i)});const o=Object.entries(t).map((async([t,o])=>{const r=Date.now();n.debug(`Start writing ${t}.json.`);try{await(async(e,t)=>{const n=JSON.stringify(t,null,4);return R(e,n)})(s.join(c,`${t}.json`),o.content),n.debug(`Wrote ${t}.json in ${j(Date.now()-r)}`)}catch(s){n.error(`Failed to write ${t}.json in ${j(Date.now()-r)}`),e[t]=s}}));await Promise.all(o),n.debug(`Wrote files in ${j(Date.now()-a)}.`);const u=Object.keys(e);u.length&&n.error(`Couldn't write files.\n${u.map((t=>` - ${t}: ${e[t].toString()}`))}`)}catch(e){n.error(`Couldn't write files. ${e}`)}},be=t.bold.red,ve=t.bold.cyan,$e=e=>(t,n)=>{let s,o;return"function"==typeof e?(s=e(t),o=e(n)):(s=t[e],o=n[e]),s>o?-1:s<o?1:0},ke=(e,t)=>{if(!t||!t.size)return[];const n=Array.from(t.values());n.sort($e("duration"));const s={name:`${e} duration`,values:n.map((e=>({name:e.name,value:j(e.duration)}))),top:!0};n.sort($e("increment"));const o={name:`${e} hits`,values:n.map((e=>({name:e.name,value:e.increment.toString()}))),top:!0};return[s,o]},Se=(e,t,n)=>{const s=[];var o;n&&(s.push(...ke("Loader",n.timings.loaders)),s.push(...ke("Tapable",n.timings.tapables)),s.push(...ke("Module",n.timings.modules))),s.push(...(e=>{const t={name:"Module total dependents",values:[],top:!0},n={name:"Module total dependencies",values:[],top:!0},s={name:"Module size",values:[],top:!0},o={name:"Module aggregated size",values:[],top:!0},r=new Set,i=(e=>{const t={bundler:e.bundler,errors:e.errors,warnings:e.warnings,logs:e.logs,start:e.start,end:e.end,duration:e.duration,writeDuration:e.writeDuration,entries:[],inputs:[],outputs:[]};for(const n of e.entries||[]){const e={...n,inputs:[],outputs:[]};n.inputs&&(e.inputs=n.inputs.map((e=>e.filepath))),n.outputs&&(e.outputs=n.outputs.map((e=>e.filepath))),t.entries.push(e)}for(const n of e.inputs||[]){const e={...n,dependencies:[],dependents:[]};if(n.dependencies)for(const t of n.dependencies)e.dependencies.push(t.filepath);if(n.dependents)for(const t of n.dependents)e.dependents.push(t.filepath);t.inputs.push(e)}for(const n of e.outputs||[]){const e={...n,inputs:[]};n.inputs&&(e.inputs=n.inputs.map((e=>e.filepath))),t.outputs.push(e)}return t})(e.build),a=new Map,u=new Map,p=new Map;for(const e of i.inputs||[]){if("map"===e.type)continue;const t=new Set(e.dependencies),n=new Set(e.dependents);for(const n of t)p.has(n)||p.set(n,new Set),p.get(n).add(e.filepath);for(const t of n)u.has(t)||u.set(t,new Set),u.get(t).add(e.filepath);if(u.has(e.filepath)){const n=u.get(e.filepath);for(const e of n)t.add(e)}if(p.has(e.filepath)){const t=p.get(e.filepath);for(const e of t)n.add(e)}u.set(e.filepath,t),p.set(e.filepath,n),a.set(e.filepath,{name:e.name,size:e.size,dependencies:t,dependents:n})}for(const[e,t]of a){const n=u.get(e)||new Set,s=p.get(e)||new Set;let o=t.size;for(const e of n)o+=a.get(e)?.size||0;r.add({name:t.name,size:t.size,aggregatedSize:o,dependents:s,dependencies:n})}if(!r.size)return[t,n,s];const c=Array.from(r);return c.sort($e((e=>e.dependents.size))),t.values=c.map((e=>({name:e.name,value:e.dependents.size.toString()}))),c.sort($e((e=>e.dependencies.size))),n.values=c.map((e=>({name:e.name,value:e.dependencies.size.toString()}))),c.sort($e("size")),s.values=c.map((e=>({name:e.name,value:m(e.size)}))),c.sort($e("aggregatedSize")),o.values=c.map((e=>({name:e.name,value:m(e.aggregatedSize||e.size)}))),[t,n,s,o]})(e)),s.push(...(o=e,[{name:"Asset size",values:(o.build.outputs||[]).filter((e=>"map"!==e.type)).sort($e((e=>e.size))).map((e=>({name:e.name,value:m(e.size)}))),top:!0},{name:"Entry aggregated size",values:(o.build.entries||[]).sort($e((e=>e.size))).map((e=>({name:e.name,value:m(e.size)}))),top:!0},{name:"Entry number of modules",values:(o.build.entries||[]).sort($e((e=>e.size))).map((e=>({name:e.name,value:e.inputs.length.toString()})))||[],top:!0}])),s.push(...(e=>{const t={name:"General Numbers",values:[],top:!1},n=e.build.inputs?e.build.inputs.length:0,s=e.build.outputs?e.build.outputs.length:0,o=e.build.warnings.length,r=e.build.errors.length,i=e.build.entries?e.build.entries.length:0;return e.build.start&&t.values.push({name:"Overhead duration",value:j(e.build.start-e.start)}),e.build.duration&&t.values.push({name:"Build duration",value:j(e.build.duration)}),e.build.writeDuration&&t.values.push({name:"Write duration",value:j(e.build.writeDuration)}),t.values.push({name:"Number of modules",value:n.toString()},{name:"Number of assets",value:s.toString()},{name:"Number of entries",value:i.toString()},{name:"Number of warnings",value:o.toString()},{name:"Number of errors",value:r.toString()}),[t]})(e));const r=(e=>{let t="";for(const t of e){t.top&&t.values.length>=5&&(t.values=t.values.slice(0,5),t.name=`Top 5 ${t.name}`);for(const e of t.values)e.name=z(e.name,60)}const n=Math.max(...e.map((e=>e.name.length))),s=Math.max(...e.flatMap((e=>e.values.map((e=>e.name.length))))),o=Math.max(...e.flatMap((e=>e.values.map((e=>e.value.length))))),r=Math.max(n+4,s+o+4);for(const n of e){if(0===n.values.length)continue;const e=r-(n.name.length+4);t+=`\n== ${n.name} ${"=".repeat(e)}=\n`;for(const e of n.values){const n=o-e.value.length;t+=` [${be(e.value)}] ${" ".repeat(n)}${ve(e.name)}\n`}}return t})(s);t.info(r)},De=["onStart","onLoad","onResolve","onEnd"],Ee=new Map,Me=new Map,Pe=(e,t,n)=>{const s=Object.assign({},e);for(const o of De)s[o]=async(s,r)=>{const i=Ee.get(t)||{name:t,increment:0,duration:0,events:{}};i.events[o]=i.events[o]||{name:o,values:[]};return(0,e[o])(s,(async(...e)=>{const s=fe(e[0].path,n),a=Me.get(s)||{name:s,increment:0,duration:0,events:{}};a.events[o]=a.events[o]||{name:o,values:[]};const u=h.now();try{return await r(...e)}finally{const n=h.now(),r=n-u,p={start:u,end:n,duration:r,context:ge(e)};i.events[o].values.push(p),i.duration+=r,i.increment+=1,Ee.set(t,i),a.events[o].values.push(p),a.duration+=r,a.increment+=1,Me.set(s,a)}}))};return s},je=(e,t,n)=>({setup:s=>{t.build.start=Date.now(),s.initialOptions.metafile=!0,((e,t)=>{const n=e.initialOptions.plugins;if(n){const e=n.map((e=>({...e})));for(const s of n){if(s.name.includes(ue))continue;const n=s.setup;s.setup=async o=>{const r=Pe(o,s.name,t);await n({...r,initialOptions:{...r.initialOptions,plugins:e}})}}}})(s,t.cwd),s.onEnd((async t=>{if(!t.metafile)return void n.warn("Missing metafile, can't proceed with modules data.");const{plugins:s,modules:o}={plugins:Ee,modules:Me};e.report={timings:{tapables:s,modules:o}}}))}});class Te{constructor(e){this.started={},this.finished=[],this.cwd=e}buildModule(e,t){const n=me(e,t,this.cwd),s=(e=>(e.loaders||[]).map((e=>e.loader||e)).map(he))(e);s.length||s.push("no-loader"),this.started[n]={module:de(n),timings:{start:h.now(),duration:0,end:0},loaders:s}}succeedModule(e,t){const n=me(e,t,this.cwd),s=this.started[n];s&&(s.timings.end=h.now(),s.timings.duration=s.timings.end-s.timings.start,this.finished.push(s),delete this.started[n])}getResults(){const e=new Map,t=new Map;for(const n of this.finished){const s=n.timings.end-n.timings.start,o=t.get(n.module)||{name:n.module,increment:0,duration:0,events:{}},r=n.loaders.join(",");o.events[r]=o.events[r]||{name:r,values:[]},o.events[r].values.push(n.timings),o.increment+=1,o.duration+=s,t.set(n.module,o);for(const t of n.loaders){const n=e.get(t)||{name:t,increment:0,duration:0,events:{}};n.increment+=1,n.duration+=s,e.set(t,n)}}return{loaders:e,modules:t}}}class Oe{constructor(e){this.monitoredTaps={},this.tapables=[],this.hooks={},this.timings=new Map,this.ignoredHooks=["normalModuleLoader"],this.cwd=e}saveResult(e,t,n,s,o,r){const i=this.timings.get(t)||{name:t,duration:0,increment:0,events:{}};i.events[n]||(i.events[n]={name:n,values:[]}),i.events[n].values.push({start:o,end:r,duration:r-o,context:s,type:e}),i.duration+=r-o,i.increment+=1,this.timings.set(t,i)}getResults(){const e=this.timings;for(const[t,n]of this.timings){const s=n;s.duration=Object.values(n.events).map((e=>e.values.reduce(((e,t)=>e+t.end-t.start),0))).reduce(((e,t)=>e+t),0),e.set(t,s)}return{monitoredTaps:this.monitoredTaps,tapables:this.tapables,hooks:this.hooks,timings:e}}getPromiseTapPatch(e,t,n,s){return(...o)=>{this.checkNewHooks();const r=h.now(),i=t.apply(this,o),a=()=>{this.saveResult(e,n,s,ge(o),r,h.now())};return i.then(a,a),i}}getAsyncTapPatch(e,t,n,s){return(...o)=>{this.checkNewHooks();const r=h.now(),i=o.pop();return t.apply(this,[...o,(...t)=>(this.saveResult(e,n,s,ge(o),r,h.now()),i(...t))])}}getDefaultTapPatch(e,t,n,s){return(...o)=>{this.checkNewHooks();const r=h.now(),i=t.apply(this,o);return this.saveResult(e,n,s,ge(o),r,h.now()),i}}getTapPatch(e,t,n,s){switch(e){case"promise":return this.getPromiseTapPatch(e,t,n,s);case"async":return this.getAsyncTapPatch(e,t,n,s);default:return this.getDefaultTapPatch(e,t,n,s)}}newTap(e,t,n,s){return(o,r)=>{const i="string"==typeof(a=o)?a:a.name;var a;const u=`${t}-${i}`;if(this.monitoredTaps[u])return n.call(s,o,r);this.monitoredTaps[u]=!0;const p=this.getTapPatch(e,r,i,t);return n.call(s,o,p)}}replaceTaps(e,t){t.tap=this.newTap("default",e,t.tap,t),t.tapAsync=this.newTap("async",e,t.tapAsync,t),t.tapPromise=this.newTap("promise",e,t.tapPromise,t)}patchHook(e,t,n){n._fakeHook||e.includes(ue)||(this.hooks[e]||(this.hooks[e]=[]),this.hooks[e].includes(t)||(this.hooks[e].push(t),this.replaceTaps(t,n)))}patchHooks(e){const t=e.constructor.name,n=Object.keys(e.hooks).filter((e=>!this.ignoredHooks.includes(e)&&!this.hooks[t]?.includes(e)));for(const s of n)this.patchHook(t,s,e.hooks[s])}checkNewHooks(){for(const e of this.tapables)this.patchHooks(e)}throughHooks(e){this.tapables.includes(e)||this.tapables.push(e),this.patchHooks(e)}}const xe=(e,t)=>async n=>{t.build.start=Date.now();const s={name:ue},o=new Oe(t.cwd),r=new Te(t.cwd);o.throughHooks(n),n.hooks.thisCompilation.tap(s,(e=>{o.throughHooks(e),e.hooks.buildModule.tap(s,(t=>{r.buildModule(t,e)})),e.hooks.succeedModule.tap(s,(t=>{r.succeedModule(t,e)}))})),n.hooks.afterEmit.tapPromise(s,(async t=>{const{timings:n}=o.getResults(),{loaders:s,modules:i}=r.getResults();e.report={timings:{tapables:n,loaders:s,modules:i}}}))},ze={filters:pe},Ne=(e,t)=>{const n=t.getLogger(ue);let s=0;const o={start:Date.now()},r=(e=>{const t=e[ae]||{},n=t.endPoint||"https://app.datadoghq.com";return{disabled:!1,enableTracing:!1,filters:pe,output:!1,prefix:"",tags:[],...t,endPoint:n.startsWith("http")?n:`https://${n}`}})(e),i=[],a={name:ue,enforce:"pre",esbuild:je(o,t,n),webpack:xe(o,t),rspack:xe(o,t)},u={name:"datadog-universal-telemetry-plugin",enforce:"post",buildStart(){t.build.start=t.build.start||Date.now()},buildEnd(){s=Date.now()},async writeBundle(){t.build.end=Date.now(),t.build.duration=t.build.end-t.build.start,t.build.writeDuration=t.build.end-s;const e=new Set,i=(e=>({timestamp:Math.floor((e.timestamp||Date.now())/1e3),tags:e.tags,prefix:e.prefix,filters:e.filters}))(r);we(t,i,e,o.report),await ye({report:o.report,metrics:e},r.output,n,t.bundler.outDir),Se(t,n,o.report),await((e,t,n)=>{const s=Date.now();if(!t.apiKey)return void n.info("Won't send metrics to Datadog: missing API Key.");if(!e.size)return void n.info("No metrics to send.");const o=new Map;for(const t of e)o.has(t.metric)||o.set(t.metric,0),o.set(t.metric,o.get(t.metric)+1);const r=Array.from(o.entries()).map((([e,t])=>`${e} - ${t}`));return n.debug(`\nSending ${e.size} metrics.\nMetrics:\n - ${r.join("\n - ")}`),x({method:"POST",url:`${t.endPoint}/api/v1/series?api_key=${t.apiKey}`,getData:()=>({data:JSON.stringify({series:Array.from(e)})})}).then((()=>{n.debug(`Sent metrics in ${j(Date.now()-s)}.`)})).catch((e=>{n.error(`Error sending metrics ${e}`)}))})(e,{apiKey:t.auth?.apiKey,endPoint:r.endPoint},n)}};return r.enableTracing&&i.push(a),i.push(u),i},Re="datadog-analytics-plugin",Ie=e=>{const t=e.getLogger(Re);return e.sendLog=async(n,s={})=>{if("production"===e.env)try{const t={name:e.bundler.name,version:e.bundler.version};await x({retries:2,minTimeout:100,url:"https://browser-http-intake.logs.datadoghq.com/v1/input/pub44d5f4eb86e1392037b7501f7adc540e",method:"POST",type:"json",getData:async()=>{const o={ddsource:`@datadog/${t.name}-plugin`,env:e.env,message:n,service:"build-plugins",bundler:t,plugins:e.pluginNames,version:e.version,team:"language-foundations",...s};return{data:JSON.stringify(o),headers:{"Content-Type":"application/json"}}}})}catch(e){t.debug(`Could not submit data to Datadog: ${e}`)}},[{name:Re,async buildStart(){await e.sendLog("Build started")}}]},Ae=/\.(?!.*(?:\.|\/|\\))(\w{1,})/g,Ce=/(\?|%3F|\|)+/gi,Fe=e=>{return"unknown"===e?e:e.includes("webpack/runtime")?"runtime":(t=qe(e),Ae.lastIndex=0,Ae.exec(t)?.[1]||"unknown");var t},Le=["unknown","commonjsHelpers.js","vite/preload-helper.js"],_e=(e,t,n)=>{const s=new Set;for(const n of e){const e=qe(n);N(n)||e===t||Le.includes(e)||s.add(e)}return s},qe=e=>e.split("!").pop().split(Ce).shift().replace(/^[^\w\s.,!@#$%^&*()=+~`\-/]+/,""),Ke=(e,t)=>N(t)?$:"unknown"===t?t:t.includes("webpack/runtime")?t.replace("webpack/runtime/","").replace(/ +/g,"-"):t.split("!").pop().replace(F(e.cwd,e.bundler.outDir),"").replace(e.cwd,"").split("node_modules").pop().split(Ce).shift().replace(/^((\.\.?)?\/)+/,""),We=(e,t)=>Object.fromEntries(Object.entries(e).map((([e,n])=>[F(t,e),n]))),Be=(e,t)=>({setup(n){const o=new Map,r=[];n.onStart((async()=>{r.push(...await T(n,e,t));for(const t of r){const n=Ke(e,t.resolved);t.name?o.set(n,t.name):o.set(n,n)}})),n.onEnd((n=>{const r=e.cwd;for(const t of n.errors)e.build.errors.push(t.text);for(const t of n.warnings)e.build.warnings.push(t.text);if(!n.metafile){const n="Missing metafile from build report.";return e.build.warnings.push(n),void t.warn(n)}const i=[],a=[],u=[],p=[],c=[],l={},d={},f=We(n.metafile.inputs,r),m=We(n.metafile.outputs,r),h=e=>{if(!N(e))return e;const t=f[F(r,e)];if(!t)return e;const n=t.imports.find((e=>!N(e.path)));return n?n.path:e};for(const[t,s]of Object.entries(n.metafile.inputs)){if(N(t))continue;const n=F(r,t),o={name:Ke(e,t),filepath:n,dependents:new Set,dependencies:new Set,size:s.bytes,type:Fe(t)};l[n]=o,i.push(o)}for(const[s,i]of Object.entries(n.metafile.outputs)){const n=F(r,s),c=Ke(e,n),f=[];for(const e of Object.keys(i.inputs)){if(N(e))continue;const n=l[F(r,e)];n?f.push(n):t.debug(`Input ${e} not found for output ${c}`)}if(i.entryPoint&&!f.length){const e=l[F(r,i.entryPoint)];if(!e){t.debug(`Input ${i.entryPoint} not found for output ${c}`);continue}f.push(e)}const m={name:c,filepath:n,inputs:f,size:i.bytes,type:Fe(n)};if(d[n]=m,"map"===m.type&&p.push(m),a.push(m),!i.entryPoint)continue;const g=l[F(r,h(i.entryPoint))];if(g){if(!o.get(g.name))continue;const e={...m,name:o.get(g.name)||g.name,outputs:[m],size:m.size};u.push(e)}}for(const e of p){const n=d[e.filepath.replace(/\.map$/,"")];n?e.inputs.push(n):t.debug(`Could not find output for sourcemap ${e.name}`)}const g={inputs:{report:l,meta:f},outputs:{report:d,meta:m}},w=/(<runtime>|https:|file:|data:|#)/g,y=e=>!N(e)&&!e.match(w),b=(n,o,a={})=>{if(!y(n))return a;const u=o.report[n];if(!u)return t.debug(`Could not find report's ${n}`),a;if(a[u.filepath])return a;a[u.filepath]=u;const p=o.meta[n];if(!p)return t.debug(`Could not find metafile's ${n}`),a;if(!p.imports||!p.imports.length)return a;for(const t of p.imports){const p=t.path.match(/^\.\.?\//),c=p?s.dirname(n):r,l=F(c,t.path);if(t.external){if(y(t.path)){const n=p?l:t.path,s=g.inputs.report[n]||{filepath:n,name:Ke(e,t.path),size:0,type:"external",dependencies:new Set,dependents:new Set};"dependencies"in u&&(s.dependents.add(u),u.dependencies.add(s)),"inputs"in u&&!u.inputs.includes(s)&&u.inputs.push(s),i.includes(s)||i.push(s),g.inputs.report[n]=s,a[s.filepath]=s}}else b(l,o,a)}return a};for(const e of u){const t={},n={};for(const n of e.inputs)b(n.filepath,g.inputs,t);for(const t of e.outputs)b(t.filepath,g.outputs,n);e.inputs=Object.values(t),e.outputs=Object.values(n),e.size=e.outputs.reduce(((e,t)=>e+t.size),0),c.push(e)}for(const e of i){if("external"===e.type)continue;const n=g.inputs.meta[e.filepath];if(n)for(const o of n.imports){if(!y(o.path))continue;const n=o.path.match(/^\.?\.\//),i=n?s.dirname(e.filepath):r,a=F(i,o.path);let u;if(o.external){const e=n?a:o.path;u=g.inputs.report[e]}else u=g.inputs.report[a];u?(e.dependencies.add(u),u.dependents.add(e)):t.debug(`Could not find input file of ${o.path} imported from ${e.name}`)}else t.debug(`Could not find metafile's ${e.name}`)}e.build.outputs=a,e.build.inputs=i,e.build.entries=c}))}}),He=(e,t)=>{const n={};return{onLog(t,n){"warn"===t&&e.build.warnings.push(n.message||n.toString())},renderError(t){t&&e.build.errors.push(t.message)},moduleParsed(e){const t=qe(e.id),s=n[t]||{dependencies:new Set,dependents:new Set},o=_e(new Set([...e.dynamicallyImportedIds,...e.importedIds]),t),r=_e(new Set([...e.dynamicImporters,...e.importers]),t);for(const e of r)s.dependents.add(e);for(const e of o)s.dependencies.add(e);n[t]=s},writeBundle(s,o){const r=[],i=[],a=[],u=[],p={},c=[],l={},d={};for(const[e,{dependencies:t,dependents:s}]of Object.entries(n)){for(const s of t){const t=qe(s);n[t]||(n[t]={dependencies:new Set,dependents:new Set}),n[t].dependents.has(e)||n[t].dependents.add(e)}for(const t of s){const s=qe(t);n[s]||(n[s]={dependencies:new Set,dependents:new Set}),n[s].dependencies.has(e)||n[s].dependencies.add(e)}}for(const[s,c]of Object.entries(o)){const o={name:s,filepath:F(e.bundler.outDir,s),inputs:[],size:"code"in c?Buffer.byteLength(c.code,"utf8"):Buffer.byteLength(c.source,"utf8"),type:Fe(s)};if("map"===o.type&&u.push(o),"modules"in c)for(const[t,n]of Object.entries(c.modules)){if(qe(t)!==t)continue;const s={name:Ke(e,t),dependencies:new Set,dependents:new Set,filepath:t,size:n.originalLength,type:Fe(t)};o.inputs.push(s),l[s.filepath]=s,r.push(s)}if("imports"in c)for(const s of c.imports){const i=qe(s);if(!n[i]){p[F(e.bundler.outDir,i)]=o;continue}if(l[i]){t.debug(`Input report already there for ${i} from ${o.name}.`);continue}const a={name:Ke(e,s),dependencies:new Set,dependents:new Set,filepath:i,size:0,type:"external"};o.inputs.push(a),l[a.filepath]=a,r.push(a)}"isEntry"in c&&c.isEntry&&a.push({...o,name:c.name,size:0,outputs:[o]}),d[o.filepath]=o,i.push(o)}for(const[e,n]of Object.entries(p)){const s=d[e];s?n.inputs.includes(s)||n.inputs.push(s):t.debug(`Could not find the output report for ${e}.`)}for(const s of r){const o=n[s.filepath];if(o){for(const n of o.dependencies){const o=l[n];o?s.dependencies.add(o):t.debug(`Could not find input for dependency ${Ke(e,n)} of ${s.name}`)}for(const n of o.dependents){const o=l[n];o?s.dependents.add(o):t.debug(`Could not find input for dependent ${Ke(e,n)} of ${s.name}`)}}else t.debug(`Could not find the import report for ${s.name}.`)}if(u.length)for(const e of u){const n=e.filepath.replace(/\.map$/,""),s=d[n];s?e.inputs.push(s):t.debug(`Could not find output for sourcemap ${e.name}`)}const f=(n,s={})=>{if(s[n])return s;const r=Ke(e,n),i=d[n];if(!i){return!!l[r]||t.debug(`Could not find output for ${r}`),s}s[n]=i;const a=o[Ke(e,n)];if(!a)return t.debug(`Could not find asset for ${r}`),s;const u=[];"imports"in a&&u.push(...a.imports),"dynamicImports"in a&&u.push(...a.dynamicImports);for(const t of u)f(F(e.bundler.outDir,t),s);return s};for(const e of a){const t=f(e.filepath);e.outputs=Object.values(t),e.inputs=Array.from(new Set(e.outputs.flatMap((e=>e.inputs)))),e.size=e.outputs.reduce(((e,t)=>e+t.size),0),c.push(e)}e.build.inputs=r,e.build.outputs=i,e.build.entries=c}}},Ue=(e,t,n)=>s=>{const o=[],r=[],i=[],a=new Map,u=new Map,p=new Map,c=new Map,l=[],d=new Map,f=e=>!(!e||e.startsWith("webpack/runtime")||e.includes("/webpack4/buildin/")||e.startsWith("multi ")||N(e)),m=e=>e.replace(/(^external[^"]+"|"$)/g,""),h=e=>{const t={identifier:e.identifier()};"resource"in e&&"string"==typeof e.resource&&(t.resource=e.resource),"request"in e&&"string"==typeof e.request&&(t.request=e.request),"rawRequest"in e&&"string"==typeof e.rawRequest&&(t.rawRequest=e.rawRequest),"userRequest"in e&&"string"==typeof e.userRequest&&(t.userRequest=e.userRequest);const s=new Set;for(const[o,r]of Object.entries(t))r&&(c.has(r)?(n.debug(`Module ${e.identifier()} is already indexed by ${o}.`),c.get(r)!==e&&n.debug(`Module ${e.identifier()} is indexed with a different value.`)):(s.add(r),r.startsWith("external ")&&s.add(m(r))));return s},g=(e,t=[])=>{if("dependencies"in e)for(const n of e.dependencies)t.push(n),g(n,t);if("blocks"in e)for(const n of e.blocks)g(n,t);return t},w=(e,t)=>{if("request"in t&&t.request){if(c.has(t.request))return c.get(t.request);if(e.context&&c.has(F(e.context,t.request)))return c.get(F(e.context,t.request))}},y=e=>!(!("externalType"in e)||!e.externalType)||(!(!("external"in e)||!e.external)||!!e.identifier?.().startsWith("external "));s.hooks.thisCompilation.tap(t,(s=>{s.hooks.finishModules.tap(t,(t=>{for(const e of t){const t=h(e);for(const n of t)c.set(n,e)}for(const n of t){const t=n.identifier(),s=Ke(e,t),r=new Set(g(n).map((e=>{const s=w(n,e);if(!s?.identifier())return!1;const o=s.identifier();return!!f(o)&&(o!==t&&(y(s)?m(o):o))})).filter(Boolean));if(!f(t))continue;for(const e of r){const n=d.get(e)||{dependencies:new Set,dependents:new Set};n.dependents.add(t),d.set(e,n)}const i=d.get(t)||{dependents:new Set,dependencies:new Set};for(const e of r)i.dependencies.add(e);d.set(t,i);const u=y(n)?{size:0,name:m(s),dependencies:new Set,dependents:new Set,filepath:t,type:"external"}:{size:n.size()||0,name:s,dependencies:new Set,dependents:new Set,filepath:t,type:Fe(t)};o.push(u),a.set(t,u),y(n)&&a.set(m(t),u)}for(const e of o){const t=d.get(e.filepath);if(t){for(const s of t.dependencies){const t=a.get(s);t?e.dependencies.add(t):n.debug(`Could not find input of dependency ${s}`)}for(const s of t.dependents){const t=a.get(s);t?e.dependents.add(t):n.debug(`Could not find input of dependent ${s}`)}}else n.debug(`Could not find dependency report for ${e.name}`)}}))})),s.hooks.afterEmit.tap(t,(t=>{const s=t.chunks,c=t.getAssets(),d=t=>[...t.files||[],...t.auxiliaryFiles||[]].map((t=>F(e.bundler.outDir,t))),m=t.chunkGraph;for(const e of s){const t=d(e),n=(m?m?.getChunkModules(e):"getModules"in e&&"function"==typeof e.getModules?e.getModules():[]).flatMap((e=>"modules"in e&&Array.isArray(e.modules)?e.modules.map((e=>e.identifier())):e.identifier())).filter(f);for(const e of t){if("map"===Fe(e))continue;const t=p.get(e)||[];p.set(e,[...t,...n])}}for(const t of c){const s={size:t.source.size()||0,name:t.name,inputs:[],filepath:F(e.bundler.outDir,t.name),type:Fe(t.name)};if(u.set(s.filepath,s),r.push(s),"map"===s.type){l.push(s);continue}const o=p.get(s.filepath);if(o)for(const e of o){const t=a.get(e);t?s.inputs.push(t):n.debug(`Could not find input of ${e}`)}else n.debug(`Could not find modules for ${s.name}`)}for(const e of l){const t=u.get(e.filepath.replace(/\.map$/,""));t?e.inputs.push(t):n.debug(`Output not found for sourcemap ${e.name}`)}for(const[s,o]of t.entrypoints){const t=[],r=[];let a=0;const p=o.chunks.flatMap(d),c=o.chunks.filter((e=>m?m.getChunkEntryModulesIterable(e):"hasEntryModule"in e&&"function"==typeof e.hasEntryModule&&e.hasEntryModule())).flatMap((e=>Array.from(e.files))).filter((e=>e.includes(s)||o.name&&e.includes(o.name))).find((e=>"js"===Fe(e)));for(const e of p){const s=u.get(e);e&&s?"map"===s.type||t.includes(s)||(t.push(s),r.push(...s.inputs),a+=s.size):n.debug(`Could not find output of ${JSON.stringify(e)}`)}const l={name:s,filepath:c?F(e.bundler.outDir,c):"unknown",size:a,inputs:Array.from(new Set(r)),outputs:t,type:c?Fe(c):"unknown"};i.push(l)}for(const n of t.errors)e.build.errors.push(n.message);for(const n of t.warnings)e.build.warnings.push(n.message);e.build.inputs=o,e.build.outputs=r,e.build.entries=i}))},Ge="datadog-build-report-plugin",Je=e=>{const t=e.getLogger(Ge);return[{name:Ge,enforce:"post",esbuild:Be(e,t),rspack:Ue(e,Ge,t),webpack:Ue(e,Ge,t),vite:He(e,t),rollup:He(e,t)}]},Ve=(e,t)=>{const n=(e=>{let t,n=F(process.cwd(),e),o=n.split("/").length;for(;o>0;){const e=s.resolve(n,"package.json");a.existsSync(e)&&(t=n),n=n.split("/").slice(0,-1).join("/"),o--}return t})(t);if(n)return n;const o=(e=>{const t=[...e].map((e=>F(process.cwd(),e).split(s.sep))),n=Math.min(...t.map((e=>e.length))),o=[];for(let e=0;e<n;e++){const n=t[0][e];if(!t.every((t=>t[e]===n)))break;o.push(n)}return o.length>0&&o.join(s.sep)||s.sep})(Array.from(e));return o!==s.sep?o:void 0},Ye=e=>t=>{e.bundler.rawConfig=t.options,t.options.output?.path&&(e.bundler.outDir=t.options.output.path),t.options.context&&(e.cwd=t.options.context)},Qe=e=>{const t=new Set,n=n=>{n&&(n.dir?(e.bundler.outDir=n.dir,t.add(n.dir)):n.file&&(e.bundler.outDir=s.dirname(n.file),t.add(e.bundler.outDir)),e.bundler.outDir=F(process.cwd(),e.bundler.outDir),"vite"!==e.bundler.name&&(e.cwd=Ve(t,e.bundler.outDir)||e.cwd))},o=()=>({options(o){if(e.bundler.rawConfig=o,o.input)if(Array.isArray(o.input))for(const e of o.input)t.add(s.dirname(e));else if("object"==typeof o.input)for(const e of Object.values(o.input))t.add(s.dirname(e));else{if("string"!=typeof o.input)throw new Error("Invalid input type");t.add(s.dirname(o.input))}if("output"in o){const e=Array.isArray(o.output)?o.output:[o.output];for(const t of e)n(t)}}});return[{name:"datadog-bundler-report-plugin",enforce:"pre",esbuild:{setup(t){e.bundler.rawConfig=t.initialOptions,t.initialOptions.outdir&&(e.bundler.outDir=t.initialOptions.outdir),t.initialOptions.outfile&&(e.bundler.outDir=s.dirname(t.initialOptions.outfile)),t.initialOptions.absWorkingDir&&(e.cwd=t.initialOptions.absWorkingDir),t.initialOptions.metafile=!0}},webpack:Ye(e),rspack:Ye(e),vite:{...o(),config(n){n.root?e.cwd=n.root:e.cwd=Ve(t,e.bundler.outDir)||e.cwd}},rollup:o()}]};class Xe{constructor(e){this.trackedFilenames=new Map;for(const t of e){const e=this.getFilename(t),n=this.trackedFilenames.get(e);n?n.push(t):this.trackedFilenames.set(e,new Array(t))}}displaySource(e){return e.length<=40?e:`[...]${e.slice(-35)}`}matchSourcemap(e,t){const n=a.readFileSync(e,"utf8"),s=JSON.parse(n);if(!s.sources)return void t("Missing 'sources' field in sourcemap.");const o=s.sources;if(0===o.length)return void t("Empty 'sources' field in sourcemap.");const r=this.matchSources(o);if(0!==r.length)return r;t(`${o.map(this.displaySource).join(", ")} not in the tracked files.`)}matchSources(e){let t=[];const n=new Set;for(const s of e){const e=this.getFilename(s);if(n.has(e))continue;n.add(e);const o=this.trackedFilenames.get(e);o&&(t=t.concat(o))}return t}rawTrackedFilesList(){let e=[];return this.trackedFilenames.forEach((t=>{e=e.concat(t)})),e}getFilename(e){let t=e.lastIndexOf("/");-1===t?t=0:t++;let n=e.lastIndexOf("?");return(-1===n||n<=t)&&(n=e.length),e.substring(t,n)}}const Ze=async e=>{const t=await e.getRemotes(!0);if(0===t.length)throw new Error("No git remotes available");const n=await et(e);for(const e of t)if(e.name===n)return tt(e.refs.push);return tt(t[0].refs.push)},et=async e=>{try{return(await e.getConfig("clone.defaultRemoteName"))?.value??"origin"}catch(e){return"origin"}},tt=e=>{try{const t=new w(e);return t.username="",t.password="",t.toString()}catch{return e}},nt=async e=>e.revparse("HEAD"),st=async e=>(await e.raw("ls-files")).split(/\r\n|\r|\n/),ot="datadog-git-plugin",rt=(e,t)=>{const n=t.getLogger(ot);return[{name:ot,enforce:"pre",async buildStart(){if(e.errorTracking?.sourcemaps&&!0!==e.errorTracking?.sourcemaps.disableGit&&!0!==e.disableGit)try{const e=await(async e=>{let t,n,s;return[t,n,s]=await Promise.all([Ze(e),nt(e),st(e)]),{hash:n,remote:t,trackedFilesMatcher:new Xe(s)}})(await(async e=>{const t={baseDir:e||process.cwd(),binary:"git",maxConcurrentProcesses:3};try{const e=g(t),n=await e.revparse("--show-toplevel");t.baseDir=n}catch{}return g(t)})(t.cwd));t.git=e}catch(e){n.error(`Could not get git information: ${e.message}`)}}}]},it="datadog-injection-plugin",at=/^https?:\/\//,ut=async(e,t,n=process.cwd())=>{let s;const o=await(async e=>"function"==typeof e.value?e.value():e.value)(e);try{if("file"===e.type)s=o.match(at)?await(async(e,t=5e3)=>{let n;return Promise.race([x({retries:2,minTimeout:100,url:e}).finally((()=>{t&&clearTimeout(n)})),new Promise(((e,s)=>{n=setTimeout((()=>{s(new Error("Timeout"))}),t)}))])})(o):await(async(e,t=process.cwd())=>{const n=F(t,e);return i(n,{encoding:"utf-8"})})(o,n);else{if("code"!==e.type)throw new Error(`Invalid item type "${e.type}", only accepts "code" or "file".`);s=o}}catch(n){const r=`${e.type} - ${z(o)}`;e.fallback?(t.info(`Fallback for "${r}": ${n.toString()}`),s=await ut(e.fallback,t)):(t.warn(`Failed "${r}": ${n.toString()}`),s="")}return s},pt=e=>{if(0===e.size)return"";return`// begin injection by Datadog build plugins\n${Array.from(e.values()).map((e=>`(() => {${e}})();`)).join("\n\n")}\n// end injection by Datadog build plugins`},ct=async(e,t,n,s=process.cwd())=>{const o=await(async(e,t,n=process.cwd())=>{const s=new Map;for(const[o,r]of e.entries()){const e=await ut(r,t,n);e&&s.set(o,{value:e,position:r.position||ee.BEFORE})}return s})(t,e,s);for(const[e,t]of o.entries())n[t.position].set(e,t.value)},lt=a.promises,dt=(e,t,n)=>({setup(o){const{onStart:r,onResolve:i,onLoad:u,onEnd:p,esbuild:c,initialOptions:l}=o,d=[],f=`${C()}.${ee.MIDDLE}.${$}.js`,m=a.realpathSync(y.tmpdir()),h=s.resolve(m,f),g=new RegExp(`${f}$`),w=l.inject;l.inject=w?[...w]:[],l.inject.push(h),r((async()=>{d.push(...await T(o,t,e)),o.initialOptions.inject=w;try{await R(h,"")}catch(t){e.error(`Could not create the files: ${t.message}`)}})),i({filter:g},(async e=>({path:e.path,namespace:it}))),u({filter:g,namespace:it},(async()=>({contents:pt(n[ee.MIDDLE])||" ",resolveDir:t.cwd,loader:"js"}))),p((async s=>{if(!s.metafile)return void e.warn("Missing metafile from build result.");const o=pt(n[ee.BEFORE]),r=pt(n[ee.AFTER]);if(!o&&!r)return;const i=Object.entries(s.metafile.outputs).map((([e,n])=>{const s=n.entryPoint;if(!s)return;return d.find((e=>e.resolved.endsWith(s)))?F(t.cwd,e):void 0})).filter(Boolean).map((async e=>{const t=await lt.readFile(e,"utf-8"),n=await c.transform(t,{loader:"default",banner:o,footer:r});await lt.writeFile(e,n.code)}));await Promise.all(i)}))}}),ft=$,mt="?inject-proxy",ht=e=>({banner:t=>t.isEntry?pt(e[ee.BEFORE]):"",async resolveId(t,n,s){if(N(t))return{id:t,moduleSideEffects:!0};if(s.isEntry&&pt(e[ee.MIDDLE])){const e=await this.resolve(t,n,s);if(!e||e.external)return e;return(await this.load(e)).moduleSideEffects=!0,`${e.id}${mt}`}return null},load(t){if(N(t))return pt(e[ee.MIDDLE]);if(t.endsWith(mt)){const e=t.slice(0,-13),n=this.getModuleInfo(e);let s=`import ${JSON.stringify(ft)};\nexport * from ${JSON.stringify(e)};`;return n?.hasDefaultExport&&(s+=`export { default } from ${JSON.stringify(e)};`),s}return null},footer:t=>t.isEntry?pt(e[ee.AFTER]):""}),gt=(e,t,n,o,r)=>i=>{const u=new WeakMap,p=(e=>{if(!e?.sources?.ConcatSource)return b(require.resolve("webpack"))("webpack-sources").ConcatSource;return e.sources.ConcatSource})(e),c=s.resolve(n.bundler.outDir,`${C()}.${ee.MIDDLE}.${$}.js`);I(c,"");const l=()=>{var e;e=c,a.rmSync(e,{force:!0,maxRetries:3,recursive:!0})};i.hooks.shutdown?i.hooks.shutdown.tap(it,l):(i.hooks.done.tap(it,l),i.hooks.failed.tap(it,l));i.hooks.beforeRun.tapPromise(it,(async()=>{await ct(t,o,r,n.cwd)})),i.hooks.compilation.tap(it,(t=>{const n=()=>{const e=pt(r[ee.BEFORE]),n=pt(r[ee.AFTER]);for(const s of t.chunks)if(s.canBeInitial())for(const o of s.files)t.updateAsset(o,(t=>{const s=u.get(t);if(!s||s.banner!==e||s.footer!==n){const s=new p(e,"\n",t,"\n",n);return u.set(t,{source:s,banner:e,footer:n}),s}return s.source}))};if(t.hooks.processAssets){const s=e.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS;t.hooks.processAssets.tap({name:it,stage:s},n)}else t.hooks.optimizeChunkAssets.tap({name:it},n)}));const d=(e=>{const s="webpack4"===n.bundler.fullName?c:{import:[c]},o=e=>{for(const[n,s]of Object.entries(e))"object"==typeof s?(s.import=s.import||[],s.import.unshift(c)):"string"==typeof s?e[n]=[c,s]:Array.isArray(s)?s.unshift(c):t.error("Invalid entry type: "+typeof s)};return e?"function"==typeof e?async()=>{const t=await e();return o(t),t}:"object"!=typeof e?"string"==typeof e?[s,e]:(t.error("Invalid entry type: "+typeof e),e):(o(e),e):{ddHelper:s}})(i.options.entry);i.options.entry=d},wt=(e,t)=>{const n=t.getLogger(it),s=new Map,o={[ee.BEFORE]:new Map,[ee.MIDDLE]:new Map,[ee.AFTER]:new Map};t.inject=e=>{s.set(C(),e)};const r={name:it,enforce:"post",esbuild:dt(n,t,o),webpack:gt(e,n,t,s,o),rspack:gt(e,n,t,s,o),rollup:ht(o),vite:{...ht(o),enforce:"pre"}};var i;return i=t.bundler.fullName,["rspack","webpack4","webpack5","webpack"].includes(i)?(r.loadInclude=e=>!!N(e)||null,r.load=e=>N(e)?{code:pt(o[ee.MIDDLE])}:null):r.buildStart=async()=>{await ct(n,s,o,t.cwd)},[r]},yt={[ae]:ze},bt="datadog-build-plugins";var vt="2.5.1";const $t=(({bundler:n,version:s})=>e(((e,o)=>{const r=((e={})=>({auth:{},disableGit:!1,logLevel:"warn",...e}))(e);"esbuild"===o.framework&&(o.esbuildHostName=bt);const i=(({options:e,bundlerName:t,bundlerVersion:n,version:s})=>{const o=process.cwd(),r="webpack"===t?n.split(".")[0]:"",i={errors:[],warnings:[],logs:[],bundler:{name:t,fullName:`${t}${r}`,variant:r,version:n}},a=process.env.BUILD_PLUGINS_ENV||"production",u=k.includes(a)?a:"development";return{auth:e.auth,pluginNames:[],bundler:{...i.bundler,outDir:o},build:i,cwd:o,env:u,getLogger:D(i,e.logLevel),inject:()=>{throw new Error("Inject function called before it was initialized.")},sendLog:()=>{throw new Error("SendLog function called before it was initialized.")},start:Date.now(),version:s}})({options:r,bundlerVersion:n.version||n.VERSION,bundlerName:o.framework,version:s});i.pluginNames.push(bt);const a=[...Ie(i),...Je(i),...Qe(i),...rt(r,i),...wt(n,i)];if(r.customPlugins){const e=r.customPlugins(r,i);a.push(...e)}r[E]&&!0!==r[E].disabled&&a.push(...Z(r,i)),r[te]&&!0!==r[te].disabled&&a.push(...ie(r,i)),r[ae]&&!0!==r[ae].disabled&&a.push(...Ne(r,i)),i.pluginNames.push(...a.map((e=>e.name)));const u=new Set(i.pluginNames.filter((e=>i.pluginNames.filter((t=>t===e)).length>1)));if(u.size>0)throw new Error(`Duplicate plugin names: ${t.bold.red(Array.from(u).join(", "))}`);return a})))({bundler:v,version:vt}).rspack,kt=vt,St=yt;export{$t as datadogRspackPlugin,St as helpers,kt as version};
13
13
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
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;"}
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","log"],"mappings":";;;;;;;;AAIO;ACwBSA;AACVC;AAGFC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@datadog/rspack-plugin",
3
3
  "packageManager": "yarn@4.0.2",
4
- "version": "2.5.1-dev-7",
4
+ "version": "2.5.1",
5
5
  "license": "MIT",
6
6
  "author": "Datadog",
7
7
  "description": "Datadog Rspack Plugin",
@@ -45,11 +45,12 @@
45
45
  "dist"
46
46
  ],
47
47
  "scripts": {
48
- "build": "yarn clean && rollup --config rollup.config.mjs",
48
+ "buildCmd": "rollup --config rollup.config.mjs",
49
+ "build": "yarn clean && yarn buildCmd",
49
50
  "clean": "rm -rf dist",
50
51
  "prepack": "yarn build",
51
52
  "typecheck": "tsc --noEmit",
52
- "watch": "yarn clean && rollup --config rollup.config.mjs --watch"
53
+ "watch": "yarn build --watch"
53
54
  },
54
55
  "dependencies": {
55
56
  "async-retry": "1.3.3",
@@ -83,6 +84,5 @@
83
84
  },
84
85
  "peerDependencies": {
85
86
  "@rspack/core": "1.x"
86
- },
87
- "stableVersion": "2.5.0"
87
+ }
88
88
  }