diff --git a/.eslintrc.js b/.eslintrc.js
index 5c135c9f..08f7d600 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -373,23 +373,13 @@ module.exports = {
},
},
{
- files: [
- 'rollup.config.mjs',
- 'packages/core/**/*',
- 'packages/webpack-plugin/**/*',
- 'packages/esbuild-plugin/**/*',
- ],
+ files: ['rollup.config.mjs', 'packages/core/**/*', 'packages/*-plugin/**/*'],
rules: {
'import/no-extraneous-dependencies': 'off',
},
},
{
- files: [
- 'packages/core/**/*',
- 'packages/esbuild-plugin/**/*',
- 'packages/plugins/**/*',
- 'packages/webpack-plugin/**/*',
- ],
+ files: ['packages/core/**/*', 'packages/plugins/**/*', 'packages/*-plugin/**/*'],
rules: {
'no-console': 'error',
},
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 3a7f4cde..5eebde04 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -6,3 +6,7 @@
# Telemetry
packages/plugins/telemetry @DataDog/frontend-devx @yoannmoinet
packages/tests/src/plugins/telemetry @DataDog/frontend-devx @yoannmoinet
+
+# Rum
+packages/plugins/rum @DataDog/rum @yoannmoinet
+packages/tests/src/plugins/rum @DataDog/rum @yoannmoinet
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 439673b2..2053a1cc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,11 +1,10 @@
yarn-error.log
.yarn/*
!.yarn/cache
+!.yarn/patches
!.yarn/releases
!.yarn/plugins
!.vscode
-webpack-profile-debug
-esbuild-profile-debug
node_modules/
dist/
diff --git a/.yarn/cache/@esbuild-darwin-arm64-npm-0.20.2-e287d70c91-10.zip b/.yarn/cache/@esbuild-darwin-arm64-npm-0.20.2-e287d70c91-10.zip
deleted file mode 100644
index 05240c0a..00000000
Binary files a/.yarn/cache/@esbuild-darwin-arm64-npm-0.20.2-e287d70c91-10.zip and /dev/null differ
diff --git a/.yarn/cache/@esbuild-darwin-arm64-npm-0.21.5-62349c1520-10.zip b/.yarn/cache/@esbuild-darwin-arm64-npm-0.21.5-62349c1520-10.zip
new file mode 100644
index 00000000..cf67cd85
Binary files /dev/null and b/.yarn/cache/@esbuild-darwin-arm64-npm-0.21.5-62349c1520-10.zip differ
diff --git a/.yarn/cache/@esbuild-darwin-x64-npm-0.20.2-f4f3a851d1-10.zip b/.yarn/cache/@esbuild-darwin-x64-npm-0.20.2-f4f3a851d1-10.zip
deleted file mode 100644
index 69a15a39..00000000
Binary files a/.yarn/cache/@esbuild-darwin-x64-npm-0.20.2-f4f3a851d1-10.zip and /dev/null differ
diff --git a/.yarn/cache/@esbuild-darwin-x64-npm-0.21.5-491c2ae06c-10.zip b/.yarn/cache/@esbuild-darwin-x64-npm-0.21.5-491c2ae06c-10.zip
new file mode 100644
index 00000000..c29febdf
Binary files /dev/null and b/.yarn/cache/@esbuild-darwin-x64-npm-0.21.5-491c2ae06c-10.zip differ
diff --git a/.yarn/cache/@esbuild-linux-arm64-npm-0.20.2-3a02a82580-10.zip b/.yarn/cache/@esbuild-linux-arm64-npm-0.20.2-3a02a82580-10.zip
deleted file mode 100644
index 991a7f5b..00000000
Binary files a/.yarn/cache/@esbuild-linux-arm64-npm-0.20.2-3a02a82580-10.zip and /dev/null differ
diff --git a/.yarn/cache/@esbuild-linux-arm64-npm-0.21.5-c6a54cd648-10.zip b/.yarn/cache/@esbuild-linux-arm64-npm-0.21.5-c6a54cd648-10.zip
new file mode 100644
index 00000000..4754b51a
Binary files /dev/null and b/.yarn/cache/@esbuild-linux-arm64-npm-0.21.5-c6a54cd648-10.zip differ
diff --git a/.yarn/cache/@esbuild-linux-x64-npm-0.20.2-54b0127370-10.zip b/.yarn/cache/@esbuild-linux-x64-npm-0.20.2-54b0127370-10.zip
deleted file mode 100644
index 5f4cc3e0..00000000
Binary files a/.yarn/cache/@esbuild-linux-x64-npm-0.20.2-54b0127370-10.zip and /dev/null differ
diff --git a/.yarn/cache/@esbuild-linux-x64-npm-0.21.5-88079726c4-10.zip b/.yarn/cache/@esbuild-linux-x64-npm-0.21.5-88079726c4-10.zip
new file mode 100644
index 00000000..2a3a835a
Binary files /dev/null and b/.yarn/cache/@esbuild-linux-x64-npm-0.21.5-88079726c4-10.zip differ
diff --git a/.yarn/cache/@rollup-rollup-darwin-arm64-npm-4.17.1-add109e212-10.zip b/.yarn/cache/@rollup-rollup-darwin-arm64-npm-4.17.1-add109e212-10.zip
deleted file mode 100644
index 2a817e22..00000000
Binary files a/.yarn/cache/@rollup-rollup-darwin-arm64-npm-4.17.1-add109e212-10.zip and /dev/null differ
diff --git a/.yarn/cache/@rollup-rollup-darwin-arm64-npm-4.18.0-683829554f-10.zip b/.yarn/cache/@rollup-rollup-darwin-arm64-npm-4.18.0-683829554f-10.zip
new file mode 100644
index 00000000..5e002537
Binary files /dev/null and b/.yarn/cache/@rollup-rollup-darwin-arm64-npm-4.18.0-683829554f-10.zip differ
diff --git a/.yarn/cache/@rollup-rollup-darwin-x64-npm-4.17.1-330855746a-10.zip b/.yarn/cache/@rollup-rollup-darwin-x64-npm-4.17.1-330855746a-10.zip
deleted file mode 100644
index c8148e58..00000000
Binary files a/.yarn/cache/@rollup-rollup-darwin-x64-npm-4.17.1-330855746a-10.zip and /dev/null differ
diff --git a/.yarn/cache/@rollup-rollup-darwin-x64-npm-4.18.0-4f171ac978-10.zip b/.yarn/cache/@rollup-rollup-darwin-x64-npm-4.18.0-4f171ac978-10.zip
new file mode 100644
index 00000000..f4acb786
Binary files /dev/null and b/.yarn/cache/@rollup-rollup-darwin-x64-npm-4.18.0-4f171ac978-10.zip differ
diff --git a/.yarn/cache/@rollup-rollup-linux-arm64-gnu-npm-4.17.1-5704467160-10.zip b/.yarn/cache/@rollup-rollup-linux-arm64-gnu-npm-4.17.1-5704467160-10.zip
deleted file mode 100644
index 4d0e3771..00000000
Binary files a/.yarn/cache/@rollup-rollup-linux-arm64-gnu-npm-4.17.1-5704467160-10.zip and /dev/null differ
diff --git a/.yarn/cache/@rollup-rollup-linux-arm64-gnu-npm-4.18.0-f633823e2b-10.zip b/.yarn/cache/@rollup-rollup-linux-arm64-gnu-npm-4.18.0-f633823e2b-10.zip
new file mode 100644
index 00000000..28d54104
Binary files /dev/null and b/.yarn/cache/@rollup-rollup-linux-arm64-gnu-npm-4.18.0-f633823e2b-10.zip differ
diff --git a/.yarn/cache/@rollup-rollup-linux-x64-gnu-npm-4.17.1-a2ec383d51-10.zip b/.yarn/cache/@rollup-rollup-linux-x64-gnu-npm-4.17.1-a2ec383d51-10.zip
deleted file mode 100644
index 977bd833..00000000
Binary files a/.yarn/cache/@rollup-rollup-linux-x64-gnu-npm-4.17.1-a2ec383d51-10.zip and /dev/null differ
diff --git a/.yarn/cache/@rollup-rollup-linux-x64-gnu-npm-4.18.0-0aa51442a0-10.zip b/.yarn/cache/@rollup-rollup-linux-x64-gnu-npm-4.18.0-0aa51442a0-10.zip
new file mode 100644
index 00000000..3f1bc91a
Binary files /dev/null and b/.yarn/cache/@rollup-rollup-linux-x64-gnu-npm-4.18.0-0aa51442a0-10.zip differ
diff --git a/.yarn/cache/@types-async-retry-npm-1.4.8-50ec947b8f-5d4b0b786e.zip b/.yarn/cache/@types-async-retry-npm-1.4.8-50ec947b8f-5d4b0b786e.zip
new file mode 100644
index 00000000..8f4a8c18
Binary files /dev/null and b/.yarn/cache/@types-async-retry-npm-1.4.8-50ec947b8f-5d4b0b786e.zip differ
diff --git a/.yarn/cache/@types-eslint-scope-npm-3.7.0-7c68026d97-27f302625b.zip b/.yarn/cache/@types-eslint-scope-npm-3.7.0-7c68026d97-27f302625b.zip
deleted file mode 100644
index 5a64e57f..00000000
Binary files a/.yarn/cache/@types-eslint-scope-npm-3.7.0-7c68026d97-27f302625b.zip and /dev/null differ
diff --git a/.yarn/cache/@types-eslint-scope-npm-3.7.7-efa26592f6-e2889a124a.zip b/.yarn/cache/@types-eslint-scope-npm-3.7.7-efa26592f6-e2889a124a.zip
new file mode 100644
index 00000000..6e1bed86
Binary files /dev/null and b/.yarn/cache/@types-eslint-scope-npm-3.7.7-efa26592f6-e2889a124a.zip differ
diff --git a/.yarn/cache/@types-estree-npm-0.0.45-71d6bd2510-5a45a5fd92.zip b/.yarn/cache/@types-estree-npm-0.0.45-71d6bd2510-5a45a5fd92.zip
deleted file mode 100644
index f7ea1b7a..00000000
Binary files a/.yarn/cache/@types-estree-npm-0.0.45-71d6bd2510-5a45a5fd92.zip and /dev/null differ
diff --git a/.yarn/cache/@types-retry-npm-0.12.5-f1986a76a6-3fb6bf9183.zip b/.yarn/cache/@types-retry-npm-0.12.5-f1986a76a6-3fb6bf9183.zip
new file mode 100644
index 00000000..abb504e2
Binary files /dev/null and b/.yarn/cache/@types-retry-npm-0.12.5-f1986a76a6-3fb6bf9183.zip differ
diff --git a/.yarn/cache/@types-source-list-map-npm-0.1.6-2e7e79b68d-9cd294c121.zip b/.yarn/cache/@types-source-list-map-npm-0.1.6-2e7e79b68d-9cd294c121.zip
new file mode 100644
index 00000000..6e98f86f
Binary files /dev/null and b/.yarn/cache/@types-source-list-map-npm-0.1.6-2e7e79b68d-9cd294c121.zip differ
diff --git a/.yarn/cache/@types-tapable-npm-1.0.12-fb0f138e72-adfb978a30.zip b/.yarn/cache/@types-tapable-npm-1.0.12-fb0f138e72-adfb978a30.zip
new file mode 100644
index 00000000..fd94a024
Binary files /dev/null and b/.yarn/cache/@types-tapable-npm-1.0.12-fb0f138e72-adfb978a30.zip differ
diff --git a/.yarn/cache/@types-uglify-js-npm-3.17.5-02532e521f-87368861a3.zip b/.yarn/cache/@types-uglify-js-npm-3.17.5-02532e521f-87368861a3.zip
new file mode 100644
index 00000000..70304b6d
Binary files /dev/null and b/.yarn/cache/@types-uglify-js-npm-3.17.5-02532e521f-87368861a3.zip differ
diff --git a/.yarn/cache/@types-webpack-npm-4.41.38-3fdf86c5ec-63f2137371.zip b/.yarn/cache/@types-webpack-npm-4.41.38-3fdf86c5ec-63f2137371.zip
new file mode 100644
index 00000000..50acff11
Binary files /dev/null and b/.yarn/cache/@types-webpack-npm-4.41.38-3fdf86c5ec-63f2137371.zip differ
diff --git a/.yarn/cache/@types-webpack-sources-npm-3.2.3-dce1c60a50-7b557f242e.zip b/.yarn/cache/@types-webpack-sources-npm-3.2.3-dce1c60a50-7b557f242e.zip
new file mode 100644
index 00000000..d060910d
Binary files /dev/null and b/.yarn/cache/@types-webpack-sources-npm-3.2.3-dce1c60a50-7b557f242e.zip differ
diff --git a/.yarn/cache/@webassemblyjs-ast-npm-1.11.1-623d3d973e-28cc949e2e.zip b/.yarn/cache/@webassemblyjs-ast-npm-1.11.1-623d3d973e-28cc949e2e.zip
deleted file mode 100644
index 4099aaf6..00000000
Binary files a/.yarn/cache/@webassemblyjs-ast-npm-1.11.1-623d3d973e-28cc949e2e.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-ast-npm-1.12.1-3ff9ea1c0e-a775b05594.zip b/.yarn/cache/@webassemblyjs-ast-npm-1.12.1-3ff9ea1c0e-a775b05594.zip
new file mode 100644
index 00000000..b83e0cc8
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-ast-npm-1.12.1-3ff9ea1c0e-a775b05594.zip differ
diff --git a/.yarn/cache/@webassemblyjs-floating-point-hex-parser-npm-1.11.1-f8af5c0037-b8efc6fa08.zip b/.yarn/cache/@webassemblyjs-floating-point-hex-parser-npm-1.11.1-f8af5c0037-b8efc6fa08.zip
deleted file mode 100644
index 9b03be94..00000000
Binary files a/.yarn/cache/@webassemblyjs-floating-point-hex-parser-npm-1.11.1-f8af5c0037-b8efc6fa08.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-floating-point-hex-parser-npm-1.11.6-3a9928fc76-29b0875884.zip b/.yarn/cache/@webassemblyjs-floating-point-hex-parser-npm-1.11.6-3a9928fc76-29b0875884.zip
new file mode 100644
index 00000000..fd95d649
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-floating-point-hex-parser-npm-1.11.6-3a9928fc76-29b0875884.zip differ
diff --git a/.yarn/cache/@webassemblyjs-helper-api-error-npm-1.11.1-b839d59053-0792813f0e.zip b/.yarn/cache/@webassemblyjs-helper-api-error-npm-1.11.1-b839d59053-0792813f0e.zip
deleted file mode 100644
index 28665e75..00000000
Binary files a/.yarn/cache/@webassemblyjs-helper-api-error-npm-1.11.1-b839d59053-0792813f0e.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-helper-api-error-npm-1.11.6-75f6275ff4-e8563df851.zip b/.yarn/cache/@webassemblyjs-helper-api-error-npm-1.11.6-75f6275ff4-e8563df851.zip
new file mode 100644
index 00000000..d0697f28
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-helper-api-error-npm-1.11.6-75f6275ff4-e8563df851.zip differ
diff --git a/.yarn/cache/@webassemblyjs-helper-buffer-npm-1.11.1-6afb1ef4aa-a337ee44b4.zip b/.yarn/cache/@webassemblyjs-helper-buffer-npm-1.11.1-6afb1ef4aa-a337ee44b4.zip
deleted file mode 100644
index c4c06dd6..00000000
Binary files a/.yarn/cache/@webassemblyjs-helper-buffer-npm-1.11.1-6afb1ef4aa-a337ee44b4.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-helper-buffer-npm-1.12.1-d025434a45-1d8705daa4.zip b/.yarn/cache/@webassemblyjs-helper-buffer-npm-1.12.1-d025434a45-1d8705daa4.zip
new file mode 100644
index 00000000..d7eccb73
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-helper-buffer-npm-1.12.1-d025434a45-1d8705daa4.zip differ
diff --git a/.yarn/cache/@webassemblyjs-helper-numbers-npm-1.11.1-a41f7439eb-cbe5b456fa.zip b/.yarn/cache/@webassemblyjs-helper-numbers-npm-1.11.1-a41f7439eb-cbe5b456fa.zip
deleted file mode 100644
index 704a9f3a..00000000
Binary files a/.yarn/cache/@webassemblyjs-helper-numbers-npm-1.11.1-a41f7439eb-cbe5b456fa.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-helper-numbers-npm-1.11.6-819ddab1da-9ffd258ad8.zip b/.yarn/cache/@webassemblyjs-helper-numbers-npm-1.11.6-819ddab1da-9ffd258ad8.zip
new file mode 100644
index 00000000..bf882f93
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-helper-numbers-npm-1.11.6-819ddab1da-9ffd258ad8.zip differ
diff --git a/.yarn/cache/@webassemblyjs-helper-wasm-bytecode-npm-1.11.1-84f0ee4c30-009b494010.zip b/.yarn/cache/@webassemblyjs-helper-wasm-bytecode-npm-1.11.1-84f0ee4c30-009b494010.zip
deleted file mode 100644
index 5769ab32..00000000
Binary files a/.yarn/cache/@webassemblyjs-helper-wasm-bytecode-npm-1.11.1-84f0ee4c30-009b494010.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-helper-wasm-bytecode-npm-1.11.6-3bc23747de-4ebf03e9c1.zip b/.yarn/cache/@webassemblyjs-helper-wasm-bytecode-npm-1.11.6-3bc23747de-4ebf03e9c1.zip
new file mode 100644
index 00000000..8f3fedc5
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-helper-wasm-bytecode-npm-1.11.6-3bc23747de-4ebf03e9c1.zip differ
diff --git a/.yarn/cache/@webassemblyjs-helper-wasm-section-npm-1.11.1-e4e8450b9d-dd6eee9f73.zip b/.yarn/cache/@webassemblyjs-helper-wasm-section-npm-1.11.1-e4e8450b9d-dd6eee9f73.zip
deleted file mode 100644
index 744065f3..00000000
Binary files a/.yarn/cache/@webassemblyjs-helper-wasm-section-npm-1.11.1-e4e8450b9d-dd6eee9f73.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-helper-wasm-section-npm-1.12.1-cd0e2f1eab-e91e6b2811.zip b/.yarn/cache/@webassemblyjs-helper-wasm-section-npm-1.12.1-cd0e2f1eab-e91e6b2811.zip
new file mode 100644
index 00000000..a17936e5
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-helper-wasm-section-npm-1.12.1-cd0e2f1eab-e91e6b2811.zip differ
diff --git a/.yarn/cache/@webassemblyjs-ieee754-npm-1.11.1-897eb85879-23a0ac02a5.zip b/.yarn/cache/@webassemblyjs-ieee754-npm-1.11.1-897eb85879-23a0ac02a5.zip
deleted file mode 100644
index fd9e4c5e..00000000
Binary files a/.yarn/cache/@webassemblyjs-ieee754-npm-1.11.1-897eb85879-23a0ac02a5.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-ieee754-npm-1.11.6-95c92f446a-13574b8e41.zip b/.yarn/cache/@webassemblyjs-ieee754-npm-1.11.6-95c92f446a-13574b8e41.zip
new file mode 100644
index 00000000..bd1b9c09
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-ieee754-npm-1.11.6-95c92f446a-13574b8e41.zip differ
diff --git a/.yarn/cache/@webassemblyjs-leb128-npm-1.11.1-fd9f27673d-85beb7156f.zip b/.yarn/cache/@webassemblyjs-leb128-npm-1.11.1-fd9f27673d-85beb7156f.zip
deleted file mode 100644
index 2de90a27..00000000
Binary files a/.yarn/cache/@webassemblyjs-leb128-npm-1.11.1-fd9f27673d-85beb7156f.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-leb128-npm-1.11.6-697d62da2e-ec3b72db0e.zip b/.yarn/cache/@webassemblyjs-leb128-npm-1.11.6-697d62da2e-ec3b72db0e.zip
new file mode 100644
index 00000000..34a35601
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-leb128-npm-1.11.6-697d62da2e-ec3b72db0e.zip differ
diff --git a/.yarn/cache/@webassemblyjs-utf8-npm-1.11.1-583036e767-b93e57912d.zip b/.yarn/cache/@webassemblyjs-utf8-npm-1.11.1-583036e767-b93e57912d.zip
deleted file mode 100644
index f1744da5..00000000
Binary files a/.yarn/cache/@webassemblyjs-utf8-npm-1.11.1-583036e767-b93e57912d.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-utf8-npm-1.11.6-102c4e5d68-361a537bd6.zip b/.yarn/cache/@webassemblyjs-utf8-npm-1.11.6-102c4e5d68-361a537bd6.zip
new file mode 100644
index 00000000..0ef6c31a
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-utf8-npm-1.11.6-102c4e5d68-361a537bd6.zip differ
diff --git a/.yarn/cache/@webassemblyjs-wasm-edit-npm-1.11.1-34565c1e92-6a029ae21c.zip b/.yarn/cache/@webassemblyjs-wasm-edit-npm-1.11.1-34565c1e92-6a029ae21c.zip
deleted file mode 100644
index bf0c7b67..00000000
Binary files a/.yarn/cache/@webassemblyjs-wasm-edit-npm-1.11.1-34565c1e92-6a029ae21c.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-wasm-edit-npm-1.12.1-727bec592a-5678ae02db.zip b/.yarn/cache/@webassemblyjs-wasm-edit-npm-1.12.1-727bec592a-5678ae02db.zip
new file mode 100644
index 00000000..3ed22347
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-wasm-edit-npm-1.12.1-727bec592a-5678ae02db.zip differ
diff --git a/.yarn/cache/@webassemblyjs-wasm-gen-npm-1.11.1-a6d0b4d37d-5da040e780.zip b/.yarn/cache/@webassemblyjs-wasm-gen-npm-1.11.1-a6d0b4d37d-5da040e780.zip
deleted file mode 100644
index 7ddbb1ee..00000000
Binary files a/.yarn/cache/@webassemblyjs-wasm-gen-npm-1.11.1-a6d0b4d37d-5da040e780.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-wasm-gen-npm-1.12.1-bbe22ad265-ec45bd50e8.zip b/.yarn/cache/@webassemblyjs-wasm-gen-npm-1.12.1-bbe22ad265-ec45bd50e8.zip
new file mode 100644
index 00000000..f7fe6004
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-wasm-gen-npm-1.12.1-bbe22ad265-ec45bd50e8.zip differ
diff --git a/.yarn/cache/@webassemblyjs-wasm-opt-npm-1.11.1-0bb73c20b9-00f85d1f76.zip b/.yarn/cache/@webassemblyjs-wasm-opt-npm-1.11.1-0bb73c20b9-00f85d1f76.zip
deleted file mode 100644
index 63c068a0..00000000
Binary files a/.yarn/cache/@webassemblyjs-wasm-opt-npm-1.11.1-0bb73c20b9-00f85d1f76.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-wasm-opt-npm-1.12.1-450c932de6-21f25ae109.zip b/.yarn/cache/@webassemblyjs-wasm-opt-npm-1.12.1-450c932de6-21f25ae109.zip
new file mode 100644
index 00000000..2acb870f
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-wasm-opt-npm-1.12.1-450c932de6-21f25ae109.zip differ
diff --git a/.yarn/cache/@webassemblyjs-wasm-parser-npm-1.11.1-cd49c51fdc-cc6de8f4d9.zip b/.yarn/cache/@webassemblyjs-wasm-parser-npm-1.11.1-cd49c51fdc-cc6de8f4d9.zip
deleted file mode 100644
index 7ed1ed71..00000000
Binary files a/.yarn/cache/@webassemblyjs-wasm-parser-npm-1.11.1-cd49c51fdc-cc6de8f4d9.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-wasm-parser-npm-1.12.1-54a7a19806-f7311685b7.zip b/.yarn/cache/@webassemblyjs-wasm-parser-npm-1.12.1-54a7a19806-f7311685b7.zip
new file mode 100644
index 00000000..bef03f21
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-wasm-parser-npm-1.12.1-54a7a19806-f7311685b7.zip differ
diff --git a/.yarn/cache/@webassemblyjs-wast-printer-npm-1.11.1-f1213430d6-bd1cf7a063.zip b/.yarn/cache/@webassemblyjs-wast-printer-npm-1.11.1-f1213430d6-bd1cf7a063.zip
deleted file mode 100644
index faf786d8..00000000
Binary files a/.yarn/cache/@webassemblyjs-wast-printer-npm-1.11.1-f1213430d6-bd1cf7a063.zip and /dev/null differ
diff --git a/.yarn/cache/@webassemblyjs-wast-printer-npm-1.12.1-e75655c7ff-1a6a4b6bc4.zip b/.yarn/cache/@webassemblyjs-wast-printer-npm-1.12.1-e75655c7ff-1a6a4b6bc4.zip
new file mode 100644
index 00000000..a9fadd95
Binary files /dev/null and b/.yarn/cache/@webassemblyjs-wast-printer-npm-1.12.1-e75655c7ff-1a6a4b6bc4.zip differ
diff --git a/.yarn/cache/@webpack-cli-info-npm-1.5.0-9d9627ae19-7f56fe037c.zip b/.yarn/cache/@webpack-cli-info-npm-1.5.0-9d9627ae19-7f56fe037c.zip
deleted file mode 100644
index 64c90ae8..00000000
Binary files a/.yarn/cache/@webpack-cli-info-npm-1.5.0-9d9627ae19-7f56fe037c.zip and /dev/null differ
diff --git a/.yarn/cache/@webpack-cli-serve-npm-1.7.0-2869abfdb4-0b90c963a6.zip b/.yarn/cache/@webpack-cli-serve-npm-1.7.0-2869abfdb4-0b90c963a6.zip
deleted file mode 100644
index 60df2531..00000000
Binary files a/.yarn/cache/@webpack-cli-serve-npm-1.7.0-2869abfdb4-0b90c963a6.zip and /dev/null differ
diff --git a/.yarn/cache/acorn-import-assertions-npm-1.7.6-06125ebcd0-3df7728ff6.zip b/.yarn/cache/acorn-import-assertions-npm-1.7.6-06125ebcd0-3df7728ff6.zip
deleted file mode 100644
index dd275d83..00000000
Binary files a/.yarn/cache/acorn-import-assertions-npm-1.7.6-06125ebcd0-3df7728ff6.zip and /dev/null differ
diff --git a/.yarn/cache/acorn-import-attributes-npm-1.9.5-d1e666eb35-8bfbfbb6e2.zip b/.yarn/cache/acorn-import-attributes-npm-1.9.5-d1e666eb35-8bfbfbb6e2.zip
new file mode 100644
index 00000000..9a210b13
Binary files /dev/null and b/.yarn/cache/acorn-import-attributes-npm-1.9.5-d1e666eb35-8bfbfbb6e2.zip differ
diff --git a/.yarn/cache/acorn-npm-8.12.1-610871d57c-d08c2d122b.zip b/.yarn/cache/acorn-npm-8.12.1-610871d57c-d08c2d122b.zip
new file mode 100644
index 00000000..2dddbcfd
Binary files /dev/null and b/.yarn/cache/acorn-npm-8.12.1-610871d57c-d08c2d122b.zip differ
diff --git a/.yarn/cache/array-back-npm-4.0.2-f735073f8f-f306032707.zip b/.yarn/cache/array-back-npm-4.0.2-f735073f8f-f306032707.zip
deleted file mode 100644
index 6884e6ac..00000000
Binary files a/.yarn/cache/array-back-npm-4.0.2-f735073f8f-f306032707.zip and /dev/null differ
diff --git a/.yarn/cache/async-retry-npm-1.3.3-bc90c5cee0-38a7152ff7.zip b/.yarn/cache/async-retry-npm-1.3.3-bc90c5cee0-38a7152ff7.zip
new file mode 100644
index 00000000..e5252904
Binary files /dev/null and b/.yarn/cache/async-retry-npm-1.3.3-bc90c5cee0-38a7152ff7.zip differ
diff --git a/.yarn/cache/browserslist-npm-4.23.1-5d546adfd4-91da59f70a.zip b/.yarn/cache/browserslist-npm-4.23.1-5d546adfd4-91da59f70a.zip
new file mode 100644
index 00000000..80f8f90b
Binary files /dev/null and b/.yarn/cache/browserslist-npm-4.23.1-5d546adfd4-91da59f70a.zip differ
diff --git a/.yarn/cache/caniuse-lite-npm-1.0.30001640-a1af8cecc3-14f0437945.zip b/.yarn/cache/caniuse-lite-npm-1.0.30001640-a1af8cecc3-14f0437945.zip
new file mode 100644
index 00000000..ecacfab7
Binary files /dev/null and b/.yarn/cache/caniuse-lite-npm-1.0.30001640-a1af8cecc3-14f0437945.zip differ
diff --git a/.yarn/cache/colorette-npm-1.4.0-7e94b44dc3-c8d6c8c3ef.zip b/.yarn/cache/colorette-npm-1.4.0-7e94b44dc3-c8d6c8c3ef.zip
deleted file mode 100644
index af41cf20..00000000
Binary files a/.yarn/cache/colorette-npm-1.4.0-7e94b44dc3-c8d6c8c3ef.zip and /dev/null differ
diff --git a/.yarn/cache/command-line-usage-npm-6.1.3-145c2dabe1-902901582a.zip b/.yarn/cache/command-line-usage-npm-6.1.3-145c2dabe1-902901582a.zip
deleted file mode 100644
index 520e1426..00000000
Binary files a/.yarn/cache/command-line-usage-npm-6.1.3-145c2dabe1-902901582a.zip and /dev/null differ
diff --git a/.yarn/cache/commander-npm-6.2.1-d5b635f237-25b88c2efd.zip b/.yarn/cache/commander-npm-6.2.1-d5b635f237-25b88c2efd.zip
deleted file mode 100644
index 02647693..00000000
Binary files a/.yarn/cache/commander-npm-6.2.1-d5b635f237-25b88c2efd.zip and /dev/null differ
diff --git a/.yarn/cache/deep-extend-npm-0.6.0-e182924219-7be7e5a8d4.zip b/.yarn/cache/deep-extend-npm-0.6.0-e182924219-7be7e5a8d4.zip
deleted file mode 100644
index 87f0270e..00000000
Binary files a/.yarn/cache/deep-extend-npm-0.6.0-e182924219-7be7e5a8d4.zip and /dev/null differ
diff --git a/.yarn/cache/electron-to-chromium-npm-1.4.820-366c81a402-6f283fdb22.zip b/.yarn/cache/electron-to-chromium-npm-1.4.820-366c81a402-6f283fdb22.zip
new file mode 100644
index 00000000..8d669a09
Binary files /dev/null and b/.yarn/cache/electron-to-chromium-npm-1.4.820-366c81a402-6f283fdb22.zip differ
diff --git a/.yarn/cache/enhanced-resolve-npm-5.17.0-60a1d3bc46-8f7bf71537.zip b/.yarn/cache/enhanced-resolve-npm-5.17.0-60a1d3bc46-8f7bf71537.zip
new file mode 100644
index 00000000..7c44fbfd
Binary files /dev/null and b/.yarn/cache/enhanced-resolve-npm-5.17.0-60a1d3bc46-8f7bf71537.zip differ
diff --git a/.yarn/cache/envinfo-npm-7.11.1-4d6b740881-5a18ead059.zip b/.yarn/cache/envinfo-npm-7.11.1-4d6b740881-5a18ead059.zip
deleted file mode 100644
index 5e587759..00000000
Binary files a/.yarn/cache/envinfo-npm-7.11.1-4d6b740881-5a18ead059.zip and /dev/null differ
diff --git a/.yarn/cache/es-module-lexer-npm-0.7.1-ab2b333e55-f1edf7c242.zip b/.yarn/cache/es-module-lexer-npm-0.7.1-ab2b333e55-f1edf7c242.zip
deleted file mode 100644
index ec92d6b8..00000000
Binary files a/.yarn/cache/es-module-lexer-npm-0.7.1-ab2b333e55-f1edf7c242.zip and /dev/null differ
diff --git a/.yarn/cache/es-module-lexer-npm-1.5.4-b52b96b8fc-f29c7c97a5.zip b/.yarn/cache/es-module-lexer-npm-1.5.4-b52b96b8fc-f29c7c97a5.zip
new file mode 100644
index 00000000..893d7007
Binary files /dev/null and b/.yarn/cache/es-module-lexer-npm-1.5.4-b52b96b8fc-f29c7c97a5.zip differ
diff --git a/.yarn/cache/esbuild-npm-0.20.2-1923187a7f-663215ab7e.zip b/.yarn/cache/esbuild-npm-0.20.2-1923187a7f-663215ab7e.zip
deleted file mode 100644
index b12369ad..00000000
Binary files a/.yarn/cache/esbuild-npm-0.20.2-1923187a7f-663215ab7e.zip and /dev/null differ
diff --git a/.yarn/cache/esbuild-npm-0.21.5-d85dfbc965-d2ff2ca84d.zip b/.yarn/cache/esbuild-npm-0.21.5-d85dfbc965-d2ff2ca84d.zip
new file mode 100644
index 00000000..d7f4807d
Binary files /dev/null and b/.yarn/cache/esbuild-npm-0.21.5-d85dfbc965-d2ff2ca84d.zip differ
diff --git a/.yarn/cache/escalade-npm-3.1.2-5826d31cf8-a1e07fea2f.zip b/.yarn/cache/escalade-npm-3.1.2-5826d31cf8-a1e07fea2f.zip
new file mode 100644
index 00000000..c59ddcfc
Binary files /dev/null and b/.yarn/cache/escalade-npm-3.1.2-5826d31cf8-a1e07fea2f.zip differ
diff --git a/.yarn/cache/eventemitter3-npm-4.0.7-7afcdd74ae-8030029382.zip b/.yarn/cache/eventemitter3-npm-4.0.7-7afcdd74ae-8030029382.zip
new file mode 100644
index 00000000..4bddb0e5
Binary files /dev/null and b/.yarn/cache/eventemitter3-npm-4.0.7-7afcdd74ae-8030029382.zip differ
diff --git a/.yarn/cache/interpret-npm-2.2.0-3603a544e1-a62d4de5c1.zip b/.yarn/cache/interpret-npm-2.2.0-3603a544e1-a62d4de5c1.zip
deleted file mode 100644
index 83d484cc..00000000
Binary files a/.yarn/cache/interpret-npm-2.2.0-3603a544e1-a62d4de5c1.zip and /dev/null differ
diff --git a/.yarn/cache/lodash-npm-4.17.21-6382451519-c08619c038.zip b/.yarn/cache/lodash-npm-4.17.21-6382451519-c08619c038.zip
deleted file mode 100644
index 5c76f21a..00000000
Binary files a/.yarn/cache/lodash-npm-4.17.21-6382451519-c08619c038.zip and /dev/null differ
diff --git a/.yarn/cache/nock-npm-14.0.0-beta.7-32f70a9823-c60c6df0c7.zip b/.yarn/cache/nock-npm-14.0.0-beta.7-32f70a9823-c60c6df0c7.zip
new file mode 100644
index 00000000..956aec99
Binary files /dev/null and b/.yarn/cache/nock-npm-14.0.0-beta.7-32f70a9823-c60c6df0c7.zip differ
diff --git a/.yarn/cache/p-finally-npm-1.0.0-35fbaa57c6-93a654c53d.zip b/.yarn/cache/p-finally-npm-1.0.0-35fbaa57c6-93a654c53d.zip
new file mode 100644
index 00000000..091273a2
Binary files /dev/null and b/.yarn/cache/p-finally-npm-1.0.0-35fbaa57c6-93a654c53d.zip differ
diff --git a/.yarn/cache/p-queue-npm-6.6.2-b173c5bfa8-60fe227ffc.zip b/.yarn/cache/p-queue-npm-6.6.2-b173c5bfa8-60fe227ffc.zip
new file mode 100644
index 00000000..0dd8761b
Binary files /dev/null and b/.yarn/cache/p-queue-npm-6.6.2-b173c5bfa8-60fe227ffc.zip differ
diff --git a/.yarn/cache/p-timeout-npm-3.2.0-7fdb33f733-3dd0eaa048.zip b/.yarn/cache/p-timeout-npm-3.2.0-7fdb33f733-3dd0eaa048.zip
new file mode 100644
index 00000000..eaf8f71c
Binary files /dev/null and b/.yarn/cache/p-timeout-npm-3.2.0-7fdb33f733-3dd0eaa048.zip differ
diff --git a/.yarn/cache/picocolors-npm-1.0.1-39442f3da8-fa68166d1f.zip b/.yarn/cache/picocolors-npm-1.0.1-39442f3da8-fa68166d1f.zip
new file mode 100644
index 00000000..21041b39
Binary files /dev/null and b/.yarn/cache/picocolors-npm-1.0.1-39442f3da8-fa68166d1f.zip differ
diff --git a/.yarn/cache/propagate-npm-2.0.1-2074bf76d3-8c761c16e8.zip b/.yarn/cache/propagate-npm-2.0.1-2074bf76d3-8c761c16e8.zip
new file mode 100644
index 00000000..e3513a3b
Binary files /dev/null and b/.yarn/cache/propagate-npm-2.0.1-2074bf76d3-8c761c16e8.zip differ
diff --git a/.yarn/cache/rechoir-npm-0.7.1-0c7e5c1201-2a04aab4e2.zip b/.yarn/cache/rechoir-npm-0.7.1-0c7e5c1201-2a04aab4e2.zip
deleted file mode 100644
index 24cb0af8..00000000
Binary files a/.yarn/cache/rechoir-npm-0.7.1-0c7e5c1201-2a04aab4e2.zip and /dev/null differ
diff --git a/.yarn/cache/reduce-flatten-npm-2.0.0-01bd4936fa-64393ef99a.zip b/.yarn/cache/reduce-flatten-npm-2.0.0-01bd4936fa-64393ef99a.zip
deleted file mode 100644
index 7ab0e947..00000000
Binary files a/.yarn/cache/reduce-flatten-npm-2.0.0-01bd4936fa-64393ef99a.zip and /dev/null differ
diff --git a/.yarn/cache/retry-npm-0.13.1-89eb100ab6-6125ec2e06.zip b/.yarn/cache/retry-npm-0.13.1-89eb100ab6-6125ec2e06.zip
new file mode 100644
index 00000000..2301fb71
Binary files /dev/null and b/.yarn/cache/retry-npm-0.13.1-89eb100ab6-6125ec2e06.zip differ
diff --git a/.yarn/cache/rollup-npm-4.17.1-7b824476d8-4072609e24.zip b/.yarn/cache/rollup-npm-4.17.1-7b824476d8-4072609e24.zip
deleted file mode 100644
index 774cd079..00000000
Binary files a/.yarn/cache/rollup-npm-4.17.1-7b824476d8-4072609e24.zip and /dev/null differ
diff --git a/.yarn/cache/rollup-npm-4.18.0-9eadb97a09-2320fe653c.zip b/.yarn/cache/rollup-npm-4.18.0-9eadb97a09-2320fe653c.zip
new file mode 100644
index 00000000..40a31b90
Binary files /dev/null and b/.yarn/cache/rollup-npm-4.18.0-9eadb97a09-2320fe653c.zip differ
diff --git a/.yarn/cache/source-map-npm-0.7.4-bc8d018ab6-a0f7c9b797.zip b/.yarn/cache/source-map-npm-0.7.4-bc8d018ab6-a0f7c9b797.zip
new file mode 100644
index 00000000..c2b79fcc
Binary files /dev/null and b/.yarn/cache/source-map-npm-0.7.4-bc8d018ab6-a0f7c9b797.zip differ
diff --git a/.yarn/cache/table-layout-npm-1.0.2-0b3fe79240-5dd12bc64d.zip b/.yarn/cache/table-layout-npm-1.0.2-0b3fe79240-5dd12bc64d.zip
deleted file mode 100644
index f2b6ffcb..00000000
Binary files a/.yarn/cache/table-layout-npm-1.0.2-0b3fe79240-5dd12bc64d.zip and /dev/null differ
diff --git a/.yarn/cache/typical-npm-5.2.0-d4de46c932-fd8e4197cb.zip b/.yarn/cache/typical-npm-5.2.0-d4de46c932-fd8e4197cb.zip
deleted file mode 100644
index 7d66dc89..00000000
Binary files a/.yarn/cache/typical-npm-5.2.0-d4de46c932-fd8e4197cb.zip and /dev/null differ
diff --git a/.yarn/cache/unplugin-npm-1.10.1-b23391b255-d9819fad8a.zip b/.yarn/cache/unplugin-npm-1.11.0-0b6b24a0d1-debe6223b0.zip
similarity index 74%
rename from .yarn/cache/unplugin-npm-1.10.1-b23391b255-d9819fad8a.zip
rename to .yarn/cache/unplugin-npm-1.11.0-0b6b24a0d1-debe6223b0.zip
index 8078c8db..de56e563 100644
Binary files a/.yarn/cache/unplugin-npm-1.10.1-b23391b255-d9819fad8a.zip and b/.yarn/cache/unplugin-npm-1.11.0-0b6b24a0d1-debe6223b0.zip differ
diff --git a/.yarn/cache/update-browserslist-db-npm-1.1.0-3d2cb7d955-d70b9efeaf.zip b/.yarn/cache/update-browserslist-db-npm-1.1.0-3d2cb7d955-d70b9efeaf.zip
new file mode 100644
index 00000000..068c0ccb
Binary files /dev/null and b/.yarn/cache/update-browserslist-db-npm-1.1.0-3d2cb7d955-d70b9efeaf.zip differ
diff --git a/.yarn/cache/v8-compile-cache-npm-2.4.0-5979f8e405-49e726d7b2.zip b/.yarn/cache/v8-compile-cache-npm-2.4.0-5979f8e405-49e726d7b2.zip
deleted file mode 100644
index d33113fe..00000000
Binary files a/.yarn/cache/v8-compile-cache-npm-2.4.0-5979f8e405-49e726d7b2.zip and /dev/null differ
diff --git a/.yarn/cache/webpack-cli-npm-4.1.0-fcae536f7b-14a0bfc722.zip b/.yarn/cache/webpack-cli-npm-4.1.0-fcae536f7b-14a0bfc722.zip
deleted file mode 100644
index 3c575bf2..00000000
Binary files a/.yarn/cache/webpack-cli-npm-4.1.0-fcae536f7b-14a0bfc722.zip and /dev/null differ
diff --git a/.yarn/cache/webpack-merge-npm-4.2.2-f98139a8eb-93b59d623f.zip b/.yarn/cache/webpack-merge-npm-4.2.2-f98139a8eb-93b59d623f.zip
deleted file mode 100644
index 220fd34b..00000000
Binary files a/.yarn/cache/webpack-merge-npm-4.2.2-f98139a8eb-93b59d623f.zip and /dev/null differ
diff --git a/.yarn/cache/webpack-npm-4.44.2-eedc4b763e-1be2628244.zip b/.yarn/cache/webpack-npm-4.47.0-42e477a08c-d5763ee8d6.zip
similarity index 85%
rename from .yarn/cache/webpack-npm-4.44.2-eedc4b763e-1be2628244.zip
rename to .yarn/cache/webpack-npm-4.47.0-42e477a08c-d5763ee8d6.zip
index 0e5e888f..3b686f8e 100644
Binary files a/.yarn/cache/webpack-npm-4.44.2-eedc4b763e-1be2628244.zip and b/.yarn/cache/webpack-npm-4.47.0-42e477a08c-d5763ee8d6.zip differ
diff --git a/.yarn/cache/webpack-npm-5.1.3-ee81460ee2-ab2c7b914b.zip b/.yarn/cache/webpack-npm-5.1.3-ee81460ee2-ab2c7b914b.zip
deleted file mode 100644
index c82bc454..00000000
Binary files a/.yarn/cache/webpack-npm-5.1.3-ee81460ee2-ab2c7b914b.zip and /dev/null differ
diff --git a/.yarn/cache/webpack-npm-5.49.0-286d81acb7-bcdba93435.zip b/.yarn/cache/webpack-npm-5.49.0-286d81acb7-bcdba93435.zip
deleted file mode 100644
index f1db34d9..00000000
Binary files a/.yarn/cache/webpack-npm-5.49.0-286d81acb7-bcdba93435.zip and /dev/null differ
diff --git a/.yarn/cache/webpack-npm-5.92.1-eba8a81d56-76fcfbebcc.zip b/.yarn/cache/webpack-npm-5.92.1-eba8a81d56-76fcfbebcc.zip
new file mode 100644
index 00000000..90b4b6dd
Binary files /dev/null and b/.yarn/cache/webpack-npm-5.92.1-eba8a81d56-76fcfbebcc.zip differ
diff --git a/.yarn/cache/webpack-sources-npm-2.3.1-fac7f75ad9-0c4bb91f28.zip b/.yarn/cache/webpack-sources-npm-2.3.1-fac7f75ad9-0c4bb91f28.zip
deleted file mode 100644
index 5e479f8c..00000000
Binary files a/.yarn/cache/webpack-sources-npm-2.3.1-fac7f75ad9-0c4bb91f28.zip and /dev/null differ
diff --git a/.yarn/cache/webpack-sources-npm-3.2.0-07549b866c-351a50e4ee.zip b/.yarn/cache/webpack-sources-npm-3.2.0-07549b866c-351a50e4ee.zip
deleted file mode 100644
index a7e2be70..00000000
Binary files a/.yarn/cache/webpack-sources-npm-3.2.0-07549b866c-351a50e4ee.zip and /dev/null differ
diff --git a/.yarn/cache/wordwrapjs-npm-4.0.1-b6c3c84d76-4182c48c9d.zip b/.yarn/cache/wordwrapjs-npm-4.0.1-b6c3c84d76-4182c48c9d.zip
deleted file mode 100644
index 936e2020..00000000
Binary files a/.yarn/cache/wordwrapjs-npm-4.0.1-b6c3c84d76-4182c48c9d.zip and /dev/null differ
diff --git a/.yarn/patches/unplugin-npm-1.10.1-b23391b255.patch b/.yarn/patches/unplugin-npm-1.10.1-b23391b255.patch
new file mode 100644
index 00000000..d6f1f27f
--- /dev/null
+++ b/.yarn/patches/unplugin-npm-1.10.1-b23391b255.patch
@@ -0,0 +1,52 @@
+diff --git a/dist/index.js b/dist/index.js
+index e20e787eb708d88135de6fbff72b0460ac7ae13b..b2a20f4adb99fb1b055d9fd661cf56e2e549926c 100644
+--- a/dist/index.js
++++ b/dist/index.js
+@@ -1655,8 +1655,8 @@ function getRspackPlugin(factory) {
+ });
+ }
+ if (plugin.writeBundle) {
+- compiler.hooks.afterEmit.tap(plugin.name, () => {
+- plugin.writeBundle();
++ compiler.hooks.afterEmit.tapPromise(plugin.name, async () => {
++ await plugin.writeBundle();
+ });
+ }
+ }
+@@ -1910,8 +1910,8 @@ function getWebpackPlugin(factory) {
+ });
+ }
+ if (plugin.writeBundle) {
+- compiler.hooks.afterEmit.tap(plugin.name, () => {
+- plugin.writeBundle();
++ compiler.hooks.afterEmit.tapPromise(plugin.name, async () => {
++ await plugin.writeBundle();
+ });
+ }
+ }
+diff --git a/dist/index.mjs b/dist/index.mjs
+index 7d9b930daf919a180caf2e33a6ed684d53dbc1c5..f4015052d77ae18ae5357fa670ef85e4c3c0007f 100644
+--- a/dist/index.mjs
++++ b/dist/index.mjs
+@@ -1619,8 +1619,8 @@ function getRspackPlugin(factory) {
+ });
+ }
+ if (plugin.writeBundle) {
+- compiler.hooks.afterEmit.tap(plugin.name, () => {
+- plugin.writeBundle();
++ compiler.hooks.afterEmit.tapPromise(plugin.name, async () => {
++ await plugin.writeBundle();
+ });
+ }
+ }
+@@ -1874,8 +1874,8 @@ function getWebpackPlugin(factory) {
+ });
+ }
+ if (plugin.writeBundle) {
+- compiler.hooks.afterEmit.tap(plugin.name, () => {
+- plugin.writeBundle();
++ compiler.hooks.afterEmit.tapPromise(plugin.name, async () => {
++ await plugin.writeBundle();
+ });
+ }
+ }
diff --git a/LICENSES-3rdparty.csv b/LICENSES-3rdparty.csv
index e50c16ef..72ed0cef 100644
--- a/LICENSES-3rdparty.csv
+++ b/LICENSES-3rdparty.csv
@@ -176,6 +176,7 @@ Component,Origin,Licence,Copyright
@tsconfig/node12,npm,MIT,(https://www.npmjs.com/package/@tsconfig/node12)
@tsconfig/node14,npm,MIT,(https://www.npmjs.com/package/@tsconfig/node14)
@tsconfig/node16,npm,MIT,(https://www.npmjs.com/package/@tsconfig/node16)
+@types/async-retry,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/async-retry)
@types/babel__core,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__core)
@types/babel__generator,npm,MIT,(https://www.npmjs.com/package/@types/babel__generator)
@types/babel__preset-env,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/babel__preset-env)
@@ -184,7 +185,7 @@ Component,Origin,Licence,Copyright
@types/chalk,npm,MIT,(https://www.npmjs.com/package/@types/chalk)
@types/color-name,npm,MIT,(https://www.npmjs.com/package/@types/color-name)
@types/eslint,npm,MIT,(https://www.npmjs.com/package/@types/eslint)
-@types/eslint-scope,npm,MIT,(https://www.npmjs.com/package/@types/eslint-scope)
+@types/eslint-scope,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/eslint-scope)
@types/estree,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/estree)
@types/fs-extra,npm,MIT,(https://www.npmjs.com/package/@types/fs-extra)
@types/glob,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/glob)
@@ -200,8 +201,14 @@ Component,Origin,Licence,Copyright
@types/node,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
@types/parse-json,npm,MIT,(https://www.npmjs.com/package/@types/parse-json)
@types/resolve,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/resolve)
+@types/retry,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/retry)
@types/semver,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/semver)
+@types/source-list-map,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/source-list-map)
@types/stack-utils,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/stack-utils)
+@types/tapable,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/tapable)
+@types/uglify-js,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/uglify-js)
+@types/webpack,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/webpack)
+@types/webpack-sources,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/webpack-sources)
@types/wrap-ansi,npm,MIT,(https://www.npmjs.com/package/@types/wrap-ansi)
@types/yargs,npm,MIT,(https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/yargs)
@types/yargs-parser,npm,MIT,(https://www.npmjs.com/package/@types/yargs-parser)
@@ -233,13 +240,11 @@ Component,Origin,Licence,Copyright
@webassemblyjs/wasm-parser,npm,MIT,Sven Sauleau (https://www.npmjs.com/package/@webassemblyjs/wasm-parser)
@webassemblyjs/wast-parser,npm,MIT,Sven Sauleau (https://www.npmjs.com/package/@webassemblyjs/wast-parser)
@webassemblyjs/wast-printer,npm,MIT,Sven Sauleau (https://www.npmjs.com/package/@webassemblyjs/wast-printer)
-@webpack-cli/info,virtual,MIT,(https://github.com/webpack/webpack-cli/tree/master/packages/info)
-@webpack-cli/serve,virtual,MIT,(https://github.com/webpack/webpack-cli/tree/master/packages/serve)
@xtuc/ieee754,npm,BSD-3-Clause,Feross Aboukhadijeh (http://feross.org)
@xtuc/long,npm,Apache-2.0,Daniel Wirtz (https://www.npmjs.com/package/@xtuc/long)
abbrev,npm,ISC,Isaac Z. Schlueter (https://www.npmjs.com/package/abbrev)
acorn,npm,MIT,(https://github.com/acornjs/acorn)
-acorn-import-assertions,virtual,MIT,Sven Sauleau (https://www.npmjs.com/package/acorn-import-assertions)
+acorn-import-attributes,virtual,MIT,Sven Sauleau (https://www.npmjs.com/package/acorn-import-attributes)
acorn-jsx,virtual,MIT,(https://github.com/acornjs/acorn-jsx)
acorn-walk,npm,MIT,(https://github.com/acornjs/acorn)
aggregate-error,npm,MIT,Sindre Sorhus (sindresorhus.com)
@@ -259,7 +264,6 @@ argparse,npm,MIT,(https://www.npmjs.com/package/argparse)
arr-diff,npm,MIT,Jon Schlinkert (https://github.com/jonschlinkert/arr-diff)
arr-flatten,npm,MIT,Jon Schlinkert (https://github.com/jonschlinkert/arr-flatten)
arr-union,npm,MIT,Jon Schlinkert (https://github.com/jonschlinkert/arr-union)
-array-back,npm,MIT,Lloyd Brookes (https://www.npmjs.com/package/array-back)
array-buffer-byte-length,npm,MIT,Jordan Harband (https://github.com/inspect-js/array-buffer-byte-length#readme)
array-includes,npm,MIT,Jordan Harband (http://ljharb.codes)
array-union,npm,MIT,Sindre Sorhus (sindresorhus.com)
@@ -275,6 +279,7 @@ assert-plus,npm,MIT,Mark Cavage (https://www.npmjs.com/package/assert-plus)
assign-symbols,npm,MIT,Jon Schlinkert (https://github.com/jonschlinkert/assign-symbols)
astral-regex,npm,MIT,Kevin Mårtensson (github.com/kevva)
async-each,npm,MIT,Paul Miller (https://github.com/paulmillr/async-each/)
+async-retry,npm,MIT,(https://www.npmjs.com/package/async-retry)
asynckit,npm,MIT,Alex Indigo (https://github.com/alexindigo/asynckit#readme)
atob,npm,(MIT OR Apache-2.0),AJ ONeal (https://git.coolaj86.com/coolaj86/atob.js.git)
available-typed-arrays,npm,MIT,Jordan Harband (https://github.com/inspect-js/available-typed-arrays#readme)
@@ -344,9 +349,7 @@ collect-v8-coverage,npm,MIT,(https://www.npmjs.com/package/collect-v8-coverage)
collection-visit,npm,MIT,Jon Schlinkert (https://github.com/jonschlinkert/collection-visit)
color-convert,npm,MIT,Heather Arthur (https://www.npmjs.com/package/color-convert)
color-name,npm,MIT,DY (https://github.com/dfcreative/color-name)
-colorette,npm,MIT,Jorge Bucaran (https://www.npmjs.com/package/colorette)
combined-stream,npm,MIT,Felix Geisendörfer (https://github.com/felixge/node-combined-stream)
-command-line-usage,npm,MIT,Lloyd Brookes (https://www.npmjs.com/package/command-line-usage)
commander,npm,MIT,TJ Holowaychuk (https://www.npmjs.com/package/commander)
commondir,npm,MIT,James Halliday (http://substack.net)
compare-versions,npm,MIT,Ole Michelsen (https://github.com/omichelsen/compare-versions#readme)
@@ -377,7 +380,6 @@ data-view-byte-offset,npm,MIT,Jordan Harband (https://github.com/ljharb/data-vie
debug,virtual,MIT,Josh Junon (https://www.npmjs.com/package/debug)
decode-uri-component,npm,MIT,Sam Verschueren (github.com/SamVerschueren)
dedent,virtual,MIT,Desmond Brand (https://github.com/dmnd/dedent)
-deep-extend,npm,MIT,Viacheslav Lotsmanov (https://github.com/unclechu/node-deep-extend)
deep-is,npm,MIT,Thorsten Lorenz (http://thlorenz.com)
deepmerge,npm,MIT,(https://github.com/TehShrike/deepmerge)
defaults,npm,MIT,Elijah Insua (https://www.npmjs.com/package/defaults)
@@ -406,7 +408,6 @@ end-of-stream,npm,MIT,Mathias Buus (https://github.com/mafintosh/end-of-stream)
enhanced-resolve,npm,MIT,Tobias Koppers @sokra (http://github.com/webpack/enhanced-resolve)
enquirer,npm,MIT,Jon Schlinkert (https://github.com/enquirer/enquirer)
env-paths,npm,MIT,Sindre Sorhus (sindresorhus.com)
-envinfo,npm,MIT,tabrindle@gmail.com (https://www.npmjs.com/package/envinfo)
errno,npm,MIT,(https://www.npmjs.com/package/errno)
error-ex,npm,MIT,(https://www.npmjs.com/package/error-ex)
es-abstract,npm,MIT,Jordan Harband (http://ljharb.codes)
@@ -437,6 +438,7 @@ esrecurse,npm,BSD-2-Clause,(https://github.com/estools/esrecurse)
estraverse,npm,BSD-2-Clause,(https://github.com/estools/estraverse)
estree-walker,npm,MIT,Rich Harris (https://www.npmjs.com/package/estree-walker)
esutils,npm,BSD-2-Clause,(https://github.com/estools/esutils)
+eventemitter3,npm,MIT,Arnout Kazemier (https://www.npmjs.com/package/eventemitter3)
events,npm,MIT,Irakli Gozalishvili (http://jeditoolkit.com)
evp_bytestokey,npm,MIT,Calvin Metcalf (https://github.com/crypto-browserify/EVP_BytesToKey)
execa,npm,MIT,Sindre Sorhus (sindresorhus.com)
@@ -530,7 +532,6 @@ infer-owner,npm,ISC,Isaac Z. Schlueter (https://izs.me)
inflight,npm,ISC,Isaac Z. Schlueter (https://github.com/isaacs/inflight)
inherits,npm,ISC,(https://www.npmjs.com/package/inherits)
internal-slot,npm,MIT,Jordan Harband (https://github.com/ljharb/internal-slot#readme)
-interpret,npm,MIT,Gulp Team (http://gulpjs.com/)
is-accessor-descriptor,npm,MIT,Jon Schlinkert (https://github.com/jonschlinkert/is-accessor-descriptor)
is-array-buffer,npm,MIT,Jordan Harband (https://github.com/inspect-js/is-array-buffer#readme)
is-arrayish,npm,MIT,Qix (http://github.com/qix-)
@@ -629,7 +630,6 @@ listr2,npm,MIT,Cenk Kilic (https://srcs.kilic.dev)
loader-runner,npm,MIT,Tobias Koppers @sokra (https://github.com/webpack/loader-runner#readme)
loader-utils,npm,MIT,Tobias Koppers @sokra (https://www.npmjs.com/package/loader-utils)
locate-path,npm,MIT,Sindre Sorhus (sindresorhus.com)
-lodash,npm,MIT,John-David Dalton (https://lodash.com/)
lodash.debounce,npm,MIT,John-David Dalton (https://lodash.com/)
lodash.memoize,npm,MIT,John-David Dalton (https://lodash.com/)
lodash.merge,npm,MIT,John-David Dalton (https://lodash.com/)
@@ -668,6 +668,7 @@ nan,npm,MIT,(https://www.npmjs.com/package/nan)
nanomatch,npm,MIT,Jon Schlinkert (https://github.com/micromatch/nanomatch)
natural-compare,npm,MIT,Lauri Rooden (https://github.com/litejs/natural-compare-lite)
neo-async,npm,MIT,(https://github.com/suguru03/neo-async)
+nock,npm,MIT,Pedro Teixeira (https://www.npmjs.com/package/nock)
node-gyp,npm,MIT,Nathan Rajlich (http://tootallnate.net)
node-int64,npm,MIT,Robert Kieffer (https://www.npmjs.com/package/node-int64)
node-libs-browser,npm,MIT,Tobias Koppers @sokra (http://github.com/webpack/node-libs-browser)
@@ -697,9 +698,12 @@ os-homedir,npm,MIT,Sindre Sorhus (sindresorhus.com)
os-tmpdir,npm,MIT,Sindre Sorhus (sindresorhus.com)
osenv,npm,ISC,Isaac Z. Schlueter (http://blog.izs.me/)
outdent,npm,MIT,Andrew Bradley (https://github.com/cspotcode/outdent#readme)
+p-finally,npm,MIT,Sindre Sorhus (sindresorhus.com)
p-limit,npm,MIT,Sindre Sorhus (sindresorhus.com)
p-locate,npm,MIT,Sindre Sorhus (sindresorhus.com)
p-map,npm,MIT,Sindre Sorhus (https://sindresorhus.com)
+p-queue,npm,MIT,(https://www.npmjs.com/package/p-queue)
+p-timeout,npm,MIT,Sindre Sorhus (sindresorhus.com)
p-try,npm,MIT,Sindre Sorhus (sindresorhus.com)
pad,npm,BSD-3-Clause,David Worms (https://github.com/adaltas/node-pad)
pako,npm,(MIT AND Zlib),(https://github.com/nodeca/pako)
@@ -734,6 +738,7 @@ process,npm,MIT,Roman Shtylman (https://www.npmjs.com/package/process)
process-nextick-args,npm,MIT,(https://github.com/calvinmetcalf/process-nextick-args)
promise-inflight,virtual,ISC,Rebecca Turner (https://github.com/iarna/promise-inflight#readme)
prompts,npm,MIT,Terkel Gjervig (https://terkel.com)
+propagate,npm,MIT,Pedro Teixeira (http://github.com/nock/propagate#readme)
prr,npm,MIT,Rod Vagg (https://github.com/rvagg/prr)
psl,npm,MIT,Lupo Montero (https://lupomontero.com/)
public-encrypt,npm,MIT,Calvin Metcalf (https://github.com/crypto-browserify/publicEncrypt)
@@ -749,8 +754,6 @@ randomfill,npm,MIT,(https://github.com/crypto-browserify/randomfill)
react-is,npm,MIT,(https://reactjs.org/)
readable-stream,npm,MIT,(https://www.npmjs.com/package/readable-stream)
readdirp,npm,MIT,Thorsten Lorenz (https://github.com/paulmillr/readdirp)
-rechoir,npm,MIT,Gulp Team (http://gulpjs.com/)
-reduce-flatten,npm,MIT,Lloyd Brookes (https://www.npmjs.com/package/reduce-flatten)
regenerate,npm,MIT,Mathias Bynens (https://mths.be/regenerate)
regenerate-unicode-properties,npm,MIT,Mathias Bynens (https://github.com/mathiasbynens/regenerate-unicode-properties)
regenerator-runtime,npm,MIT,Ben Newman (https://www.npmjs.com/package/regenerator-runtime)
@@ -771,6 +774,7 @@ resolve-url,npm,MIT,Simon Lydell (https://www.npmjs.com/package/resolve-url)
resolve.exports,npm,MIT,Luke Edwards (https://lukeed.com)
restore-cursor,npm,MIT,Sindre Sorhus (sindresorhus.com)
ret,npm,MIT,Roly Fentanes (https://github.com/fent)
+retry,npm,MIT,Tim Koschützki (https://github.com/tim-kos/node-retry)
reusify,npm,MIT,Matteo Collina (https://github.com/mcollina/reusify#readme)
rimraf,npm,ISC,Isaac Z. Schlueter (http://blog.izs.me/)
ripemd160,npm,MIT,(https://www.npmjs.com/package/ripemd160)
@@ -838,7 +842,6 @@ strip-json-comments,npm,MIT,Sindre Sorhus (https://sindresorhus.com)
supports-color,npm,MIT,Sindre Sorhus (sindresorhus.com)
supports-preserve-symlinks-flag,npm,MIT,Jordan Harband (https://github.com/inspect-js/node-supports-preserve-symlinks-flag#readme)
synckit,npm,MIT,JounQin (https://www.1stG.me)
-table-layout,npm,MIT,Lloyd Brookes (https://www.npmjs.com/package/table-layout)
tapable,npm,MIT,Tobias Koppers @sokra (https://github.com/webpack/tapable)
tar,npm,ISC,Isaac Z. Schlueter (http://blog.izs.me/)
terser,npm,BSD-2-Clause,Mihai Bazon (https://terser.org)
@@ -874,7 +877,6 @@ typed-array-byte-length,npm,MIT,Jordan Harband (https://github.com/inspect-js/ty
typed-array-byte-offset,npm,MIT,Jordan Harband (https://github.com/inspect-js/typed-array-byte-offset#readme)
typed-array-length,npm,MIT,Jordan Harband (https://github.com/inspect-js/typed-array-length#readme)
typedarray,npm,MIT,James Halliday (https://github.com/substack/typedarray)
-typical,npm,MIT,Lloyd Brookes (https://www.npmjs.com/package/typical)
unbox-primitive,npm,MIT,Jordan Harband (https://github.com/ljharb/unbox-primitive#readme)
undici-types,npm,MIT,(https://undici.nodejs.org)
unicode-canonical-property-names-ecmascript,npm,MIT,Mathias Bynens (https://github.com/mathiasbynens/unicode-canonical-property-names-ecmascript)
@@ -896,7 +898,6 @@ use,npm,MIT,Jon Schlinkert (https://github.com/jonschlinkert/use)
util,npm,MIT,Joyent (https://github.com/defunctzombie/node-util)
util-deprecate,npm,MIT,Nathan Rajlich (https://github.com/TooTallNate/util-deprecate)
uuid,npm,MIT,(https://www.npmjs.com/package/uuid)
-v8-compile-cache,npm,MIT,Andres Suarez (https://www.npmjs.com/package/v8-compile-cache)
v8-compile-cache-lib,npm,MIT,Andrew Bradley (https://www.npmjs.com/package/v8-compile-cache-lib)
v8-to-istanbul,npm,ISC,Ben Coe (https://www.npmjs.com/package/v8-to-istanbul)
verror,npm,MIT,(https://www.npmjs.com/package/verror)
@@ -906,8 +907,6 @@ watchpack,npm,MIT,Tobias Koppers @sokra (https://github.com/webpack/watchpack)
watchpack-chokidar2,npm,MIT,Tobias Koppers @sokra (https://github.com/webpack/watchpack)
wcwidth,npm,MIT,Tim Oxley (https://github.com/timoxley/wcwidth#readme)
webpack,virtual,MIT,Tobias Koppers @sokra (https://github.com/webpack/webpack)
-webpack-cli,virtual,MIT,(https://www.npmjs.com/package/webpack-cli)
-webpack-merge,npm,MIT,Juho Vepsalainen (https://github.com/survivejs/webpack-merge)
webpack-sources,npm,MIT,Tobias Koppers @sokra (https://github.com/webpack/webpack-sources#readme)
webpack-virtual-modules,npm,MIT,SysGears INC (https://github.com/sysgears/webpack-virtual-modules#readme)
which,npm,ISC,Isaac Z. Schlueter (http://blog.izs.me)
@@ -915,7 +914,6 @@ which-boxed-primitive,npm,MIT,Jordan Harband (https://github.com/inspect-js/whic
which-pm-runs,npm,MIT,Zoltan Kochan (https://github.com/zkochan/which-pm-runs#readme)
which-typed-array,npm,MIT,Jordan Harband (http://ljharb.codes)
wide-align,npm,ISC,Rebecca Turner (http://re-becca.org/)
-wordwrapjs,npm,MIT,Lloyd Brookes (https://www.npmjs.com/package/wordwrapjs)
worker-farm,npm,MIT,(https://github.com/rvagg/node-worker-farm)
wrap-ansi,npm,MIT,Sindre Sorhus (sindresorhus.com)
wrappy,npm,ISC,Isaac Z. Schlueter (https://github.com/npm/wrappy)
diff --git a/README.md b/README.md
index 50414bd1..ee872cde 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,7 @@ A set of plugins to interact with Datadog directly from your builds.
- [Plugins](#plugins)
+ - [`rum` RUM Plugin](#rum-rum-plugin)
- [`telemetry` Telemetry Plugin](#telemetry-telemetry-plugin)
- [Configuration](#configuration)
- [`auth.apiKey`](#authapikey)
@@ -32,6 +33,12 @@ A set of plugins to interact with Datadog directly from your builds.
## Plugins
+### `rum` RUM Plugin
+
+> Interact with our Real User Monitoring product (RUM) in Datadog directly from your build system.
+
+[📝 Full documentation ➡️](./packages/plugins/rum#readme)
+
### `telemetry` Telemetry Plugin
> Display and send telemetry data as metrics to Datadog.
@@ -51,7 +58,18 @@ A set of plugins to interact with Datadog directly from your builds.
apiKey?: string;
endPoint?: string;
};
- logLevel?: 'debug' | 'warn' | 'error' | 'none';
+ logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'none';
+ rum?: {
+ disabled?: boolean;
+ sourcemaps?: {
+ dryRun?: boolean;
+ intakeUrl?: string;
+ maxConcurrency?: number;
+ minifiedPathPrefix?: string;
+ releaseVersion: string;
+ service: string;
+ };
+ };
telemetry?: {
disabled?: boolean;
output?: boolean
diff --git a/package.json b/package.json
index 539955b3..9d87d656 100644
--- a/package.json
+++ b/package.json
@@ -16,18 +16,18 @@
"yarn": "1.22.19"
},
"scripts": {
- "build:all": "yarn workspaces foreach -Apti --exclude \"project-*\" run build",
- "build:tests": "yarn workspaces foreach -Apti --include \"project-*\" run build",
+ "build:all": "yarn workspaces foreach -Apti --exclude \"@dd/*\" run build",
"cli": "yarn workspace @dd/tools cli",
"format": "yarn lint --fix",
"lint": "eslint ./packages/**/*.{ts,js} --quiet",
+ "loop": "yarn workspaces foreach -Apti --include \"@datadog/*\" --exclude \"@datadog/build-plugins\"",
"oss": "yarn cli oss -d packages -l mit",
- "publish:all": "yarn workspaces foreach -A --include \"@datadog/*\" --exclude \"@datadog/build-plugins\" --no-private npm publish",
- "test": "yarn build:all && yarn build:tests && yarn test:only",
- "test:only": "yarn workspace @dd/tests test",
- "typecheck:all": "yarn workspaces foreach -Apti --exclude \"project-*\" run typecheck",
- "version:all": "yarn workspaces foreach -Apti --include \"@datadog/*\" --exclude \"@datadog/build-plugins\" version --deferred ${0} && yarn version apply --all",
- "watch:all": "yarn workspaces foreach -Apti --exclude \"project-*\" run watch"
+ "publish:all": "yarn loop --no-private npm publish",
+ "test": "yarn workspace @dd/tests test",
+ "test:noisy": "yarn workspace @dd/tests test:noisy",
+ "typecheck:all": "yarn workspaces foreach -Apti run typecheck",
+ "version:all": "yarn loop version --deferred ${0} && yarn version apply --all",
+ "watch:all": "yarn loop run watch"
},
"husky": {
"hooks": {
diff --git a/packages/core/package.json b/packages/core/package.json
index 53062ab1..50512315 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -25,7 +25,7 @@
"dependencies": {
"chalk": "2.3.1",
"simple-git": "3.25.0",
- "unplugin": "1.10.1"
+ "unplugin": "1.11.0"
},
"devDependencies": {
"@types/chalk": "2.2.0",
diff --git a/packages/core/src/log.ts b/packages/core/src/log.ts
index 4dbff5cc..49675f63 100644
--- a/packages/core/src/log.ts
+++ b/packages/core/src/log.ts
@@ -9,7 +9,8 @@ import type { LogLevel } from './types';
export type Logger = (text: any, type?: LogLevel) => void;
const log = (text: any, level: LogLevel, type: LogLevel = 'debug', name?: string) => {
- let color = c;
+ // By default (debug) we print dimmed.
+ let color = c.dim;
// eslint-disable-next-line no-console
let logFn = console.log;
@@ -21,17 +22,22 @@ const log = (text: any, level: LogLevel, type: LogLevel = 'debug', name?: string
color = c.yellow;
// eslint-disable-next-line no-console
logFn = console.warn;
+ } else if (type === 'info') {
+ color = c.cyan;
+ // eslint-disable-next-line no-console
+ logFn = console.log;
}
- const prefix = name ? `[${c.bold(name)}] ` : '';
+ const prefix = name ? `[${type}|${name}] ` : '';
if (
level === 'debug' ||
+ (level === 'info' && ['info', 'error', 'warn'].includes(type)) ||
(level === 'warn' && ['error', 'warn'].includes(type)) ||
(level === 'error' && type === 'error')
) {
const content = typeof text === 'string' ? text : JSON.stringify(text, null, 2);
- logFn(`${prefix}${color(content)}`);
+ logFn(`${color(prefix)}${content}`);
}
};
diff --git a/packages/core/src/plugins/git/index.ts b/packages/core/src/plugins/git/index.ts
index fc7320a0..ca35b53b 100644
--- a/packages/core/src/plugins/git/index.ts
+++ b/packages/core/src/plugins/git/index.ts
@@ -14,8 +14,8 @@ export const getGitPlugin = (options: Options, context: GlobalContext): Unplugin
enforce: 'pre',
async buildStart() {
// Verify that we should get the git information based on the options.
- // Only get git information if git is not disabled.
- const shouldGetGitInfo = options.disableGit !== true;
+ // Only get git information if sourcemaps are enabled and git is not disabled.
+ const shouldGetGitInfo = options.rum?.sourcemaps && options.disableGit !== true;
if (!shouldGetGitInfo) {
return;
diff --git a/packages/core/src/plugins/git/trackedFilesMatcher.ts b/packages/core/src/plugins/git/trackedFilesMatcher.ts
index c8ab0163..1e424cec 100644
--- a/packages/core/src/plugins/git/trackedFilesMatcher.ts
+++ b/packages/core/src/plugins/git/trackedFilesMatcher.ts
@@ -27,20 +27,24 @@ export class TrackedFilesMatcher {
}
// Looks up the sources declared in the sourcemap and return a list of related tracked files.
- public matchSourcemap(srcmapPath: string, onSourcesNotFound: () => void): string[] | undefined {
+ public matchSourcemap(
+ srcmapPath: string,
+ onSourcesNotFound: (reason: string) => void,
+ ): string[] | undefined {
const buff = fs.readFileSync(srcmapPath, 'utf8');
const srcmapObj = JSON.parse(buff);
if (!srcmapObj.sources) {
+ onSourcesNotFound(`Missing 'sources' field in sourcemap.`);
return undefined;
}
const sources = srcmapObj.sources as string[];
- if (!sources || sources.length === 0) {
+ if (sources.length === 0) {
+ onSourcesNotFound(`Empty 'sources' field in sourcemap.`);
return undefined;
}
const filtered = this.matchSources(sources);
if (filtered.length === 0) {
- onSourcesNotFound();
-
+ onSourcesNotFound(`Sources not in the tracked files.`);
return undefined;
}
diff --git a/packages/core/src/plugins/global-context/index.ts b/packages/core/src/plugins/global-context/index.ts
index 5a5d8ef6..fa325fca 100644
--- a/packages/core/src/plugins/global-context/index.ts
+++ b/packages/core/src/plugins/global-context/index.ts
@@ -2,30 +2,64 @@
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2019-Present Datadog, Inc.
+import { getLogger } from '@dd/core/log';
+import type { File, GlobalContext, Meta, Options } from '@dd/core/types';
+import path from 'path';
import type { UnpluginOptions } from 'unplugin';
-import type { GlobalContext, Meta, Options } from '../../types';
+const PLUGIN_NAME = 'global-context-plugin';
export const getGlobalContextPlugin = (opts: Options, meta: Meta) => {
+ const log = getLogger(opts.logLevel, 'internal-global-context');
const globalContext: GlobalContext = {
auth: opts.auth,
cwd: process.cwd(),
version: meta.version,
+ outputDir: process.cwd(),
bundler: {
name: meta.framework,
},
};
const globalContextPlugin: UnpluginOptions = {
- name: 'global-context-plugin',
+ name: PLUGIN_NAME,
enforce: 'pre',
esbuild: {
setup(build) {
globalContext.bundler.config = build.initialOptions;
+ if (build.initialOptions.outdir) {
+ globalContext.outputDir = build.initialOptions.outdir;
+ }
+ // We force esbuild to produce its metafile.
+ build.initialOptions.metafile = true;
+ build.onEnd((result) => {
+ if (!result.metafile) {
+ log('Missing metafile from build result.', 'warn');
+ return;
+ }
+
+ const files: File[] = [];
+ for (const [output] of Object.entries(result.metafile.outputs)) {
+ files.push({ filepath: path.join(globalContext.outputDir, output) });
+ }
+
+ globalContext.outputFiles = files;
+ });
},
},
webpack(compiler) {
globalContext.bundler.config = compiler.options;
+ if (compiler.options.output?.path) {
+ globalContext.outputDir = compiler.options.output.path;
+ }
+
+ compiler.hooks.emit.tap(PLUGIN_NAME, (compilation) => {
+ const files: File[] = [];
+ for (const filename of Object.keys(compilation.assets)) {
+ files.push({ filepath: path.join(globalContext.outputDir, filename) });
+ }
+ globalContext.outputFiles = files;
+ });
},
vite: {
options(options: any) {
diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts
index 2ae2633b..db3bf2b4 100644
--- a/packages/core/src/types.ts
+++ b/packages/core/src/types.ts
@@ -7,6 +7,8 @@
// will be updated using the 'yarn cli integrity' command.
// #imports-injection-marker
+import type { RumOptions } from '@dd/rum-plugins/types';
+import type * as rum from '@dd/rum-plugins';
import type { TelemetryOptions } from '@dd/telemetry-plugins/types';
import type * as telemetry from '@dd/telemetry-plugins';
// #imports-injection-marker
@@ -21,11 +23,15 @@ export interface RepositoryData {
trackedFilesMatcher: TrackedFilesMatcher;
}
+export type File = { filepath: string };
+
export type GlobalContext = {
auth?: AuthOptions;
cwd: string;
version: string;
git?: RepositoryData;
+ outputFiles?: File[];
+ outputDir: string;
bundler: {
name: string;
config?: any;
@@ -36,9 +42,13 @@ export type Meta = UnpluginContextMeta & {
version: string;
};
-export type GetPlugins = (options: T, context: GlobalContext) => UnpluginOptions[];
+export type PluginOptions = UnpluginOptions & {
+ name: PluginName;
+};
+
+export type GetPlugins = (options: T, context: GlobalContext) => PluginOptions[];
-export type LogLevel = 'debug' | 'warn' | 'error' | 'none';
+export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'none';
export type AuthOptions = {
apiKey?: string;
@@ -54,6 +64,7 @@ export interface GetPluginsOptions {
export interface Options extends GetPluginsOptions {
// Each product should have a unique entry.
// #types-injection-marker
+ [rum.CONFIG_KEY]?: RumOptions;
[telemetry.CONFIG_KEY]?: TelemetryOptions;
// #types-injection-marker
}
diff --git a/packages/esbuild-plugin/package.json b/packages/esbuild-plugin/package.json
index a4a8631c..6cb0fe60 100644
--- a/packages/esbuild-plugin/package.json
+++ b/packages/esbuild-plugin/package.json
@@ -1,7 +1,7 @@
{
"name": "@datadog/esbuild-plugin",
"packageManager": "yarn@4.0.2",
- "version": "2.0.1",
+ "version": "2.1.0",
"license": "MIT",
"author": "Datadog",
"description": "Datadog ESBuild Plugin",
@@ -57,8 +57,8 @@
"@rollup/plugin-node-resolve": "15.2.3",
"@types/babel__core": "^7",
"@types/babel__preset-env": "^7",
- "esbuild": "0.20.2",
- "rollup": "4.17.1",
+ "esbuild": "0.21.5",
+ "rollup": "4.18.0",
"rollup-plugin-dts": "6.1.0",
"rollup-plugin-esbuild": "6.1.1",
"typescript": "5.4.3"
diff --git a/packages/esbuild-plugin/src/index.ts b/packages/esbuild-plugin/src/index.ts
index 26479e2c..a19d54d7 100644
--- a/packages/esbuild-plugin/src/index.ts
+++ b/packages/esbuild-plugin/src/index.ts
@@ -6,7 +6,7 @@
// Anything between #types-export-injection-marker
// will be updated using the 'yarn cli integrity' command.
-import { buildPluginFactory } from '@dd/factory';
+import { buildPluginFactory, helpers } from '@dd/factory';
import pkg from '../package.json';
@@ -20,6 +20,13 @@ export type { Options as EsbuildPluginOptions } from '@dd/core/types';
export type {
// #types-export-injection-marker
+ RumTypes,
TelemetryTypes,
// #types-export-injection-marker
} from '@dd/factory';
+
+// This is to prevent overrides from other libraries in the final bundle.
+module.exports = {
+ helpers,
+ datadogEsbuildPlugin,
+};
diff --git a/packages/factory/package.json b/packages/factory/package.json
index a41278a8..ba8c8713 100644
--- a/packages/factory/package.json
+++ b/packages/factory/package.json
@@ -17,7 +17,8 @@
},
"dependencies": {
"@dd/core": "workspace:*",
+ "@dd/rum-plugins": "workspace:*",
"@dd/telemetry-plugins": "workspace:*",
- "unplugin": "1.10.1"
+ "unplugin": "1.11.0"
}
}
diff --git a/packages/factory/src/index.ts b/packages/factory/src/index.ts
index dee47e0d..14a7f128 100644
--- a/packages/factory/src/index.ts
+++ b/packages/factory/src/index.ts
@@ -11,6 +11,8 @@ import { getInternalPlugins } from '@dd/core/plugins/index';
import type { Options } from '@dd/core/types';
// #imports-injection-marker
+import type { OptionsWithRum } from '@dd/rum-plugins/types';
+import * as rum from '@dd/rum-plugins';
import type { OptionsWithTelemetry } from '@dd/telemetry-plugins/types';
import * as telemetry from '@dd/telemetry-plugins';
// #imports-injection-marker
@@ -19,12 +21,14 @@ import type { UnpluginContextMeta, UnpluginInstance, UnpluginOptions } from 'unp
import { createUnplugin } from 'unplugin';
// #types-export-injection-marker
+export type { types as RumTypes } from '@dd/rum-plugins';
export type { types as TelemetryTypes } from '@dd/telemetry-plugins';
// #types-export-injection-marker
export const helpers = {
// Each product should have a unique entry.
// #helpers-injection-marker
+ [rum.CONFIG_KEY]: rum.helpers,
[telemetry.CONFIG_KEY]: telemetry.helpers,
// #helpers-injection-marker
};
@@ -50,6 +54,9 @@ export const buildPluginFactory = ({
// Based on configuration add corresponding plugin.
// #configs-injection-marker
+ if (options[rum.CONFIG_KEY] && options[rum.CONFIG_KEY].disabled !== true) {
+ plugins.push(...rum.getPlugins(options as OptionsWithRum, globalContext));
+ }
if (options[telemetry.CONFIG_KEY] && options[telemetry.CONFIG_KEY].disabled !== true) {
plugins.push(...telemetry.getPlugins(options as OptionsWithTelemetry, globalContext));
}
diff --git a/packages/plugins/rum/README.md b/packages/plugins/rum/README.md
new file mode 100644
index 00000000..f226090d
--- /dev/null
+++ b/packages/plugins/rum/README.md
@@ -0,0 +1,33 @@
+# RUM Plugin
+
+Interact with our Real User Monitoring product (RUM) in Datadog directly from your build system.
+
+
+
+## Table of content
+
+
+
+
+- [Configuration](#configuration)
+
+
+## Configuration
+
+```ts
+rum?: {
+ disabled?: boolean;
+ sourcemaps?: {
+ dryRun?: boolean;
+ intakeUrl?: string;
+ maxConcurrency?: number;
+ minifiedPathPrefix?: string;
+ releaseVersion: string;
+ service: string;
+ };
+}
+```
+
+> [!NOTE]
+> You can override the intake URL by setting the `DATADOG_SOURCEMAP_INTAKE_URL` environment variable (eg. `https://sourcemap-intake.datadoghq.com/v1/input`).
+> Or only the domain with the `DATADOG_SITE` environment variable (eg. `datadoghq.com`).
diff --git a/packages/plugins/rum/package.json b/packages/plugins/rum/package.json
new file mode 100644
index 00000000..baa415fa
--- /dev/null
+++ b/packages/plugins/rum/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "@dd/rum-plugins",
+ "packageManager": "yarn@4.0.2",
+ "license": "MIT",
+ "private": true,
+ "author": "Datadog",
+ "description": "Interact with our Real User Monitoring product (RUM) in Datadog directly from your build system.",
+ "homepage": "https://github.com/DataDog/build-plugins/tree/main/packages/plugins/rum#readme",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/DataDog/build-plugins",
+ "directory": "packages/plugins/rum"
+ },
+ "exports": {
+ ".": "./src/index.ts",
+ "./sourcemaps/*": "./src/sourcemaps/*.ts",
+ "./*": "./src/*.ts"
+ },
+ "scripts": {
+ "typecheck": "tsc --noEmit"
+ },
+ "dependencies": {
+ "@dd/core": "workspace:*",
+ "async-retry": "1.3.3",
+ "chalk": "2.3.1",
+ "outdent": "0.8.0",
+ "p-queue": "6.6.2",
+ "unplugin": "1.11.0"
+ },
+ "devDependencies": {
+ "@types/async-retry": "1.4.8"
+ }
+}
diff --git a/packages/plugins/rum/src/constants.ts b/packages/plugins/rum/src/constants.ts
new file mode 100644
index 00000000..a27b7a17
--- /dev/null
+++ b/packages/plugins/rum/src/constants.ts
@@ -0,0 +1,8 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import type { PluginName } from '@dd/core/types';
+
+export const CONFIG_KEY = 'rum' as const;
+export const PLUGIN_NAME: PluginName = 'datadog-rum-plugin' as const;
diff --git a/packages/plugins/rum/src/index.ts b/packages/plugins/rum/src/index.ts
new file mode 100644
index 00000000..d41f8738
--- /dev/null
+++ b/packages/plugins/rum/src/index.ts
@@ -0,0 +1,47 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import { getLogger } from '@dd/core/log';
+import type { GlobalContext, GetPlugins } from '@dd/core/types';
+
+import { PLUGIN_NAME } from './constants';
+import { uploadSourcemaps } from './sourcemaps';
+import type { OptionsWithRum, RumOptions, RumOptionsWithSourcemaps } from './types';
+import { validateOptions } from './validate';
+
+export { CONFIG_KEY, PLUGIN_NAME } from './constants';
+
+export const helpers = {
+ // Add the helpers you'd like to expose here.
+};
+
+export type types = {
+ // Add the types you'd like to expose here.
+ RumOptions: RumOptions;
+ OptionsWithRum: OptionsWithRum;
+};
+
+export const getPlugins: GetPlugins = (
+ opts: OptionsWithRum,
+ context: GlobalContext,
+) => {
+ // Verify configuration.
+ const rumOptions = validateOptions(opts);
+ return [
+ {
+ name: PLUGIN_NAME,
+ async writeBundle() {
+ if (rumOptions.disabled) {
+ return;
+ }
+
+ const log = getLogger(opts.logLevel, PLUGIN_NAME);
+ if (rumOptions.sourcemaps) {
+ // Need the "as" because Typescript doesn't understand that we've already checked for sourcemaps.
+ await uploadSourcemaps(rumOptions as RumOptionsWithSourcemaps, context, log);
+ }
+ },
+ },
+ ];
+};
diff --git a/packages/plugins/rum/src/sourcemaps/files.ts b/packages/plugins/rum/src/sourcemaps/files.ts
new file mode 100644
index 00000000..07ce88b8
--- /dev/null
+++ b/packages/plugins/rum/src/sourcemaps/files.ts
@@ -0,0 +1,56 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import type { GlobalContext } from '@dd/core/types';
+import chalk from 'chalk';
+import path from 'path';
+
+import type { RumSourcemapsOptionsWithDefaults, Sourcemap } from '../types';
+
+type PartialSourcemap = Pick;
+
+const decomposePath = (
+ options: RumSourcemapsOptionsWithDefaults,
+ context: GlobalContext,
+ sourcemapFilePath: string,
+): PartialSourcemap => {
+ if (path.extname(sourcemapFilePath) !== '.map') {
+ throw new Error(`The file ${chalk.green.bold(sourcemapFilePath)} is not a sourcemap.`);
+ }
+
+ const minifiedFilePath = sourcemapFilePath.replace(/\.map$/, '');
+ const relativePath = minifiedFilePath.replace(context.outputDir, '');
+ const minifiedUrl = options.minifiedPathPrefix
+ ? path.join(options.minifiedPathPrefix, relativePath)
+ : relativePath;
+
+ return {
+ minifiedFilePath,
+ minifiedUrl,
+ relativePath,
+ };
+};
+
+export const getSourcemapsFiles = (
+ options: RumSourcemapsOptionsWithDefaults,
+ context: GlobalContext,
+): Sourcemap[] => {
+ if (!context.outputFiles || context.outputFiles.length === 0) {
+ throw new Error('No output files found.');
+ }
+
+ const sourcemapFilesList = context.outputFiles
+ .filter((file) => file.filepath.endsWith('.map'))
+ .map((file) => file.filepath);
+
+ const sourcemapFiles = sourcemapFilesList.map((sourcemapFilePath) => {
+ return {
+ ...decomposePath(options, context, sourcemapFilePath),
+ sourcemapFilePath,
+ minifiedPathPrefix: options.minifiedPathPrefix,
+ };
+ });
+
+ return sourcemapFiles;
+};
diff --git a/packages/plugins/rum/src/sourcemaps/index.ts b/packages/plugins/rum/src/sourcemaps/index.ts
new file mode 100644
index 00000000..eb00b94d
--- /dev/null
+++ b/packages/plugins/rum/src/sourcemaps/index.ts
@@ -0,0 +1,38 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import type { Logger } from '@dd/core/log';
+import type { GlobalContext } from '@dd/core/types';
+import chalk from 'chalk';
+import { outdent } from 'outdent';
+
+import type { RumOptionsWithSourcemaps } from '../types';
+
+import { getSourcemapsFiles } from './files';
+import { sendSourcemaps } from './sender';
+
+export const uploadSourcemaps = async (
+ options: RumOptionsWithSourcemaps,
+ context: GlobalContext,
+ log: Logger,
+) => {
+ // Show a pretty summary of the configuration.
+ const green = chalk.green.bold;
+ const configurationString = Object.entries(options.sourcemaps)
+ .map(([key, value]) => ` - ${key}: ${green(value.toString())}`)
+ .join('\n');
+
+ // Gather the sourcemaps files.
+ const sourcemaps = getSourcemapsFiles(options.sourcemaps, context);
+
+ const summary = outdent`
+ Uploading ${green(sourcemaps.length.toString())} sourcemaps with configuration:
+ ${configurationString}
+ `;
+
+ log(summary, 'info');
+
+ // Send everything.
+ await sendSourcemaps(sourcemaps, options.sourcemaps, context, log);
+};
diff --git a/packages/plugins/rum/src/sourcemaps/payload.ts b/packages/plugins/rum/src/sourcemaps/payload.ts
new file mode 100644
index 00000000..c765e382
--- /dev/null
+++ b/packages/plugins/rum/src/sourcemaps/payload.ts
@@ -0,0 +1,213 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import type { RepositoryData } from '@dd/core/types';
+import { promises as fs } from 'fs';
+
+import type { Sourcemap } from '../types';
+
+export type Payload = {
+ content: Map;
+ errors: string[];
+ warnings: string[];
+};
+
+export type Metadata = {
+ plugin_version: string;
+ project_path: string;
+ service: string;
+ type: string;
+ version: string;
+ git_repository_url?: string;
+ git_commit_sha?: string;
+};
+
+type FileValidity = {
+ empty: boolean;
+ exists: boolean;
+};
+
+type SourcemapValidity = {
+ file: FileValidity;
+ sourcemap: FileValidity;
+ repeatedPrefix: string;
+};
+
+export interface LocalAppendOptions {
+ contentType: string;
+ filename: string;
+}
+
+export interface MultipartStringValue {
+ type: 'string';
+ value: string;
+ options: LocalAppendOptions;
+}
+
+export interface MultipartFileValue {
+ type: 'file';
+ path: string;
+ options: LocalAppendOptions;
+}
+
+export type MultipartValue = MultipartStringValue | MultipartFileValue;
+
+const SLASH_RX = /[/]+|[\\]+/g;
+const SLASH_TRIM_RX = /^[/]+|^[\\]+|[/]+$|[\\]+$/g;
+
+// Verify any repeated pattern between the path and prefix.
+export const prefixRepeat = (path: string, prefix: string): string => {
+ const pathParts = path.replace(SLASH_TRIM_RX, '').split(SLASH_RX);
+ const prefixParts = prefix.replace(SLASH_TRIM_RX, '').split(SLASH_RX);
+ const normalizedPath = pathParts.join('/');
+
+ let result = '';
+
+ for (let i = 0; i < prefixParts.length; i += 1) {
+ const partialPrefix = prefixParts.slice(-i).join('/');
+ if (normalizedPath.startsWith(partialPrefix)) {
+ result = partialPrefix;
+ }
+ }
+
+ return result;
+};
+
+// Verify that every files are available.
+export const checkFile = async (path: string): Promise => {
+ const validity: FileValidity = {
+ empty: false,
+ exists: true,
+ };
+
+ try {
+ const stats = await fs.stat(path);
+ if (stats.size === 0) {
+ validity.empty = true;
+ }
+ } catch (error: any) {
+ if (error.code === 'ENOENT') {
+ validity.exists = false;
+ } else {
+ // Other kind of error
+ throw error;
+ }
+ }
+
+ return validity;
+};
+
+const getSourcemapValidity = async (
+ sourcemap: Sourcemap,
+ prefix: string,
+): Promise => {
+ const [resultMinFile, resultSourcemap] = await Promise.all([
+ checkFile(sourcemap.minifiedFilePath),
+ checkFile(sourcemap.sourcemapFilePath),
+ ]);
+
+ return {
+ file: resultMinFile,
+ sourcemap: resultSourcemap,
+ repeatedPrefix: prefixRepeat(sourcemap.relativePath, prefix),
+ };
+};
+
+export const getPayload = async (
+ sourcemap: Sourcemap,
+ metadata: Metadata,
+ prefix: string,
+ git?: RepositoryData,
+): Promise => {
+ const validity = await getSourcemapValidity(sourcemap, prefix);
+ const errors: string[] = [];
+ const warnings: string[] = [];
+ const content = new Map([
+ [
+ 'event',
+ {
+ type: 'string',
+ options: {
+ contentType: 'application/json',
+ filename: 'event',
+ },
+ value: JSON.stringify({
+ ...metadata,
+ minified_url: sourcemap.minifiedUrl,
+ }),
+ },
+ ],
+ [
+ 'source_map',
+ {
+ type: 'file',
+ path: sourcemap.sourcemapFilePath,
+ options: { filename: 'source_map', contentType: 'application/json' },
+ },
+ ],
+ [
+ 'minified_file',
+ {
+ type: 'file',
+ path: sourcemap.minifiedFilePath,
+ options: { filename: 'minified_file', contentType: 'application/javascript' },
+ },
+ ],
+ ]);
+
+ // Add git payload if available.
+ if (git) {
+ try {
+ content.set('repository', {
+ type: 'string',
+ options: {
+ contentType: 'application/json',
+ filename: 'repository',
+ },
+ value: JSON.stringify({
+ data: [
+ {
+ files: git.trackedFilesMatcher.matchSourcemap(
+ sourcemap.sourcemapFilePath,
+ (reason) => {
+ warnings.push(
+ `No tracked files found for sources contained in ${sourcemap.sourcemapFilePath}: "${reason}"`,
+ );
+ },
+ ),
+ hash: git.hash,
+ repository_url: git.remote,
+ },
+ ],
+ // NOTE: Make sure to update the version if the format of the JSON payloads changes in any way.
+ version: 1,
+ }),
+ });
+ } catch (error: any) {
+ warnings.push(
+ `Could not attach git data for sourcemap ${sourcemap.sourcemapFilePath}: ${error.message}`,
+ );
+ }
+ }
+
+ if (validity.file.empty) {
+ errors.push(`Minified file is empty: ${sourcemap.minifiedFilePath}`);
+ }
+ if (!validity.file.exists) {
+ errors.push(`Minified file not found: ${sourcemap.minifiedFilePath}`);
+ }
+ if (validity.sourcemap.empty) {
+ errors.push(`Sourcemap file is empty: ${sourcemap.sourcemapFilePath}`);
+ }
+ if (!validity.sourcemap.exists) {
+ errors.push(`Sourcemap file not found: ${sourcemap.sourcemapFilePath}`);
+ }
+ if (validity.repeatedPrefix) {
+ warnings.push(
+ `The minified file path contains a repeated pattern with the minified path prefix: ${validity.repeatedPrefix}`,
+ );
+ }
+
+ return { content, errors, warnings };
+};
diff --git a/packages/plugins/rum/src/sourcemaps/sender.ts b/packages/plugins/rum/src/sourcemaps/sender.ts
new file mode 100644
index 00000000..a73070a0
--- /dev/null
+++ b/packages/plugins/rum/src/sourcemaps/sender.ts
@@ -0,0 +1,226 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import type { Logger } from '@dd/core/log';
+import type { GlobalContext } from '@dd/core/types';
+import retry from 'async-retry';
+import { File } from 'buffer';
+import chalk from 'chalk';
+import fs from 'fs';
+import PQueue from 'p-queue';
+import { Readable } from 'stream';
+import type { Gzip } from 'zlib';
+import { createGzip } from 'zlib';
+
+import type { RumSourcemapsOptionsWithDefaults, Sourcemap } from '../types';
+
+import type { LocalAppendOptions, Metadata, MultipartFileValue, Payload } from './payload';
+import { getPayload } from './payload';
+
+const errorCodesNoRetry = [400, 403, 413];
+const nbRetries = 5;
+
+type DataResponse = { data: Gzip; headers: Record };
+
+const green = chalk.green.bold;
+
+export const doRequest = async (
+ url: string,
+ // Need a function to get new streams for each retry.
+ getData: () => Promise | DataResponse,
+ onRetry?: (error: Error, attempt: number) => void,
+) => {
+ return retry(
+ async (bail: (e: Error) => void, attempt: number) => {
+ let response: Response;
+ try {
+ const { data, headers } = await getData();
+
+ response = await fetch(url, {
+ method: 'POST',
+ body: data,
+ headers,
+ // This is needed for sending body in NodeJS' Fetch.
+ // https://github.com/nodejs/node/issues/46221
+ duplex: 'half',
+ });
+ } catch (error: any) {
+ // We don't want to retry if there is a non-fetch related error.
+ bail(new Error(error));
+ return;
+ }
+
+ if (!response.ok) {
+ // Not instantiating the error here, as it will make Jest throw in the tests.
+ const error = `HTTP ${response.status} ${response.statusText}`;
+ if (errorCodesNoRetry.includes(response.status)) {
+ bail(new Error(error));
+ return;
+ } else {
+ // Trigger the retry.
+ throw new Error(error);
+ }
+ }
+
+ try {
+ // Await it so we catch any parsing error and bail.
+ const result = await response.json();
+ return result;
+ } catch (error: any) {
+ // We don't want to retry on parsing errors.
+ bail(new Error(error));
+ }
+ },
+ {
+ retries: nbRetries,
+ onRetry,
+ },
+ );
+};
+
+// From a path, returns a File to use with native FormData and fetch.
+const getFile = async (path: string, options: LocalAppendOptions) => {
+ // @ts-expect-error openAsBlob is not in the NodeJS types until 19+
+ if (typeof fs.openAsBlob === 'function') {
+ // Support NodeJS 19+
+ // @ts-expect-error openAsBlob is not in the NodeJS types until 19+
+ const blob = await fs.openAsBlob(path, { type: options.contentType });
+ return new File([blob], options.filename);
+ } else {
+ // Support NodeJS 18-
+ const stream = Readable.toWeb(fs.createReadStream(path));
+ const blob = await new Response(stream).blob();
+ const file = new File([blob], options.filename, { type: options.contentType });
+ return file;
+ }
+};
+
+// Use a function to get new streams for each retry.
+export const getData =
+ (payload: Payload, defaultHeaders: Record = {}) =>
+ async (): Promise => {
+ const form = new FormData();
+ const gz = createGzip();
+
+ for (const [key, content] of payload.content) {
+ const value =
+ content.type === 'file'
+ ? // eslint-disable-next-line no-await-in-loop
+ await getFile(content.path, content.options)
+ : new Blob([content.value], { type: content.options.contentType });
+
+ form.append(key, value, content.options.filename);
+ }
+
+ // GZip data, we use a Request to serialize the data and transform it into a stream.
+ const req = new Request('fake://url', { method: 'POST', body: form });
+ const formStream = Readable.fromWeb(req.body!);
+ const data = formStream.pipe(gz);
+
+ const headers = {
+ 'Content-Encoding': 'gzip',
+ ...defaultHeaders,
+ ...Object.fromEntries(req.headers.entries()),
+ };
+
+ return { data, headers };
+ };
+
+export const upload = async (
+ payloads: Payload[],
+ options: RumSourcemapsOptionsWithDefaults,
+ context: GlobalContext,
+ log: Logger,
+) => {
+ if (!context.auth?.apiKey) {
+ throw new Error('No authentication token provided');
+ }
+
+ if (payloads.length === 0) {
+ log('No sourcemaps to upload', 'warn');
+ return;
+ }
+
+ const queue = new PQueue({ concurrency: options.maxConcurrency });
+ const defaultHeaders = {
+ 'DD-API-KEY': context.auth.apiKey,
+ 'DD-EVP-ORIGIN': `${context.bundler.name}-build-plugin_sourcemaps`,
+ 'DD-EVP-ORIGIN-VERSION': context.version,
+ };
+
+ for (const payload of payloads) {
+ const metadata = {
+ sourcemap: (payload.content.get('source_map') as MultipartFileValue)?.path.replace(
+ context.outputDir,
+ '.',
+ ),
+ file: (payload.content.get('minified_file') as MultipartFileValue)?.path.replace(
+ context.outputDir,
+ '.',
+ ),
+ };
+
+ log(`Queuing ${green(metadata.sourcemap)} | ${green(metadata.file)}`);
+
+ // eslint-disable-next-line no-await-in-loop
+ queue.add(async () => {
+ await doRequest(
+ options.intakeUrl,
+ getData(payload, defaultHeaders),
+ (error: Error, attempt: number) => {
+ log(
+ `Failed to upload sourcemaps: ${error.message}\nRetrying ${attempt}/${nbRetries}`,
+ 'warn',
+ );
+ },
+ );
+ log(`Sent ${green(metadata.sourcemap)} | ${green(metadata.file)}`);
+ });
+ }
+
+ return queue.onIdle();
+};
+
+export const sendSourcemaps = async (
+ sourcemaps: Sourcemap[],
+ options: RumSourcemapsOptionsWithDefaults,
+ context: GlobalContext,
+ log: Logger,
+) => {
+ const prefix = options.minifiedPathPrefix;
+
+ const metadata: Metadata = {
+ git_repository_url: context.git?.remote,
+ git_commit_sha: context.git?.hash,
+ plugin_version: context.version,
+ project_path: context.outputDir,
+ service: options.service,
+ type: 'js_sourcemap',
+ version: options.releaseVersion,
+ };
+
+ const payloads = await Promise.all(
+ sourcemaps.map((sourcemap) => getPayload(sourcemap, metadata, prefix, context.git)),
+ );
+
+ const errors = payloads.map((payload) => payload.errors).flat();
+ const warnings = payloads.map((payload) => payload.warnings).flat();
+
+ if (errors.length > 0) {
+ const errorMsg = `Failed to upload sourcemaps:\n - ${errors.join('\n - ')}`;
+ log(errorMsg, 'error');
+ throw new Error(errorMsg);
+ }
+
+ if (warnings.length > 0) {
+ log(`Warnings while uploading sourcemaps:\n - ${warnings.join('\n - ')}`, 'warn');
+ }
+
+ try {
+ await upload(payloads, options, context, log);
+ } catch (error: any) {
+ log(`Failed to upload sourcemaps: ${error.message}`, 'error');
+ throw error;
+ }
+};
diff --git a/packages/plugins/rum/src/types.ts b/packages/plugins/rum/src/types.ts
new file mode 100644
index 00000000..6e9a331f
--- /dev/null
+++ b/packages/plugins/rum/src/types.ts
@@ -0,0 +1,47 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import type { GetPluginsOptions } from '@dd/core/types';
+
+import type { CONFIG_KEY } from './constants';
+
+export type MinifiedPathPrefix = `http://${string}` | `https://${string}` | `/${string}`;
+
+export type RumSourcemapsOptions = {
+ dryRun?: boolean;
+ intakeUrl?: string;
+ maxConcurrency?: number;
+ minifiedPathPrefix: MinifiedPathPrefix;
+ releaseVersion: string;
+ service: string;
+};
+
+export type RumOptions = {
+ disabled?: boolean;
+ sourcemaps?: RumSourcemapsOptions;
+};
+
+export type RumSourcemapsOptionsWithDefaults = Required;
+
+export type RumOptionsWithDefaults = {
+ disabled?: boolean;
+ sourcemaps?: RumSourcemapsOptionsWithDefaults;
+};
+
+export type RumOptionsWithSourcemaps = {
+ disabled?: boolean;
+ sourcemaps: RumSourcemapsOptionsWithDefaults;
+};
+
+export interface OptionsWithRum extends GetPluginsOptions {
+ [CONFIG_KEY]: RumOptions;
+}
+
+export type Sourcemap = {
+ minifiedFilePath: string;
+ minifiedPathPrefix: MinifiedPathPrefix;
+ minifiedUrl: string;
+ relativePath: string;
+ sourcemapFilePath: string;
+};
diff --git a/packages/plugins/rum/src/validate.ts b/packages/plugins/rum/src/validate.ts
new file mode 100644
index 00000000..33a8f3ad
--- /dev/null
+++ b/packages/plugins/rum/src/validate.ts
@@ -0,0 +1,111 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import chalk from 'chalk';
+
+import { CONFIG_KEY, PLUGIN_NAME } from './constants';
+import type {
+ OptionsWithRum,
+ RumOptions,
+ RumOptionsWithDefaults,
+ RumSourcemapsOptionsWithDefaults,
+} from './types';
+
+export const defaultIntakeUrl = `https://sourcemap-intake.${process.env.DATADOG_SITE || 'datadoghq.com'}/api/v2/srcmap`;
+
+// Deal with validation and defaults here.
+export const validateOptions = (config: Partial): RumOptionsWithDefaults => {
+ const errors: string[] = [];
+
+ // Validate and add defaults sub-options.
+ const sourcemapsResults = validateSourcemapsOptions(config);
+ errors.push(...sourcemapsResults.errors);
+
+ // Throw if there are any errors.
+ if (errors.length) {
+ throw new Error(`Invalid configuration for ${PLUGIN_NAME}:\n - ${errors.join('\n - ')}`);
+ }
+
+ // Build the final configuration.
+ const toReturn: RumOptionsWithDefaults = {
+ ...config[CONFIG_KEY],
+ sourcemaps: undefined,
+ };
+
+ // Fill in the defaults.
+ if (sourcemapsResults.config) {
+ toReturn.sourcemaps = sourcemapsResults.config;
+ }
+
+ return toReturn;
+};
+
+type ToReturn = {
+ errors: string[];
+ config?: T;
+};
+
+const validateMinifiedPathPrefix = (minifiedPathPrefix: string): boolean => {
+ let host;
+ try {
+ const objUrl = new URL(minifiedPathPrefix!);
+ host = objUrl.host;
+ } catch {
+ // Do nothing.
+ }
+
+ if (!host && !minifiedPathPrefix!.startsWith('/')) {
+ return false;
+ }
+
+ return true;
+};
+
+export const validateSourcemapsOptions = (
+ config: Partial,
+): ToReturn => {
+ const red = chalk.bold.red;
+ const validatedOptions: RumOptions = config[CONFIG_KEY] || {};
+ const toReturn: ToReturn> = {
+ errors: [],
+ };
+
+ if (validatedOptions.sourcemaps) {
+ // Validate the configuration.
+ if (!validatedOptions.sourcemaps.releaseVersion) {
+ toReturn.errors.push(`${red('sourcemaps.releaseVersion')} is required.`);
+ }
+ if (!validatedOptions.sourcemaps.service) {
+ toReturn.errors.push(`${red('sourcemaps.service')} is required.`);
+ }
+ if (!validatedOptions.sourcemaps.minifiedPathPrefix) {
+ toReturn.errors.push(`${red('sourcemaps.minifiedPathPrefix')} is required.`);
+ }
+
+ // Validate the minifiedPathPrefix.
+ if (validatedOptions.sourcemaps.minifiedPathPrefix) {
+ if (!validateMinifiedPathPrefix(validatedOptions.sourcemaps.minifiedPathPrefix)) {
+ toReturn.errors.push(
+ `${red('sourcemaps.minifiedPathPrefix')} must be a valid URL or start with '/'.`,
+ );
+ }
+ }
+
+ // Add the defaults.
+ const sourcemapsWithDefaults: RumSourcemapsOptionsWithDefaults = {
+ dryRun: false,
+ maxConcurrency: 20,
+ intakeUrl:
+ process.env.DATADOG_SOURCEMAP_INTAKE_URL ||
+ validatedOptions.sourcemaps.intakeUrl ||
+ defaultIntakeUrl,
+ ...validatedOptions.sourcemaps,
+ };
+
+ // Save the config.
+ toReturn.config = sourcemapsWithDefaults;
+ }
+
+ return toReturn;
+};
diff --git a/packages/tests/tsconfig.json b/packages/plugins/rum/tsconfig.json
similarity index 55%
rename from packages/tests/tsconfig.json
rename to packages/plugins/rum/tsconfig.json
index 7d6eccaf..6c1d3065 100644
--- a/packages/tests/tsconfig.json
+++ b/packages/plugins/rum/tsconfig.json
@@ -1,13 +1,10 @@
{
- "extends": "../../tsconfig.json",
+ "extends": "../../../tsconfig.json",
"compilerOptions": {
"baseUrl": "./",
- "esModuleInterop": true,
- "module": "Node16",
- "moduleResolution": "node16",
"rootDir": "./",
"outDir": "./dist"
},
"include": ["**/*"],
"exclude": ["dist", "node_modules"]
-}
+}
\ No newline at end of file
diff --git a/packages/plugins/telemetry/package.json b/packages/plugins/telemetry/package.json
index 4793ade1..7c5e3d13 100644
--- a/packages/plugins/telemetry/package.json
+++ b/packages/plugins/telemetry/package.json
@@ -26,11 +26,11 @@
"dependencies": {
"@dd/core": "workspace:*",
"chalk": "2.3.1",
- "esbuild": "0.20.2",
+ "esbuild": "0.21.5",
"fs-extra": "7.0.1",
"pretty-bytes": "5.6.0",
- "unplugin": "1.10.1",
- "webpack": "5.49.0"
+ "unplugin": "1.11.0",
+ "webpack": "5.92.1"
},
"devDependencies": {
"@types/chalk": "2.2.0",
diff --git a/packages/tests/jest.config.js b/packages/tests/jest.config.js
index d92687c7..c845cc9b 100644
--- a/packages/tests/jest.config.js
+++ b/packages/tests/jest.config.js
@@ -5,18 +5,9 @@
module.exports = {
// Automatically clear mock calls and instances between every test
clearMocks: true,
- preset: 'ts-jest',
+ preset: 'ts-jest/presets/js-with-ts',
reporters: [['default', { summaryThreshold: 0 }]],
testEnvironment: 'node',
testMatch: ['**/*.test.*'],
- transform: {
- '^.+\\.tsx?$': [
- 'ts-jest',
- {
- tsconfig: 'tsconfig.json',
- packageJson: 'package.json',
- },
- ],
- },
roots: ['./src/'],
};
diff --git a/packages/tests/package.json b/packages/tests/package.json
index 681bdeec..ef619668 100644
--- a/packages/tests/package.json
+++ b/packages/tests/package.json
@@ -11,20 +11,18 @@
"url": "https://github.com/DataDog/build-plugins",
"directory": "packages/tests"
},
- "workspaces": [
- "src/plugins/**/mocks/projects/*",
- "src/plugins/**/mocks/projects/*/workspaces/*"
- ],
"exports": {
"./*": "./src/*.ts",
"./fixtures/*": "./src/fixtures/*",
+ "./helpers/*": "./src/helpers/*.ts",
"./plugins/telemetry/*": "./src/plugins/telemetry/*.ts"
},
"scripts": {
"build": "yarn clean && tsc",
"clean": "rm -rf dist",
"typecheck": "tsc --noEmit",
- "test": "NODE_OPTIONS=\"--openssl-legacy-provider ${NODE_OPTIONS:-}\" jest --verbose"
+ "test": "yarn test:noisy --silent",
+ "test:noisy": "NODE_OPTIONS=\"--openssl-legacy-provider ${NODE_OPTIONS:-}\" jest --verbose"
},
"dependencies": {
"@datadog/esbuild-plugin": "workspace:*",
@@ -38,9 +36,12 @@
"devDependencies": {
"@types/jest": "29.5.12",
"@types/node": "^18",
- "esbuild": "0.20.2",
+ "@types/webpack4": "npm:@types/webpack@4.41.38",
+ "esbuild": "0.21.5",
"memfs": "4.9.2",
+ "nock": "14.0.0-beta.7",
"typescript": "5.4.3",
- "webpack": "5.49.0"
+ "webpack": "5.92.1",
+ "webpack4": "npm:webpack@4.47.0"
}
}
diff --git a/packages/tests/src/core/plugins/git/index.test.ts b/packages/tests/src/core/plugins/git/index.test.ts
index f1b79338..78a1c209 100644
--- a/packages/tests/src/core/plugins/git/index.test.ts
+++ b/packages/tests/src/core/plugins/git/index.test.ts
@@ -3,8 +3,12 @@
// Copyright 2019-Present Datadog, Inc.
import { getRepositoryData } from '@dd/core/plugins/git/helpers';
-import { getPlugins } from '@dd/telemetry-plugins';
-import { defaultPluginOptions, getFetchMock, runBundlers } from '@dd/tests/helpers';
+import { getPlugins as getRumPlugins } from '@dd/rum-plugins';
+import { getPlugins as getTelemetryPlugins } from '@dd/telemetry-plugins';
+import { defaultPluginOptions } from '@dd/tests/helpers/mocks';
+import { runBundlers } from '@dd/tests/helpers/runBundlers';
+import { API_PATH, FAKE_URL, getSourcemapsConfiguration } from '@dd/tests/plugins/rum/testHelpers';
+import nock from 'nock';
jest.mock('@dd/telemetry-plugins', () => {
const originalModule = jest.requireActual('@dd/telemetry-plugins');
@@ -14,10 +18,13 @@ jest.mock('@dd/telemetry-plugins', () => {
};
});
-const getPluginsMocked = jest.mocked(getPlugins);
-const mockGitData = {
- data: 'data',
-};
+jest.mock('@dd/rum-plugins', () => {
+ const originalModule = jest.requireActual('@dd/rum-plugins');
+ return {
+ ...originalModule,
+ getPlugins: jest.fn(() => []),
+ };
+});
jest.mock('@dd/core/plugins/git/helpers', () => {
const originalModule = jest.requireActual('@dd/core/plugins/git/helpers');
@@ -27,34 +34,76 @@ jest.mock('@dd/core/plugins/git/helpers', () => {
};
});
-global.fetch = jest.fn(() => {
- return getFetchMock();
-});
+const getTelemetryPluginsMocked = jest.mocked(getTelemetryPlugins);
+const getRumPluginsMocked = jest.mocked(getRumPlugins);
+const mockGitData = {
+ data: 'data',
+};
const getRepositoryDataMocked = jest.mocked(getRepositoryData);
describe('Git Plugin', () => {
+ beforeAll(() => {
+ // Mock requests.
+ nock(FAKE_URL).post(API_PATH).reply(200, {}).persist();
+ });
+
+ afterAll(() => {
+ nock.cleanAll();
+ });
+
describe('It should run', () => {
- test('by default and add the relevant data to the context.', async () => {
+ test('by default with sourcemaps.', async () => {
+ const pluginConfig = {
+ ...defaultPluginOptions,
+ rum: {
+ sourcemaps: getSourcemapsConfiguration(),
+ },
+ };
+
+ await runBundlers(pluginConfig);
+
+ // This will fail when we add new bundlers to support.
+ // It is intended so we keep an eye on it whenever we add a new bundler.
+ expect(getRepositoryDataMocked).toHaveBeenCalledTimes(3);
+ });
+
+ test('and add the relevant data to the context.', async () => {
const pluginConfig = {
...defaultPluginOptions,
telemetry: {},
+ rum: {
+ sourcemaps: getSourcemapsConfiguration(),
+ },
};
- const results = await runBundlers(pluginConfig);
- expect(getRepositoryDataMocked).toHaveBeenCalledTimes(results.length);
+
+ await runBundlers(pluginConfig);
// Confirm every call gets the git data in the context.
- for (const call of getPluginsMocked.mock.calls) {
- expect(call[1]).toMatchObject({
- git: mockGitData,
- });
+ for (const mock of [getTelemetryPluginsMocked.mock, getRumPluginsMocked.mock]) {
+ for (const call of mock.calls) {
+ expect(call[1]).toMatchObject({
+ git: mockGitData,
+ });
+ }
}
});
});
+
describe('It should not run', () => {
+ test('by default without sourcemaps.', async () => {
+ const pluginConfig = {
+ ...defaultPluginOptions,
+ };
+ await runBundlers(pluginConfig);
+ expect(getRepositoryDataMocked).not.toHaveBeenCalled();
+ });
test('if we disable it from the configuration', async () => {
const pluginConfig = {
...defaultPluginOptions,
+ rum: {
+ sourcemaps: getSourcemapsConfiguration(),
+ },
disableGit: true,
};
await runBundlers(pluginConfig);
diff --git a/packages/tests/src/core/plugins/global-context/index.test.ts b/packages/tests/src/core/plugins/global-context/index.test.ts
index 712fec2c..741b854f 100644
--- a/packages/tests/src/core/plugins/global-context/index.test.ts
+++ b/packages/tests/src/core/plugins/global-context/index.test.ts
@@ -2,8 +2,11 @@
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2019-Present Datadog, Inc.
+import type { GlobalContext, Options } from '@dd/core/types';
+import { uploadSourcemaps } from '@dd/rum-plugins/sourcemaps/index';
import { getPlugins } from '@dd/telemetry-plugins';
-import { defaultPluginOptions, runBundlers } from '@dd/tests/helpers';
+import { BUNDLERS, defaultDestination, defaultPluginOptions } from '@dd/tests/helpers/mocks';
+import { runBundlers } from '@dd/tests/helpers/runBundlers';
jest.mock('@dd/telemetry-plugins', () => {
const originalModule = jest.requireActual('@dd/telemetry-plugins');
@@ -13,10 +16,27 @@ jest.mock('@dd/telemetry-plugins', () => {
};
});
+jest.mock('@dd/rum-plugins/sourcemaps/index', () => {
+ const originalModule = jest.requireActual('@dd/rum-plugins/sourcemaps/index');
+ return {
+ ...originalModule,
+ uploadSourcemaps: jest.fn(),
+ };
+});
+
const getPluginsMocked = jest.mocked(getPlugins);
+const uploadSourcemapsMocked = jest.mocked(uploadSourcemaps);
describe('Global Context Plugin', () => {
test('It should inject context in the other plugins.', async () => {
+ // Intercept context to verify it at the moment it's sent.
+ const contextResults: GlobalContext[] = [];
+ getPluginsMocked.mockImplementation((options, context) => {
+ // We remove git for better readability.
+ contextResults.push({ ...context, git: undefined });
+ return [];
+ });
+
const pluginConfig = {
...defaultPluginOptions,
telemetry: {},
@@ -25,9 +45,9 @@ describe('Global Context Plugin', () => {
await runBundlers(pluginConfig);
// Confirm every call shares the options and the global context
- for (const call of getPluginsMocked.mock.calls) {
- expect(call[0]).toEqual(pluginConfig);
- expect(call[1]).toEqual({
+ expect(contextResults).toHaveLength(3);
+ for (const context of contextResults) {
+ expect(context).toEqual({
auth: expect.objectContaining({
apiKey: expect.any(String),
}),
@@ -36,9 +56,62 @@ describe('Global Context Plugin', () => {
config: expect.any(Object),
},
cwd: expect.any(String),
- git: expect.any(Object),
+ outputDir: expect.any(String),
version: expect.any(String),
});
}
});
+
+ test('It should give the list of files produced by the build', async () => {
+ // Intercept context to verify it at the moment it's sent.
+ const contextResults: GlobalContext[] = [];
+ uploadSourcemapsMocked.mockImplementation((options, context, log) => {
+ // We remove git for better readability.
+ contextResults.push({ ...context, git: undefined });
+ return Promise.resolve();
+ });
+
+ const pluginConfig: Options = {
+ ...defaultPluginOptions,
+ rum: {
+ sourcemaps: {
+ minifiedPathPrefix: 'http://path',
+ releaseVersion: '1.0.0',
+ service: 'service',
+ },
+ },
+ };
+
+ await runBundlers(pluginConfig);
+
+ // This will fail when we add new bundlers to support.
+ // It is intended so we keep an eye on it whenever we add a new bundler.
+ expect(contextResults).toHaveLength(3);
+ for (const context of contextResults) {
+ expect(context.outputFiles).toBeDefined();
+ expect(context.outputFiles).toHaveLength(2);
+
+ let matchedFile = false;
+ let matchedSourcemap = false;
+
+ for (const file of context.outputFiles!) {
+ if (
+ file.filepath.match(
+ new RegExp(`^${defaultDestination}/(${BUNDLERS.join('|')})/main.js$`),
+ )
+ ) {
+ matchedFile = true;
+ } else if (
+ file.filepath.match(
+ new RegExp(`^${defaultDestination}/(${BUNDLERS.join('|')})/main.js.map$`),
+ )
+ ) {
+ matchedSourcemap = true;
+ }
+ }
+
+ expect(matchedFile).toBe(true);
+ expect(matchedSourcemap).toBe(true);
+ }
+ });
});
diff --git a/packages/tests/src/factory/index.test.ts b/packages/tests/src/factory/index.test.ts
index 67bbf3c1..faa85c9c 100644
--- a/packages/tests/src/factory/index.test.ts
+++ b/packages/tests/src/factory/index.test.ts
@@ -3,8 +3,7 @@
// Copyright 2019-Present Datadog, Inc.
import { getPlugins } from '@dd/telemetry-plugins';
-
-import { runBundlers } from '../helpers';
+import { runBundlers } from '@dd/tests/helpers/runBundlers';
jest.mock('@dd/telemetry-plugins', () => {
const originalModule = jest.requireActual('@dd/telemetry-plugins');
@@ -21,6 +20,7 @@ describe('Factory', () => {
await runBundlers({ telemetry: { disabled: true } });
expect(getPluginsMocked).not.toHaveBeenCalled();
});
+
test('It should call an enabled plugin', async () => {
const results = await runBundlers({ telemetry: { disabled: false } });
expect(getPluginsMocked).toHaveBeenCalledTimes(results.length);
diff --git a/packages/tests/src/fixtures/project/.gitignore b/packages/tests/src/fixtures/project/.gitignore
new file mode 100644
index 00000000..9855bef7
--- /dev/null
+++ b/packages/tests/src/fixtures/project/.gitignore
@@ -0,0 +1,3 @@
+esbuild-output
+webpack5-output
+webpack4-output
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/src/file0000.js b/packages/tests/src/fixtures/project/src/file0000.js
similarity index 99%
rename from packages/tests/src/plugins/telemetry/mocks/projects/esbuild/src/file0000.js
rename to packages/tests/src/fixtures/project/src/file0000.js
index a52d4a77..adf46ea5 100644
--- a/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/src/file0000.js
+++ b/packages/tests/src/fixtures/project/src/file0000.js
@@ -2,7 +2,7 @@
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2019-Present Datadog, Inc.
-import fn2 from 'sub_app/file0001.js';
+import fn2 from '../workspaces/app/file0001.js';
import fn1 from './file0001.js';
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/src/file0001.js b/packages/tests/src/fixtures/project/src/file0001.js
similarity index 97%
rename from packages/tests/src/plugins/telemetry/mocks/projects/webpack5/src/file0001.js
rename to packages/tests/src/fixtures/project/src/file0001.js
index cdf4f0ae..8e784920 100644
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/src/file0001.js
+++ b/packages/tests/src/fixtures/project/src/file0001.js
@@ -2,7 +2,7 @@
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2019-Present Datadog, Inc.
-import fn2 from 'webpack5_app/file0000.js';
+import fn2 from '../workspaces/app/file0000.js';
import fn1 from './file0000.js';
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/workspaces/app/file0000.js b/packages/tests/src/fixtures/project/workspaces/app/file0000.js
similarity index 100%
rename from packages/tests/src/plugins/telemetry/mocks/projects/esbuild/workspaces/app/file0000.js
rename to packages/tests/src/fixtures/project/workspaces/app/file0000.js
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/workspaces/app/file0001.js b/packages/tests/src/fixtures/project/workspaces/app/file0001.js
similarity index 100%
rename from packages/tests/src/plugins/telemetry/mocks/projects/esbuild/workspaces/app/file0001.js
rename to packages/tests/src/fixtures/project/workspaces/app/file0001.js
diff --git a/packages/tests/src/helpers.ts b/packages/tests/src/helpers.ts
deleted file mode 100644
index 0e34d157..00000000
--- a/packages/tests/src/helpers.ts
+++ /dev/null
@@ -1,127 +0,0 @@
-// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
-// This product includes software developed at Datadog (https://www.datadoghq.com/).
-// Copyright 2019-Present Datadog, Inc.
-
-import { datadogEsbuildPlugin } from '@datadog/esbuild-plugin';
-import { datadogWebpackPlugin } from '@datadog/webpack-plugin';
-import type { GlobalContext, Options } from '@dd/core/types';
-import esbuild from 'esbuild';
-import path from 'path';
-import webpack from 'webpack';
-
-type BundlerOptions = {
- entry?: string;
- destination?: string;
-};
-
-export const defaultPluginOptions: Options = {
- auth: {
- apiKey: '123',
- },
- logLevel: 'debug',
-};
-
-export const getContextMock = (options: Partial = {}): GlobalContext => {
- return {
- auth: { apiKey: '123' },
- cwd: '/cwd/path',
- version: '1.2.3',
- bundler: { name: 'esbuild' },
- ...options,
- };
-};
-
-export const getFetchMock = (options: Partial = {}) => {
- return Promise.resolve({
- ...new Response(),
- ok: true,
- status: 200,
- statusText: 'OK',
- json: () => Promise.resolve({}),
- ...options,
- });
-};
-
-const getWebpackOptions = (
- pluginOptionOverrides: Options = {},
- bundlerOptions: BundlerOptions = {},
-): webpack.Configuration => {
- const entry = bundlerOptions?.entry || defaultEntry;
- const destination = bundlerOptions?.destination || defaultDestination;
-
- const newPluginOptions = {
- ...defaultPluginOptions,
- ...pluginOptionOverrides,
- };
-
- return {
- entry,
- output: {
- path: path.join(destination, 'webpack'),
- filename: `[name].js`,
- },
- devtool: 'source-map',
- plugins: [datadogWebpackPlugin(newPluginOptions)],
- };
-};
-
-const getEsbuildOptions = (
- pluginOptionOverrides: Options = {},
- bundlerOptions: BundlerOptions = {},
-): esbuild.BuildOptions => {
- const entry = bundlerOptions?.entry || defaultEntry;
- const destination = bundlerOptions?.destination || defaultDestination;
-
- const newPluginOptions = {
- ...defaultPluginOptions,
- ...pluginOptionOverrides,
- };
-
- return {
- bundle: true,
- sourcemap: true,
- entryPoints: [entry],
- outfile: path.join(destination, 'esbuild', 'index.js'),
- plugins: [datadogEsbuildPlugin(newPluginOptions)],
- };
-};
-
-export const defaultEntry = '@dd/tests/fixtures/index.js';
-export const defaultDestination = path.resolve(__dirname, './dist');
-
-export const runWebpack = async (
- pluginOptions: Options = {},
- bundlerOptions: BundlerOptions = {},
-) => {
- const bundlerConfigs = getWebpackOptions(pluginOptions, bundlerOptions);
- return new Promise((resolve) => {
- webpack(bundlerConfigs, (err, stats) => {
- if (err) {
- console.log(err);
- }
- resolve(stats);
- });
- });
-};
-
-export const runEsbuild = async (
- pluginOptions: Options = {},
- bundlerOptions: BundlerOptions = {},
-) => {
- const bundlerConfigs = getEsbuildOptions(pluginOptions, bundlerOptions);
- return esbuild.build(bundlerConfigs);
-};
-
-export const runBundlers = async (
- pluginOptions: Options = {},
- bundlerOptions: BundlerOptions = {},
-) => {
- const promises = [];
-
- promises.push(runWebpack(pluginOptions, bundlerOptions));
- promises.push(runEsbuild(pluginOptions, bundlerOptions));
-
- const results = await Promise.all(promises);
-
- return results;
-};
diff --git a/packages/tests/src/helpers/configBundlers.ts b/packages/tests/src/helpers/configBundlers.ts
new file mode 100644
index 00000000..71802e95
--- /dev/null
+++ b/packages/tests/src/helpers/configBundlers.ts
@@ -0,0 +1,80 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import { datadogEsbuildPlugin } from '@datadog/esbuild-plugin';
+import { datadogWebpackPlugin } from '@datadog/webpack-plugin';
+import type { Options } from '@dd/core/types';
+import type { BuildOptions } from 'esbuild';
+import path from 'path';
+import type { Configuration as Configuration4, Plugin } from 'webpack4';
+import type { Configuration } from 'webpack';
+
+import { defaultDestination, defaultEntry, defaultPluginOptions } from './mocks';
+
+export const getWebpackOptions = (
+ pluginOptionOverrides: Options = {},
+ bundlerOptions: Partial = {},
+): Configuration => {
+ const newPluginOptions = {
+ ...defaultPluginOptions,
+ ...pluginOptionOverrides,
+ };
+
+ return {
+ entry: defaultEntry,
+ mode: 'production',
+ output: {
+ path: path.join(defaultDestination, 'webpack'),
+ filename: `[name].js`,
+ },
+ devtool: 'source-map',
+ plugins: [datadogWebpackPlugin(newPluginOptions)],
+ ...bundlerOptions,
+ };
+};
+
+export const getWebpack4Options = (
+ pluginOptionOverrides: Options = {},
+ bundlerOptions: Partial = {},
+): Configuration4 => {
+ const newPluginOptions = {
+ ...defaultPluginOptions,
+ ...pluginOptionOverrides,
+ };
+
+ const plugin = datadogWebpackPlugin(newPluginOptions) as unknown;
+
+ return {
+ // Somehow webpack4 doesn't find @dd/tests/fixtures/index.js
+ entry: './src/fixtures/index.js',
+ output: {
+ path: path.join(defaultDestination, 'webpack'),
+ filename: `[name].js`,
+ },
+ devtool: 'source-map',
+ plugins: [plugin as Plugin],
+ ...bundlerOptions,
+ };
+};
+
+export const getEsbuildOptions = (
+ pluginOptionOverrides: Options = {},
+ bundlerOptions: Partial = {},
+): BuildOptions => {
+ const newPluginOptions = {
+ ...defaultPluginOptions,
+ ...pluginOptionOverrides,
+ };
+
+ return {
+ bundle: true,
+ sourcemap: true,
+ entryPoints: [defaultEntry],
+ outfile: bundlerOptions.outdir
+ ? undefined
+ : path.join(defaultDestination, 'esbuild', 'main.js'),
+ plugins: [datadogEsbuildPlugin(newPluginOptions)],
+ ...bundlerOptions,
+ };
+};
diff --git a/packages/tests/src/helpers/mocks.ts b/packages/tests/src/helpers/mocks.ts
new file mode 100644
index 00000000..ce0a50de
--- /dev/null
+++ b/packages/tests/src/helpers/mocks.ts
@@ -0,0 +1,31 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import type { GlobalContext, Options } from '@dd/core/types';
+import { ROOT } from '@dd/tools/constants';
+import path from 'path';
+
+export const PROJECT_ROOT = path.join(ROOT, 'packages/tests/src/fixtures/project');
+export const BUNDLERS = ['webpack', 'webpack4', 'esbuild'];
+
+export const defaultEntry = '@dd/tests/fixtures/index.js';
+export const defaultDestination = path.resolve(PROJECT_ROOT, '../dist');
+
+export const defaultPluginOptions: Options = {
+ auth: {
+ apiKey: '123',
+ },
+ logLevel: 'debug',
+};
+
+export const getContextMock = (options: Partial = {}): GlobalContext => {
+ return {
+ auth: { apiKey: '123' },
+ cwd: '/cwd/path',
+ outputDir: '/cwd/path',
+ version: '1.2.3',
+ bundler: { name: 'esbuild' },
+ ...options,
+ };
+};
diff --git a/packages/tests/src/helpers/runBundlers.ts b/packages/tests/src/helpers/runBundlers.ts
new file mode 100644
index 00000000..697041e3
--- /dev/null
+++ b/packages/tests/src/helpers/runBundlers.ts
@@ -0,0 +1,73 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import type { Options } from '@dd/core/types';
+import type { BuildOptions } from 'esbuild';
+import esbuild from 'esbuild';
+import { rmSync } from 'fs';
+import type { Configuration as Configuration4 } from 'webpack4';
+import webpack4 from 'webpack4';
+import type { Configuration } from 'webpack';
+import webpack from 'webpack';
+
+import { getEsbuildOptions, getWebpack4Options, getWebpackOptions } from './configBundlers';
+import { defaultDestination } from './mocks';
+
+export const runWebpack = async (
+ pluginOptions: Options = {},
+ bundlerOptions: Partial = {},
+) => {
+ const bundlerConfigs = getWebpackOptions(pluginOptions, bundlerOptions);
+ return new Promise((resolve) => {
+ webpack(bundlerConfigs, (err, stats) => {
+ if (err) {
+ console.error(err);
+ }
+ resolve(stats);
+ });
+ });
+};
+
+export const runWebpack4 = async (
+ pluginOptions: Options = {},
+ bundlerOptions: Partial = {},
+) => {
+ const bundlerConfigs = getWebpack4Options(pluginOptions, bundlerOptions);
+ return new Promise((resolve) => {
+ webpack4(bundlerConfigs, (err, stats) => {
+ if (err) {
+ console.log(err);
+ }
+
+ // Webpack is somehow not exiting gracefully.
+ setTimeout(() => {
+ process.nextTick(() => {
+ resolve(stats);
+ });
+ }, 600);
+ });
+ });
+};
+
+export const runEsbuild = async (
+ pluginOptions: Options = {},
+ bundlerOptions: Partial = {},
+) => {
+ const bundlerConfigs = getEsbuildOptions(pluginOptions, bundlerOptions);
+ return esbuild.build(bundlerConfigs);
+};
+
+export const runBundlers = async (pluginOptions: Options = {}) => {
+ const promises = [];
+
+ rmSync(defaultDestination, { recursive: true, force: true });
+
+ promises.push(runWebpack(pluginOptions));
+ promises.push(runWebpack4(pluginOptions));
+ promises.push(runEsbuild(pluginOptions));
+
+ const results = await Promise.all(promises);
+
+ return results;
+};
diff --git a/packages/tests/src/plugins/rum/index.test.ts b/packages/tests/src/plugins/rum/index.test.ts
new file mode 100644
index 00000000..c91cb553
--- /dev/null
+++ b/packages/tests/src/plugins/rum/index.test.ts
@@ -0,0 +1,58 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import type { GlobalContext } from '@dd/core/types';
+import { uploadSourcemaps } from '@dd/rum-plugins/sourcemaps/index';
+import { runBundlers, runWebpack } from '@dd/tests/helpers/runBundlers';
+
+import { getSourcemapsConfiguration } from './testHelpers';
+
+jest.mock('@dd/rum-plugins/sourcemaps/index', () => {
+ return {
+ uploadSourcemaps: jest.fn(),
+ };
+});
+
+const uploadSourcemapsMock = jest.mocked(uploadSourcemaps);
+
+describe('RUM Plugin', () => {
+ test('It should process the sourcemaps if enabled.', async () => {
+ await runWebpack({
+ rum: {
+ sourcemaps: getSourcemapsConfiguration(),
+ },
+ });
+ expect(uploadSourcemapsMock).toHaveBeenCalled();
+ });
+
+ test('It should process the sourcemaps with the right context.', async () => {
+ const contextResults: GlobalContext[] = [];
+ // Intercept context to verify it at the moment it's sent.
+ uploadSourcemapsMock.mockImplementation((options, context, log) => {
+ contextResults.push({ ...context });
+ return Promise.resolve();
+ });
+
+ await runBundlers({
+ rum: {
+ sourcemaps: getSourcemapsConfiguration(),
+ },
+ });
+
+ // Verify that the mock's expects didn't fail.
+ expect(contextResults).toHaveLength(3);
+ for (const context of contextResults) {
+ expect(context.outputFiles).toBeDefined();
+ expect(context.outputFiles?.length).toBeGreaterThan(0);
+ }
+ });
+
+ test('It should not process the sourcemaps with no options.', async () => {
+ await runBundlers({
+ rum: {},
+ });
+
+ expect(uploadSourcemapsMock).not.toHaveBeenCalled();
+ });
+});
diff --git a/packages/tests/src/plugins/rum/sourcemaps/files.test.ts b/packages/tests/src/plugins/rum/sourcemaps/files.test.ts
new file mode 100644
index 00000000..f4257e18
--- /dev/null
+++ b/packages/tests/src/plugins/rum/sourcemaps/files.test.ts
@@ -0,0 +1,63 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import { getSourcemapsFiles } from '@dd/rum-plugins/sourcemaps/files';
+import { vol } from 'memfs';
+import path from 'path';
+
+import { getContextMock } from '../../../helpers/mocks';
+import { getSourcemapsConfiguration } from '../testHelpers';
+
+jest.mock('fs', () => require('memfs').fs);
+
+const FIXTURES = {
+ // Adding both .js and .mjs files.
+ 'fixtures/common.js': '',
+ 'fixtures/common.min.js.map': '',
+ 'fixtures/common.min.js': '',
+ 'fixtures/common.mjs': '',
+ 'fixtures/common.min.mjs': '',
+ 'fixtures/common.min.mjs.map': '',
+};
+
+describe('RUM Plugin Sourcemaps Files', () => {
+ beforeEach(() => {
+ // Emulate some fixtures.
+ vol.fromJSON(FIXTURES, __dirname);
+ });
+
+ afterEach(() => {
+ vol.reset();
+ });
+
+ test('It should get sourcemap files.', async () => {
+ const sourcemaps = getSourcemapsFiles(
+ getSourcemapsConfiguration({
+ minifiedPathPrefix: '/minified',
+ }),
+ getContextMock({
+ outputDir: __dirname,
+ outputFiles: Object.keys(FIXTURES).map((filepath) => ({
+ filepath: path.join(__dirname, filepath),
+ })),
+ }),
+ );
+
+ expect(sourcemaps.length).toBe(2);
+
+ for (const sourcemap of sourcemaps) {
+ expect(sourcemap).toMatchObject({
+ // Should end with ".min.js" or ".min.mjs".
+ minifiedFilePath: expect.stringMatching(/\.min\.(js|mjs)$/),
+ // Should start with "minified/" and end with ".min.js" or ".min.mjs".
+ minifiedUrl: expect.stringMatching(/^\/minified\/fixtures\/common\.min\.(js|mjs)$/),
+ // Should start with "/" and end with ".min.js" or ".min.mjs".
+ relativePath: expect.stringMatching(/^\/fixtures\/common\.min\.(js|mjs)$/),
+ // Should end with ".map".
+ sourcemapFilePath: expect.stringMatching(/\.map$/),
+ minifiedPathPrefix: '/minified',
+ });
+ }
+ });
+});
diff --git a/packages/tests/src/plugins/rum/sourcemaps/payload.test.ts b/packages/tests/src/plugins/rum/sourcemaps/payload.test.ts
new file mode 100644
index 00000000..951894b1
--- /dev/null
+++ b/packages/tests/src/plugins/rum/sourcemaps/payload.test.ts
@@ -0,0 +1,135 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import { checkFile, getPayload, prefixRepeat } from '@dd/rum-plugins/sourcemaps/payload';
+import { vol } from 'memfs';
+import path from 'path';
+
+import { getMetadataMock, getRepositoryDataMock, getSourcemapMock } from '../testHelpers';
+
+jest.mock('fs', () => require('memfs').fs);
+
+describe('RUM Plugins Sourcemaps Payloads', () => {
+ describe('prefixRepeat', () => {
+ test.each([
+ { prefix: '/testing/path/to', filePath: '/path/to/file.js', expected: 'path/to' },
+ { prefix: '/path/to', filePath: '/to/file.js', expected: 'to' },
+ { prefix: '/prefix/ok', filePath: '/path/to/file.js', expected: '' },
+ { prefix: '/new/prefix/ok', filePath: '/prefix/to/file.js', expected: '' },
+ { prefix: '/', filePath: '/path/to/file.js', expected: '' },
+ ])(
+ 'It should return "$expected" for the prefix "$prefix" and path "$path"',
+ ({ prefix, filePath, expected }) => {
+ expect(prefixRepeat(filePath, prefix)).toBe(expected);
+ },
+ );
+ });
+
+ describe('checkFile', () => {
+ beforeEach(() => {
+ // Emulate some fixtures.
+ vol.fromJSON(
+ {
+ 'fixtures/empty.js': '',
+ 'fixtures/not-empty.js': 'Not empty file',
+ },
+ __dirname,
+ );
+ });
+
+ afterEach(() => {
+ vol.reset();
+ });
+ test.each([
+ { filePath: 'fixtures/not-empty.js', expected: { exists: true, empty: false } },
+ { filePath: 'fixtures/empty.js', expected: { exists: true, empty: true } },
+ { filePath: 'fixtures/not-exist.js', expected: { exists: false, empty: false } },
+ ])(
+ 'It should return "$expected" for the file "$filePath".',
+ async ({ filePath, expected }) => {
+ const validity = await checkFile(path.resolve(__dirname, filePath));
+ expect(validity).toEqual(expected);
+ },
+ );
+ });
+
+ describe('getPayload', () => {
+ beforeEach(() => {
+ // Emulate some fixtures.
+ vol.fromJSON(
+ {
+ '/path/to/minified.min.js': 'Some JS File',
+ '/path/to/sourcemap.js.map':
+ '{"version":3,"sources":["/path/to/minified.min.js"]}',
+ '/path/to/empty.js': '',
+ },
+ __dirname,
+ );
+ });
+
+ afterEach(() => {
+ vol.reset();
+ });
+
+ test('It should add git data if present', async () => {
+ const payload = await getPayload(
+ getSourcemapMock(),
+ getMetadataMock(),
+ '/prefix',
+ getRepositoryDataMock(),
+ );
+
+ expect(payload.content.get('repository')).toMatchObject({
+ type: 'string',
+ options: {
+ contentType: 'application/json',
+ filename: 'repository',
+ },
+ value: expect.any(String),
+ });
+
+ // No errors and no warnings.
+ expect(payload.warnings.length).toBe(0);
+ expect(payload.errors.length).toBe(0);
+ });
+ test('It should transfer errors and warnings', async () => {});
+ test('It should have content for the event, the source_map and the minified_file', async () => {
+ const payload = await getPayload(
+ getSourcemapMock({
+ sourcemapFilePath: '/path/to/sourcemap.js.map',
+ minifiedFilePath: '/path/to/minified.min.js',
+ }),
+ getMetadataMock(),
+ '/prefix',
+ );
+ expect(payload.content.size).toBe(3);
+ expect(payload.content.get('event')).toMatchObject({
+ type: 'string',
+ options: {
+ contentType: 'application/json',
+ filename: 'event',
+ },
+ value: expect.any(String),
+ });
+ expect(payload.content.get('source_map')).toMatchObject({
+ type: 'file',
+ options: {
+ filename: 'source_map',
+ },
+ path: '/path/to/sourcemap.js.map',
+ });
+ expect(payload.content.get('minified_file')).toMatchObject({
+ type: 'file',
+ options: {
+ filename: 'minified_file',
+ },
+ path: '/path/to/minified.min.js',
+ });
+
+ // No errors and no warnings.
+ expect(payload.warnings.length).toBe(0);
+ expect(payload.errors.length).toBe(0);
+ });
+ });
+});
diff --git a/packages/tests/src/plugins/rum/sourcemaps/sender.test.ts b/packages/tests/src/plugins/rum/sourcemaps/sender.test.ts
new file mode 100644
index 00000000..cf2ad616
--- /dev/null
+++ b/packages/tests/src/plugins/rum/sourcemaps/sender.test.ts
@@ -0,0 +1,240 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import type { MultipartValue } from '@dd/rum-plugins/sourcemaps/payload';
+import { doRequest, getData, sendSourcemaps } from '@dd/rum-plugins/sourcemaps/sender';
+import { getContextMock } from '@dd/tests/helpers/mocks';
+import { vol } from 'memfs';
+import nock from 'nock';
+import { Readable, type Stream } from 'stream';
+import { createGzip, unzipSync } from 'zlib';
+
+import {
+ API_PATH,
+ FAKE_URL,
+ INTAKE_URL,
+ getSourcemapMock,
+ getSourcemapsConfiguration,
+} from '../testHelpers';
+
+jest.mock('fs', () => require('memfs').fs);
+
+// Reduce the retry timeout to speed up the tests.
+jest.mock('async-retry', () => {
+ const original = jest.requireActual('async-retry');
+ return jest.fn((callback, options) => {
+ return original(callback, {
+ ...options,
+ minTimeout: 0,
+ maxTimeout: 1,
+ });
+ });
+});
+
+function readFully(stream: Stream): Promise {
+ const chunks: any[] = [];
+ return new Promise((resolve, reject) => {
+ stream.on('data', (chunk) => chunks.push(chunk));
+
+ stream.on('end', () => {
+ resolve(Buffer.concat(chunks));
+ });
+
+ stream.on('error', reject);
+ });
+}
+
+describe('RUM Plugin Sourcemaps', () => {
+ describe('getData', () => {
+ afterEach(() => {
+ vol.reset();
+ });
+ test('It should return the correct data and headers', async () => {
+ // Emulate some fixtures.
+ vol.fromJSON(
+ {
+ '/path/to/minified.min.js': 'Some JS File',
+ '/path/to/sourcemap.js.map':
+ '{"version":3,"sources":["/path/to/minified.min.js"]}',
+ },
+ __dirname,
+ );
+
+ const payload = {
+ content: new Map([
+ [
+ 'source_map',
+ {
+ type: 'file',
+ path: '/path/to/sourcemap.js.map',
+ options: { filename: 'source_map', contentType: 'application/json' },
+ },
+ ],
+ [
+ 'minified_file',
+ {
+ type: 'file',
+ path: '/path/to/minified.min.js',
+ options: {
+ filename: 'minified_file',
+ contentType: 'application/javascript',
+ },
+ },
+ ],
+ ]),
+ errors: [],
+ warnings: [],
+ };
+
+ const { data, headers } = await getData(payload)();
+ const zippedData = await readFully(data);
+ const unzippedData = unzipSync(zippedData).toString('utf-8');
+ const dataLines = unzippedData.split(/[\r\n]/g).filter(Boolean);
+ const boundary = headers['content-type']
+ .split('boundary=')
+ .pop()!
+ .replace(/^(-)+/g, '');
+
+ expect(boundary).toBeTruthy();
+ expect(dataLines[0]).toMatch(boundary);
+ expect(dataLines[dataLines.length - 1]).toMatch(boundary);
+ });
+ });
+
+ describe('sendSourcemaps', () => {
+ afterEach(async () => {
+ nock.cleanAll();
+
+ // Using a setTimeout because it creates an error on the ReadStreams created for the payloads.
+ await new Promise((resolve) => {
+ setTimeout(() => {
+ vol.reset();
+ resolve(true);
+ }, 100);
+ });
+ });
+
+ test('It should upload sourcemaps.', async () => {
+ const scope = nock(FAKE_URL).post(API_PATH).reply(200, {});
+ // Emulate some fixtures.
+ vol.fromJSON(
+ {
+ '/path/to/minified.min.js': 'Some JS File with some content.',
+ '/path/to/sourcemap.js.map':
+ '{"version":3,"sources":["/path/to/minified.min.js"]}',
+ },
+ __dirname,
+ );
+
+ await sendSourcemaps(
+ [getSourcemapMock()],
+ getSourcemapsConfiguration(),
+ getContextMock(),
+ () => {},
+ );
+
+ expect(scope.isDone()).toBe(true);
+ });
+
+ test('It should throw in case of payload issues', async () => {
+ const scope = nock(FAKE_URL).post(API_PATH).reply(200);
+ // Emulate some fixtures.
+ vol.fromJSON(
+ {
+ // Empty file.
+ '/path/to/minified.min.js': '',
+ },
+ __dirname,
+ );
+
+ await expect(async () => {
+ await sendSourcemaps(
+ [getSourcemapMock()],
+ getSourcemapsConfiguration(),
+ getContextMock(),
+ () => {},
+ );
+ }).rejects.toThrow('Failed to upload sourcemaps:');
+
+ expect(scope.isDone()).toBe(false);
+ });
+ });
+
+ describe('doRequest', () => {
+ const getDataStream = () => {
+ const gz = createGzip();
+ const stream = new Readable();
+ stream.push('Some data');
+ stream.push(null);
+ return stream.pipe(gz);
+ };
+ const getDataMock = () => ({
+ data: getDataStream(),
+ headers: {
+ 'Content-Encoding': 'gzip',
+ },
+ });
+
+ afterEach(() => {
+ nock.cleanAll();
+ });
+
+ test('It should do a request', async () => {
+ const scope = nock(FAKE_URL).post(API_PATH).reply(200, {});
+
+ const response = await doRequest(INTAKE_URL, getDataMock);
+
+ expect(scope.isDone()).toBe(true);
+ expect(response).toEqual({});
+ });
+
+ test('It should retry on error', async () => {
+ // Success after 2 retries.
+ const scope = nock(FAKE_URL)
+ .post(API_PATH)
+ .times(2)
+ .reply(404)
+ .post(API_PATH)
+ .reply(200, {});
+
+ const response = await doRequest(INTAKE_URL, getDataMock);
+
+ expect(scope.isDone()).toBe(true);
+ expect(response).toEqual({});
+ });
+
+ test('It should throw on too many retries', async () => {
+ const scope = nock(FAKE_URL)
+ .post(API_PATH)
+ .times(6)
+ .reply(500, 'Internal Server Error');
+
+ await expect(async () => {
+ await doRequest(INTAKE_URL, getDataMock);
+ }).rejects.toThrow('HTTP 500 Internal Server Error');
+ expect(scope.isDone()).toBe(true);
+ });
+
+ test('It should bail on specific status', async () => {
+ const scope = nock(FAKE_URL).post(API_PATH).reply(400, 'Bad Request');
+
+ await expect(async () => {
+ await doRequest(INTAKE_URL, getDataMock);
+ }).rejects.toThrow('HTTP 400 Bad Request');
+ expect(scope.isDone()).toBe(true);
+ });
+
+ test('It should bail on unrelated errors', async () => {
+ const scope = nock(FAKE_URL).post(API_PATH).reply(404);
+ // Creating the data stream outside should make the fetch invocation fail
+ // on the second pass as it will try to read an already consumed stream.
+ const data = getDataStream();
+
+ await expect(async () => {
+ await doRequest(INTAKE_URL, () => ({ data, headers: {} }));
+ }).rejects.toThrow('TypeError: Response body object should not be disturbed or locked');
+ expect(scope.isDone()).toBe(true);
+ });
+ });
+});
diff --git a/packages/tests/src/plugins/rum/testHelpers.ts b/packages/tests/src/plugins/rum/testHelpers.ts
new file mode 100644
index 00000000..c96984ab
--- /dev/null
+++ b/packages/tests/src/plugins/rum/testHelpers.ts
@@ -0,0 +1,72 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import { TrackedFilesMatcher } from '@dd/core/plugins/git/trackedFilesMatcher';
+import type { RepositoryData } from '@dd/core/types';
+import type { Metadata } from '@dd/rum-plugins/sourcemaps/payload';
+import type {
+ RumSourcemapsOptions,
+ RumSourcemapsOptionsWithDefaults,
+ Sourcemap,
+} from '@dd/rum-plugins/types';
+
+export const FAKE_URL = 'https://example.com';
+export const API_PATH = '/v2/srcmap';
+export const INTAKE_URL = `${FAKE_URL}${API_PATH}`;
+
+export const getMinimalSourcemapsConfiguration = (
+ options: Partial = {},
+): RumSourcemapsOptions => {
+ return {
+ minifiedPathPrefix: '/prefix',
+ releaseVersion: '1.0.0',
+ service: 'rum-build-plugin-sourcemaps',
+ ...options,
+ };
+};
+
+export const getSourcemapsConfiguration = (
+ options: Partial = {},
+): RumSourcemapsOptionsWithDefaults => {
+ return {
+ dryRun: false,
+ maxConcurrency: 10,
+ intakeUrl: INTAKE_URL,
+ minifiedPathPrefix: '/prefix',
+ releaseVersion: '1.0.0',
+ service: 'rum-build-plugin-sourcemaps',
+ ...options,
+ };
+};
+
+export const getSourcemapMock = (options: Partial = {}): Sourcemap => {
+ return {
+ minifiedFilePath: '/path/to/minified.min.js',
+ minifiedPathPrefix: '/prefix',
+ minifiedUrl: '/prefix/path/to/minified.js',
+ relativePath: '/path/to/minified.min.js',
+ sourcemapFilePath: '/path/to/sourcemap.js.map',
+ ...options,
+ };
+};
+
+export const getMetadataMock = (options: Partial = {}): Metadata => {
+ return {
+ plugin_version: '1.0.0',
+ project_path: '/path/to/project',
+ service: 'rum-build-plugin-sourcemaps',
+ type: 'js_sourcemap',
+ version: '1.0.0',
+ ...options,
+ };
+};
+
+export const getRepositoryDataMock = (options: Partial = {}): RepositoryData => {
+ return {
+ hash: 'hash',
+ remote: 'remote',
+ trackedFilesMatcher: new TrackedFilesMatcher(['/path/to/minified.min.js']),
+ ...options,
+ };
+};
diff --git a/packages/tests/src/plugins/rum/validate.test.ts b/packages/tests/src/plugins/rum/validate.test.ts
new file mode 100644
index 00000000..29a45ddf
--- /dev/null
+++ b/packages/tests/src/plugins/rum/validate.test.ts
@@ -0,0 +1,132 @@
+// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/).
+// Copyright 2019-Present Datadog, Inc.
+
+import type { RumSourcemapsOptions } from '@dd/rum-plugins/types';
+import { validateOptions, validateSourcemapsOptions } from '@dd/rum-plugins/validate';
+import stripAnsi from 'strip-ansi';
+
+import { getMinimalSourcemapsConfiguration } from './testHelpers';
+
+describe('RUM Plugins validate', () => {
+ describe('validateOptions', () => {
+ test('It should return the validated configuration', () => {
+ const config = validateOptions({
+ auth: {
+ apiKey: '123',
+ },
+ rum: {
+ disabled: false,
+ },
+ });
+
+ expect(config).toEqual({
+ disabled: false,
+ });
+ });
+
+ test('It should throw with an invalid configuration', () => {
+ expect(() => {
+ validateOptions({
+ auth: {
+ apiKey: '123',
+ },
+ rum: {
+ // Invalid configuration, missing required fields.
+ sourcemaps: {} as RumSourcemapsOptions,
+ },
+ });
+ }).toThrow();
+ });
+ });
+ describe('validateSourcemapsOptions', () => {
+ test('It should return errors for each missing required field', () => {
+ const { errors } = validateSourcemapsOptions({
+ rum: {
+ sourcemaps: {} as RumSourcemapsOptions,
+ },
+ });
+
+ expect(errors.length).toBe(3);
+ const expectedErrors = [
+ 'sourcemaps.releaseVersion is required.',
+ 'sourcemaps.service is required.',
+ 'sourcemaps.minifiedPathPrefix is required.',
+ ];
+ expect(errors.map(stripAnsi)).toEqual(expectedErrors);
+ });
+
+ test('It should return the validated configuration with defaults', () => {
+ const configObject: RumSourcemapsOptions = {
+ minifiedPathPrefix: '/path/to/minified',
+ releaseVersion: '1.0.0',
+ service: 'service',
+ };
+
+ const { config, errors } = validateSourcemapsOptions({
+ rum: {
+ sourcemaps: getMinimalSourcemapsConfiguration(configObject),
+ },
+ });
+
+ expect(errors.length).toBe(0);
+ expect(config).toEqual({
+ dryRun: false,
+ maxConcurrency: 20,
+ intakeUrl: 'https://sourcemap-intake.datadoghq.com/api/v2/srcmap',
+ ...configObject,
+ });
+ });
+
+ test('It should return an error with a bad minifiedPathPrefix', () => {
+ const { errors } = validateSourcemapsOptions({
+ rum: {
+ sourcemaps: getMinimalSourcemapsConfiguration({
+ minifiedPathPrefix:
+ 'bad-prefix' as RumSourcemapsOptions['minifiedPathPrefix'],
+ }),
+ },
+ });
+
+ expect(errors.length).toBe(1);
+ expect(stripAnsi(errors[0])).toBe(
+ "sourcemaps.minifiedPathPrefix must be a valid URL or start with '/'.",
+ );
+ });
+
+ test('It should default to the expected intake url', () => {
+ const { config } = validateSourcemapsOptions({
+ rum: {
+ sourcemaps: getMinimalSourcemapsConfiguration(),
+ },
+ });
+
+ expect(config?.intakeUrl).toBe('https://sourcemap-intake.datadoghq.com/api/v2/srcmap');
+ });
+
+ test('It should use the provided configuration as the intake url', () => {
+ const { config } = validateSourcemapsOptions({
+ rum: {
+ sourcemaps: getMinimalSourcemapsConfiguration({
+ intakeUrl: 'https://example.com',
+ }),
+ },
+ });
+
+ expect(config?.intakeUrl).toBe('https://example.com');
+ });
+
+ test('It should use the env var if provided as the intake url', () => {
+ const initialEnvValue = process.env.DATADOG_SOURCEMAP_INTAKE_URL;
+ process.env.DATADOG_SOURCEMAP_INTAKE_URL = 'https://example.com';
+ const { config } = validateSourcemapsOptions({
+ rum: {
+ sourcemaps: getMinimalSourcemapsConfiguration(),
+ },
+ });
+
+ expect(config?.intakeUrl).toBe('https://example.com');
+ process.env.DATADOG_SOURCEMAP_INTAKE_URL = initialEnvValue;
+ });
+ });
+});
diff --git a/packages/tests/src/plugins/telemetry/README.md b/packages/tests/src/plugins/telemetry/README.md
deleted file mode 100644
index caea6965..00000000
--- a/packages/tests/src/plugins/telemetry/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Telemetry Plugin Tests
-
-Right now we have mock projects for:
-
-- [ESBuild](./src/mocks/projects/esbuild)
-- [Webpack 4](./src/mocks/projects/webpack4)
-- [Webpack 5](./src/mocks/projects/webpack5)
-
-## Use a mock project
-
-You should build the project part of your test suite.
-
-```js
-beforeAll(async () => {
- const output = await exec(`yarn workspace project-{{bundler}} build`);
-
- // Setup what you need.
-}, 20000);
-```
diff --git a/packages/tests/src/plugins/telemetry/common/metrics/esbuild.test.ts b/packages/tests/src/plugins/telemetry/common/metrics/esbuild.test.ts
index 0642715c..24e40013 100644
--- a/packages/tests/src/plugins/telemetry/common/metrics/esbuild.test.ts
+++ b/packages/tests/src/plugins/telemetry/common/metrics/esbuild.test.ts
@@ -10,30 +10,51 @@ import {
getAssets,
} from '@dd/telemetry-plugins/common/metrics/esbuild';
import type { Metric, EsbuildStats } from '@dd/telemetry-plugins/types';
-import { exec, PROJECTS_ROOT } from '@dd/tests/plugins/telemetry/testHelpers';
+import { PROJECT_ROOT } from '@dd/tests/helpers/mocks';
+import { runEsbuild } from '@dd/tests/helpers/runBundlers';
+import { prefixPath } from '@dd/tests/plugins/telemetry/testHelpers';
+import fs from 'fs';
import path from 'path';
describe('Telemetry ESBuild Metrics', () => {
describe(`Esbuild`, () => {
let statsJson: EsbuildStats;
- const ESBUILD_ROOT = path.join(PROJECTS_ROOT, `./esbuild`);
- const OUTPUT = path.join(ESBUILD_ROOT, `./esbuild-profile-debug/`);
+ const OUTPUT = path.resolve(PROJECT_ROOT, `./esbuild-output/`);
- beforeAll(async () => {
- const output = await exec(`yarn workspace project-esbuild build`);
-
- // eslint-disable-next-line no-console
- console.log(`Build :`, output.stderr);
+ afterAll(async () => {
+ // Clean
+ fs.rmSync(OUTPUT, { force: true, recursive: true });
+ });
- statsJson = require(path.join(OUTPUT, './bundler.json'));
+ beforeAll(async () => {
+ await runEsbuild(
+ {
+ auth: {
+ apiKey: '',
+ },
+ telemetry: {
+ output: OUTPUT,
+ },
+ },
+ {
+ sourcemap: false,
+ entryPoints: {
+ yolo: prefixPath('./src/file0001.js'),
+ cheesecake: prefixPath('./src/file0000.js'),
+ },
+ outdir: prefixPath('./esbuild-output/dist'),
+ },
+ );
+
+ statsJson = require(path.resolve(OUTPUT, './bundler.json'));
}, 20000);
describe('Modules', () => {
let metrics: Metric[];
beforeAll(() => {
- const indexed = getIndexed(statsJson, ESBUILD_ROOT);
- metrics = getModules(statsJson, indexed, ESBUILD_ROOT);
+ const indexed = getIndexed(statsJson, PROJECT_ROOT);
+ metrics = getModules(statsJson, indexed, PROJECT_ROOT);
});
test('It should give module metrics.', () => {
@@ -49,10 +70,10 @@ describe('Telemetry ESBuild Metrics', () => {
test('It should have 1 metric per module.', () => {
const modules = [
- './src/file0000.js',
- './src/file0001.js',
- './workspaces/app/file0000.js',
- './workspaces/app/file0001.js',
+ prefixPath('./src/file0000.js'),
+ prefixPath('./src/file0001.js'),
+ prefixPath('./workspaces/app/file0000.js'),
+ prefixPath('./workspaces/app/file0001.js'),
];
for (const module of modules) {
@@ -68,8 +89,8 @@ describe('Telemetry ESBuild Metrics', () => {
let metrics: Metric[];
beforeAll(() => {
- const indexed = getIndexed(statsJson, ESBUILD_ROOT);
- metrics = getEntries(statsJson, indexed, ESBUILD_ROOT);
+ const indexed = getIndexed(statsJson, PROJECT_ROOT);
+ metrics = getEntries(statsJson, indexed, PROJECT_ROOT);
});
test('It should give entries metrics.', () => {
@@ -92,8 +113,8 @@ describe('Telemetry ESBuild Metrics', () => {
let metrics: Metric[];
beforeAll(() => {
- const indexed = getIndexed(statsJson, ESBUILD_ROOT);
- metrics = getAssets(statsJson, indexed, ESBUILD_ROOT);
+ const indexed = getIndexed(statsJson, PROJECT_ROOT);
+ metrics = getAssets(statsJson, indexed, PROJECT_ROOT);
});
test('It should give assets metrics.', () => {
diff --git a/packages/tests/src/plugins/telemetry/common/metrics/webpack.test.ts b/packages/tests/src/plugins/telemetry/common/metrics/webpack.test.ts
index a422ad8c..86c834d3 100644
--- a/packages/tests/src/plugins/telemetry/common/metrics/webpack.test.ts
+++ b/packages/tests/src/plugins/telemetry/common/metrics/webpack.test.ts
@@ -11,31 +11,57 @@ import {
getAssets,
} from '@dd/telemetry-plugins/common/metrics/webpack';
import type { StatsJson, Metric } from '@dd/telemetry-plugins/types';
-import { exec, PROJECTS_ROOT } from '@dd/tests/plugins/telemetry/testHelpers';
+import { PROJECT_ROOT } from '@dd/tests/helpers/mocks';
+import { runWebpack, runWebpack4 } from '@dd/tests/helpers/runBundlers';
+import fs from 'fs';
import path from 'path';
describe('Telemetry Webpack Metrics', () => {
for (const version of [4, 5]) {
describe(`Webpack ${version}`, () => {
let statsJson: StatsJson;
- const WEBPACK_ROOT = path.join(PROJECTS_ROOT, `./webpack${version}`);
- const OUTPUT = path.join(WEBPACK_ROOT, `./webpack-profile-debug/`);
+ const OUTPUT = path.resolve(PROJECT_ROOT, `./webpack${version}-output/`);
- beforeAll(async () => {
- const output = await exec(`yarn workspace project-webpack${version} build`);
-
- // eslint-disable-next-line no-console
- console.log(`Build ${version} :`, output.stderr);
+ afterAll(async () => {
+ // Clean
+ fs.rmSync(OUTPUT, { force: true, recursive: true });
+ });
- statsJson = require(path.join(OUTPUT, './bundler.json'));
+ beforeAll(async () => {
+ const runFn = version === 5 ? runWebpack : runWebpack4;
+ await runFn(
+ {
+ auth: {
+ apiKey: '',
+ },
+ telemetry: {
+ output: OUTPUT,
+ },
+ },
+ {
+ context: PROJECT_ROOT,
+ devtool: false,
+ entry: {
+ cheesecake: './src/file0000.js',
+ yolo: './src/file0001.js',
+ },
+ output: {
+ path: path.resolve(PROJECT_ROOT, `./webpack${version}-output/`),
+ filename: '[name].js',
+ chunkFilename: '[name].[contenthash].js',
+ },
+ },
+ );
+
+ statsJson = require(path.resolve(OUTPUT, './bundler.json'));
}, 20000);
describe('Modules', () => {
let metrics: Metric[];
beforeAll(() => {
- const indexed = getIndexed(statsJson, WEBPACK_ROOT);
- metrics = getModules(statsJson, indexed, WEBPACK_ROOT);
+ const indexed = getIndexed(statsJson, PROJECT_ROOT);
+ metrics = getModules(statsJson, indexed, PROJECT_ROOT);
});
test('It should give module metrics.', () => {
@@ -80,7 +106,7 @@ describe('Telemetry Webpack Metrics', () => {
let metrics: Metric[];
beforeAll(() => {
- const indexed = getIndexed(statsJson, WEBPACK_ROOT);
+ const indexed = getIndexed(statsJson, PROJECT_ROOT);
metrics = getEntries(statsJson, indexed);
});
@@ -104,7 +130,7 @@ describe('Telemetry Webpack Metrics', () => {
let metrics: Metric[];
beforeAll(() => {
- const indexed = getIndexed(statsJson, WEBPACK_ROOT);
+ const indexed = getIndexed(statsJson, PROJECT_ROOT);
metrics = getChunks(statsJson, indexed);
});
@@ -134,7 +160,7 @@ describe('Telemetry Webpack Metrics', () => {
let metrics: Metric[];
beforeAll(() => {
- const indexed = getIndexed(statsJson, WEBPACK_ROOT);
+ const indexed = getIndexed(statsJson, PROJECT_ROOT);
metrics = getAssets(statsJson, indexed);
});
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/esbuild.js b/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/esbuild.js
deleted file mode 100644
index 342059d0..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/esbuild.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
-// This product includes software developed at Datadog (https://www.datadoghq.com/).
-// Copyright 2019-Present Datadog, Inc.
-
-const { datadogEsbuildPlugin } = require('@datadog/esbuild-plugin');
-
-require('esbuild')
- .build({
- bundle: true,
- entryPoints: {
- yolo: './src/file0001.js',
- cheesecake: './src/file0000.js',
- },
- outdir: './dist',
- plugins: [
- datadogEsbuildPlugin({
- auth: {
- apiKey: '',
- },
- telemetry: {
- output: './esbuild-profile-debug',
- },
- }),
- ],
- })
- .catch(() => {
- process.exitCode = 1;
- });
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/package.json b/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/package.json
deleted file mode 100644
index 39aea16c..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/package.json
+++ /dev/null
@@ -1,17 +0,0 @@
-{
- "name": "project-esbuild",
- "scripts": {
- "build": "yarn clean && ts-node -T ./esbuild.js",
- "clean": "rm -rf ./dist ./esbuild-profile-debug"
- },
- "devDependencies": {
- "@types/node": "^18",
- "esbuild": "0.20.2",
- "ts-node": "10.9.2",
- "typescript": "5.4.3"
- },
- "dependencies": {
- "@datadog/esbuild-plugin": "workspace:*",
- "sub_app": "workspace:*"
- }
-}
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/src/file0001.js b/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/src/file0001.js
deleted file mode 100644
index 32fb5034..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/src/file0001.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
-// This product includes software developed at Datadog (https://www.datadoghq.com/).
-// Copyright 2019-Present Datadog, Inc.
-
-import fn2 from 'sub_app/file0000.js';
-
-import fn1 from './file0000.js';
-
-const fn = async function () {
- await fn1();
- await fn2();
- await (await import('./file0000.js')).default();
- ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
-};
-
-export default fn;
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/workspaces/app/package.json b/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/workspaces/app/package.json
deleted file mode 100644
index 6c764e93..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/esbuild/workspaces/app/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "name": "sub_app"
-}
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/package.json b/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/package.json
deleted file mode 100644
index 1b93c5fb..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/package.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "project-webpack4",
- "scripts": {
- "build": "yarn clean && NODE_OPTIONS=--openssl-legacy-provider webpack",
- "clean": "rm -rf ./dist ./webpack-profile-debug"
- },
- "devDependencies": {
- "webpack": "4.44.2",
- "webpack-cli": "4.1.0"
- },
- "dependencies": {
- "@datadog/webpack-plugin": "workspace:*",
- "webpack4_app": "workspace:*"
- }
-}
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/src/file0000.js b/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/src/file0000.js
deleted file mode 100644
index d5a9f90d..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/src/file0000.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
-// This product includes software developed at Datadog (https://www.datadoghq.com/).
-// Copyright 2019-Present Datadog, Inc.
-
-import fn2 from 'webpack4_app/file0001.js';
-
-import fn1 from './file0001.js';
-
-const fn = async function () {
- await fn1();
- await fn2();
- await (
- await import(
- /* webpackChunkName: "app0001Chunk" */
- /* webpackMode: "lazy" */
- './file0001.js'
- )
- ).default();
- ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
-};
-
-export default fn;
-fn();
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/src/file0001.js b/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/src/file0001.js
deleted file mode 100644
index 55e198aa..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/src/file0001.js
+++ /dev/null
@@ -1,16 +0,0 @@
-// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
-// This product includes software developed at Datadog (https://www.datadoghq.com/).
-// Copyright 2019-Present Datadog, Inc.
-
-import fn2 from 'webpack4_app/file0000.js';
-
-import fn1 from './file0000.js';
-
-const fn = async function () {
- await fn1();
- await fn2();
- await (await import('./file0000.js')).default();
- ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
-};
-
-export default fn;
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/webpack.config.ts b/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/webpack.config.ts
deleted file mode 100644
index 138477d8..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/webpack.config.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
-// This product includes software developed at Datadog (https://www.datadoghq.com/).
-// Copyright 2019-Present Datadog, Inc.
-
-import { datadogWebpackPlugin } from '@datadog/webpack-plugin';
-import path from 'path';
-
-// TODO type the config object.
-const config = {
- context: __dirname,
- entry: {
- cheesecake: './src/file0000.js',
- yolo: './src/file0001.js',
- },
- plugins: [
- datadogWebpackPlugin({
- auth: {
- apiKey: '',
- },
- telemetry: {
- output: './webpack-profile-debug',
- },
- }),
- ],
- output: {
- path: path.join(__dirname, '/dist'),
- filename: '[name].js',
- chunkFilename: '[name].[contenthash].js',
- },
-};
-
-export default config;
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/workspaces/app/file0000.js b/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/workspaces/app/file0000.js
deleted file mode 100644
index c99ca34c..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/workspaces/app/file0000.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
-// This product includes software developed at Datadog (https://www.datadoghq.com/).
-// Copyright 2019-Present Datadog, Inc.
-
-import fn1 from './file0001.js';
-
-const fn = async function () {
- await fn1();
- await (
- await import(
- /* webpackChunkName: "0001Chunk" */
- /* webpackMode: "lazy" */
- './file0001.js'
- )
- ).default();
- ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
-};
-
-export default fn;
-fn();
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/workspaces/app/file0001.js b/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/workspaces/app/file0001.js
deleted file mode 100644
index c3fa035f..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/workspaces/app/file0001.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
-// This product includes software developed at Datadog (https://www.datadoghq.com/).
-// Copyright 2019-Present Datadog, Inc.
-
-import fn1 from './file0000.js';
-
-const fn = async function () {
- await fn1();
- await (await import('./file0000.js')).default();
- ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
-};
-
-export default fn;
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/workspaces/app/package.json b/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/workspaces/app/package.json
deleted file mode 100644
index b923f55b..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack4/workspaces/app/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "name": "webpack4_app"
-}
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/package.json b/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/package.json
deleted file mode 100644
index 41188285..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/package.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "name": "project-webpack5",
- "scripts": {
- "build": "yarn clean && NODE_OPTIONS=--openssl-legacy-provider webpack",
- "clean": "rm -rf ./dist ./webpack-profile-debug"
- },
- "devDependencies": {
- "webpack": "5.1.3",
- "webpack-cli": "4.1.0"
- },
- "dependencies": {
- "@datadog/webpack-plugin": "workspace:*",
- "webpack5_app": "workspace:*"
- }
-}
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/src/file0000.js b/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/src/file0000.js
deleted file mode 100644
index c31c5d1f..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/src/file0000.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
-// This product includes software developed at Datadog (https://www.datadoghq.com/).
-// Copyright 2019-Present Datadog, Inc.
-
-import fn2 from 'webpack5_app/file0001.js';
-
-import fn1 from './file0001.js';
-
-const fn = async function () {
- await fn1();
- await fn2();
- await (
- await import(
- /* webpackChunkName: "app0001Chunk" */
- /* webpackMode: "lazy" */
- './file0001.js'
- )
- ).default();
- ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
-};
-
-export default fn;
-fn();
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/webpack.config.ts b/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/webpack.config.ts
deleted file mode 100644
index 138477d8..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/webpack.config.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
-// This product includes software developed at Datadog (https://www.datadoghq.com/).
-// Copyright 2019-Present Datadog, Inc.
-
-import { datadogWebpackPlugin } from '@datadog/webpack-plugin';
-import path from 'path';
-
-// TODO type the config object.
-const config = {
- context: __dirname,
- entry: {
- cheesecake: './src/file0000.js',
- yolo: './src/file0001.js',
- },
- plugins: [
- datadogWebpackPlugin({
- auth: {
- apiKey: '',
- },
- telemetry: {
- output: './webpack-profile-debug',
- },
- }),
- ],
- output: {
- path: path.join(__dirname, '/dist'),
- filename: '[name].js',
- chunkFilename: '[name].[contenthash].js',
- },
-};
-
-export default config;
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/workspaces/app/file0000.js b/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/workspaces/app/file0000.js
deleted file mode 100644
index c99ca34c..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/workspaces/app/file0000.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
-// This product includes software developed at Datadog (https://www.datadoghq.com/).
-// Copyright 2019-Present Datadog, Inc.
-
-import fn1 from './file0001.js';
-
-const fn = async function () {
- await fn1();
- await (
- await import(
- /* webpackChunkName: "0001Chunk" */
- /* webpackMode: "lazy" */
- './file0001.js'
- )
- ).default();
- ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
-};
-
-export default fn;
-fn();
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/workspaces/app/file0001.js b/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/workspaces/app/file0001.js
deleted file mode 100644
index c3fa035f..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/workspaces/app/file0001.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Unless explicitly stated otherwise all files in this repository are licensed under the MIT License.
-// This product includes software developed at Datadog (https://www.datadoghq.com/).
-// Copyright 2019-Present Datadog, Inc.
-
-import fn1 from './file0000.js';
-
-const fn = async function () {
- await fn1();
- await (await import('./file0000.js')).default();
- ('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
-};
-
-export default fn;
diff --git a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/workspaces/app/package.json b/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/workspaces/app/package.json
deleted file mode 100644
index c32e640d..00000000
--- a/packages/tests/src/plugins/telemetry/mocks/projects/webpack5/workspaces/app/package.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "name": "webpack5_app"
-}
diff --git a/packages/tests/src/plugins/telemetry/testHelpers.ts b/packages/tests/src/plugins/telemetry/testHelpers.ts
index 4818d2d5..05d737d1 100644
--- a/packages/tests/src/plugins/telemetry/testHelpers.ts
+++ b/packages/tests/src/plugins/telemetry/testHelpers.ts
@@ -16,13 +16,14 @@ import type {
TelemetryOptions,
Module,
} from '@dd/telemetry-plugins/types';
-import { ROOT } from '@dd/tools/constants.ts';
import type { PluginBuild, Metafile } from 'esbuild';
import esbuild from 'esbuild';
import path from 'path';
-export const PROJECTS_ROOT = path.join(ROOT, 'packages/tests/src/plugins/telemetry/mocks/projects');
-export const exec = require('util').promisify(require('child_process').exec);
+// Have a path prefixed with the cwd.
+export const prefixPath = (modulePath: string) => {
+ return path.join('src/fixtures/project', modulePath);
+};
export const getMockBuild = (overrides: Partial): PluginBuild => {
return {
diff --git a/packages/tools/package.json b/packages/tools/package.json
index 536dc338..7146b13d 100644
--- a/packages/tools/package.json
+++ b/packages/tools/package.json
@@ -12,7 +12,8 @@
},
"packageManager": "yarn@4.0.2",
"exports": {
- "./*": "./src/*"
+ "./rollupConfig.mjs": "./src/rollupConfig.mjs",
+ "./*": "./src/*.ts"
},
"scripts": {
"cli": "ts-node -T --project ./tsconfig.json ./src/index.ts"
diff --git a/packages/tools/src/commands/integrity/readme.ts b/packages/tools/src/commands/integrity/readme.ts
index 6e66e501..cca71f39 100644
--- a/packages/tools/src/commands/integrity/readme.ts
+++ b/packages/tools/src/commands/integrity/readme.ts
@@ -127,7 +127,7 @@ export const updateReadmes = async (plugins: Workspace[]) => {
apiKey?: string;
endPoint?: string;
};
- logLevel?: 'debug' | 'warn' | 'error' | 'none';
+ logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'none';
`;
const errors: string[] = [];
const error = red('Error');
diff --git a/packages/tools/tsconfig.json b/packages/tools/tsconfig.json
index e2675269..3274ba92 100644
--- a/packages/tools/tsconfig.json
+++ b/packages/tools/tsconfig.json
@@ -4,6 +4,7 @@
"baseUrl": "./",
"esModuleInterop": true,
"module": "CommonJS",
+ "moduleResolution": "Node",
"rootDir": "./",
"outDir": "./dist"
},
diff --git a/packages/webpack-plugin/package.json b/packages/webpack-plugin/package.json
index 2f653e7c..9871e56d 100644
--- a/packages/webpack-plugin/package.json
+++ b/packages/webpack-plugin/package.json
@@ -1,7 +1,7 @@
{
"name": "@datadog/webpack-plugin",
"packageManager": "yarn@4.0.2",
- "version": "2.0.1",
+ "version": "2.1.0",
"license": "MIT",
"author": "Datadog",
"description": "Datadog Webpack Plugin",
@@ -57,8 +57,8 @@
"@rollup/plugin-node-resolve": "15.2.3",
"@types/babel__core": "^7",
"@types/babel__preset-env": "^7",
- "esbuild": "0.20.2",
- "rollup": "4.17.1",
+ "esbuild": "0.21.5",
+ "rollup": "4.18.0",
"rollup-plugin-dts": "6.1.0",
"rollup-plugin-esbuild": "6.1.1",
"typescript": "5.4.3"
diff --git a/packages/webpack-plugin/src/index.ts b/packages/webpack-plugin/src/index.ts
index 022c15f9..c906fff9 100644
--- a/packages/webpack-plugin/src/index.ts
+++ b/packages/webpack-plugin/src/index.ts
@@ -6,7 +6,7 @@
// Anything between #types-export-injection-marker
// will be updated using the 'yarn cli integrity' command.
-import { buildPluginFactory } from '@dd/factory';
+import { buildPluginFactory, helpers } from '@dd/factory';
import pkg from '../package.json';
@@ -16,10 +16,17 @@ export const datadogWebpackPlugin = buildPluginFactory({
export { helpers } from '@dd/factory';
-export type { Options as EsbuildPluginOptions } from '@dd/core/types';
+export type { Options as WebpackPluginOptions } from '@dd/core/types';
export type {
// #types-export-injection-marker
+ RumTypes,
TelemetryTypes,
// #types-export-injection-marker
} from '@dd/factory';
+
+// This is to prevent overrides from other libraries in the final bundle.
+module.exports = {
+ helpers,
+ datadogWebpackPlugin,
+};
diff --git a/tsconfig.json b/tsconfig.json
index debad5b1..e489e1b7 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,10 +1,14 @@
{
"compilerOptions": {
+ "allowImportingTsExtensions": true,
"allowSyntheticDefaultImports": true,
"baseUrl": "./",
"declaration": true,
+ "esModuleInterop": true,
"lib": ["es2022"],
"module": "preserve",
+ "moduleResolution": "bundler",
+ "noEmit": true,
"noImplicitAny": true,
"resolveJsonModule": true,
"rootDir": "./",
diff --git a/yarn.lock b/yarn.lock
index e258a39e..3168fe52 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1691,8 +1691,8 @@ __metadata:
"@rollup/plugin-node-resolve": "npm:15.2.3"
"@types/babel__core": "npm:^7"
"@types/babel__preset-env": "npm:^7"
- esbuild: "npm:0.20.2"
- rollup: "npm:4.17.1"
+ esbuild: "npm:0.21.5"
+ rollup: "npm:4.18.0"
rollup-plugin-dts: "npm:6.1.0"
rollup-plugin-esbuild: "npm:6.1.1"
typescript: "npm:5.4.3"
@@ -1716,8 +1716,8 @@ __metadata:
"@rollup/plugin-node-resolve": "npm:15.2.3"
"@types/babel__core": "npm:^7"
"@types/babel__preset-env": "npm:^7"
- esbuild: "npm:0.20.2"
- rollup: "npm:4.17.1"
+ esbuild: "npm:0.21.5"
+ rollup: "npm:4.18.0"
rollup-plugin-dts: "npm:6.1.0"
rollup-plugin-esbuild: "npm:6.1.1"
typescript: "npm:5.4.3"
@@ -1741,7 +1741,7 @@ __metadata:
chalk: "npm:2.3.1"
simple-git: "npm:3.25.0"
typescript: "npm:5.4.3"
- unplugin: "npm:1.10.1"
+ unplugin: "npm:1.11.0"
languageName: unknown
linkType: soft
@@ -1750,8 +1750,23 @@ __metadata:
resolution: "@dd/factory@workspace:packages/factory"
dependencies:
"@dd/core": "workspace:*"
+ "@dd/rum-plugins": "workspace:*"
"@dd/telemetry-plugins": "workspace:*"
- unplugin: "npm:1.10.1"
+ unplugin: "npm:1.11.0"
+ languageName: unknown
+ linkType: soft
+
+"@dd/rum-plugins@workspace:*, @dd/rum-plugins@workspace:packages/plugins/rum":
+ version: 0.0.0-use.local
+ resolution: "@dd/rum-plugins@workspace:packages/plugins/rum"
+ dependencies:
+ "@dd/core": "workspace:*"
+ "@types/async-retry": "npm:1.4.8"
+ async-retry: "npm:1.3.3"
+ chalk: "npm:2.3.1"
+ outdent: "npm:0.8.0"
+ p-queue: "npm:6.6.2"
+ unplugin: "npm:1.11.0"
languageName: unknown
linkType: soft
@@ -1763,11 +1778,11 @@ __metadata:
"@types/chalk": "npm:2.2.0"
"@types/fs-extra": "npm:8.1.0"
chalk: "npm:2.3.1"
- esbuild: "npm:0.20.2"
+ esbuild: "npm:0.21.5"
fs-extra: "npm:7.0.1"
pretty-bytes: "npm:5.6.0"
- unplugin: "npm:1.10.1"
- webpack: "npm:5.49.0"
+ unplugin: "npm:1.11.0"
+ webpack: "npm:5.92.1"
peerDependencies:
esbuild: ">=0.x"
webpack: ">= 4.x < 6.x"
@@ -1785,12 +1800,15 @@ __metadata:
"@dd/tools": "workspace:*"
"@types/jest": "npm:29.5.12"
"@types/node": "npm:^18"
- esbuild: "npm:0.20.2"
+ "@types/webpack4": "npm:@types/webpack@4.41.38"
+ esbuild: "npm:0.21.5"
jest: "npm:29.7.0"
memfs: "npm:4.9.2"
+ nock: "npm:14.0.0-beta.7"
ts-jest: "npm:29.1.2"
typescript: "npm:5.4.3"
- webpack: "npm:5.49.0"
+ webpack: "npm:5.92.1"
+ webpack4: "npm:webpack@4.47.0"
languageName: unknown
linkType: soft
@@ -1816,163 +1834,163 @@ __metadata:
languageName: unknown
linkType: soft
-"@esbuild/aix-ppc64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/aix-ppc64@npm:0.20.2"
+"@esbuild/aix-ppc64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/aix-ppc64@npm:0.21.5"
conditions: os=aix & cpu=ppc64
languageName: node
linkType: hard
-"@esbuild/android-arm64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/android-arm64@npm:0.20.2"
+"@esbuild/android-arm64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/android-arm64@npm:0.21.5"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/android-arm@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/android-arm@npm:0.20.2"
+"@esbuild/android-arm@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/android-arm@npm:0.21.5"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
-"@esbuild/android-x64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/android-x64@npm:0.20.2"
+"@esbuild/android-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/android-x64@npm:0.21.5"
conditions: os=android & cpu=x64
languageName: node
linkType: hard
-"@esbuild/darwin-arm64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/darwin-arm64@npm:0.20.2"
+"@esbuild/darwin-arm64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/darwin-arm64@npm:0.21.5"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/darwin-x64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/darwin-x64@npm:0.20.2"
+"@esbuild/darwin-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/darwin-x64@npm:0.21.5"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"@esbuild/freebsd-arm64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/freebsd-arm64@npm:0.20.2"
+"@esbuild/freebsd-arm64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/freebsd-arm64@npm:0.21.5"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/freebsd-x64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/freebsd-x64@npm:0.20.2"
+"@esbuild/freebsd-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/freebsd-x64@npm:0.21.5"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
-"@esbuild/linux-arm64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/linux-arm64@npm:0.20.2"
+"@esbuild/linux-arm64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-arm64@npm:0.21.5"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/linux-arm@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/linux-arm@npm:0.20.2"
+"@esbuild/linux-arm@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-arm@npm:0.21.5"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
-"@esbuild/linux-ia32@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/linux-ia32@npm:0.20.2"
+"@esbuild/linux-ia32@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-ia32@npm:0.21.5"
conditions: os=linux & cpu=ia32
languageName: node
linkType: hard
-"@esbuild/linux-loong64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/linux-loong64@npm:0.20.2"
+"@esbuild/linux-loong64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-loong64@npm:0.21.5"
conditions: os=linux & cpu=loong64
languageName: node
linkType: hard
-"@esbuild/linux-mips64el@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/linux-mips64el@npm:0.20.2"
+"@esbuild/linux-mips64el@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-mips64el@npm:0.21.5"
conditions: os=linux & cpu=mips64el
languageName: node
linkType: hard
-"@esbuild/linux-ppc64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/linux-ppc64@npm:0.20.2"
+"@esbuild/linux-ppc64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-ppc64@npm:0.21.5"
conditions: os=linux & cpu=ppc64
languageName: node
linkType: hard
-"@esbuild/linux-riscv64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/linux-riscv64@npm:0.20.2"
+"@esbuild/linux-riscv64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-riscv64@npm:0.21.5"
conditions: os=linux & cpu=riscv64
languageName: node
linkType: hard
-"@esbuild/linux-s390x@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/linux-s390x@npm:0.20.2"
+"@esbuild/linux-s390x@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-s390x@npm:0.21.5"
conditions: os=linux & cpu=s390x
languageName: node
linkType: hard
-"@esbuild/linux-x64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/linux-x64@npm:0.20.2"
+"@esbuild/linux-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/linux-x64@npm:0.21.5"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
-"@esbuild/netbsd-x64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/netbsd-x64@npm:0.20.2"
+"@esbuild/netbsd-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/netbsd-x64@npm:0.21.5"
conditions: os=netbsd & cpu=x64
languageName: node
linkType: hard
-"@esbuild/openbsd-x64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/openbsd-x64@npm:0.20.2"
+"@esbuild/openbsd-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/openbsd-x64@npm:0.21.5"
conditions: os=openbsd & cpu=x64
languageName: node
linkType: hard
-"@esbuild/sunos-x64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/sunos-x64@npm:0.20.2"
+"@esbuild/sunos-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/sunos-x64@npm:0.21.5"
conditions: os=sunos & cpu=x64
languageName: node
linkType: hard
-"@esbuild/win32-arm64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/win32-arm64@npm:0.20.2"
+"@esbuild/win32-arm64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/win32-arm64@npm:0.21.5"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/win32-ia32@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/win32-ia32@npm:0.20.2"
+"@esbuild/win32-ia32@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/win32-ia32@npm:0.21.5"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
-"@esbuild/win32-x64@npm:0.20.2":
- version: 0.20.2
- resolution: "@esbuild/win32-x64@npm:0.20.2"
+"@esbuild/win32-x64@npm:0.21.5":
+ version: 0.21.5
+ resolution: "@esbuild/win32-x64@npm:0.21.5"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@@ -2603,114 +2621,114 @@ __metadata:
languageName: node
linkType: hard
-"@rollup/rollup-android-arm-eabi@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-android-arm-eabi@npm:4.17.1"
+"@rollup/rollup-android-arm-eabi@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-android-arm-eabi@npm:4.18.0"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
-"@rollup/rollup-android-arm64@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-android-arm64@npm:4.17.1"
+"@rollup/rollup-android-arm64@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-android-arm64@npm:4.18.0"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
-"@rollup/rollup-darwin-arm64@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-darwin-arm64@npm:4.17.1"
+"@rollup/rollup-darwin-arm64@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-darwin-arm64@npm:4.18.0"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"@rollup/rollup-darwin-x64@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-darwin-x64@npm:4.17.1"
+"@rollup/rollup-darwin-x64@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-darwin-x64@npm:4.18.0"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"@rollup/rollup-linux-arm-gnueabihf@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.17.1"
+"@rollup/rollup-linux-arm-gnueabihf@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.18.0"
conditions: os=linux & cpu=arm & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-arm-musleabihf@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.17.1"
+"@rollup/rollup-linux-arm-musleabihf@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.18.0"
conditions: os=linux & cpu=arm & libc=musl
languageName: node
linkType: hard
-"@rollup/rollup-linux-arm64-gnu@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.17.1"
+"@rollup/rollup-linux-arm64-gnu@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.18.0"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-arm64-musl@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-linux-arm64-musl@npm:4.17.1"
+"@rollup/rollup-linux-arm64-musl@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-linux-arm64-musl@npm:4.18.0"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
-"@rollup/rollup-linux-powerpc64le-gnu@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.17.1"
+"@rollup/rollup-linux-powerpc64le-gnu@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.18.0"
conditions: os=linux & cpu=ppc64 & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-riscv64-gnu@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.17.1"
+"@rollup/rollup-linux-riscv64-gnu@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.18.0"
conditions: os=linux & cpu=riscv64 & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-s390x-gnu@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.17.1"
+"@rollup/rollup-linux-s390x-gnu@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.18.0"
conditions: os=linux & cpu=s390x & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-x64-gnu@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-linux-x64-gnu@npm:4.17.1"
+"@rollup/rollup-linux-x64-gnu@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-linux-x64-gnu@npm:4.18.0"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
-"@rollup/rollup-linux-x64-musl@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-linux-x64-musl@npm:4.17.1"
+"@rollup/rollup-linux-x64-musl@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-linux-x64-musl@npm:4.18.0"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
-"@rollup/rollup-win32-arm64-msvc@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.17.1"
+"@rollup/rollup-win32-arm64-msvc@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.18.0"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@rollup/rollup-win32-ia32-msvc@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.17.1"
+"@rollup/rollup-win32-ia32-msvc@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.18.0"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
-"@rollup/rollup-win32-x64-msvc@npm:4.17.1":
- version: 4.17.1
- resolution: "@rollup/rollup-win32-x64-msvc@npm:4.17.1"
+"@rollup/rollup-win32-x64-msvc@npm:4.18.0":
+ version: 4.18.0
+ resolution: "@rollup/rollup-win32-x64-msvc@npm:4.18.0"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@@ -2777,6 +2795,15 @@ __metadata:
languageName: node
linkType: hard
+"@types/async-retry@npm:1.4.8":
+ version: 1.4.8
+ resolution: "@types/async-retry@npm:1.4.8"
+ dependencies:
+ "@types/retry": "npm:*"
+ checksum: 10/5d4b0b786e2506ab690c311d55a8000c3675cf1036290ad3b83af11ad791c62c9e16e7ff5a6dac3fae557404127451e72c297d711701015b027227586368eaf5
+ languageName: node
+ linkType: hard
+
"@types/babel__core@npm:^7, @types/babel__core@npm:^7.1.14":
version: 7.20.5
resolution: "@types/babel__core@npm:7.20.5"
@@ -2841,13 +2868,13 @@ __metadata:
languageName: node
linkType: hard
-"@types/eslint-scope@npm:^3.7.0":
- version: 3.7.0
- resolution: "@types/eslint-scope@npm:3.7.0"
+"@types/eslint-scope@npm:^3.7.3":
+ version: 3.7.7
+ resolution: "@types/eslint-scope@npm:3.7.7"
dependencies:
"@types/eslint": "npm:*"
"@types/estree": "npm:*"
- checksum: 10/27f302625bb970b95135aedd882935875ccd2c1a2ecd5c7108b96b4e35a6035ed62b47b491a7679804d4a0146406c7847ab352fbe3fe499af15059bb774cb966
+ checksum: 10/e2889a124aaab0b89af1bab5959847c5bec09809209255de0e63b9f54c629a94781daa04adb66bffcdd742f5e25a17614fb933965093c0eea64aacda4309380e
languageName: node
linkType: hard
@@ -2861,27 +2888,20 @@ __metadata:
languageName: node
linkType: hard
-"@types/estree@npm:*, @types/estree@npm:^0.0.50":
+"@types/estree@npm:*":
version: 0.0.50
resolution: "@types/estree@npm:0.0.50"
checksum: 10/188e022eec2da0e1bcf5f569314d1fd16fc28fb3758fed9843b9581ba131b78443b08d6e9ea9daed36c04e493234f47e98cdef8f081c9e9eb0845b2d80f5f8da
languageName: node
linkType: hard
-"@types/estree@npm:1.0.5, @types/estree@npm:^1.0.0":
+"@types/estree@npm:1.0.5, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.5":
version: 1.0.5
resolution: "@types/estree@npm:1.0.5"
checksum: 10/7de6d928dd4010b0e20c6919e1a6c27b61f8d4567befa89252055fad503d587ecb9a1e3eab1b1901f923964d7019796db810b7fd6430acb26c32866d126fd408
languageName: node
linkType: hard
-"@types/estree@npm:^0.0.45":
- version: 0.0.45
- resolution: "@types/estree@npm:0.0.45"
- checksum: 10/5a45a5fd92b65985b579cbc4ed77d4ce1cabc94a9f92aef1208f7e19796cac7ca85e5d5fa2df4833e555d2c61c2a2fbac3919f98ce9f29eb727aeb9627b14409
- languageName: node
- linkType: hard
-
"@types/fs-extra@npm:8.1.0":
version: 8.1.0
resolution: "@types/fs-extra@npm:8.1.0"
@@ -3014,6 +3034,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/retry@npm:*":
+ version: 0.12.5
+ resolution: "@types/retry@npm:0.12.5"
+ checksum: 10/3fb6bf91835ca0eb2987567d6977585235a7567f8aeb38b34a8bb7bbee57ac050ed6f04b9998cda29701b8c893f5dfe315869bc54ac17e536c9235637fe351a2
+ languageName: node
+ linkType: hard
+
"@types/semver@npm:^7.5.0":
version: 7.5.8
resolution: "@types/semver@npm:7.5.8"
@@ -3021,6 +3048,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/source-list-map@npm:*":
+ version: 0.1.6
+ resolution: "@types/source-list-map@npm:0.1.6"
+ checksum: 10/9cd294c121f1562062de5d241fe4d10780b1131b01c57434845fe50968e9dcf67ede444591c2b1ad6d3f9b6bc646ac02cc8f51a3577c795f9c64cf4573dcc6b1
+ languageName: node
+ linkType: hard
+
"@types/stack-utils@npm:^2.0.0":
version: 2.0.3
resolution: "@types/stack-utils@npm:2.0.3"
@@ -3028,6 +3062,47 @@ __metadata:
languageName: node
linkType: hard
+"@types/tapable@npm:^1":
+ version: 1.0.12
+ resolution: "@types/tapable@npm:1.0.12"
+ checksum: 10/adfb978a3097154be92c4a92184bb17f86a84473bd871a9a862f81676532ebec86ea61acdce999186447832e32a4d45d591d64b64131dd977ca41508165011d7
+ languageName: node
+ linkType: hard
+
+"@types/uglify-js@npm:*":
+ version: 3.17.5
+ resolution: "@types/uglify-js@npm:3.17.5"
+ dependencies:
+ source-map: "npm:^0.6.1"
+ checksum: 10/87368861a3f2df071905d698c9f7a4b825e2f69dd29530283594ccddd155d4a8ff7795021af28a97d938c9557a6ea23bc3d77e076a6cf3e02f6401849e067f61
+ languageName: node
+ linkType: hard
+
+"@types/webpack-sources@npm:*":
+ version: 3.2.3
+ resolution: "@types/webpack-sources@npm:3.2.3"
+ dependencies:
+ "@types/node": "npm:*"
+ "@types/source-list-map": "npm:*"
+ source-map: "npm:^0.7.3"
+ checksum: 10/7b557f242efaa10e4e3e18cc4171a0c98e22898570caefdd4f7b076fe8534b5abfac92c953c6604658dcb7218507f970230352511840fe9fdea31a9af3b9a906
+ languageName: node
+ linkType: hard
+
+"@types/webpack4@npm:@types/webpack@4.41.38":
+ version: 4.41.38
+ resolution: "@types/webpack@npm:4.41.38"
+ dependencies:
+ "@types/node": "npm:*"
+ "@types/tapable": "npm:^1"
+ "@types/uglify-js": "npm:*"
+ "@types/webpack-sources": "npm:*"
+ anymatch: "npm:^3.0.0"
+ source-map: "npm:^0.6.0"
+ checksum: 10/63f2137371e9fd99242c95ae5a115e8da470e61344b6b10b3778c91bbe0ab173d4ad879b53a57e4950b3124b3f8627480bf14f70a11c730d3e66195d8e0c7d8c
+ languageName: node
+ linkType: hard
+
"@types/wrap-ansi@npm:^3.0.0":
version: 3.0.0
resolution: "@types/wrap-ansi@npm:3.0.0"
@@ -3181,13 +3256,13 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/ast@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/ast@npm:1.11.1"
+"@webassemblyjs/ast@npm:1.12.1, @webassemblyjs/ast@npm:^1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/ast@npm:1.12.1"
dependencies:
- "@webassemblyjs/helper-numbers": "npm:1.11.1"
- "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.1"
- checksum: 10/28cc949e2e68eb103fc416b30880cf57bc37b452e1e6fe05c73c64bc6d90d68176013fb5101bf80a2eb4961299dd4d7cffeecd32d189a17951da7ead90c2f35f
+ "@webassemblyjs/helper-numbers": "npm:1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6"
+ checksum: 10/a775b0559437ae122d14fec0cfe59fdcaf5ca2d8ff48254014fd05d6797e20401e0f1518e628f9b06819aa085834a2534234977f9608b3f2e51f94b6e8b0bc43
languageName: node
linkType: hard
@@ -3202,10 +3277,10 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/floating-point-hex-parser@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.1"
- checksum: 10/b8efc6fa08e4787b7f8e682182d84dfdf8da9d9c77cae5d293818bc4a55c1f419a87fa265ab85252b3e6c1fd323d799efea68d825d341a7c365c64bc14750e97
+"@webassemblyjs/floating-point-hex-parser@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6"
+ checksum: 10/29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2
languageName: node
linkType: hard
@@ -3216,10 +3291,10 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/helper-api-error@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/helper-api-error@npm:1.11.1"
- checksum: 10/0792813f0ed4a0e5ee0750e8b5d0c631f08e927f4bdfdd9fe9105dc410c786850b8c61bff7f9f515fdfb149903bec3c976a1310573a4c6866a94d49bc7271959
+"@webassemblyjs/helper-api-error@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/helper-api-error@npm:1.11.6"
+ checksum: 10/e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f
languageName: node
linkType: hard
@@ -3230,10 +3305,10 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/helper-buffer@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/helper-buffer@npm:1.11.1"
- checksum: 10/a337ee44b45590c3a30db5a8b7b68a717526cf967ada9f10253995294dbd70a58b2da2165222e0b9830cd4fc6e4c833bf441a721128d1fe2e9a7ab26b36003ce
+"@webassemblyjs/helper-buffer@npm:1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/helper-buffer@npm:1.12.1"
+ checksum: 10/1d8705daa41f4d22ef7c6d422af4c530b84d69d0c253c6db5adec44d511d7caa66837803db5b1addcea611a1498fd5a67d2cf318b057a916283ae41ffb85ba8a
languageName: node
linkType: hard
@@ -3269,21 +3344,21 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/helper-numbers@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/helper-numbers@npm:1.11.1"
+"@webassemblyjs/helper-numbers@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/helper-numbers@npm:1.11.6"
dependencies:
- "@webassemblyjs/floating-point-hex-parser": "npm:1.11.1"
- "@webassemblyjs/helper-api-error": "npm:1.11.1"
+ "@webassemblyjs/floating-point-hex-parser": "npm:1.11.6"
+ "@webassemblyjs/helper-api-error": "npm:1.11.6"
"@xtuc/long": "npm:4.2.2"
- checksum: 10/cbe5b456fa074d11a5acf80860df2899a160011943d7e26e60b6eda1c1dbe594e717e0c9f2b50ba2323f75f333bc5ec949acd992a63f2207df754a474167e424
+ checksum: 10/9ffd258ad809402688a490fdef1fd02222f20cdfe191c895ac215a331343292164e5033dbc0347f0f76f2447865c0b5c2d2e3304ee948d44f7aa27857028fd08
languageName: node
linkType: hard
-"@webassemblyjs/helper-wasm-bytecode@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.1"
- checksum: 10/009b494010907a52c1c6c6fcb42db8606cf2443e2e767c7ff3029acf31f9a206108285609d735ee77bcbcbd3f1a1f8920b365e7a9466ef35a7932b74c743c816
+"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6"
+ checksum: 10/4ebf03e9c1941288c10e94e0f813f413f972bfaa1f09be2cc2e5577f300430906b61aa24d52f5ef2f894e8e24e61c6f7c39871d7e3d98bc69460e1b8e00bb20b
languageName: node
linkType: hard
@@ -3294,15 +3369,15 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/helper-wasm-section@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.1"
+"@webassemblyjs/helper-wasm-section@npm:1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/helper-wasm-section@npm:1.12.1"
dependencies:
- "@webassemblyjs/ast": "npm:1.11.1"
- "@webassemblyjs/helper-buffer": "npm:1.11.1"
- "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.1"
- "@webassemblyjs/wasm-gen": "npm:1.11.1"
- checksum: 10/dd6eee9f73346b14d31e95074a8dced21d59269e86e47ad01b6578d86ae6008b411fb989bbd400102c355ea0ba3d070eb9949a64f822abc8f65cf0162704834a
+ "@webassemblyjs/ast": "npm:1.12.1"
+ "@webassemblyjs/helper-buffer": "npm:1.12.1"
+ "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6"
+ "@webassemblyjs/wasm-gen": "npm:1.12.1"
+ checksum: 10/e91e6b28114e35321934070a2db8973a08a5cd9c30500b817214c683bbf5269ed4324366dd93ad83bf2fba0d671ac8f39df1c142bf58f70c57a827eeba4a3d2f
languageName: node
linkType: hard
@@ -3318,12 +3393,12 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/ieee754@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/ieee754@npm:1.11.1"
+"@webassemblyjs/ieee754@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/ieee754@npm:1.11.6"
dependencies:
"@xtuc/ieee754": "npm:^1.2.0"
- checksum: 10/23a0ac02a50f244471631802798a816524df17e56b1ef929f0c73e3cde70eaf105a24130105c60aff9d64a24ce3b640dad443d6f86e5967f922943a7115022ec
+ checksum: 10/13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de
languageName: node
linkType: hard
@@ -3336,12 +3411,12 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/leb128@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/leb128@npm:1.11.1"
+"@webassemblyjs/leb128@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/leb128@npm:1.11.6"
dependencies:
"@xtuc/long": "npm:4.2.2"
- checksum: 10/85beb7156f131c29e9a7f1a05e7fc131849152dd7b0c198d4f21b8e965d96dbfeaca3ac53e4bfbedfeef88b0ada0ff0bd0b7ad5c7dfb8c3d3fed0f922084a557
+ checksum: 10/ec3b72db0e7ce7908fe08ec24395bfc97db486063824c0edc580f0973a4cfbadf30529569d9c7db663a56513e45b94299cca03be9e1992ea3308bb0744164f3d
languageName: node
linkType: hard
@@ -3354,10 +3429,10 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/utf8@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/utf8@npm:1.11.1"
- checksum: 10/b93e57912dfb91df4a76162abd6fb5e491110e113101ec136cea0ea8b8bd43708e94f919ea0e8762657994da6a5fcb63d34b6da392e5dd4e189169da4c75c149
+"@webassemblyjs/utf8@npm:1.11.6":
+ version: 1.11.6
+ resolution: "@webassemblyjs/utf8@npm:1.11.6"
+ checksum: 10/361a537bd604101b320a5604c3c96d1038d83166f1b9fb86cedadc7e81bae54c3785ae5d90bf5b1842f7da08194ccaf0f44a64fcca0cbbd6afe1a166196986d6
languageName: node
linkType: hard
@@ -3368,22 +3443,6 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/wasm-edit@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/wasm-edit@npm:1.11.1"
- dependencies:
- "@webassemblyjs/ast": "npm:1.11.1"
- "@webassemblyjs/helper-buffer": "npm:1.11.1"
- "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.1"
- "@webassemblyjs/helper-wasm-section": "npm:1.11.1"
- "@webassemblyjs/wasm-gen": "npm:1.11.1"
- "@webassemblyjs/wasm-opt": "npm:1.11.1"
- "@webassemblyjs/wasm-parser": "npm:1.11.1"
- "@webassemblyjs/wast-printer": "npm:1.11.1"
- checksum: 10/6a029ae21c3c0890a55e3d6fb20071434ed5ef024d7d9ca79a754555ccbbc595052e936f6e547b6823922e3f41d3350027a21e65a04032c5fce29d0e4301513d
- languageName: node
- linkType: hard
-
"@webassemblyjs/wasm-edit@npm:1.9.0":
version: 1.9.0
resolution: "@webassemblyjs/wasm-edit@npm:1.9.0"
@@ -3400,16 +3459,32 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/wasm-gen@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/wasm-gen@npm:1.11.1"
+"@webassemblyjs/wasm-edit@npm:^1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/wasm-edit@npm:1.12.1"
+ dependencies:
+ "@webassemblyjs/ast": "npm:1.12.1"
+ "@webassemblyjs/helper-buffer": "npm:1.12.1"
+ "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6"
+ "@webassemblyjs/helper-wasm-section": "npm:1.12.1"
+ "@webassemblyjs/wasm-gen": "npm:1.12.1"
+ "@webassemblyjs/wasm-opt": "npm:1.12.1"
+ "@webassemblyjs/wasm-parser": "npm:1.12.1"
+ "@webassemblyjs/wast-printer": "npm:1.12.1"
+ checksum: 10/5678ae02dbebba2f3a344e25928ea5a26a0df777166c9be77a467bfde7aca7f4b57ef95587e4bd768a402cdf2fddc4c56f0a599d164cdd9fe313520e39e18137
+ languageName: node
+ linkType: hard
+
+"@webassemblyjs/wasm-gen@npm:1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/wasm-gen@npm:1.12.1"
dependencies:
- "@webassemblyjs/ast": "npm:1.11.1"
- "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.1"
- "@webassemblyjs/ieee754": "npm:1.11.1"
- "@webassemblyjs/leb128": "npm:1.11.1"
- "@webassemblyjs/utf8": "npm:1.11.1"
- checksum: 10/5da040e78045f5499a99435ce0b1878d77f4fbfecb854841367cfc8ac16cc169a7f04187aac5da794b8d08a84ba25324f276f9128c5597ee6666cabd6b954ec1
+ "@webassemblyjs/ast": "npm:1.12.1"
+ "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6"
+ "@webassemblyjs/ieee754": "npm:1.11.6"
+ "@webassemblyjs/leb128": "npm:1.11.6"
+ "@webassemblyjs/utf8": "npm:1.11.6"
+ checksum: 10/ec45bd50e86bc9856f80fe9af4bc1ae5c98fb85f57023d11dff2b670da240c47a7b1b9b6c89755890314212bd167cf3adae7f1157216ddffb739a4ce589fc338
languageName: node
linkType: hard
@@ -3426,15 +3501,15 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/wasm-opt@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/wasm-opt@npm:1.11.1"
+"@webassemblyjs/wasm-opt@npm:1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/wasm-opt@npm:1.12.1"
dependencies:
- "@webassemblyjs/ast": "npm:1.11.1"
- "@webassemblyjs/helper-buffer": "npm:1.11.1"
- "@webassemblyjs/wasm-gen": "npm:1.11.1"
- "@webassemblyjs/wasm-parser": "npm:1.11.1"
- checksum: 10/00f85d1f762ca2574ea6b5e85b3e9c50720886cca86ef192c80a1af484d98353500667af91416c407cdaeac3176bcd2b0f0641f4299a915b21b03a7f2ff84f3a
+ "@webassemblyjs/ast": "npm:1.12.1"
+ "@webassemblyjs/helper-buffer": "npm:1.12.1"
+ "@webassemblyjs/wasm-gen": "npm:1.12.1"
+ "@webassemblyjs/wasm-parser": "npm:1.12.1"
+ checksum: 10/21f25ae109012c49bb084e09f3b67679510429adc3e2408ad3621b2b505379d9cce337799a7919ef44db64e0d136833216914aea16b0d4856f353b9778e0cdb7
languageName: node
linkType: hard
@@ -3450,17 +3525,17 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/wasm-parser@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/wasm-parser@npm:1.11.1"
+"@webassemblyjs/wasm-parser@npm:1.12.1, @webassemblyjs/wasm-parser@npm:^1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/wasm-parser@npm:1.12.1"
dependencies:
- "@webassemblyjs/ast": "npm:1.11.1"
- "@webassemblyjs/helper-api-error": "npm:1.11.1"
- "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.1"
- "@webassemblyjs/ieee754": "npm:1.11.1"
- "@webassemblyjs/leb128": "npm:1.11.1"
- "@webassemblyjs/utf8": "npm:1.11.1"
- checksum: 10/cc6de8f4d9c56b370c2151dd9daacbdabe4aa20ba55b278e322de949dcbdc33b615773ce1756b69580cd2d68273d72ddf8ba68c3bb8715a462e64cf02de9a7c3
+ "@webassemblyjs/ast": "npm:1.12.1"
+ "@webassemblyjs/helper-api-error": "npm:1.11.6"
+ "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6"
+ "@webassemblyjs/ieee754": "npm:1.11.6"
+ "@webassemblyjs/leb128": "npm:1.11.6"
+ "@webassemblyjs/utf8": "npm:1.11.6"
+ checksum: 10/f7311685b76c3e1def2abea3488be1e77f06ecd8633143a6c5c943ca289660952b73785231bb76a010055ca64645227a4bc79705c26ab7536216891b6bb36320
languageName: node
linkType: hard
@@ -3492,13 +3567,13 @@ __metadata:
languageName: node
linkType: hard
-"@webassemblyjs/wast-printer@npm:1.11.1":
- version: 1.11.1
- resolution: "@webassemblyjs/wast-printer@npm:1.11.1"
+"@webassemblyjs/wast-printer@npm:1.12.1":
+ version: 1.12.1
+ resolution: "@webassemblyjs/wast-printer@npm:1.12.1"
dependencies:
- "@webassemblyjs/ast": "npm:1.11.1"
+ "@webassemblyjs/ast": "npm:1.12.1"
"@xtuc/long": "npm:4.2.2"
- checksum: 10/bd1cf7a0630bf2d003d9df004fca97f53026b39560d0629dc8019aed7e7cc38000d1cb78f7e70ea52fc0561a822bcc7683d48f839363a9d0cf16574f9cbd8c32
+ checksum: 10/1a6a4b6bc4234f2b5adbab0cb11a24911b03380eb1cab6fb27a2250174a279fdc6aa2f5a9cf62dd1f6d4eb39f778f488e8ff15b9deb0670dee5c5077d46cf572
languageName: node
linkType: hard
@@ -3513,29 +3588,6 @@ __metadata:
languageName: node
linkType: hard
-"@webpack-cli/info@npm:^1.0.2":
- version: 1.5.0
- resolution: "@webpack-cli/info@npm:1.5.0"
- dependencies:
- envinfo: "npm:^7.7.3"
- peerDependencies:
- webpack-cli: 4.x.x
- checksum: 10/7f56fe037cd7d1fd5c7428588519fbf04a0cad33925ee4202ffbafd00f8ec1f2f67d991245e687d50e0f3e23f7b7814273d56cb9f7da4b05eed47c8d815c6296
- languageName: node
- linkType: hard
-
-"@webpack-cli/serve@npm:^1.0.1":
- version: 1.7.0
- resolution: "@webpack-cli/serve@npm:1.7.0"
- peerDependencies:
- webpack-cli: 4.x.x
- peerDependenciesMeta:
- webpack-dev-server:
- optional: true
- checksum: 10/0b90c963a6b8424a914a85532e3a7dfe2f7eea1c98acea1c6c1a368bf349733f0d6cb2e83ce9ced7c8208f58d518cced767d1e1d0ab26126d8a9bad3b3f5352e
- languageName: node
- linkType: hard
-
"@xtuc/ieee754@npm:^1.2.0":
version: 1.2.0
resolution: "@xtuc/ieee754@npm:1.2.0"
@@ -3557,12 +3609,12 @@ __metadata:
languageName: node
linkType: hard
-"acorn-import-assertions@npm:^1.7.6":
- version: 1.7.6
- resolution: "acorn-import-assertions@npm:1.7.6"
+"acorn-import-attributes@npm:^1.9.5":
+ version: 1.9.5
+ resolution: "acorn-import-attributes@npm:1.9.5"
peerDependencies:
acorn: ^8
- checksum: 10/3df7728ff652aae2b0e780c5af23f1793fabcaaef15ede744e015918795aa8cbe53ad17df049840aaac545fb1c5c1cac21cab5a272c8b51a9dcdb954af5ddefc
+ checksum: 10/8bfbfbb6e2467b9b47abb4d095df717ab64fce2525da65eabee073e85e7975fb3a176b6c8bba17c99a7d8ede283a10a590272304eb54a93c4aa1af9790d47a8b
languageName: node
linkType: hard
@@ -3591,7 +3643,7 @@ __metadata:
languageName: node
linkType: hard
-"acorn@npm:^8.0.3, acorn@npm:^8.11.3, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0":
+"acorn@npm:^8.11.3, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.8.2, acorn@npm:^8.9.0":
version: 8.11.3
resolution: "acorn@npm:8.11.3"
bin:
@@ -3600,6 +3652,15 @@ __metadata:
languageName: node
linkType: hard
+"acorn@npm:^8.7.1":
+ version: 8.12.1
+ resolution: "acorn@npm:8.12.1"
+ bin:
+ acorn: bin/acorn
+ checksum: 10/d08c2d122bba32d0861e0aa840b2ee25946c286d5dc5990abca991baf8cdbfbe199b05aacb221b979411a2fea36f83e26b5ac4f6b4e0ce49038c62316c1848f0
+ languageName: node
+ linkType: hard
+
"aggregate-error@npm:^3.0.0":
version: 3.0.1
resolution: "aggregate-error@npm:3.0.1"
@@ -3647,7 +3708,7 @@ __metadata:
languageName: node
linkType: hard
-"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0, ansi-escapes@npm:^4.3.1, ansi-escapes@npm:^4.3.2":
+"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0, ansi-escapes@npm:^4.3.2":
version: 4.3.2
resolution: "ansi-escapes@npm:4.3.2"
dependencies:
@@ -3713,7 +3774,7 @@ __metadata:
languageName: node
linkType: hard
-"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2":
+"anymatch@npm:^3.0.0, anymatch@npm:^3.0.3, anymatch@npm:~3.1.2":
version: 3.1.3
resolution: "anymatch@npm:3.1.3"
dependencies:
@@ -3784,13 +3845,6 @@ __metadata:
languageName: node
linkType: hard
-"array-back@npm:^4.0.1, array-back@npm:^4.0.2":
- version: 4.0.2
- resolution: "array-back@npm:4.0.2"
- checksum: 10/f30603270771eeb54e5aad5f54604c62b3577a18b6db212a7272b2b6c32049121b49431f656654790ed1469411e45f387e7627c0de8fd0515995cc40df9b9294
- languageName: node
- linkType: hard
-
"array-buffer-byte-length@npm:^1.0.1":
version: 1.0.1
resolution: "array-buffer-byte-length@npm:1.0.1"
@@ -3941,6 +3995,15 @@ __metadata:
languageName: node
linkType: hard
+"async-retry@npm:1.3.3":
+ version: 1.3.3
+ resolution: "async-retry@npm:1.3.3"
+ dependencies:
+ retry: "npm:0.13.1"
+ checksum: 10/38a7152ff7265a9321ea214b9c69e8224ab1febbdec98efbbde6e562f17ff68405569b796b1c5271f354aef8783665d29953f051f68c1fc45306e61aec82fdc4
+ languageName: node
+ linkType: hard
+
"asynckit@npm:^0.4.0":
version: 0.4.0
resolution: "asynckit@npm:0.4.0"
@@ -4308,7 +4371,21 @@ __metadata:
languageName: node
linkType: hard
-"browserslist@npm:^4.14.3, browserslist@npm:^4.14.5, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0":
+"browserslist@npm:^4.21.10":
+ version: 4.23.1
+ resolution: "browserslist@npm:4.23.1"
+ dependencies:
+ caniuse-lite: "npm:^1.0.30001629"
+ electron-to-chromium: "npm:^1.4.796"
+ node-releases: "npm:^2.0.14"
+ update-browserslist-db: "npm:^1.0.16"
+ bin:
+ browserslist: cli.js
+ checksum: 10/91da59f70a8e01ece97133670f9857d6d7e96be78e1b7ffa54b869f97d01d01c237612471b595cee41c1ab212e26e536ce0b6716ad1d6c4368a40c222698cac1
+ languageName: node
+ linkType: hard
+
+"browserslist@npm:^4.22.2, browserslist@npm:^4.23.0":
version: 4.23.0
resolution: "browserslist@npm:4.23.0"
dependencies:
@@ -4460,6 +4537,13 @@ __metadata:
languageName: node
linkType: hard
+"caniuse-lite@npm:^1.0.30001629":
+ version: 1.0.30001640
+ resolution: "caniuse-lite@npm:1.0.30001640"
+ checksum: 10/14f04379452d4302185400db14b286115d25ce96fd09536590233a09908273990deeb1c081a7ea8bc091d86cb4d1665260de8f150e84dc240e17bf7d6af0aca7
+ languageName: node
+ linkType: hard
+
"caseless@npm:~0.12.0":
version: 0.12.0
resolution: "caseless@npm:0.12.0"
@@ -4756,13 +4840,6 @@ __metadata:
languageName: node
linkType: hard
-"colorette@npm:^1.2.1":
- version: 1.4.0
- resolution: "colorette@npm:1.4.0"
- checksum: 10/c8d6c8c3ef5a99acfc3dd9a68f48019f1479ec347551387e4a1762e40f69e98ce19d4dc321ffb4919d1f28a7bdc90c39d4e9a901f4c474fd2124ad93a00c0454
- languageName: node
- linkType: hard
-
"combined-stream@npm:^1.0.6, combined-stream@npm:~1.0.6":
version: 1.0.8
resolution: "combined-stream@npm:1.0.8"
@@ -4772,18 +4849,6 @@ __metadata:
languageName: node
linkType: hard
-"command-line-usage@npm:^6.1.0":
- version: 6.1.3
- resolution: "command-line-usage@npm:6.1.3"
- dependencies:
- array-back: "npm:^4.0.2"
- chalk: "npm:^2.4.2"
- table-layout: "npm:^1.0.2"
- typical: "npm:^5.2.0"
- checksum: 10/902901582a543b26f55f90fc0f266c08a603a92bfadd8d07c66679f3d9eea2c074a039404126b0c4b65ff8452153c5f2010ea2f4ec14b70be0c77241f6d5bd53
- languageName: node
- linkType: hard
-
"commander@npm:^2.20.0":
version: 2.20.3
resolution: "commander@npm:2.20.3"
@@ -4798,13 +4863,6 @@ __metadata:
languageName: node
linkType: hard
-"commander@npm:^6.0.0":
- version: 6.2.1
- resolution: "commander@npm:6.2.1"
- checksum: 10/25b88c2efd0380c84f7844b39cf18510da7bfc5013692d68cdc65f764a1c34e6c8a36ea6d72b6620e3710a930cf8fab2695bdec2bf7107a0f4fa30a3ef3b7d0e
- languageName: node
- linkType: hard
-
"commondir@npm:^1.0.1":
version: 1.0.1
resolution: "commondir@npm:1.0.1"
@@ -5151,13 +5209,6 @@ __metadata:
languageName: node
linkType: hard
-"deep-extend@npm:~0.6.0":
- version: 0.6.0
- resolution: "deep-extend@npm:0.6.0"
- checksum: 10/7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7
- languageName: node
- linkType: hard
-
"deep-is@npm:^0.1.3":
version: 0.1.4
resolution: "deep-is@npm:0.1.4"
@@ -5350,6 +5401,13 @@ __metadata:
languageName: node
linkType: hard
+"electron-to-chromium@npm:^1.4.796":
+ version: 1.4.820
+ resolution: "electron-to-chromium@npm:1.4.820"
+ checksum: 10/6f283fdb22da8b18a071ffce49a181a98b68dca92b46d465026b325593bb1b49acad8926d9274fbe464f1d90006a762b3b83a71d8f1f5df4b334e2b9bd41c040
+ languageName: node
+ linkType: hard
+
"elegant-spinner@npm:^2.0.0":
version: 2.0.0
resolution: "elegant-spinner@npm:2.0.0"
@@ -5402,7 +5460,7 @@ __metadata:
languageName: node
linkType: hard
-"enhanced-resolve@npm:^4.3.0":
+"enhanced-resolve@npm:^4.5.0":
version: 4.5.0
resolution: "enhanced-resolve@npm:4.5.0"
dependencies:
@@ -5413,7 +5471,7 @@ __metadata:
languageName: node
linkType: hard
-"enhanced-resolve@npm:^5.12.0, enhanced-resolve@npm:^5.2.0, enhanced-resolve@npm:^5.8.0":
+"enhanced-resolve@npm:^5.12.0":
version: 5.16.0
resolution: "enhanced-resolve@npm:5.16.0"
dependencies:
@@ -5423,6 +5481,16 @@ __metadata:
languageName: node
linkType: hard
+"enhanced-resolve@npm:^5.17.0":
+ version: 5.17.0
+ resolution: "enhanced-resolve@npm:5.17.0"
+ dependencies:
+ graceful-fs: "npm:^4.2.4"
+ tapable: "npm:^2.2.0"
+ checksum: 10/8f7bf71537d78e7d20a27363793f2c9e13ec44800c7c7830364a448f80a44994aa19d64beecefa1ab49e4de6f7fbe18cc0931dc449c115f02918ff5fcbe7705f
+ languageName: node
+ linkType: hard
+
"enquirer@npm:^2.3.4":
version: 2.3.5
resolution: "enquirer@npm:2.3.5"
@@ -5439,15 +5507,6 @@ __metadata:
languageName: node
linkType: hard
-"envinfo@npm:^7.7.3":
- version: 7.11.1
- resolution: "envinfo@npm:7.11.1"
- bin:
- envinfo: dist/cli.js
- checksum: 10/5a18ead05954ac1643350170fefce2436a9cb758dc402e36fe4616553ee46469f766fcb6df72379d1741a2e5b55918949b343ff6174502c31c524a5cf75f05cd
- languageName: node
- linkType: hard
-
"errno@npm:^0.1.3, errno@npm:~0.1.7":
version: 0.1.8
resolution: "errno@npm:0.1.8"
@@ -5538,10 +5597,10 @@ __metadata:
languageName: node
linkType: hard
-"es-module-lexer@npm:^0.7.1":
- version: 0.7.1
- resolution: "es-module-lexer@npm:0.7.1"
- checksum: 10/f1edf7c2426fb0d833e2f01dd8ff3eb4221e285dda3e1e9a5e8b3830499593df56df8427f879a99ee65500a8e7ccefff2c1c2936f85e800dc24d7c14f67c1905
+"es-module-lexer@npm:^1.2.1":
+ version: 1.5.4
+ resolution: "es-module-lexer@npm:1.5.4"
+ checksum: 10/f29c7c97a58eb17640dcbd71bd6ef754ad4f58f95c3073894573d29dae2cad43ecd2060d97ed5b866dfb7804d5590fb7de1d2c5339a5fceae8bd60b580387fc5
languageName: node
linkType: hard
@@ -5592,33 +5651,33 @@ __metadata:
languageName: node
linkType: hard
-"esbuild@npm:0.20.2":
- version: 0.20.2
- resolution: "esbuild@npm:0.20.2"
- dependencies:
- "@esbuild/aix-ppc64": "npm:0.20.2"
- "@esbuild/android-arm": "npm:0.20.2"
- "@esbuild/android-arm64": "npm:0.20.2"
- "@esbuild/android-x64": "npm:0.20.2"
- "@esbuild/darwin-arm64": "npm:0.20.2"
- "@esbuild/darwin-x64": "npm:0.20.2"
- "@esbuild/freebsd-arm64": "npm:0.20.2"
- "@esbuild/freebsd-x64": "npm:0.20.2"
- "@esbuild/linux-arm": "npm:0.20.2"
- "@esbuild/linux-arm64": "npm:0.20.2"
- "@esbuild/linux-ia32": "npm:0.20.2"
- "@esbuild/linux-loong64": "npm:0.20.2"
- "@esbuild/linux-mips64el": "npm:0.20.2"
- "@esbuild/linux-ppc64": "npm:0.20.2"
- "@esbuild/linux-riscv64": "npm:0.20.2"
- "@esbuild/linux-s390x": "npm:0.20.2"
- "@esbuild/linux-x64": "npm:0.20.2"
- "@esbuild/netbsd-x64": "npm:0.20.2"
- "@esbuild/openbsd-x64": "npm:0.20.2"
- "@esbuild/sunos-x64": "npm:0.20.2"
- "@esbuild/win32-arm64": "npm:0.20.2"
- "@esbuild/win32-ia32": "npm:0.20.2"
- "@esbuild/win32-x64": "npm:0.20.2"
+"esbuild@npm:0.21.5":
+ version: 0.21.5
+ resolution: "esbuild@npm:0.21.5"
+ dependencies:
+ "@esbuild/aix-ppc64": "npm:0.21.5"
+ "@esbuild/android-arm": "npm:0.21.5"
+ "@esbuild/android-arm64": "npm:0.21.5"
+ "@esbuild/android-x64": "npm:0.21.5"
+ "@esbuild/darwin-arm64": "npm:0.21.5"
+ "@esbuild/darwin-x64": "npm:0.21.5"
+ "@esbuild/freebsd-arm64": "npm:0.21.5"
+ "@esbuild/freebsd-x64": "npm:0.21.5"
+ "@esbuild/linux-arm": "npm:0.21.5"
+ "@esbuild/linux-arm64": "npm:0.21.5"
+ "@esbuild/linux-ia32": "npm:0.21.5"
+ "@esbuild/linux-loong64": "npm:0.21.5"
+ "@esbuild/linux-mips64el": "npm:0.21.5"
+ "@esbuild/linux-ppc64": "npm:0.21.5"
+ "@esbuild/linux-riscv64": "npm:0.21.5"
+ "@esbuild/linux-s390x": "npm:0.21.5"
+ "@esbuild/linux-x64": "npm:0.21.5"
+ "@esbuild/netbsd-x64": "npm:0.21.5"
+ "@esbuild/openbsd-x64": "npm:0.21.5"
+ "@esbuild/sunos-x64": "npm:0.21.5"
+ "@esbuild/win32-arm64": "npm:0.21.5"
+ "@esbuild/win32-ia32": "npm:0.21.5"
+ "@esbuild/win32-x64": "npm:0.21.5"
dependenciesMeta:
"@esbuild/aix-ppc64":
optional: true
@@ -5668,7 +5727,7 @@ __metadata:
optional: true
bin:
esbuild: bin/esbuild
- checksum: 10/663215ab7e599651e00d61b528a63136e1f1d397db8b9c3712540af928c9476d61da95aefa81b7a8dfc7a9fdd7616fcf08395c27be68be8c99953fb461863ce4
+ checksum: 10/d2ff2ca84d30cce8e871517374d6c2290835380dc7cd413b2d49189ed170d45e407be14de2cb4794cf76f75cf89955c4714726ebd3de7444b3046f5cab23ab6b
languageName: node
linkType: hard
@@ -5679,6 +5738,13 @@ __metadata:
languageName: node
linkType: hard
+"escalade@npm:^3.1.2":
+ version: 3.1.2
+ resolution: "escalade@npm:3.1.2"
+ checksum: 10/a1e07fea2f15663c30e40b9193d658397846ffe28ce0a3e4da0d8e485fedfeca228ab846aee101a05015829adf39f9934ff45b2a3fca47bed37a29646bd05cd3
+ languageName: node
+ linkType: hard
+
"escape-string-regexp@npm:^1.0.5":
version: 1.0.5
resolution: "escape-string-regexp@npm:1.0.5"
@@ -5806,7 +5872,7 @@ __metadata:
languageName: node
linkType: hard
-"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.0":
+"eslint-scope@npm:5.1.1":
version: 5.1.1
resolution: "eslint-scope@npm:5.1.1"
dependencies:
@@ -5958,6 +6024,13 @@ __metadata:
languageName: node
linkType: hard
+"eventemitter3@npm:^4.0.4":
+ version: 4.0.7
+ resolution: "eventemitter3@npm:4.0.7"
+ checksum: 10/8030029382404942c01d0037079f1b1bc8fed524b5849c237b80549b01e2fc49709e1d0c557fa65ca4498fc9e24cff1475ef7b855121fcc15f9d61f93e282346
+ languageName: node
+ linkType: hard
+
"events@npm:^3.0.0, events@npm:^3.2.0":
version: 3.3.0
resolution: "events@npm:3.3.0"
@@ -6667,7 +6740,7 @@ __metadata:
languageName: node
linkType: hard
-"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.3, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.9":
+"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.3, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.9":
version: 4.2.11
resolution: "graceful-fs@npm:4.2.11"
checksum: 10/bf152d0ed1dc159239db1ba1f74fdbc40cb02f626770dcd5815c427ce0688c2635a06ed69af364396da4636d0408fcf7d4afdf7881724c3307e46aff30ca49e2
@@ -7024,13 +7097,6 @@ __metadata:
languageName: node
linkType: hard
-"interpret@npm:^2.0.0":
- version: 2.2.0
- resolution: "interpret@npm:2.2.0"
- checksum: 10/a62d4de5c1f8ab1fd0ccc8a1a8cca8dc31e14928b70364f0787576fe4639c0c463bd79cfe58c9bd9f54db9b7e53d3e646e68fb7627c6b65e3b0e3893156c5126
- languageName: node
- linkType: hard
-
"is-accessor-descriptor@npm:^0.1.6":
version: 0.1.6
resolution: "is-accessor-descriptor@npm:0.1.6"
@@ -8074,7 +8140,7 @@ __metadata:
languageName: node
linkType: hard
-"json-parse-even-better-errors@npm:^2.3.0":
+"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1":
version: 2.3.1
resolution: "json-parse-even-better-errors@npm:2.3.1"
checksum: 10/5f3a99009ed5f2a5a67d06e2f298cc97bc86d462034173308156f15b43a6e850be8511dc204b9b94566305da2947f7d90289657237d210351a39059ff9d666cf
@@ -8102,7 +8168,7 @@ __metadata:
languageName: node
linkType: hard
-"json-stringify-safe@npm:~5.0.1":
+"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1":
version: 5.0.1
resolution: "json-stringify-safe@npm:5.0.1"
checksum: 10/59169a081e4eeb6f9559ae1f938f656191c000e0512aa6df9f3c8b2437a4ab1823819c6b9fd1818a4e39593ccfd72e9a051fdd3e2d1e340ed913679e888ded8c
@@ -8277,7 +8343,7 @@ __metadata:
languageName: node
linkType: hard
-"loader-runner@npm:^4.1.0, loader-runner@npm:^4.2.0":
+"loader-runner@npm:^4.2.0":
version: 4.3.0
resolution: "loader-runner@npm:4.3.0"
checksum: 10/555ae002869c1e8942a0efd29a99b50a0ce6c3296efea95caf48f00d7f6f7f659203ed6613688b6181aa81dc76de3e65ece43094c6dffef3127fe1a84d973cd3
@@ -8344,13 +8410,6 @@ __metadata:
languageName: node
linkType: hard
-"lodash@npm:^4.17.15":
- version: 4.17.21
- resolution: "lodash@npm:4.17.21"
- checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532
- languageName: node
- linkType: hard
-
"log-symbols@npm:^3.0.0":
version: 3.0.0
resolution: "log-symbols@npm:3.0.0"
@@ -8784,6 +8843,16 @@ __metadata:
languageName: node
linkType: hard
+"nock@npm:14.0.0-beta.7":
+ version: 14.0.0-beta.7
+ resolution: "nock@npm:14.0.0-beta.7"
+ dependencies:
+ json-stringify-safe: "npm:^5.0.1"
+ propagate: "npm:^2.0.0"
+ checksum: 10/c60c6df0c75bbec032bfc7140eed1fdb92bfed193263b2a2bc49acad255d127472c1641a29a691236882103502e39fe40fbe3d52fd0ed4a63e96dd350fc00526
+ languageName: node
+ linkType: hard
+
"node-gyp@npm:latest":
version: 7.0.0
resolution: "node-gyp@npm:7.0.0"
@@ -9096,6 +9165,13 @@ __metadata:
languageName: node
linkType: hard
+"p-finally@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "p-finally@npm:1.0.0"
+ checksum: 10/93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4
+ languageName: node
+ linkType: hard
+
"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0":
version: 2.3.0
resolution: "p-limit@npm:2.3.0"
@@ -9150,6 +9226,25 @@ __metadata:
languageName: node
linkType: hard
+"p-queue@npm:6.6.2":
+ version: 6.6.2
+ resolution: "p-queue@npm:6.6.2"
+ dependencies:
+ eventemitter3: "npm:^4.0.4"
+ p-timeout: "npm:^3.2.0"
+ checksum: 10/60fe227ffce59fbc5b1b081305b61a2f283ff145005853702b7d4d3f99a0176bd21bb126c99a962e51fe1e01cb8aa10f0488b7bbe73b5dc2e84b5cc650b8ffd2
+ languageName: node
+ linkType: hard
+
+"p-timeout@npm:^3.2.0":
+ version: 3.2.0
+ resolution: "p-timeout@npm:3.2.0"
+ dependencies:
+ p-finally: "npm:^1.0.0"
+ checksum: 10/3dd0eaa048780a6f23e5855df3dd45c7beacff1f820476c1d0d1bcd6648e3298752ba2c877aa1c92f6453c7dd23faaf13d9f5149fc14c0598a142e2c5e8d649c
+ languageName: node
+ linkType: hard
+
"p-try@npm:^2.0.0":
version: 2.2.0
resolution: "p-try@npm:2.2.0"
@@ -9321,6 +9416,13 @@ __metadata:
languageName: node
linkType: hard
+"picocolors@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "picocolors@npm:1.0.1"
+ checksum: 10/fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5
+ languageName: node
+ linkType: hard
+
"picomatch@npm:^2.0.4, picomatch@npm:^2.0.5, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1":
version: 2.3.1
resolution: "picomatch@npm:2.3.1"
@@ -9440,41 +9542,6 @@ __metadata:
languageName: node
linkType: hard
-"project-esbuild@workspace:packages/tests/src/plugins/telemetry/mocks/projects/esbuild":
- version: 0.0.0-use.local
- resolution: "project-esbuild@workspace:packages/tests/src/plugins/telemetry/mocks/projects/esbuild"
- dependencies:
- "@datadog/esbuild-plugin": "workspace:*"
- "@types/node": "npm:^18"
- esbuild: "npm:0.20.2"
- sub_app: "workspace:*"
- ts-node: "npm:10.9.2"
- typescript: "npm:5.4.3"
- languageName: unknown
- linkType: soft
-
-"project-webpack4@workspace:packages/tests/src/plugins/telemetry/mocks/projects/webpack4":
- version: 0.0.0-use.local
- resolution: "project-webpack4@workspace:packages/tests/src/plugins/telemetry/mocks/projects/webpack4"
- dependencies:
- "@datadog/webpack-plugin": "workspace:*"
- webpack: "npm:4.44.2"
- webpack-cli: "npm:4.1.0"
- webpack4_app: "workspace:*"
- languageName: unknown
- linkType: soft
-
-"project-webpack5@workspace:packages/tests/src/plugins/telemetry/mocks/projects/webpack5":
- version: 0.0.0-use.local
- resolution: "project-webpack5@workspace:packages/tests/src/plugins/telemetry/mocks/projects/webpack5"
- dependencies:
- "@datadog/webpack-plugin": "workspace:*"
- webpack: "npm:5.1.3"
- webpack-cli: "npm:4.1.0"
- webpack5_app: "workspace:*"
- languageName: unknown
- linkType: soft
-
"promise-inflight@npm:^1.0.1":
version: 1.0.1
resolution: "promise-inflight@npm:1.0.1"
@@ -9492,6 +9559,13 @@ __metadata:
languageName: node
linkType: hard
+"propagate@npm:^2.0.0":
+ version: 2.0.1
+ resolution: "propagate@npm:2.0.1"
+ checksum: 10/8c761c16e8232f82f6d015d3e01e8bd4109f47ad804f904d950f6fe319813b448ca112246b6bfdc182b400424b155b0b7c4525a9bb009e6fa950200157569c14
+ languageName: node
+ linkType: hard
+
"prr@npm:~1.0.1":
version: 1.0.1
resolution: "prr@npm:1.0.1"
@@ -9674,22 +9748,6 @@ __metadata:
languageName: node
linkType: hard
-"rechoir@npm:^0.7.0":
- version: 0.7.1
- resolution: "rechoir@npm:0.7.1"
- dependencies:
- resolve: "npm:^1.9.0"
- checksum: 10/2a04aab4e28c05fcd6ee6768446bc8b859d8f108e71fc7f5bcbc5ef25e53330ce2c11d10f82a24591a2df4c49c4f61feabe1fd11f844c66feedd4cd7bb61146a
- languageName: node
- linkType: hard
-
-"reduce-flatten@npm:^2.0.0":
- version: 2.0.0
- resolution: "reduce-flatten@npm:2.0.0"
- checksum: 10/64393ef99a16b20692acfd60982d7fdbd7ff8d9f8f185c6023466444c6dd2abb929d67717a83cec7f7f8fb5f46a25d515b3b2bf2238fdbfcdbfd01d2a9e73cb8
- languageName: node
- linkType: hard
-
"regenerate-unicode-properties@npm:^10.1.0":
version: 10.1.1
resolution: "regenerate-unicode-properties@npm:10.1.1"
@@ -9869,7 +9927,7 @@ __metadata:
languageName: node
linkType: hard
-"resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4, resolve@npm:^1.9.0":
+"resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.4":
version: 1.22.8
resolution: "resolve@npm:1.22.8"
dependencies:
@@ -9882,7 +9940,7 @@ __metadata:
languageName: node
linkType: hard
-"resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A^1.9.0#optional!builtin":
+"resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin":
version: 1.22.8
resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d"
dependencies:
@@ -9912,6 +9970,13 @@ __metadata:
languageName: node
linkType: hard
+"retry@npm:0.13.1":
+ version: 0.13.1
+ resolution: "retry@npm:0.13.1"
+ checksum: 10/6125ec2e06d6e47e9201539c887defba4e47f63471db304c59e4b82fc63c8e89ca06a77e9d34939a9a42a76f00774b2f46c0d4a4cbb3e287268bd018ed69426d
+ languageName: node
+ linkType: hard
+
"reusify@npm:^1.0.4":
version: 1.0.4
resolution: "reusify@npm:1.0.4"
@@ -9982,26 +10047,26 @@ __metadata:
languageName: node
linkType: hard
-"rollup@npm:4.17.1":
- version: 4.17.1
- resolution: "rollup@npm:4.17.1"
- dependencies:
- "@rollup/rollup-android-arm-eabi": "npm:4.17.1"
- "@rollup/rollup-android-arm64": "npm:4.17.1"
- "@rollup/rollup-darwin-arm64": "npm:4.17.1"
- "@rollup/rollup-darwin-x64": "npm:4.17.1"
- "@rollup/rollup-linux-arm-gnueabihf": "npm:4.17.1"
- "@rollup/rollup-linux-arm-musleabihf": "npm:4.17.1"
- "@rollup/rollup-linux-arm64-gnu": "npm:4.17.1"
- "@rollup/rollup-linux-arm64-musl": "npm:4.17.1"
- "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.17.1"
- "@rollup/rollup-linux-riscv64-gnu": "npm:4.17.1"
- "@rollup/rollup-linux-s390x-gnu": "npm:4.17.1"
- "@rollup/rollup-linux-x64-gnu": "npm:4.17.1"
- "@rollup/rollup-linux-x64-musl": "npm:4.17.1"
- "@rollup/rollup-win32-arm64-msvc": "npm:4.17.1"
- "@rollup/rollup-win32-ia32-msvc": "npm:4.17.1"
- "@rollup/rollup-win32-x64-msvc": "npm:4.17.1"
+"rollup@npm:4.18.0":
+ version: 4.18.0
+ resolution: "rollup@npm:4.18.0"
+ dependencies:
+ "@rollup/rollup-android-arm-eabi": "npm:4.18.0"
+ "@rollup/rollup-android-arm64": "npm:4.18.0"
+ "@rollup/rollup-darwin-arm64": "npm:4.18.0"
+ "@rollup/rollup-darwin-x64": "npm:4.18.0"
+ "@rollup/rollup-linux-arm-gnueabihf": "npm:4.18.0"
+ "@rollup/rollup-linux-arm-musleabihf": "npm:4.18.0"
+ "@rollup/rollup-linux-arm64-gnu": "npm:4.18.0"
+ "@rollup/rollup-linux-arm64-musl": "npm:4.18.0"
+ "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.18.0"
+ "@rollup/rollup-linux-riscv64-gnu": "npm:4.18.0"
+ "@rollup/rollup-linux-s390x-gnu": "npm:4.18.0"
+ "@rollup/rollup-linux-x64-gnu": "npm:4.18.0"
+ "@rollup/rollup-linux-x64-musl": "npm:4.18.0"
+ "@rollup/rollup-win32-arm64-msvc": "npm:4.18.0"
+ "@rollup/rollup-win32-ia32-msvc": "npm:4.18.0"
+ "@rollup/rollup-win32-x64-msvc": "npm:4.18.0"
"@types/estree": "npm:1.0.5"
fsevents: "npm:~2.3.2"
dependenciesMeta:
@@ -10041,7 +10106,7 @@ __metadata:
optional: true
bin:
rollup: dist/bin/rollup
- checksum: 10/4072609e246c9f481a924d053bf593d02b92ebd1e69cc2092ff202cbd6eeadf558f5e1434dd2406597b36f0dd9e3b547810748fad7727a38ea35798a553bcca5
+ checksum: 10/2320fe653cfd5e3d72ecab2f1d52d47e7b624a6ab02919f53c1ad1c5efa3b66e277c3ecfef03bb97651e79cef04bfefd34ad1f6e648f496572bf76c834f19599
languageName: node
linkType: hard
@@ -10136,7 +10201,7 @@ __metadata:
languageName: node
linkType: hard
-"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.0, schema-utils@npm:^3.1.1":
+"schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0":
version: 3.3.0
resolution: "schema-utils@npm:3.3.0"
dependencies:
@@ -10433,7 +10498,7 @@ __metadata:
languageName: node
linkType: hard
-"source-list-map@npm:^2.0.0, source-list-map@npm:^2.0.1":
+"source-list-map@npm:^2.0.0":
version: 2.0.1
resolution: "source-list-map@npm:2.0.1"
checksum: 10/3918ffba5fe8447bc816800026fe707aab233d9d05a3487225d880e23b7e37ed455b4e1b844e05644f6ecc7c9b837c0cc32da54dd37f77c993370ebcdb049246
@@ -10494,6 +10559,13 @@ __metadata:
languageName: node
linkType: hard
+"source-map@npm:^0.7.3":
+ version: 0.7.4
+ resolution: "source-map@npm:0.7.4"
+ checksum: 10/a0f7c9b797eda93139842fd28648e868a9a03ea0ad0d9fa6602a0c1f17b7fb6a7dcca00c144476cccaeaae5042e99a285723b1a201e844ad67221bf5d428f1dc
+ languageName: node
+ linkType: hard
+
"split-string@npm:^3.0.1, split-string@npm:^3.0.2":
version: 3.1.0
resolution: "split-string@npm:3.1.0"
@@ -10747,12 +10819,6 @@ __metadata:
languageName: node
linkType: hard
-"sub_app@workspace:*, sub_app@workspace:packages/tests/src/plugins/telemetry/mocks/projects/esbuild/workspaces/app":
- version: 0.0.0-use.local
- resolution: "sub_app@workspace:packages/tests/src/plugins/telemetry/mocks/projects/esbuild/workspaces/app"
- languageName: unknown
- linkType: soft
-
"supports-color@npm:^5.2.0, supports-color@npm:^5.3.0":
version: 5.5.0
resolution: "supports-color@npm:5.5.0"
@@ -10797,18 +10863,6 @@ __metadata:
languageName: node
linkType: hard
-"table-layout@npm:^1.0.2":
- version: 1.0.2
- resolution: "table-layout@npm:1.0.2"
- dependencies:
- array-back: "npm:^4.0.1"
- deep-extend: "npm:~0.6.0"
- typical: "npm:^5.2.0"
- wordwrapjs: "npm:^4.0.0"
- checksum: 10/5dd12bc64ddf246f774fc51b45398dd8da900b7bb246595c84007ea292c15936264701660b80704be17da5d4066a9a250549418c40a2b635a0916c9294b103af
- languageName: node
- linkType: hard
-
"tapable@npm:^1.0.0, tapable@npm:^1.1.3":
version: 1.1.3
resolution: "tapable@npm:1.1.3"
@@ -10816,7 +10870,7 @@ __metadata:
languageName: node
linkType: hard
-"tapable@npm:^2.0.0, tapable@npm:^2.1.1, tapable@npm:^2.2.0":
+"tapable@npm:^2.1.1, tapable@npm:^2.2.0":
version: 2.2.1
resolution: "tapable@npm:2.2.1"
checksum: 10/1769336dd21481ae6347611ca5fca47add0962fd8e80466515032125eca0084a4f0ede11e65341b9c0018ef4e1cf1ad820adbb0fba7cc99865c6005734000b0a
@@ -10856,7 +10910,7 @@ __metadata:
languageName: node
linkType: hard
-"terser-webpack-plugin@npm:^5.0.0, terser-webpack-plugin@npm:^5.1.3":
+"terser-webpack-plugin@npm:^5.3.10":
version: 5.3.10
resolution: "terser-webpack-plugin@npm:5.3.10"
dependencies:
@@ -11290,13 +11344,6 @@ __metadata:
languageName: node
linkType: hard
-"typical@npm:^5.2.0":
- version: 5.2.0
- resolution: "typical@npm:5.2.0"
- checksum: 10/fd8e4197cb2e021ca6d11fea0018ee219c29bf4160ab613492f74c0e21806003d1cd92a15088b111778a7b5c6432e4e28321899785a86980b390b87c4010efe5
- languageName: node
- linkType: hard
-
"unbox-primitive@npm:^1.0.2":
version: 1.0.2
resolution: "unbox-primitive@npm:1.0.2"
@@ -11384,15 +11431,15 @@ __metadata:
languageName: node
linkType: hard
-"unplugin@npm:1.10.1":
- version: 1.10.1
- resolution: "unplugin@npm:1.10.1"
+"unplugin@npm:1.11.0":
+ version: 1.11.0
+ resolution: "unplugin@npm:1.11.0"
dependencies:
acorn: "npm:^8.11.3"
chokidar: "npm:^3.6.0"
webpack-sources: "npm:^3.2.3"
webpack-virtual-modules: "npm:^0.6.1"
- checksum: 10/d9819fad8a177c080f7f2b80744d633101935a8a6cc26b42e6a46648cccc1c5de83b7763233d56e11af53f34e6c5074816262897c9048a31e5d697bef5bb57e7
+ checksum: 10/debe6223b0ece5f54e9a243525da8c4473e30a86d9440d90a03a9b05e3d1ddb7f12820bf5466dd50d1c3f00219e46fefc94205669cff9d63d12024e4013a5318
languageName: node
linkType: hard
@@ -11427,6 +11474,20 @@ __metadata:
languageName: node
linkType: hard
+"update-browserslist-db@npm:^1.0.16":
+ version: 1.1.0
+ resolution: "update-browserslist-db@npm:1.1.0"
+ dependencies:
+ escalade: "npm:^3.1.2"
+ picocolors: "npm:^1.0.1"
+ peerDependencies:
+ browserslist: ">= 4.21.0"
+ bin:
+ update-browserslist-db: cli.js
+ checksum: 10/d70b9efeaf4601aadb1a4f6456a7a5d9118e0063d995866b8e0c5e0cf559482671dab6ce7b079f9536b06758a344fbd83f974b965211e1c6e8d1958540b0c24c
+ languageName: node
+ linkType: hard
+
"uri-js@npm:^4.2.2":
version: 4.2.2
resolution: "uri-js@npm:4.2.2"
@@ -11510,13 +11571,6 @@ __metadata:
languageName: node
linkType: hard
-"v8-compile-cache@npm:^2.1.0":
- version: 2.4.0
- resolution: "v8-compile-cache@npm:2.4.0"
- checksum: 10/49e726d7b2825ef7bc92187ecd57c59525957badbddb18fa529b0458b9280c59a1607ad3da4abe7808e9f9a00ec99b0fc07e485ffb7358cd5c11b2ef68d2145f
- languageName: node
- linkType: hard
-
"v8-to-istanbul@npm:^9.0.1":
version: 9.2.0
resolution: "v8-to-istanbul@npm:9.2.0"
@@ -11581,7 +11635,7 @@ __metadata:
languageName: node
linkType: hard
-"watchpack@npm:^2.0.0, watchpack@npm:^2.2.0":
+"watchpack@npm:^2.4.1":
version: 2.4.1
resolution: "watchpack@npm:2.4.1"
dependencies:
@@ -11600,53 +11654,6 @@ __metadata:
languageName: node
linkType: hard
-"webpack-cli@npm:4.1.0":
- version: 4.1.0
- resolution: "webpack-cli@npm:4.1.0"
- dependencies:
- "@webpack-cli/info": "npm:^1.0.2"
- "@webpack-cli/serve": "npm:^1.0.1"
- ansi-escapes: "npm:^4.3.1"
- colorette: "npm:^1.2.1"
- command-line-usage: "npm:^6.1.0"
- commander: "npm:^6.0.0"
- enquirer: "npm:^2.3.4"
- execa: "npm:^4.0.0"
- import-local: "npm:^3.0.2"
- interpret: "npm:^2.0.0"
- rechoir: "npm:^0.7.0"
- v8-compile-cache: "npm:^2.1.0"
- webpack-merge: "npm:^4.2.2"
- peerDependencies:
- webpack: 4.x.x || 5.x.x
- peerDependenciesMeta:
- "@webpack-cli/generate-loader":
- optional: true
- "@webpack-cli/generate-plugin":
- optional: true
- "@webpack-cli/init":
- optional: true
- "@webpack-cli/migrate":
- optional: true
- webpack-bundle-analyzer:
- optional: true
- webpack-dev-server:
- optional: true
- bin:
- webpack-cli: bin/cli.js
- checksum: 10/14a0bfc722bbfeabd1f15f9c0bfd02045f1af51ee34d78dd012cb0dc3827eab5b7125047a130d29b75ef266a40b102e29b6f67ca904f35c524e27144b5bfe5e1
- languageName: node
- linkType: hard
-
-"webpack-merge@npm:^4.2.2":
- version: 4.2.2
- resolution: "webpack-merge@npm:4.2.2"
- dependencies:
- lodash: "npm:^4.17.15"
- checksum: 10/93b59d623f7badca46af265162495278ef79c254f8b31bfcc740f25dda11712383f59b2d25c9c309bbe4ad7688e6871c80e6b2ed9035f0fc8d5a1c150f667b03
- languageName: node
- linkType: hard
-
"webpack-sources@npm:^1.4.0, webpack-sources@npm:^1.4.1":
version: 1.4.3
resolution: "webpack-sources@npm:1.4.3"
@@ -11657,23 +11664,6 @@ __metadata:
languageName: node
linkType: hard
-"webpack-sources@npm:^2.0.1":
- version: 2.3.1
- resolution: "webpack-sources@npm:2.3.1"
- dependencies:
- source-list-map: "npm:^2.0.1"
- source-map: "npm:^0.6.1"
- checksum: 10/0c4bb91f2899205648da25b68edf4495a360692af2c426cde98b188367478c93d5e33e2b08665e070ac0ece59ade8d52175da656a212b44701ce4a271ca66695
- languageName: node
- linkType: hard
-
-"webpack-sources@npm:^3.2.0":
- version: 3.2.0
- resolution: "webpack-sources@npm:3.2.0"
- checksum: 10/351a50e4ee857e0affe0ce813623855f96b8660ec9456579078668b01a1f9c5cb8305f85bc720a03172ff45dfbb0e9627534c842c4293456f53eb3f9d574f84e
- languageName: node
- linkType: hard
-
"webpack-sources@npm:^3.2.3":
version: 3.2.3
resolution: "webpack-sources@npm:3.2.3"
@@ -11688,21 +11678,9 @@ __metadata:
languageName: node
linkType: hard
-"webpack4_app@workspace:*, webpack4_app@workspace:packages/tests/src/plugins/telemetry/mocks/projects/webpack4/workspaces/app":
- version: 0.0.0-use.local
- resolution: "webpack4_app@workspace:packages/tests/src/plugins/telemetry/mocks/projects/webpack4/workspaces/app"
- languageName: unknown
- linkType: soft
-
-"webpack5_app@workspace:*, webpack5_app@workspace:packages/tests/src/plugins/telemetry/mocks/projects/webpack5/workspaces/app":
- version: 0.0.0-use.local
- resolution: "webpack5_app@workspace:packages/tests/src/plugins/telemetry/mocks/projects/webpack5/workspaces/app"
- languageName: unknown
- linkType: soft
-
-"webpack@npm:4.44.2":
- version: 4.44.2
- resolution: "webpack@npm:4.44.2"
+"webpack4@npm:webpack@4.47.0":
+ version: 4.47.0
+ resolution: "webpack@npm:4.47.0"
dependencies:
"@webassemblyjs/ast": "npm:1.9.0"
"@webassemblyjs/helper-module-context": "npm:1.9.0"
@@ -11712,7 +11690,7 @@ __metadata:
ajv: "npm:^6.10.2"
ajv-keywords: "npm:^3.4.1"
chrome-trace-event: "npm:^1.0.2"
- enhanced-resolve: "npm:^4.3.0"
+ enhanced-resolve: "npm:^4.5.0"
eslint-scope: "npm:^4.0.3"
json-parse-better-errors: "npm:^1.0.2"
loader-runner: "npm:^2.4.0"
@@ -11734,81 +11712,44 @@ __metadata:
optional: true
bin:
webpack: bin/webpack.js
- checksum: 10/1be262824498edae949931ed3efb674c27202edcf38eda0419014ba062b7690dbebc442b04e7f1c5822209a0a5ef7c4e33f1b1f9427986dd23cb76e25d05ac3a
- languageName: node
- linkType: hard
-
-"webpack@npm:5.1.3":
- version: 5.1.3
- resolution: "webpack@npm:5.1.3"
- dependencies:
- "@types/eslint-scope": "npm:^3.7.0"
- "@types/estree": "npm:^0.0.45"
- "@webassemblyjs/ast": "npm:1.9.0"
- "@webassemblyjs/helper-module-context": "npm:1.9.0"
- "@webassemblyjs/wasm-edit": "npm:1.9.0"
- "@webassemblyjs/wasm-parser": "npm:1.9.0"
- acorn: "npm:^8.0.3"
- browserslist: "npm:^4.14.3"
- chrome-trace-event: "npm:^1.0.2"
- enhanced-resolve: "npm:^5.2.0"
- eslint-scope: "npm:^5.1.0"
- events: "npm:^3.2.0"
- glob-to-regexp: "npm:^0.4.1"
- graceful-fs: "npm:^4.2.4"
- json-parse-better-errors: "npm:^1.0.2"
- loader-runner: "npm:^4.1.0"
- mime-types: "npm:^2.1.27"
- neo-async: "npm:^2.6.2"
- pkg-dir: "npm:^4.2.0"
- schema-utils: "npm:^3.0.0"
- tapable: "npm:^2.0.0"
- terser-webpack-plugin: "npm:^5.0.0"
- watchpack: "npm:^2.0.0"
- webpack-sources: "npm:^2.0.1"
- peerDependenciesMeta:
- webpack-cli:
- optional: true
- bin:
- webpack: bin/webpack.js
- checksum: 10/ab2c7b914baba2e5e8ff12f6e0a284403fa43a82a1b7e5ebc28f209b8f166f1498fe2cd725cfa73bb3fca97be7f023ca0292e806eff01ea735d697af0f168cc9
+ checksum: 10/d5763ee8d63a3c6712159e19e9439156b00ef3e33f728384a7a7ebe070be80322bf5b3fe4b131afd7b6da5053869270a9aee68e2822ec40461a1ce9d92076931
languageName: node
linkType: hard
-"webpack@npm:5.49.0":
- version: 5.49.0
- resolution: "webpack@npm:5.49.0"
+"webpack@npm:5.92.1":
+ version: 5.92.1
+ resolution: "webpack@npm:5.92.1"
dependencies:
- "@types/eslint-scope": "npm:^3.7.0"
- "@types/estree": "npm:^0.0.50"
- "@webassemblyjs/ast": "npm:1.11.1"
- "@webassemblyjs/wasm-edit": "npm:1.11.1"
- "@webassemblyjs/wasm-parser": "npm:1.11.1"
- acorn: "npm:^8.4.1"
- acorn-import-assertions: "npm:^1.7.6"
- browserslist: "npm:^4.14.5"
+ "@types/eslint-scope": "npm:^3.7.3"
+ "@types/estree": "npm:^1.0.5"
+ "@webassemblyjs/ast": "npm:^1.12.1"
+ "@webassemblyjs/wasm-edit": "npm:^1.12.1"
+ "@webassemblyjs/wasm-parser": "npm:^1.12.1"
+ acorn: "npm:^8.7.1"
+ acorn-import-attributes: "npm:^1.9.5"
+ browserslist: "npm:^4.21.10"
chrome-trace-event: "npm:^1.0.2"
- enhanced-resolve: "npm:^5.8.0"
- es-module-lexer: "npm:^0.7.1"
+ enhanced-resolve: "npm:^5.17.0"
+ es-module-lexer: "npm:^1.2.1"
eslint-scope: "npm:5.1.1"
events: "npm:^3.2.0"
glob-to-regexp: "npm:^0.4.1"
- graceful-fs: "npm:^4.2.4"
- json-parse-better-errors: "npm:^1.0.2"
+ graceful-fs: "npm:^4.2.11"
+ json-parse-even-better-errors: "npm:^2.3.1"
loader-runner: "npm:^4.2.0"
mime-types: "npm:^2.1.27"
neo-async: "npm:^2.6.2"
- schema-utils: "npm:^3.1.0"
+ schema-utils: "npm:^3.2.0"
tapable: "npm:^2.1.1"
- terser-webpack-plugin: "npm:^5.1.3"
- watchpack: "npm:^2.2.0"
- webpack-sources: "npm:^3.2.0"
+ terser-webpack-plugin: "npm:^5.3.10"
+ watchpack: "npm:^2.4.1"
+ webpack-sources: "npm:^3.2.3"
peerDependenciesMeta:
webpack-cli:
optional: true
bin:
webpack: bin/webpack.js
- checksum: 10/bcdba9343529b2e2da82af4d94ba385d130050c6608275c0e94796a034a11aca61c5d07afab2b343971a1511bcb9a85721a457fad5fd92931a17f367c7e24495
+ checksum: 10/76fcfbebcc0719c4734c65a01dcef7a0f18f3f2647484e8a7e8606adbd128ac42756bb3a8b7e2d486fe97f6286ebdc7b937ccdf3cf1d21b4684134bb89bbed89
languageName: node
linkType: hard
@@ -11865,16 +11806,6 @@ __metadata:
languageName: node
linkType: hard
-"wordwrapjs@npm:^4.0.0":
- version: 4.0.1
- resolution: "wordwrapjs@npm:4.0.1"
- dependencies:
- reduce-flatten: "npm:^2.0.0"
- typical: "npm:^5.2.0"
- checksum: 10/4182c48c9d3eab0932fb9f9f202e3f1d4d28ff6db3fd2e1654ec8606677d8e0ab80110f0f8e2e236ee2b52631cbc5fccf3097e9287e3ace20cbc1613a784befc
- languageName: node
- linkType: hard
-
"worker-farm@npm:^1.7.0":
version: 1.7.0
resolution: "worker-farm@npm:1.7.0"