@datadog/rollup-plugin 3.0.9-dev.1 → 3.1.0
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.
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/index.mjs +1 -1
- package/dist/src/rum-browser-sdk.js +1 -1
- package/package.json +2 -3
package/dist/src/index.d.ts
CHANGED
|
@@ -90,10 +90,15 @@ interface PrivacyOptions {
|
|
|
90
90
|
helperCodeExpression?: string;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
+
type SourceCodeContextOptions = {
|
|
94
|
+
service: string;
|
|
95
|
+
version?: string;
|
|
96
|
+
};
|
|
93
97
|
type RumOptions = {
|
|
94
98
|
enable?: boolean;
|
|
95
99
|
sdk?: SDKOptions;
|
|
96
100
|
privacy?: PrivacyOptions;
|
|
101
|
+
sourceCodeContext?: SourceCodeContextOptions;
|
|
97
102
|
};
|
|
98
103
|
type RumPublicApi = typeof datadogRum;
|
|
99
104
|
type RumInitConfiguration = RumInitConfiguration$1;
|
package/dist/src/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("unplugin"),t=require("chalk"),n=require("async-retry"),o=require("stream"),s=require("zlib"),r=require("buffer"),i=require("fs/promises"),a=require("fs"),u=require("json-stream-stringify"),p=require("path"),c=require("jszip"),l=require("os"),d=require("glob"),m=require("crypto"),f=require("pretty-bytes"),h=require("p-queue"),g=require("perf_hooks"),y=require("@datadog/js-instrumentation-wasm"),b=require("simple-git");function w(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var v=w(require("rollup"));const $=t.bold.green,k=t.bold.yellow,S=["API_KEY","APP_KEY","SOURCEMAP_INTAKE_URL","APPS_INTAKE_URL","SITE"],E=e=>process.env[`DATADOG_${e}`]||process.env[`DD_${e}`],D=e=>{const t=[];return process.env[`DD_${e}`]&&t.push(`DD_${e}`),process.env[`DATADOG_${e}`]&&t.push(`DATADOG_${e}`),t},R="__datadog-helper-file",x=new RegExp(R),P=["development","production","test"],j="datadog-build-plugins",T=e=>({"DD-EVP-ORIGIN":`${e.bundler}-build-plugin_${e.plugin}`,"DD-EVP-ORIGIN-VERSION":e.version}),M=async e=>{const{getForm:t,defaultHeaders:n={},zip:r=!0}=e,i=await t(),a=new Request("fake://url",{method:"POST",body:i}),u=o.Readable.fromWeb(a.body);return{data:r?u.pipe(s.createGzip()):u,headers:{"Content-Encoding":r?"gzip":"multipart/form-data",...n,...Object.fromEntries(a.headers.entries())}}},O=[400,403,413],A=e=>{const{auth:t,url:o,method:s="GET",getData:r,type:i="text"}=e,a={retries:0===e.retries?0:e.retries||5,onRetry:e.onRetry,maxTimeout:e.maxTimeout,minTimeout:e.minTimeout};return n((async(e,n)=>{let a;try{const e={method:s,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:o}=await r();e.body=t,n={...n,...o}}a=await fetch(o,{...e,headers:n})}catch(t){return e(t),{}}if(!a.ok){const t=`HTTP ${a.status} ${a.statusText}`;if(O.includes(a.status))return e(new Error(t)),{};throw new Error(t)}try{let e;return e="json"===i?await a.json():await a.text(),e}catch(t){return e(t),{}}}),a)},N=e=>({message:t,context:n})=>A({retries:2,minTimeout:100,url:"https://browser-http-intake.logs.datadoghq.com/v1/input/pub44d5f4eb86e1392037b7501f7adc540e",method:"POST",type:"json",getData:async()=>{const o={ddsource:e.packageName||j,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(o),headers:{"Content-Type":"application/json"}}}}),z=e=>e.replace(/^@dd\/(datadog-|internal-)?|^datadog-|-plugin$/g,""),I=e=>e.includes(R),C=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=>{const t=!!e.errorTracking?.sourcemaps,n=e.enableGit??!0;return t&&n},F=e=>{const t=Math.floor(e/1e3/60/60/24),n=new Date(e-24*t*60*60*1e3),o=n.getUTCHours(),s=n.getUTCMinutes(),r=n.getUTCSeconds(),i=n.getUTCMilliseconds(),a=`${t?`${t}d `:""}${o?`${o}h `:""}${s?`${s}m `:""}${r?`${r}s`:""}`.trim();return`${a}${!a||i?` ${i}ms`:""}`.trim()},L=(e,t=60,n="[...]")=>{if(e.length<=t)return e;const o=Math.max(4,t-n.length),s=Math.min(10,Math.floor(o/2)),r=o-s;return`${e.slice(0,s)}${n}${e.slice(-r)}`},q=(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}},K=e=>Object.entries(e).map((([e,n])=>` - ${e}: ${t.bold.green((e=>{if(void 0===e)return"undefined";if(null===e)return"null";if(Array.isArray(e))return e.join(", ");if("object"==typeof e)try{return JSON.stringify(e,null,2)}catch{return String(e)}return e?.toString()??""})(n))}`)).join("\n");let H=0;const U={debug:0,info:1,warn:2,error:3,none:4},W=e=>e.split(">").map(z).join(">"),B=(e,n,o,s)=>{const r=W(e);return(i,a="debug",{forward:u,context:p}={})=>{let c=t.dim,l=console.log;"error"===a?(c=t.red,l=console.error):"warn"===a?(c=t.yellow,l=console.warn):"info"===a&&(c=t.cyan,l=console.log);const d=`[${n.metadata?.name?`${n.metadata.name}|`:""}${a}|${n.bundler.name}|${r}]`,m="string"==typeof i?i:JSON.stringify(i,null,2);if(o.logs.push({bundler:n.bundler.name,pluginName:e,type:a,message:m,time:Date.now()}),"error"===a&&o.errors.push(m),"warn"===a&&o.warnings.push(m),u){const t=async()=>{try{const t=N(n);await t({message:m,context:{plugin:e,status:a,...p}})}catch(t){B(e,n,o,s)(`Error forwarding log: ${t}`,"debug")}};o.queue.push(t())}U[a]>=U[s]&&l(`${c(d)} ${m}`)}},G=(e,n,o)=>(s,r={})=>{const{level:i="debug",start:a=!0,log:u=!0,tags:p=[]}=r,c={pluginName:e,label:s,spans:[],tags:[...p,`plugin:${e}`,`level:${i}`],logLevel:i,total:0};n.push(c);const l=()=>c.spans.filter((e=>!e.end)),d=n=>{l().length||(!c.spans.length&&u&&o(t.dim(`[${t.cyan(s)}] : start`),"debug"),c.spans.push({start:n||Date.now(),tags:[`plugin:${e}`]}))},m=(e,n=!0)=>{const r=l();if(r?.length){r.length>1&&o(`Timer ${t.cyan(s)} has more than one ongoing span.`,"debug");for(const t of r)t.end=e||Date.now()}else n&&o(`Timer ${t.cyan(s)} cannot be paused, no ongoing span.`,"debug")};if(a){let e;"number"==typeof a&&(e=a),d(e)}return{timer:c,resume:d,end:e=>{m(e,!1);const n=c.spans.reduce(((e,t)=>e+(t.end-t.start)),0);c.total=n,u&&o(`[${t.cyan(s)}] : ${t.cyan(F(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 c.tags.push(...e)}}},J=(e,t,n="warn")=>o=>{const s=B(o,e,t,n);return{getLogger:s=>J(e,t,n)(`${W(o)}>${s}`),time:G(o,t.timings,s),error:(e,t)=>s(e,"error",t),warn:(e,t)=>s(e,"warn",t),info:(e,t)=>s(e,"info",t),debug:(e,t)=>s(e,"debug",t)}},V=["buildEnd","buildStart","load","resolveId","transform","watchChange","writeBundle","buildRoot","init","buildReport","bundlerReport","git"],Y=(e,t,n,o)=>{const s=n=>function(...s){const r=o.time(`${e} | ${t}`,{log:!1,tags:["type:hook",`hook:${t}`]}),i=n.apply(this,s);return i instanceof Promise?i.finally((()=>{r.end()})):(r.end(),i)};return"object"==typeof n&&null!==n&&"handler"in n?{...n,handler:s(n.handler)}:s(n)},Q=(e,t,n)=>{const o=e.getLogger(j);return e=>{const s=o.time(`hook | init ${n}`,{log:!1}),r=t(e).map((e=>((e,t)=>{const n={...e},o=z(e.name);for(const s of V){const r=e[s];r&&(n[s]=Y(o,s,r,t))}return n})(e,o))),i=r.map((e=>`plugin:${e.name}`));return s.tag(i),s.end(),r}},X=async e=>i.mkdir(e,{recursive:!0}),Z=(e,t)=>{var n;n=p.dirname(e),a.mkdirSync(n,{recursive:!0}),a.writeFileSync(e,t,{encoding:"utf-8"})},ee=e=>a.readFileSync(e,{encoding:"utf-8"}),te=e=>{try{return a.existsSync(e)}catch(e){if("ENOENT"===e.code)return!1;throw e}},ne=async(e,t)=>{if("function"==typeof a.openAsBlob){const n=await a.openAsBlob(e,{type:t.contentType});return new r.File([n],t.filename)}{const n=o.Readable.toWeb(a.createReadStream(e)),s=await new Response(n).blob();return new r.File([s],t.filename,{type:t.contentType})}},oe=async e=>{const t={empty:!1,exists:!0};try{const{size:n}=await i.stat(e);0===n&&(t.empty=!0)}catch(e){if("ENOENT"!==e.code)throw e;t.exists=!1}return t},se="apps",re="datadog-apps-plugin",ie="datadog-apps-assets.zip",ae=async(e,t)=>{const n=(await Promise.all(e.map((e=>d.glob(e,{absolute:!0,cwd:t,nodir:!0}))))).flat(),o=Array.from(new Set(n)).map((e=>p.relative(t,e))),s=(e=>{if(0===e.length)return"";const t=e[0].split(p.sep);let n="";for(let o=0;o<t.length-1;o++){const s=t.slice(0,o+1).join(p.sep);if(!e.every((e=>e.startsWith(`${s}${p.sep}`))))break;n=s}return n})(o),r=o.map(((e,t)=>{const o=s?e.slice(s.length+1):e;return{absolutePath:n[t],relativePath:o}}));return r},ue=(e,t)=>I(t)?R:t.startsWith(e)||p.isAbsolute(t)?t:p.resolve(e,t),pe=(e,t)=>{let n,o=ue(process.cwd(),e);for(;!n;){const e=p.resolve(o,t);if(te(e)&&(n=e),o=o.split(p.sep).slice(0,-1).join(p.sep),[p.sep,""].includes(o))break}return n},ce=(e,t)=>{const n=[...e].map((e=>ue(t||process.cwd(),e).split(p.sep))),o=n.length?Math.min(...n.map((e=>e.length))):0,s=[];for(let e=0;e<o;e++){const t=n[0][e];if(!n.every((n=>n[e]===t)))break;s.push(t)}return s.length>0&&s.join(p.sep)||p.sep},le=t.bold.red,de=t.bold.yellow,me=e=>{const t=pe(e,"package.json");if(t)try{const e=ee(t);return JSON.parse(e)}catch(e){return}},fe=(e,t,n)=>{if(n?.name&&n?.identifier)return{identifier:n?.identifier,name:n.name};const o=me(e);o||t.warn(de("No package.json found to infer the app name."));const s=n?.name||o?.name?.trim();s||t.error(le("Unable to determine the app name to compute the app identifier."));const r=((e,t)=>{const n=e||(e=>{if(e&&e.repository)return"string"==typeof e.repository?e.repository:"url"in e.repository?e.repository.url:void 0})(t);if(!n)return;const o=q(n.trim());return o?o.replace(/\.git$/,""):void 0})(n?.url,o);r||t.error(le("Unable to determine the git remote to compute the app identifier."));const i=n?.identifier||((e,t)=>{if(!e||!t)return;const n=`${e}:${t}`;return m.createHash("md5").update(n).digest("hex")})(r,s);return i&&s||t.error(le("Unable to compute the app identifier.")),{identifier:i,name:s}},he=t.green.bold,ge=t.yellow.bold,ye=t.cyan.bold,be=t.bold,we=(e,t={},n)=>async()=>{const o=await ne(e,{contentType:"application/zip",filename:ie});return M({getForm:()=>{const e=new FormData;return e.append("name",n),e.append("bundle",o,ie),e},defaultHeaders:t,zip:!1})},ve=async(e,t,n)=>{const o=[],s=[];if(!t.apiKey||!t.appKey)return o.push(new Error("Missing authentication token, need both app and api keys.")),{errors:o,warnings:s};if(!t.identifier)return o.push(new Error("No app identifier provided")),{errors:o,warnings:s};const r=(i=t.site,a=t.identifier,E("APPS_INTAKE_URL")||`https://api.${i}/api/unstable/app-builder-code/apps/${a}/upload`);var i,a;const u=T({bundler:t.bundlerName,plugin:"apps",version:t.version}),p=K({identifier:t.identifier,intakeUrl:r,defaultHeaders:`\n${JSON.stringify(u,null,2)}`}),c=`an archive of:\n - ${he(e.assets.length.toString())} files\n - ${he(f(e.size))}\n\nWith the configuration:\n${p}`;if(t.dryRun)return n.error(`\n${ye("Dry run enabled")}\n\nSkipping assets upload.\nWould have uploaded ${c}`),{errors:o,warnings:s};try{const o=await A({auth:{apiKey:t.apiKey,appKey:t.appKey},url:r,method:"POST",type:"json",getData:we(e.archivePath,u,t.name),onRetry:(e,t)=>{const o=`Failed to upload archive (attempt ${ge(`${t}/5`)}): ${e.message}`;s.push(o),n.warn(o)}});if(n.debug(`Uploaded ${c}\n`),o.version_id&&o.application_id&&o.app_builder_id){const{version_id:e,application_id:s,app_builder_id:r}=o,i=`https://api.${t.site}/api/unstable/app-builder-code/apps/serve/${s}/v/${e}/index.html`,a=`https://dd.datad0g.com/app-builder/apps/${r}`;n.info(`Your application is available at:\n${be("Standalone :")}\n ${ye(i)}\n\n${be("AppBuilder :")}\n ${ye(a)}`)}}catch(e){const t=e instanceof Error?e:new Error(String(e));o.push(t)}return{errors:o,warnings:s}},$e=t.yellow.bold,ke=t.red.bold,Se=({options:e,context:t})=>{const n=t.getLogger(re);let o;const s=(e=>{const t=e[se]||{};return{enable:t.enable??!!e[se],include:t.include||[],dryRun:t.dryRun??!1,identifier:t.identifier?.trim(),name:t.name?.trim()||e.metadata?.name?.trim()}})(e);if(!s.enable)return[];const r=async()=>{const e=n.time("handle assets");let r;try{const e=n.time("resolve identifier"),{name:o,identifier:u}=fe(t.buildRoot,n,{url:t.git?.remote,name:s.name,identifier:s.identifier});if(!u||!o)throw new Error("Missing apps identification.\nEither:\n - pass an 'options.apps.identifier' and 'options.apps.name' to your plugin's configuration.\n - have a 'name' and a 'repository' in your 'package.json'.\n - have a valid remote url on your git project.\n");e.end();const d=p.relative(t.buildRoot,t.bundler.outDir),m=[...s.include,`${d}/**/*`],f=await ae(m,t.buildRoot);if(!f.length)return void n.debug("No assets to upload.");const h=n.time("archive assets"),g=await(async e=>{const t=await i.mkdtemp(p.join(l.tmpdir(),"dd-apps-")),n=p.join(t,ie),o=new c;for(const t of e)o.file(t.relativePath,a.createReadStream(t.absolutePath),{binary:!0,compression:"DEFLATE",compressionOptions:{level:9}});await new Promise(((e,t)=>{const s=a.createWriteStream(n),r=o.generateNodeStream({type:"nodebuffer",streamFiles:!0,compression:"DEFLATE",compressionOptions:{level:9}});r.on("error",t),s.on("error",t),s.on("close",e),r.pipe(s)}));const{size:s}=await i.stat(n);return{archivePath:n,size:s,assets:e}})(f);h.end(),r=p.dirname(g.archivePath);const y=n.time("upload assets"),{errors:b,warnings:w}=await ve(g,{apiKey:t.auth.apiKey,appKey:t.auth.appKey,bundlerName:t.bundler.name,dryRun:s.dryRun,identifier:u,name:o,site:t.auth.site,version:t.version},n);if(y.end(),w.length>0&&n.warn(`${$e("Warnings while uploading assets:")}\n - ${w.join("\n - ")}`),b.length>0){const e=b.map((e=>e.cause||e.stack||e.message||e)).join("\n - ");throw new Error(` - ${e}`)}}catch(e){o=e,n.error(`${ke("Failed to upload assets:")}\n${e?.message||e}`)}if(r&&await(async e=>i.rm(e,{force:!0,maxRetries:3,recursive:!0}))(r),e.end(),o)throw o};return[{name:re,enforce:"post",async asyncTrueEnd(){await r()}}]},Ee="errorTracking",De="datadog-error-tracking-plugin",Re=(e,n,o)=>{if(".map"!==p.extname(o))throw new Error(`The file ${t.green.bold(o)} is not a sourcemap.`);const s=o.replace(/\.map$/,""),r=p.relative(n,s),i=((e,t)=>{if(e.startsWith("/"))return p.join(e,t);try{const n=e.replace(/\/*$/,"/"),o=new URL(n),s=t.replace(/^[\\/]*/,"");return new URL(s,o).href}catch{return`${e}${t}`}})(e,r);return{minifiedFilePath:s,minifiedUrl:i,relativePath:r}},xe=/[/]+|[\\]+/g,Pe=/^[/]+|^[\\]+|[/]+$|[\\]+$/g,je=(e,t)=>{const n=e.replace(Pe,"").split(xe),o=t.replace(Pe,"").split(xe),s=n.join("/");let r="";for(let e=0;e<o.length;e+=1){const t=o.slice(-e).join("/");s.startsWith(t)&&(r=t)}return r},Te=async(e,t,n,o)=>{const s=await(async(e,t)=>{const[n,o]=await Promise.all([oe(e.minifiedFilePath),oe(e.sourcemapFilePath)]);return{file:n,sourcemap:o,repeatedPrefix:je(e.relativePath,t)}})(e,n),r=[],i=[],a=new Map([["event",{type:"string",options:{contentType:"application/json",filename:"event"},value:JSON.stringify({...t,minified_url:e.minifiedUrl})}],["source_map",{type:"file",path:e.sourcemapFilePath,options:{filename:"source_map",contentType:"application/json"}}],["minified_file",{type:"file",path:e.minifiedFilePath,options:{filename:"minified_file",contentType:"application/javascript"}}]]);if(o)try{a.set("repository",{type:"string",options:{contentType:"application/json",filename:"repository"},value:JSON.stringify({data:[{files:o.trackedFilesMatcher.matchSourcemap(e.sourcemapFilePath,(t=>{i.push(`${p.basename(e.sourcemapFilePath)}: "${t}"`)})),hash:o.hash,repository_url:o.remote}],version:1})})}catch(t){i.push(`Could not attach git data for sourcemap ${e.sourcemapFilePath}: ${t.message}`)}return s.file.empty&&r.push(`Minified file is empty: ${e.minifiedFilePath}`),s.file.exists||r.push(`Minified file not found: ${e.minifiedFilePath}`),s.sourcemap.empty&&r.push(`Sourcemap file is empty: ${e.sourcemapFilePath}`),s.sourcemap.exists||r.push(`Sourcemap file not found: ${e.sourcemapFilePath}`),s.repeatedPrefix&&i.push(`The minified file path contains a repeated pattern with the minified path prefix: ${s.repeatedPrefix}`),{content:a,errors:r,warnings:i}},Me=t.green.bold,Oe=t.yellow.bold,Ae=t.red.bold,Ne=(e,t={})=>async()=>M({getForm:async()=>{const t=new FormData;for(const[n,o]of e.content){const e="file"===o.type?await ne(o.path,o.options):new Blob([o.value],{type:o.options.contentType});t.append(n,e,o.options.filename)}return t},defaultHeaders:t,zip:!0}),ze=async(e,t,n,o)=>{const s=[],r=[];if(!n.apiKey)return s.push({error:new Error("No authentication token provided")}),{errors:s,warnings:r};if(0===e.length)return r.push("No sourcemaps to upload"),{errors:s,warnings:r};const i=o.time("Queue uploads"),a=new(h.default?h.default:h)({concurrency:t.maxConcurrency}),u=(p=n.site,E("SOURCEMAP_INTAKE_URL")||`https://sourcemap-intake.${p}/api/v2/srcmap`);var p;const c=T({bundler:n.bundlerName,plugin:"sourcemaps",version:n.version}),l=K({...t,intakeUrl:u,outDir:n.outDir,defaultHeaders:`\n${JSON.stringify(c,null,2)}`}),d=`\nUploading ${Me(e.length.toString())} sourcemaps with configuration:\n${l}`;o.debug(d);const m=[];for(const i of e){const e={sourcemap:i.content.get("source_map")?.path.replace(n.outDir,"."),file:i.content.get("minified_file")?.path.replace(n.outDir,".")};m.push(a.add((async()=>{try{await A({auth:{apiKey:n.apiKey},url:u,method:"POST",getData:Ne(i,c),onRetry:(t,n)=>{const s=`Failed to upload ${Oe(e.sourcemap)} | ${Oe(e.file)}:\n ${t.message}\nRetrying ${n}/5`;r.push(s),o.debug(s)}})}catch(n){if(s.push({metadata:e,error:n}),!0===t.bailOnError)throw n}})))}return i.end(),o.debug(`Queued ${Me(e.length.toString())} uploads.`),await Promise.all(m),await a.onIdle(),{warnings:r,errors:s}},Ie=async(e,t,n)=>{const o=n.time("get sourcemaps files"),s=((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=>({...Re(e.minifiedPathPrefix,t.outDir,n),sourcemapFilePath:n,minifiedPathPrefix:e.minifiedPathPrefix})))})(e.sourcemaps,{outDir:t.outDir,outputs:t.outputs});o.end();const r=n.time("send sourcemaps");await(async(e,t,n,o)=>{const s=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=o.time("Compute payloads"),u=await Promise.all(e.map((e=>Te(e,i,r,n.git))));a.end();const p=u.map((e=>e.errors)).flat(),c=u.map((e=>e.warnings)).flat();if(c.length>0&&o.warn(`Warnings while preparing payloads:\n - ${c.join("\n - ")}`),p.length>0){const e=`Failed to prepare payloads, aborting upload :\n - ${p.join("\n - ")}`;if(o.error(e),!0===t.bailOnError)throw new Error(e);return}const l=o.time("Upload sourcemaps"),{errors:d,warnings:m}=await ze(u,t,{apiKey:n.apiKey,bundlerName:n.bundlerName,version:n.version,outDir:n.outDir,site:n.site},o);if(l.end(),o.debug(`Done uploading ${Me(`${e.length-d.length}/${e.length}`)} sourcemaps in ${Me(F(Date.now()-s))}.`),d.length>0){const e=`Failed to upload some sourcemaps:\n - ${d.map((({metadata:e,error:t})=>{const n=t.cause||t.stack||t.message;return e?`${Ae(e.file)} | ${Ae(e.sourcemap)} :\n${n}`:n})).join("\n - ")}`;if(o.error(e),!0===t.bailOnError)throw new Error(e)}m.length>0&&o.warn(`Warnings while uploading sourcemaps:\n - ${m.join("\n - ")}`)})(s,e.sourcemaps,{apiKey:t.apiKey,bundlerName:t.bundlerName,git:t.git,outDir:t.outDir,site:t.site,version:t.version},n),r.end()},Ce=e=>{const n=t.bold.red,o=e[Ee]||{},s={errors:[]};if(o.sourcemaps){o.sourcemaps.releaseVersion||s.errors.push(`${n("sourcemaps.releaseVersion")} is required.`),o.sourcemaps.service||s.errors.push(`${n("sourcemaps.service")} is required.`),o.sourcemaps.minifiedPathPrefix||s.errors.push(`${n("sourcemaps.minifiedPathPrefix")} is required.`),o.sourcemaps.minifiedPathPrefix&&((e=>{let t;try{t=new URL(e).host}catch{}return!(!t&&!e.startsWith("/"))})(o.sourcemaps.minifiedPathPrefix)||s.errors.push(`${n("sourcemaps.minifiedPathPrefix")} must be a valid URL or start with '/'.`));const e={bailOnError:!1,dryRun:!1,maxConcurrency:20,...o.sourcemaps};s.config=e}return s},_e=({options:e,context:t})=>{const n=t.getLogger(De),o=n.time("validate options"),s=((e,t)=>{const n=[],o=Ce(e);if(n.push(...o.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${De}.`);const s={enable:!!e[Ee],...e[Ee],sourcemaps:void 0};return o.config&&(s.sourcemaps=o.config),s})(e,n);if(o.end(),!s.enable)return[];let r,i,a=!1;const u=async()=>{if(!s.sourcemaps||a)return;a=!0;const e=n.time("sourcemaps process");await Ie(s,{apiKey:t.auth.apiKey,bundlerName:t.bundler.name,git:r,outDir:t.bundler.outDir,outputs:i?.outputs||[],site:t.auth.site,version:t.version},n),e.end()};return[{name:De,enforce:"post",async git(e){r=e,i&&await u()},async buildReport(t){i=t,!r&&_(e)||await u()},async asyncTrueEnd(){a||await u()}}]},Fe=[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};/(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);return(e.points.length?e.points.reduce(((e,t)=>e+t[1]),0)/e.points.length:0)>t[e.type]?e:null}],Le="metrics",qe="datadog-metrics-plugin",Ke=e=>Math.floor((e||Date.now())/1e3),He=(e,t,n)=>({...e,tags:[...e.tags,...t],metric:n?`${n}.${e.metric}`:e.metric}),Ue=(e="")=>e.endsWith("/")?e:`${e}/`,We=(e,t)=>{let n=e;return e.split(Ue(t)),n.split("!").pop().replace(/(.*)?\/node_modules\//,"/node_modules/").replace(/^((\.)*\/)+/,"")},Be=(e,t)=>e.split("!").pop().replace(Ue(t),"./"),Ge=(e,t,n)=>{let o=e.name||e.userRequest;return o||(o=((e,t)=>{let n=e.userRequest;if(!n){let o;o=t.moduleGraph&&"function"==typeof t.moduleGraph.getIssuer?t.moduleGraph.getIssuer(e):e.issuer,n=o?.userRequest,n||(n=e._identifier?.split("!").pop())}return n||"unknown"})(e,t)),Be(o||"no-name",n)},Je=e=>e.replace(/^.*\/node_modules\/(@[a-z0-9][\w-.]+\/[a-z0-9][\w-.]*|[^/]+).*$/,"$1"),Ve=e=>e.map((e=>({type:e?.constructor?.name??typeof e,name:e?.name,value:"string"==typeof e?e:void 0}))),Ye=t.bold.red,Qe=t.bold.cyan,Xe=e=>(t,n)=>{let o,s;return"function"==typeof e?(o=e(t),s=e(n)):(o=t[e],s=n[e]),o>s?-1:o<s?1:0},Ze=(e,t)=>{if(!t||!t.size)return[];const n=Array.from(t.values());n.sort(Xe("duration"));const o={name:`${e} duration`,values:n.map((e=>({name:e.name,value:F(e.duration)}))),top:!0};n.sort(Xe("increment"));return[o,{name:`${e} hits`,values:n.map((e=>({name:e.name,value:e.increment.toString()}))),top:!0}]},et=(e,t,n)=>{const o=[];var s;n&&(o.push(...Ze("Loader",n.loaders)),o.push(...Ze("Tapable",n.tapables)),o.push(...Ze("Module",n.modules))),o.push(...(e=>{const t={name:"Module total dependents",values:[],top:!0},n={name:"Module total dependencies",values:[],top:!0},o={name:"Module size",values:[],top:!0},s={name:"Module aggregated size",values:[],top:!0},r=new Set,i=C(e.build),a=new Map,u=new Map,p=new Map;for(const e of i.inputs||[]){if("map"===e.type)continue;const t=new Set(e.dependencies),n=new Set(e.dependents);for(const n of t)p.has(n)||p.set(n,new Set),p.get(n).add(e.filepath);for(const t of n)u.has(t)||u.set(t,new Set),u.get(t).add(e.filepath);if(u.has(e.filepath)){const n=u.get(e.filepath);for(const e of n)t.add(e)}if(p.has(e.filepath)){const t=p.get(e.filepath);for(const e of t)n.add(e)}u.set(e.filepath,t),p.set(e.filepath,n),a.set(e.filepath,{name:e.name,size:e.size,dependencies:t,dependents:n})}for(const[e,t]of a){const n=u.get(e)||new Set,o=p.get(e)||new Set;let s=t.size;for(const e of n)s+=a.get(e)?.size||0;r.add({name:t.name,size:t.size,aggregatedSize:s,dependents:o,dependencies:n})}if(!r.size)return[t,n,o];const c=Array.from(r);return c.sort(Xe((e=>e.dependents.size))),t.values=c.map((e=>({name:e.name,value:e.dependents.size.toString()}))),c.sort(Xe((e=>e.dependencies.size))),n.values=c.map((e=>({name:e.name,value:e.dependencies.size.toString()}))),c.sort(Xe("size")),o.values=c.map((e=>({name:e.name,value:f(e.size)}))),c.sort(Xe("aggregatedSize")),s.values=c.map((e=>({name:e.name,value:f(e.aggregatedSize||e.size)}))),[t,n,o,s]})(e)),o.push(...(s=e,[{name:"Asset size",values:(s.build.outputs||[]).filter((e=>"map"!==e.type)).sort(Xe((e=>e.size))).map((e=>({name:e.name,value:f(e.size)}))),top:!0},{name:"Entry aggregated size",values:(s.build.entries||[]).sort(Xe((e=>e.size))).map((e=>({name:e.name,value:f(e.size)}))),top:!0},{name:"Entry number of modules",values:(s.build.entries||[]).sort(Xe((e=>e.size))).map((e=>({name:e.name,value:e.inputs.length.toString()})))||[],top:!0}])),o.push(...(e=>{const t={name:"General Numbers",values:[],top:!1},n=e.build.inputs?e.build.inputs.length:0,o=e.build.outputs?e.build.outputs.length:0,s=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:F(e.build.start-e.start)}),e.build.duration&&t.values.push({name:"Build duration",value:F(e.build.duration)}),e.build.writeDuration&&t.values.push({name:"Write duration",value:F(e.build.writeDuration)}),t.values.push({name:"Number of modules",value:n.toString()},{name:"Number of assets",value:o.toString()},{name:"Number of entries",value:i.toString()},{name:"Number of warnings",value:s.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=L(e.name,60)}const n=Math.max(...e.map((e=>e.name.length))),o=Math.max(...e.flatMap((e=>e.values.map((e=>e.name.length))))),s=Math.max(...e.flatMap((e=>e.values.map((e=>e.value.length))))),r=Math.max(n+4,o+s+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=s-e.value.length;t+=` [${Ye(e.value)}] ${" ".repeat(n)}${Qe(e.name)}\n`}}return t})(o);t.info(r)},tt="api/v1/series",nt=t.bold.green,ot=["onStart","onLoad","onResolve","onEnd"],st=new Map,rt=new Map,it=new Map,at=(e,t,n)=>{const o=Object.assign({},e);for(const s of ot)o[s]=async(o,r)=>{const i=rt.get(t)||{name:t,increment:0,duration:0,events:{}};i.events[s]=i.events[s]||{name:s,values:[]};const a="onLoad"===s;return(0,e[s])(o,(async(...e)=>{const o=Be(e[0].path,n),u=it.get(o)||{name:o,increment:0,duration:0,events:{}};u.events[s]=u.events[s]||{name:s,values:[]};const p=g.performance.now();try{return await r(...e)}finally{const n=g.performance.now(),r=n-p,c={start:p,end:n,duration:r,context:Ve(e)};if(i.events[s].values.push(c),i.duration+=r,i.increment+=1,rt.set(t,i),u.events[s].values.push(c),u.duration+=r,u.increment+=1,it.set(o,u),a){const e=st.get(t)||{name:t,increment:0,duration:0,events:{}};e.events[s]=e.events[s]||{name:s,values:[]},e.events[s].values.push(c),e.duration+=r,e.increment+=1,st.set(t,e)}}}))};return o},ut=(e,t)=>({setup:n=>{n.initialOptions.metafile=!0;const o=t.time("wrapping plugins");((e,t)=>{const n=e.initialOptions.plugins;if(n){const e=n.map((e=>({...e})));for(const o of n){const n=o.setup;o.setup=async s=>{const r=at(s,o.name,t);await n({...r,initialOptions:{...r.initialOptions,plugins:e}})}}}})(n,e.buildRoot),o.end(),n.onEnd((async n=>{if(!n.metafile)return void t.warn("Missing metafile, can't proceed with modules data.");const o=t.time("getting plugins results"),{plugins:s,loaders:r,modules:i}={plugins:rt,modules:it,loaders:st};o.end(),await e.asyncHook("timings",{tapables:s,loaders:r,modules:i})}))}});class pt{constructor(e){this.started={},this.finished=[],this.cwd=e}startModule(e,t){const n=Ge(e,t,this.cwd),o=(e=>(e.loaders||[]).map((e=>e.loader||e)).map(Je))(e);o.length||o.push("no-loader"),this.started[n]={module:We(n),timings:{start:g.performance.now(),duration:0,end:0},loaders:o}}doneModule(e,t){const n=Ge(e,t,this.cwd),o=this.started[n];o&&(o.timings.end=g.performance.now(),o.timings.duration=o.timings.end-o.timings.start,this.finished.push(o),delete this.started[n])}getResults(){const e=new Map,t=new Map;for(const n of this.finished){const o=n.timings.end-n.timings.start,s=t.get(n.module)||{name:n.module,increment:0,duration:0,events:{}},r=n.loaders.join(",");s.events[r]=s.events[r]||{name:r,values:[]},s.events[r].values.push(n.timings),s.increment+=1,s.duration+=o,t.set(n.module,s);for(const t of n.loaders){const n=e.get(t)||{name:t,increment:0,duration:0,events:{}};n.increment+=1,n.duration+=o,e.set(t,n)}}return{loaders:e,modules:t}}}class ct{constructor(e){this.monitoredTaps={},this.tapables=[],this.hooks={},this.timings=new Map,this.ignoredHooks=["normalModuleLoader"],this.cwd=e}saveResult(e,t,n,o,s,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:s,end:r,duration:r-s,context:o,type:e}),i.duration+=r-s,i.increment+=1,this.timings.set(t,i)}getResults(){const e=this.timings;for(const[t,n]of this.timings){const o=n;o.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,o)}return{monitoredTaps:this.monitoredTaps,tapables:this.tapables,hooks:this.hooks,timings:e}}getPromiseTapPatch(e,t,n,o){return(...s)=>{this.checkNewHooks();const r=g.performance.now(),i=t.apply(this,s),a=()=>{this.saveResult(e,n,o,Ve(s),r,g.performance.now())};return i.then(a,a),i}}getAsyncTapPatch(e,t,n,o){return(...s)=>{this.checkNewHooks();const r=g.performance.now(),i=s.pop();return t.apply(this,[...s,(...t)=>(this.saveResult(e,n,o,Ve(s),r,g.performance.now()),i(...t))])}}getDefaultTapPatch(e,t,n,o){return(...s)=>{this.checkNewHooks();const r=g.performance.now(),i=t.apply(this,s);return this.saveResult(e,n,o,Ve(s),r,g.performance.now()),i}}getTapPatch(e,t,n,o){switch(e){case"promise":return this.getPromiseTapPatch(e,t,n,o);case"async":return this.getAsyncTapPatch(e,t,n,o);default:return this.getDefaultTapPatch(e,t,n,o)}}newTap(e,t,n,o){return(s,r)=>{const i="string"==typeof(a=s)?a:a.name;var a;const u=`${t}-${i}`;if(this.monitoredTaps[u])return n.call(o,s,r);this.monitoredTaps[u]=!0;const p=this.getTapPatch(e,r,i,t);return n.call(o,s,p)}}replaceTaps(e,t){t.tap=this.newTap("default",e,t.tap,t),t.tapAsync=this.newTap("async",e,t.tapAsync,t),t.tapPromise=this.newTap("promise",e,t.tapPromise,t)}patchHook(e,t,n){n._fakeHook||e.includes(qe)||(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 o of n)this.patchHook(t,o,e.hooks[o])}checkNewHooks(){for(const e of this.tapables)this.patchHooks(e)}throughHooks(e){this.tapables.includes(e)||this.tapables.push(e),this.patchHooks(e)}}const lt=e=>async t=>{const n=e.getLogger(qe),o={name:qe},s=new ct(e.buildRoot),r=new pt(e.buildRoot),i=n.time("parse compiler hooks");s.throughHooks(t),i.end(),t.hooks.thisCompilation.tap(o,(e=>{const t=n.time("parse compilation hooks");s.throughHooks(e),t.end(),e.hooks.buildModule.tap(o,(t=>{r.startModule(t,e)})),e.hooks.succeedModule.tap(o,(t=>{r.doneModule(t,e)})),e.hooks.failedModule&&e.hooks.failedModule.tap(o,(t=>{r.doneModule(t,e)}))})),t.hooks.afterEmit.tapPromise(o,(async()=>{const{timings:t}=s.getResults(),{loaders:n,modules:o}=r.getResults();await e.asyncHook("timings",{tapables:t,loaders:n,modules:o})}))},dt={filters:Fe},mt=({options:e,context:t})=>{const n=t.getLogger(qe);let o=0;const s=((e,t)=>{const n=e[Le],o=Ke(n?.timestamp);let s=!1===n?.enableDefaultPrefix?"":`build.${t}`;return n?.prefix&&(s+=s?`.${n.prefix}`:n.prefix),{enable:!!e[Le],enableDefaultPrefix:!0,enableTracing:!1,filters:Fe,tags:[],...e[Le],timestamp:o,prefix:s.toLowerCase().replace(/(^\.*|\.*$)/g,"")}})(e,t.bundler.name),r=[];if(!s.enable)return r;const i={name:qe,enforce:"pre",esbuild:ut(t,n),webpack:lt(t),rspack:lt(t)},a=n.time("build",{start:!1}),u=s.enableTracing&&["esbuild","webpack","rspack"].includes(t.bundler.name);let p,c;const l=async()=>{t.build.end=Date.now(),t.build.duration=t.build.end-t.build.start,t.build.writeDuration=t.build.end-o;const e=n.time("aggregating metrics"),r=s.timestamp,i=n.time("aggregate universal metrics"),a=((e,t)=>{const n=new Set,o=e.inputs||[],s=e.outputs||[],r=e.entries||[],i=e.warnings.length,a=e.errors.length,u=e.duration,p=new Map,c=new Map,l=new Map;for(const e of r){for(const t of e.inputs)p.has(t.filepath)||p.set(t.filepath,[]),p.get(t.filepath).push(e.name);for(const t of e.outputs){const n=t.filepath.replace(/\.map$/,"");l.has(n)||l.set(n,[]),l.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);n.add({metric:"assets.count",type:"count",points:[[t,s.length]],tags:[]}).add({metric:"entries.count",type:"count",points:[[t,r.length]],tags:[]}).add({metric:"errors.count",type:"count",points:[[t,a]],tags:[]}).add({metric:"modules.count",type:"count",points:[[t,o.length]],tags:[]}).add({metric:"warnings.count",type:"count",points:[[t,i]],tags:[]}),u&&n.add({metric:"compilation.duration",type:"duration",points:[[t,u]],tags:[]});for(const e of o){const o=[`moduleName:${e.name}`,`moduleType:${e.type}`];p.has(e.filepath)&&o.push(...p.get(e.filepath).map((e=>`entryName:${e}`))),c.has(e.filepath)&&o.push(...c.get(e.filepath).map((e=>`assetName:${e}`))),n.add({metric:"modules.size",type:"size",points:[[t,e.size]],tags:o}).add({metric:"modules.dependencies",type:"count",points:[[t,e.dependencies.size]],tags:o}).add({metric:"modules.dependents",type:"count",points:[[t,e.dependents.size]],tags:o})}for(const e of s){const o=[`assetName:${e.name}`,`assetType:${e.type}`],s=e.filepath.replace(/\.map$/,"");l.has(s)&&o.push(...l.get(s).map((e=>`entryName:${e}`))),n.add({metric:"assets.size",type:"size",points:[[t,e.size]],tags:o}).add({metric:"assets.modules.count",type:"count",points:[[t,e.inputs.length]],tags:o})}for(const e of r){const o=[`entryName:${e.name}`];n.add({metric:"entries.size",type:"size",points:[[t,e.size]],tags:o}).add({metric:"entries.modules.count",type:"count",points:[[t,e.inputs.length]],tags:o}).add({metric:"entries.assets.count",type:"count",points:[[t,e.outputs.length]],tags:o})}return n})(c,r);i.end();const u=n.time("aggregate plugins metrics"),l=((e,t)=>{const n=new Set;if(!e)return n;n.add({metric:"plugins.count",type:"count",points:[[t,e.size]],tags:[]});for(const o of e.values()){let e=0,s=0;for(const r of Object.values(o.events)){let i=0;s+=r.values.length;for(const t of r.values){const n=t.end-t.start;i+=n,e+=n}n.add({metric:"plugins.hooks.duration",type:"duration",points:[[t,i]],tags:[`pluginName:${o.name}`,`hookName:${r.name}`]}).add({metric:"plugins.hooks.increment",type:"count",points:[[t,r.values.length]],tags:[`pluginName:${o.name}`,`hookName:${r.name}`]})}n.add({metric:"plugins.duration",type:"duration",points:[[t,e]],tags:[`pluginName:${o.name}`]}).add({metric:"plugins.increment",type:"count",points:[[t,s]],tags:[`pluginName:${o.name}`]})}return n})(p?.tapables,r);u.end();const d=n.time("aggregate loaders metrics"),m=((e,t)=>{const n=new Set;if(!e)return n;n.add({metric:"loaders.count",type:"count",points:[[t,e.size]],tags:[]});for(const o of e.values())n.add({metric:"loaders.duration",type:"duration",points:[[t,o.duration]],tags:[`loaderName:${o.name}`]}).add({metric:"loaders.increment",type:"count",points:[[t,o.increment]],tags:[`loaderName:${o.name}`]});return n})(p?.loaders,r);d.end();const f=((e,t,n,o,s)=>{const r=new Set;for(const t of e){let e={...t,toSend:!0};if(n?.length)for(const t of n){const n=t({metric:e.metric,type:e.type,points:e.points,tags:e.tags});n?e={...n,toSend:e.toSend}:e.toSend=!1}r.add(He(e,o,s))}const i=Array.from(r).filter((e=>e.toSend)).length;return r.add(He({metric:"metrics.count",type:"count",points:[[t,i+1]],tags:[],toSend:!0},o,s)),r})(new Set([...a,...l,...m]),r,s.filters,s.tags,s.prefix);await t.asyncHook("metrics",f),e.end();const h=n.time("outputing report");et(t,n,p),h.end();const g=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.debug("No metrics to send.");const o=Array.from(e).filter((e=>e.toSend)).map((e=>({...e,toSend:void 0}))),s=new Map;for(const e of o)s.has(e.metric)||s.set(e.metric,0),s.set(e.metric,s.get(e.metric)+1);const r=Array.from(s.entries()).sort((([e],[t])=>e.localeCompare(t))).map((([e,t])=>`${e} - ${t}`));return n.debug(`\nSending ${o.length} metrics with configuration:\n - intake: ${nt(`https://api.${t.site}/${tt}`)}\n\nMetrics:\n - ${r.join("\n - ")}`),A({method:"POST",url:`https://api.${t.site}/${tt}?api_key=${t.apiKey}`,getData:()=>({data:JSON.stringify({series:o})})}).catch((e=>{n.error(`Error sending metrics ${e}`)}))})(f,{apiKey:t.auth.apiKey,site:t.auth.site},n),g.end()},d={name:"datadog-universal-metrics-plugin",enforce:"post",buildStart(){a.resume(),t.build.start=t.build.start||Date.now(),e[Le]?.timestamp||(s.timestamp=Ke(t.build.start))},buildEnd(){a.end(),o=Date.now()},async timings(e){p=e,c&&await l()},async buildReport(e){c=e,!p&&u||await l()}};return s.enableTracing&&r.push(i),r.push(d),r},ft="output",ht="datadog-output-plugin",gt=(e,t)=>"string"==typeof t?t.replace(/(\.json)?$/,".json"):!0===t?`${e}.json`:t,yt=e=>{const t=void 0===e;return{build:gt("build",e?.build??t),bundler:gt("bundler",e?.bundler??t),dependencies:gt("dependencies",e?.dependencies??t),errors:gt("errors",e?.errors??t),logs:gt("logs",e?.logs??t),metrics:gt("metrics",e?.metrics??t),timings:gt("timings",e?.timings??t),warnings:gt("warnings",e?.warnings??t)}},bt=(e,t)=>n=>{n.hooks.done.tap("bundler-outputs",(n=>{t((()=>{const t=e.time("stats serialization"),o=n.toJson({all:!1,assets:!0,children:!0,chunks:!0,chunkGroupAuxiliary:!0,chunkGroupChildren:!0,chunkGroups:!0,chunkRelations:!0,entrypoints:!0,errors:!0,ids:!0,modules:!0,nestedModules:!0,relatedAssets:!0,warnings:!0,reasons:!1,chunkModules:!1});return t.end(),o}))}))},wt=e=>{const t=new Set;return{buildStart(){t.clear()},writeBundle(e,n){t.add(n)},closeBundle(){e((()=>Array.from(t)))}}},vt=({options:e,context:t})=>{const n=(e=>({enable:!!e[ft],path:"./",...e[ft],files:yt(e[ft]?.files)}))(e),o=t.getLogger(ht);if(!n.enable)return[];const s=(e,s)=>{const r=n.files[e];if(!s||!1===r)return;t.queue((async()=>{const e=o.time(`output ${r}`),i=((e,t,n)=>{const o=p.isAbsolute(t)?t:p.resolve(e,t);return p.resolve(o,n)})(t.bundler.outDir,n.path,r);let c;try{const e="function"==typeof s?await s():s;await(async(e,t)=>{await X(p.dirname(e));const n=a.createWriteStream(e),o=new u.JsonStreamStringify(t,void 0,2),s=new Promise(((e,t)=>{o.on("end",(()=>{e()})),o.on("error",(e=>{t(e)}))}));return o.pipe(n),s})(i,e)}catch(e){c=e}c?o.error(`Failed writing ${r}: ${c}`):o.debug(`Wrote "./${p.relative(t.buildRoot,i)}"`),e.end()})())};return[{name:ht,buildReport(e){const t=o.time("serialize report"),n=C(e);t.end(),s("build",{bundler:n.bundler,metadata:n.metadata,start:n.start,end:n.end,duration:n.duration,writeDuration:n.writeDuration,entries:n.entries,outputs:n.outputs}),s("logs",n.logs),s("timings",n.timings),s("dependencies",n.inputs),s("errors",n.errors),s("warnings",n.warnings)},metrics(e){s("metrics",(()=>Array.from(e)))},esbuild:{setup(e){e.onEnd((e=>{s("bundler",e.metafile)}))}},rspack:bt(o,(e=>{s("bundler",e)})),rollup:wt((e=>{s("bundler",e)})),vite:wt((e=>{s("bundler",e)})),webpack:bt(o,(e=>{s("bundler",e)}))}]};var $t=(e=>(e[e.BEFORE=0]="BEFORE",e[e.MIDDLE=1]="MIDDLE",e[e.AFTER=2]="AFTER",e))($t||{});const kt="rum",St="datadog-rum-plugin",Et="datadog-rum-privacy-plugin";const Dt=(e,t)=>{const n=t.getLogger(Et),o=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);let s=0,r=0;return{name:Et,enforce:"post",transform:{filter:{id:{include:e.include,exclude:e.exclude}},handler(e,t){try{const n=function(e){if("rspack"===e?.framework||"webpack"===e?.framework)switch(typeof e.inputSourceMap){case"undefined":return;case"string":return e.inputSourceMap;default:return JSON.stringify(e.inputSourceMap)}}(this.getNativeBuildContext?.()),i=y.instrument({id:t,code:e,map:n},o);return 0===i.privacyDictionarySize?{code:e}:(s+=i.privacyDictionarySize,r++,i)}catch(t){return n.error(`Instrumentation Error: ${t}`,{forward:!0}),{code:e}}}},buildEnd:()=>{n.debug(`Privacy dictionary will include ${s} entries across ${r} files`,{forward:!0,context:{dictionaryEntryCount:s,fileCount:r}})}}},Rt=e=>`DD_RUM.init({${JSON.stringify(e.sdk).replace(/(^{|}$)/g,"")}});\n`,xt=(e,t)=>{const n=e.sdk;if(n.clientToken)return Rt(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 o;try{const e=await A({url:`https://api.${t.auth.site}/api/v2/rum/applications/${n.applicationId}`,type:"json",auth:t.auth});o=e.data?.attributes?.client_token}catch(e){throw new Error(`Could not fetch the clientToken: ${e.message}`)}if(!o)throw new Error("Missing clientToken in the API response.");return Rt({...e,sdk:{clientToken:o,...n}})}},Pt=e=>{const n=t.bold.red,o=e[kt]||{},s={errors:[]};if(!o.sdk)return s;o.sdk.applicationId||s.errors.push(`Missing ${n("applicationId")} in the SDK configuration.`),e.auth.apiKey&&e.auth.appKey||o.sdk.clientToken||s.errors.push(`Missing ${n('"auth.apiKey"')} and/or ${n('"auth.appKey"')} to fetch missing client token.`);const r={applicationId:"unknown_application_id",allowUntrustedEvents:!1,compressIntakeRequests:!1,defaultPrivacyLevel:"mask",enablePrivacyForActionName:!1,sessionReplaySampleRate:0,sessionSampleRate:100,silentMultipleInit:!1,site:e.auth.site||"datadoghq.com",startSessionReplayRecordingManually:!1,storeContextsAcrossPages:!1,telemetrySampleRate:20,traceSampleRate:100,trackingConsent:"granted",trackLongTasks:!1,trackResources:!1,trackUserInteractions:!1,trackViewsManually:!1};return s.config={...r,...o.sdk},s},jt=e=>{const t=e[kt]||{},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},Tt=({options:e,context:t})=>{const n=((e,t)=>{const n=[],o=Pt(e),s=jt(e);if(n.push(...o.errors),n.push(...s.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${St}.`);const r={enable:!!e[kt],...e[kt],sdk:void 0,privacy:void 0};return o.config&&(r.sdk=o.config),s.config&&(r.privacy=s.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(St)),o=[];if(!n.enable)return o;if(n.sdk&&(t.inject({type:"file",position:$t.MIDDLE,value:p.join(__dirname,"./rum-browser-sdk.js")}),t.inject({type:"code",position:$t.MIDDLE,value:xt(n,t)})),n.privacy){t.inject({type:"file",position:$t.BEFORE,value:p.join(__dirname,"./privacy-helpers.js")});const e=Dt(n.privacy,t);o.push(e)}return o},Mt="datadog-analytics-plugin",Ot=({context:e})=>{const t=e.getLogger(Mt);return[{name:Mt,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}`)}})())}}]},At="datadog-async-queue-plugin",Nt=e=>{const{context:t,stores:n}=e,o=t.getLogger(At),s=[];return t.queue=e=>{const t=e.catch((e=>{s.push(e.message||e.toString())}));n.queue.push(t)},[{name:At,asyncTrueEnd:async()=>{await Promise.all(n.queue),s.length>0&&o.error(`Error occurred while processing async queue:\n ${s.join("\n ")}`)}}]},zt=async(e,t,n)=>{const o=[],s=e.initialOptions.entryPoints,r=[],i=[];if(Array.isArray(s))for(const e of s){const t=e&&"object"==typeof e?e.in:e;r.push({path:t})}else s&&"object"==typeof s&&r.push(...Object.entries(s).map((([e,t])=>({name:e,path:t}))));const a=r.flatMap((e=>{return(t=e.path,t.includes("*")?d.glob.sync(t):[t]).map((t=>[e,t]));var t})).map((async([n,s])=>{const r=await e.resolve(s,{kind:"entry-point",resolveDir:t.buildRoot});r.errors.length&&i.push(...r.errors.map((e=>e.text))),r.path&&o.push({name:n.name,resolved:r.path,original:n.path})}));for(const e of i)n.error(e);return await Promise.all(a),o},It=/\.(?!.*(?:\.|\/|\\))(\w{1,})/g,Ct=/(\?|%3F|\|)+/gi,_t=e=>{return"unknown"===e?e:e.includes("webpack/runtime")?"runtime":(t=qt(e),It.lastIndex=0,It.exec(t)?.[1]||"unknown");var t},Ft=["unknown","commonjsHelpers.js",`vite${p.sep}preload-helper.js`],Lt=(e,t,n)=>{const o=new Set;for(const n of e){const e=qt(n);I(n)||e===t||Ft.includes(e)||o.add(e)}return o},qt=e=>e.split("!").pop().split(Ct).shift().replace(/^[^\w\s.,!@#$%^&*()=+~`\-/\\]+/,""),Kt=(e,t)=>I(t)?R:"unknown"===t?t:t.includes("webpack/runtime")?t.replace("webpack/runtime/","").replace(/ +/g,"-"):((e,t)=>{const n=t.split(p.sep),o=e.split(p.sep).filter(((e,t)=>e===n[t])).join(p.sep);return e.replace(o,"")})(t.split("!").pop(),e).split("node_modules").pop().split(Ct).shift().replace(/^((\.\.?)?[/\\])+/g,""),Ht=(e,t)=>Object.fromEntries(Object.entries(e).map((([e,n])=>[ue(t,e),n]))),Ut=(e,t)=>({setup(n){const o=new Map;let s=[];const r=t.time("build report",{start:!1});n.onStart((async()=>{o.clear(),s=[],r.resume();const i=t.time("process entries");s.push(...await zt(n,e,t));for(const t of s){const n=Kt(e.bundler.outDir,t.resolved);t.name?o.set(n,t.name):o.set(n,n)}i.end(),r.pause()})),n.onEnd((async n=>{r.resume();const s=t.time("collecting errors and warnings"),i=e.bundler.outDir,a=e.buildRoot;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(s.end(),!n.metafile){const n="Missing metafile from build report.";return e.build.warnings.push(n),void t.warn(n)}const u=[],c=[],l=[],d=[],m=[],f={},h={},g=t.time("indexing metafile data"),y=Ht(n.metafile.inputs,a),b=Ht(n.metafile.outputs,a);g.end();const w=e=>{if(!I(e))return e;const t=y[ue(a,e)];if(!t)return e;const n=t.imports.find((e=>!I(e.path)));return n?n.path:e},v=t.time("looping through inputs");for(const[e,t]of Object.entries(n.metafile.inputs)){if(I(e))continue;const n=ue(a,e),o={name:Kt(i,e),filepath:n,dependents:new Set,dependencies:new Set,size:t.bytes,type:_t(e)};f[n]=o,u.push(o)}v.end();const $=t.time("looping through outputs");for(const[e,s]of Object.entries(n.metafile.outputs)){const n=ue(a,e),r=Kt(i,n),u=[];for(const e of Object.keys(s.inputs)){if(I(e))continue;const n=f[ue(a,e)];n?u.push(n):t.debug(`Input ${e} not found for output ${r}`)}if(s.entryPoint&&!u.length){const e=f[ue(a,s.entryPoint)];if(!e){t.debug(`Input ${s.entryPoint} not found for output ${r}`);continue}u.push(e)}const p={name:r,filepath:n,inputs:u,size:s.bytes,type:_t(n)};if(h[n]=p,"map"===p.type&&d.push(p),c.push(p),!s.entryPoint)continue;const m=f[ue(a,w(s.entryPoint))];if(m){if(!o.get(m.name))continue;const e={...p,name:o.get(m.name)||m.name,outputs:[p],size:p.size};l.push(e)}}$.end();const k=t.time("looping through sourcemaps");for(const e of d){const n=h[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:h,meta:b}},E=/(<runtime>|https:|file:|data:|#)/g,D=e=>!I(e)&&!e.match(E),R=(e,n,o={})=>{if(!D(e))return o;const s=n.report[e];if(!s)return t.debug(`Could not find report's ${e}`),o;if(o[s.filepath])return o;o[s.filepath]=s;const r=n.meta[e];if(!r)return t.debug(`Could not find metafile's ${e}`),o;if(!r.imports||!r.imports.length)return o;for(const t of r.imports){const r=t.path.match(/^\.\.?\//),c=r?p.dirname(e):a,l=ue(c,t.path);if(t.external){if(D(t.path)){const e=r?l:t.path,n=S.inputs.report[e]||{filepath:e,name:Kt(i,t.path),size:0,type:"external",dependencies:new Set,dependents:new Set};"dependencies"in s&&(n.dependents.add(s),s.dependencies.add(n)),"inputs"in s&&!s.inputs.includes(n)&&s.inputs.push(n),u.includes(n)||u.push(n),S.inputs.report[e]=n,o[n.filepath]=n}}else R(l,n,o)}return o},x=t.time("looping through entries");for(const e of l){const t={},n={};for(const n of e.inputs)R(n.filepath,S.inputs,t);for(const t of e.outputs)R(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)}x.end();const P=t.time("aggregate dependencies and dependents");for(const e of u){if("external"===e.type)continue;const n=S.inputs.meta[e.filepath];if(n)for(const o of n.imports){if(!D(o.path))continue;const n=o.path.match(/^\.?\.\//),s=n?p.dirname(e.filepath):a,r=ue(s,o.path);let i;if(o.external){const e=n?r:o.path;i=S.inputs.report[e]}else i=S.inputs.report[r];i?(e.dependencies.add(i),i.dependents.add(e)):t.debug(`Could not find input file of ${o.path} imported from ${e.name}`)}else t.debug(`Could not find metafile's ${e.name}`)}P.end(),e.build.outputs=c,e.build.inputs=u,e.build.entries=m,r.end(),await e.asyncHook("buildReport",e.build)}))}}),Wt=(e,t)=>{const n=t.time("module parsing",{start:!1}),o=t.time("build report",{start:!1}),s=t.time("filling entries",{start:!1}),r=t.time("filling inputs and outputs",{start:!1}),i=t.time("completing dependencies and dependents",{start:!1}),u=t.time("filling dependencies and dependents",{start:!1}),p=t.time("filling sourcemaps inputs",{start:!1}),c=new Map,l=new Map,d=new Map,m=new Map;return{buildStart(){m.clear(),c.clear(),l.clear(),d.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=qt(e.id),o=m.get(t)||{dependencies:new Set,dependents:new Set},s=Lt(new Set([...e.dynamicallyImportedIds,...e.importedIds]),t),r=Lt(new Set([...e.dynamicImporters,...e.importers]),t);for(const e of r)o.dependents.add(e);for(const e of s)o.dependencies.add(e);m.set(t,o),n.tag([`module:${t}`],{span:!0}),n.pause()},writeBundle(n,f){o.resume();const h=n.dir?ue(e.buildRoot,n.dir):e.bundler.outDir,g=new Set,y=new Set,b=new Map;i.resume();for(const[e,{dependencies:t,dependents:n}]of m){for(const n of t){const t=qt(n),o=m.get(t)||{dependencies:new Set,dependents:new Set};o.dependents.has(e)||(o.dependents.add(e),m.set(t,o))}for(const t of n){const n=qt(t),o=m.get(n)||{dependencies:new Set,dependents:new Set};o.dependencies.has(e)||(o.dependencies.add(e),m.set(n,o))}}i.end(),r.resume();for(const[e,n]of Object.entries(f)){const o=ue(h,e),s="code"in n?Buffer.byteLength(n.code,"utf8"):Buffer.byteLength(n.source,"utf8"),r=l.get(o)||{name:e,filepath:o,inputs:[],size:s,type:_t(e)};if("map"===r.type&&y.add(r),"modules"in n)for(const[e,t]of Object.entries(n.modules)){if(qt(e)!==e)continue;let n=t.originalLength;if(!n&&0!==n)try{n=a.statSync(e).size}catch(e){n=t.renderedLength}const o=c.get(e)||{name:Kt(h,e),dependencies:new Set,dependents:new Set,filepath:e,size:n,type:_t(e)};r.inputs.push(o),c.set(o.filepath,o)}if("imports"in n)for(const e of n.imports){const n=qt(e);if(!m.has(n)){b.set(ue(h,n),r);continue}if(c.has(n)){t.debug(`Input report already there for ${n} from ${r.name}.`);continue}const o=c.get(n)||{name:Kt(h,e),dependencies:new Set,dependents:new Set,filepath:n,size:0,type:"external"};r.inputs.push(o),c.set(o.filepath,o)}"isEntry"in n&&n.isEntry&&g.add({...r,name:n.name,size:0,outputs:[r]}),l.set(r.filepath,r)}r.end();for(const[e,n]of b){const o=l.get(e);o?n.inputs.includes(o)||n.inputs.push(o):t.debug(`Could not find the output report for ${e}.`)}u.resume();for(const[e,n]of c){const o=m.get(e);if(o){for(const e of o.dependencies){const o=c.get(e);o?n.dependencies.add(o):t.debug(`Could not find input for dependency ${Kt(h,e)} of ${n.name}`)}for(const e of o.dependents){const o=c.get(e);o?n.dependents.add(o):t.debug(`Could not find input for dependent ${Kt(h,e)} of ${n.name}`)}}else t.debug(`Could not find the import report for ${n.name}.`)}if(u.end(),y.size){p.resume();for(const e of y){const n=e.filepath.replace(/\.map$/,""),o=l.get(n);o?e.inputs.push(o):t.debug(`Could not find output for sourcemap ${e.name}`)}p.end()}const w=(e,n=new Map)=>{if(n.has(e))return n;const o=Kt(h,e),s=l.get(e);if(!s)return c.has(o)||t.debug(`Could not find output for ${o}`),n;n.set(e,s);const r=f[Kt(h,e)];if(!r)return t.debug(`Could not find asset for ${o}`),n;const i=[];"imports"in r&&i.push(...r.imports),"dynamicImports"in r&&i.push(...r.dynamicImports);for(const e of i)w(ue(h,e),n);return n};s.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),d.has(e.filepath)&&t.debug(`Entry "${e.name}":"${Kt(h,e.filepath)}" already reported.`),d.set(e.filepath,e)}s.pause(),o.pause()},async closeBundle(){e.build.inputs=Array.from(c.values()),e.build.outputs=Array.from(l.values()),e.build.entries=Array.from(d.values()),s.end(),o.end(),await e.asyncHook("buildReport",e.build)}}},Bt=(e,t,n)=>o=>{let s=[],r=[],i=[];const a=new Map,u=new Map,p=new Map,c=new Map,l=[],d=new Map,m=n.time("build report",{start:!1}),f=e=>!(!e||e.startsWith("webpack/runtime")||e.startsWith("multi ")||I(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"],o=e=>{const n=qt(e);t.add(n),n.startsWith("external ")&&t.add(h(n))};o(e.identifier());for(const t of n){const n=e[t];t&&t in e&&"string"==typeof n&&o(n)}return t})(e);for(const e of n)if(c.has(e)){const n=c.get(e);n.dependencies.push(...t.dependencies||[]),n.blocks.push(...t.blocks||[])}else c.set(e,t)},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},b=(e,t)=>{if("request"in t&&t.request){const n=qt(t.request);if(c.has(n))return c.get(n);if(e.context){const t=ue(qt(e.context),n);if(c.has(t))return c.get(t)}}},w=e=>!(!("externalType"in e)||!e.externalType)||(!(!("external"in e)||!e.external)||!!e.identifier?.().startsWith("external "));o.hooks.thisCompilation.tap(t,(o=>{s=[],r=[],i=[],a.clear(),u.clear(),c.clear(),d.clear(),o.hooks.finishModules.tap(t,(t=>{m.resume();const o=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(),o=Kt(e.bundler.outDir,t),r=new Set(y(n).map((e=>{const o=b(n,e);if(!o?.identifier())return!1;const s=o.identifier();return!!f(s)&&(s!==t&&(w(o)?h(s):s))})).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=w(n)?{size:0,name:h(o),dependencies:new Set,dependents:new Set,filepath:t,type:"external"}:{size:n.size()||0,name:o,dependencies:new Set,dependents:new Set,filepath:t,type:_t(t)};s.push(u),a.set(t,u),w(n)&&a.set(h(t),u)}i.end();const u=n.time("assigning dependencies and dependents");for(const e of s){const t=d.get(e.filepath);if(t){for(const o of t.dependencies){const t=a.get(o);t?e.dependencies.add(t):n.debug(`Could not find input of dependency ${o}`)}for(const o of t.dependents){const t=a.get(o);t?e.dependents.add(t):n.debug(`Could not find input of dependent ${o}`)}}else n.debug(`Could not find dependency report for ${e.name}`)}u.end(),o.end(),m.pause()}))})),o.hooks.afterEmit.tapPromise(t,(async t=>{m.resume();const o=t.chunks,c=t.getAssets(),d=t=>[...t.files||[],...t.auxiliaryFiles||[]].map((t=>ue(e.bundler.outDir,t))),h=n.time("indexing chunks"),g=t.chunkGraph;for(const e of o){const t=d(e),n=(g?.getChunkModules(e)||[]).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"===_t(e))continue;const t=p.get(e)||new Set;for(const e of n)t.add(e);p.set(e,t)}}h.end();const y=n.time("building outputs");for(const t of c){const o={size:t.source.size()||0,name:t.name,inputs:[],filepath:ue(e.bundler.outDir,t.name),type:_t(t.name)};if(u.set(o.filepath,o),r.push(o),"map"===o.type){l.push(o);continue}const s=p.get(o.filepath);if(s)for(const e of s){const t=a.get(e);t?o.inputs.push(t):n.debug(`Could not find input of ${e}`)}else n.debug(`Could not find modules for ${o.name}`)}y.end();const b=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}`)}b.end();const w=n.time("building entries"),v=(e,t=new Set)=>{if(t.has(e))return[];t.add(e);const n=[...e.chunks];for(const o of e.childrenIterable||[])n.push(...v(o,t));return n};for(const[o,s]of t.entrypoints){const t=new Map,r=new Map;let a=0;const p=v(s).flatMap(d),c=s.chunks.filter((e=>g.getChunkEntryModulesIterable(e)||!1)).flatMap((e=>Array.from(e.files))).filter((e=>e.includes(o)||s.name&&e.includes(s.name))).find((e=>"js"===_t(e)));for(const e of p){const o=u.get(e);if(e&&o){if("map"!==o.type&&!t.has(o.name)){t.set(o.name,o);for(const e of o.inputs)r.has(e.filepath)||r.set(e.filepath,e);a+=o.size}}else n.debug(`Could not find output of ${JSON.stringify(e)}`)}const l={name:o,filepath:c?ue(e.bundler.outDir,c):"unknown",size:a,inputs:Array.from(r.values()),outputs:Array.from(t.values()),type:c?_t(c):"unknown"};i.push(l)}w.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=s,e.build.outputs=r,e.build.entries=i,m.end(),await e.asyncHook("buildReport",e.build)}))},Gt="datadog-build-report-plugin",Jt=e=>{const{context:t}=e,n=t.getLogger(Gt);return[{name:Gt,enforce:"post",esbuild:Ut(t,n),rspack:Bt(t,Gt,n),webpack:Bt(t,Gt,n),vite:Wt(t,n),rollup:Wt(t,n)}]},Vt="datadog-bundler-report-plugin",Yt=(e,t)=>t?p.isAbsolute(t)?t:p.resolve(e,t):"",Qt=e=>{if(!e)return[];return(Array.isArray(e)?e:[e]).map((e=>e.dir?e.dir:e.file?p.dirname(e.file):void 0)).filter(Boolean)},Xt=e=>t=>{e.bundler.rawConfig=t.options,t.options.output?.path&&(e.bundler.outDir=Yt(process.cwd(),t.options.output.path)),e.hook("bundlerReport",e.bundler),t.options.context&&(e.buildRoot=t.options.context),e.hook("buildRoot",e.buildRoot)},Zt=e=>({configResolved(t){e.bundler.rawConfig=t;let n=t.build?.outDir??"dist";const o=t.build?.rollupOptions?.output,s=Qt(o);e.buildRoot=t.root??process.cwd(),o&&s.length&&(n=ce(s,process.cwd())),e.bundler.outDir=Yt(e.buildRoot,n),e.hook("buildRoot",e.buildRoot),e.hook("bundlerReport",e.bundler)}}),en=e=>{const{context:t}=e,n=t.getLogger(Vt);return[{name:Vt,enforce:"pre",esbuild:{setup(e){t.bundler.rawConfig=e.initialOptions,e.initialOptions.absWorkingDir&&(t.buildRoot=e.initialOptions.absWorkingDir),e.initialOptions.outdir&&(t.bundler.outDir=Yt(t.buildRoot,e.initialOptions.outdir)),e.initialOptions.outfile&&(t.bundler.outDir=Yt(t.buildRoot,p.dirname(e.initialOptions.outfile))),t.hook("buildRoot",t.buildRoot),t.hook("bundlerReport",t.bundler),e.initialOptions.metafile=!0}},webpack:Xt(t),rspack:Xt(t),vite:Zt(t),rollup:{options(e){let n;if("output"in e){const t=Qt(e.output);n=ce(t,process.cwd())}const o=(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(p.dirname(e))}}return Array.from(t)})(e);if(n){t.bundler.outDir=ue(process.cwd(),n);const e=ce([n,...o],process.cwd());t.buildRoot=e===p.sep?process.cwd():e}else t.buildRoot=ce(o,process.cwd()),t.bundler.outDir=p.resolve(process.cwd(),"dist");t.hook("buildRoot",t.buildRoot)},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 o=Qt(e);ce(o,process.cwd()).startsWith(t.bundler.outDir)||n.warn("The output directory has been changed by a plugin and may introduce some inconsistencies in the build report.")}}}]},tn="datadog-custom-hooks-plugin",nn=e=>{const{context:t}=e,n=t.getLogger(tn),o=e=>(o,...s)=>{const r=n.time(`execution | ${o}`,{tags:["type:custom-hook",`hook:${o}`]}),i=[],a=[];for(const n of t.plugins){if(!(o in n))continue;const t=n[o];if("function"==typeof t)try{const r=t(...s);r instanceof Promise&&(e||i.push(`Plugin "${n.name}" returned a promise on the non async hook "${o}".`),a.push(r))}catch(e){i.push(`Plugin "${n.name}" errored on hook "${o}". [${e}]`)}else i.push(`Plugin "${n.name}" has an invalid hook type for "${o}". [${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=o(!1),t.asyncHook=o(!0),[{name:tn,enforce:"pre"}]};class on{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=ee(e),o=JSON.parse(n);if(!o.sources)return void t("Missing 'sources' field in sourcemap.");const s=o.sources;if(0===s.length)return void t("Empty 'sources' field in sourcemap.");const r=this.matchSources(s);if(0!==r.length)return r;t(`${s.map(this.displaySource).join(", ")} not in the tracked files.`)}matchSources(e){let t=[];const n=new Set;for(const o of e){const e=this.getFilename(o);if(n.has(e))continue;n.add(e);const s=this.trackedFilenames.get(e);s&&(t=t.concat(s))}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 sn=async e=>{const t=await e.getRemotes(!0);if(0===t.length)throw new Error("No git remotes available");const n=await rn(e);for(const e of t)if(e.name===n)return q(e.refs.push);return q(t[0].refs.push)},rn=async e=>{try{return(await e.getConfig("clone.defaultRemoteName"))?.value??"origin"}catch(e){return"origin"}},an=async e=>e.revparse("HEAD"),un=async e=>(await e.raw("ls-files")).split(/\r\n|\r|\n/),pn=async e=>e.branch(),cn=async e=>e.show(["-s","--format=%s"]),ln=async e=>e.show(["-s","--format=%an,%ae,%aI,%cn,%ce,%cI"]),dn="datadog-git-plugin",mn=e=>{const{options:t,context:n}=e,o=n.getLogger(dn),s=o.time("get git information",{start:!1}),r=async e=>{try{const t=await(async e=>{const t=[an(e),pn(e),cn(e),ln(e),un(e),sn(e)],[n,o,s,r,i,a]=await Promise.all(t),[u,p,c,l,d,m]=r.split(",").map((e=>e.trim()));return{commit:{author:{name:u,email:p,date:c},committer:{name:l,email:d,date:m},message:s.trim(),hash:n},hash:n,branch:o.current,remote:a.trim(),trackedFilesMatcher:new on(i)}})(await(async e=>{const t={baseDir:e||process.cwd(),binary:"git",maxConcurrentProcesses:3};try{const e=b.simpleGit(t),n=await e.revparse("--show-toplevel");t.baseDir=n}catch{}return b.simpleGit(t)})(p.dirname(e)));n.git=t,s.end(),await n.asyncHook("git",n.git)}catch(e){o.error(`Could not get git information: ${e.message}`)}};return[{name:dn,enforce:"pre",buildRoot(e){if(_(t))try{s.resume();const t=pe(e,".git");if(!t)return o.warn("No .git directory found, skipping git plugin."),void s.end();n.queue(r(t))}catch(e){o.error(`Could not get git information: ${e.message}`)}}}]},fn="datadog-injection-plugin",hn=/^https?:\/\//,gn=[".mjs",".mjsx",".js",".ts",".tsx",".jsx"],yn=t.bold.yellow,bn=async(e,t=process.cwd())=>(e=>i.readFile(e,{encoding:"utf-8"}))(ue(t,e)),wn=async(e,t,n=process.cwd())=>{let o;const s=await(async e=>"function"==typeof e.value?e.value():e.value)(e);try{if("file"===e.type)o=s.match(hn)?await(async(e,t=5e3)=>{let n;return Promise.race([A({retries:2,minTimeout:100,url:e}).finally((()=>{t&&clearTimeout(n)})),new Promise(((e,o)=>{n=setTimeout((()=>{o(new Error("Timeout"))}),t)}))])})(s):await bn(s,n);else{if("code"!==e.type)throw new Error(`Invalid item type "${e.type}", only accepts "code" or "file".`);o=s}}catch(r){const i=`${e.type} - ${L(s)}`;e.fallback?(t.debug(`Fallback for "${i}": ${r.toString()}`),o=await wn(e.fallback,t,n)):t.warn(`Failed "${i}": ${r.toString()}`)}return o},vn=(e,t)=>{const n=e.filter((e=>e.position===t.position&&(!t.onAllChunks||e.injectIntoAllChunks)));if(0===n.length)return"";return`// begin injection by Datadog build plugins\n${n.map((e=>`(() => {${e.value}})();`)).join("\n\n")}\n// end injection by Datadog build plugins`},$n=async(e,t,n,o=process.cwd())=>{const s=await(async(e,t,n=process.cwd())=>{const o=new Map;for(const[s,r]of e.entries()){const e=await wn(r,t,n);if(e){const t=r.position||$t.BEFORE;o.set(s,{value:e,injectIntoAllChunks:"injectIntoAllChunks"in r&&r.injectIntoAllChunks,position:t})}}return o})(t,e,o);for(const e of s.values())n.push(e)},kn=e=>e instanceof Error&&"code"in e,Sn=e=>gn.includes(e),En=(e,t,n)=>{e.warn(`"${yn(t)}" files are not supported (${yn(n)}).`)},Dn=a.promises,Rn=(e,t,n)=>({setup(o){const{onStart:s,onResolve:r,onLoad:u,onEnd:c,esbuild:d,initialOptions:m}=o,f=[],h=`${t.bundler.name}.${$t.MIDDLE}.${R}.js`,g=a.realpathSync(l.tmpdir()),y=p.resolve(g,h),b=new RegExp(`${h}$`),w=m.inject;m.inject=w?[...w]:[],m.inject.push(y),s((async()=>{f.push(...await zt(o,t,e)),o.initialOptions.inject=w;try{await(async(e,t)=>{await X(p.dirname(e)),await i.writeFile(e,t,{encoding:"utf-8"})})(y,"")}catch(t){e.error(`Could not create the files: ${t.message}`)}})),r({filter:b},(async e=>({path:e.path,namespace:fn}))),u({filter:b,namespace:fn},(async()=>({contents:vn(n,{position:$t.MIDDLE})||" ",resolveDir:t.buildRoot,loader:"js"}))),c((async o=>{if(!o.metafile)return void e.warn("Missing metafile from build result.");const s=vn(n,{position:$t.BEFORE}),r=vn(n,{position:$t.AFTER}),i=vn(n,{position:$t.BEFORE,onAllChunks:!0}),a=vn(n,{position:$t.AFTER,onAllChunks:!0});if(!(s||r||i||a))return;const u=[];for(const[n,c]of Object.entries(o.metafile.outputs)){const o=c.entryPoint&&f.some((e=>e.resolved.endsWith(c.entryPoint))),l=o?s:i,m=o?r:a;if(!l&&!m)continue;const h=ue(t.buildRoot,n),{base:g,ext:y}=p.parse(h);Sn(y)?u.push((async()=>{try{const e=await Dn.readFile(h,"utf-8"),t=await d.transform(e,{loader:"default",banner:l,footer:m});await Dn.writeFile(h,t.code)}catch(t){if(!kn(t)||"ENOENT"!==t.code)throw t;e.warn(`Could not inject content in ${h}: ${t}`)}})()):En(e,y,g)}await Promise.all(u)}))}}),xn=R,Pn="?inject-proxy",jn=(e,t)=>({banner(n){const o=vn(t,{position:$t.BEFORE,onAllChunks:!n.isEntry});if(""===o||!n.fileName)return"";const{base:s,ext:r}=p.parse(n.fileName);return Sn(r)?o:(En(e,r,s),"")},async resolveId(e,n,o){if(I(e))return{id:e,moduleSideEffects:!0};if(o.isEntry&&vn(t,{position:$t.MIDDLE})){if(e.endsWith(".html"))return null;const t=await this.resolve(e,n,o);if(!t||t.external)return t;return(await this.load(t)).moduleSideEffects=!0,`${t.id}${Pn}`}return null},load(e){if(I(e))return vn(t,{position:$t.MIDDLE});if(e.endsWith(Pn)){const t=e.slice(0,-13),n=this.getModuleInfo(t);let o=`import ${JSON.stringify(xn)};\nexport * from ${JSON.stringify(t)};`;return n?.hasDefaultExport&&(o+=`export { default } from ${JSON.stringify(t)};`),o}return null},footer(n){const o=vn(t,{position:$t.AFTER,onAllChunks:!n.isEntry});if(""===o||!n.fileName)return"";const{base:s,ext:r}=p.parse(n.fileName);return Sn(r)?o:(En(e,r,s),"")}}),Tn=(e,t,n,o,s)=>r=>{const i=new WeakMap,u=e.sources.ConcatSource,c=n.bundler.name,l=p.resolve(n.bundler.outDir,`${c}.${$t.MIDDLE}.${R}.js`);Z(l,"");r.hooks.shutdown.tap(fn,(()=>{var e;e=l,a.rmSync(e,{force:!0,maxRetries:3,recursive:!0})}));const d=async()=>{await $n(t,o,s,n.buildRoot)};r.hooks.beforeRun.tapPromise(fn,d),r.hooks.watchRun.tapPromise(fn,d),r.hooks.compilation.tap(fn,(n=>{const o=e.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS;n.hooks.processAssets.tap({name:fn,stage:o},(()=>{const e=vn(s,{position:$t.BEFORE}),o=vn(s,{position:$t.AFTER}),r=vn(s,{position:$t.BEFORE,onAllChunks:!0}),a=vn(s,{position:$t.AFTER,onAllChunks:!0});for(const s of n.chunks){let c=e,l=o;if(s.canBeInitial()||(c=r,l=a),""!==c||""!==l)for(const e of s.files){const{base:o,ext:s}=p.parse(e);Sn(s)?n.updateAsset(e,(e=>{const t=i.get(e);if(!t||t.banner!==c||t.footer!==l){const t=new u(c,"\n",e,"\n",l);return i.set(e,{source:t,banner:c,footer:l}),t}return t.source})):En(t,s,o)}}}))}));const m=(e=>{const n={import:[l]},o=e=>{for(const[n,o]of Object.entries(e))"object"==typeof o?(o.import=o.import||[],o.import.unshift(l)):"string"==typeof o?e[n]=[l,o]:Array.isArray(o)?o.unshift(l):t.error("Invalid entry type: "+typeof o)};return e?"function"==typeof e?async()=>{const t=await e();return o(t),t}:"object"!=typeof e?"string"==typeof e?[n,e]:(t.error("Invalid entry type: "+typeof e),e):(o(e),e):{ddHelper:n}})(r.options.entry);r.options.entry=m},Mn=e=>{const{bundler:t,context:n}=e,o=n.getLogger(fn),s=new Map,r=[];n.inject=e=>{s.set(`${Date.now()}.${performance.now()}.${++H}`,e)};const i={name:fn,enforce:"post",esbuild:Rn(o,n,r),webpack:Tn(t,o,n,s,r),rspack:Tn(t,o,n,s,r),rollup:jn(o,r),vite:{...jn(o,r),enforce:"pre",transformIndexHtml:{order:"pre",handler:()=>vn(r,{position:$t.MIDDLE})?[{tag:"script",attrs:{type:"module",src:"/@id/__datadog-helper-file"},injectTo:"head-prepend"}]:[]}}};var a;return a=n.bundler.name,["rspack","webpack"].includes(a)?i.load={filter:{id:x},handler:()=>({code:vn(r,{position:$t.MIDDLE})})}:i.buildStart=async()=>{await $n(o,s,r,n.buildRoot)},[i]},On="datadog-true-end-plugin",An=e=>{const{context:t}=e,n=async()=>{await t.asyncHook("asyncTrueEnd")},o=()=>{t.hook("syncTrueEnd")},s=async()=>{o(),await n()},r=e=>{e.hooks.shutdown.tapPromise(On,s)},i={async writeBundle(){},async closeBundle(){await s()}};return[{name:On,enforce:"post",webpack:r,esbuild:{setup(e){e.onEnd((async()=>{await n()})),e.onDispose((()=>{o()}))}},vite:i,rollup:i,rspack:r}]},Nn={[Le]:dt},zn=t.bold.red;var In="3.0.9-dev.1";const Cn=(({bundler:t,version:n})=>{const o=Date.now();return e.createUnplugin(((e,s)=>{const r=Date.now(),i=((e={})=>{const t={site:E("SITE")||e.auth?.site||"datadoghq.com"};return Object.defineProperty(t,"apiKey",{value:E("API_KEY")||e.auth?.apiKey,enumerable:!1}),Object.defineProperty(t,"appKey",{value:E("APP_KEY")||e.auth?.appKey,enumerable:!1}),{enableGit:!0,logLevel:"warn",metadata:{},...e,auth:t}})(e);"esbuild"===s.framework&&(s.esbuildHostName=j);const a=process.env.BUILD_PLUGINS_ENV||"production",u=P.includes(a)?a:"development",p=t.rspackVersion||t.version||t.VERSION,c=s.framework,l={bundler:{name:c,version:p},env:u,metadata:i.metadata||{},packageName:`@datadog/${c}-plugin`,version:n},d={errors:[],logs:[],queue:[],timings:[],warnings:[]},m=(({start:e,options:t,data:n,stores:o})=>{const s=process.cwd(),r={errors:o.errors,warnings:o.warnings,logs:o.logs,metadata:n.metadata,timings:o.timings,bundler:n.bundler};return{auth:t.auth,pluginNames:[],bundler:{...r.bundler,outDir:s},build:r,buildRoot:s,env:n.env,getLogger:J(n,o,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:N(n),start:e,version:n.version}})({start:o,options:i,data:l,stores:d}),f=m.getLogger("factory"),h=f.time("Plugins initialization",{start:r});m.pluginNames.push(j);const g=[];g.push(["analytics",Ot],["async-queue",Nt],["build-report",Jt],["bundler-report",en],["custom-hooks",nn],["git",mn],["injection",Mn],["true-end",An]),i.customPlugins&&g.push(["custom",i.customPlugins]),g.push(["apps",Se],["error-tracking",_e],["metrics",mt],["output",vt],["rum",Tt]);for(const[e,n]of g)m.plugins.push(...Q(m,n,e)({bundler:t,context:m,options:i,data:l,stores:d}));return(e=>{const t=[];for(const n of S){const o=D(n);if(o.length>1&&!o.every((e=>process.env[e]===process.env[o[0]]))){const s=o.map((e=>k(e))).join(" and "),r=k(`DATADOG_${n}`);e.warn(`Conflicting keys ${s}, will use ${r}`),t.push(`${s} (using ${r})`)}else if(o.length){const e=o.map((e=>$(e))).join(" and ");t.push(`${e} (same value)`)}}t.length&&e.info(`Overrides from environment:\n - ${t.join("\n - ")}`)})(f),m.pluginNames.push(...m.plugins.map((e=>e.name))),(e=>{const t=new Set(e.filter((t=>e.filter((e=>e===t)).length>1)));if(t.size>0)throw new Error(`Duplicate plugin names: ${zn(Array.from(t).join(", "))}`)})(m.pluginNames),m.hook("init",m),h.end(),m.plugins}))})({bundler:v,version:In}).rollup,_n=In,Fn=Nn;exports.datadogRollupPlugin=Cn,exports.helpers=Fn,exports.version=_n;
|
|
1
|
+
"use strict";var e=require("unplugin"),t=require("chalk"),n=require("async-retry"),o=require("stream"),s=require("zlib"),r=require("buffer"),i=require("fs/promises"),a=require("fs"),u=require("json-stream-stringify"),p=require("path"),c=require("jszip"),l=require("os"),d=require("glob"),m=require("crypto"),f=require("pretty-bytes"),h=require("p-queue"),g=require("perf_hooks"),y=require("@datadog/js-instrumentation-wasm"),b=require("simple-git");function w(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,Object.freeze(t)}var v=w(require("rollup"));const $=t.bold.green,k=t.bold.yellow,S=["API_KEY","APP_KEY","SOURCEMAP_INTAKE_URL","APPS_INTAKE_URL","SITE"],E=e=>process.env[`DATADOG_${e}`]||process.env[`DD_${e}`],D=e=>{const t=[];return process.env[`DD_${e}`]&&t.push(`DD_${e}`),process.env[`DATADOG_${e}`]&&t.push(`DATADOG_${e}`),t},x="__datadog-helper-file",R=new RegExp(x),P=["development","production","test"],j="datadog-build-plugins",T=e=>({"DD-EVP-ORIGIN":`${e.bundler}-build-plugin_${e.plugin}`,"DD-EVP-ORIGIN-VERSION":e.version}),M=async e=>{const{getForm:t,defaultHeaders:n={},zip:r=!0}=e,i=await t(),a=new Request("fake://url",{method:"POST",body:i}),u=o.Readable.fromWeb(a.body);return{data:r?u.pipe(s.createGzip()):u,headers:{"Content-Encoding":r?"gzip":"multipart/form-data",...n,...Object.fromEntries(a.headers.entries())}}},O=[400,403,413],A=e=>{const{auth:t,url:o,method:s="GET",getData:r,type:i="text"}=e,a={retries:0===e.retries?0:e.retries||5,onRetry:e.onRetry,maxTimeout:e.maxTimeout,minTimeout:e.minTimeout};return n((async(e,n)=>{let a;try{const e={method:s,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:o}=await r();e.body=t,n={...n,...o}}a=await fetch(o,{...e,headers:n})}catch(t){return e(t),{}}if(!a.ok){const t=`HTTP ${a.status} ${a.statusText}`;if(O.includes(a.status))return e(new Error(t)),{};throw new Error(t)}try{let e;return e="json"===i?await a.json():await a.text(),e}catch(t){return e(t),{}}}),a)},N=e=>({message:t,context:n})=>A({retries:2,minTimeout:100,url:"https://browser-http-intake.logs.datadoghq.com/v1/input/pub44d5f4eb86e1392037b7501f7adc540e",method:"POST",type:"json",getData:async()=>{const o={ddsource:e.packageName||j,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(o),headers:{"Content-Type":"application/json"}}}}),z=e=>e.replace(/^@dd\/(datadog-|internal-)?|^datadog-|-plugin$/g,""),C=e=>e.includes(x),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=>{const t=!!e.errorTracking?.sourcemaps,n=e.enableGit??!0;return t&&n},F=e=>{const t=Math.floor(e/1e3/60/60/24),n=new Date(e-24*t*60*60*1e3),o=n.getUTCHours(),s=n.getUTCMinutes(),r=n.getUTCSeconds(),i=n.getUTCMilliseconds(),a=`${t?`${t}d `:""}${o?`${o}h `:""}${s?`${s}m `:""}${r?`${r}s`:""}`.trim();return`${a}${!a||i?` ${i}ms`:""}`.trim()},L=(e,t=60,n="[...]")=>{if(e.length<=t)return e;const o=Math.max(4,t-n.length),s=Math.min(10,Math.floor(o/2)),r=o-s;return`${e.slice(0,s)}${n}${e.slice(-r)}`},q=(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}},K=e=>Object.entries(e).map((([e,n])=>` - ${e}: ${t.bold.green((e=>{if(void 0===e)return"undefined";if(null===e)return"null";if(Array.isArray(e))return e.join(", ");if("object"==typeof e)try{return JSON.stringify(e,null,2)}catch{return String(e)}return e?.toString()??""})(n))}`)).join("\n");let H=0;const U={debug:0,info:1,warn:2,error:3,none:4},W=e=>e.split(">").map(z).join(">"),B=(e,n,o,s)=>{const r=W(e);return(i,a="debug",{forward:u,context:p}={})=>{let c=t.dim,l=console.log;"error"===a?(c=t.red,l=console.error):"warn"===a?(c=t.yellow,l=console.warn):"info"===a&&(c=t.cyan,l=console.log);const d=`[${n.metadata?.name?`${n.metadata.name}|`:""}${a}|${n.bundler.name}|${r}]`,m="string"==typeof i?i:JSON.stringify(i,null,2);if(o.logs.push({bundler:n.bundler.name,pluginName:e,type:a,message:m,time:Date.now()}),"error"===a&&o.errors.push(m),"warn"===a&&o.warnings.push(m),u){const t=async()=>{try{const t=N(n);await t({message:m,context:{plugin:e,status:a,...p}})}catch(t){B(e,n,o,s)(`Error forwarding log: ${t}`,"debug")}};o.queue.push(t())}U[a]>=U[s]&&l(`${c(d)} ${m}`)}},G=(e,n,o)=>(s,r={})=>{const{level:i="debug",start:a=!0,log:u=!0,tags:p=[]}=r,c={pluginName:e,label:s,spans:[],tags:[...p,`plugin:${e}`,`level:${i}`],logLevel:i,total:0};n.push(c);const l=()=>c.spans.filter((e=>!e.end)),d=n=>{l().length||(!c.spans.length&&u&&o(t.dim(`[${t.cyan(s)}] : start`),"debug"),c.spans.push({start:n||Date.now(),tags:[`plugin:${e}`]}))},m=(e,n=!0)=>{const r=l();if(r?.length){r.length>1&&o(`Timer ${t.cyan(s)} has more than one ongoing span.`,"debug");for(const t of r)t.end=e||Date.now()}else n&&o(`Timer ${t.cyan(s)} cannot be paused, no ongoing span.`,"debug")};if(a){let e;"number"==typeof a&&(e=a),d(e)}return{timer:c,resume:d,end:e=>{m(e,!1);const n=c.spans.reduce(((e,t)=>e+(t.end-t.start)),0);c.total=n,u&&o(`[${t.cyan(s)}] : ${t.cyan(F(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 c.tags.push(...e)}}},J=(e,t,n="warn")=>o=>{const s=B(o,e,t,n);return{getLogger:s=>J(e,t,n)(`${W(o)}>${s}`),time:G(o,t.timings,s),error:(e,t)=>s(e,"error",t),warn:(e,t)=>s(e,"warn",t),info:(e,t)=>s(e,"info",t),debug:(e,t)=>s(e,"debug",t)}},V=["buildEnd","buildStart","load","resolveId","transform","watchChange","writeBundle","buildRoot","init","buildReport","bundlerReport","git"],Y=(e,t,n,o)=>{const s=n=>function(...s){const r=o.time(`${e} | ${t}`,{log:!1,tags:["type:hook",`hook:${t}`]}),i=n.apply(this,s);return i instanceof Promise?i.finally((()=>{r.end()})):(r.end(),i)};return"object"==typeof n&&null!==n&&"handler"in n?{...n,handler:s(n.handler)}:s(n)},Q=(e,t,n)=>{const o=e.getLogger(j);return e=>{const s=o.time(`hook | init ${n}`,{log:!1}),r=t(e).map((e=>((e,t)=>{const n={...e},o=z(e.name);for(const s of V){const r=e[s];r&&(n[s]=Y(o,s,r,t))}return n})(e,o))),i=r.map((e=>`plugin:${e.name}`));return s.tag(i),s.end(),r}},X=async e=>i.mkdir(e,{recursive:!0}),Z=(e,t)=>{var n;n=p.dirname(e),a.mkdirSync(n,{recursive:!0}),a.writeFileSync(e,t,{encoding:"utf-8"})},ee=e=>a.readFileSync(e,{encoding:"utf-8"}),te=e=>{try{return a.existsSync(e)}catch(e){if("ENOENT"===e.code)return!1;throw e}},ne=async(e,t)=>{if("function"==typeof a.openAsBlob){const n=await a.openAsBlob(e,{type:t.contentType});return new r.File([n],t.filename)}{const n=o.Readable.toWeb(a.createReadStream(e)),s=await new Response(n).blob();return new r.File([s],t.filename,{type:t.contentType})}},oe=async e=>{const t={empty:!1,exists:!0};try{const{size:n}=await i.stat(e);0===n&&(t.empty=!0)}catch(e){if("ENOENT"!==e.code)throw e;t.exists=!1}return t},se="apps",re="datadog-apps-plugin",ie="datadog-apps-assets.zip",ae=async(e,t)=>{const n=(await Promise.all(e.map((e=>d.glob(e,{absolute:!0,cwd:t,nodir:!0}))))).flat(),o=Array.from(new Set(n)).map((e=>p.relative(t,e))),s=(e=>{if(0===e.length)return"";const t=e[0].split(p.sep);let n="";for(let o=0;o<t.length-1;o++){const s=t.slice(0,o+1).join(p.sep);if(!e.every((e=>e.startsWith(`${s}${p.sep}`))))break;n=s}return n})(o),r=o.map(((e,t)=>{const o=s?e.slice(s.length+1):e;return{absolutePath:n[t],relativePath:o}}));return r},ue=(e,t)=>C(t)?x:t.startsWith(e)||p.isAbsolute(t)?t:p.resolve(e,t),pe=(e,t)=>{let n,o=ue(process.cwd(),e);for(;!n;){const e=p.resolve(o,t);if(te(e)&&(n=e),o=o.split(p.sep).slice(0,-1).join(p.sep),[p.sep,""].includes(o))break}return n},ce=(e,t)=>{const n=[...e].map((e=>ue(t||process.cwd(),e).split(p.sep))),o=n.length?Math.min(...n.map((e=>e.length))):0,s=[];for(let e=0;e<o;e++){const t=n[0][e];if(!n.every((n=>n[e]===t)))break;s.push(t)}return s.length>0&&s.join(p.sep)||p.sep},le=t.bold.red,de=t.bold.yellow,me=e=>{const t=pe(e,"package.json");if(t)try{const e=ee(t);return JSON.parse(e)}catch(e){return}},fe=(e,t,n)=>{if(n?.name&&n?.identifier)return{identifier:n?.identifier,name:n.name};const o=me(e);o||t.warn(de("No package.json found to infer the app name."));const s=n?.name||o?.name?.trim();s||t.error(le("Unable to determine the app name to compute the app identifier."));const r=((e,t)=>{const n=e||(e=>{if(e&&e.repository)return"string"==typeof e.repository?e.repository:"url"in e.repository?e.repository.url:void 0})(t);if(!n)return;const o=q(n.trim());return o?o.replace(/\.git$/,""):void 0})(n?.url,o);r||t.error(le("Unable to determine the git remote to compute the app identifier."));const i=n?.identifier||((e,t)=>{if(!e||!t)return;const n=`${e}:${t}`;return m.createHash("md5").update(n).digest("hex")})(r,s);return i&&s||t.error(le("Unable to compute the app identifier.")),{identifier:i,name:s}},he=t.green.bold,ge=t.yellow.bold,ye=t.cyan.bold,be=t.bold,we=(e,t={},n)=>async()=>{const o=await ne(e,{contentType:"application/zip",filename:ie});return M({getForm:()=>{const e=new FormData;return e.append("name",n),e.append("bundle",o,ie),e},defaultHeaders:t,zip:!1})},ve=async(e,t,n)=>{const o=[],s=[];if(!t.apiKey||!t.appKey)return o.push(new Error("Missing authentication token, need both app and api keys.")),{errors:o,warnings:s};if(!t.identifier)return o.push(new Error("No app identifier provided")),{errors:o,warnings:s};const r=(i=t.site,a=t.identifier,E("APPS_INTAKE_URL")||`https://api.${i}/api/unstable/app-builder-code/apps/${a}/upload`);var i,a;const u=T({bundler:t.bundlerName,plugin:"apps",version:t.version}),p=K({identifier:t.identifier,intakeUrl:r,defaultHeaders:`\n${JSON.stringify(u,null,2)}`}),c=`an archive of:\n - ${he(e.assets.length.toString())} files\n - ${he(f(e.size))}\n\nWith the configuration:\n${p}`;if(t.dryRun)return n.error(`\n${ye("Dry run enabled")}\n\nSkipping assets upload.\nWould have uploaded ${c}`),{errors:o,warnings:s};try{const o=await A({auth:{apiKey:t.apiKey,appKey:t.appKey},url:r,method:"POST",type:"json",getData:we(e.archivePath,u,t.name),onRetry:(e,t)=>{const o=`Failed to upload archive (attempt ${ge(`${t}/5`)}): ${e.message}`;s.push(o),n.warn(o)}});if(n.debug(`Uploaded ${c}\n`),o.version_id&&o.application_id&&o.app_builder_id){const{version_id:e,application_id:s,app_builder_id:r}=o,i=`https://api.${t.site}/api/unstable/app-builder-code/apps/serve/${s}/v/${e}/index.html`,a=`https://app.${t.site}/app-builder/apps/${r}`;n.info(`Your application is available at:\n${be("Standalone :")}\n ${ye(i)}\n\n${be("AppBuilder :")}\n ${ye(a)}`)}}catch(e){const t=e instanceof Error?e:new Error(String(e));o.push(t)}return{errors:o,warnings:s}},$e=t.yellow.bold,ke=t.red.bold,Se=({options:e,context:t})=>{const n=t.getLogger(re);let o;const s=(e=>{const t=e[se]||{};return{enable:t.enable??!!e[se],include:t.include||[],dryRun:t.dryRun??!1,identifier:t.identifier?.trim(),name:t.name?.trim()||e.metadata?.name?.trim()}})(e);if(!s.enable)return[];const r=async()=>{const e=n.time("handle assets");let r;try{const e=n.time("resolve identifier"),{name:o,identifier:u}=fe(t.buildRoot,n,{url:t.git?.remote,name:s.name,identifier:s.identifier});if(!u||!o)throw new Error("Missing apps identification.\nEither:\n - pass an 'options.apps.identifier' and 'options.apps.name' to your plugin's configuration.\n - have a 'name' and a 'repository' in your 'package.json'.\n - have a valid remote url on your git project.\n");e.end();const d=p.relative(t.buildRoot,t.bundler.outDir),m=[...s.include,`${d}/**/*`],f=await ae(m,t.buildRoot);if(!f.length)return void n.debug("No assets to upload.");const h=n.time("archive assets"),g=await(async e=>{const t=await i.mkdtemp(p.join(l.tmpdir(),"dd-apps-")),n=p.join(t,ie),o=new c;for(const t of e)o.file(t.relativePath,a.createReadStream(t.absolutePath),{binary:!0,compression:"DEFLATE",compressionOptions:{level:9}});await new Promise(((e,t)=>{const s=a.createWriteStream(n),r=o.generateNodeStream({type:"nodebuffer",streamFiles:!0,compression:"DEFLATE",compressionOptions:{level:9}});r.on("error",t),s.on("error",t),s.on("close",e),r.pipe(s)}));const{size:s}=await i.stat(n);return{archivePath:n,size:s,assets:e}})(f);h.end(),r=p.dirname(g.archivePath);const y=n.time("upload assets"),{errors:b,warnings:w}=await ve(g,{apiKey:t.auth.apiKey,appKey:t.auth.appKey,bundlerName:t.bundler.name,dryRun:s.dryRun,identifier:u,name:o,site:t.auth.site,version:t.version},n);if(y.end(),w.length>0&&n.warn(`${$e("Warnings while uploading assets:")}\n - ${w.join("\n - ")}`),b.length>0){const e=b.map((e=>e.cause||e.stack||e.message||e)).join("\n - ");throw new Error(` - ${e}`)}}catch(e){o=e,n.error(`${ke("Failed to upload assets:")}\n${e?.message||e}`)}if(r&&await(async e=>i.rm(e,{force:!0,maxRetries:3,recursive:!0}))(r),e.end(),o)throw o};return[{name:re,enforce:"post",async asyncTrueEnd(){await r()}}]},Ee="errorTracking",De="datadog-error-tracking-plugin",xe=(e,n,o)=>{if(".map"!==p.extname(o))throw new Error(`The file ${t.green.bold(o)} is not a sourcemap.`);const s=o.replace(/\.map$/,""),r=p.relative(n,s),i=((e,t)=>{if(e.startsWith("/"))return p.join(e,t);try{const n=e.replace(/\/*$/,"/"),o=new URL(n),s=t.replace(/^[\\/]*/,"");return new URL(s,o).href}catch{return`${e}${t}`}})(e,r);return{minifiedFilePath:s,minifiedUrl:i,relativePath:r}},Re=/[/]+|[\\]+/g,Pe=/^[/]+|^[\\]+|[/]+$|[\\]+$/g,je=(e,t)=>{const n=e.replace(Pe,"").split(Re),o=t.replace(Pe,"").split(Re),s=n.join("/");let r="";for(let e=0;e<o.length;e+=1){const t=o.slice(-e).join("/");s.startsWith(t)&&(r=t)}return r},Te=async(e,t,n,o)=>{const s=await(async(e,t)=>{const[n,o]=await Promise.all([oe(e.minifiedFilePath),oe(e.sourcemapFilePath)]);return{file:n,sourcemap:o,repeatedPrefix:je(e.relativePath,t)}})(e,n),r=[],i=[],a=new Map([["event",{type:"string",options:{contentType:"application/json",filename:"event"},value:JSON.stringify({...t,minified_url:e.minifiedUrl})}],["source_map",{type:"file",path:e.sourcemapFilePath,options:{filename:"source_map",contentType:"application/json"}}],["minified_file",{type:"file",path:e.minifiedFilePath,options:{filename:"minified_file",contentType:"application/javascript"}}]]);if(o)try{a.set("repository",{type:"string",options:{contentType:"application/json",filename:"repository"},value:JSON.stringify({data:[{files:o.trackedFilesMatcher.matchSourcemap(e.sourcemapFilePath,(t=>{i.push(`${p.basename(e.sourcemapFilePath)}: "${t}"`)})),hash:o.hash,repository_url:o.remote}],version:1})})}catch(t){i.push(`Could not attach git data for sourcemap ${e.sourcemapFilePath}: ${t.message}`)}return s.file.empty&&r.push(`Minified file is empty: ${e.minifiedFilePath}`),s.file.exists||r.push(`Minified file not found: ${e.minifiedFilePath}`),s.sourcemap.empty&&r.push(`Sourcemap file is empty: ${e.sourcemapFilePath}`),s.sourcemap.exists||r.push(`Sourcemap file not found: ${e.sourcemapFilePath}`),s.repeatedPrefix&&i.push(`The minified file path contains a repeated pattern with the minified path prefix: ${s.repeatedPrefix}`),{content:a,errors:r,warnings:i}},Me=t.green.bold,Oe=t.yellow.bold,Ae=t.red.bold,Ne=(e,t={})=>async()=>M({getForm:async()=>{const t=new FormData;for(const[n,o]of e.content){const e="file"===o.type?await ne(o.path,o.options):new Blob([o.value],{type:o.options.contentType});t.append(n,e,o.options.filename)}return t},defaultHeaders:t,zip:!0}),ze=async(e,t,n,o)=>{const s=[],r=[];if(!n.apiKey)return s.push({error:new Error("No authentication token provided")}),{errors:s,warnings:r};if(0===e.length)return r.push("No sourcemaps to upload"),{errors:s,warnings:r};const i=o.time("Queue uploads"),a=new(h.default?h.default:h)({concurrency:t.maxConcurrency}),u=(p=n.site,E("SOURCEMAP_INTAKE_URL")||`https://sourcemap-intake.${p}/api/v2/srcmap`);var p;const c=T({bundler:n.bundlerName,plugin:"sourcemaps",version:n.version}),l=K({...t,intakeUrl:u,outDir:n.outDir,defaultHeaders:`\n${JSON.stringify(c,null,2)}`}),d=`\nUploading ${Me(e.length.toString())} sourcemaps with configuration:\n${l}`;o.debug(d);const m=[];for(const i of e){const e={sourcemap:i.content.get("source_map")?.path.replace(n.outDir,"."),file:i.content.get("minified_file")?.path.replace(n.outDir,".")};m.push(a.add((async()=>{try{await A({auth:{apiKey:n.apiKey},url:u,method:"POST",getData:Ne(i,c),onRetry:(t,n)=>{const s=`Failed to upload ${Oe(e.sourcemap)} | ${Oe(e.file)}:\n ${t.message}\nRetrying ${n}/5`;r.push(s),o.debug(s)}})}catch(n){if(s.push({metadata:e,error:n}),!0===t.bailOnError)throw n}})))}return i.end(),o.debug(`Queued ${Me(e.length.toString())} uploads.`),await Promise.all(m),await a.onIdle(),{warnings:r,errors:s}},Ce=async(e,t,n)=>{const o=n.time("get sourcemaps files"),s=((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=>({...xe(e.minifiedPathPrefix,t.outDir,n),sourcemapFilePath:n,minifiedPathPrefix:e.minifiedPathPrefix})))})(e.sourcemaps,{outDir:t.outDir,outputs:t.outputs});o.end();const r=n.time("send sourcemaps");await(async(e,t,n,o)=>{const s=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=o.time("Compute payloads"),u=await Promise.all(e.map((e=>Te(e,i,r,n.git))));a.end();const p=u.map((e=>e.errors)).flat(),c=u.map((e=>e.warnings)).flat();if(c.length>0&&o.warn(`Warnings while preparing payloads:\n - ${c.join("\n - ")}`),p.length>0){const e=`Failed to prepare payloads, aborting upload :\n - ${p.join("\n - ")}`;if(o.error(e),!0===t.bailOnError)throw new Error(e);return}const l=o.time("Upload sourcemaps"),{errors:d,warnings:m}=await ze(u,t,{apiKey:n.apiKey,bundlerName:n.bundlerName,version:n.version,outDir:n.outDir,site:n.site},o);if(l.end(),o.debug(`Done uploading ${Me(`${e.length-d.length}/${e.length}`)} sourcemaps in ${Me(F(Date.now()-s))}.`),d.length>0){const e=`Failed to upload some sourcemaps:\n - ${d.map((({metadata:e,error:t})=>{const n=t.cause||t.stack||t.message;return e?`${Ae(e.file)} | ${Ae(e.sourcemap)} :\n${n}`:n})).join("\n - ")}`;if(o.error(e),!0===t.bailOnError)throw new Error(e)}m.length>0&&o.warn(`Warnings while uploading sourcemaps:\n - ${m.join("\n - ")}`)})(s,e.sourcemaps,{apiKey:t.apiKey,bundlerName:t.bundlerName,git:t.git,outDir:t.outDir,site:t.site,version:t.version},n),r.end()},Ie=e=>{const n=t.bold.red,o=e[Ee]||{},s={errors:[]};if(o.sourcemaps){o.sourcemaps.releaseVersion||s.errors.push(`${n("sourcemaps.releaseVersion")} is required.`),o.sourcemaps.service||s.errors.push(`${n("sourcemaps.service")} is required.`),o.sourcemaps.minifiedPathPrefix||s.errors.push(`${n("sourcemaps.minifiedPathPrefix")} is required.`),o.sourcemaps.minifiedPathPrefix&&((e=>{let t;try{t=new URL(e).host}catch{}return!(!t&&!e.startsWith("/"))})(o.sourcemaps.minifiedPathPrefix)||s.errors.push(`${n("sourcemaps.minifiedPathPrefix")} must be a valid URL or start with '/'.`));const e={bailOnError:!1,dryRun:!1,maxConcurrency:20,...o.sourcemaps};s.config=e}return s},_e=({options:e,context:t})=>{const n=t.getLogger(De),o=n.time("validate options"),s=((e,t)=>{const n=[],o=Ie(e);if(n.push(...o.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${De}.`);const s={enable:!!e[Ee],...e[Ee],sourcemaps:void 0};return o.config&&(s.sourcemaps=o.config),s})(e,n);if(o.end(),!s.enable)return[];let r,i,a=!1;const u=async()=>{if(!s.sourcemaps||a)return;a=!0;const e=n.time("sourcemaps process");await Ce(s,{apiKey:t.auth.apiKey,bundlerName:t.bundler.name,git:r,outDir:t.bundler.outDir,outputs:i?.outputs||[],site:t.auth.site,version:t.version},n),e.end()};return[{name:De,enforce:"post",async git(e){r=e,i&&await u()},async buildReport(t){i=t,!r&&_(e)||await u()},async asyncTrueEnd(){a||await u()}}]},Fe=[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};/(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);return(e.points.length?e.points.reduce(((e,t)=>e+t[1]),0)/e.points.length:0)>t[e.type]?e:null}],Le="metrics",qe="datadog-metrics-plugin",Ke=e=>Math.floor((e||Date.now())/1e3),He=(e,t,n)=>({...e,tags:[...e.tags,...t],metric:n?`${n}.${e.metric}`:e.metric}),Ue=(e="")=>e.endsWith("/")?e:`${e}/`,We=(e,t)=>{let n=e;return e.split(Ue(t)),n.split("!").pop().replace(/(.*)?\/node_modules\//,"/node_modules/").replace(/^((\.)*\/)+/,"")},Be=(e,t)=>e.split("!").pop().replace(Ue(t),"./"),Ge=(e,t,n)=>{let o=e.name||e.userRequest;return o||(o=((e,t)=>{let n=e.userRequest;if(!n){let o;o=t.moduleGraph&&"function"==typeof t.moduleGraph.getIssuer?t.moduleGraph.getIssuer(e):e.issuer,n=o?.userRequest,n||(n=e._identifier?.split("!").pop())}return n||"unknown"})(e,t)),Be(o||"no-name",n)},Je=e=>e.replace(/^.*\/node_modules\/(@[a-z0-9][\w-.]+\/[a-z0-9][\w-.]*|[^/]+).*$/,"$1"),Ve=e=>e.map((e=>({type:e?.constructor?.name??typeof e,name:e?.name,value:"string"==typeof e?e:void 0}))),Ye=t.bold.red,Qe=t.bold.cyan,Xe=e=>(t,n)=>{let o,s;return"function"==typeof e?(o=e(t),s=e(n)):(o=t[e],s=n[e]),o>s?-1:o<s?1:0},Ze=(e,t)=>{if(!t||!t.size)return[];const n=Array.from(t.values());n.sort(Xe("duration"));const o={name:`${e} duration`,values:n.map((e=>({name:e.name,value:F(e.duration)}))),top:!0};n.sort(Xe("increment"));return[o,{name:`${e} hits`,values:n.map((e=>({name:e.name,value:e.increment.toString()}))),top:!0}]},et=(e,t,n)=>{const o=[];var s;n&&(o.push(...Ze("Loader",n.loaders)),o.push(...Ze("Tapable",n.tapables)),o.push(...Ze("Module",n.modules))),o.push(...(e=>{const t={name:"Module total dependents",values:[],top:!0},n={name:"Module total dependencies",values:[],top:!0},o={name:"Module size",values:[],top:!0},s={name:"Module aggregated size",values:[],top:!0},r=new Set,i=I(e.build),a=new Map,u=new Map,p=new Map;for(const e of i.inputs||[]){if("map"===e.type)continue;const t=new Set(e.dependencies),n=new Set(e.dependents);for(const n of t)p.has(n)||p.set(n,new Set),p.get(n).add(e.filepath);for(const t of n)u.has(t)||u.set(t,new Set),u.get(t).add(e.filepath);if(u.has(e.filepath)){const n=u.get(e.filepath);for(const e of n)t.add(e)}if(p.has(e.filepath)){const t=p.get(e.filepath);for(const e of t)n.add(e)}u.set(e.filepath,t),p.set(e.filepath,n),a.set(e.filepath,{name:e.name,size:e.size,dependencies:t,dependents:n})}for(const[e,t]of a){const n=u.get(e)||new Set,o=p.get(e)||new Set;let s=t.size;for(const e of n)s+=a.get(e)?.size||0;r.add({name:t.name,size:t.size,aggregatedSize:s,dependents:o,dependencies:n})}if(!r.size)return[t,n,o];const c=Array.from(r);return c.sort(Xe((e=>e.dependents.size))),t.values=c.map((e=>({name:e.name,value:e.dependents.size.toString()}))),c.sort(Xe((e=>e.dependencies.size))),n.values=c.map((e=>({name:e.name,value:e.dependencies.size.toString()}))),c.sort(Xe("size")),o.values=c.map((e=>({name:e.name,value:f(e.size)}))),c.sort(Xe("aggregatedSize")),s.values=c.map((e=>({name:e.name,value:f(e.aggregatedSize||e.size)}))),[t,n,o,s]})(e)),o.push(...(s=e,[{name:"Asset size",values:(s.build.outputs||[]).filter((e=>"map"!==e.type)).sort(Xe((e=>e.size))).map((e=>({name:e.name,value:f(e.size)}))),top:!0},{name:"Entry aggregated size",values:(s.build.entries||[]).sort(Xe((e=>e.size))).map((e=>({name:e.name,value:f(e.size)}))),top:!0},{name:"Entry number of modules",values:(s.build.entries||[]).sort(Xe((e=>e.size))).map((e=>({name:e.name,value:e.inputs.length.toString()})))||[],top:!0}])),o.push(...(e=>{const t={name:"General Numbers",values:[],top:!1},n=e.build.inputs?e.build.inputs.length:0,o=e.build.outputs?e.build.outputs.length:0,s=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:F(e.build.start-e.start)}),e.build.duration&&t.values.push({name:"Build duration",value:F(e.build.duration)}),e.build.writeDuration&&t.values.push({name:"Write duration",value:F(e.build.writeDuration)}),t.values.push({name:"Number of modules",value:n.toString()},{name:"Number of assets",value:o.toString()},{name:"Number of entries",value:i.toString()},{name:"Number of warnings",value:s.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=L(e.name,60)}const n=Math.max(...e.map((e=>e.name.length))),o=Math.max(...e.flatMap((e=>e.values.map((e=>e.name.length))))),s=Math.max(...e.flatMap((e=>e.values.map((e=>e.value.length))))),r=Math.max(n+4,o+s+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=s-e.value.length;t+=` [${Ye(e.value)}] ${" ".repeat(n)}${Qe(e.name)}\n`}}return t})(o);t.info(r)},tt="api/v1/series",nt=t.bold.green,ot=["onStart","onLoad","onResolve","onEnd"],st=new Map,rt=new Map,it=new Map,at=(e,t,n)=>{const o=Object.assign({},e);for(const s of ot)o[s]=async(o,r)=>{const i=rt.get(t)||{name:t,increment:0,duration:0,events:{}};i.events[s]=i.events[s]||{name:s,values:[]};const a="onLoad"===s;return(0,e[s])(o,(async(...e)=>{const o=Be(e[0].path,n),u=it.get(o)||{name:o,increment:0,duration:0,events:{}};u.events[s]=u.events[s]||{name:s,values:[]};const p=g.performance.now();try{return await r(...e)}finally{const n=g.performance.now(),r=n-p,c={start:p,end:n,duration:r,context:Ve(e)};if(i.events[s].values.push(c),i.duration+=r,i.increment+=1,rt.set(t,i),u.events[s].values.push(c),u.duration+=r,u.increment+=1,it.set(o,u),a){const e=st.get(t)||{name:t,increment:0,duration:0,events:{}};e.events[s]=e.events[s]||{name:s,values:[]},e.events[s].values.push(c),e.duration+=r,e.increment+=1,st.set(t,e)}}}))};return o},ut=(e,t)=>({setup:n=>{n.initialOptions.metafile=!0;const o=t.time("wrapping plugins");((e,t)=>{const n=e.initialOptions.plugins;if(n){const e=n.map((e=>({...e})));for(const o of n){const n=o.setup;o.setup=async s=>{const r=at(s,o.name,t);await n({...r,initialOptions:{...r.initialOptions,plugins:e}})}}}})(n,e.buildRoot),o.end(),n.onEnd((async n=>{if(!n.metafile)return void t.warn("Missing metafile, can't proceed with modules data.");const o=t.time("getting plugins results"),{plugins:s,loaders:r,modules:i}={plugins:rt,modules:it,loaders:st};o.end(),await e.asyncHook("timings",{tapables:s,loaders:r,modules:i})}))}});class pt{constructor(e){this.started={},this.finished=[],this.cwd=e}startModule(e,t){const n=Ge(e,t,this.cwd),o=(e=>(e.loaders||[]).map((e=>e.loader||e)).map(Je))(e);o.length||o.push("no-loader"),this.started[n]={module:We(n),timings:{start:g.performance.now(),duration:0,end:0},loaders:o}}doneModule(e,t){const n=Ge(e,t,this.cwd),o=this.started[n];o&&(o.timings.end=g.performance.now(),o.timings.duration=o.timings.end-o.timings.start,this.finished.push(o),delete this.started[n])}getResults(){const e=new Map,t=new Map;for(const n of this.finished){const o=n.timings.end-n.timings.start,s=t.get(n.module)||{name:n.module,increment:0,duration:0,events:{}},r=n.loaders.join(",");s.events[r]=s.events[r]||{name:r,values:[]},s.events[r].values.push(n.timings),s.increment+=1,s.duration+=o,t.set(n.module,s);for(const t of n.loaders){const n=e.get(t)||{name:t,increment:0,duration:0,events:{}};n.increment+=1,n.duration+=o,e.set(t,n)}}return{loaders:e,modules:t}}}class ct{constructor(e){this.monitoredTaps={},this.tapables=[],this.hooks={},this.timings=new Map,this.ignoredHooks=["normalModuleLoader"],this.cwd=e}saveResult(e,t,n,o,s,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:s,end:r,duration:r-s,context:o,type:e}),i.duration+=r-s,i.increment+=1,this.timings.set(t,i)}getResults(){const e=this.timings;for(const[t,n]of this.timings){const o=n;o.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,o)}return{monitoredTaps:this.monitoredTaps,tapables:this.tapables,hooks:this.hooks,timings:e}}getPromiseTapPatch(e,t,n,o){return(...s)=>{this.checkNewHooks();const r=g.performance.now(),i=t.apply(this,s),a=()=>{this.saveResult(e,n,o,Ve(s),r,g.performance.now())};return i.then(a,a),i}}getAsyncTapPatch(e,t,n,o){return(...s)=>{this.checkNewHooks();const r=g.performance.now(),i=s.pop();return t.apply(this,[...s,(...t)=>(this.saveResult(e,n,o,Ve(s),r,g.performance.now()),i(...t))])}}getDefaultTapPatch(e,t,n,o){return(...s)=>{this.checkNewHooks();const r=g.performance.now(),i=t.apply(this,s);return this.saveResult(e,n,o,Ve(s),r,g.performance.now()),i}}getTapPatch(e,t,n,o){switch(e){case"promise":return this.getPromiseTapPatch(e,t,n,o);case"async":return this.getAsyncTapPatch(e,t,n,o);default:return this.getDefaultTapPatch(e,t,n,o)}}newTap(e,t,n,o){return(s,r)=>{const i="string"==typeof(a=s)?a:a.name;var a;const u=`${t}-${i}`;if(this.monitoredTaps[u])return n.call(o,s,r);this.monitoredTaps[u]=!0;const p=this.getTapPatch(e,r,i,t);return n.call(o,s,p)}}replaceTaps(e,t){t.tap=this.newTap("default",e,t.tap,t),t.tapAsync=this.newTap("async",e,t.tapAsync,t),t.tapPromise=this.newTap("promise",e,t.tapPromise,t)}patchHook(e,t,n){n._fakeHook||e.includes(qe)||(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 o of n)this.patchHook(t,o,e.hooks[o])}checkNewHooks(){for(const e of this.tapables)this.patchHooks(e)}throughHooks(e){this.tapables.includes(e)||this.tapables.push(e),this.patchHooks(e)}}const lt=e=>async t=>{const n=e.getLogger(qe),o={name:qe},s=new ct(e.buildRoot),r=new pt(e.buildRoot),i=n.time("parse compiler hooks");s.throughHooks(t),i.end(),t.hooks.thisCompilation.tap(o,(e=>{const t=n.time("parse compilation hooks");s.throughHooks(e),t.end(),e.hooks.buildModule.tap(o,(t=>{r.startModule(t,e)})),e.hooks.succeedModule.tap(o,(t=>{r.doneModule(t,e)})),e.hooks.failedModule&&e.hooks.failedModule.tap(o,(t=>{r.doneModule(t,e)}))})),t.hooks.afterEmit.tapPromise(o,(async()=>{const{timings:t}=s.getResults(),{loaders:n,modules:o}=r.getResults();await e.asyncHook("timings",{tapables:t,loaders:n,modules:o})}))},dt={filters:Fe},mt=({options:e,context:t})=>{const n=t.getLogger(qe);let o=0;const s=((e,t)=>{const n=e[Le],o=Ke(n?.timestamp);let s=!1===n?.enableDefaultPrefix?"":`build.${t}`;return n?.prefix&&(s+=s?`.${n.prefix}`:n.prefix),{enable:!!e[Le],enableDefaultPrefix:!0,enableTracing:!1,filters:Fe,tags:[],...e[Le],timestamp:o,prefix:s.toLowerCase().replace(/(^\.*|\.*$)/g,"")}})(e,t.bundler.name),r=[];if(!s.enable)return r;const i={name:qe,enforce:"pre",esbuild:ut(t,n),webpack:lt(t),rspack:lt(t)},a=n.time("build",{start:!1}),u=s.enableTracing&&["esbuild","webpack","rspack"].includes(t.bundler.name);let p,c;const l=async()=>{t.build.end=Date.now(),t.build.duration=t.build.end-t.build.start,t.build.writeDuration=t.build.end-o;const e=n.time("aggregating metrics"),r=s.timestamp,i=n.time("aggregate universal metrics"),a=((e,t)=>{const n=new Set,o=e.inputs||[],s=e.outputs||[],r=e.entries||[],i=e.warnings.length,a=e.errors.length,u=e.duration,p=new Map,c=new Map,l=new Map;for(const e of r){for(const t of e.inputs)p.has(t.filepath)||p.set(t.filepath,[]),p.get(t.filepath).push(e.name);for(const t of e.outputs){const n=t.filepath.replace(/\.map$/,"");l.has(n)||l.set(n,[]),l.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);n.add({metric:"assets.count",type:"count",points:[[t,s.length]],tags:[]}).add({metric:"entries.count",type:"count",points:[[t,r.length]],tags:[]}).add({metric:"errors.count",type:"count",points:[[t,a]],tags:[]}).add({metric:"modules.count",type:"count",points:[[t,o.length]],tags:[]}).add({metric:"warnings.count",type:"count",points:[[t,i]],tags:[]}),u&&n.add({metric:"compilation.duration",type:"duration",points:[[t,u]],tags:[]});for(const e of o){const o=[`moduleName:${e.name}`,`moduleType:${e.type}`];p.has(e.filepath)&&o.push(...p.get(e.filepath).map((e=>`entryName:${e}`))),c.has(e.filepath)&&o.push(...c.get(e.filepath).map((e=>`assetName:${e}`))),n.add({metric:"modules.size",type:"size",points:[[t,e.size]],tags:o}).add({metric:"modules.dependencies",type:"count",points:[[t,e.dependencies.size]],tags:o}).add({metric:"modules.dependents",type:"count",points:[[t,e.dependents.size]],tags:o})}for(const e of s){const o=[`assetName:${e.name}`,`assetType:${e.type}`],s=e.filepath.replace(/\.map$/,"");l.has(s)&&o.push(...l.get(s).map((e=>`entryName:${e}`))),n.add({metric:"assets.size",type:"size",points:[[t,e.size]],tags:o}).add({metric:"assets.modules.count",type:"count",points:[[t,e.inputs.length]],tags:o})}for(const e of r){const o=[`entryName:${e.name}`];n.add({metric:"entries.size",type:"size",points:[[t,e.size]],tags:o}).add({metric:"entries.modules.count",type:"count",points:[[t,e.inputs.length]],tags:o}).add({metric:"entries.assets.count",type:"count",points:[[t,e.outputs.length]],tags:o})}return n})(c,r);i.end();const u=n.time("aggregate plugins metrics"),l=((e,t)=>{const n=new Set;if(!e)return n;n.add({metric:"plugins.count",type:"count",points:[[t,e.size]],tags:[]});for(const o of e.values()){let e=0,s=0;for(const r of Object.values(o.events)){let i=0;s+=r.values.length;for(const t of r.values){const n=t.end-t.start;i+=n,e+=n}n.add({metric:"plugins.hooks.duration",type:"duration",points:[[t,i]],tags:[`pluginName:${o.name}`,`hookName:${r.name}`]}).add({metric:"plugins.hooks.increment",type:"count",points:[[t,r.values.length]],tags:[`pluginName:${o.name}`,`hookName:${r.name}`]})}n.add({metric:"plugins.duration",type:"duration",points:[[t,e]],tags:[`pluginName:${o.name}`]}).add({metric:"plugins.increment",type:"count",points:[[t,s]],tags:[`pluginName:${o.name}`]})}return n})(p?.tapables,r);u.end();const d=n.time("aggregate loaders metrics"),m=((e,t)=>{const n=new Set;if(!e)return n;n.add({metric:"loaders.count",type:"count",points:[[t,e.size]],tags:[]});for(const o of e.values())n.add({metric:"loaders.duration",type:"duration",points:[[t,o.duration]],tags:[`loaderName:${o.name}`]}).add({metric:"loaders.increment",type:"count",points:[[t,o.increment]],tags:[`loaderName:${o.name}`]});return n})(p?.loaders,r);d.end();const f=((e,t,n,o,s)=>{const r=new Set;for(const t of e){let e={...t,toSend:!0};if(n?.length)for(const t of n){const n=t({metric:e.metric,type:e.type,points:e.points,tags:e.tags});n?e={...n,toSend:e.toSend}:e.toSend=!1}r.add(He(e,o,s))}const i=Array.from(r).filter((e=>e.toSend)).length;return r.add(He({metric:"metrics.count",type:"count",points:[[t,i+1]],tags:[],toSend:!0},o,s)),r})(new Set([...a,...l,...m]),r,s.filters,s.tags,s.prefix);await t.asyncHook("metrics",f),e.end();const h=n.time("outputing report");et(t,n,p),h.end();const g=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.debug("No metrics to send.");const o=Array.from(e).filter((e=>e.toSend)).map((e=>({...e,toSend:void 0}))),s=new Map;for(const e of o)s.has(e.metric)||s.set(e.metric,0),s.set(e.metric,s.get(e.metric)+1);const r=Array.from(s.entries()).sort((([e],[t])=>e.localeCompare(t))).map((([e,t])=>`${e} - ${t}`));return n.debug(`\nSending ${o.length} metrics with configuration:\n - intake: ${nt(`https://api.${t.site}/${tt}`)}\n\nMetrics:\n - ${r.join("\n - ")}`),A({method:"POST",url:`https://api.${t.site}/${tt}?api_key=${t.apiKey}`,getData:()=>({data:JSON.stringify({series:o})})}).catch((e=>{n.error(`Error sending metrics ${e}`)}))})(f,{apiKey:t.auth.apiKey,site:t.auth.site},n),g.end()},d={name:"datadog-universal-metrics-plugin",enforce:"post",buildStart(){a.resume(),t.build.start=t.build.start||Date.now(),e[Le]?.timestamp||(s.timestamp=Ke(t.build.start))},buildEnd(){a.end(),o=Date.now()},async timings(e){p=e,c&&await l()},async buildReport(e){c=e,!p&&u||await l()}};return s.enableTracing&&r.push(i),r.push(d),r},ft="output",ht="datadog-output-plugin",gt=(e,t)=>"string"==typeof t?t.replace(/(\.json)?$/,".json"):!0===t?`${e}.json`:t,yt=e=>{const t=void 0===e;return{build:gt("build",e?.build??t),bundler:gt("bundler",e?.bundler??t),dependencies:gt("dependencies",e?.dependencies??t),errors:gt("errors",e?.errors??t),logs:gt("logs",e?.logs??t),metrics:gt("metrics",e?.metrics??t),timings:gt("timings",e?.timings??t),warnings:gt("warnings",e?.warnings??t)}},bt=(e,t)=>n=>{n.hooks.done.tap("bundler-outputs",(n=>{t((()=>{const t=e.time("stats serialization"),o=n.toJson({all:!1,assets:!0,children:!0,chunks:!0,chunkGroupAuxiliary:!0,chunkGroupChildren:!0,chunkGroups:!0,chunkRelations:!0,entrypoints:!0,errors:!0,ids:!0,modules:!0,nestedModules:!0,relatedAssets:!0,warnings:!0,reasons:!1,chunkModules:!1});return t.end(),o}))}))},wt=e=>{const t=new Set;return{buildStart(){t.clear()},writeBundle(e,n){t.add(n)},closeBundle(){e((()=>Array.from(t)))}}},vt=({options:e,context:t})=>{const n=(e=>({enable:!!e[ft],path:"./",...e[ft],files:yt(e[ft]?.files)}))(e),o=t.getLogger(ht);if(!n.enable)return[];const s=(e,s)=>{const r=n.files[e];if(!s||!1===r)return;t.queue((async()=>{const e=o.time(`output ${r}`),i=((e,t,n)=>{const o=p.isAbsolute(t)?t:p.resolve(e,t);return p.resolve(o,n)})(t.bundler.outDir,n.path,r);let c;try{const e="function"==typeof s?await s():s;await(async(e,t)=>{await X(p.dirname(e));const n=a.createWriteStream(e),o=new u.JsonStreamStringify(t,void 0,2),s=new Promise(((e,t)=>{o.on("end",(()=>{e()})),o.on("error",(e=>{t(e)}))}));return o.pipe(n),s})(i,e)}catch(e){c=e}c?o.error(`Failed writing ${r}: ${c}`):o.debug(`Wrote "./${p.relative(t.buildRoot,i)}"`),e.end()})())};return[{name:ht,buildReport(e){const t=o.time("serialize report"),n=I(e);t.end(),s("build",{bundler:n.bundler,metadata:n.metadata,start:n.start,end:n.end,duration:n.duration,writeDuration:n.writeDuration,entries:n.entries,outputs:n.outputs}),s("logs",n.logs),s("timings",n.timings),s("dependencies",n.inputs),s("errors",n.errors),s("warnings",n.warnings)},metrics(e){s("metrics",(()=>Array.from(e)))},esbuild:{setup(e){e.onEnd((e=>{s("bundler",e.metafile)}))}},rspack:bt(o,(e=>{s("bundler",e)})),rollup:wt((e=>{s("bundler",e)})),vite:wt((e=>{s("bundler",e)})),webpack:bt(o,(e=>{s("bundler",e)}))}]};var $t=(e=>(e[e.BEFORE=0]="BEFORE",e[e.MIDDLE=1]="MIDDLE",e[e.AFTER=2]="AFTER",e))($t||{});const kt="rum",St="datadog-rum-plugin",Et=e=>`(function(c,n){try{if(typeof window==='undefined')return;var w=window,m=w[n]=w[n]||{},s=new Error().stack;s&&(m[s]=c)}catch(e){}})(${JSON.stringify(e)},${JSON.stringify("DD_SOURCE_CODE_CONTEXT")});`,Dt="datadog-rum-privacy-plugin";const xt=(e,t)=>{const n=t.getLogger(Dt),o=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);let s=0,r=0;return{name:Dt,enforce:"post",transform:{filter:{id:{include:e.include,exclude:e.exclude}},handler(e,t){try{const n=function(e){if("rspack"===e?.framework||"webpack"===e?.framework)switch(typeof e.inputSourceMap){case"undefined":return;case"string":return e.inputSourceMap;default:return JSON.stringify(e.inputSourceMap)}}(this.getNativeBuildContext?.()),i=y.instrument({id:t,code:e,map:n},o);return 0===i.privacyDictionarySize?{code:e}:(s+=i.privacyDictionarySize,r++,i)}catch(t){return n.error(`Instrumentation Error: ${t}`,{forward:!0}),{code:e}}}},buildEnd:()=>{n.debug(`Privacy dictionary will include ${s} entries across ${r} files`,{forward:!0,context:{dictionaryEntryCount:s,fileCount:r}})}}},Rt=e=>`DD_RUM.init({${JSON.stringify(e.sdk).replace(/(^{|}$)/g,"")}});\n`,Pt=(e,t)=>{const n=e.sdk;if(n.clientToken)return Rt(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 o;try{const e=await A({url:`https://api.${t.auth.site}/api/v2/rum/applications/${n.applicationId}`,type:"json",auth:t.auth});o=e.data?.attributes?.client_token}catch(e){throw new Error(`Could not fetch the clientToken: ${e.message}`)}if(!o)throw new Error("Missing clientToken in the API response.");return Rt({...e,sdk:{clientToken:o,...n}})}},jt=e=>{const n=t.bold.red,o=e[kt]||{},s={errors:[]};if(!o.sdk)return s;o.sdk.applicationId||s.errors.push(`Missing ${n("applicationId")} in the SDK configuration.`),e.auth.apiKey&&e.auth.appKey||o.sdk.clientToken||s.errors.push(`Missing ${n('"auth.apiKey"')} and/or ${n('"auth.appKey"')} to fetch missing client token.`);const r={applicationId:"unknown_application_id",allowUntrustedEvents:!1,compressIntakeRequests:!1,defaultPrivacyLevel:"mask",enablePrivacyForActionName:!1,sessionReplaySampleRate:0,sessionSampleRate:100,silentMultipleInit:!1,site:e.auth.site||"datadoghq.com",startSessionReplayRecordingManually:!1,storeContextsAcrossPages:!1,telemetrySampleRate:20,traceSampleRate:100,trackingConsent:"granted",trackLongTasks:!1,trackResources:!1,trackUserInteractions:!1,trackViewsManually:!1};return s.config={...r,...o.sdk},s},Tt=e=>{const t=e[kt]||{},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},Mt=e=>{const n=t.bold.red,o=e[kt]||{},s={errors:[]};if(!o.sourceCodeContext)return s;const r=o.sourceCodeContext;return r?.service&&"string"==typeof r.service||s.errors.push(`Missing ${n('"rum.sourceCodeContext.service"')}.`),s.config=r,s},Ot=({options:e,context:t})=>{const n=((e,t)=>{const n=[],o=jt(e),s=Tt(e),r=Mt(e);if(n.push(...o.errors),n.push(...s.errors),n.push(...r.errors),n.length)throw t.error(`\n - ${n.join("\n - ")}`),new Error(`Invalid configuration for ${St}.`);const i={enable:!!e[kt],...e[kt],sdk:void 0,privacy:void 0,sourceCodeContext:void 0};return o.config&&(i.sdk=o.config),s.config&&(i.privacy=s.config,t.debug(`datadog-rum-privacy plugin options: ${JSON.stringify(i.privacy,((e,t)=>t instanceof RegExp?t.toString():t))}`,{forward:!0})),r.config&&(i.sourceCodeContext=r.config),i})(e,t.getLogger(St)),o=[];if(!n.enable)return o;if(n.sourceCodeContext&&t.inject({type:"code",position:$t.BEFORE,injectIntoAllChunks:!0,value:Et(n.sourceCodeContext)}),n.sdk&&(t.inject({type:"file",position:$t.MIDDLE,value:p.join(__dirname,"./rum-browser-sdk.js")}),t.inject({type:"code",position:$t.MIDDLE,value:Pt(n,t)})),n.privacy){t.inject({type:"file",position:$t.BEFORE,value:p.join(__dirname,"./privacy-helpers.js")});const e=xt(n.privacy,t);o.push(e)}return o},At="datadog-analytics-plugin",Nt=({context:e})=>{const t=e.getLogger(At);return[{name:At,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}`)}})())}}]},zt="datadog-async-queue-plugin",Ct=e=>{const{context:t,stores:n}=e,o=t.getLogger(zt),s=[];return t.queue=e=>{const t=e.catch((e=>{s.push(e.message||e.toString())}));n.queue.push(t)},[{name:zt,asyncTrueEnd:async()=>{await Promise.all(n.queue),s.length>0&&o.error(`Error occurred while processing async queue:\n ${s.join("\n ")}`)}}]},It=async(e,t,n)=>{const o=[],s=e.initialOptions.entryPoints,r=[],i=[];if(Array.isArray(s))for(const e of s){const t=e&&"object"==typeof e?e.in:e;r.push({path:t})}else s&&"object"==typeof s&&r.push(...Object.entries(s).map((([e,t])=>({name:e,path:t}))));const a=r.flatMap((e=>{return(t=e.path,t.includes("*")?d.glob.sync(t):[t]).map((t=>[e,t]));var t})).map((async([n,s])=>{const r=await e.resolve(s,{kind:"entry-point",resolveDir:t.buildRoot});r.errors.length&&i.push(...r.errors.map((e=>e.text))),r.path&&o.push({name:n.name,resolved:r.path,original:n.path})}));for(const e of i)n.error(e);return await Promise.all(a),o},_t=/\.(?!.*(?:\.|\/|\\))(\w{1,})/g,Ft=/(\?|%3F|\|)+/gi,Lt=e=>{return"unknown"===e?e:e.includes("webpack/runtime")?"runtime":(t=Ht(e),_t.lastIndex=0,_t.exec(t)?.[1]||"unknown");var t},qt=["unknown","commonjsHelpers.js",`vite${p.sep}preload-helper.js`],Kt=(e,t,n)=>{const o=new Set;for(const n of e){const e=Ht(n);C(n)||e===t||qt.includes(e)||o.add(e)}return o},Ht=e=>e.split("!").pop().split(Ft).shift().replace(/^[^\w\s.,!@#$%^&*()=+~`\-/\\]+/,""),Ut=(e,t)=>C(t)?x:"unknown"===t?t:t.includes("webpack/runtime")?t.replace("webpack/runtime/","").replace(/ +/g,"-"):((e,t)=>{const n=t.split(p.sep),o=e.split(p.sep).filter(((e,t)=>e===n[t])).join(p.sep);return e.replace(o,"")})(t.split("!").pop(),e).split("node_modules").pop().split(Ft).shift().replace(/^((\.\.?)?[/\\])+/g,""),Wt=(e,t)=>Object.fromEntries(Object.entries(e).map((([e,n])=>[ue(t,e),n]))),Bt=(e,t)=>({setup(n){const o=new Map;let s=[];const r=t.time("build report",{start:!1});n.onStart((async()=>{o.clear(),s=[],r.resume();const i=t.time("process entries");s.push(...await It(n,e,t));for(const t of s){const n=Ut(e.bundler.outDir,t.resolved);t.name?o.set(n,t.name):o.set(n,n)}i.end(),r.pause()})),n.onEnd((async n=>{r.resume();const s=t.time("collecting errors and warnings"),i=e.bundler.outDir,a=e.buildRoot;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(s.end(),!n.metafile){const n="Missing metafile from build report.";return e.build.warnings.push(n),void t.warn(n)}const u=[],c=[],l=[],d=[],m=[],f={},h={},g=t.time("indexing metafile data"),y=Wt(n.metafile.inputs,a),b=Wt(n.metafile.outputs,a);g.end();const w=e=>{if(!C(e))return e;const t=y[ue(a,e)];if(!t)return e;const n=t.imports.find((e=>!C(e.path)));return n?n.path:e},v=t.time("looping through inputs");for(const[e,t]of Object.entries(n.metafile.inputs)){if(C(e))continue;const n=ue(a,e),o={name:Ut(i,e),filepath:n,dependents:new Set,dependencies:new Set,size:t.bytes,type:Lt(e)};f[n]=o,u.push(o)}v.end();const $=t.time("looping through outputs");for(const[e,s]of Object.entries(n.metafile.outputs)){const n=ue(a,e),r=Ut(i,n),u=[];for(const e of Object.keys(s.inputs)){if(C(e))continue;const n=f[ue(a,e)];n?u.push(n):t.debug(`Input ${e} not found for output ${r}`)}if(s.entryPoint&&!u.length){const e=f[ue(a,s.entryPoint)];if(!e){t.debug(`Input ${s.entryPoint} not found for output ${r}`);continue}u.push(e)}const p={name:r,filepath:n,inputs:u,size:s.bytes,type:Lt(n)};if(h[n]=p,"map"===p.type&&d.push(p),c.push(p),!s.entryPoint)continue;const m=f[ue(a,w(s.entryPoint))];if(m){if(!o.get(m.name))continue;const e={...p,name:o.get(m.name)||m.name,outputs:[p],size:p.size};l.push(e)}}$.end();const k=t.time("looping through sourcemaps");for(const e of d){const n=h[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:h,meta:b}},E=/(<runtime>|https:|file:|data:|#)/g,D=e=>!C(e)&&!e.match(E),x=(e,n,o={})=>{if(!D(e))return o;const s=n.report[e];if(!s)return t.debug(`Could not find report's ${e}`),o;if(o[s.filepath])return o;o[s.filepath]=s;const r=n.meta[e];if(!r)return t.debug(`Could not find metafile's ${e}`),o;if(!r.imports||!r.imports.length)return o;for(const t of r.imports){const r=t.path.match(/^\.\.?\//),c=r?p.dirname(e):a,l=ue(c,t.path);if(t.external){if(D(t.path)){const e=r?l:t.path,n=S.inputs.report[e]||{filepath:e,name:Ut(i,t.path),size:0,type:"external",dependencies:new Set,dependents:new Set};"dependencies"in s&&(n.dependents.add(s),s.dependencies.add(n)),"inputs"in s&&!s.inputs.includes(n)&&s.inputs.push(n),u.includes(n)||u.push(n),S.inputs.report[e]=n,o[n.filepath]=n}}else x(l,n,o)}return o},R=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)}R.end();const P=t.time("aggregate dependencies and dependents");for(const e of u){if("external"===e.type)continue;const n=S.inputs.meta[e.filepath];if(n)for(const o of n.imports){if(!D(o.path))continue;const n=o.path.match(/^\.?\.\//),s=n?p.dirname(e.filepath):a,r=ue(s,o.path);let i;if(o.external){const e=n?r:o.path;i=S.inputs.report[e]}else i=S.inputs.report[r];i?(e.dependencies.add(i),i.dependents.add(e)):t.debug(`Could not find input file of ${o.path} imported from ${e.name}`)}else t.debug(`Could not find metafile's ${e.name}`)}P.end(),e.build.outputs=c,e.build.inputs=u,e.build.entries=m,r.end(),await e.asyncHook("buildReport",e.build)}))}}),Gt=(e,t)=>{const n=t.time("module parsing",{start:!1}),o=t.time("build report",{start:!1}),s=t.time("filling entries",{start:!1}),r=t.time("filling inputs and outputs",{start:!1}),i=t.time("completing dependencies and dependents",{start:!1}),u=t.time("filling dependencies and dependents",{start:!1}),p=t.time("filling sourcemaps inputs",{start:!1}),c=new Map,l=new Map,d=new Map,m=new Map;return{buildStart(){m.clear(),c.clear(),l.clear(),d.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=Ht(e.id),o=m.get(t)||{dependencies:new Set,dependents:new Set},s=Kt(new Set([...e.dynamicallyImportedIds,...e.importedIds]),t),r=Kt(new Set([...e.dynamicImporters,...e.importers]),t);for(const e of r)o.dependents.add(e);for(const e of s)o.dependencies.add(e);m.set(t,o),n.tag([`module:${t}`],{span:!0}),n.pause()},writeBundle(n,f){o.resume();const h=n.dir?ue(e.buildRoot,n.dir):e.bundler.outDir,g=new Set,y=new Set,b=new Map;i.resume();for(const[e,{dependencies:t,dependents:n}]of m){for(const n of t){const t=Ht(n),o=m.get(t)||{dependencies:new Set,dependents:new Set};o.dependents.has(e)||(o.dependents.add(e),m.set(t,o))}for(const t of n){const n=Ht(t),o=m.get(n)||{dependencies:new Set,dependents:new Set};o.dependencies.has(e)||(o.dependencies.add(e),m.set(n,o))}}i.end(),r.resume();for(const[e,n]of Object.entries(f)){const o=ue(h,e),s="code"in n?Buffer.byteLength(n.code,"utf8"):Buffer.byteLength(n.source,"utf8"),r=l.get(o)||{name:e,filepath:o,inputs:[],size:s,type:Lt(e)};if("map"===r.type&&y.add(r),"modules"in n)for(const[e,t]of Object.entries(n.modules)){if(Ht(e)!==e)continue;let n=t.originalLength;if(!n&&0!==n)try{n=a.statSync(e).size}catch(e){n=t.renderedLength}const o=c.get(e)||{name:Ut(h,e),dependencies:new Set,dependents:new Set,filepath:e,size:n,type:Lt(e)};r.inputs.push(o),c.set(o.filepath,o)}if("imports"in n)for(const e of n.imports){const n=Ht(e);if(!m.has(n)){b.set(ue(h,n),r);continue}if(c.has(n)){t.debug(`Input report already there for ${n} from ${r.name}.`);continue}const o=c.get(n)||{name:Ut(h,e),dependencies:new Set,dependents:new Set,filepath:n,size:0,type:"external"};r.inputs.push(o),c.set(o.filepath,o)}"isEntry"in n&&n.isEntry&&g.add({...r,name:n.name,size:0,outputs:[r]}),l.set(r.filepath,r)}r.end();for(const[e,n]of b){const o=l.get(e);o?n.inputs.includes(o)||n.inputs.push(o):t.debug(`Could not find the output report for ${e}.`)}u.resume();for(const[e,n]of c){const o=m.get(e);if(o){for(const e of o.dependencies){const o=c.get(e);o?n.dependencies.add(o):t.debug(`Could not find input for dependency ${Ut(h,e)} of ${n.name}`)}for(const e of o.dependents){const o=c.get(e);o?n.dependents.add(o):t.debug(`Could not find input for dependent ${Ut(h,e)} of ${n.name}`)}}else t.debug(`Could not find the import report for ${n.name}.`)}if(u.end(),y.size){p.resume();for(const e of y){const n=e.filepath.replace(/\.map$/,""),o=l.get(n);o?e.inputs.push(o):t.debug(`Could not find output for sourcemap ${e.name}`)}p.end()}const w=(e,n=new Map)=>{if(n.has(e))return n;const o=Ut(h,e),s=l.get(e);if(!s)return c.has(o)||t.debug(`Could not find output for ${o}`),n;n.set(e,s);const r=f[Ut(h,e)];if(!r)return t.debug(`Could not find asset for ${o}`),n;const i=[];"imports"in r&&i.push(...r.imports),"dynamicImports"in r&&i.push(...r.dynamicImports);for(const e of i)w(ue(h,e),n);return n};s.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),d.has(e.filepath)&&t.debug(`Entry "${e.name}":"${Ut(h,e.filepath)}" already reported.`),d.set(e.filepath,e)}s.pause(),o.pause()},async closeBundle(){e.build.inputs=Array.from(c.values()),e.build.outputs=Array.from(l.values()),e.build.entries=Array.from(d.values()),s.end(),o.end(),await e.asyncHook("buildReport",e.build)}}},Jt=(e,t,n)=>o=>{let s=[],r=[],i=[];const a=new Map,u=new Map,p=new Map,c=new Map,l=[],d=new Map,m=n.time("build report",{start:!1}),f=e=>!(!e||e.startsWith("webpack/runtime")||e.startsWith("multi ")||C(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"],o=e=>{const n=Ht(e);t.add(n),n.startsWith("external ")&&t.add(h(n))};o(e.identifier());for(const t of n){const n=e[t];t&&t in e&&"string"==typeof n&&o(n)}return t})(e);for(const e of n)if(c.has(e)){const n=c.get(e);n.dependencies.push(...t.dependencies||[]),n.blocks.push(...t.blocks||[])}else c.set(e,t)},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},b=(e,t)=>{if("request"in t&&t.request){const n=Ht(t.request);if(c.has(n))return c.get(n);if(e.context){const t=ue(Ht(e.context),n);if(c.has(t))return c.get(t)}}},w=e=>!(!("externalType"in e)||!e.externalType)||(!(!("external"in e)||!e.external)||!!e.identifier?.().startsWith("external "));o.hooks.thisCompilation.tap(t,(o=>{s=[],r=[],i=[],a.clear(),u.clear(),c.clear(),d.clear(),o.hooks.finishModules.tap(t,(t=>{m.resume();const o=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(),o=Ut(e.bundler.outDir,t),r=new Set(y(n).map((e=>{const o=b(n,e);if(!o?.identifier())return!1;const s=o.identifier();return!!f(s)&&(s!==t&&(w(o)?h(s):s))})).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=w(n)?{size:0,name:h(o),dependencies:new Set,dependents:new Set,filepath:t,type:"external"}:{size:n.size()||0,name:o,dependencies:new Set,dependents:new Set,filepath:t,type:Lt(t)};s.push(u),a.set(t,u),w(n)&&a.set(h(t),u)}i.end();const u=n.time("assigning dependencies and dependents");for(const e of s){const t=d.get(e.filepath);if(t){for(const o of t.dependencies){const t=a.get(o);t?e.dependencies.add(t):n.debug(`Could not find input of dependency ${o}`)}for(const o of t.dependents){const t=a.get(o);t?e.dependents.add(t):n.debug(`Could not find input of dependent ${o}`)}}else n.debug(`Could not find dependency report for ${e.name}`)}u.end(),o.end(),m.pause()}))})),o.hooks.afterEmit.tapPromise(t,(async t=>{m.resume();const o=t.chunks,c=t.getAssets(),d=t=>[...t.files||[],...t.auxiliaryFiles||[]].map((t=>ue(e.bundler.outDir,t))),h=n.time("indexing chunks"),g=t.chunkGraph;for(const e of o){const t=d(e),n=(g?.getChunkModules(e)||[]).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"===Lt(e))continue;const t=p.get(e)||new Set;for(const e of n)t.add(e);p.set(e,t)}}h.end();const y=n.time("building outputs");for(const t of c){const o={size:t.source.size()||0,name:t.name,inputs:[],filepath:ue(e.bundler.outDir,t.name),type:Lt(t.name)};if(u.set(o.filepath,o),r.push(o),"map"===o.type){l.push(o);continue}const s=p.get(o.filepath);if(s)for(const e of s){const t=a.get(e);t?o.inputs.push(t):n.debug(`Could not find input of ${e}`)}else n.debug(`Could not find modules for ${o.name}`)}y.end();const b=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}`)}b.end();const w=n.time("building entries"),v=(e,t=new Set)=>{if(t.has(e))return[];t.add(e);const n=[...e.chunks];for(const o of e.childrenIterable||[])n.push(...v(o,t));return n};for(const[o,s]of t.entrypoints){const t=new Map,r=new Map;let a=0;const p=v(s).flatMap(d),c=s.chunks.filter((e=>g.getChunkEntryModulesIterable(e)||!1)).flatMap((e=>Array.from(e.files))).filter((e=>e.includes(o)||s.name&&e.includes(s.name))).find((e=>"js"===Lt(e)));for(const e of p){const o=u.get(e);if(e&&o){if("map"!==o.type&&!t.has(o.name)){t.set(o.name,o);for(const e of o.inputs)r.has(e.filepath)||r.set(e.filepath,e);a+=o.size}}else n.debug(`Could not find output of ${JSON.stringify(e)}`)}const l={name:o,filepath:c?ue(e.bundler.outDir,c):"unknown",size:a,inputs:Array.from(r.values()),outputs:Array.from(t.values()),type:c?Lt(c):"unknown"};i.push(l)}w.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=s,e.build.outputs=r,e.build.entries=i,m.end(),await e.asyncHook("buildReport",e.build)}))},Vt="datadog-build-report-plugin",Yt=e=>{const{context:t}=e,n=t.getLogger(Vt);return[{name:Vt,enforce:"post",esbuild:Bt(t,n),rspack:Jt(t,Vt,n),webpack:Jt(t,Vt,n),vite:Gt(t,n),rollup:Gt(t,n)}]},Qt="datadog-bundler-report-plugin",Xt=(e,t)=>t?p.isAbsolute(t)?t:p.resolve(e,t):"",Zt=e=>{if(!e)return[];return(Array.isArray(e)?e:[e]).map((e=>e.dir?e.dir:e.file?p.dirname(e.file):void 0)).filter(Boolean)},en=e=>t=>{e.bundler.rawConfig=t.options,t.options.output?.path&&(e.bundler.outDir=Xt(process.cwd(),t.options.output.path)),e.hook("bundlerReport",e.bundler),t.options.context&&(e.buildRoot=t.options.context),e.hook("buildRoot",e.buildRoot)},tn=e=>({configResolved(t){e.bundler.rawConfig=t;let n=t.build?.outDir??"dist";const o=t.build?.rollupOptions?.output,s=Zt(o);e.buildRoot=t.root??process.cwd(),o&&s.length&&(n=ce(s,process.cwd())),e.bundler.outDir=Xt(e.buildRoot,n),e.hook("buildRoot",e.buildRoot),e.hook("bundlerReport",e.bundler)}}),nn=e=>{const{context:t}=e,n=t.getLogger(Qt);return[{name:Qt,enforce:"pre",esbuild:{setup(e){t.bundler.rawConfig=e.initialOptions,e.initialOptions.absWorkingDir&&(t.buildRoot=e.initialOptions.absWorkingDir),e.initialOptions.outdir&&(t.bundler.outDir=Xt(t.buildRoot,e.initialOptions.outdir)),e.initialOptions.outfile&&(t.bundler.outDir=Xt(t.buildRoot,p.dirname(e.initialOptions.outfile))),t.hook("buildRoot",t.buildRoot),t.hook("bundlerReport",t.bundler),e.initialOptions.metafile=!0}},webpack:en(t),rspack:en(t),vite:tn(t),rollup:{options(e){let n;if("output"in e){const t=Zt(e.output);n=ce(t,process.cwd())}const o=(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(p.dirname(e))}}return Array.from(t)})(e);if(n){t.bundler.outDir=ue(process.cwd(),n);const e=ce([n,...o],process.cwd());t.buildRoot=e===p.sep?process.cwd():e}else t.buildRoot=ce(o,process.cwd()),t.bundler.outDir=p.resolve(process.cwd(),"dist");t.hook("buildRoot",t.buildRoot)},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 o=Zt(e);ce(o,process.cwd()).startsWith(t.bundler.outDir)||n.warn("The output directory has been changed by a plugin and may introduce some inconsistencies in the build report.")}}}]},on="datadog-custom-hooks-plugin",sn=e=>{const{context:t}=e,n=t.getLogger(on),o=e=>(o,...s)=>{const r=n.time(`execution | ${o}`,{tags:["type:custom-hook",`hook:${o}`]}),i=[],a=[];for(const n of t.plugins){if(!(o in n))continue;const t=n[o];if("function"==typeof t)try{const r=t(...s);r instanceof Promise&&(e||i.push(`Plugin "${n.name}" returned a promise on the non async hook "${o}".`),a.push(r))}catch(e){i.push(`Plugin "${n.name}" errored on hook "${o}". [${e}]`)}else i.push(`Plugin "${n.name}" has an invalid hook type for "${o}". [${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=o(!1),t.asyncHook=o(!0),[{name:on,enforce:"pre"}]};class rn{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=ee(e),o=JSON.parse(n);if(!o.sources)return void t("Missing 'sources' field in sourcemap.");const s=o.sources;if(0===s.length)return void t("Empty 'sources' field in sourcemap.");const r=this.matchSources(s);if(0!==r.length)return r;t(`${s.map(this.displaySource).join(", ")} not in the tracked files.`)}matchSources(e){let t=[];const n=new Set;for(const o of e){const e=this.getFilename(o);if(n.has(e))continue;n.add(e);const s=this.trackedFilenames.get(e);s&&(t=t.concat(s))}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 an=async e=>{const t=await e.getRemotes(!0);if(0===t.length)throw new Error("No git remotes available");const n=await un(e);for(const e of t)if(e.name===n)return q(e.refs.push);return q(t[0].refs.push)},un=async e=>{try{return(await e.getConfig("clone.defaultRemoteName"))?.value??"origin"}catch(e){return"origin"}},pn=async e=>e.revparse("HEAD"),cn=async e=>(await e.raw("ls-files")).split(/\r\n|\r|\n/),ln=async e=>e.branch(),dn=async e=>e.show(["-s","--format=%s"]),mn=async e=>e.show(["-s","--format=%an,%ae,%aI,%cn,%ce,%cI"]),fn="datadog-git-plugin",hn=e=>{const{options:t,context:n}=e,o=n.getLogger(fn),s=o.time("get git information",{start:!1}),r=async e=>{try{const t=await(async e=>{const t=[pn(e),ln(e),dn(e),mn(e),cn(e),an(e)],[n,o,s,r,i,a]=await Promise.all(t),[u,p,c,l,d,m]=r.split(",").map((e=>e.trim()));return{commit:{author:{name:u,email:p,date:c},committer:{name:l,email:d,date:m},message:s.trim(),hash:n},hash:n,branch:o.current,remote:a.trim(),trackedFilesMatcher:new rn(i)}})(await(async e=>{const t={baseDir:e||process.cwd(),binary:"git",maxConcurrentProcesses:3};try{const e=b.simpleGit(t),n=await e.revparse("--show-toplevel");t.baseDir=n}catch{}return b.simpleGit(t)})(p.dirname(e)));n.git=t,s.end(),await n.asyncHook("git",n.git)}catch(e){o.error(`Could not get git information: ${e.message}`)}};return[{name:fn,enforce:"pre",buildRoot(e){if(_(t))try{s.resume();const t=pe(e,".git");if(!t)return o.warn("No .git directory found, skipping git plugin."),void s.end();n.queue(r(t))}catch(e){o.error(`Could not get git information: ${e.message}`)}}}]},gn="datadog-injection-plugin",yn=/^https?:\/\//,bn=[".mjs",".mjsx",".js",".ts",".tsx",".jsx"],wn=t.bold.yellow,vn=async(e,t=process.cwd())=>(e=>i.readFile(e,{encoding:"utf-8"}))(ue(t,e)),$n=async(e,t,n=process.cwd())=>{let o;const s=await(async e=>"function"==typeof e.value?e.value():e.value)(e);try{if("file"===e.type)o=s.match(yn)?await(async(e,t=5e3)=>{let n;return Promise.race([A({retries:2,minTimeout:100,url:e}).finally((()=>{t&&clearTimeout(n)})),new Promise(((e,o)=>{n=setTimeout((()=>{o(new Error("Timeout"))}),t)}))])})(s):await vn(s,n);else{if("code"!==e.type)throw new Error(`Invalid item type "${e.type}", only accepts "code" or "file".`);o=s}}catch(r){const i=`${e.type} - ${L(s)}`;e.fallback?(t.debug(`Fallback for "${i}": ${r.toString()}`),o=await $n(e.fallback,t,n)):t.warn(`Failed "${i}": ${r.toString()}`)}return o},kn=(e,t)=>{const n=e.filter((e=>e.position===t.position&&(!t.onAllChunks||e.injectIntoAllChunks)));if(0===n.length)return"";return`// begin injection by Datadog build plugins\n${n.map((e=>`(() => {${e.value}})();`)).join("\n\n")}\n// end injection by Datadog build plugins`},Sn=async(e,t,n,o=process.cwd())=>{const s=await(async(e,t,n=process.cwd())=>{const o=new Map;for(const[s,r]of e.entries()){const e=await $n(r,t,n);if(e){const t=r.position||$t.BEFORE;o.set(s,{value:e,injectIntoAllChunks:"injectIntoAllChunks"in r&&r.injectIntoAllChunks,position:t})}}return o})(t,e,o);for(const e of s.values())n.push(e)},En=e=>e instanceof Error&&"code"in e,Dn=e=>bn.includes(e),xn=(e,t,n)=>{e.warn(`"${wn(t)}" files are not supported (${wn(n)}).`)},Rn=a.promises,Pn=(e,t,n)=>({setup(o){const{onStart:s,onResolve:r,onLoad:u,onEnd:c,esbuild:d,initialOptions:m}=o,f=[],h=`${t.bundler.name}.${$t.MIDDLE}.${x}.js`,g=a.realpathSync(l.tmpdir()),y=p.resolve(g,h),b=new RegExp(`${h}$`),w=m.inject;m.inject=w?[...w]:[],m.inject.push(y),s((async()=>{f.push(...await It(o,t,e)),o.initialOptions.inject=w;try{await(async(e,t)=>{await X(p.dirname(e)),await i.writeFile(e,t,{encoding:"utf-8"})})(y,"")}catch(t){e.error(`Could not create the files: ${t.message}`)}})),r({filter:b},(async e=>({path:e.path,namespace:gn}))),u({filter:b,namespace:gn},(async()=>({contents:kn(n,{position:$t.MIDDLE})||" ",resolveDir:t.buildRoot,loader:"js"}))),c((async o=>{if(!o.metafile)return void e.warn("Missing metafile from build result.");const s=kn(n,{position:$t.BEFORE}),r=kn(n,{position:$t.AFTER}),i=kn(n,{position:$t.BEFORE,onAllChunks:!0}),a=kn(n,{position:$t.AFTER,onAllChunks:!0});if(!(s||r||i||a))return;const u=[];for(const[n,c]of Object.entries(o.metafile.outputs)){const o=c.entryPoint&&f.some((e=>e.resolved.endsWith(c.entryPoint))),l=o?s:i,m=o?r:a;if(!l&&!m)continue;const h=ue(t.buildRoot,n),{base:g,ext:y}=p.parse(h);Dn(y)?u.push((async()=>{try{const e=await Rn.readFile(h,"utf-8"),t=await d.transform(e,{loader:"default",banner:l,footer:m});await Rn.writeFile(h,t.code)}catch(t){if(!En(t)||"ENOENT"!==t.code)throw t;e.warn(`Could not inject content in ${h}: ${t}`)}})()):xn(e,y,g)}await Promise.all(u)}))}}),jn=x,Tn="?inject-proxy",Mn=(e,t)=>({banner(n){const o=kn(t,{position:$t.BEFORE,onAllChunks:!n.isEntry});if(""===o||!n.fileName)return"";const{base:s,ext:r}=p.parse(n.fileName);return Dn(r)?o:(xn(e,r,s),"")},async resolveId(e,n,o){if(C(e))return{id:e,moduleSideEffects:!0};if(o.isEntry&&kn(t,{position:$t.MIDDLE})){if(e.endsWith(".html"))return null;const t=await this.resolve(e,n,o);if(!t||t.external)return t;return(await this.load(t)).moduleSideEffects=!0,`${t.id}${Tn}`}return null},load(e){if(C(e))return kn(t,{position:$t.MIDDLE});if(e.endsWith(Tn)){const t=e.slice(0,-13),n=this.getModuleInfo(t);let o=`import ${JSON.stringify(jn)};\nexport * from ${JSON.stringify(t)};`;return n?.hasDefaultExport&&(o+=`export { default } from ${JSON.stringify(t)};`),o}return null},footer(n){const o=kn(t,{position:$t.AFTER,onAllChunks:!n.isEntry});if(""===o||!n.fileName)return"";const{base:s,ext:r}=p.parse(n.fileName);return Dn(r)?o:(xn(e,r,s),"")}}),On=(e,t,n,o,s)=>r=>{const i=new WeakMap,u=e.sources.ConcatSource,c=n.bundler.name,l=p.resolve(n.bundler.outDir,`${c}.${$t.MIDDLE}.${x}.js`);Z(l,"");r.hooks.shutdown.tap(gn,(()=>{var e;e=l,a.rmSync(e,{force:!0,maxRetries:3,recursive:!0})}));const d=async()=>{await Sn(t,o,s,n.buildRoot)};r.hooks.beforeRun.tapPromise(gn,d),r.hooks.watchRun.tapPromise(gn,d),r.hooks.compilation.tap(gn,(n=>{const o=e.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS;n.hooks.processAssets.tap({name:gn,stage:o},(()=>{const e=kn(s,{position:$t.BEFORE}),o=kn(s,{position:$t.AFTER}),r=kn(s,{position:$t.BEFORE,onAllChunks:!0}),a=kn(s,{position:$t.AFTER,onAllChunks:!0});for(const s of n.chunks){let c=e,l=o;if(s.canBeInitial()||(c=r,l=a),""!==c||""!==l)for(const e of s.files){const{base:o,ext:s}=p.parse(e);Dn(s)?n.updateAsset(e,(e=>{const t=i.get(e);if(!t||t.banner!==c||t.footer!==l){const t=new u(c,"\n",e,"\n",l);return i.set(e,{source:t,banner:c,footer:l}),t}return t.source})):xn(t,s,o)}}}))}));const m=(e=>{const n={import:[l]},o=e=>{for(const[n,o]of Object.entries(e))"object"==typeof o?(o.import=o.import||[],o.import.unshift(l)):"string"==typeof o?e[n]=[l,o]:Array.isArray(o)?o.unshift(l):t.error("Invalid entry type: "+typeof o)};return e?"function"==typeof e?async()=>{const t=await e();return o(t),t}:"object"!=typeof e?"string"==typeof e?[n,e]:(t.error("Invalid entry type: "+typeof e),e):(o(e),e):{ddHelper:n}})(r.options.entry);r.options.entry=m},An=e=>{const{bundler:t,context:n}=e,o=n.getLogger(gn),s=new Map,r=[];n.inject=e=>{s.set(`${Date.now()}.${performance.now()}.${++H}`,e)};const i={name:gn,enforce:"post",esbuild:Pn(o,n,r),webpack:On(t,o,n,s,r),rspack:On(t,o,n,s,r),rollup:Mn(o,r),vite:{...Mn(o,r),enforce:"pre",transformIndexHtml:{order:"pre",handler:()=>kn(r,{position:$t.MIDDLE})?[{tag:"script",attrs:{type:"module",src:"/@id/__datadog-helper-file"},injectTo:"head-prepend"}]:[]}}};var a;return a=n.bundler.name,["rspack","webpack"].includes(a)?i.load={filter:{id:R},handler:()=>({code:kn(r,{position:$t.MIDDLE})})}:i.buildStart=async()=>{await Sn(o,s,r,n.buildRoot)},[i]},Nn="datadog-true-end-plugin",zn=e=>{const{context:t}=e,n=async()=>{await t.asyncHook("asyncTrueEnd")},o=()=>{t.hook("syncTrueEnd")},s=async()=>{o(),await n()},r=e=>{e.hooks.shutdown.tapPromise(Nn,s)},i={async writeBundle(){},async closeBundle(){await s()}};return[{name:Nn,enforce:"post",webpack:r,esbuild:{setup(e){e.onEnd((async()=>{await n()})),e.onDispose((()=>{o()}))}},vite:i,rollup:i,rspack:r}]},Cn={[Le]:dt},In=t.bold.red;var _n="3.1.0";const Fn=(({bundler:t,version:n})=>{const o=Date.now();return e.createUnplugin(((e,s)=>{const r=Date.now(),i=((e={})=>{const t={site:E("SITE")||e.auth?.site||"datadoghq.com"};return Object.defineProperty(t,"apiKey",{value:E("API_KEY")||e.auth?.apiKey,enumerable:!1}),Object.defineProperty(t,"appKey",{value:E("APP_KEY")||e.auth?.appKey,enumerable:!1}),{enableGit:!0,logLevel:"warn",metadata:{},...e,auth:t}})(e);"esbuild"===s.framework&&(s.esbuildHostName=j);const a=process.env.BUILD_PLUGINS_ENV||"production",u=P.includes(a)?a:"development",p=t.rspackVersion||t.version||t.VERSION,c=s.framework,l={bundler:{name:c,version:p},env:u,metadata:i.metadata||{},packageName:`@datadog/${c}-plugin`,version:n},d={errors:[],logs:[],queue:[],timings:[],warnings:[]},m=(({start:e,options:t,data:n,stores:o})=>{const s=process.cwd(),r={errors:o.errors,warnings:o.warnings,logs:o.logs,metadata:n.metadata,timings:o.timings,bundler:n.bundler};return{auth:t.auth,pluginNames:[],bundler:{...r.bundler,outDir:s},build:r,buildRoot:s,env:n.env,getLogger:J(n,o,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:N(n),start:e,version:n.version}})({start:o,options:i,data:l,stores:d}),f=m.getLogger("factory"),h=f.time("Plugins initialization",{start:r});m.pluginNames.push(j);const g=[];g.push(["analytics",Nt],["async-queue",Ct],["build-report",Yt],["bundler-report",nn],["custom-hooks",sn],["git",hn],["injection",An],["true-end",zn]),i.customPlugins&&g.push(["custom",i.customPlugins]),g.push(["apps",Se],["error-tracking",_e],["metrics",mt],["output",vt],["rum",Ot]);for(const[e,n]of g)m.plugins.push(...Q(m,n,e)({bundler:t,context:m,options:i,data:l,stores:d}));return(e=>{const t=[];for(const n of S){const o=D(n);if(o.length>1&&!o.every((e=>process.env[e]===process.env[o[0]]))){const s=o.map((e=>k(e))).join(" and "),r=k(`DATADOG_${n}`);e.warn(`Conflicting keys ${s}, will use ${r}`),t.push(`${s} (using ${r})`)}else if(o.length){const e=o.map((e=>$(e))).join(" and ");t.push(`${e} (same value)`)}}t.length&&e.info(`Overrides from environment:\n - ${t.join("\n - ")}`)})(f),m.pluginNames.push(...m.plugins.map((e=>e.name))),(e=>{const t=new Set(e.filter((t=>e.filter((e=>e===t)).length>1)));if(t.size>0)throw new Error(`Duplicate plugin names: ${In(Array.from(t).join(", "))}`)})(m.pluginNames),m.hook("init",m),h.end(),m.plugins}))})({bundler:v,version:_n}).rollup,Ln=_n,qn=Cn;exports.datadogRollupPlugin=Fn,exports.helpers=qn,exports.version=Ln;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|