@datadog/rspack-plugin 2.5.1 → 2.5.2

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{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";
1
+ import{createUnplugin as e}from"unplugin";import t from"chalk";import n,{readFile as s}from"fs/promises";import o,{promises as i}from"fs";import r from"path";import{outdent as a}from"outdent";import u from"async-retry";import{File as p}from"buffer";import c from"p-queue";import{Readable as l}from"stream";import{createGzip as d}from"zlib";import m from"pretty-bytes";import{performance as f}from"perf_hooks";import{glob as h}from"glob";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={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:
9
+ const $="__datadog-helper-file",k=["development","production","test"],S="datadog-build-plugins",D=async(e,t)=>{await(async e=>n.mkdir(e,{recursive:!0}))(r.dirname(e)),await n.writeFile(e,t,{encoding:"utf-8"})},E=(e,t)=>{var n;n=r.dirname(e),o.mkdirSync(n,{recursive:!0}),o.writeFileSync(e,t,{encoding:"utf-8"})},P=e=>e.replace(/^@dd\/(datadog-|internal-)?|^datadog-|-plugin$/g,""),M=e=>e.includes($),x=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()},j=(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)}`};let T=0;const O=()=>`${Date.now()}.${performance.now()}.${++T}`,z={debug:0,info:1,warn:2,error:3,none:4},N=(e,n="warn")=>s=>{const o=(e=>e.split(">").map(P).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),z[i]>=z[n]&&a(`${r(u)} ${p}`)};return{getLogger:t=>N(e,n)(`${o}>${t}`),time:(n,s={})=>{const{level:r="debug",start:a=!0,log:u=!0,tags:p=[]}=s,c={pluginName:o,label:n,spans:[],tags:p,logLevel:r,total:0};e.timings.push(c);const l=()=>c.spans.filter((e=>!e.end)),d=()=>{!c.spans.length&&u&&i(t.dim(`[${t.cyan(n)}] : start`),"debug"),c.spans.push({start:Date.now()})},m=()=>{const e=l();if(e?.length){e.length>1&&i(`Timer ${t.cyan(n)} has more than one ongoing span.`,"debug");for(const t of e)t.end=Date.now()}else i(`Timer ${t.cyan(n)} cannot be paused, no ongoing span.`,"debug")};a&&d();return{timer:c,resume:d,end:()=>{m();const e=c.spans.reduce(((e,t)=>e+(t.end-t.start)),0);c.total=e,u&&i(`[${t.cyan(n)}] : ${t.cyan(x(e))}`,r)},pause:m,tag:(e,t={})=>{const{span:n=!1}=t;if(n){const t=l();for(const n of t)n.tags=n.tags||[],n.tags.push(...e)}else c.tags.push(...e)}}},error:e=>i(e,"error"),warn:e=>i(e,"warn"),info:e=>i(e,"info"),debug:e=>i(e,"debug")}},R=["buildEnd","buildStart","load","loadInclude","resolveId","transform","transformInclude","watchChange","writeBundle","cwd","init","buildReport","bundlerReport","git"],I=(e,t,n,s)=>(...o)=>{const i=s.time(`hook | ${e} | ${t}`,{log:!1}),r=n(...o);return r instanceof Promise?r.finally((()=>{i.end()})):(i.end(),r)},A=(e,t,n)=>{const s=e.getLogger(S);return e=>{const o=s.time(`hook | init ${n}`,{log:!1}),i=t(e).map((e=>((e,t)=>{const n={...e};for(const s of R){const o=e[s];o&&(n[s]=I(e.name,s,o,t))}return n})(e,s))),r=i.map((e=>`plugin:${e.name}`));return o.tag(r),o.end(),i}},C="errorTracking",F="datadog-error-tracking-plugin",L=(e,n,s)=>{if(".map"!==r.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?r.join(e.minifiedPathPrefix,i):i,relativePath:i}},_=[400,403,413],H=e=>{const{auth:t,url:n,method:s="GET",getData:o,type:i="text"}=e,r={retries:0===e.retries?0:e.retries||5,onRetry:e.onRetry,maxTimeout:e.maxTimeout,minTimeout:e.minTimeout};return u((async(e,r)=>{let a;try{const e={method:s,duplex:"half"};let i={};if(t?.apiKey&&(i["DD-API-KEY"]=t.apiKey),t?.appKey&&(i["DD-APPLICATION-KEY"]=t.appKey),"function"==typeof o){const{data:t,headers:n}=await o();e.body=t,i={...i,...n}}a=await fetch(n,{...e,headers:i})}catch(t){return e(t),{}}if(!a.ok){const t=`HTTP ${a.status} ${a.statusText}`;if(_.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),{}}}),r)},K=/[/]+|[\\]+/g,W=/^[/]+|^[\\]+|[/]+$|[\\]+$/g,B=(e,t)=>{const n=e.replace(W,"").split(K),s=t.replace(W,"").split(K),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 i.stat(e)).size&&(t.empty=!0)}catch(e){if("ENOENT"!==e.code)throw e;t.exists=!1}return t},U=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:B(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(s)try{u.set("repository",{type:"string",options:{contentType:"application/json",filename:"repository"},value:JSON.stringify({data:[{files:s.trackedFilesMatcher.matchSourcemap(e.sourcemapFilePath,(t=>{a.push(`${r.basename(e.sourcemapFilePath)}: "${t}"`)})),hash:s.hash,repository_url:s.remote}],version:1})})}catch(t){a.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&&a.push(`The minified file path contains a repeated pattern with the minified path prefix: ${o.repeatedPrefix}`),{content:u,errors:i,warnings:a}},G=t.green.bold,J=t.yellow.bold,V=t.red.bold,Y=async(e,t)=>{if("function"==typeof o.openAsBlob){const n=await o.openAsBlob(e,{type:t.contentType});return new p([n],t.filename)}{const n=l.toWeb(o.createReadStream(e)),s=await new Response(n).blob();return new p([s],t.filename,{type:t.contentType})}},Q=(e,t={})=>async()=>{const n=new FormData,s=d();for(const[t,s]of e.content){const e="file"===s.type?await Y(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:l.fromWeb(o.body).pipe(s),headers:{"Content-Encoding":"gzip",...t,...Object.fromEntries(o.headers.entries())}}},X=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=>U(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:l,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(c.default?c.default:c)({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 ${G(e.sourcemap)} | ${G(e.file)}`),u.push(r.add((async()=>{try{await H({url:t.intakeUrl,method:"POST",getData:Q(p,a),onRetry:(t,n)=>{const o=`Failed to upload ${J(e.sourcemap)} | ${J(e.file)}:\n ${t.message}\nRetrying ${n}/5`;i.push(o),s.debug(o)}}),s.debug(`Sent ${G(e.sourcemap)} | ${G(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 ${G(e.length.toString())} sourcemaps in ${G(x(Date.now()-o))}.`),l.length>0){const e=`Failed to upload some sourcemaps:\n${` - ${l.map((({metadata:e,error:t})=>e?`${V(e.file)} | ${V(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 - ")}`)},Z=async(e,n,s)=>{const o=t.green.bold,i=Object.entries(e.sourcemaps).map((([e,t])=>` - ${e}: ${o(t.toString())}`)).join("\n"),r=s.time("get sourcemaps files"),u=((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=>({...L(e,t,n),sourcemapFilePath:n,minifiedPathPrefix:e.minifiedPathPrefix})))})(e.sourcemaps,n);r.end();const p=a`
10
+ Uploading ${o(u.length.toString())} sourcemaps with configuration:
11
11
  ${i}
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};
12
+ `;s.info(p);const c=s.time("send sourcemaps");await X(u,e.sourcemaps,n,s),c.end()},ee=`https://sourcemap-intake.${process.env.DATADOG_SITE||"datadoghq.com"}/api/v2/srcmap`,te=e=>{const n=t.bold.red,s=e[C]||{},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||ee,...s.sourcemaps};o.config=e}return o},ne=({options:e,context:t})=>{const n=t.getLogger(F),s=n.time("validate options"),o=((e,t)=>{const n=[],s=te(e);if(n.push(...s.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${F}.`);const o={disabled:!e[C],...e[C],sourcemaps:void 0};return s.config&&(o.sourcemaps=s.config),o})(e,n);return s.end(),o.disabled?[]:[{name:F,enforce:"post",async writeBundle(){if(!o.disabled&&o.sourcemaps){const e=n.time("sourcemaps process");await Z(o,t,n),e.end()}}}]};var se=(e=>(e[e.BEFORE=0]="BEFORE",e[e.MIDDLE=1]="MIDDLE",e[e.AFTER=2]="AFTER",e))(se||{});const oe="rum",ie="datadog-rum-plugin",re=e=>`DD_RUM.init({${JSON.stringify(e.sdk).replace(/(^{|}$)/g,"")}});\n`,ae=(e,t)=>{const n=e.sdk;if(n.clientToken)return re(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 H({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 re({...e,sdk:{clientToken:s,...n}})}},ue=e=>{const n=t.bold.red,s=e[oe]||{},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},pe=({options:e,context:t})=>{const n=((e,t)=>{const n=[],s=ue(e);if(n.push(...s.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${ie}.`);const o={disabled:!e[oe],...e[oe],sdk:void 0};return s.config&&(o.sdk=s.config),o})(e,t.getLogger(ie)),s=[];return n.disabled||n.sdk&&(t.inject({type:"file",position:se.MIDDLE,value:r.join(__dirname,"./rum-browser-sdk.js")}),t.inject({type:"code",position:se.MIDDLE,value:ae(n,t)})),s},ce="telemetry",le="datadog-telemetry-plugin",de=[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}],me=(e,t)=>({type:"gauge",tags:[...e.tags,...t.tags],metric:`${t.prefix?`${t.prefix}.`:""}${e.metric}`,points:[[t.timestamp,e.value]]}),fe=(e="")=>e.endsWith("/")?e:`${e}/`,he=(e,t)=>{let n=e;return e.split(fe(t)),n.split("!").pop().replace(/(.*)?\/node_modules\//,"/node_modules/").replace(/^((\.)*\/)+/,"")},ge=(e,t)=>e.split("!").pop().replace(fe(t),"./"),we=(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)),ge(s||"no-name",n)},ye=e=>e.replace(/^.*\/node_modules\/(@[a-z0-9][\w-.]+\/[a-z0-9][\w-.]*|[^/]+).*$/,"$1"),be=e=>e.map((e=>({type:e?.constructor?.name??typeof e,name:e?.name,value:"string"==typeof e?e:void 0}))),ve=(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(me(s,t))}else n.add(me(e,t))},$e=async(e,t,n,s)=>{if("string"!=typeof t&&"object"!=typeof t&&!t)return;const{report:o,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=r.resolve(s,u);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 D(e,n)})(r.join(c,`${t}.json`),s.content),n.debug(`Wrote ${t}.json in ${x(Date.now()-o)}`)}catch(s){n.error(`Failed to write ${t}.json in ${x(Date.now()-o)}`),e[t]=s}}));await Promise.all(s),n.debug(`Wrote files in ${x(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}`)}},ke=t.bold.red,Se=t.bold.cyan,De=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},Ee=(e,t)=>{if(!t||!t.size)return[];const n=Array.from(t.values());n.sort(De("duration"));const s={name:`${e} duration`,values:n.map((e=>({name:e.name,value:x(e.duration)}))),top:!0};n.sort(De("increment"));const o={name:`${e} hits`,values:n.map((e=>({name:e.name,value:e.increment.toString()}))),top:!0};return[s,o]},Pe=(e,t,n)=>{const s=[];var o;n&&(s.push(...Ee("Loader",n.timings.loaders)),s.push(...Ee("Tapable",n.timings.tapables)),s.push(...Ee("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,timings:e.timings,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(De((e=>e.dependents.size))),t.values=c.map((e=>({name:e.name,value:e.dependents.size.toString()}))),c.sort(De((e=>e.dependencies.size))),n.values=c.map((e=>({name:e.name,value:e.dependencies.size.toString()}))),c.sort(De("size")),s.values=c.map((e=>({name:e.name,value:m(e.size)}))),c.sort(De("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(De((e=>e.size))).map((e=>({name:e.name,value:m(e.size)}))),top:!0},{name:"Entry aggregated size",values:(o.build.entries||[]).sort(De((e=>e.size))).map((e=>({name:e.name,value:m(e.size)}))),top:!0},{name:"Entry number of modules",values:(o.build.entries||[]).sort(De((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:x(e.build.start-e.start)}),e.build.duration&&t.values.push({name:"Build duration",value:x(e.build.duration)}),e.build.writeDuration&&t.values.push({name:"Write duration",value:x(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=j(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+=` [${ke(e.value)}] ${" ".repeat(n)}${Se(e.name)}\n`}}return t})(s);t.info(i)},Me=["onStart","onLoad","onResolve","onEnd"],xe=new Map,je=new Map,Te=(e,t,n)=>{const s=Object.assign({},e);for(const o of Me)s[o]=async(s,i)=>{const r=xe.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=ge(e[0].path,n),a=je.get(s)||{name:s,increment:0,duration:0,events:{}};a.events[o]=a.events[o]||{name:o,values:[]};const u=f.now();try{return await i(...e)}finally{const n=f.now(),i=n-u,p={start:u,end:n,duration:i,context:be(e)};r.events[o].values.push(p),r.duration+=i,r.increment+=1,xe.set(t,r),a.events[o].values.push(p),a.duration+=i,a.increment+=1,je.set(s,a)}}))};return s},Oe=(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(le))continue;const n=s.setup;s.setup=async o=>{const i=Te(o,s.name,t);await n({...i,initialOptions:{...i.initialOptions,plugins:e}})}}}})(s,t.cwd),o.end(),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:xe,modules:je};s.end(),e.report={timings:{tapables:o,modules:i}}}))}});class ze{constructor(e){this.started={},this.finished=[],this.cwd=e}startModule(e,t){const n=we(e,t,this.cwd),s=(e=>(e.loaders||[]).map((e=>e.loader||e)).map(ye))(e);s.length||s.push("no-loader"),this.started[n]={module:he(n),timings:{start:f.now(),duration:0,end:0},loaders:s}}doneModule(e,t){const n=we(e,t,this.cwd),s=this.started[n];s&&(s.timings.end=f.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 Ne{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=f.now(),r=t.apply(this,o),a=()=>{this.saveResult(e,n,s,be(o),i,f.now())};return r.then(a,a),r}}getAsyncTapPatch(e,t,n,s){return(...o)=>{this.checkNewHooks();const i=f.now(),r=o.pop();return t.apply(this,[...o,(...t)=>(this.saveResult(e,n,s,be(o),i,f.now()),r(...t))])}}getDefaultTapPatch(e,t,n,s){return(...o)=>{this.checkNewHooks();const i=f.now(),r=t.apply(this,o);return this.saveResult(e,n,s,be(o),i,f.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(le)||(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 Re=(e,t)=>async n=>{const s=t.getLogger(le);t.build.start=Date.now();const o={name:le},i=new Ne(t.cwd),r=new ze(t.cwd),a=s.time("parse compiler hooks");i.throughHooks(n),a.end(),n.hooks.thisCompilation.tap(o,(e=>{const t=s.time("parse compilation hooks");i.throughHooks(e),t.end(),e.hooks.buildModule.tap(o,(t=>{r.startModule(t,e)})),e.hooks.succeedModule.tap(o,(t=>{r.doneModule(t,e)})),e.hooks.failedModule&&e.hooks.failedModule.tap(o,(t=>{r.doneModule(t,e)}))})),n.hooks.afterEmit.tapPromise(o,(async t=>{const{timings:n}=i.getResults(),{loaders:s,modules:o}=r.getResults();e.report={timings:{tapables:n,loaders:s,modules:o}}}))},Ie={filters:de},Ae=({options:e,context:t})=>{const n=t.getLogger(le);let s=0;const o={start:Date.now()},i=(e=>{const t=e[ce]?.endPoint||"https://app.datadoghq.com";return{disabled:!e[ce],enableTracing:!1,filters:de,output:!1,prefix:"",tags:[],...e[ce],endPoint:t.startsWith("http")?t:`https://${t}`}})(e),r=[];if(i.disabled)return r;const a={name:le,enforce:"pre",esbuild:Oe(o,t,n),webpack:Re(o,t),rspack:Re(o,t)},u=n.time("build",{start:!1}),p={name:"datadog-universal-telemetry-plugin",enforce:"post",buildStart(){u.resume(),t.build.start=t.build.start||Date.now()},buildEnd(){u.end(),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("aggregating metrics");ve(t,r,e,o.report),a.end();const u=n.time("writing to files");await $e({report:o.report,metrics:e},i.output,n,t.bundler.outDir),u.end();const p=n.time("outputing report");Pe(t,n,o.report),p.end();const c=n.time("sending metrics to Datadog");await((e,t,n)=>{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 s=new Map;for(const t of e)s.has(t.metric)||s.set(t.metric,0),s.set(t.metric,s.get(t.metric)+1);const o=Array.from(s.entries()).map((([e,t])=>`${e} - ${t}`));return n.debug(`\nSending ${e.size} metrics.\nMetrics:\n - ${o.join("\n - ")}`),H({method:"POST",url:`${t.endPoint}/api/v1/series?api_key=${t.apiKey}`,getData:()=>({data:JSON.stringify({series:Array.from(e)})})}).catch((e=>{n.error(`Error sending metrics ${e}`)}))})(e,{apiKey:t.auth?.apiKey,endPoint:i.endPoint},n),c.end()}};return i.enableTracing&&r.push(a),r.push(p),r},Ce="datadog-analytics-plugin",Fe=e=>{const{context:t}=e,n=e.context.getLogger(Ce);return t.sendLog=async(e,s={})=>{if("production"===t.env)try{const n={name:t.bundler.name,version:t.bundler.version};await H({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/${n.name}-plugin`,env:t.env,message:e,service:"build-plugins",bundler:n,plugins:t.pluginNames,version:t.version,team:"language-foundations",...s};return{data:JSON.stringify(o),headers:{"Content-Type":"application/json"}}}})}catch(e){n.debug(`Could not submit data to Datadog: ${e}`)}},[{name:Ce,async buildStart(){await t.sendLog("Build started")}}]},Le=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 a=i.flatMap((e=>{return(t=e.path,t.includes("*")?h.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(a),s},_e=(e,t)=>M(t)?$:t.startsWith(e)||r.isAbsolute(t)?t:r.resolve(e,t),He=/\.(?!.*(?:\.|\/|\\))(\w{1,})/g,Ke=/(\?|%3F|\|)+/gi,We=e=>{return"unknown"===e?e:e.includes("webpack/runtime")?"runtime":(t=Ue(e),He.lastIndex=0,He.exec(t)?.[1]||"unknown");var t},Be=["unknown","commonjsHelpers.js","vite/preload-helper.js"],qe=(e,t,n)=>{const s=new Set;for(const n of e){const e=Ue(n);M(n)||e===t||Be.includes(e)||s.add(e)}return s},Ue=e=>e.split("!").pop().split(Ke).shift().replace(/^[^\w\s.,!@#$%^&*()=+~`\-/]+/,""),Ge=(e,t)=>M(t)?$:"unknown"===t?t:t.includes("webpack/runtime")?t.replace("webpack/runtime/","").replace(/ +/g,"-"):t.split("!").pop().replace(_e(e.cwd,e.bundler.outDir),"").replace(e.cwd,"").split("node_modules").pop().split(Ke).shift().replace(/^((\.\.?)?\/)+/,""),Je=(e,t)=>Object.fromEntries(Object.entries(e).map((([e,n])=>[_e(t,e),n]))),Ve=(e,t)=>({setup(n){const s=new Map;let o=[];const i=t.time("build report",{start:!1});n.onStart((async()=>{s.clear(),o=[],i.resume();const r=t.time("process entries");o.push(...await Le(n,e,t));for(const t of o){const n=Ge(e,t.resolved);t.name?s.set(n,t.name):s.set(n,n)}r.end(),i.pause()})),n.onEnd((n=>{i.resume();const o=t.time("collecting errors and warnings"),a=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.end(),!n.metafile){const n="Missing metafile from build report.";return e.build.warnings.push(n),void t.warn(n)}const u=[],p=[],c=[],l=[],d=[],m={},f={},h=t.time("indexing metafile data"),g=Je(n.metafile.inputs,a),w=Je(n.metafile.outputs,a);h.end();const y=e=>{if(!M(e))return e;const t=g[_e(a,e)];if(!t)return e;const n=t.imports.find((e=>!M(e.path)));return n?n.path:e},b=t.time("looping through inputs");for(const[t,s]of Object.entries(n.metafile.inputs)){if(M(t))continue;const n=_e(a,t),o={name:Ge(e,t),filepath:n,dependents:new Set,dependencies:new Set,size:s.bytes,type:We(t)};m[n]=o,u.push(o)}b.end();const v=t.time("looping through outputs");for(const[o,i]of Object.entries(n.metafile.outputs)){const n=_e(a,o),r=Ge(e,n),u=[];for(const e of Object.keys(i.inputs)){if(M(e))continue;const n=m[_e(a,e)];n?u.push(n):t.debug(`Input ${e} not found for output ${r}`)}if(i.entryPoint&&!u.length){const e=m[_e(a,i.entryPoint)];if(!e){t.debug(`Input ${i.entryPoint} not found for output ${r}`);continue}u.push(e)}const d={name:r,filepath:n,inputs:u,size:i.bytes,type:We(n)};if(f[n]=d,"map"===d.type&&l.push(d),p.push(d),!i.entryPoint)continue;const h=m[_e(a,y(i.entryPoint))];if(h){if(!s.get(h.name))continue;const e={...d,name:s.get(h.name)||h.name,outputs:[d],size:d.size};c.push(e)}}v.end();const $=t.time("looping through sourcemaps");for(const e of l){const n=f[e.filepath.replace(/\.map$/,"")];n?e.inputs.push(n):t.debug(`Could not find output for sourcemap ${e.name}`)}$.end();const k={inputs:{report:m,meta:g},outputs:{report:f,meta:w}},S=/(<runtime>|https:|file:|data:|#)/g,D=e=>!M(e)&&!e.match(S),E=(n,s,o={})=>{if(!D(n))return o;const i=s.report[n];if(!i)return t.debug(`Could not find report's ${n}`),o;if(o[i.filepath])return o;o[i.filepath]=i;const p=s.meta[n];if(!p)return t.debug(`Could not find metafile's ${n}`),o;if(!p.imports||!p.imports.length)return o;for(const t of p.imports){const p=t.path.match(/^\.\.?\//),c=p?r.dirname(n):a,l=_e(c,t.path);if(t.external){if(D(t.path)){const n=p?l:t.path,s=k.inputs.report[n]||{filepath:n,name:Ge(e,t.path),size:0,type:"external",dependencies:new Set,dependents:new Set};"dependencies"in i&&(s.dependents.add(i),i.dependencies.add(s)),"inputs"in i&&!i.inputs.includes(s)&&i.inputs.push(s),u.includes(s)||u.push(s),k.inputs.report[n]=s,o[s.filepath]=s}}else E(l,s,o)}return o},P=t.time("looping through entries");for(const e of c){const t={},n={};for(const n of e.inputs)E(n.filepath,k.inputs,t);for(const t of e.outputs)E(t.filepath,k.outputs,n);e.inputs=Object.values(t),e.outputs=Object.values(n),e.size=e.outputs.reduce(((e,t)=>e+t.size),0),d.push(e)}P.end();const x=t.time("aggregate dependencies and dependents");for(const e of u){if("external"===e.type)continue;const n=k.inputs.meta[e.filepath];if(n)for(const s of n.imports){if(!D(s.path))continue;const n=s.path.match(/^\.?\.\//),o=n?r.dirname(e.filepath):a,i=_e(o,s.path);let u;if(s.external){const e=n?i:s.path;u=k.inputs.report[e]}else u=k.inputs.report[i];u?(e.dependencies.add(u),u.dependents.add(e)):t.debug(`Could not find input file of ${s.path} imported from ${e.name}`)}else t.debug(`Could not find metafile's ${e.name}`)}x.end(),e.build.outputs=p,e.build.inputs=u,e.build.entries=d,i.end(),e.hook("buildReport",e.build)}))}}),Ye=(e,t)=>{const n=t.time("build report",{start:!1});let s={};return{buildStart(){s={}},onLog(t,n){"warn"===t&&e.build.warnings.push(n.message||n.toString())},renderError(t){t&&e.build.errors.push(t.message)},moduleParsed(e){n.resume();const t=Ue(e.id),o=s[t]||{dependencies:new Set,dependents:new Set},i=qe(new Set([...e.dynamicallyImportedIds,...e.importedIds]),t),r=qe(new Set([...e.dynamicImporters,...e.importers]),t);for(const e of r)o.dependents.add(e);for(const e of i)o.dependencies.add(e);s[t]=o,n.pause()},writeBundle(o,i){n.resume();const r=[],a=[],u=[],p=[],c={},l=[],d={},m={},f=t.time("completing dependencies and dependents");for(const[e,{dependencies:t,dependents:n}]of Object.entries(s)){for(const n of t){const t=Ue(n);s[t]||(s[t]={dependencies:new Set,dependents:new Set}),s[t].dependents.has(e)||s[t].dependents.add(e)}for(const t of n){const n=Ue(t);s[n]||(s[n]={dependencies:new Set,dependents:new Set}),s[n].dependencies.has(e)||s[n].dependencies.add(e)}}f.end();const h=t.time("filling inputs and outputs");for(const[n,o]of Object.entries(i)){const i={name:n,filepath:_e(e.bundler.outDir,n),inputs:[],size:"code"in o?Buffer.byteLength(o.code,"utf8"):Buffer.byteLength(o.source,"utf8"),type:We(n)};if("map"===i.type&&p.push(i),"modules"in o)for(const[t,n]of Object.entries(o.modules)){if(Ue(t)!==t)continue;const s={name:Ge(e,t),dependencies:new Set,dependents:new Set,filepath:t,size:n.originalLength,type:We(t)};i.inputs.push(s),d[s.filepath]=s,r.push(s)}if("imports"in o)for(const n of o.imports){const o=Ue(n);if(!s[o]){c[_e(e.bundler.outDir,o)]=i;continue}if(d[o]){t.debug(`Input report already there for ${o} from ${i.name}.`);continue}const a={name:Ge(e,n),dependencies:new Set,dependents:new Set,filepath:o,size:0,type:"external"};i.inputs.push(a),d[a.filepath]=a,r.push(a)}"isEntry"in o&&o.isEntry&&u.push({...i,name:o.name,size:0,outputs:[i]}),m[i.filepath]=i,a.push(i)}h.end();for(const[e,n]of Object.entries(c)){const s=m[e];s?n.inputs.includes(s)||n.inputs.push(s):t.debug(`Could not find the output report for ${e}.`)}const g=t.time("filling dependencies and dependents");for(const n of r){const o=s[n.filepath];if(o){for(const s of o.dependencies){const o=d[s];o?n.dependencies.add(o):t.debug(`Could not find input for dependency ${Ge(e,s)} of ${n.name}`)}for(const s of o.dependents){const o=d[s];o?n.dependents.add(o):t.debug(`Could not find input for dependent ${Ge(e,s)} of ${n.name}`)}}else t.debug(`Could not find the import report for ${n.name}.`)}if(g.end(),p.length){const e=t.time("filling sourcemaps inputs");for(const e of p){const n=e.filepath.replace(/\.map$/,""),s=m[n];s?e.inputs.push(s):t.debug(`Could not find output for sourcemap ${e.name}`)}e.end()}const w=(n,s={})=>{if(s[n])return s;const o=Ge(e,n),r=m[n];if(!r){return!!d[o]||t.debug(`Could not find output for ${o}`),s}s[n]=r;const a=i[Ge(e,n)];if(!a)return t.debug(`Could not find asset for ${o}`),s;const u=[];"imports"in a&&u.push(...a.imports),"dynamicImports"in a&&u.push(...a.dynamicImports);for(const t of u)w(_e(e.bundler.outDir,t),s);return s},y=t.time("filling entries");for(const e of u){const t=w(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),l.push(e)}y.end(),e.build.inputs=r,e.build.outputs=a,e.build.entries=l,n.end(),e.hook("buildReport",e.build)}}},Qe=(e,t,n)=>s=>{let o=[],i=[],r=[];const a=new Map,u=new Map,p=new Map,c=new Map,l=[],d=new Map,m=n.time("build report",{start:!1}),f=e=>!(!e||e.startsWith("webpack/runtime")||e.includes("/webpack4/buildin/")||e.startsWith("multi ")||M(e)),h=e=>e.replace(/(^external[^"]+"|"$)/g,""),g=e=>{const t=(e=>{const t=e.identifier();return{identifier:()=>t,dependencies:"dependencies"in e?[...e.dependencies]:[],blocks:"blocks"in e?[...e.blocks]:[],externalType:"externalType"in e?e.externalType:void 0,external:"external"in e?e.external:void 0}})(e),n=(e=>{const t=new Set,n=["rawRequest","resource","request","userRequest"],s=e=>{const n=Ue(e);t.add(n),n.startsWith("external ")&&t.add(h(n))};s(e.identifier());for(const t of n){const n=e[t];t&&t in e&&"string"==typeof n&&s(n)}return t})(e);for(const e of n)if(c.has(e)){const n=c.get(e);n.dependencies.push(...t.dependencies||[]),n.blocks.push(...t.blocks||[])}else c.set(e,t)},w=(e,t=[])=>{if("dependencies"in e)for(const n of e.dependencies)t.push(n),w(n,t);if("blocks"in e)for(const n of e.blocks)w(n,t);return t},y=(e,t)=>{if("request"in t&&t.request){const n=Ue(t.request);if(c.has(n))return c.get(n);if(e.context){const t=_e(Ue(e.context),n);if(c.has(t))return c.get(t)}}},b=e=>!(!("externalType"in e)||!e.externalType)||(!(!("external"in e)||!e.external)||!!e.identifier?.().startsWith("external "));s.hooks.thisCompilation.tap(t,(s=>{o=[],i=[],r=[],a.clear(),u.clear(),c.clear(),d.clear(),s.hooks.finishModules.tap(t,(t=>{m.resume();const s=n.time("dependency graph"),i=n.time("indexing modules");for(const e of t)g(e);i.end();const r=n.time("building inputs");for(const n of t){const t=n.identifier(),s=Ge(e,t),i=new Set(w(n).map((e=>{const s=y(n,e);if(!s?.identifier())return!1;const o=s.identifier();return!!f(o)&&(o!==t&&(b(s)?h(o):o))})).filter(Boolean));if(!f(t))continue;const r=d.get(t)||{dependents:new Set,dependencies:new Set};for(const e of i){const n=d.get(e)||{dependencies:new Set,dependents:new Set};n.dependents.add(t),r.dependencies.add(e),d.set(e,n)}d.set(t,r);const u=b(n)?{size:0,name:h(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:We(t)};o.push(u),a.set(t,u),b(n)&&a.set(h(t),u)}r.end();const u=n.time("assigning dependencies and dependents");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}`)}u.end(),s.end(),m.pause()}))})),s.hooks.afterEmit.tap(t,(t=>{m.resume();const s=t.chunks,c=t.getAssets(),d=t=>[...t.files||[],...t.auxiliaryFiles||[]].map((t=>_e(e.bundler.outDir,t))),h=n.time("indexing chunks"),g=t.chunkGraph;for(const e of s){const t=d(e),n=(g?g?.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"===We(e))continue;const t=p.get(e)||new Set;for(const e of n)t.add(e);p.set(e,t)}}h.end();const w=n.time("building outputs");for(const t of c){const s={size:t.source.size()||0,name:t.name,inputs:[],filepath:_e(e.bundler.outDir,t.name),type:We(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}`)}w.end();const y=n.time("filling sourcemaps inputs");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}`)}y.end();const b=n.time("building entries");for(const[s,o]of t.entrypoints){const t=new Map,i=new Map;let a=0;const p=o.chunks.flatMap(d),c=o.chunks.filter((e=>g?g.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"===We(e)));for(const e of p){const s=u.get(e);if(e&&s){if("map"!==s.type&&!t.has(s.name)){t.set(s.name,s);for(const e of s.inputs)i.has(e.filepath)||i.set(e.filepath,e);a+=s.size}}else n.debug(`Could not find output of ${JSON.stringify(e)}`)}const l={name:s,filepath:c?_e(e.bundler.outDir,c):"unknown",size:a,inputs:Array.from(i.values()),outputs:Array.from(t.values()),type:c?We(c):"unknown"};r.push(l)}b.end();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,m.end(),e.hook("buildReport",e.build)}))},Xe="datadog-build-report-plugin",Ze=e=>{const{context:t}=e,n=t.getLogger(Xe);return[{name:Xe,enforce:"post",esbuild:Ve(t,n),rspack:Qe(t,Xe,n),webpack:Qe(t,Xe,n),vite:Ye(t,n),rollup:Ye(t,n)}]},et=(e,t)=>{const n=(e=>{let t,n=_e(process.cwd(),e),s=n.split("/").length;for(;s>0;){const e=r.resolve(n,"package.json");o.existsSync(e)&&(t=n),n=n.split("/").slice(0,-1).join("/"),s--}return t})(t);if(n)return n;const s=(e=>{const t=[...e].map((e=>_e(process.cwd(),e).split(r.sep))),n=Math.min(...t.map((e=>e.length))),s=[];for(let e=0;e<n;e++){const n=t[0][e];if(!t.every((t=>t[e]===n)))break;s.push(n)}return s.length>0&&s.join(r.sep)||r.sep})(Array.from(e));return s!==r.sep?s:void 0},tt=e=>t=>{e.bundler.rawConfig=t.options,t.options.output?.path&&(e.bundler.outDir=t.options.output.path),e.hook("bundlerReport",e.bundler),t.options.context&&(e.cwd=t.options.context),e.hook("cwd",e.cwd)},nt=e=>{const{context:t}=e,n=new Set,s=e=>{e&&(e.dir?(t.bundler.outDir=e.dir,n.add(e.dir)):e.file&&(t.bundler.outDir=r.dirname(e.file),n.add(t.bundler.outDir)),t.bundler.outDir=_e(process.cwd(),t.bundler.outDir),t.hook("bundlerReport",t.bundler),"vite"!==t.bundler.name&&(t.cwd=et(n,t.bundler.outDir)||t.cwd,t.hook("cwd",t.cwd)))},o=()=>({options(e){if(t.bundler.rawConfig=e,e.input)if(Array.isArray(e.input))for(const t of e.input)n.add(r.dirname(t));else if("object"==typeof e.input)for(const t of Object.values(e.input))n.add(r.dirname(t));else{if("string"!=typeof e.input)throw new Error("Invalid input type");n.add(r.dirname(e.input))}if("output"in e){const t=Array.isArray(e.output)?e.output:[e.output];for(const e of t)s(e)}}});return[{name:"datadog-bundler-report-plugin",enforce:"pre",esbuild:{setup(e){t.bundler.rawConfig=e.initialOptions,e.initialOptions.outdir&&(t.bundler.outDir=e.initialOptions.outdir),e.initialOptions.outfile&&(t.bundler.outDir=r.dirname(e.initialOptions.outfile)),t.hook("bundlerReport",t.bundler),e.initialOptions.absWorkingDir&&(t.cwd=e.initialOptions.absWorkingDir),t.hook("cwd",t.cwd),e.initialOptions.metafile=!0}},webpack:tt(t),rspack:tt(t),vite:{...o(),config(e){e.root?t.cwd=e.root:t.cwd=et(n,t.bundler.outDir)||t.cwd,t.hook("cwd",t.cwd)}},rollup:o()}]},st="datadog-custom-hooks-plugin",ot=e=>{const{context:t}=e,n=t.getLogger(st),s=e=>(s,...o)=>{const i=n.time(`hook | ${s}`),r=[],a=[];for(const n of t.plugins){if(!(s in n))continue;const t=n[s];if("function"==typeof t)try{const i=t(...o);i instanceof Promise&&(e||r.push(`Plugin "${n.name}" returned a promise on the non async hook "${s}".`),a.push(i))}catch(e){r.push(`Plugin "${n.name}" errored on hook "${s}". [${e}]`)}else r.push(`Plugin "${n.name}" has an invalid hook type for "${s}". [${typeof t}]`)}if(r.length>0){for(const e of r)n.error(e);throw new Error("Some plugins errored during the hook execution.")}return Promise.all(a).finally((()=>i.end()))};return t.hook=s(!1),t.asyncHook=s(!0),[{name:st,enforce:"pre"}]};class it{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=o.readFileSync(e,"utf8"),s=JSON.parse(n);if(!s.sources)return void t("Missing 'sources' field in sourcemap.");const i=s.sources;if(0===i.length)return void t("Empty 'sources' field in sourcemap.");const r=this.matchSources(i);if(0!==r.length)return r;t(`${i.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 rt=async e=>{const t=await e.getRemotes(!0);if(0===t.length)throw new Error("No git remotes available");const n=await at(e);for(const e of t)if(e.name===n)return ut(e.refs.push);return ut(t[0].refs.push)},at=async e=>{try{return(await e.getConfig("clone.defaultRemoteName"))?.value??"origin"}catch(e){return"origin"}},ut=e=>{try{const t=new w(e);return t.username="",t.password="",t.toString()}catch{return e}},pt=async e=>e.revparse("HEAD"),ct=async e=>(await e.raw("ls-files")).split(/\r\n|\r|\n/),lt="datadog-git-plugin",dt=e=>{const{options:t,context:n}=e,s=n.getLogger(lt);return[{name:lt,enforce:"pre",async buildStart(){if(t.errorTracking?.sourcemaps&&!0!==t.errorTracking?.sourcemaps.disableGit&&!0!==t.disableGit)try{const e=s.time("get git information"),t=await(async e=>{let t,n,s;return[t,n,s]=await Promise.all([rt(e),pt(e),ct(e)]),{hash:n,remote:t,trackedFilesMatcher:new it(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)})(n.cwd));n.git=t,e.end(),await n.asyncHook("git",n.git)}catch(e){s.error(`Could not get git information: ${e.message}`)}}}]},mt="datadog-injection-plugin",ft=/^https?:\/\//,ht=async(e,t,n=process.cwd())=>{let o;const i=await(async e=>"function"==typeof e.value?e.value():e.value)(e);try{if("file"===e.type)o=i.match(ft)?await(async(e,t=5e3)=>{let n;return Promise.race([H({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=_e(t,e);return s(n,{encoding:"utf-8"})})(i,n);else{if("code"!==e.type)throw new Error(`Invalid item type "${e.type}", only accepts "code" or "file".`);o=i}}catch(n){const s=`${e.type} - ${j(i)}`;e.fallback?(t.info(`Fallback for "${s}": ${n.toString()}`),o=await ht(e.fallback,t)):(t.warn(`Failed "${s}": ${n.toString()}`),o="")}return o},gt=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`},wt=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 ht(i,t,n);e&&s.set(o,{value:e,position:i.position||se.BEFORE})}return s})(t,e,s);for(const[e,t]of o.entries())n[t.position].set(e,t.value)},yt=o.promises,bt=(e,t,n)=>({setup(s){const{onStart:i,onResolve:a,onLoad:u,onEnd:p,esbuild:c,initialOptions:l}=s,d=[],m=`${O()}.${se.MIDDLE}.${$}.js`,f=o.realpathSync(y.tmpdir()),h=r.resolve(f,m),g=new RegExp(`${m}$`),w=l.inject;l.inject=w?[...w]:[],l.inject.push(h),i((async()=>{d.push(...await Le(s,t,e)),s.initialOptions.inject=w;try{await D(h,"")}catch(t){e.error(`Could not create the files: ${t.message}`)}})),a({filter:g},(async e=>({path:e.path,namespace:mt}))),u({filter:g,namespace:mt},(async()=>({contents:gt(n[se.MIDDLE])||" ",resolveDir:t.cwd,loader:"js"}))),p((async s=>{if(!s.metafile)return void e.warn("Missing metafile from build result.");const o=gt(n[se.BEFORE]),i=gt(n[se.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)))?_e(t.cwd,e):void 0})).filter(Boolean).map((async e=>{const t=await yt.readFile(e,"utf-8"),n=await c.transform(t,{loader:"default",banner:o,footer:i});await yt.writeFile(e,n.code)}));await Promise.all(r)}))}}),vt=$,$t="?inject-proxy",kt=e=>({banner:t=>t.isEntry?gt(e[se.BEFORE]):"",async resolveId(t,n,s){if(M(t))return{id:t,moduleSideEffects:!0};if(s.isEntry&&gt(e[se.MIDDLE])){const e=await this.resolve(t,n,s);if(!e||e.external)return e;return(await this.load(e)).moduleSideEffects=!0,`${e.id}${$t}`}return null},load(t){if(M(t))return gt(e[se.MIDDLE]);if(t.endsWith($t)){const e=t.slice(0,-13),n=this.getModuleInfo(e);let s=`import ${JSON.stringify(vt)};\nexport * from ${JSON.stringify(e)};`;return n?.hasDefaultExport&&(s+=`export { default } from ${JSON.stringify(e)};`),s}return null},footer:t=>t.isEntry?gt(e[se.AFTER]):""}),St=(e,t,n,s,i)=>a=>{const u=new WeakMap,p=(e=>{if(!e?.sources?.ConcatSource)return b(require.resolve("webpack"))("webpack-sources").ConcatSource;return e.sources.ConcatSource})(e),c=r.resolve(n.bundler.outDir,`${O()}.${se.MIDDLE}.${$}.js`);E(c,"");const l=()=>{var e;e=c,o.rmSync(e,{force:!0,maxRetries:3,recursive:!0})};a.hooks.shutdown?a.hooks.shutdown.tap(mt,l):(a.hooks.done.tap(mt,l),a.hooks.failed.tap(mt,l));a.hooks.beforeRun.tapPromise(mt,(async()=>{await wt(t,s,i,n.cwd)})),a.hooks.compilation.tap(mt,(t=>{const n=()=>{const e=gt(i[se.BEFORE]),n=gt(i[se.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:mt,stage:s},n)}else t.hooks.optimizeChunkAssets.tap({name:mt},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}})(a.options.entry);a.options.entry=d},Dt=e=>{const{bundler:t,context:n}=e,s=n.getLogger(mt),o=new Map,i={[se.BEFORE]:new Map,[se.MIDDLE]:new Map,[se.AFTER]:new Map};n.inject=e=>{o.set(O(),e)};const r={name:mt,enforce:"post",esbuild:bt(s,n,i),webpack:St(t,s,n,o,i),rspack:St(t,s,n,o,i),rollup:kt(i),vite:{...kt(i),enforce:"pre"}};var a;return a=n.bundler.fullName,["rspack","webpack4","webpack5","webpack"].includes(a)?(r.loadInclude=e=>!!M(e)||null,r.load=e=>M(e)?{code:gt(i[se.MIDDLE])}:null):r.buildStart=async()=>{await wt(s,o,i,n.cwd)},[r]},Et={[ce]:Ie};var Pt="2.5.2";const Mt=(({bundler:n,version:s})=>e(((e,o)=>{const i=((e={})=>({auth:{},disableGit:!1,logLevel:"warn",...e}))(e);"esbuild"===o.framework&&(o.esbuildHostName=S);const r=(({options:e,bundlerName:t,bundlerVersion:n,version:s})=>{const o=process.cwd(),i="webpack"===t?n.split(".")[0]:"",r={errors:[],warnings:[],logs:[],timings:[],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:N(r,e.logLevel),asyncHook:()=>{throw new Error("AsyncHook function called before it was initialized.")},hook:()=>{throw new Error("Hook function called before it was initialized.")},inject:()=>{throw new Error("Inject function called before it was initialized.")},sendLog:()=>{throw new Error("SendLog function called before it was initialized.")},plugins:[],start:Date.now(),version:s}})({options:i,bundlerVersion:n.version||n.VERSION,bundlerName:o.framework,version:s});r.pluginNames.push(S);const a=[];a.push(["analytics",Fe],["build-report",Ze],["bundler-report",nt],["custom-hooks",ot],["git",dt],["injection",Dt]),i.customPlugins&&a.push(["custom",i.customPlugins]),a.push(["error-tracking",ne],["rum",pe],["telemetry",Ae]);for(const[e,t]of a)r.plugins.push(...A(r,t,e)({bundler:n,context:r,options:i}));r.pluginNames.push(...r.plugins.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 r.hook("init",r),r.plugins})))({bundler:v,version:Pt}).rspack,xt=Pt,jt=Et;export{Mt as datadogRspackPlugin,jt as helpers,xt 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","log"],"mappings":";;;;;;;;AAIO;ACwBSA;AACVC;AAGFC"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../factory/src/validate.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\nimport type { Options, OptionsWithDefaults } from '@dd/core/types';\n\nexport const validateOptions = (options: Options = {}): OptionsWithDefaults => {\n return {\n auth: {},\n disableGit: false,\n logLevel: 'warn',\n ...options,\n };\n};\n","// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.\n// This product includes software developed at Datadog (https://www.datadoghq.com/).\n// Copyright 2019-Present Datadog, Inc.\n\nimport type { 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 sourcemapsTime = log.time('get sourcemaps files');\n const sourcemaps = getSourcemapsFiles(options.sourcemaps, context);\n sourcemapsTime.end();\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 const sendTime = log.time('send sourcemaps');\n await sendSourcemaps(sourcemaps, options.sourcemaps, context, log);\n sendTime.end();\n};\n"],"names":["green","configurationString","log"],"mappings":";;;;;;;;AAMO;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",
4
+ "version": "2.5.2",
5
5
  "license": "MIT",
6
6
  "author": "Datadog",
7
7
  "description": "Datadog Rspack Plugin",