@datadog/rollup-plugin 2.6.3 → 2.6.4

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.
@@ -37,11 +37,8 @@ type types$2 = {
37
37
  interface PrivacyOptions {
38
38
  exclude?: RegExp[] | string[];
39
39
  include?: RegExp[] | string[];
40
- module?: 'cjs' | 'esm';
41
- jsx?: boolean;
42
- transformStrategy?: 'ast';
43
- typescript?: boolean;
44
- disabled?: boolean | undefined;
40
+ addToDictionaryFunctionName?: string;
41
+ helperCodeExpression?: string;
45
42
  }
46
43
 
47
44
  type RumOptions = {
@@ -172,7 +169,7 @@ type TimeLogger = {
172
169
  timer: Timer;
173
170
  resume: (startTime?: number) => void;
174
171
  end: (endTime?: number) => void;
175
- pause: (pauseTime?: number) => void;
172
+ pause: (pauseTime?: number, warn?: boolean) => void;
176
173
  tag: (tags: LogTags, opts?: {
177
174
  span?: boolean;
178
175
  }) => void;
@@ -228,9 +225,10 @@ type CustomHooks = {
228
225
  asyncTrueEnd?: () => Promise<void> | void;
229
226
  cwd?: HookFn<[string]>;
230
227
  init?: HookFn<[GlobalContext]>;
231
- buildReport?: HookFn<[BuildReport]>;
228
+ buildReport?: AsyncHookFn<[BuildReport]>;
232
229
  bundlerReport?: HookFn<[BundlerReport]>;
233
230
  git?: AsyncHookFn<[RepositoryData]>;
231
+ telemetryBundlerContext?: AsyncHookFn<[Report]>;
234
232
  syncTrueEnd?: () => void;
235
233
  };
236
234
  type PluginOptions = Assign<UnpluginOptions & CustomHooks, {
@@ -284,6 +282,39 @@ type GlobalStores = {
284
282
  timings: Timer[];
285
283
  warnings: string[];
286
284
  };
285
+ type TAP_TYPES = 'default' | 'async' | 'promise';
286
+ interface ValueContext {
287
+ type: string;
288
+ name: string;
289
+ value?: string;
290
+ }
291
+ interface Value {
292
+ start: number;
293
+ end: number;
294
+ duration: number;
295
+ context?: ValueContext[];
296
+ type?: TAP_TYPES;
297
+ }
298
+ interface Timing {
299
+ name: string;
300
+ duration: number;
301
+ increment: number;
302
+ events: {
303
+ [key: string]: {
304
+ name: string;
305
+ values: Value[];
306
+ };
307
+ };
308
+ }
309
+ type TimingsMap = Map<string, Timing>;
310
+ interface TimingsReport {
311
+ tapables?: TimingsMap;
312
+ loaders?: TimingsMap;
313
+ modules?: TimingsMap;
314
+ }
315
+ interface Report {
316
+ timings: TimingsReport;
317
+ }
287
318
 
288
319
  interface Metric {
289
320
  metric: string;
package/dist/src/index.js CHANGED
@@ -1,5 +1,5 @@
1
- "use strict";var e=require("unplugin"),t=require("chalk"),n=require("async-retry"),s=require("buffer"),o=require("fs/promises"),r=require("fs"),i=require("path"),a=require("stream"),u=require("outdent"),c=require("p-queue"),p=require("zlib"),l=require("@datadog/js-instrumentation-wasm"),d=require("@rollup/pluginutils"),m=require("node:fs"),f=require("node:path"),h=require("pretty-bytes"),g=require("perf_hooks"),y=require("glob"),w=require("simple-git"),b=require("os"),v=require("module"),$=require("rollup");const k="__datadog-helper-file",S=["development","production","test"],D="datadog-build-plugins",E=[400,403,413],x=e=>{const{auth:t,url:s,method:o="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 n((async(e,n)=>{let a;try{const e={method:o,duplex:"half"};let n={"X-Datadog-Origin":"build-plugins"};if(t?.apiKey&&(n["DD-API-KEY"]=t.apiKey),t?.appKey&&(n["DD-APPLICATION-KEY"]=t.appKey),"function"==typeof r){const{data:t,headers:s}=await r();e.body=t,n={...n,...s}}a=await fetch(s,{...e,headers:n})}catch(t){return e(t),{}}if(!a.ok){const t=`HTTP ${a.status} ${a.statusText}`;if(E.includes(a.status))return e(new Error(t)),{};throw new Error(t)}try{let e;return e="json"===i?await a.json():await a.text(),e}catch(t){return e(t),{}}}),a)},P=e=>({message:t,context:n})=>x({retries:2,minTimeout:100,url:"https://browser-http-intake.logs.datadoghq.com/v1/input/pub44d5f4eb86e1392037b7501f7adc540e",method:"POST",type:"json",getData:async()=>{const s={ddsource:e.packageName||D,message:t,service:"build-plugins",team:"language-foundations",env:e.env,version:e.version,bundler:{name:e.bundler.name,version:e.bundler.version},metadata:e.metadata,...n};return{data:JSON.stringify(s),headers:{"Content-Type":"application/json"}}}}),M=async(e,t)=>{await(async e=>o.mkdir(e,{recursive:!0}))(i.dirname(e)),await o.writeFile(e,t,{encoding:"utf-8"})},j=(e,t)=>{var n;n=i.dirname(e),r.mkdirSync(n,{recursive:!0}),r.writeFileSync(e,t,{encoding:"utf-8"})},T=e=>{try{return r.existsSync(e)}catch(e){if("ENOENT"===e.code)return!1;throw e}},z=async(e,t)=>{if("function"==typeof r.openAsBlob){const n=await r.openAsBlob(e,{type:t.contentType});return new s.File([n],t.filename)}{const n=a.Readable.toWeb(r.createReadStream(e)),o=await new Response(n).blob();return new s.File([o],t.filename,{type:t.contentType})}},O=async e=>{const t={empty:!1,exists:!0};try{const{size:n}=await o.stat(e);0===n&&(t.empty=!0)}catch(e){if("ENOENT"!==e.code)throw e;t.exists=!1}return t},R=e=>e.replace(/^@dd\/(datadog-|internal-)?|^datadog-|-plugin$/g,""),N=e=>e.includes(k),I=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()},A=(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)}`},F=(e="")=>{try{if(!e||e.startsWith("git@"))return e;const t=new URL(e),n="/"===t.pathname?"":t.pathname;return`${t.protocol?`${t.protocol}//`:""}${t.host}${n}`}catch{return e}};let C=0;const q=()=>`${Date.now()}.${performance.now()}.${++C}`,L={debug:0,info:1,warn:2,error:3,none:4},_=e=>e.split(">").map(R).join(">"),H=(e,n,s)=>(o,r={})=>{const{level:i="debug",start:a=!0,log:u=!0,tags:c=[]}=r,p={pluginName:e,label:o,spans:[],tags:[...c,`plugin:${e}`,`level:${i}`],logLevel:i,total:0};n.push(p);const l=()=>p.spans.filter((e=>!e.end)),d=n=>{l().length||(!p.spans.length&&u&&s(t.dim(`[${t.cyan(o)}] : start`),"debug"),p.spans.push({start:n||Date.now(),tags:[`plugin:${e}`]}))},m=e=>{const n=l();if(n?.length){n.length>1&&s(`Timer ${t.cyan(o)} has more than one ongoing span.`,"debug");for(const t of n)t.end=e||Date.now()}else s(`Timer ${t.cyan(o)} cannot be paused, no ongoing span.`,"debug")};if(a){let e;"number"==typeof a&&(e=a),d(e)}return{timer:p,resume:d,end:e=>{m(e);const n=p.spans.reduce(((e,t)=>e+(t.end-t.start)),0);p.total=n,u&&s(`[${t.cyan(o)}] : ${t.cyan(I(n))}`,i)},pause:m,tag:(e,t={})=>{const{span:n=!1}=t;if(n){const t=l();for(const n of t)n.tags.push(...e)}else p.tags.push(...e)}}},W=(e,n,s="warn")=>o=>{const r=((e,n,s,o)=>{const r=_(e);return(i,a="debug",{forward:u}={})=>{let c=t.dim,p=console.log;"error"===a?(c=t.red,p=console.error):"warn"===a?(c=t.yellow,p=console.warn):"info"===a&&(c=t.cyan,p=console.log);const l=`[${n.metadata?.name?`${n.metadata.name}|`:""}${a}|${n.bundler.fullName}|${r}]`,d="string"==typeof i?i:JSON.stringify(i,null,2);s.logs.push({bundler:n.bundler.fullName,pluginName:e,type:a,message:d,time:Date.now()}),"error"===a&&s.errors.push(d),"warn"===a&&s.warnings.push(d),u&&s.queue.push(P(n)({message:d,context:{plugin:e,status:a}})),L[a]>=L[o]&&p(`${c(l)} ${d}`)}})(o,e,n,s);return{getLogger:t=>W(e,n,s)(`${_(o)}>${t}`),time:H(o,n.timings,r),error:(e,t)=>r(e,"error",t),warn:(e,t)=>r(e,"warn",t),info:(e,t)=>r(e,"info",t),debug:(e,t)=>r(e,"debug",t)}},B=["buildEnd","buildStart","load","loadInclude","resolveId","transform","transformInclude","watchChange","writeBundle","cwd","init","buildReport","bundlerReport","git"],K=(e,t,n,s)=>(...o)=>{const r=s.time(`${e} | ${t}`,{log:!1,tags:["type:hook",`hook:${t}`]}),i=n(...o);return i instanceof Promise?i.finally((()=>{r.end()})):(r.end(),i)},U=(e,t,n)=>{const s=e.getLogger(D);return e=>{const o=s.time(`hook | init ${n}`,{log:!1}),r=t(e).map((e=>((e,t)=>{const n={...e},s=R(e.name);for(const o of B){const r=e[o];r&&(n[o]=K(s,o,r,t))}return n})(e,s))),i=r.map((e=>`plugin:${e.name}`));return o.tag(i),o.end(),r}},G="errorTracking",J="datadog-error-tracking-plugin",V=(e,n,s)=>{if(".map"!==i.extname(s))throw new Error(`The file ${t.green.bold(s)} is not a sourcemap.`);const o=s.replace(/\.map$/,""),r=i.relative(n,o),a=((e,t)=>{if(e.startsWith("/"))return i.join(e,t);try{const n=e.replace(/\/*$/,"/"),s=new URL(n),o=t.replace(/^[\\/]*/,"");return new URL(o,s).href}catch{return`${e}${t}`}})(e,r);return{minifiedFilePath:o,minifiedUrl:a,relativePath:r}},Q=/[/]+|[\\]+/g,Y=/^[/]+|^[\\]+|[/]+$|[\\]+$/g,X=(e,t)=>{const n=e.replace(Y,"").split(Q),s=t.replace(Y,"").split(Q),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},Z=async(e,t,n,s)=>{const o=await(async(e,t)=>{const[n,s]=await Promise.all([O(e.minifiedFilePath),O(e.sourcemapFilePath)]);return{file:n,sourcemap:s,repeatedPrefix:X(e.relativePath,t)}})(e,n),r=[],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(`${i.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&&r.push(`Minified file is empty: ${e.minifiedFilePath}`),o.file.exists||r.push(`Minified file not found: ${e.minifiedFilePath}`),o.sourcemap.empty&&r.push(`Sourcemap file is empty: ${e.sourcemapFilePath}`),o.sourcemap.exists||r.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:r,warnings:a}},ee=t.green.bold,te=t.yellow.bold,ne=t.red.bold,se=(e,t={})=>async()=>{const n=new FormData,s=p.createGzip();for(const[t,s]of e.content){const e="file"===s.type?await z(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:a.Readable.fromWeb(o.body).pipe(s),headers:{"Content-Encoding":"gzip",...t,...Object.fromEntries(o.headers.entries())}}},oe=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=>Z(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:l,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(c.default?c.default:c)({concurrency:t.maxConcurrency}),a={"DD-EVP-ORIGIN":`${n.bundler.fullName}-build-plugin_sourcemaps`,"DD-EVP-ORIGIN-VERSION":n.version},u=[];for(const c of e){const e={sourcemap:c.content.get("source_map")?.path.replace(n.bundler.outDir,"."),file:c.content.get("minified_file")?.path.replace(n.bundler.outDir,".")};s.debug(`Queuing ${ee(e.sourcemap)} | ${ee(e.file)}`),u.push(i.add((async()=>{try{await x({auth:{apiKey:n.auth.apiKey},url:t.intakeUrl,method:"POST",getData:se(c,a),onRetry:(t,n)=>{const o=`Failed to upload ${te(e.sourcemap)} | ${te(e.file)}:\n ${t.message}\nRetrying ${n}/5`;r.push(o),s.debug(o)}}),s.debug(`Sent ${ee(e.sourcemap)} | ${ee(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 ${ee(e.length.toString())} sourcemaps in ${ee(I(Date.now()-o))}.`),l.length>0){const e=`Failed to upload some sourcemaps:\n${` - ${l.map((({metadata:e,error:t})=>e?`${ne(e.file)} | ${ne(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 - ")}`)},re=async(e,n,s)=>{const o=t.green.bold,r=Object.entries(e.sourcemaps).map((([e,t])=>` - ${e}: ${o(t.toString())}`)).join("\n"),i=s.time("get sourcemaps files"),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=>({...V(e.minifiedPathPrefix,t.bundler.outDir,n),sourcemapFilePath:n,minifiedPathPrefix:e.minifiedPathPrefix})))})(e.sourcemaps,n);i.end();const c=u.outdent`
1
+ "use strict";var e=require("unplugin"),t=require("chalk"),n=require("async-retry"),s=require("buffer"),o=require("fs/promises"),r=require("fs"),i=require("path"),a=require("stream"),u=require("outdent"),c=require("p-queue"),p=require("zlib"),l=require("@datadog/js-instrumentation-wasm"),d=require("@rollup/pluginutils"),m=require("pretty-bytes"),f=require("perf_hooks"),g=require("glob"),h=require("simple-git"),y=require("os"),w=require("module"),b=require("rollup");const v="__datadog-helper-file",$=["development","production","test"],k="datadog-build-plugins",S=[400,403,413],E=e=>{const{auth:t,url:s,method:o="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 n((async(e,n)=>{let a;try{const e={method:o,duplex:"half"};let n={"X-Datadog-Origin":"build-plugins"};if(t?.apiKey&&(n["DD-API-KEY"]=t.apiKey),t?.appKey&&(n["DD-APPLICATION-KEY"]=t.appKey),"function"==typeof r){const{data:t,headers:s}=await r();e.body=t,n={...n,...s}}a=await fetch(s,{...e,headers:n})}catch(t){return e(t),{}}if(!a.ok){const t=`HTTP ${a.status} ${a.statusText}`;if(S.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)},D=e=>({message:t,context:n})=>E({retries:2,minTimeout:100,url:"https://browser-http-intake.logs.datadoghq.com/v1/input/pub44d5f4eb86e1392037b7501f7adc540e",method:"POST",type:"json",getData:async()=>{const s={ddsource:e.packageName||k,message:t,service:"build-plugins",team:"language-foundations",env:e.env,version:e.version,bundler:{name:e.bundler.name,version:e.bundler.version},metadata:e.metadata,...n};return{data:JSON.stringify(s),headers:{"Content-Type":"application/json"}}}}),x=async(e,t)=>{await(async e=>o.mkdir(e,{recursive:!0}))(i.dirname(e)),await o.writeFile(e,t,{encoding:"utf-8"})},M=(e,t)=>{var n;n=i.dirname(e),r.mkdirSync(n,{recursive:!0}),r.writeFileSync(e,t,{encoding:"utf-8"})},P=e=>{try{return r.existsSync(e)}catch(e){if("ENOENT"===e.code)return!1;throw e}},T=async(e,t)=>{if("function"==typeof r.openAsBlob){const n=await r.openAsBlob(e,{type:t.contentType});return new s.File([n],t.filename)}{const n=a.Readable.toWeb(r.createReadStream(e)),o=await new Response(n).blob();return new s.File([o],t.filename,{type:t.contentType})}},j=async e=>{const t={empty:!1,exists:!0};try{const{size:n}=await o.stat(e);0===n&&(t.empty=!0)}catch(e){if("ENOENT"!==e.code)throw e;t.exists=!1}return t},N=e=>e.replace(/^@dd\/(datadog-|internal-)?|^datadog-|-plugin$/g,""),z=e=>e.includes(v),O=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()},R=(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)}`},I=(e="")=>{try{if(!e||e.startsWith("git@"))return e;const t=new URL(e),n="/"===t.pathname?"":t.pathname;return`${t.protocol?`${t.protocol}//`:""}${t.host}${n}`}catch{return e}};let A=0;const C={debug:0,info:1,warn:2,error:3,none:4},F=e=>e.split(">").map(N).join(">"),q=(e,n,s,o)=>{const r=F(e);return(i,a="debug",{forward:u}={})=>{let c=t.dim,p=console.log;"error"===a?(c=t.red,p=console.error):"warn"===a?(c=t.yellow,p=console.warn):"info"===a&&(c=t.cyan,p=console.log);const l=`[${n.metadata?.name?`${n.metadata.name}|`:""}${a}|${n.bundler.fullName}|${r}]`,d="string"==typeof i?i:JSON.stringify(i,null,2);if(s.logs.push({bundler:n.bundler.fullName,pluginName:e,type:a,message:d,time:Date.now()}),"error"===a&&s.errors.push(d),"warn"===a&&s.warnings.push(d),u){const t=async()=>{try{const t=D(n);await t({message:d,context:{plugin:e,status:a}})}catch(t){q(e,n,s,o)(`Error forwarding log: ${t}`,"debug")}};s.queue.push(t())}C[a]>=C[o]&&p(`${c(l)} ${d}`)}},L=(e,n,s)=>(o,r={})=>{const{level:i="debug",start:a=!0,log:u=!0,tags:c=[]}=r,p={pluginName:e,label:o,spans:[],tags:[...c,`plugin:${e}`,`level:${i}`],logLevel:i,total:0};n.push(p);const l=()=>p.spans.filter((e=>!e.end)),d=n=>{l().length||(!p.spans.length&&u&&s(t.dim(`[${t.cyan(o)}] : start`),"debug"),p.spans.push({start:n||Date.now(),tags:[`plugin:${e}`]}))},m=(e,n=!0)=>{const r=l();if(r?.length){r.length>1&&s(`Timer ${t.cyan(o)} has more than one ongoing span.`,"debug");for(const t of r)t.end=e||Date.now()}else n&&s(`Timer ${t.cyan(o)} cannot be paused, no ongoing span.`,"debug")};if(a){let e;"number"==typeof a&&(e=a),d(e)}return{timer:p,resume:d,end:e=>{m(e,!1);const n=p.spans.reduce(((e,t)=>e+(t.end-t.start)),0);p.total=n,u&&s(`[${t.cyan(o)}] : ${t.cyan(O(n))}`,i)},pause:m,tag:(e,t={})=>{const{span:n=!1}=t;if(n){const t=l();for(const n of t)n.tags.push(...e)}else p.tags.push(...e)}}},_=(e,t,n="warn")=>s=>{const o=q(s,e,t,n);return{getLogger:o=>_(e,t,n)(`${F(s)}>${o}`),time:L(s,t.timings,o),error:(e,t)=>o(e,"error",t),warn:(e,t)=>o(e,"warn",t),info:(e,t)=>o(e,"info",t),debug:(e,t)=>o(e,"debug",t)}},H=["buildEnd","buildStart","load","loadInclude","resolveId","transform","transformInclude","watchChange","writeBundle","cwd","init","buildReport","bundlerReport","git"],K=(e,t,n,s)=>(...o)=>{const r=s.time(`${e} | ${t}`,{log:!1,tags:["type:hook",`hook:${t}`]}),i=n(...o);return i instanceof Promise?i.finally((()=>{r.end()})):(r.end(),i)},B=(e,t,n)=>{const s=e.getLogger(k);return e=>{const o=s.time(`hook | init ${n}`,{log:!1}),r=t(e).map((e=>((e,t)=>{const n={...e},s=N(e.name);for(const o of H){const r=e[o];r&&(n[o]=K(s,o,r,t))}return n})(e,s))),i=r.map((e=>`plugin:${e.name}`));return o.tag(i),o.end(),r}},W="errorTracking",U="datadog-error-tracking-plugin",G=(e,n,s)=>{if(".map"!==i.extname(s))throw new Error(`The file ${t.green.bold(s)} is not a sourcemap.`);const o=s.replace(/\.map$/,""),r=i.relative(n,o),a=((e,t)=>{if(e.startsWith("/"))return i.join(e,t);try{const n=e.replace(/\/*$/,"/"),s=new URL(n),o=t.replace(/^[\\/]*/,"");return new URL(o,s).href}catch{return`${e}${t}`}})(e,r);return{minifiedFilePath:o,minifiedUrl:a,relativePath:r}},J=/[/]+|[\\]+/g,V=/^[/]+|^[\\]+|[/]+$|[\\]+$/g,Q=(e,t)=>{const n=e.replace(V,"").split(J),s=t.replace(V,"").split(J),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},Y=async(e,t,n,s)=>{const o=await(async(e,t)=>{const[n,s]=await Promise.all([j(e.minifiedFilePath),j(e.sourcemapFilePath)]);return{file:n,sourcemap:s,repeatedPrefix:Q(e.relativePath,t)}})(e,n),r=[],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(`${i.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&&r.push(`Minified file is empty: ${e.minifiedFilePath}`),o.file.exists||r.push(`Minified file not found: ${e.minifiedFilePath}`),o.sourcemap.empty&&r.push(`Sourcemap file is empty: ${e.sourcemapFilePath}`),o.sourcemap.exists||r.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:r,warnings:a}},X=t.green.bold,Z=t.yellow.bold,ee=t.red.bold,te=(e,t={})=>async()=>{const n=new FormData,s=p.createGzip();for(const[t,s]of e.content){const e="file"===s.type?await T(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:a.Readable.fromWeb(o.body).pipe(s),headers:{"Content-Encoding":"gzip",...t,...Object.fromEntries(o.headers.entries())}}},ne=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.outDir,service:t.service,type:"js_sourcemap",version:t.releaseVersion},a=await Promise.all(e.map((e=>Y(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:l,warnings:d}=await(async(e,t,n,s)=>{const o=[],r=[];if(!n.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(c.default?c.default:c)({concurrency:t.maxConcurrency}),a={"DD-EVP-ORIGIN":`${n.bundlerName}-build-plugin_sourcemaps`,"DD-EVP-ORIGIN-VERSION":n.version},u=[];for(const c of e){const e={sourcemap:c.content.get("source_map")?.path.replace(n.outDir,"."),file:c.content.get("minified_file")?.path.replace(n.outDir,".")};s.debug(`Queuing ${X(e.sourcemap)} | ${X(e.file)}`),u.push(i.add((async()=>{try{await E({auth:{apiKey:n.apiKey},url:t.intakeUrl,method:"POST",getData:te(c,a),onRetry:(t,n)=>{const o=`Failed to upload ${Z(e.sourcemap)} | ${Z(e.file)}:\n ${t.message}\nRetrying ${n}/5`;r.push(o),s.debug(o)}}),s.debug(`Sent ${X(e.sourcemap)} | ${X(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,{apiKey:n.apiKey,bundlerName:n.bundlerName,version:n.version,outDir:n.outDir},s);if(s.info(`Done uploading ${X(e.length.toString())} sourcemaps in ${X(O(Date.now()-o))}.`),l.length>0){const e=`Failed to upload some sourcemaps:\n${` - ${l.map((({metadata:e,error:t})=>e?`${ee(e.file)} | ${ee(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 - ")}`)},se=async(e,n,s)=>{const o=t.green.bold,r=Object.entries(e.sourcemaps).map((([e,t])=>` - ${e}: ${o(t.toString())}`)).join("\n"),i=s.time("get sourcemaps files"),a=((e,t)=>{if(!t.outputs||0===t.outputs.length)throw new Error("No output files found.");return t.outputs.filter((e=>e.filepath.endsWith(".map"))).map((e=>e.filepath)).map((n=>({...G(e.minifiedPathPrefix,t.outDir,n),sourcemapFilePath:n,minifiedPathPrefix:e.minifiedPathPrefix})))})(e.sourcemaps,{outDir:n.outDir,outputs:n.outputs});i.end();const c=u.outdent`
2
2
  Uploading ${o(a.length.toString())} sourcemaps with configuration:
3
3
  ${r}
4
- `;s.info(c);const p=s.time("send sourcemaps");await oe(a,e.sourcemaps,n,s),p.end()},ie=`https://sourcemap-intake.${process.env.DATADOG_SITE||"datadoghq.com"}/api/v2/srcmap`,ae=e=>{const n=t.bold.red,s=e[G]||{},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||ie,...s.sourcemaps};o.config=e}return o},ue=({options:e,context:t})=>{const n=t.getLogger(J),s=n.time("validate options"),o=((e,t)=>{const n=[],s=ae(e);if(n.push(...s.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${J}.`);const o={disabled:!e[G],...e[G],sourcemaps:void 0};return s.config&&(o.sourcemaps=s.config),o})(e,n);return s.end(),o.disabled?[]:[{name:J,enforce:"post",async writeBundle(){if(!o.disabled&&o.sourcemaps){const e=n.time("sourcemaps process");await re(o,t,n),e.end()}}}]};var ce=(e=>(e[e.BEFORE=0]="BEFORE",e[e.MIDDLE=1]="MIDDLE",e[e.AFTER=2]="AFTER",e))(ce||{});const pe="rum",le="datadog-rum-plugin",de="\0datadog:privacy-helpers";const me=e=>{if(e.disabled)return;const t=function(e){return{input:{module:e.module,jsx:e.jsx,typescript:e.typescript},privacy:{addToDictionaryHelper:{import:{module:de,func:"$"}}}}}(e),n=d.createFilter(e.include,e.exclude),s=f.join(__dirname,"cjs"===e.module?"./privacy-helpers.js":"./privacy-helpers.mjs");return{name:"datadog-rum-privacy-plugin",enforce:"pre",resolveId:async e=>e===de?{id:de}:null,load:async e=>e===de?{code:m.readFileSync(s,"utf8")}:null,transformInclude:e=>n(e),transform:async(e,n)=>l.instrument({id:n,code:e},t)}},fe=e=>`DD_RUM.init({${JSON.stringify(e.sdk).replace(/(^{|}$)/g,"")}});\n`,he=(e,t)=>{const n=e.sdk;if(n.clientToken)return fe(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 fe({...e,sdk:{clientToken:s,...n}})}},ge=e=>{const n=t.bold.red,s=e[pe]||{},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},ye=e=>{const t=e[pe]||{},n={errors:[]};if(t.privacy){const e={exclude:[/\/node_modules\//,/\.preval\./],include:[/\.(?:c|m)?(?:j|t)sx?$/],module:"esm",transformStrategy:"ast"};n.config={...e,...t.privacy}}return n},we=({options:e,context:t})=>{const n=((e,t)=>{const n=[],s=ge(e),o=ye(e);if(n.push(...s.errors),n.push(...o.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${le}.`);const r={disabled:!e[pe],...e[pe],sdk:void 0,privacy:void 0};return s.config&&(r.sdk=s.config),o.config&&(r.privacy=o.config),r})(e,t.getLogger(le)),s=[];if(n.disabled)return s;if(n.sdk&&(t.inject({type:"file",position:ce.MIDDLE,value:i.join(__dirname,"./rum-browser-sdk.js")}),t.inject({type:"code",position:ce.MIDDLE,value:he(n,t)})),n.privacy){const e=me(n.privacy);e&&s.push(e)}return s},be="telemetry",ve="datadog-telemetry-plugin",$e=[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}],ke=(e,t)=>({type:"gauge",tags:[...e.tags,...t.tags],metric:`${t.prefix?`${t.prefix}.`:""}${e.metric}`,points:[[t.timestamp,e.value]]}),Se=(e="")=>e.endsWith("/")?e:`${e}/`,De=(e,t)=>{let n=e;return e.split(Se(t)),n.split("!").pop().replace(/(.*)?\/node_modules\//,"/node_modules/").replace(/^((\.)*\/)+/,"")},Ee=(e,t)=>e.split("!").pop().replace(Se(t),"./"),xe=(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)),Ee(s||"no-name",n)},Pe=e=>e.replace(/^.*\/node_modules\/(@[a-z0-9][\w-.]+\/[a-z0-9][\w-.]*|[^/]+).*$/,"$1"),Me=e=>e.map((e=>({type:e?.constructor?.name??typeof e,name:e?.name,value:"string"==typeof e?e:void 0}))),je=(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,c=new Map,p=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$/,"");p.has(n)||p.set(n,[]),p.get(n).push(e.name)}}for(const e of s)for(const t of e.inputs)c.has(t.filepath)||c.set(t.filepath,[]),c.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}`))),c.has(e.filepath)&&n.push(...c.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$/,"");p.has(s)&&n.push(...p.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(ke(s,t))}else n.add(ke(e,t));n.add(ke({metric:"metrics.count",type:"count",value:n.size+1,tags:[]},t))},Te=async(e,t,n,s)=>{if("string"!=typeof t&&"object"!=typeof t&&!t)return;const{report:o,metrics:r}=e,a=Date.now();let u="";const c={timings:!0,metrics:!0};"object"==typeof t?(u=t.destination,c.timings=t.timings||!1,c.metrics=t.metrics||!1):"string"==typeof t&&(u=t);const p=i.resolve(s,u);try{const e={},t={};c.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}}),c.metrics&&(t.metrics={content:Array.from(r)});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 M(e,n)})(i.join(p,`${t}.json`),s.content),n.debug(`Wrote ${t}.json in ${I(Date.now()-o)}`)}catch(s){n.error(`Failed to write ${t}.json in ${I(Date.now()-o)}`),e[t]=s}}));await Promise.all(s),n.debug(`Wrote files in ${I(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}`)}},ze=t.bold.red,Oe=t.bold.cyan,Re=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},Ne=(e,t)=>{if(!t||!t.size)return[];const n=Array.from(t.values());n.sort(Re("duration"));const s={name:`${e} duration`,values:n.map((e=>({name:e.name,value:I(e.duration)}))),top:!0};n.sort(Re("increment"));return[s,{name:`${e} hits`,values:n.map((e=>({name:e.name,value:e.increment.toString()}))),top:!0}]},Ie=(e,t,n)=>{const s=[];var o;n&&(s.push(...Ne("Loader",n.timings.loaders)),s.push(...Ne("Tapable",n.timings.tapables)),s.push(...Ne("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,metadata:e.metadata,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,c=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)c.has(n)||c.set(n,new Set),c.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(c.has(e.filepath)){const t=c.get(e.filepath);for(const e of t)n.add(e)}u.set(e.filepath,t),c.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=c.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 p=Array.from(r);return p.sort(Re((e=>e.dependents.size))),t.values=p.map((e=>({name:e.name,value:e.dependents.size.toString()}))),p.sort(Re((e=>e.dependencies.size))),n.values=p.map((e=>({name:e.name,value:e.dependencies.size.toString()}))),p.sort(Re("size")),s.values=p.map((e=>({name:e.name,value:h(e.size)}))),p.sort(Re("aggregatedSize")),o.values=p.map((e=>({name:e.name,value:h(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(Re((e=>e.size))).map((e=>({name:e.name,value:h(e.size)}))),top:!0},{name:"Entry aggregated size",values:(o.build.entries||[]).sort(Re((e=>e.size))).map((e=>({name:e.name,value:h(e.size)}))),top:!0},{name:"Entry number of modules",values:(o.build.entries||[]).sort(Re((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:I(e.build.start-e.start)}),e.build.duration&&t.values.push({name:"Build duration",value:I(e.build.duration)}),e.build.writeDuration&&t.values.push({name:"Write duration",value:I(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=A(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+=` [${ze(e.value)}] ${" ".repeat(n)}${Oe(e.name)}\n`}}return t})(s);t.info(r)},Ae=["onStart","onLoad","onResolve","onEnd"],Fe=new Map,Ce=new Map,qe=(e,t,n)=>{const s=Object.assign({},e);for(const o of Ae)s[o]=async(s,r)=>{const i=Fe.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=Ee(e[0].path,n),a=Ce.get(s)||{name:s,increment:0,duration:0,events:{}};a.events[o]=a.events[o]||{name:o,values:[]};const u=g.performance.now();try{return await r(...e)}finally{const n=g.performance.now(),r=n-u,c={start:u,end:n,duration:r,context:Me(e)};i.events[o].values.push(c),i.duration+=r,i.increment+=1,Fe.set(t,i),a.events[o].values.push(c),a.duration+=r,a.increment+=1,Ce.set(s,a)}}))};return s},Le=(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(ve))continue;const n=s.setup;s.setup=async o=>{const r=qe(o,s.name,t);await n({...r,initialOptions:{...r.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:r}={plugins:Fe,modules:Ce};s.end(),e.report={timings:{tapables:o,modules:r}}}))}});class _e{constructor(e){this.started={},this.finished=[],this.cwd=e}startModule(e,t){const n=xe(e,t,this.cwd),s=(e=>(e.loaders||[]).map((e=>e.loader||e)).map(Pe))(e);s.length||s.push("no-loader"),this.started[n]={module:De(n),timings:{start:g.performance.now(),duration:0,end:0},loaders:s}}doneModule(e,t){const n=xe(e,t,this.cwd),s=this.started[n];s&&(s.timings.end=g.performance.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 He{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=g.performance.now(),i=t.apply(this,o),a=()=>{this.saveResult(e,n,s,Me(o),r,g.performance.now())};return i.then(a,a),i}}getAsyncTapPatch(e,t,n,s){return(...o)=>{this.checkNewHooks();const r=g.performance.now(),i=o.pop();return t.apply(this,[...o,(...t)=>(this.saveResult(e,n,s,Me(o),r,g.performance.now()),i(...t))])}}getDefaultTapPatch(e,t,n,s){return(...o)=>{this.checkNewHooks();const r=g.performance.now(),i=t.apply(this,o);return this.saveResult(e,n,s,Me(o),r,g.performance.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 c=this.getTapPatch(e,r,i,t);return n.call(s,o,c)}}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(ve)||(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 We=(e,t)=>async n=>{const s=t.getLogger(ve);t.build.start=Date.now();const o={name:ve},r=new He(t.cwd),i=new _e(t.cwd),a=s.time("parse compiler hooks");r.throughHooks(n),a.end(),n.hooks.thisCompilation.tap(o,(e=>{const t=s.time("parse compilation hooks");r.throughHooks(e),t.end(),e.hooks.buildModule.tap(o,(t=>{i.startModule(t,e)})),e.hooks.succeedModule.tap(o,(t=>{i.doneModule(t,e)})),e.hooks.failedModule&&e.hooks.failedModule.tap(o,(t=>{i.doneModule(t,e)}))})),n.hooks.afterEmit.tapPromise(o,(async t=>{const{timings:n}=r.getResults(),{loaders:s,modules:o}=i.getResults();e.report={timings:{tapables:n,loaders:s,modules:o}}}))},Be={filters:$e},Ke=({options:e,context:t})=>{const n=t.getLogger(ve);let s=0;const o={start:Date.now()},r=(e=>{const t=e[be]?.endPoint||"https://app.datadoghq.com";return{disabled:!e[be],enableTracing:!1,filters:$e,output:!1,prefix:"",tags:[],...e[be],endPoint:t.startsWith("http")?t:`https://${t}`}})(e),i=[];if(r.disabled)return i;const a={name:ve,enforce:"pre",esbuild:Le(o,t,n),webpack:We(o,t),rspack:We(o,t)},u=n.time("build",{start:!1}),c={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,i=(e=>({timestamp:Math.floor((e.timestamp||Date.now())/1e3),tags:e.tags,prefix:e.prefix,filters:e.filters}))(r),a=n.time("aggregating metrics");je(t,i,e,o.report),a.end();const u=n.time("writing to files");await Te({report:o.report,metrics:e},r.output,n,t.bundler.outDir),u.end();const c=n.time("outputing report");Ie(t,n,o.report),c.end();const p=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()).sort((([e],[t])=>e.localeCompare(t))).map((([e,t])=>`${e} - ${t}`));return n.debug(`\nSending ${e.size} metrics.\nMetrics:\n - ${o.join("\n - ")}`),x({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:r.endPoint},n),p.end()}};return r.enableTracing&&i.push(a),i.push(c),i},Ue="datadog-analytics-plugin",Ge=({context:e})=>{const t=e.getLogger(Ue);return[{name:Ue,async buildStart(){"production"===e.env&&e.queue((async()=>{try{await e.sendLog({message:"Build started",context:{plugins:e.pluginNames}})}catch(e){t.debug(`Could not submit data to Datadog: ${e}`)}})())}}]},Je="datadog-async-queue-plugin",Ve=e=>{const{context:t,stores:n}=e,s=t.getLogger(Je),o=[];return t.queue=e=>{const t=e.catch((e=>{o.push(e.message||e.toString())}));n.queue.push(t)},[{name:Je,asyncTrueEnd:async()=>{await Promise.all(n.queue),o.length>0&&s.error(`Error occurred while processing async queue:\n ${o.join("\n ")}`)}}]},Qe=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("*")?y.glob.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},Ye=(e,t)=>N(t)?k:t.startsWith(e)||i.isAbsolute(t)?t:i.resolve(e,t),Xe=e=>{let t,n=Ye(process.cwd(),e),s=n.split(i.sep).length;for(;s>0;){const e=i.resolve(n,"package.json");T(e)&&(t=n),n=n.split(i.sep).slice(0,-1).join(i.sep),s--}return t},Ze=/\.(?!.*(?:\.|\/|\\))(\w{1,})/g,et=/(\?|%3F|\|)+/gi,tt=e=>{return"unknown"===e?e:e.includes("webpack/runtime")?"runtime":(t=ot(e),Ze.lastIndex=0,Ze.exec(t)?.[1]||"unknown");var t},nt=["unknown","commonjsHelpers.js",`vite${i.sep}preload-helper.js`],st=(e,t,n)=>{const s=new Set;for(const n of e){const e=ot(n);N(n)||e===t||nt.includes(e)||s.add(e)}return s},ot=e=>e.split("!").pop().split(et).shift().replace(/^[^\w\s.,!@#$%^&*()=+~`\-/\\]+/,""),rt=(e,t)=>N(t)?k:"unknown"===t?t:t.includes("webpack/runtime")?t.replace("webpack/runtime/","").replace(/ +/g,"-"):((e,t)=>{const n=t.split(i.sep),s=e.split(i.sep).filter(((e,t)=>e===n[t])).join(i.sep);return e.replace(s,"")})(t.split("!").pop(),Ye(e.cwd,e.bundler.outDir)).split("node_modules").pop().split(et).shift().replace(/^((\.\.?)?[/\\])+/g,""),it=(e,t)=>Object.fromEntries(Object.entries(e).map((([e,n])=>[Ye(t,e),n]))),at=(e,t)=>({setup(n){const s=new Map;let o=[];const r=t.time("build report",{start:!1});n.onStart((async()=>{s.clear(),o=[],r.resume();const i=t.time("process entries");o.push(...await Qe(n,e,t));for(const t of o){const n=rt(e,t.resolved);t.name?s.set(n,t.name):s.set(n,n)}i.end(),r.pause()})),n.onEnd((n=>{r.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=[],c=[],p=[],l=[],d=[],m={},f={},h=t.time("indexing metafile data"),g=it(n.metafile.inputs,a),y=it(n.metafile.outputs,a);h.end();const w=e=>{if(!N(e))return e;const t=g[Ye(a,e)];if(!t)return e;const n=t.imports.find((e=>!N(e.path)));return n?n.path:e},b=t.time("looping through inputs");for(const[t,s]of Object.entries(n.metafile.inputs)){if(N(t))continue;const n=Ye(a,t),o={name:rt(e,t),filepath:n,dependents:new Set,dependencies:new Set,size:s.bytes,type:tt(t)};m[n]=o,u.push(o)}b.end();const v=t.time("looping through outputs");for(const[o,r]of Object.entries(n.metafile.outputs)){const n=Ye(a,o),i=rt(e,n),u=[];for(const e of Object.keys(r.inputs)){if(N(e))continue;const n=m[Ye(a,e)];n?u.push(n):t.debug(`Input ${e} not found for output ${i}`)}if(r.entryPoint&&!u.length){const e=m[Ye(a,r.entryPoint)];if(!e){t.debug(`Input ${r.entryPoint} not found for output ${i}`);continue}u.push(e)}const d={name:i,filepath:n,inputs:u,size:r.bytes,type:tt(n)};if(f[n]=d,"map"===d.type&&l.push(d),c.push(d),!r.entryPoint)continue;const h=m[Ye(a,w(r.entryPoint))];if(h){if(!s.get(h.name))continue;const e={...d,name:s.get(h.name)||h.name,outputs:[d],size:d.size};p.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:y}},S=/(<runtime>|https:|file:|data:|#)/g,D=e=>!N(e)&&!e.match(S),E=(n,s,o={})=>{if(!D(n))return o;const r=s.report[n];if(!r)return t.debug(`Could not find report's ${n}`),o;if(o[r.filepath])return o;o[r.filepath]=r;const c=s.meta[n];if(!c)return t.debug(`Could not find metafile's ${n}`),o;if(!c.imports||!c.imports.length)return o;for(const t of c.imports){const c=t.path.match(/^\.\.?\//),p=c?i.dirname(n):a,l=Ye(p,t.path);if(t.external){if(D(t.path)){const n=c?l:t.path,s=k.inputs.report[n]||{filepath:n,name:rt(e,t.path),size:0,type:"external",dependencies:new Set,dependents:new Set};"dependencies"in r&&(s.dependents.add(r),r.dependencies.add(s)),"inputs"in r&&!r.inputs.includes(s)&&r.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},x=t.time("looping through entries");for(const e of p){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)}x.end();const P=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?i.dirname(e.filepath):a,r=Ye(o,s.path);let u;if(s.external){const e=n?r:s.path;u=k.inputs.report[e]}else u=k.inputs.report[r];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}`)}P.end(),e.build.outputs=c,e.build.inputs=u,e.build.entries=d,r.end(),e.hook("buildReport",e.build)}))}}),ut=(e,t)=>{const n=t.time("module parsing",{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=ot(e.id),o=s[t]||{dependencies:new Set,dependents:new Set},r=st(new Set([...e.dynamicallyImportedIds,...e.importedIds]),t),i=st(new Set([...e.dynamicImporters,...e.importers]),t);for(const e of i)o.dependents.add(e);for(const e of r)o.dependencies.add(e);s[t]=o,n.tag([`module:${t}`],{span:!0}),n.pause()},writeBundle(n,o){const r=t.time("build report"),i=[],a=[],u=[],c=[],p={},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=ot(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=ot(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,r]of Object.entries(o)){const o={name:n,filepath:Ye(e.bundler.outDir,n),inputs:[],size:"code"in r?Buffer.byteLength(r.code,"utf8"):Buffer.byteLength(r.source,"utf8"),type:tt(n)};if("map"===o.type&&c.push(o),"modules"in r)for(const[t,n]of Object.entries(r.modules)){if(ot(t)!==t)continue;const s={name:rt(e,t),dependencies:new Set,dependents:new Set,filepath:t,size:n.originalLength,type:tt(t)};o.inputs.push(s),d[s.filepath]=s,i.push(s)}if("imports"in r)for(const n of r.imports){const r=ot(n);if(!s[r]){p[Ye(e.bundler.outDir,r)]=o;continue}if(d[r]){t.debug(`Input report already there for ${r} from ${o.name}.`);continue}const a={name:rt(e,n),dependencies:new Set,dependents:new Set,filepath:r,size:0,type:"external"};o.inputs.push(a),d[a.filepath]=a,i.push(a)}"isEntry"in r&&r.isEntry&&u.push({...o,name:r.name,size:0,outputs:[o]}),m[o.filepath]=o,a.push(o)}h.end();for(const[e,n]of Object.entries(p)){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 i){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 ${rt(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 ${rt(e,s)} of ${n.name}`)}}else t.debug(`Could not find the import report for ${n.name}.`)}if(g.end(),c.length){const e=t.time("filling sourcemaps inputs");for(const e of c){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 y=(n,s={})=>{if(s[n])return s;const r=rt(e,n),i=m[n];if(!i){return!!d[r]||t.debug(`Could not find output for ${r}`),s}s[n]=i;const a=o[rt(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)y(Ye(e.bundler.outDir,t),s);return s},w=t.time("filling entries");for(const e of u){const t=y(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)}w.end(),e.build.inputs=i,e.build.outputs=a,e.build.entries=l,r.end(),e.hook("buildReport",e.build)}}},ct=(e,t,n)=>s=>{let o=[],r=[],i=[];const a=new Map,u=new Map,c=new Map,p=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 ")||N(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=ot(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(p.has(e)){const n=p.get(e);n.dependencies.push(...t.dependencies||[]),n.blocks.push(...t.blocks||[])}else p.set(e,t)},y=(e,t=[])=>{if("dependencies"in e)for(const n of e.dependencies)t.push(n),y(n,t);if("blocks"in e)for(const n of e.blocks)y(n,t);return t},w=(e,t)=>{if("request"in t&&t.request){const n=ot(t.request);if(p.has(n))return p.get(n);if(e.context){const t=Ye(ot(e.context),n);if(p.has(t))return p.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=[],r=[],i=[],a.clear(),u.clear(),p.clear(),d.clear(),s.hooks.finishModules.tap(t,(t=>{m.resume();const s=n.time("dependency graph"),r=n.time("indexing modules");for(const e of t)g(e);r.end();const i=n.time("building inputs");for(const n of t){const t=n.identifier(),s=rt(e,t),r=new Set(y(n).map((e=>{const s=w(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 i=d.get(t)||{dependents:new Set,dependencies:new Set};for(const e of r){const n=d.get(e)||{dependencies:new Set,dependents:new Set};n.dependents.add(t),i.dependencies.add(e),d.set(e,n)}d.set(t,i);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:tt(t)};o.push(u),a.set(t,u),b(n)&&a.set(h(t),u)}i.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,p=t.getAssets(),d=t=>[...t.files||[],...t.auxiliaryFiles||[]].map((t=>Ye(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"===tt(e))continue;const t=c.get(e)||new Set;for(const e of n)t.add(e);c.set(e,t)}}h.end();const y=n.time("building outputs");for(const t of p){const s={size:t.source.size()||0,name:t.name,inputs:[],filepath:Ye(e.bundler.outDir,t.name),type:tt(t.name)};if(u.set(s.filepath,s),r.push(s),"map"===s.type){l.push(s);continue}const o=c.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}`)}y.end();const w=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}`)}w.end();const b=n.time("building entries");for(const[s,o]of t.entrypoints){const t=new Map,r=new Map;let a=0;const c=o.chunks.flatMap(d),p=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"===tt(e)));for(const e of c){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)r.has(e.filepath)||r.set(e.filepath,e);a+=s.size}}else n.debug(`Could not find output of ${JSON.stringify(e)}`)}const l={name:s,filepath:p?Ye(e.bundler.outDir,p):"unknown",size:a,inputs:Array.from(r.values()),outputs:Array.from(t.values()),type:p?tt(p):"unknown"};i.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=r,e.build.entries=i,m.end(),e.hook("buildReport",e.build)}))},pt="datadog-build-report-plugin",lt=e=>{const{context:t}=e,n=t.getLogger(pt);return[{name:pt,enforce:"post",esbuild:at(t,n),rspack:ct(t,pt,n),webpack:ct(t,pt,n),vite:ut(t,n),rollup:ut(t,n)}]},dt=e=>{const t=new Set(e);for(const n of e){const s=Xe(n);s&&!e.has(s)&&t.add(s)}const n=(e=>{const t=[...e].map((e=>Ye(process.cwd(),e).split(i.sep))),n=t.length?Math.min(...t.map((e=>e.length))):0,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(i.sep)||i.sep})(Array.from(t));if(n!==i.sep)return n},mt=e=>{if(!("output"in e&&e.output))return;const t=e.output,n=Array.isArray(t)?t:[t];for(const e of n){if(e.dir)return e.dir;if(e.file)return i.dirname(e.file)}},ft=(e,t)=>t?i.isAbsolute(t)?t:i.resolve(e,t):"",ht=e=>t=>{e.bundler.rawConfig=t.options,t.options.output?.path&&(e.bundler.outDir=ft(process.cwd(),t.options.output.path)),e.hook("bundlerReport",e.bundler),t.options.context&&(e.cwd=t.options.context),e.hook("cwd",e.cwd)},gt=e=>{let t=!1;return{config(n){e.bundler.rawConfig=n;let s="";s=n.build?.outDir?n.build.outDir:"dist",n.root&&(e.cwd=n.root,e.hook("cwd",e.cwd),t=!0),e.bundler.outDir=ft(e.cwd,s)},options(n){if(!t){const t=i.relative(e.cwd,e.bundler.outDir);e.cwd=process.cwd(),e.hook("cwd",e.cwd),e.bundler.outDir=ft(e.cwd,t)}const s=mt(n);s&&(e.bundler.outDir=ft(process.cwd(),s)),e.hook("bundlerReport",e.bundler)}}},yt=e=>{const{context:t}=e;return[{name:"datadog-bundler-report-plugin",enforce:"pre",esbuild:{setup(e){t.bundler.rawConfig=e.initialOptions,e.initialOptions.absWorkingDir&&(t.cwd=e.initialOptions.absWorkingDir),e.initialOptions.outdir&&(t.bundler.outDir=ft(t.cwd,e.initialOptions.outdir)),e.initialOptions.outfile&&(t.bundler.outDir=ft(t.cwd,i.dirname(e.initialOptions.outfile))),t.hook("cwd",t.cwd),t.hook("bundlerReport",t.bundler),e.initialOptions.metafile=!0}},webpack:ht(t),rspack:ht(t),vite:gt(t),rollup:{options(e){t.bundler.rawConfig=e,t.cwd=(e=>{const t=new Set;if(e.input){const n=Array.isArray(e.input)?e.input:"object"==typeof e.input?Object.values(e.input):[e.input];for(const e of n){if("string"!=typeof e)throw new Error("Invalid input type");t.add(i.dirname(e))}}const n=mt(e);n&&i.isAbsolute(n)&&t.add(n);return dt(t)||process.cwd()})(e),t.hook("cwd",t.cwd);const n=mt(e);t.bundler.outDir=n?ft(process.cwd(),n):i.resolve(process.cwd(),"dist"),t.hook("bundlerReport",t.bundler)}}}]},wt="datadog-custom-hooks-plugin",bt=e=>{const{context:t}=e,n=t.getLogger(wt),s=e=>(s,...o)=>{const r=n.time(`execution | ${s}`,{tags:["type:custom-hook",`hook:${s}`]}),i=[],a=[];for(const n of t.plugins){if(!(s in n))continue;const t=n[s];if("function"==typeof t)try{const r=t(...o);r instanceof Promise&&(e||i.push(`Plugin "${n.name}" returned a promise on the non async hook "${s}".`),a.push(r))}catch(e){i.push(`Plugin "${n.name}" errored on hook "${s}". [${e}]`)}else i.push(`Plugin "${n.name}" has an invalid hook type for "${s}". [${typeof t}]`)}if(i.length>0){for(const e of i)n.error(e);throw new Error("Some plugins errored during the hook execution.")}return Promise.all(a).finally((()=>r.end()))};return t.hook=s(!1),t.asyncHook=s(!0),[{name:wt,enforce:"pre"}]};class vt{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=(s=e,r.readFileSync(s,{encoding:"utf-8"}));var s;const o=JSON.parse(n);if(!o.sources)return void t("Missing 'sources' field in sourcemap.");const i=o.sources;if(0===i.length)return void t("Empty 'sources' field in sourcemap.");const a=this.matchSources(i);if(0!==a.length)return a;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 $t=async e=>{const t=await e.getRemotes(!0);if(0===t.length)throw new Error("No git remotes available");const n=await kt(e);for(const e of t)if(e.name===n)return F(e.refs.push);return F(t[0].refs.push)},kt=async e=>{try{return(await e.getConfig("clone.defaultRemoteName"))?.value??"origin"}catch(e){return"origin"}},St=async e=>e.revparse("HEAD"),Dt=async e=>(await e.raw("ls-files")).split(/\r\n|\r|\n/),Et=async e=>e.branch(),xt=async e=>e.show(["-s","--format=%s"]),Pt=async e=>e.show(["-s","--format=%an,%ae,%aI,%cn,%ce,%cI"]),Mt="datadog-git-plugin",jt=e=>{const{options:t,context:n}=e,s=n.getLogger(Mt);return[{name:Mt,enforce:"pre",async buildStart(){if((e=>!!e.errorTracking?.sourcemaps&&!0!==e.errorTracking?.sourcemaps.disableGit&&!0!==e.disableGit)(t))try{const e=s.time("get git information"),t=await(async e=>{const t=[St(e),Et(e),xt(e),Pt(e),Dt(e),$t(e)],[n,s,o,r,i,a]=await Promise.all(t),[u,c,p,l,d,m]=r.split(",").map((e=>e.trim()));return{commit:{author:{name:u,email:c,date:p},committer:{name:l,email:d,date:m},message:o.trim(),hash:n},hash:n,branch:s.current,remote:a.trim(),trackedFilesMatcher:new vt(i)}})(await(async e=>{const t={baseDir:e||process.cwd(),binary:"git",maxConcurrentProcesses:3};try{const e=w.simpleGit(t),n=await e.revparse("--show-toplevel");t.baseDir=n}catch{}return w.simpleGit(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}`)}}}]},Tt="datadog-injection-plugin",zt=/^https?:\/\//,Ot=async(e,t=process.cwd())=>(e=>o.readFile(e,{encoding:"utf-8"}))(Ye(t,e)),Rt=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(zt)?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 Ot(o,n);else{if("code"!==e.type)throw new Error(`Invalid item type "${e.type}", only accepts "code" or "file".`);s=o}}catch(r){const i=`${e.type} - ${A(o)}`;e.fallback?(t.info(`Fallback for "${i}": ${r.toString()}`),s=await Rt(e.fallback,t,n)):t.warn(`Failed "${i}": ${r.toString()}`)}return s},Nt=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`},It=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 Rt(r,t,n);e&&s.set(o,{value:e,position:r.position||ce.BEFORE})}return s})(t,e,s);for(const[e,t]of o.entries())n[t.position].set(e,t.value)},At=r.promises,Ft=(e,t,n)=>({setup(s){const{onStart:o,onResolve:a,onLoad:u,onEnd:c,esbuild:p,initialOptions:l}=s,d=[],m=`${q()}.${ce.MIDDLE}.${k}.js`,f=r.realpathSync(b.tmpdir()),h=i.resolve(f,m),g=new RegExp(`${m}$`),y=l.inject;l.inject=y?[...y]:[],l.inject.push(h),o((async()=>{d.push(...await Qe(s,t,e)),s.initialOptions.inject=y;try{await M(h,"")}catch(t){e.error(`Could not create the files: ${t.message}`)}})),a({filter:g},(async e=>({path:e.path,namespace:Tt}))),u({filter:g,namespace:Tt},(async()=>({contents:Nt(n[ce.MIDDLE])||" ",resolveDir:t.cwd,loader:"js"}))),c((async s=>{if(!s.metafile)return void e.warn("Missing metafile from build result.");const o=Nt(n[ce.BEFORE]),r=Nt(n[ce.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)))?Ye(t.cwd,e):void 0})).filter(Boolean).map((async e=>{const t=await At.readFile(e,"utf-8"),n=await p.transform(t,{loader:"default",banner:o,footer:r});await At.writeFile(e,n.code)}));await Promise.all(i)}))}}),Ct=k,qt="?inject-proxy",Lt=e=>({banner:t=>t.isEntry?Nt(e[ce.BEFORE]):"",async resolveId(t,n,s){if(N(t))return{id:t,moduleSideEffects:!0};if(s.isEntry&&Nt(e[ce.MIDDLE])){const e=await this.resolve(t,n,s);if(!e||e.external)return e;return(await this.load(e)).moduleSideEffects=!0,`${e.id}${qt}`}return null},load(t){if(N(t))return Nt(e[ce.MIDDLE]);if(t.endsWith(qt)){const e=t.slice(0,-13),n=this.getModuleInfo(e);let s=`import ${JSON.stringify(Ct)};\nexport * from ${JSON.stringify(e)};`;return n?.hasDefaultExport&&(s+=`export { default } from ${JSON.stringify(e)};`),s}return null},footer:t=>t.isEntry?Nt(e[ce.AFTER]):""}),_t=(e,t,n,s,o)=>a=>{const u=new WeakMap,c=(e=>{if(!e?.sources?.ConcatSource)return v.createRequire(require.resolve("webpack"))("webpack-sources").ConcatSource;return e.sources.ConcatSource})(e),p=i.resolve(n.bundler.outDir,`${q()}.${ce.MIDDLE}.${k}.js`);j(p,"");const l=()=>{var e;e=p,r.rmSync(e,{force:!0,maxRetries:3,recursive:!0})};a.hooks.shutdown?a.hooks.shutdown.tap(Tt,l):(a.hooks.done.tap(Tt,l),a.hooks.failed.tap(Tt,l));a.hooks.beforeRun.tapPromise(Tt,(async()=>{await It(t,s,o,n.cwd)})),a.hooks.compilation.tap(Tt,(t=>{const n=()=>{const e=Nt(o[ce.BEFORE]),n=Nt(o[ce.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 c(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:Tt,stage:s},n)}else t.hooks.optimizeChunkAssets.tap({name:Tt},n)}));const d=(e=>{const s="webpack4"===n.bundler.fullName?p:{import:[p]},o=e=>{for(const[n,s]of Object.entries(e))"object"==typeof s?(s.import=s.import||[],s.import.unshift(p)):"string"==typeof s?e[n]=[p,s]:Array.isArray(s)?s.unshift(p):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},Ht=e=>{const{bundler:t,context:n}=e,s=n.getLogger(Tt),o=new Map,r={[ce.BEFORE]:new Map,[ce.MIDDLE]:new Map,[ce.AFTER]:new Map};n.inject=e=>{o.set(q(),e)};const i={name:Tt,enforce:"post",esbuild:Ft(s,n,r),webpack:_t(t,s,n,o,r),rspack:_t(t,s,n,o,r),rollup:Lt(r),vite:{...Lt(r),enforce:"pre"}};var a;return a=n.bundler.fullName,["rspack","webpack4","webpack5","webpack"].includes(a)?(i.loadInclude=e=>!!N(e)||null,i.load=e=>N(e)?{code:Nt(r[ce.MIDDLE])}:null):i.buildStart=async()=>{await It(s,o,r,n.cwd)},[i]},Wt="datadog-true-end-plugin",Bt=e=>{const{context:t}=e,n=async()=>{await t.asyncHook("asyncTrueEnd")},s=()=>{t.hook("syncTrueEnd")},o=async()=>{s(),await n()},r=e=>{e.hooks.shutdown?e.hooks.shutdown.tapPromise(Wt,o):(e.hooks.done.tapPromise(Wt,o),e.hooks.failed.tap(Wt,s))},i={async writeBundle(){},async closeBundle(){await o()}};return[{name:Wt,enforce:"post",webpack:r,esbuild:{setup(e){e.onEnd((async()=>{await n()})),e.onDispose((()=>{s()}))}},vite:i,rollup:i,rspack:r}]},Kt={[be]:Be};var Ut="2.6.3";const Gt=(({bundler:n,version:s})=>{const o=Date.now();return e.createUnplugin(((e,r)=>{const i=((e={})=>({auth:{},disableGit:!1,logLevel:"warn",metadata:{},...e}))(e);"esbuild"===r.framework&&(r.esbuildHostName=D);const a=process.env.BUILD_PLUGINS_ENV||"production",u=S.includes(a)?a:"development",c=n.rspackVersion||n.version||n.VERSION,p=r.framework,l="webpack"===p?c.split(".")[0]:"",d={bundler:{name:p,fullName:`${p}${l}`,variant:l,version:c},env:u,metadata:i.metadata||{},packageName:`@datadog/${p}-plugin`,version:s},m={errors:[],logs:[],queue:[],timings:[],warnings:[]},f=(({start:e,options:t,data:n,stores:s})=>{const o=process.cwd(),r={errors:s.errors,warnings:s.warnings,logs:s.logs,metadata:n.metadata,timings:s.timings,bundler:n.bundler};return{auth:t.auth,pluginNames:[],bundler:{...r.bundler,outDir:o},build:r,cwd:o,env:n.env,getLogger:W(n,s,t.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.")},plugins:[],queue:()=>{throw new Error("Queue function called before it was initialized.")},sendLog:P(n),start:e,version:n.version}})({start:o,options:i,data:d,stores:m}),h=f.getLogger("factory").time("Plugins initialization",{start:o});f.pluginNames.push(D);const g=[];g.push(["analytics",Ge],["async-queue",Ve],["build-report",lt],["bundler-report",yt],["custom-hooks",bt],["git",jt],["injection",Ht],["true-end",Bt]),i.customPlugins&&g.push(["custom",i.customPlugins]),g.push(["error-tracking",ue],["rum",we],["telemetry",Ke]);for(const[e,t]of g)f.plugins.push(...U(f,t,e)({bundler:n,context:f,options:i,data:d,stores:m}));f.pluginNames.push(...f.plugins.map((e=>e.name)));const y=new Set(f.pluginNames.filter((e=>f.pluginNames.filter((t=>t===e)).length>1)));if(y.size>0)throw new Error(`Duplicate plugin names: ${t.bold.red(Array.from(y).join(", "))}`);return f.hook("init",f),h.end(),f.plugins}))})({bundler:$,version:Ut}).rollup,Jt=Ut,Vt=Kt;exports.datadogRollupPlugin=Gt,exports.helpers=Vt,exports.version=Jt;
4
+ `;s.info(c);const p=s.time("send sourcemaps");await ne(a,e.sourcemaps,{apiKey:n.apiKey,bundlerName:n.bundlerName,git:n.git,outDir:n.outDir,version:n.version},s),p.end()},oe=`https://sourcemap-intake.${process.env.DATADOG_SITE||"datadoghq.com"}/api/v2/srcmap`,re=e=>{const n=t.bold.red,s=e[W]||{},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||oe,...s.sourcemaps};o.config=e}return o},ie=({options:e,context:t})=>{const n=t.getLogger(U),s=n.time("validate options"),o=((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 ${U}.`);const o={disabled:!e[W],...e[W],sourcemaps:void 0};return s.config&&(o.sourcemaps=s.config),o})(e,n);return s.end(),o.disabled?[]:[{name:U,enforce:"post",async buildReport(e){if(!o.disabled&&o.sourcemaps){const s=n.time("sourcemaps process");await se(o,{apiKey:t.auth?.apiKey,bundlerName:t.bundler.fullName,git:t.git,outDir:t.bundler.outDir,outputs:e.outputs,version:t.version},n),s.end()}}}]};var ae=(e=>(e[e.BEFORE=0]="BEFORE",e[e.MIDDLE=1]="MIDDLE",e[e.AFTER=2]="AFTER",e))(ae||{});const ue="rum",ce="datadog-rum-plugin",pe="datadog-rum-privacy-plugin";const le=e=>`DD_RUM.init({${JSON.stringify(e.sdk).replace(/(^{|}$)/g,"")}});\n`,de=(e,t)=>{const n=e.sdk;if(n.clientToken)return le(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 E({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 le({...e,sdk:{clientToken:s,...n}})}},me=e=>{const n=t.bold.red,s=e[ue]||{},o={errors:[]};if(!s.sdk)return o;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.`);return o.config={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,...s.sdk},o},fe=e=>{const t=e[ue]||{},n={errors:[]};if(t.privacy){const e={exclude:[/\/node_modules\//,/\.preval\./,/^[!@#$%^&*()=+~`-]/],include:[/\.(?:c|m)?(?:j|t)sx?$/],addToDictionaryFunctionName:"$",helperCodeExpression:"/*__PURE__*/((q='$DD_A_Q',g=globalThis)=>(g[q]=g[q]||[],(v=>(g[q].push(v),v))))()"};n.config={...e,...t.privacy}}return n},ge=({options:e,context:t})=>{const n=((e,t)=>{const n=[],s=me(e),o=fe(e);if(n.push(...s.errors),n.push(...o.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${ce}.`);const r={disabled:!e[ue],...e[ue],sdk:void 0,privacy:void 0};return s.config&&(r.sdk=s.config),o.config&&(r.privacy=o.config,t.debug(`datadog-rum-privacy plugin options: ${JSON.stringify(r.privacy,((e,t)=>t instanceof RegExp?t.toString():t))}`,{forward:!0})),r})(e,t.getLogger(ce)),s=[];if(n.disabled)return s;if(n.sdk&&(t.inject({type:"file",position:ae.MIDDLE,value:i.join(__dirname,"./rum-browser-sdk.js")}),t.inject({type:"code",position:ae.MIDDLE,value:de(n,t)})),n.privacy){t.inject({type:"file",position:ae.BEFORE,value:i.join(__dirname,"./privacy-helpers.js")});const e=((e,t)=>{const n=t.getLogger(pe),s=function(e,t){const n={privacy:{addToDictionaryHelper:{expression:{code:e}}}};return["esbuild","webpack","rspack"].includes(t)&&(n.output={...n.output,inlineSourceMap:!1,embedCodeInSourceMap:!0}),n}(e.helperCodeExpression,t.bundler.name),o=d.createFilter(e.include,e.exclude);return{name:pe,enforce:"post",transformInclude:e=>o(e),async transform(e,t){try{return l.instrument({id:t,code:e},s)}catch(t){return n.error(`Instrumentation Error: ${t}`,{forward:!0}),{code:e}}}}})(n.privacy,t);s.push(e)}return s},he="telemetry",ye="datadog-telemetry-plugin",we=[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}],be=(e,t)=>({type:"gauge",tags:[...e.tags,...t.tags],metric:`${t.prefix?`${t.prefix}.`:""}${e.metric}`,points:[[t.timestamp,e.value]]}),ve=(e="")=>e.endsWith("/")?e:`${e}/`,$e=(e,t)=>{let n=e;return e.split(ve(t)),n.split("!").pop().replace(/(.*)?\/node_modules\//,"/node_modules/").replace(/^((\.)*\/)+/,"")},ke=(e,t)=>e.split("!").pop().replace(ve(t),"./"),Se=(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)),ke(s||"no-name",n)},Ee=e=>e.replace(/^.*\/node_modules\/(@[a-z0-9][\w-.]+\/[a-z0-9][\w-.]*|[^/]+).*$/,"$1"),De=e=>e.map((e=>({type:e?.constructor?.name??typeof e,name:e?.name,value:"string"==typeof e?e:void 0}))),xe=(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.inputs||[],s=e.outputs||[],o=e.entries||[],r=e.warnings.length,i=e.errors.length,a=e.duration,u=new Map,c=new Map,p=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$/,"");p.has(n)||p.set(n,[]),p.get(n).push(e.name)}}for(const e of s)for(const t of e.inputs)c.has(t.filepath)||c.set(t.filepath,[]),c.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}`))),c.has(e.filepath)&&n.push(...c.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$/,"");p.has(s)&&n.push(...p.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(be(s,t))}else n.add(be(e,t));n.add(be({metric:"metrics.count",type:"count",value:n.size+1,tags:[]},t))},Me=async(e,t,n,s)=>{if("string"!=typeof t&&"object"!=typeof t&&!t)return;const{report:o,metrics:r}=e,a=Date.now();let u="";const c={timings:!0,metrics:!0};"object"==typeof t?(u=t.destination,c.timings=t.timings||!1,c.metrics=t.metrics||!1):"string"==typeof t&&(u=t);const p=i.resolve(s,u);try{const e={},t={};c.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}}),c.metrics&&(t.metrics={content:Array.from(r)});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 x(e,n)})(i.join(p,`${t}.json`),s.content),n.debug(`Wrote ${t}.json in ${O(Date.now()-o)}`)}catch(s){n.error(`Failed to write ${t}.json in ${O(Date.now()-o)}`),e[t]=s}}));await Promise.all(s),n.debug(`Wrote files in ${O(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}`)}},Pe=t.bold.red,Te=t.bold.cyan,je=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},Ne=(e,t)=>{if(!t||!t.size)return[];const n=Array.from(t.values());n.sort(je("duration"));const s={name:`${e} duration`,values:n.map((e=>({name:e.name,value:O(e.duration)}))),top:!0};n.sort(je("increment"));return[s,{name:`${e} hits`,values:n.map((e=>({name:e.name,value:e.increment.toString()}))),top:!0}]},ze=(e,t,n)=>{const s=[];var o;n&&(s.push(...Ne("Loader",n.timings.loaders)),s.push(...Ne("Tapable",n.timings.tapables)),s.push(...Ne("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,metadata:e.metadata,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,c=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)c.has(n)||c.set(n,new Set),c.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(c.has(e.filepath)){const t=c.get(e.filepath);for(const e of t)n.add(e)}u.set(e.filepath,t),c.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=c.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 p=Array.from(r);return p.sort(je((e=>e.dependents.size))),t.values=p.map((e=>({name:e.name,value:e.dependents.size.toString()}))),p.sort(je((e=>e.dependencies.size))),n.values=p.map((e=>({name:e.name,value:e.dependencies.size.toString()}))),p.sort(je("size")),s.values=p.map((e=>({name:e.name,value:m(e.size)}))),p.sort(je("aggregatedSize")),o.values=p.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(je((e=>e.size))).map((e=>({name:e.name,value:m(e.size)}))),top:!0},{name:"Entry aggregated size",values:(o.build.entries||[]).sort(je((e=>e.size))).map((e=>({name:e.name,value:m(e.size)}))),top:!0},{name:"Entry number of modules",values:(o.build.entries||[]).sort(je((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:O(e.build.start-e.start)}),e.build.duration&&t.values.push({name:"Build duration",value:O(e.build.duration)}),e.build.writeDuration&&t.values.push({name:"Write duration",value:O(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=R(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+=` [${Pe(e.value)}] ${" ".repeat(n)}${Te(e.name)}\n`}}return t})(s);t.info(r)},Oe=["onStart","onLoad","onResolve","onEnd"],Re=new Map,Ie=new Map,Ae=(e,t,n)=>{const s=Object.assign({},e);for(const o of Oe)s[o]=async(s,r)=>{const i=Re.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=ke(e[0].path,n),a=Ie.get(s)||{name:s,increment:0,duration:0,events:{}};a.events[o]=a.events[o]||{name:o,values:[]};const u=f.performance.now();try{return await r(...e)}finally{const n=f.performance.now(),r=n-u,c={start:u,end:n,duration:r,context:De(e)};i.events[o].values.push(c),i.duration+=r,i.increment+=1,Re.set(t,i),a.events[o].values.push(c),a.duration+=r,a.increment+=1,Ie.set(s,a)}}))};return s},Ce=(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(ye))continue;const n=s.setup;s.setup=async o=>{const r=Ae(o,s.name,t);await n({...r,initialOptions:{...r.initialOptions,plugins:e}})}}}})(s,t.cwd),o.end(),s.onEnd((async s=>{if(!s.metafile)return void n.warn("Missing metafile, can't proceed with modules data.");const o=n.time("getting plugins results"),{plugins:r,modules:i}={plugins:Re,modules:Ie};o.end(),e.report={timings:{tapables:r,modules:i}},await t.asyncHook("telemetryBundlerContext",e.report)}))}});class Fe{constructor(e){this.started={},this.finished=[],this.cwd=e}startModule(e,t){const n=Se(e,t,this.cwd),s=(e=>(e.loaders||[]).map((e=>e.loader||e)).map(Ee))(e);s.length||s.push("no-loader"),this.started[n]={module:$e(n),timings:{start:f.performance.now(),duration:0,end:0},loaders:s}}doneModule(e,t){const n=Se(e,t,this.cwd),s=this.started[n];s&&(s.timings.end=f.performance.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 qe{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=f.performance.now(),i=t.apply(this,o),a=()=>{this.saveResult(e,n,s,De(o),r,f.performance.now())};return i.then(a,a),i}}getAsyncTapPatch(e,t,n,s){return(...o)=>{this.checkNewHooks();const r=f.performance.now(),i=o.pop();return t.apply(this,[...o,(...t)=>(this.saveResult(e,n,s,De(o),r,f.performance.now()),i(...t))])}}getDefaultTapPatch(e,t,n,s){return(...o)=>{this.checkNewHooks();const r=f.performance.now(),i=t.apply(this,o);return this.saveResult(e,n,s,De(o),r,f.performance.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 c=this.getTapPatch(e,r,i,t);return n.call(s,o,c)}}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(ye)||(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 Le=(e,t)=>async n=>{const s=t.getLogger(ye);t.build.start=Date.now();const o={name:ye},r=new qe(t.cwd),i=new Fe(t.cwd),a=s.time("parse compiler hooks");r.throughHooks(n),a.end(),n.hooks.thisCompilation.tap(o,(e=>{const t=s.time("parse compilation hooks");r.throughHooks(e),t.end(),e.hooks.buildModule.tap(o,(t=>{i.startModule(t,e)})),e.hooks.succeedModule.tap(o,(t=>{i.doneModule(t,e)})),e.hooks.failedModule&&e.hooks.failedModule.tap(o,(t=>{i.doneModule(t,e)}))})),n.hooks.afterEmit.tapPromise(o,(async n=>{const{timings:s}=r.getResults(),{loaders:o,modules:a}=i.getResults();e.report={timings:{tapables:s,loaders:o,modules:a}},await t.asyncHook("telemetryBundlerContext",e.report)}))},_e={filters:we},He=({options:e,context:t})=>{const n=t.getLogger(ye);let s=0;const o={start:Date.now()},r=(e=>{const t=e[he]?.endPoint||"https://app.datadoghq.com";return{disabled:!e[he],enableTracing:!1,filters:we,output:!1,prefix:"",tags:[],...e[he],endPoint:t.startsWith("http")?t:`https://${t}`}})(e),i=[];if(r.disabled)return i;const a={name:ye,enforce:"pre",esbuild:Ce(o,t,n),webpack:Le(o,t),rspack:Le(o,t)},u=n.time("build",{start:!1}),c=r.enableTracing&&["esbuild","webpack4","webpack5","rspack"].includes(t.bundler.fullName);let p,l;const d=async()=>{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),a=n.time("aggregating metrics");xe(l,i,e,o.report),a.end();const u=n.time("writing to files");await Me({report:o.report,metrics:e},r.output,n,t.bundler.outDir),u.end();const c=n.time("outputing report");ze(t,n,o.report),c.end();const p=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()).sort((([e],[t])=>e.localeCompare(t))).map((([e,t])=>`${e} - ${t}`));return n.debug(`\nSending ${e.size} metrics.\nMetrics:\n - ${o.join("\n - ")}`),E({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:r.endPoint},n),p.end()},m={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 telemetryBundlerContext(e){p=e,l&&await d()},async buildReport(e){l=e,!p&&c||await d()}};return r.enableTracing&&i.push(a),i.push(m),i},Ke="datadog-analytics-plugin",Be=({context:e})=>{const t=e.getLogger(Ke);return[{name:Ke,async buildStart(){"production"===e.env&&e.queue((async()=>{try{await e.sendLog({message:"Build started",context:{plugins:e.pluginNames}})}catch(e){t.debug(`Could not submit data to Datadog: ${e}`)}})())}}]},We="datadog-async-queue-plugin",Ue=e=>{const{context:t,stores:n}=e,s=t.getLogger(We),o=[];return t.queue=e=>{const t=e.catch((e=>{o.push(e.message||e.toString())}));n.queue.push(t)},[{name:We,asyncTrueEnd:async()=>{await Promise.all(n.queue),o.length>0&&s.error(`Error occurred while processing async queue:\n ${o.join("\n ")}`)}}]},Ge=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("*")?g.glob.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},Je=(e,t)=>z(t)?v:t.startsWith(e)||i.isAbsolute(t)?t:i.resolve(e,t),Ve=(e,t)=>{const n=[...e].map((e=>Je(t||process.cwd(),e).split(i.sep))),s=n.length?Math.min(...n.map((e=>e.length))):0,o=[];for(let e=0;e<s;e++){const t=n[0][e];if(!n.every((n=>n[e]===t)))break;o.push(t)}return o.length>0&&o.join(i.sep)||i.sep},Qe=/\.(?!.*(?:\.|\/|\\))(\w{1,})/g,Ye=/(\?|%3F|\|)+/gi,Xe=e=>{return"unknown"===e?e:e.includes("webpack/runtime")?"runtime":(t=tt(e),Qe.lastIndex=0,Qe.exec(t)?.[1]||"unknown");var t},Ze=["unknown","commonjsHelpers.js",`vite${i.sep}preload-helper.js`],et=(e,t,n)=>{const s=new Set;for(const n of e){const e=tt(n);z(n)||e===t||Ze.includes(e)||s.add(e)}return s},tt=e=>e.split("!").pop().split(Ye).shift().replace(/^[^\w\s.,!@#$%^&*()=+~`\-/\\]+/,""),nt=(e,t)=>z(t)?v:"unknown"===t?t:t.includes("webpack/runtime")?t.replace("webpack/runtime/","").replace(/ +/g,"-"):((e,t)=>{const n=t.split(i.sep),s=e.split(i.sep).filter(((e,t)=>e===n[t])).join(i.sep);return e.replace(s,"")})(t.split("!").pop(),e).split("node_modules").pop().split(Ye).shift().replace(/^((\.\.?)?[/\\])+/g,""),st=(e,t)=>Object.fromEntries(Object.entries(e).map((([e,n])=>[Je(t,e),n]))),ot=(e,t)=>({setup(n){const s=new Map;let o=[];const r=t.time("build report",{start:!1});n.onStart((async()=>{s.clear(),o=[],r.resume();const i=t.time("process entries");o.push(...await Ge(n,e,t));for(const t of o){const n=nt(e.bundler.outDir,t.resolved);t.name?s.set(n,t.name):s.set(n,n)}i.end(),r.pause()})),n.onEnd((async n=>{r.resume();const o=t.time("collecting errors and warnings"),a=e.cwd,u=e.bundler.outDir;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 c=[],p=[],l=[],d=[],m=[],f={},g={},h=t.time("indexing metafile data"),y=st(n.metafile.inputs,a),w=st(n.metafile.outputs,a);h.end();const b=e=>{if(!z(e))return e;const t=y[Je(a,e)];if(!t)return e;const n=t.imports.find((e=>!z(e.path)));return n?n.path:e},v=t.time("looping through inputs");for(const[e,t]of Object.entries(n.metafile.inputs)){if(z(e))continue;const n=Je(a,e),s={name:nt(u,e),filepath:n,dependents:new Set,dependencies:new Set,size:t.bytes,type:Xe(e)};f[n]=s,c.push(s)}v.end();const $=t.time("looping through outputs");for(const[e,o]of Object.entries(n.metafile.outputs)){const n=Je(a,e),r=nt(u,n),i=[];for(const e of Object.keys(o.inputs)){if(z(e))continue;const n=f[Je(a,e)];n?i.push(n):t.debug(`Input ${e} not found for output ${r}`)}if(o.entryPoint&&!i.length){const e=f[Je(a,o.entryPoint)];if(!e){t.debug(`Input ${o.entryPoint} not found for output ${r}`);continue}i.push(e)}const c={name:r,filepath:n,inputs:i,size:o.bytes,type:Xe(n)};if(g[n]=c,"map"===c.type&&d.push(c),p.push(c),!o.entryPoint)continue;const m=f[Je(a,b(o.entryPoint))];if(m){if(!s.get(m.name))continue;const e={...c,name:s.get(m.name)||m.name,outputs:[c],size:c.size};l.push(e)}}$.end();const k=t.time("looping through sourcemaps");for(const e of d){const n=g[e.filepath.replace(/\.map$/,"")];n?e.inputs.push(n):t.debug(`Could not find output for sourcemap ${e.name}`)}k.end();const S={inputs:{report:f,meta:y},outputs:{report:g,meta:w}},E=/(<runtime>|https:|file:|data:|#)/g,D=e=>!z(e)&&!e.match(E),x=(e,n,s={})=>{if(!D(e))return s;const o=n.report[e];if(!o)return t.debug(`Could not find report's ${e}`),s;if(s[o.filepath])return s;s[o.filepath]=o;const r=n.meta[e];if(!r)return t.debug(`Could not find metafile's ${e}`),s;if(!r.imports||!r.imports.length)return s;for(const t of r.imports){const r=t.path.match(/^\.\.?\//),p=r?i.dirname(e):a,l=Je(p,t.path);if(t.external){if(D(t.path)){const e=r?l:t.path,n=S.inputs.report[e]||{filepath:e,name:nt(u,t.path),size:0,type:"external",dependencies:new Set,dependents:new Set};"dependencies"in o&&(n.dependents.add(o),o.dependencies.add(n)),"inputs"in o&&!o.inputs.includes(n)&&o.inputs.push(n),c.includes(n)||c.push(n),S.inputs.report[e]=n,s[n.filepath]=n}}else x(l,n,s)}return s},M=t.time("looping through entries");for(const e of l){const t={},n={};for(const n of e.inputs)x(n.filepath,S.inputs,t);for(const t of e.outputs)x(t.filepath,S.outputs,n);e.inputs=Object.values(t),e.outputs=Object.values(n),e.size=e.outputs.reduce(((e,t)=>e+t.size),0),m.push(e)}M.end();const P=t.time("aggregate dependencies and dependents");for(const e of c){if("external"===e.type)continue;const n=S.inputs.meta[e.filepath];if(n)for(const s of n.imports){if(!D(s.path))continue;const n=s.path.match(/^\.?\.\//),o=n?i.dirname(e.filepath):a,r=Je(o,s.path);let u;if(s.external){const e=n?r:s.path;u=S.inputs.report[e]}else u=S.inputs.report[r];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}`)}P.end(),e.build.outputs=p,e.build.inputs=c,e.build.entries=m,r.end(),await e.asyncHook("buildReport",e.build)}))}}),rt=(e,t)=>{const n=t.time("module parsing",{start:!1}),s=t.time("build report",{start:!1}),o=t.time("filling entries",{start:!1}),r=t.time("filling inputs and outputs",{start:!1}),i=t.time("completing dependencies and dependents",{start:!1}),a=t.time("filling dependencies and dependents",{start:!1}),u=t.time("filling sourcemaps inputs",{start:!1}),c=new Map,p=new Map,l=new Map,d=new Map;return{buildStart(){d.clear(),c.clear(),p.clear(),l.clear()},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=tt(e.id),s=d.get(t)||{dependencies:new Set,dependents:new Set},o=et(new Set([...e.dynamicallyImportedIds,...e.importedIds]),t),r=et(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);d.set(t,s),n.tag([`module:${t}`],{span:!0}),n.pause()},writeBundle(n,m){s.resume();const f=n.dir?Je(e.cwd,n.dir):e.bundler.outDir,g=new Set,h=new Set,y=new Map;i.resume();for(const[e,{dependencies:t,dependents:n}]of d){for(const n of t){const t=tt(n),s=d.get(t)||{dependencies:new Set,dependents:new Set};s.dependents.has(e)||(s.dependents.add(e),d.set(t,s))}for(const t of n){const n=tt(t),s=d.get(n)||{dependencies:new Set,dependents:new Set};s.dependencies.has(e)||(s.dependencies.add(e),d.set(n,s))}}i.end(),r.resume();for(const[e,n]of Object.entries(m)){const s=Je(f,e),o="code"in n?Buffer.byteLength(n.code,"utf8"):Buffer.byteLength(n.source,"utf8"),r=p.get(s)||{name:e,filepath:s,inputs:[],size:o,type:Xe(e)};if("map"===r.type&&h.add(r),"modules"in n)for(const[e,t]of Object.entries(n.modules)){if(tt(e)!==e)continue;const n=c.get(e)||{name:nt(f,e),dependencies:new Set,dependents:new Set,filepath:e,size:t.originalLength,type:Xe(e)};r.inputs.push(n),c.set(n.filepath,n)}if("imports"in n)for(const e of n.imports){const n=tt(e);if(!d.has(n)){y.set(Je(f,n),r);continue}if(c.has(n)){t.debug(`Input report already there for ${n} from ${r.name}.`);continue}const s=c.get(n)||{name:nt(f,e),dependencies:new Set,dependents:new Set,filepath:n,size:0,type:"external"};r.inputs.push(s),c.set(s.filepath,s)}"isEntry"in n&&n.isEntry&&g.add({...r,name:n.name,size:0,outputs:[r]}),p.set(r.filepath,r)}r.end();for(const[e,n]of y){const s=p.get(e);s?n.inputs.includes(s)||n.inputs.push(s):t.debug(`Could not find the output report for ${e}.`)}a.resume();for(const[e,n]of c){const s=d.get(e);if(s){for(const e of s.dependencies){const s=c.get(e);s?n.dependencies.add(s):t.debug(`Could not find input for dependency ${nt(f,e)} of ${n.name}`)}for(const e of s.dependents){const s=c.get(e);s?n.dependents.add(s):t.debug(`Could not find input for dependent ${nt(f,e)} of ${n.name}`)}}else t.debug(`Could not find the import report for ${n.name}.`)}if(a.end(),h.size){u.resume();for(const e of h){const n=e.filepath.replace(/\.map$/,""),s=p.get(n);s?e.inputs.push(s):t.debug(`Could not find output for sourcemap ${e.name}`)}u.end()}const w=(e,n=new Map)=>{if(n.has(e))return n;const s=nt(f,e),o=p.get(e);if(!o)return c.has(s)||t.debug(`Could not find output for ${s}`),n;n.set(e,o);const r=m[nt(f,e)];if(!r)return t.debug(`Could not find asset for ${s}`),n;const i=[];"imports"in r&&i.push(...r.imports),"dynamicImports"in r&&i.push(...r.dynamicImports);for(const e of i)w(Je(f,e),n);return n};o.resume();for(const e of g){const n=w(e.filepath);e.outputs=Array.from(n.values()),e.inputs=Array.from(new Set(e.outputs.flatMap((e=>e.inputs)))),e.size=e.outputs.reduce(((e,t)=>e+t.size),0),l.has(e.filepath)&&t.debug(`Entry "${e.name}":"${nt(f,e.filepath)}" already reported.`),l.set(e.filepath,e)}o.pause(),s.pause()},async closeBundle(){e.build.inputs=Array.from(c.values()),e.build.outputs=Array.from(p.values()),e.build.entries=Array.from(l.values()),o.end(),s.end(),await e.asyncHook("buildReport",e.build)}}},it=(e,t,n)=>s=>{let o=[],r=[],i=[];const a=new Map,u=new Map,c=new Map,p=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 ")||z(e)),g=e=>e.replace(/(^external[^"]+"|"$)/g,""),h=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=tt(e);t.add(n),n.startsWith("external ")&&t.add(g(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(p.has(e)){const n=p.get(e);n.dependencies.push(...t.dependencies||[]),n.blocks.push(...t.blocks||[])}else p.set(e,t)},y=(e,t=[])=>{if("dependencies"in e)for(const n of e.dependencies)t.push(n),y(n,t);if("blocks"in e)for(const n of e.blocks)y(n,t);return t},w=(e,t)=>{if("request"in t&&t.request){const n=tt(t.request);if(p.has(n))return p.get(n);if(e.context){const t=Je(tt(e.context),n);if(p.has(t))return p.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=[],r=[],i=[],a.clear(),u.clear(),p.clear(),d.clear(),s.hooks.finishModules.tap(t,(t=>{m.resume();const s=n.time("dependency graph"),r=n.time("indexing modules");for(const e of t)h(e);r.end();const i=n.time("building inputs");for(const n of t){const t=n.identifier(),s=nt(e.bundler.outDir,t),r=new Set(y(n).map((e=>{const s=w(n,e);if(!s?.identifier())return!1;const o=s.identifier();return!!f(o)&&(o!==t&&(b(s)?g(o):o))})).filter(Boolean));if(!f(t))continue;const i=d.get(t)||{dependents:new Set,dependencies:new Set};for(const e of r){const n=d.get(e)||{dependencies:new Set,dependents:new Set};n.dependents.add(t),i.dependencies.add(e),d.set(e,n)}d.set(t,i);const u=b(n)?{size:0,name:g(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:Xe(t)};o.push(u),a.set(t,u),b(n)&&a.set(g(t),u)}i.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.tapPromise(t,(async t=>{m.resume();const s=t.chunks,p=t.getAssets(),d=t=>[...t.files||[],...t.auxiliaryFiles||[]].map((t=>Je(e.bundler.outDir,t))),g=n.time("indexing chunks"),h=t.chunkGraph;for(const e of s){const t=d(e),n=(h?h?.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"===Xe(e))continue;const t=c.get(e)||new Set;for(const e of n)t.add(e);c.set(e,t)}}g.end();const y=n.time("building outputs");for(const t of p){const s={size:t.source.size()||0,name:t.name,inputs:[],filepath:Je(e.bundler.outDir,t.name),type:Xe(t.name)};if(u.set(s.filepath,s),r.push(s),"map"===s.type){l.push(s);continue}const o=c.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}`)}y.end();const w=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}`)}w.end();const b=n.time("building entries");for(const[s,o]of t.entrypoints){const t=new Map,r=new Map;let a=0;const c=o.chunks.flatMap(d),p=o.chunks.filter((e=>h?h.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"===Xe(e)));for(const e of c){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)r.has(e.filepath)||r.set(e.filepath,e);a+=s.size}}else n.debug(`Could not find output of ${JSON.stringify(e)}`)}const l={name:s,filepath:p?Je(e.bundler.outDir,p):"unknown",size:a,inputs:Array.from(r.values()),outputs:Array.from(t.values()),type:p?Xe(p):"unknown"};i.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=r,e.build.entries=i,m.end(),await e.asyncHook("buildReport",e.build)}))},at="datadog-build-report-plugin",ut=e=>{const{context:t}=e,n=t.getLogger(at);return[{name:at,enforce:"post",esbuild:ot(t,n),rspack:it(t,at,n),webpack:it(t,at,n),vite:rt(t,n),rollup:rt(t,n)}]},ct="datadog-bundler-report-plugin",pt=(e,t)=>t?i.isAbsolute(t)?t:i.resolve(e,t):"",lt=e=>{if(!e)return[];return(Array.isArray(e)?e:[e]).map((e=>e.dir?e.dir:e.file?i.dirname(e.file):void 0)).filter(Boolean)},dt=e=>t=>{e.bundler.rawConfig=t.options,t.options.output?.path&&(e.bundler.outDir=pt(process.cwd(),t.options.output.path)),e.hook("bundlerReport",e.bundler),t.options.context&&(e.cwd=t.options.context),e.hook("cwd",e.cwd)},mt=e=>({configResolved(t){e.bundler.rawConfig=t;let n=t.build?.outDir??"dist";const s=t.build?.rollupOptions?.output,o=lt(s);e.cwd=t.root??process.cwd(),s&&o.length&&(n=Ve(o,process.cwd())),e.bundler.outDir=pt(e.cwd,n),e.hook("cwd",e.cwd),e.hook("bundlerReport",e.bundler)}}),ft=e=>{const{context:t}=e,n=t.getLogger(ct);return[{name:ct,enforce:"pre",esbuild:{setup(e){t.bundler.rawConfig=e.initialOptions,e.initialOptions.absWorkingDir&&(t.cwd=e.initialOptions.absWorkingDir),e.initialOptions.outdir&&(t.bundler.outDir=pt(t.cwd,e.initialOptions.outdir)),e.initialOptions.outfile&&(t.bundler.outDir=pt(t.cwd,i.dirname(e.initialOptions.outfile))),t.hook("cwd",t.cwd),t.hook("bundlerReport",t.bundler),e.initialOptions.metafile=!0}},webpack:dt(t),rspack:dt(t),vite:mt(t),rollup:{options(e){let n;if("output"in e){const t=lt(e.output);n=Ve(t,process.cwd())}const s=(e=>{const t=new Set;if(e.input){const n=Array.isArray(e.input)?e.input:"object"==typeof e.input?Object.values(e.input):[e.input];for(const e of n){if("string"!=typeof e)throw new Error("Invalid input type");t.add(i.dirname(e))}}return Array.from(t)})(e);if(n){t.bundler.outDir=Je(process.cwd(),n);const e=Ve([n,...s],process.cwd());t.cwd=e===i.sep?process.cwd():e}else t.cwd=Ve(s,process.cwd()),t.bundler.outDir=i.resolve(process.cwd(),"dist");t.hook("cwd",t.cwd)},buildStart(e){t.bundler.rawConfig=e},renderStart(e){t.bundler.rawConfig.outputs=t.bundler.rawConfig.outputs||[],t.bundler.rawConfig.outputs.push(e),t.hook("bundlerReport",t.bundler);const s=lt(e);Ve(s,process.cwd()).startsWith(t.bundler.outDir)||n.info("The output directory has been changed by a plugin and may introduce some inconsistencies in the build report.")}}}]},gt="datadog-custom-hooks-plugin",ht=e=>{const{context:t}=e,n=t.getLogger(gt),s=e=>(s,...o)=>{const r=n.time(`execution | ${s}`,{tags:["type:custom-hook",`hook:${s}`]}),i=[],a=[];for(const n of t.plugins){if(!(s in n))continue;const t=n[s];if("function"==typeof t)try{const r=t(...o);r instanceof Promise&&(e||i.push(`Plugin "${n.name}" returned a promise on the non async hook "${s}".`),a.push(r))}catch(e){i.push(`Plugin "${n.name}" errored on hook "${s}". [${e}]`)}else i.push(`Plugin "${n.name}" has an invalid hook type for "${s}". [${typeof t}]`)}if(i.length>0){for(const e of i)n.error(e);throw new Error("Some plugins errored during the hook execution.")}return Promise.all(a).finally((()=>r.end()))};return t.hook=s(!1),t.asyncHook=s(!0),[{name:gt,enforce:"pre"}]};class yt{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=(s=e,r.readFileSync(s,{encoding:"utf-8"}));var s;const o=JSON.parse(n);if(!o.sources)return void t("Missing 'sources' field in sourcemap.");const i=o.sources;if(0===i.length)return void t("Empty 'sources' field in sourcemap.");const a=this.matchSources(i);if(0!==a.length)return a;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 wt=async e=>{const t=await e.getRemotes(!0);if(0===t.length)throw new Error("No git remotes available");const n=await bt(e);for(const e of t)if(e.name===n)return I(e.refs.push);return I(t[0].refs.push)},bt=async e=>{try{return(await e.getConfig("clone.defaultRemoteName"))?.value??"origin"}catch(e){return"origin"}},vt=async e=>e.revparse("HEAD"),$t=async e=>(await e.raw("ls-files")).split(/\r\n|\r|\n/),kt=async e=>e.branch(),St=async e=>e.show(["-s","--format=%s"]),Et=async e=>e.show(["-s","--format=%an,%ae,%aI,%cn,%ce,%cI"]),Dt="datadog-git-plugin",xt=e=>{const{options:t,context:n}=e,s=n.getLogger(Dt);return[{name:Dt,enforce:"pre",async buildStart(){if((e=>!!e.errorTracking?.sourcemaps&&!0!==e.errorTracking?.sourcemaps.disableGit&&!0!==e.disableGit)(t))try{const e=s.time("get git information"),t=((e,t)=>{let n,s=Je(process.cwd(),e);for(;!n;){const e=i.resolve(s,t);if(P(e)&&(n=e),s=s.split(i.sep).slice(0,-1).join(i.sep),[i.sep,""].includes(s))break}return n})(n.cwd,".git");if(!t)return void s.warn("No .git directory found, skipping git plugin.");const o=await(async e=>{const t=[vt(e),kt(e),St(e),Et(e),$t(e),wt(e)],[n,s,o,r,i,a]=await Promise.all(t),[u,c,p,l,d,m]=r.split(",").map((e=>e.trim()));return{commit:{author:{name:u,email:c,date:p},committer:{name:l,email:d,date:m},message:o.trim(),hash:n},hash:n,branch:s.current,remote:a.trim(),trackedFilesMatcher:new yt(i)}})(await(async e=>{const t={baseDir:e||process.cwd(),binary:"git",maxConcurrentProcesses:3};try{const e=h.simpleGit(t),n=await e.revparse("--show-toplevel");t.baseDir=n}catch{}return h.simpleGit(t)})(i.dirname(t)));n.git=o,e.end(),await n.asyncHook("git",n.git)}catch(e){s.error(`Could not get git information: ${e.message}`)}}}]},Mt="datadog-injection-plugin",Pt=/^https?:\/\//,Tt=async(e,t=process.cwd())=>(e=>o.readFile(e,{encoding:"utf-8"}))(Je(t,e)),jt=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(Pt)?await(async(e,t=5e3)=>{let n;return Promise.race([E({retries:2,minTimeout:100,url:e}).finally((()=>{t&&clearTimeout(n)})),new Promise(((e,s)=>{n=setTimeout((()=>{s(new Error("Timeout"))}),t)}))])})(o):await Tt(o,n);else{if("code"!==e.type)throw new Error(`Invalid item type "${e.type}", only accepts "code" or "file".`);s=o}}catch(r){const i=`${e.type} - ${R(o)}`;e.fallback?(t.info(`Fallback for "${i}": ${r.toString()}`),s=await jt(e.fallback,t,n)):t.warn(`Failed "${i}": ${r.toString()}`)}return s},Nt=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`},zt=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 jt(r,t,n);e&&s.set(o,{value:e,position:r.position||ae.BEFORE})}return s})(t,e,s);for(const[e,t]of o.entries())n[t.position].set(e,t.value)},Ot=r.promises,Rt=(e,t,n)=>({setup(s){const{onStart:o,onResolve:a,onLoad:u,onEnd:c,esbuild:p,initialOptions:l}=s,d=[],m=`${t.bundler.fullName}.${ae.MIDDLE}.${v}.js`,f=r.realpathSync(y.tmpdir()),g=i.resolve(f,m),h=new RegExp(`${m}$`),w=l.inject;l.inject=w?[...w]:[],l.inject.push(g),o((async()=>{d.push(...await Ge(s,t,e)),s.initialOptions.inject=w;try{await x(g,"")}catch(t){e.error(`Could not create the files: ${t.message}`)}})),a({filter:h},(async e=>({path:e.path,namespace:Mt}))),u({filter:h,namespace:Mt},(async()=>({contents:Nt(n[ae.MIDDLE])||" ",resolveDir:t.cwd,loader:"js"}))),c((async s=>{if(!s.metafile)return void e.warn("Missing metafile from build result.");const o=Nt(n[ae.BEFORE]),r=Nt(n[ae.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)))?Je(t.cwd,e):void 0})).filter(Boolean).map((async t=>{try{const e=await Ot.readFile(t,"utf-8"),n=await p.transform(e,{loader:"default",banner:o,footer:r});await Ot.writeFile(t,n.code)}catch(n){if(!(e=>e instanceof Error&&"code"in e)(n)||"ENOENT"!==n.code)throw n;e.warn(`Could not inject content in ${t}: ${n}`)}}));await Promise.all(i)}))}}),It=v,At="?inject-proxy",Ct=e=>({banner:t=>t.isEntry?Nt(e[ae.BEFORE]):"",async resolveId(t,n,s){if(z(t))return{id:t,moduleSideEffects:!0};if(s.isEntry&&Nt(e[ae.MIDDLE])){const e=await this.resolve(t,n,s);if(!e||e.external)return e;return(await this.load(e)).moduleSideEffects=!0,`${e.id}${At}`}return null},load(t){if(z(t))return Nt(e[ae.MIDDLE]);if(t.endsWith(At)){const e=t.slice(0,-13),n=this.getModuleInfo(e);let s=`import ${JSON.stringify(It)};\nexport * from ${JSON.stringify(e)};`;return n?.hasDefaultExport&&(s+=`export { default } from ${JSON.stringify(e)};`),s}return null},footer:t=>t.isEntry?Nt(e[ae.AFTER]):""}),Ft=(e,t,n,s,o)=>a=>{const u=new WeakMap,c=(e=>{if(!e?.sources?.ConcatSource)return w.createRequire(require.resolve("webpack"))("webpack-sources").ConcatSource;return e.sources.ConcatSource})(e),p=n.bundler.fullName,l=i.resolve(n.bundler.outDir,`${p}.${ae.MIDDLE}.${v}.js`);M(l,"");const d=()=>{var e;e=l,r.rmSync(e,{force:!0,maxRetries:3,recursive:!0})};a.hooks.shutdown?a.hooks.shutdown.tap(Mt,d):(a.hooks.done.tap(Mt,d),a.hooks.failed.tap(Mt,d));a.hooks.beforeRun.tapPromise(Mt,(async()=>{await zt(t,s,o,n.cwd)})),a.hooks.compilation.tap(Mt,(t=>{const n=()=>{const e=Nt(o[ae.BEFORE]),n=Nt(o[ae.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 c(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 m=(e=>{const s="webpack4"===n.bundler.fullName?l:{import:[l]},o=e=>{for(const[n,s]of Object.entries(e))"object"==typeof s?(s.import=s.import||[],s.import.unshift(l)):"string"==typeof s?e[n]=[l,s]:Array.isArray(s)?s.unshift(l):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=m},qt=e=>{const{bundler:t,context:n}=e,s=n.getLogger(Mt),o=new Map,r={[ae.BEFORE]:new Map,[ae.MIDDLE]:new Map,[ae.AFTER]:new Map};n.inject=e=>{o.set(`${Date.now()}.${performance.now()}.${++A}`,e)};const i={name:Mt,enforce:"post",esbuild:Rt(s,n,r),webpack:Ft(t,s,n,o,r),rspack:Ft(t,s,n,o,r),rollup:Ct(r),vite:{...Ct(r),enforce:"pre"}};var a;return a=n.bundler.fullName,["rspack","webpack4","webpack5","webpack"].includes(a)?(i.loadInclude=e=>!!z(e)||null,i.load=e=>z(e)?{code:Nt(r[ae.MIDDLE])}:null):i.buildStart=async()=>{await zt(s,o,r,n.cwd)},[i]},Lt="datadog-true-end-plugin",_t=e=>{const{context:t}=e,n=async()=>{await t.asyncHook("asyncTrueEnd")},s=()=>{t.hook("syncTrueEnd")},o=async()=>{s(),await n()},r=e=>{e.hooks.shutdown?e.hooks.shutdown.tapPromise(Lt,o):(e.hooks.done.tapPromise(Lt,o),e.hooks.failed.tap(Lt,s))},i={async writeBundle(){},async closeBundle(){await o()}};return[{name:Lt,enforce:"post",webpack:r,esbuild:{setup(e){e.onEnd((async()=>{await n()})),e.onDispose((()=>{s()}))}},vite:i,rollup:i,rspack:r}]},Ht={[he]:_e};var Kt="2.6.4";const Bt=(({bundler:n,version:s})=>{const o=Date.now();return e.createUnplugin(((e,r)=>{const i=((e={})=>({auth:{},disableGit:!1,logLevel:"warn",metadata:{},...e}))(e);"esbuild"===r.framework&&(r.esbuildHostName=k);const a=process.env.BUILD_PLUGINS_ENV||"production",u=$.includes(a)?a:"development",c=n.rspackVersion||n.version||n.VERSION,p=r.framework,l="webpack"===p?c.split(".")[0]:"",d={bundler:{name:p,fullName:`${p}${l}`,variant:l,version:c},env:u,metadata:i.metadata||{},packageName:`@datadog/${p}-plugin`,version:s},m={errors:[],logs:[],queue:[],timings:[],warnings:[]},f=(({start:e,options:t,data:n,stores:s})=>{const o=process.cwd(),r={errors:s.errors,warnings:s.warnings,logs:s.logs,metadata:n.metadata,timings:s.timings,bundler:n.bundler};return{auth:t.auth,pluginNames:[],bundler:{...r.bundler,outDir:o},build:r,cwd:o,env:n.env,getLogger:_(n,s,t.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.")},plugins:[],queue:()=>{throw new Error("Queue function called before it was initialized.")},sendLog:D(n),start:e,version:n.version}})({start:o,options:i,data:d,stores:m}),g=f.getLogger("factory").time("Plugins initialization",{start:o});f.pluginNames.push(k);const h=[];h.push(["analytics",Be],["async-queue",Ue],["build-report",ut],["bundler-report",ft],["custom-hooks",ht],["git",xt],["injection",qt],["true-end",_t]),i.customPlugins&&h.push(["custom",i.customPlugins]),h.push(["error-tracking",ie],["rum",ge],["telemetry",He]);for(const[e,t]of h)f.plugins.push(...B(f,t,e)({bundler:n,context:f,options:i,data:d,stores:m}));f.pluginNames.push(...f.plugins.map((e=>e.name)));const y=new Set(f.pluginNames.filter((e=>f.pluginNames.filter((t=>t===e)).length>1)));if(y.size>0)throw new Error(`Duplicate plugin names: ${t.bold.red(Array.from(y).join(", "))}`);return f.hook("init",f),g.end(),f.plugins}))})({bundler:b,version:Kt}).rollup,Wt=Kt,Ut=Ht;exports.datadogRollupPlugin=Bt,exports.helpers=Ut,exports.version=Wt;
5
5
  //# sourceMappingURL=index.js.map