diff --git a/packages/bundler-plugin-core/package.json b/packages/bundler-plugin-core/package.json index 640d4243..e88033a4 100644 --- a/packages/bundler-plugin-core/package.json +++ b/packages/bundler-plugin-core/package.json @@ -52,9 +52,11 @@ "fix": "eslint ./src ./test --format stylish --fix" }, "dependencies": { + "@babel/core": "7.18.5", "@sentry/cli": "^2.22.3", "@sentry/node": "^7.60.0", "@sentry/utils": "^7.60.0", + "@sentry/component-annotate-plugin": "2.10.3", "dotenv": "^16.3.1", "find-up": "5.0.0", "glob": "9.3.2", @@ -62,7 +64,6 @@ "unplugin": "1.0.1" }, "devDependencies": { - "@babel/core": "7.18.5", "@babel/preset-env": "7.18.2", "@babel/preset-typescript": "7.17.12", "@rollup/plugin-babel": "5.3.1", diff --git a/packages/bundler-plugin-core/src/index.ts b/packages/bundler-plugin-core/src/index.ts index d7f46758..99a39729 100644 --- a/packages/bundler-plugin-core/src/index.ts +++ b/packages/bundler-plugin-core/src/index.ts @@ -1,8 +1,10 @@ import SentryCli from "@sentry/cli"; +import { transformAsync } from "@babel/core"; +import { componentNameAnnotatePlugin } from "@sentry/component-annotate-plugin"; import * as fs from "fs"; import * as path from "path"; import MagicString from "magic-string"; -import { createUnplugin, UnpluginOptions } from "unplugin"; +import { createUnplugin, TransformResult, UnpluginOptions } from "unplugin"; import { normalizeUserOptions, validateOptions } from "./options-mapping"; import { createDebugIdUploadFunction } from "./debug-id-upload"; import { releaseManagementPlugin } from "./plugins/release-management"; @@ -22,9 +24,12 @@ import { } from "./utils"; import * as dotenv from "dotenv"; import { glob } from "glob"; +import pkg from "@sentry/utils"; +const { logger } = pkg; interface SentryUnpluginFactoryOptions { releaseInjectionPlugin: (injectionCode: string) => UnpluginOptions; + componentNameAnnotatePlugin?: () => UnpluginOptions; moduleMetadataInjectionPlugin?: (injectionCode: string) => UnpluginOptions; debugIdInjectionPlugin: () => UnpluginOptions; debugIdUploadPlugin: (upload: (buildArtifacts: string[]) => Promise) => UnpluginOptions; @@ -60,6 +65,7 @@ interface SentryUnpluginFactoryOptions { */ export function sentryUnpluginFactory({ releaseInjectionPlugin, + componentNameAnnotatePlugin, moduleMetadataInjectionPlugin, debugIdInjectionPlugin, debugIdUploadPlugin, @@ -317,6 +323,20 @@ export function sentryUnpluginFactory({ ); } + if (options.reactComponentAnnotation) { + if (!options.reactComponentAnnotation.enabled) { + logger.info( + "The component name annotate plugin is currently disabled. Skipping component name annotations." + ); + } else if (options.reactComponentAnnotation.enabled && !componentNameAnnotatePlugin) { + logger.warn( + "The component name annotate plugin is currently not supported by '@sentry/esbuild-plugin'" + ); + } else { + componentNameAnnotatePlugin && plugins.push(componentNameAnnotatePlugin()); + } + } + return plugins; }); } @@ -346,7 +366,6 @@ export function sentryCliBinaryExists(): boolean { export function createRollupReleaseInjectionHooks(injectionCode: string) { const virtualReleaseInjectionFileId = "\0sentry-release-injection-file"; - return { resolveId(id: string) { if (id === virtualReleaseInjectionFileId) { @@ -510,6 +529,60 @@ export function createRollupDebugIdUploadHooks( }; } +export function createComponentNameAnnotateHooks() { + type ParserPlugins = NonNullable< + NonNullable[1]>["parserOpts"] + >["plugins"]; + + return { + async transform(this: void, code: string, id: string): Promise { + // id may contain query and hash which will trip up our file extension logic below + const idWithoutQueryAndHash = stripQueryAndHashFromPath(id); + + if (idWithoutQueryAndHash.match(/\\node_modules\\|\/node_modules\//)) { + return null; + } + + // We will only apply this plugin on jsx and tsx files + if (![".jsx", ".tsx"].some((ending) => idWithoutQueryAndHash.endsWith(ending))) { + return null; + } + + const parserPlugins: ParserPlugins = []; + if (idWithoutQueryAndHash.endsWith(".jsx")) { + parserPlugins.push("jsx"); + } else if (idWithoutQueryAndHash.endsWith(".tsx")) { + parserPlugins.push("jsx", "typescript"); + } + + try { + const result = await transformAsync(code, { + plugins: [[componentNameAnnotatePlugin]], + filename: id, + parserOpts: { + sourceType: "module", + allowAwaitOutsideFunction: true, + plugins: parserPlugins, + }, + generatorOpts: { + decoratorsBeforeExport: true, + }, + sourceMaps: true, + }); + + return { + code: result?.code ?? code, + map: result?.map, + }; + } catch (e) { + logger.error(`Failed to apply react annotate plugin`, e); + } + + return { code }; + }, + }; +} + export function getDebugIdSnippet(debugId: string): string { return `;!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="${debugId}",e._sentryDebugIdIdentifier="sentry-dbid-${debugId}")}catch(e){}}();`; } diff --git a/packages/bundler-plugin-core/src/options-mapping.ts b/packages/bundler-plugin-core/src/options-mapping.ts index 202f40ea..01f066a1 100644 --- a/packages/bundler-plugin-core/src/options-mapping.ts +++ b/packages/bundler-plugin-core/src/options-mapping.ts @@ -29,6 +29,7 @@ export function normalizeUserOptions(userOptions: UserOptions) { cleanArtifacts: userOptions.release?.cleanArtifacts ?? false, }, bundleSizeOptimizations: userOptions.bundleSizeOptimizations, + reactComponentAnnotation: userOptions.reactComponentAnnotation, _experiments: userOptions._experiments ?? {}, }; diff --git a/packages/bundler-plugin-core/src/types.ts b/packages/bundler-plugin-core/src/types.ts index e34e6a1d..ab758b12 100644 --- a/packages/bundler-plugin-core/src/types.ts +++ b/packages/bundler-plugin-core/src/types.ts @@ -278,6 +278,20 @@ export interface Options { excludeReplayWorker?: boolean; }; + /** + * Options related to react component name annotations. + * Disabled by default, unless a value is set for this option. + * When enabled, your app's DOM will automatically be annotated during build-time with their respective component names. + * This will unlock the capability to search for Replays in Sentry by component name, as well as see component names in breadcrumbs and performance monitoring. + * Please note that this feature is not currently supported by the esbuild bundler plugins, and will only annotate React components + */ + reactComponentAnnotation?: { + /** + * Whether the component name annotate plugin should be enabled or not. + */ + enabled?: boolean; + }; + /** * Options that are considered experimental and subject to change. * diff --git a/packages/component-annotate-plugin/package.json b/packages/component-annotate-plugin/package.json index a995e46a..7f641933 100644 --- a/packages/component-annotate-plugin/package.json +++ b/packages/component-annotate-plugin/package.json @@ -47,8 +47,7 @@ "clean:build": "rimraf ./dist *.tgz", "clean:deps": "rimraf node_modules", "test": "jest", - "lint": "eslint ./src ./test", - "prepack": "ts-node ./src/prepack.ts" + "lint": "eslint ./src ./test" }, "dependencies": {}, "devDependencies": { diff --git a/packages/dev-utils/src/generate-documentation-table.ts b/packages/dev-utils/src/generate-documentation-table.ts index 9a3288d2..0be36013 100644 --- a/packages/dev-utils/src/generate-documentation-table.ts +++ b/packages/dev-utils/src/generate-documentation-table.ts @@ -1,8 +1,11 @@ +type Bundler = "webpack" | "vite" | "rollup" | "esbuild"; + type OptionDocumentation = { name: string; fullDescription: string; type?: string; children?: OptionDocumentation[]; + supportedBundlers?: Bundler[]; }; const options: OptionDocumentation[] = [ @@ -332,6 +335,24 @@ type IncludeEntry = { }, ], }, + { + name: "reactComponentAnnotation", + fullDescription: `Options related to react component name annotations. + Disabled by default, unless a value is set for this option. + When enabled, your app's DOM will automatically be annotated during build-time with their respective component names. + This will unlock the capability to search for Replays in Sentry by component name, as well as see component names in breadcrumbs and performance monitoring. + Please note that this feature is not currently supported by the esbuild bundler plugins, and will only annotate React components + `, + supportedBundlers: ["webpack", "vite", "rollup"], + children: [ + { + name: "enabled", + type: "boolean", + fullDescription: "Whether the component name annotate plugin should be enabled or not.", + supportedBundlers: ["webpack", "vite", "rollup"], + }, + ], + }, { name: "_experiments", type: "string", @@ -351,17 +372,22 @@ type IncludeEntry = { function generateTableOfContents( depth: number, parentId: string, - nodes: OptionDocumentation[] + nodes: OptionDocumentation[], + bundler: Bundler ): string { return nodes .map((node) => { + if (node.supportedBundlers && !node.supportedBundlers?.includes(bundler)) { + return ""; + } + const id = `${parentId}-${node.name.toLowerCase()}`; let output = `${" ".repeat(depth)}- [\`${node.name}\`](#${id .replace(/-/g, "") .toLowerCase()})`; if (node.children && depth <= 0) { output += "\n"; - output += generateTableOfContents(depth + 1, id, node.children); + output += generateTableOfContents(depth + 1, id, node.children, bundler); } return output; }) @@ -370,10 +396,15 @@ function generateTableOfContents( function generateDescriptions( parentName: string | undefined, - nodes: OptionDocumentation[] + nodes: OptionDocumentation[], + bundler: Bundler ): string { return nodes .map((node) => { + if (node.supportedBundlers && !node.supportedBundlers?.includes(bundler)) { + return ""; + } + const name = parentName === undefined ? node.name : `${parentName}.${node.name}`; let output = `### \`${name}\` @@ -382,18 +413,18 @@ ${node.type === undefined ? "" : `Type: \`${node.type}\``} ${node.fullDescription} `; if (node.children) { - output += generateDescriptions(name, node.children); + output += generateDescriptions(name, node.children, bundler); } return output; }) .join("\n"); } -export function generateOptionsDocumentation(): string { +export function generateOptionsDocumentation(bundler: Bundler): string { return `## Options -${generateTableOfContents(0, "", options)} +${generateTableOfContents(0, "", options, bundler)} -${generateDescriptions(undefined, options)} +${generateDescriptions(undefined, options, bundler)} `; } diff --git a/packages/esbuild-plugin/src/prepack.ts b/packages/esbuild-plugin/src/prepack.ts index 55793e25..616dde02 100644 --- a/packages/esbuild-plugin/src/prepack.ts +++ b/packages/esbuild-plugin/src/prepack.ts @@ -3,5 +3,8 @@ import * as fs from "fs"; import * as path from "path"; const readmeTemplate = fs.readFileSync(path.join(__dirname, "..", "README_TEMPLATE.md"), "utf-8"); -const readme = readmeTemplate.replace(/#OPTIONS_SECTION_INSERT#/, generateOptionsDocumentation()); +const readme = readmeTemplate.replace( + /#OPTIONS_SECTION_INSERT#/, + generateOptionsDocumentation("esbuild") +); fs.writeFileSync(path.join(__dirname, "..", "README.md"), readme, "utf-8"); diff --git a/packages/integration-tests/fixtures/build-information-injection/build-information-injection.test.ts b/packages/integration-tests/fixtures/build-information-injection/build-information-injection.test.ts index 83cbad19..e2a07616 100644 --- a/packages/integration-tests/fixtures/build-information-injection/build-information-injection.test.ts +++ b/packages/integration-tests/fixtures/build-information-injection/build-information-injection.test.ts @@ -22,7 +22,7 @@ function checkBundle(bundlePath: string): void { "webpack4", "webpack5", ]) as string[], - depsVersions: { rollup: 3, vite: 3 }, + depsVersions: { rollup: 3, vite: 3, react: 18 }, // This will differ based on what env this is run on nodeVersion: expectedNodeVersion, }) diff --git a/packages/integration-tests/fixtures/component-name-annotate/component-name-annotate.test.ts b/packages/integration-tests/fixtures/component-name-annotate/component-name-annotate.test.ts new file mode 100644 index 00000000..3f2496c9 --- /dev/null +++ b/packages/integration-tests/fixtures/component-name-annotate/component-name-annotate.test.ts @@ -0,0 +1,37 @@ +import childProcess from "child_process"; +import path from "path"; +import { testIfNodeMajorVersionIsLessThan18 } from "../../utils/testIf"; + +// prettier-ignore +const SNAPSHOT = `"
Component A
"` +const ESBUILD_SNAPSHOT = `"
Component A
"`; + +function checkBundle(bundlePath: string, snapshot = SNAPSHOT): void { + const processOutput = childProcess.execSync(`node ${bundlePath}`, { encoding: "utf-8" }); + expect(processOutput.trim()).toMatchInlineSnapshot(snapshot); +} + +test("esbuild bundle", () => { + expect.assertions(1); + checkBundle(path.join(__dirname, "./out/esbuild/index.js"), ESBUILD_SNAPSHOT); +}); + +test("rollup bundle", () => { + expect.assertions(1); + checkBundle(path.join(__dirname, "./out/rollup/index.js")); +}); + +test("vite bundle", () => { + expect.assertions(1); + checkBundle(path.join(__dirname, "./out/vite/index.js")); +}); + +testIfNodeMajorVersionIsLessThan18("webpack 4 bundle if node is < 18", () => { + expect.assertions(1); + checkBundle(path.join(__dirname, "./out/webpack4/index.js")); +}); + +test("webpack 5 bundle", () => { + expect.assertions(1); + checkBundle(path.join(__dirname, "./out/webpack5/index.js")); +}); diff --git a/packages/integration-tests/fixtures/component-name-annotate/input/app.jsx b/packages/integration-tests/fixtures/component-name-annotate/input/app.jsx new file mode 100644 index 00000000..d4263e79 --- /dev/null +++ b/packages/integration-tests/fixtures/component-name-annotate/input/app.jsx @@ -0,0 +1,14 @@ +import { renderToString } from "react-dom/server"; +import { ComponentA } from "./component-a"; + +export default function App() { + return ; +} + +console.log( + renderToString( +
+ +
+ ) +); diff --git a/packages/integration-tests/fixtures/component-name-annotate/input/component-a.jsx b/packages/integration-tests/fixtures/component-name-annotate/input/component-a.jsx new file mode 100644 index 00000000..5d57ab22 --- /dev/null +++ b/packages/integration-tests/fixtures/component-name-annotate/input/component-a.jsx @@ -0,0 +1,3 @@ +export function ComponentA() { + return Component A; +} diff --git a/packages/integration-tests/fixtures/component-name-annotate/setup.ts b/packages/integration-tests/fixtures/component-name-annotate/setup.ts new file mode 100644 index 00000000..700e7705 --- /dev/null +++ b/packages/integration-tests/fixtures/component-name-annotate/setup.ts @@ -0,0 +1,10 @@ +import * as path from "path"; +import { createCjsBundles } from "../../utils/create-cjs-bundles-for-react"; + +const entryPointPath = path.resolve(__dirname, "input", "app.jsx"); +const outputDir = path.resolve(__dirname, "out"); + +createCjsBundles({ index: entryPointPath }, outputDir, { + telemetry: false, + reactComponentAnnotation: { enabled: true }, +}); diff --git a/packages/integration-tests/package.json b/packages/integration-tests/package.json index 2ea5d0a1..d275f07f 100644 --- a/packages/integration-tests/package.json +++ b/packages/integration-tests/package.json @@ -15,6 +15,10 @@ "clean:deps": "rimraf node_modules" }, "dependencies": { + "@babel/preset-react": "^7.23.3", + "@rollup/plugin-babel": "^6.0.4", + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-node-resolve": "^15.2.3", "@sentry-internal/eslint-config": "2.10.3", "@sentry-internal/sentry-bundler-plugin-tsconfig": "2.10.3", "@sentry/bundler-plugin-core": "2.10.3", @@ -24,11 +28,16 @@ "@sentry/webpack-plugin": "2.10.3", "@swc/jest": "^0.2.21", "@types/jest": "^28.1.3", + "@types/react": "^18.2.0", "@types/webpack4": "npm:@types/webpack@^4", + "@vitejs/plugin-react": "^4.2.1", + "babel-loader": "^8.0.0", "esbuild": "0.14.49", "esbuild019": "npm:esbuild@^0.19.4", "eslint": "^8.18.0", "jest": "^28.1.3", + "react": "^18.2.0", + "react-dom": "^18.2.0", "rollup": "3.2.0", "ts-node": "^10.9.1", "vite": "3.0.0", diff --git a/packages/integration-tests/utils/create-cjs-bundles-for-react.ts b/packages/integration-tests/utils/create-cjs-bundles-for-react.ts new file mode 100644 index 00000000..757708e9 --- /dev/null +++ b/packages/integration-tests/utils/create-cjs-bundles-for-react.ts @@ -0,0 +1,179 @@ +import * as vite from "vite"; +import react from "@vitejs/plugin-react"; +import * as path from "path"; +import * as rollup from "rollup"; +import { default as webpack4 } from "webpack4"; +import { webpack as webpack5 } from "webpack5"; +import esbuild from "esbuild019"; +import { babel as babelPlugin } from "@rollup/plugin-babel"; +import resolve from "@rollup/plugin-node-resolve"; +import commonjs from "@rollup/plugin-commonjs"; +import type { Stats as Webpack5Stats } from "webpack5"; +import type { Stats as Webpack4Stats } from "webpack4"; +import { Options } from "@sentry/bundler-plugin-core"; +import { sentryVitePlugin } from "@sentry/vite-plugin"; +import { sentryWebpackPlugin } from "@sentry/webpack-plugin"; +import { sentryEsbuildPlugin } from "@sentry/esbuild-plugin"; +import { sentryRollupPlugin } from "@sentry/rollup-plugin"; + +// eslint-disable-next-line @typescript-eslint/no-non-null-assertion +const nodejsMajorversion = process.version.split(".")[0]!.slice(1); + +export function createCjsBundles( + entrypoints: { [name: string]: string }, + outFolder: string, + sentryUnpluginOptions: Options, + plugins: string[] = [] +): void { + if (plugins.length === 0 || plugins.includes("vite")) { + void vite.build({ + clearScreen: false, + build: { + outDir: path.join(outFolder, "vite"), + rollupOptions: { + input: entrypoints, + output: { + format: "cjs", + entryFileNames: "[name].js", + }, + }, + }, + plugins: [react({ jsxRuntime: "automatic" }), sentryVitePlugin(sentryUnpluginOptions)], + }); + } + if (plugins.length === 0 || plugins.includes("rollup")) { + void rollup + .rollup({ + input: entrypoints, + plugins: [ + resolve({ + extensions: RESOLVABLE_EXTENSIONS, + }), + commonjs(), + sentryRollupPlugin(sentryUnpluginOptions), + babelPlugin({ + babelHelpers: "bundled", + presets: [["@babel/preset-react", { runtime: "automatic" }]], + extensions: RESOLVABLE_EXTENSIONS, + }), + ], + }) + .then((bundle) => + bundle.write({ + dir: path.join(outFolder, "rollup"), + format: "cjs", + exports: "named", + }) + ); + } + + if (plugins.length === 0 || plugins.includes("esbuild")) { + void esbuild.build({ + entryPoints: entrypoints, + outdir: path.join(outFolder, "esbuild"), + plugins: [sentryEsbuildPlugin(sentryUnpluginOptions)], + minify: true, + bundle: true, + jsx: "automatic", + format: "cjs", + }); + } + + // Webpack 4 doesn't work on Node.js versions >= 18 + if (parseInt(nodejsMajorversion) < 18 && (plugins.length === 0 || plugins.includes("webpack4"))) { + webpack4( + { + mode: "production", + entry: entrypoints, + cache: false, + optimization: { + minimize: false, + }, + resolve: { + extensions: RESOLVABLE_EXTENSIONS, + }, + output: { + path: path.join(outFolder, "webpack4"), + libraryTarget: "commonjs", + }, + module: { + rules: [ + { + test: RESOLVABLE_JSX_EXTENSIONS_REGEX, + exclude: /node_modules/, + use: { + loader: "babel-loader", + options: { + presets: [["@babel/preset-react", { runtime: "automatic" }]], + }, + }, + }, + ], + }, + target: "node", // needed for webpack 4 so we can access node api + plugins: [sentryWebpackPlugin(sentryUnpluginOptions)], + }, + handleWebpack + ); + } + + if (plugins.length === 0 || plugins.includes("webpack5")) { + webpack5( + { + cache: false, + entry: entrypoints, + output: { + path: path.join(outFolder, "webpack5"), + library: { + type: "commonjs", + }, + }, + optimization: { + minimize: false, + }, + mode: "production", + resolve: { + extensions: RESOLVABLE_EXTENSIONS, + }, + module: { + rules: [ + { + test: RESOLVABLE_JSX_EXTENSIONS_REGEX, + exclude: /node_modules/, + use: { + loader: "babel-loader", + options: { + presets: [["@babel/preset-react", { runtime: "automatic" }]], + }, + }, + }, + ], + }, + plugins: [sentryWebpackPlugin(sentryUnpluginOptions)], + }, + handleWebpack + ); + } +} + +const RESOLVABLE_EXTENSIONS = [".js", ".jsx", ".ts", ".tsx"]; +const RESOLVABLE_JSX_EXTENSIONS_REGEX = /\.?(j|t)sx$/; + +function handleWebpack(err: Error | undefined, stats: Webpack4Stats | Webpack5Stats | undefined) { + if (err) { + throw err; + } + + const info = stats?.toJson(); + if (!stats || !info) return; + + if (stats.hasErrors()) { + // eslint-disable-next-line no-console + console.error(info.errors); + } + + if (stats.hasWarnings()) { + // eslint-disable-next-line no-console + console.warn(info.warnings); + } +} diff --git a/packages/rollup-plugin/src/index.ts b/packages/rollup-plugin/src/index.ts index 884d8e62..8a45c0c3 100644 --- a/packages/rollup-plugin/src/index.ts +++ b/packages/rollup-plugin/src/index.ts @@ -7,6 +7,7 @@ import { createRollupDebugIdUploadHooks, SentrySDKBuildFlags, createRollupBundleSizeOptimizationHooks, + createComponentNameAnnotateHooks, } from "@sentry/bundler-plugin-core"; import type { UnpluginOptions } from "unplugin"; @@ -17,6 +18,13 @@ function rollupReleaseInjectionPlugin(injectionCode: string): UnpluginOptions { }; } +function rollupComponentNameAnnotatePlugin(): UnpluginOptions { + return { + name: "sentry-rollup-component-name-annotate-plugin", + rollup: createComponentNameAnnotateHooks(), + }; +} + function rollupDebugIdInjectionPlugin(): UnpluginOptions { return { name: "sentry-rollup-debug-id-injection-plugin", @@ -51,6 +59,7 @@ function rollupBundleSizeOptimizationsPlugin( const sentryUnplugin = sentryUnpluginFactory({ releaseInjectionPlugin: rollupReleaseInjectionPlugin, + componentNameAnnotatePlugin: rollupComponentNameAnnotatePlugin, debugIdInjectionPlugin: rollupDebugIdInjectionPlugin, moduleMetadataInjectionPlugin: rollupModuleMetadataInjectionPlugin, debugIdUploadPlugin: rollupDebugIdUploadPlugin, diff --git a/packages/rollup-plugin/src/prepack.ts b/packages/rollup-plugin/src/prepack.ts index 55793e25..f888a841 100644 --- a/packages/rollup-plugin/src/prepack.ts +++ b/packages/rollup-plugin/src/prepack.ts @@ -3,5 +3,8 @@ import * as fs from "fs"; import * as path from "path"; const readmeTemplate = fs.readFileSync(path.join(__dirname, "..", "README_TEMPLATE.md"), "utf-8"); -const readme = readmeTemplate.replace(/#OPTIONS_SECTION_INSERT#/, generateOptionsDocumentation()); +const readme = readmeTemplate.replace( + /#OPTIONS_SECTION_INSERT#/, + generateOptionsDocumentation("rollup") +); fs.writeFileSync(path.join(__dirname, "..", "README.md"), readme, "utf-8"); diff --git a/packages/vite-plugin/src/index.ts b/packages/vite-plugin/src/index.ts index c85d3e3a..1fd8d04f 100644 --- a/packages/vite-plugin/src/index.ts +++ b/packages/vite-plugin/src/index.ts @@ -7,6 +7,7 @@ import { createRollupDebugIdUploadHooks, SentrySDKBuildFlags, createRollupBundleSizeOptimizationHooks, + createComponentNameAnnotateHooks, } from "@sentry/bundler-plugin-core"; import { UnpluginOptions } from "unplugin"; @@ -18,6 +19,14 @@ function viteReleaseInjectionPlugin(injectionCode: string): UnpluginOptions { }; } +function viteComponentNameAnnotatePlugin(): UnpluginOptions { + return { + name: "sentry-vite-component-name-annotate-plugin", + enforce: "pre" as const, + vite: createComponentNameAnnotateHooks(), + }; +} + function viteDebugIdInjectionPlugin(): UnpluginOptions { return { name: "sentry-vite-debug-id-injection-plugin", @@ -52,6 +61,7 @@ function viteBundleSizeOptimizationsPlugin( const sentryUnplugin = sentryUnpluginFactory({ releaseInjectionPlugin: viteReleaseInjectionPlugin, + componentNameAnnotatePlugin: viteComponentNameAnnotatePlugin, debugIdInjectionPlugin: viteDebugIdInjectionPlugin, moduleMetadataInjectionPlugin: viteModuleMetadataInjectionPlugin, debugIdUploadPlugin: viteDebugIdUploadPlugin, diff --git a/packages/vite-plugin/src/prepack.ts b/packages/vite-plugin/src/prepack.ts index 55793e25..8e0cd553 100644 --- a/packages/vite-plugin/src/prepack.ts +++ b/packages/vite-plugin/src/prepack.ts @@ -3,5 +3,8 @@ import * as fs from "fs"; import * as path from "path"; const readmeTemplate = fs.readFileSync(path.join(__dirname, "..", "README_TEMPLATE.md"), "utf-8"); -const readme = readmeTemplate.replace(/#OPTIONS_SECTION_INSERT#/, generateOptionsDocumentation()); +const readme = readmeTemplate.replace( + /#OPTIONS_SECTION_INSERT#/, + generateOptionsDocumentation("vite") +); fs.writeFileSync(path.join(__dirname, "..", "README.md"), readme, "utf-8"); diff --git a/packages/webpack-plugin/src/index.ts b/packages/webpack-plugin/src/index.ts index a3e624be..43ccd38c 100644 --- a/packages/webpack-plugin/src/index.ts +++ b/packages/webpack-plugin/src/index.ts @@ -4,6 +4,7 @@ import { sentryUnpluginFactory, stringToUUID, SentrySDKBuildFlags, + createComponentNameAnnotateHooks, } from "@sentry/bundler-plugin-core"; import * as path from "path"; import { UnpluginOptions } from "unplugin"; @@ -46,6 +47,18 @@ function webpackReleaseInjectionPlugin(injectionCode: string): UnpluginOptions { }; } +function webpackComponentNameAnnotatePlugin(): UnpluginOptions { + return { + name: "sentry-webpack-component-name-annotate-plugin", + enforce: "pre", + // Webpack needs this hook for loader logic, so the plugin is not run on unsupported file types + transformInclude(id) { + return id.endsWith(".tsx") || id.endsWith(".jsx"); + }, + transform: createComponentNameAnnotateHooks().transform, + }; +} + function webpackBundleSizeOptimizationsPlugin( replacementValues: SentrySDKBuildFlags ): UnpluginOptions { @@ -153,6 +166,7 @@ function webpackModuleMetadataInjectionPlugin(injectionCode: string): UnpluginOp const sentryUnplugin = sentryUnpluginFactory({ releaseInjectionPlugin: webpackReleaseInjectionPlugin, + componentNameAnnotatePlugin: webpackComponentNameAnnotatePlugin, moduleMetadataInjectionPlugin: webpackModuleMetadataInjectionPlugin, debugIdInjectionPlugin: webpackDebugIdInjectionPlugin, debugIdUploadPlugin: webpackDebugIdUploadPlugin, diff --git a/packages/webpack-plugin/src/prepack.ts b/packages/webpack-plugin/src/prepack.ts index 55793e25..954f9d3c 100644 --- a/packages/webpack-plugin/src/prepack.ts +++ b/packages/webpack-plugin/src/prepack.ts @@ -3,5 +3,8 @@ import * as fs from "fs"; import * as path from "path"; const readmeTemplate = fs.readFileSync(path.join(__dirname, "..", "README_TEMPLATE.md"), "utf-8"); -const readme = readmeTemplate.replace(/#OPTIONS_SECTION_INSERT#/, generateOptionsDocumentation()); +const readme = readmeTemplate.replace( + /#OPTIONS_SECTION_INSERT#/, + generateOptionsDocumentation("webpack") +); fs.writeFileSync(path.join(__dirname, "..", "README.md"), readme, "utf-8"); diff --git a/yarn.lock b/yarn.lock index 17504116..b9dd2b24 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,11 +17,24 @@ dependencies: "@babel/highlight" "^7.18.6" +"@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + "@babel/compat-data@^7.17.10", "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.5": version "7.21.9" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.9.tgz#10a2e7fda4e51742c907938ac3b7229426515514" integrity sha512-FUGed8kfhyWvbYug/Un/VPJD41rDIgoVVcR+FuzhzOYyRz5uED+Gd3SLZml0Uw2l2aHFb7ZgdW5mGA3G2cCCnQ== +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + "@babel/core@7.18.5": version "7.18.5" resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz#c597fa680e58d571c28dda9827669c78cdd7f000" @@ -64,6 +77,27 @@ json5 "^2.2.2" semver "^6.3.0" +"@babel/core@^7.23.5": + version "7.23.9" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz#b028820718000f267870822fec434820e9b1e4d1" + integrity sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.9" + "@babel/parser" "^7.23.9" + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/generator@^7.18.2", "@babel/generator@^7.21.5", "@babel/generator@^7.7.2": version "7.21.9" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.21.9.tgz#3a1b706e07d836e204aee0650e8ee878d3aaa241" @@ -74,6 +108,16 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.23.6": + version "7.23.6" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" @@ -106,6 +150,17 @@ lru-cache "^5.1.1" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": version "7.21.8" resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.8.tgz#205b26330258625ef8869672ebca1e0dee5a0f02" @@ -147,6 +202,11 @@ resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.21.5.tgz#c769afefd41d171836f7cb63e295bedf689d48ba" integrity sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ== +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + "@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": version "7.21.0" resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" @@ -155,6 +215,14 @@ "@babel/template" "^7.20.7" "@babel/types" "^7.21.0" +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" @@ -162,6 +230,13 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-member-expression-to-functions@^7.21.5": version "7.21.5" resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.5.tgz#3b1a009af932e586af77c1030fba9ee0bde396c0" @@ -197,6 +272,17 @@ "@babel/traverse" "^7.21.5" "@babel/types" "^7.21.5" +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-optimise-call-expression@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" @@ -243,6 +329,13 @@ dependencies: "@babel/types" "^7.21.5" +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers@^7.20.0": version "7.20.0" resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" @@ -257,6 +350,13 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-string-parser@^7.21.5": version "7.21.5" resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz#2b3eea65443c6bdc31c22d037c65f6d323b6b2bd" @@ -282,7 +382,7 @@ resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== -"@babel/helper-validator-option@^7.22.15": +"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5": version "7.23.5" resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== @@ -306,6 +406,15 @@ "@babel/traverse" "^7.21.5" "@babel/types" "^7.21.5" +"@babel/helpers@^7.23.9": + version "7.23.9" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" + integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== + dependencies: + "@babel/template" "^7.23.9" + "@babel/traverse" "^7.23.9" + "@babel/types" "^7.23.9" + "@babel/highlight@^7.18.6": version "7.18.6" resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" @@ -315,11 +424,25 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.5", "@babel/parser@^7.20.7", "@babel/parser@^7.21.5", "@babel/parser@^7.21.8", "@babel/parser@^7.21.9": version "7.21.9" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.21.9.tgz#ab18ea3b85b4bc33ba98a8d4c2032c557d23cf14" integrity sha512-q5PNg/Bi1OpGgx5jYlvWZwAorZepEudDMCLtj967aeS7WMont7dUZI46M2XwcIQqvUlMxWfdLFu4S/qSxeUu5g== +"@babel/parser@^7.23.9": + version "7.23.9" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz#7b903b6149b0f8fa7ad564af646c4c38a77fc44b" + integrity sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA== + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": version "7.18.6" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" @@ -797,6 +920,20 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.22.5" +"@babel/plugin-transform-react-jsx-self@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9" + integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-react-jsx-source@^7.23.3": + version "7.23.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz#03527006bdc8775247a78643c51d4e715fe39a3e" + integrity sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": version "7.23.4" resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" @@ -1026,6 +1163,15 @@ "@babel/parser" "^7.21.9" "@babel/types" "^7.21.5" +"@babel/template@^7.22.15", "@babel/template@^7.23.9": + version "7.23.9" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" + integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + "@babel/traverse@^7.18.5", "@babel/traverse@^7.20.5", "@babel/traverse@^7.21.5", "@babel/traverse@^7.7.2": version "7.21.5" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.5.tgz#ad22361d352a5154b498299d523cf72998a4b133" @@ -1042,6 +1188,22 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.23.9": + version "7.23.9" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz#2f9d6aead6b564669394c5ce0f9302bb65b9d950" + integrity sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.9" + "@babel/types" "^7.23.9" + debug "^4.3.1" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.21.5" resolved "https://registry.npmjs.org/@babel/types/-/types-7.21.5.tgz#18dfbd47c39d3904d5db3d3dc2cc80bedb60e5b6" @@ -1051,7 +1213,7 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" -"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.4": +"@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.23.6", "@babel/types@^7.23.9": version "7.23.9" resolved "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz#1dd7b59a9a2b5c87f8b41e52770b5ecbf492e002" integrity sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q== @@ -1770,7 +1932,7 @@ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.15": version "1.4.15" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== @@ -2395,6 +2557,14 @@ "@babel/helper-module-imports" "^7.10.4" "@rollup/pluginutils" "^3.1.0" +"@rollup/plugin-babel@^6.0.4": + version "6.0.4" + resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.4.tgz#bd698e351fa9aa9619fcae780aea2a603d98e4c4" + integrity sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@rollup/pluginutils" "^5.0.1" + "@rollup/plugin-commonjs@22.0.1": version "22.0.1" resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.1.tgz#f7cb777d20de3eeeaf994f39080115c336bef810" @@ -2408,6 +2578,18 @@ magic-string "^0.25.7" resolve "^1.17.0" +"@rollup/plugin-commonjs@^25.0.7": + version "25.0.7" + resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz#145cec7589ad952171aeb6a585bbeabd0fd3b4cf" + integrity sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + commondir "^1.0.1" + estree-walker "^2.0.2" + glob "^8.0.3" + is-reference "1.2.1" + magic-string "^0.30.3" + "@rollup/plugin-json@4.1.0": version "4.1.0" resolved "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" @@ -2427,6 +2609,18 @@ is-module "^1.0.0" resolve "^1.19.0" +"@rollup/plugin-node-resolve@^15.2.3": + version "15.2.3" + resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz#e5e0b059bd85ca57489492f295ce88c2d4b0daf9" + integrity sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ== + dependencies: + "@rollup/pluginutils" "^5.0.1" + "@types/resolve" "1.20.2" + deepmerge "^4.2.2" + is-builtin-module "^3.2.1" + is-module "^1.0.0" + resolve "^1.22.1" + "@rollup/plugin-replace@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-4.0.0.tgz#e34c457d6a285f0213359740b43f39d969b38a67" @@ -2444,6 +2638,15 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@rollup/pluginutils@^5.0.1": + version "5.1.0" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz#7e53eddc8c7f483a4ad0b94afb1f7f5fd3c771e0" + integrity sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + "@sentry-internal/tracing@7.50.0": version "7.50.0" resolved "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.50.0.tgz#74454af99a03d81762993835d2687c881e14f41e" @@ -2771,6 +2974,17 @@ "@types/babel__template" "*" "@types/babel__traverse" "*" +"@types/babel__core@^7.20.5": + version "7.20.5" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + "@types/babel__generator@*": version "7.6.4" resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" @@ -2913,6 +3127,11 @@ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/json-schema@^7.0.5": + version "7.0.15" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -2968,6 +3187,11 @@ resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" integrity sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg== +"@types/prop-types@*": + version "15.7.11" + resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" + integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== + "@types/qs@*": version "6.9.7" resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -2978,6 +3202,15 @@ resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== +"@types/react@^18.2.0": + version "18.2.48" + resolved "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz#11df5664642d0bd879c1f58bc1d37205b064e8f1" + integrity sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -2985,6 +3218,16 @@ dependencies: "@types/node" "*" +"@types/resolve@1.20.2": + version "1.20.2" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + +"@types/scheduler@*": + version "0.16.8" + resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" + integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== + "@types/semver@^7.3.12": version "7.5.0" resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" @@ -3164,6 +3407,17 @@ "@typescript-eslint/types" "5.59.7" eslint-visitor-keys "^3.3.0" +"@vitejs/plugin-react@^4.2.1": + version "4.2.1" + resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz#744d8e4fcb120fc3dbaa471dadd3483f5a304bb9" + integrity sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ== + dependencies: + "@babel/core" "^7.23.5" + "@babel/plugin-transform-react-jsx-self" "^7.23.3" + "@babel/plugin-transform-react-jsx-source" "^7.23.3" + "@types/babel__core" "^7.20.5" + react-refresh "^0.14.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" @@ -3995,6 +4249,16 @@ babel-jest@^28.1.3: graceful-fs "^4.2.9" slash "^3.0.0" +babel-loader@^8.0.0: + version "8.3.0" + resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -4305,6 +4569,16 @@ browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.5: node-releases "^2.0.8" update-browserslist-db "^1.0.10" +browserslist@^4.22.2: + version "4.22.3" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz#299d11b7e947a6b843981392721169e27d60c5a6" + integrity sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A== + dependencies: + caniuse-lite "^1.0.30001580" + electron-to-chromium "^1.4.648" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + bser@2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -4494,6 +4768,11 @@ caniuse-lite@^1.0.30001449: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001489.tgz#ca82ee2d4e4dbf2bd2589c9360d3fcc2c7ba3bd8" integrity sha512-x1mgZEXK8jHIfAxm+xgdpHpk50IN3z3q3zP261/WS+uvePxW8izXuCu6AHz0lkuYTlATDehiZ/tNyYBdSQsOUQ== +caniuse-lite@^1.0.30001580: + version "1.0.30001581" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz#0dfd4db9e94edbdca67d57348ebc070dece279f4" + integrity sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ== + chalk@4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" @@ -4502,7 +4781,7 @@ chalk@4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^2.0.0, chalk@^2.4.1: +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -4927,6 +5206,11 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -5082,6 +5366,11 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== + cyclist@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" @@ -5113,7 +5402,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -5375,6 +5664,11 @@ electron-to-chromium@^1.4.284: resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.404.tgz#16baf653a7a2613e221da61480ad02fe84e40231" integrity sha512-te57sWvQdpxmyd1GiswaodKdXdPgn9cN4ht8JlNa04QgtrfnUdWEo1261rY2vaC6TKaiHn0E7QerJWPKFCvMVw== +electron-to-chromium@^1.4.648: + version "1.4.653" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.653.tgz#832ab25e80ad698ac09c1ca547bd9ee6cce7df10" + integrity sha512-wA2A2LQCqnEwQAvwADQq3KpMpNwgAUBnRmrFgRzHnPhbQUFArTR32Ab46f4p0MovDLcg4uqd4nCsN2hTltslpA== + elliptic@^6.5.3: version "6.5.4" resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -6061,7 +6355,7 @@ estree-walker@^1.0.1: resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== -estree-walker@^2.0.1: +estree-walker@^2.0.1, estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== @@ -6384,6 +6678,15 @@ find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-up@5.0.0, find-up@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -6833,7 +7136,7 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.1: +glob@^8.0.1, glob@^8.0.3: version "8.1.0" resolved "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== @@ -7415,7 +7718,7 @@ is-buffer@^1.1.5: resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-builtin-module@^3.1.0: +is-builtin-module@^3.1.0, is-builtin-module@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== @@ -7602,7 +7905,7 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-reference@^1.2.1: +is-reference@1.2.1, is-reference@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== @@ -8595,7 +8898,7 @@ json5@^1.0.1, json5@^1.0.2: dependencies: minimist "^1.2.0" -json5@^2.2.1, json5@^2.2.2: +json5@^2.1.2, json5@^2.2.1, json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -8854,6 +9157,15 @@ loader-utils@^1.2.3: emojis-list "^3.0.0" json5 "^1.0.1" +loader-utils@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + localforage@^1.8.1: version "1.10.0" resolved "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" @@ -8919,7 +9231,7 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -loose-envify@^1.4.0: +loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -8969,7 +9281,14 @@ magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" -make-dir@3.1.0, make-dir@^3.0.0: +magic-string@^0.30.3: + version "0.30.6" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.6.tgz#996e21b42f944e45591a68f0905d6a740a12506c" + integrity sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + +make-dir@3.1.0, make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -9591,6 +9910,11 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + node-releases@^2.0.8: version "2.0.11" resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.11.tgz#59d7cef999d13f908e43b5a70001cf3129542f0f" @@ -10456,7 +10780,7 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-dir@^4.2.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -10764,6 +11088,14 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + react-is@^16.13.1: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -10779,6 +11111,18 @@ react-is@^18.0.0: resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-refresh@^0.14.0: + version "0.14.0" + resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" + integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + read-cmd-shim@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" @@ -11220,6 +11564,13 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -11229,6 +11580,15 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + schema-utils@^3.1.0, schema-utils@^3.1.1, schema-utils@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz#36c10abca6f7577aeae136c804b0c741edeadc99" @@ -11262,6 +11622,11 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: version "7.5.1" resolved "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" @@ -12427,6 +12792,14 @@ update-browserslist-db@^1.0.10: escalade "^3.1.1" picocolors "^1.0.0" +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"