diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index db824a4ad201..b7bde0b39e3f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -701,10 +701,13 @@ jobs: ENSO_CLOUD_ENVIRONMENT: ${{ vars.ENSO_CLOUD_ENVIRONMENT }} ENSO_CLOUD_GOOGLE_ANALYTICS_TAG: ${{ vars.ENSO_CLOUD_GOOGLE_ANALYTICS_TAG }} ENSO_CLOUD_SENTRY_DSN: ${{ vars.ENSO_CLOUD_SENTRY_DSN }} + ENSO_CLOUD_SENTRY_ORGANIZATION: ${{ vars.ENSO_CLOUD_SENTRY_ORGANIZATION }} + ENSO_CLOUD_SENTRY_PROJECT: ${{ vars.ENSO_CLOUD_SENTRY_PROJECT }} ENSO_CLOUD_STRIPE_KEY: ${{ vars.ENSO_CLOUD_STRIPE_KEY }} ENSO_IDE_AG_GRID_LICENSE_KEY: ${{ vars.ENSO_AG_GRID_LICENSE_KEY }} ENSO_IDE_MAPBOX_API_TOKEN: ${{ vars.ENSO_MAPBOX_API_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} WIN_CSC_KEY_PASSWORD: ${{ secrets.MICROSOFT_CODE_SIGNING_CERT_PASSWORD }} WIN_CSC_LINK: ${{ secrets.MICROSOFT_CODE_SIGNING_CERT }} - if: failure() && runner.os == 'Windows' diff --git a/app/gui/.gitignore b/app/gui/.gitignore index 869cec171367..a05ebb778efa 100644 --- a/app/gui/.gitignore +++ b/app/gui/.gitignore @@ -33,3 +33,6 @@ src/project-view/util/iconName.ts *storybook.log storybook-static + +# Sentry Config File +.env.sentry-build-plugin diff --git a/app/gui/package.json b/app/gui/package.json index a9df2bc70666..4a9e45f7245f 100644 --- a/app/gui/package.json +++ b/app/gui/package.json @@ -15,10 +15,13 @@ "bugs": { "url": "https://github.com/enso-org/enso/issues" }, - "//": {}, + "//": [ + "--max-old-space-size=4096 is required when sourcemaps are enabled,", + "otherwise Rollup runs out of memory when Vite is rendering chunks." + ], "scripts": { "typecheck": "vue-tsc --noEmit -p tsconfig.app.json", - "build": "vite build", + "build": "cross-env NODE_OPTIONS=--max-old-space-size=4096 vite build", "build-cloud": "cross-env CLOUD_BUILD=true corepack pnpm run build", "preview": "vite preview", "lint": "eslint . --cache --max-warnings=0", @@ -41,6 +44,11 @@ "playwright:install": "playwright install chromium" }, "dependencies": { + "@ag-grid-community/client-side-row-model": "^32.3.3", + "@ag-grid-community/core": "^32.3.3", + "@ag-grid-community/styles": "^32.3.3", + "@ag-grid-enterprise/core": "^32.3.3", + "@ag-grid-enterprise/range-selection": "^32.3.3", "@aws-amplify/auth": "5.6.5", "@aws-amplify/core": "5.8.5", "@hookform/resolvers": "^3.4.0", @@ -48,24 +56,46 @@ "@lexical/html": "^0.21.0", "@lexical/link": "^0.21.0", "@lexical/markdown": "^0.21.0", + "@lezer/common": "^1.1.0", + "@lezer/highlight": "^1.1.6", "@monaco-editor/react": "4.6.0", - "@sentry/react": "^7.74.0", + "@noble/hashes": "^1.4.0", "@react-aria/interactions": "^3.22.3", + "@sentry/react": "^7.74.0", + "@sentry/vite-plugin": "^2.22.7", "@stripe/react-stripe-js": "^2.7.1", "@stripe/stripe-js": "^3.5.0", "@tanstack/react-query": "5.55.0", "@tanstack/vue-query": ">= 5.54.0 < 5.56.0", + "@vueuse/core": "^10.4.1", + "@vueuse/gesture": "^2.0.0", + "ag-grid-community": "^32.3.3", + "ag-grid-enterprise": "^32.3.3", + "ag-grid-vue3": "^32.3.3", "ajv": "^8.12.0", "amazon-cognito-identity-js": "6.3.6", + "babel-plugin-react-compiler": "19.0.0-beta-a7bf2bd-20241110", "clsx": "^2.1.1", - "papaparse": "^5.4.1", + "codemirror": "^6.0.1", + "culori": "^3.2.0", "enso-common": "workspace:*", + "events": "^3.3.0", "framer-motion": "11.3.0", + "hash-sum": "^2.0.0", "idb-keyval": "^6.2.1", "input-otp": "1.2.4", + "install": "^0.13.0", "is-network-error": "^1.0.1", + "isomorphic-ws": "^5.0.0", "lexical": "^0.21.0", + "lib0": "^0.2.85", + "magic-string": "^0.30.3", + "marked": "14.1.3", "monaco-editor": "0.48.0", + "murmurhash": "^2.0.1", + "papaparse": "^5.4.1", + "postcss-inline-svg": "^6.0.0", + "postcss-nesting": "^12.0.1", "qrcode.react": "3.1.0", "react": "^18.3.1", "react-aria": "^3.34.3", @@ -83,15 +113,7 @@ "tiny-invariant": "^1.3.3", "ts-results": "^3.3.0", "validator": "^13.12.0", - "zod": "^3.23.8", - "zustand": "^4.5.4", - "@ag-grid-community/client-side-row-model": "^32.3.3", - "@ag-grid-community/core": "^32.3.3", - "@ag-grid-community/styles": "^32.3.3", - "@ag-grid-enterprise/core": "^32.3.3", - "@ag-grid-enterprise/range-selection": "^32.3.3", "@babel/parser": "^7.24.7", - "babel-plugin-react-compiler": "19.0.0-beta-a7bf2bd-20241110", "@codemirror/commands": "^6.7.1", "@codemirror/language": "^6.10.6", "@codemirror/lang-markdown": "^v6.3.0", @@ -101,25 +123,6 @@ "@codemirror/view": "^6.35.3", "@fast-check/vitest": "^0.0.8", "@floating-ui/vue": "^1.0.6", - "@lezer/common": "^1.1.0", - "@lezer/highlight": "^1.1.6", - "@noble/hashes": "^1.4.0", - "@vueuse/core": "^10.4.1", - "@vueuse/gesture": "^2.0.0", - "ag-grid-community": "^32.3.3", - "ag-grid-enterprise": "^32.3.3", - "ag-grid-vue3": "^32.3.3", - "codemirror": "^6.0.1", - "culori": "^3.2.0", - "events": "^3.3.0", - "hash-sum": "^2.0.0", - "install": "^0.13.0", - "isomorphic-ws": "^5.0.0", - "lib0": "^0.2.85", - "magic-string": "^0.30.3", - "murmurhash": "^2.0.1", - "postcss-inline-svg": "^6.0.0", - "postcss-nesting": "^12.0.1", "sucrase": "^3.34.0", "veaury": "^2.3.18", "vue": "^3.5.2", @@ -129,14 +132,19 @@ "y-websocket": "^1.5.0", "ydoc-shared": "workspace:*", "yjs": "^13.6.7", - "marked": "14.1.3" + "zod": "^3.23.8", + "zustand": "^4.5.4" }, "devDependencies": { + "@babel/plugin-syntax-import-attributes": "^7.24.7", "@chromatic-com/storybook": "^3.2.2", + "@codemirror/theme-one-dark": "^6.1.2", + "@danmarshall/deckgl-typings": "^4.9.28", "@fast-check/vitest": "^0.0.8", + "@histoire/plugin-vue": "^0.17.12", "@modyfi/vite-plugin-yaml": "^1.0.4", + "@open-rpc/server-js": "^1.9.4", "@playwright/test": "^1.40.0", - "@babel/plugin-syntax-import-attributes": "^7.24.7", "@react-types/shared": "^3.22.1", "@storybook/addon-essentials": "^8.4.2", "@storybook/addon-interactions": "^8.4.2", @@ -148,30 +156,10 @@ "@storybook/vue3": "^8.4.2", "@storybook/vue3-vite": "^8.4.2", "@tanstack/react-query-devtools": "5.45.1", - "@types/node": "^22.9.0", - "@types/papaparse": "^5.3.15", - "@types/react": "^18.0.27", - "@types/react-dom": "^18.0.10", - "@types/validator": "^13.11.7", - "@vitejs/plugin-react": "^4.3.3", - "chalk": "^5.3.0", - "cross-env": "^7.0.3", - "fast-check": "^3.15.0", - "playwright": "^1.39.0", - "postcss": "^8.4.29", - "prettier-plugin-organize-imports": "^4.0.0", - "prettier-plugin-tailwindcss": "^0.5.11", - "react-toastify": "^9.1.3", - "tailwindcss": "^3.4.1", - "tailwindcss-animate": "1.0.7", - "tailwindcss-react-aria-components": "^1.1.1", - "typescript": "^5.5.3", - "vite": "^5.4.10", - "vitest": "^1.3.1", - "@codemirror/theme-one-dark": "^6.1.2", - "@danmarshall/deckgl-typings": "^4.9.28", - "@histoire/plugin-vue": "^0.17.12", - "@open-rpc/server-js": "^1.9.4", + "@testing-library/jest-dom": "6.6.3", + "@testing-library/react": "16.0.1", + "@testing-library/react-hooks": "8.0.1", + "@testing-library/user-event": "14.5.2", "@tsconfig/node20": "^20.1.4", "@types/css.escape": "^1.5.2", "@types/culori": "^2.0.1", @@ -179,37 +167,53 @@ "@types/hash-sum": "^1.0.0", "@types/jsdom": "^21.1.1", "@types/mapbox-gl": "^3.4.1", + "@types/node": "^22.9.0", + "@types/papaparse": "^5.3.15", + "@types/react": "^18.0.27", + "@types/react-dom": "^18.0.10", "@types/shuffle-seed": "^1.1.0", "@types/tar": "^6.1.4", + "@types/validator": "^13.11.7", "@types/wicg-file-system-access": "^2023.10.2", "@types/ws": "^8.5.5", + "@vitejs/plugin-react": "^4.3.3", "@vitejs/plugin-vue": "^5.0.4", "@vitest/coverage-v8": "^1.3.1", "@vue/test-utils": "^2.4.6", "@vue/tsconfig": "^0.5.1", - "@testing-library/jest-dom": "6.6.3", - "@testing-library/react": "16.0.1", - "@testing-library/user-event": "14.5.2", - "@testing-library/react-hooks": "8.0.1", + "chalk": "^5.3.0", + "chromatic": "11.18.1", + "cross-env": "^7.0.3", "css.escape": "^1.5.1", "d3": "^7.4.0", "enso-common": "workspace:*", + "fast-check": "^3.15.0", "floating-vue": "^2.0.0-beta.24", "hash-wasm": "^4.11.0", "histoire": "^0.17.2", "jsdom": "^24.1.0", + "playwright": "^1.39.0", + "postcss": "^8.4.29", "postcss-nesting": "^12.0.1", "prettier": "^3.3.2", + "prettier-plugin-organize-imports": "^4.0.0", + "prettier-plugin-tailwindcss": "^0.5.11", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-toastify": "^9.1.3", "shuffle-seed": "^1.1.6", "sql-formatter": "^13.0.0", "storybook": "^8.4.2", - "chromatic": "11.18.1", + "tailwindcss": "^3.4.1", + "tailwindcss-animate": "1.0.7", + "tailwindcss-react-aria-components": "^1.1.1", "tar": "^6.2.1", "tsx": "^4.7.1", + "typescript": "^5.5.3", + "vite": "^5.4.10", "vite-plugin-vue-devtools": "7.6.3", "vite-plugin-wasm": "^3.3.0", + "vitest": "^1.3.1", "vue-react-wrapper": "^0.3.1", "vue-tsc": "^2.0.24", "yaml": "^2.4.5", diff --git a/app/gui/src/dashboard/components/AriaComponents/Inputs/HiddenFile/HiddenFile.tsx b/app/gui/src/dashboard/components/AriaComponents/Inputs/HiddenFile/HiddenFile.tsx new file mode 100644 index 000000000000..25f128cc665d --- /dev/null +++ b/app/gui/src/dashboard/components/AriaComponents/Inputs/HiddenFile/HiddenFile.tsx @@ -0,0 +1,62 @@ +/** @file A hidden file input. */ +import { + Form, + type FieldPath, + type FieldProps, + type FieldStateProps, + type FieldValues, + type FieldVariantProps, + type TSchema, +} from '#/components/AriaComponents' +import { Input, type InputProps } from '#/components/aria' + +/** Props for {@link HiddenFile}. */ +export interface HiddenFileProps> + extends FieldStateProps< + Omit & { value: FieldValues[TFieldName] }, + Schema, + TFieldName + >, + FieldProps, + FieldVariantProps { + /** When true, triggers `form.submit()` on input. */ + readonly autoSubmit?: boolean | undefined + readonly accept?: string | undefined +} + +/** A hidden file input. */ +export function HiddenFile>( + props: HiddenFileProps, +) { + const { + form, + autoSubmit = false, + accept, + // eslint-disable-next-line @typescript-eslint/naming-convention + defaultValue: _defaultValue, + // eslint-disable-next-line @typescript-eslint/naming-convention + disabled: _disabled, + ...inputProps + } = props + const formInstance = Form.useFormContext(form) + + return ( + ( + { + field.onChange(event.target.files?.[0]) + if (autoSubmit) { + void formInstance.submit() + } + }} + /> + )} + /> + ) +} diff --git a/app/gui/src/dashboard/components/AriaComponents/Inputs/HiddenFile/index.ts b/app/gui/src/dashboard/components/AriaComponents/Inputs/HiddenFile/index.ts new file mode 100644 index 000000000000..c9ee0ea0d5e9 --- /dev/null +++ b/app/gui/src/dashboard/components/AriaComponents/Inputs/HiddenFile/index.ts @@ -0,0 +1,2 @@ +/** @file Barrel file for HiddenFile component. */ +export * from './HiddenFile' diff --git a/app/gui/src/dashboard/components/AriaComponents/Inputs/index.ts b/app/gui/src/dashboard/components/AriaComponents/Inputs/index.ts index 6068480cc284..4e5093094feb 100644 --- a/app/gui/src/dashboard/components/AriaComponents/Inputs/index.ts +++ b/app/gui/src/dashboard/components/AriaComponents/Inputs/index.ts @@ -7,6 +7,7 @@ export * from './ComboBox' export * from './DatePicker' export * from './Dropdown' +export * from './HiddenFile' export * from './Input' export * from './MultiSelector' export * from './OTPInput' diff --git a/app/gui/src/dashboard/index.tsx b/app/gui/src/dashboard/index.tsx index 41e083c90cda..939f96bd67a9 100644 --- a/app/gui/src/dashboard/index.tsx +++ b/app/gui/src/dashboard/index.tsx @@ -3,12 +3,17 @@ * * This module declares the main DOM structure for the authentication/dashboard app. */ -import * as React from 'react' +import { startTransition, StrictMode, useEffect } from 'react' import * as sentry from '@sentry/react' import { QueryClientProvider } from '@tanstack/react-query' import * as reactDOM from 'react-dom/client' -import * as reactRouter from 'react-router-dom' +import { + createRoutesFromChildren, + matchRoutes, + useLocation, + useNavigationType, +} from 'react-router-dom' import invariant from 'tiny-invariant' import * as detect from 'enso-common/src/detect' @@ -32,6 +37,9 @@ import { MotionGlobalConfig } from 'framer-motion' export type { GraphEditorRunner } from '#/layouts/Editor' +const HTTP_STATUS_BAD_REQUEST = 400 +const API_HOST = + process.env.ENSO_CLOUD_API_URL != null ? new URL(process.env.ENSO_CLOUD_API_URL).host : null const ARE_ANIMATIONS_DISABLED = window.DISABLE_ANIMATIONS === true || localStorage.getItem('disableAnimations') === 'true' || @@ -54,23 +62,15 @@ const ROOT_ELEMENT_ID = 'enso-dashboard' /** The fraction of non-erroring interactions that should be sampled by Sentry. */ const SENTRY_SAMPLE_RATE = 0.005 -// ====================== -// === DashboardProps === -// ====================== - /** Props for the dashboard. */ export interface DashboardProps extends app.AppProps { readonly logger: Logger } -// =========== -// === run === -// =========== - /** * Entrypoint for the authentication/dashboard app. * - * Running this function finds a `div` element with the ID `dashboard`, and renders the + * Running this function finds a `div` element with the ID `enso-dashboard`, and renders the * authentication/dashboard UI using React. It also handles routing and other interactions (e.g., * for redirecting the user to/from the login page). */ @@ -81,18 +81,18 @@ export function run(props: DashboardProps) { process.env.ENSO_CLOUD_SENTRY_DSN != null && process.env.ENSO_CLOUD_API_URL != null ) { + const version: unknown = import.meta.env.ENSO_IDE_VERSION sentry.init({ dsn: process.env.ENSO_CLOUD_SENTRY_DSN, environment: process.env.ENSO_CLOUD_ENVIRONMENT, + release: version?.toString() ?? 'dev', integrations: [ - new sentry.BrowserTracing({ - routingInstrumentation: sentry.reactRouterV6Instrumentation( - React.useEffect, - reactRouter.useLocation, - reactRouter.useNavigationType, - reactRouter.createRoutesFromChildren, - reactRouter.matchRoutes, - ), + sentry.reactRouterV6BrowserTracingIntegration({ + useEffect, + useLocation, + useNavigationType, + createRoutesFromChildren, + matchRoutes, }), sentry.extraErrorDataIntegration({ captureErrorCause: true }), sentry.replayIntegration(), @@ -103,6 +103,22 @@ export function run(props: DashboardProps) { tracePropagationTargets: [process.env.ENSO_CLOUD_API_URL.split('//')[1] ?? ''], replaysSessionSampleRate: SENTRY_SAMPLE_RATE, replaysOnErrorSampleRate: 1.0, + beforeSend: (event) => { + if ( + (event.breadcrumbs ?? []).some( + (breadcrumb) => + breadcrumb.type === 'http' && + breadcrumb.category === 'fetch' && + breadcrumb.data && + breadcrumb.data.status_code === HTTP_STATUS_BAD_REQUEST && + typeof breadcrumb.data.url === 'string' && + new URL(breadcrumb.data.url).host === API_HOST, + ) + ) { + return null + } + return event + }, }) } @@ -123,9 +139,9 @@ export function run(props: DashboardProps) { const httpClient = new HttpClient() - React.startTransition(() => { + startTransition(() => { reactDOM.createRoot(root).render( - + @@ -143,7 +159,7 @@ export function run(props: DashboardProps) { - , + , ) }) } diff --git a/app/gui/src/dashboard/layouts/InfoMenu.tsx b/app/gui/src/dashboard/layouts/InfoMenu.tsx index 982c76558236..05b39b9db017 100644 --- a/app/gui/src/dashboard/layouts/InfoMenu.tsx +++ b/app/gui/src/dashboard/layouts/InfoMenu.tsx @@ -28,7 +28,7 @@ export default function InfoMenu(props: InfoMenuProps) { const { getText } = useText() return ( - +
{PRODUCT_NAME} diff --git a/app/gui/src/dashboard/layouts/Settings/OrganizationProfilePictureInput.tsx b/app/gui/src/dashboard/layouts/Settings/OrganizationProfilePictureInput.tsx index d94d8a81407f..aab02fcd1895 100644 --- a/app/gui/src/dashboard/layouts/Settings/OrganizationProfilePictureInput.tsx +++ b/app/gui/src/dashboard/layouts/Settings/OrganizationProfilePictureInput.tsx @@ -1,18 +1,16 @@ /** @file The input for viewing and changing the organization's profile picture. */ -import * as React from 'react' - import { useMutation } from '@tanstack/react-query' import DefaultUserIcon from '#/assets/default_user.svg' import { backendMutationOptions, useBackendQuery } from '#/hooks/backendHooks' -import * as toastAndLogHooks from '#/hooks/toastAndLogHooks' import * as textProvider from '#/providers/TextProvider' import * as aria from '#/components/aria' import FocusRing from '#/components/styled/FocusRing' +import { Form, HiddenFile } from '#/components/AriaComponents' import type Backend from '#/services/Backend' // ======================================= @@ -29,28 +27,22 @@ export default function OrganizationProfilePictureInput( props: OrganizationProfilePictureInputProps, ) { const { backend } = props - const toastAndLog = toastAndLogHooks.useToastAndLog() const { getText } = textProvider.useText() const { data: organization } = useBackendQuery(backend, 'getOrganization', []) const uploadOrganizationPicture = useMutation( backendMutationOptions(backend, 'uploadOrganizationPicture'), - ).mutate + ) - const doUploadOrganizationPicture = (event: React.ChangeEvent) => { - const image = event.target.files?.[0] - if (image == null) { - toastAndLog('noNewProfilePictureError') - } else { - uploadOrganizationPicture([{ fileName: image.name }, image]) - } - // Reset selected files, otherwise the file input will do nothing if the same file is - // selected again. While technically not undesired behavior, it is unintuitive for the user. - event.target.value = '' - } + const form = Form.useForm({ + schema: (z) => z.object({ picture: z.instanceof(File) }), + onSubmit: async ({ picture }) => { + await uploadOrganizationPicture.mutateAsync([{ fileName: picture.name }, picture]) + }, + }) return ( - <> +
- + {getText('organizationProfilePictureWarning')} - +
) } diff --git a/app/gui/src/dashboard/layouts/Settings/ProfilePictureInput.tsx b/app/gui/src/dashboard/layouts/Settings/ProfilePictureInput.tsx index 2ed6b0cf9d82..50e1deb8f46c 100644 --- a/app/gui/src/dashboard/layouts/Settings/ProfilePictureInput.tsx +++ b/app/gui/src/dashboard/layouts/Settings/ProfilePictureInput.tsx @@ -6,13 +6,13 @@ import { useMutation } from '@tanstack/react-query' import DefaultUserIcon from '#/assets/default_user.svg' import { backendMutationOptions, useBackendQuery } from '#/hooks/backendHooks' -import * as toastAndLogHooks from '#/hooks/toastAndLogHooks' import * as textProvider from '#/providers/TextProvider' import * as aria from '#/components/aria' import FocusRing from '#/components/styled/FocusRing' +import { Form, HiddenFile } from '#/components/AriaComponents' import type Backend from '#/services/Backend' // =========================== @@ -27,26 +27,20 @@ export interface ProfilePictureInputProps { /** The input for viewing and changing the user's profile picture. */ export default function ProfilePictureInput(props: ProfilePictureInputProps) { const { backend } = props - const toastAndLog = toastAndLogHooks.useToastAndLog() const { data: user } = useBackendQuery(backend, 'usersMe', []) const { getText } = textProvider.useText() - const uploadUserPicture = useMutation(backendMutationOptions(backend, 'uploadUserPicture')).mutate + const uploadUserPicture = useMutation(backendMutationOptions(backend, 'uploadUserPicture')) - const doUploadUserPicture = (event: React.ChangeEvent) => { - const image = event.target.files?.[0] - if (image == null) { - toastAndLog('noNewProfilePictureError') - } else { - uploadUserPicture([{ fileName: image.name }, image]) - } - // Reset selected files, otherwise the file input will do nothing if the same file is - // selected again. While technically not undesired behavior, it is unintuitive for the user. - event.target.value = '' - } + const form = Form.useForm({ + schema: (z) => z.object({ picture: z.instanceof(File) }), + onSubmit: async ({ picture }) => { + await uploadUserPicture.mutateAsync([{ fileName: picture.name }, picture]) + }, + }) return ( - <> +
- + {getText('profilePictureWarning')} - +
) } diff --git a/app/gui/vite.config.ts b/app/gui/vite.config.ts index 63a2eb7df915..ccfbe678d8fc 100644 --- a/app/gui/vite.config.ts +++ b/app/gui/vite.config.ts @@ -1,3 +1,4 @@ +import { sentryVitePlugin } from '@sentry/vite-plugin' /// import react from '@vitejs/plugin-react' @@ -67,6 +68,18 @@ export default defineConfig({ }, }), ...(process.env.NODE_ENV === 'development' ? [await projectManagerShim()] : []), + ...(( + process.env.SENTRY_AUTH_TOKEN != null && + process.env.ENSO_CLOUD_SENTRY_ORGANIZATION != null && + process.env.ENSO_CLOUD_SENTRY_PROJECT != null + ) ? + [ + sentryVitePlugin({ + org: process.env.ENSO_CLOUD_SENTRY_ORGANIZATION, + project: process.env.ENSO_CLOUD_SENTRY_PROJECT, + }), + ] + : []), ], optimizeDeps: { entries: fileURLToPath(new URL('./index.html', import.meta.url)), @@ -109,6 +122,7 @@ export default defineConfig({ build: { // dashboard chunk size is larger than the default warning limit chunkSizeWarningLimit: 700, + sourcemap: true, }, }) async function projectManagerShim(): Promise { diff --git a/build/build/src/ci_gen.rs b/build/build/src/ci_gen.rs index 21b82493be98..6163c84baf54 100644 --- a/build/build/src/ci_gen.rs +++ b/build/build/src/ci_gen.rs @@ -150,6 +150,10 @@ pub mod secret { // === Github Token === /// A token created for the `enso-ci` user. pub const CI_PRIVATE_TOKEN: &str = "CI_PRIVATE_TOKEN"; + + // === Sentry === + /// The authentication token for pushing source maps to Sentry. + pub const SENTRY_AUTH_TOKEN: &str = "SENTRY_AUTH_TOKEN"; } pub mod variables { @@ -446,7 +450,7 @@ impl JobArchetype for UploadIde { "ide upload --backend-source release --backend-release ${{env.ENSO_RELEASE_ID}} --sign-artifacts", ) .cleaning(RELEASE_CLEANING_POLICY) - .customize(with_packaging_steps(target.0)) + .customize(with_packaging_steps(target.0, job::PackagingTarget::Release)) .build_job("Build IDE", target) } } diff --git a/build/build/src/ci_gen/job.rs b/build/build/src/ci_gen/job.rs index 8903b5e0a64f..390f83168306 100644 --- a/build/build/src/ci_gen/job.rs +++ b/build/build/src/ci_gen/job.rs @@ -154,6 +154,18 @@ pub fn expose_gui_vars(step: Step) -> Step { expose_cloud_vars(step) } +/// Expose variables for debugging purposes. +pub fn expose_debugging_vars(os: OS, step: Step) -> Step { + use crate::ide::web::env::*; + match os { + OS::Windows => step + .with_secret_exposed(secret::SENTRY_AUTH_TOKEN) + .with_variable_exposed(ENSO_CLOUD_SENTRY_ORGANIZATION) + .with_variable_exposed(ENSO_CLOUD_SENTRY_PROJECT), + _ => step, + } +} + #[derive(Clone, Copy, Debug)] pub struct CancelWorkflow; @@ -552,13 +564,28 @@ pub fn expose_os_specific_signing_secret(os: OS, step: Step) -> Step { } } +/// Whether the artifact is being built for a release build (nightlies, releases) +/// or a development build (PRs). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum PackagingTarget { + /// The artifact is being built for a release build (nightlies, releases). + Development, + /// The artifact is being built for a development build (PRs). + Release, +} + /// Prepares the packaging steps for the given OS. /// /// This involves: /// * exposing secrets necessary for code signing and notarization; /// * exposing variables defining cloud environment for dashboard. -pub fn prepare_packaging_steps(os: OS, step: Step) -> Vec { +pub fn prepare_packaging_steps(os: OS, step: Step, packaging_target: PackagingTarget) -> Vec { let step = expose_gui_vars(step); + let step = if packaging_target == PackagingTarget::Release { + expose_debugging_vars(os, step) + } else { + step + }; let step = expose_os_specific_signing_secret(os, step); vec![step] } @@ -566,8 +593,11 @@ pub fn prepare_packaging_steps(os: OS, step: Step) -> Vec { /// Convenience for [`prepare_packaging_steps`]. /// /// This function is useful when you want to use [`prepare_packaging_steps`] as a closure. -pub fn with_packaging_steps(os: OS) -> impl FnOnce(Step) -> Vec { - move |step| prepare_packaging_steps(os, step) +pub fn with_packaging_steps( + os: OS, + packaging_target: PackagingTarget, +) -> impl FnOnce(Step) -> Vec { + move |step| prepare_packaging_steps(os, step, packaging_target) } #[derive(Clone, Copy, Debug)] @@ -579,7 +609,7 @@ impl JobArchetype for PackageIde { "ide build --backend-source current-ci-run --gui-upload-artifact false", ) .customize(move |step| { - let mut steps = prepare_packaging_steps(target.0, step); + let mut steps = prepare_packaging_steps(target.0, step, PackagingTarget::Development); const TEST_COMMAND: &str = "corepack pnpm -r --filter enso exec playwright test"; let test_step = match target.0 { OS::Linux => shell(format!("xvfb-run {TEST_COMMAND}")) diff --git a/build/build/src/ide/web.rs b/build/build/src/ide/web.rs index 1b80c281ce9a..57a9ae5ec8f2 100644 --- a/build/build/src/ide/web.rs +++ b/build/build/src/ide/web.rs @@ -86,6 +86,12 @@ pub mod env { /// The Google Analytics tag to which Google Analytics events should be sent. ENSO_CLOUD_GOOGLE_ANALYTICS_TAG, String; + + /// The Sentry organization to push the source maps to. + ENSO_CLOUD_SENTRY_ORGANIZATION, String; + + /// The Sentry project to push the source maps to. + ENSO_CLOUD_SENTRY_PROJECT, String; } // GUI-specific environment variables diff --git a/flake.nix b/flake.nix index 35e168b73f8c..2b94a95f5287 100644 --- a/flake.nix +++ b/flake.nix @@ -30,6 +30,9 @@ buildInputs = with pkgs; [ # === Graal dependencies === libxcrypt-legacy + # === Rust dependencies === + openssl.dev + pkg-config ] ++ (if !isOnLinux then [ # === macOS-specific dependencies === darwin.apple_sdk.frameworks.IOKit # Required by `enso-formatter`. @@ -55,7 +58,7 @@ # `sccache` can be used to speed up compile times for Rust crates. # `~/.cargo/bin/sccache` is provided by `cargo install sccache`. # `~/.cargo/bin` must be in the `PATH` for the binary to be accessible. - export PATH=$SHIMS_PATH:${rust.out}:$HOME/.cargo/bin:$PATH + export PATH=$SHIMS_PATH:$HOME/.cargo/bin:$PATH export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath buildInputs}:$LD_LIBRARY_PATH" # `rustup` shim diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2d006e6f2eff..95232e097053 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -123,7 +123,7 @@ importers: version: 5.8.5 '@babel/parser': specifier: ^7.24.7 - version: 7.25.6 + version: 7.26.2 '@codemirror/commands': specifier: ^6.7.1 version: 6.7.1 @@ -184,6 +184,9 @@ importers: '@sentry/react': specifier: ^7.74.0 version: 7.118.0(react@18.3.1) + '@sentry/vite-plugin': + specifier: ^2.22.7 + version: 2.22.7 '@stripe/react-stripe-js': specifier: ^2.7.1 version: 2.7.2(@stripe/stripe-js@3.5.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -345,7 +348,7 @@ importers: version: 3.5.2(typescript@5.5.3) vue-component-type-helpers: specifier: ^2.0.29 - version: 2.0.29 + version: 2.1.10 y-protocols: specifier: ^1.0.5 version: 1.0.6(yjs@13.6.18) @@ -397,7 +400,7 @@ importers: version: 3.25.0(react@18.3.1) '@storybook/addon-essentials': specifier: ^8.4.2 - version: 8.4.2(@types/react@18.3.3)(storybook@8.4.2(prettier@3.3.2)) + version: 8.4.2(@types/react@18.3.3)(storybook@8.4.2(prettier@3.3.2))(webpack-sources@3.2.3) '@storybook/addon-interactions': specifier: ^8.4.2 version: 8.4.2(storybook@8.4.2(prettier@3.3.2)) @@ -412,7 +415,7 @@ importers: version: 8.4.2(@storybook/test@8.4.2(storybook@8.4.2(prettier@3.3.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.2))(typescript@5.5.3) '@storybook/react-vite': specifier: ^8.4.2 - version: 8.4.2(@storybook/test@8.4.2(storybook@8.4.2(prettier@3.3.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.4.2(prettier@3.3.2))(typescript@5.5.3)(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1)) + version: 8.4.2(@storybook/test@8.4.2(storybook@8.4.2(prettier@3.3.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.4.2(prettier@3.3.2))(typescript@5.5.3)(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1))(webpack-sources@3.2.3) '@storybook/test': specifier: ^8.4.2 version: 8.4.2(storybook@8.4.2(prettier@3.3.2)) @@ -421,7 +424,7 @@ importers: version: 8.4.2(storybook@8.4.2(prettier@3.3.2))(vue@3.5.2(typescript@5.5.3)) '@storybook/vue3-vite': specifier: ^8.4.2 - version: 8.4.2(storybook@8.4.2(prettier@3.3.2))(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1))(vue@3.5.2(typescript@5.5.3)) + version: 8.4.2(storybook@8.4.2(prettier@3.3.2))(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1))(vue@3.5.2(typescript@5.5.3))(webpack-sources@3.2.3) '@tanstack/react-query-devtools': specifier: 5.45.1 version: 5.45.1(@tanstack/react-query@5.55.0(react@18.3.1))(react@18.3.1) @@ -1145,10 +1148,6 @@ packages: resolution: {integrity: sha512-4s0vYfMUn74XLn13rUUhNsmuPMh0j1d4rF58wXtjlVUU78THxonnN8mbCLC48fI3fKDHTmDDkeEqy7+IWP9VyA==} engines: {node: '>= 10.0.0'} - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -1161,18 +1160,10 @@ packages: resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.6': - resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.26.2': resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.24.7': - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} - engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.9': resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} @@ -1181,30 +1172,12 @@ packages: resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.24.7': - resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-create-class-features-plugin@7.25.9': resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.24.7': - resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==} - engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.25.9': resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} @@ -1223,28 +1196,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.24.7': - resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} - engines: {node: '>=6.9.0'} - '@babel/helper-optimise-call-expression@7.25.9': resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.7': - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} - engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.25.9': resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} - '@babel/helper-replace-supers@7.24.7': - resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.25.9': resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} engines: {node: '>=6.9.0'} @@ -1255,30 +1214,14 @@ packages: resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} - '@babel/helper-skip-transparent-expression-wrappers@7.24.7': - resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} @@ -1291,15 +1234,6 @@ packages: resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.25.6': - resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.26.2': resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} engines: {node: '>=6.0.0'} @@ -1369,26 +1303,14 @@ packages: resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.0': - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} - engines: {node: '>=6.9.0'} - '@babel/template@7.25.9': resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.6': - resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.9': resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.6': - resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} - engines: {node: '>=6.9.0'} - '@babel/types@7.26.0': resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} @@ -2732,10 +2654,64 @@ packages: resolution: {integrity: sha512-dERAshKlQLrBscHSarhHyUeGsu652bDTUN1FK0m4e3X48M3I5/s+0N880Qjpe5MprNLcINlaIgdQ9jkisvxjfw==} engines: {node: '>=8'} + '@sentry/babel-plugin-component-annotate@2.22.7': + resolution: {integrity: sha512-aa7XKgZMVl6l04NY+3X7BP7yvQ/s8scn8KzQfTLrGRarziTlMGrsCOBQtCNWXOPEbtxAIHpZ9dsrAn5EJSivOQ==} + engines: {node: '>= 14'} + '@sentry/browser@7.118.0': resolution: {integrity: sha512-8onDOFV1VLEoBuqA5yaJeR3FF1JNuxr5C7p1oN3OwY724iTVqQnOLmZKZaSnHV3RkY67wKDGQkQIie14sc+42g==} engines: {node: '>=8'} + '@sentry/bundler-plugin-core@2.22.7': + resolution: {integrity: sha512-ouQh5sqcB8vsJ8yTTe0rf+iaUkwmeUlGNFi35IkCFUQlWJ22qS6OfvNjOqFI19e6eGUXks0c/2ieFC4+9wJ+1g==} + engines: {node: '>= 14'} + + '@sentry/cli-darwin@2.39.1': + resolution: {integrity: sha512-kiNGNSAkg46LNGatfNH5tfsmI/kCAaPA62KQuFZloZiemTNzhy9/6NJP8HZ/GxGs8GDMxic6wNrV9CkVEgFLJQ==} + engines: {node: '>=10'} + os: [darwin] + + '@sentry/cli-linux-arm64@2.39.1': + resolution: {integrity: sha512-5VbVJDatolDrWOgaffsEM7znjs0cR8bHt9Bq0mStM3tBolgAeSDHE89NgHggfZR+DJ2VWOy4vgCwkObrUD6NQw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux, freebsd] + + '@sentry/cli-linux-arm@2.39.1': + resolution: {integrity: sha512-DkENbxyRxUrfLnJLXTA4s5UL/GoctU5Cm4ER1eB7XN7p9WsamFJd/yf2KpltkjEyiTuplv0yAbdjl1KX3vKmEQ==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux, freebsd] + + '@sentry/cli-linux-i686@2.39.1': + resolution: {integrity: sha512-pXWVoKXCRrY7N8vc9H7mETiV9ZCz+zSnX65JQCzZxgYrayQPJTc+NPRnZTdYdk5RlAupXaFicBI2GwOCRqVRkg==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [linux, freebsd] + + '@sentry/cli-linux-x64@2.39.1': + resolution: {integrity: sha512-IwayNZy+it7FWG4M9LayyUmG1a/8kT9+/IEm67sT5+7dkMIMcpmHDqL8rWcPojOXuTKaOBBjkVdNMBTXy0mXlA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux, freebsd] + + '@sentry/cli-win32-i686@2.39.1': + resolution: {integrity: sha512-NglnNoqHSmE+Dz/wHeIVRnV2bLMx7tIn3IQ8vXGO5HWA2f8zYJGktbkLq1Lg23PaQmeZLPGlja3gBQfZYSG10Q==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [win32] + + '@sentry/cli-win32-x64@2.39.1': + resolution: {integrity: sha512-xv0R2CMf/X1Fte3cMWie1NXuHmUyQPDBfCyIt6k6RPFPxAYUgcqgMPznYwVMwWEA1W43PaOkSn3d8ZylsDaETw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@sentry/cli@2.39.1': + resolution: {integrity: sha512-JIb3e9vh0+OmQ0KxmexMXg9oZsR/G7HMwxt5BUIKAXZ9m17Xll4ETXTRnRUBT3sf7EpNGAmlQk1xEmVN9pYZYQ==} + engines: {node: '>= 10'} + hasBin: true + '@sentry/core@7.118.0': resolution: {integrity: sha512-ol0xBdp3/K11IMAYSQE0FMxBOOH9hMsb/rjxXWe0hfM5c72CqYWL3ol7voPci0GELJ5CZG+9ImEU1V9r6gK64g==} engines: {node: '>=8'} @@ -2762,6 +2738,10 @@ packages: resolution: {integrity: sha512-43qItc/ydxZV1Zb3Kn2M54RwL9XXFa3IAYBO8S82Qvq5YUYmU2AmJ1jgg7DabXlVSWgMA1HntwqnOV3JLaEnTQ==} engines: {node: '>=8'} + '@sentry/vite-plugin@2.22.7': + resolution: {integrity: sha512-sYRNiNm4toQGq2BfZSJPdw36em3eQaLu+3NTFpA7Hl4g3Sp2Rt3CYObnW5bxlFEruRhxzvdyB383N9OefVZ6KA==} + engines: {node: '>= 14'} + '@shaderfrog/glsl-parser@2.1.5': resolution: {integrity: sha512-fw7U8Y7BBV9NZVLs7lyM8lpQ9YUK7XBNJjN4HhkY3nqkKpSiIQ62PVtPYtW7uZME5072QXQNQBhHJzG3t+NH0w==} engines: {node: '>=16'} @@ -3453,21 +3433,12 @@ packages: '@vitest/utils@2.1.4': resolution: {integrity: sha512-MXDnZn0Awl2S86PSNIim5PWXgIAx8CIkzu35mBdSApUip6RFOGXBCf3YFyeEu8n1IHk4bWD46DeYFu9mQlFIRg==} - '@volar/language-core@2.4.0-alpha.12': - resolution: {integrity: sha512-Dj9qTifcGGgzFLfMbU5dCo13kHyNuEyvPJhtWDnoVBBmgwW3GMwFmgWnNxBhjf63m5x0gux1okaxX2CLN7qSww==} - '@volar/language-core@2.4.10': resolution: {integrity: sha512-hG3Z13+nJmGaT+fnQzAkS0hjJRa2FCeqZt6Bd+oGNhUkQ+mTFsDETg5rqUTxyzIh5pSOGY7FHCWUS8G82AzLCA==} - '@volar/source-map@2.4.0-alpha.12': - resolution: {integrity: sha512-LXATFSj4D7T9sEm7FFj6iBgHjKjrdhAgRPcechVKiNCMQdr3r3GVkkeu8aM+1peaMH3LsCqoDxVZEmh2r7CHiw==} - '@volar/source-map@2.4.10': resolution: {integrity: sha512-OCV+b5ihV0RF3A7vEvNyHPi4G4kFa6ukPmyVocmqm5QzOd8r5yAtiNvaPEjl8dNvgC/lj4JPryeeHLdXd62rWA==} - '@volar/typescript@2.4.0-alpha.12': - resolution: {integrity: sha512-mLg+OQauMTv/+08a7WBWJo1sev/wc8t2is0zhBZIlFU+j5mG89FM4+4089c2p/zoUFZ400Q/VNg2BPfhpZ8wSA==} - '@volar/typescript@2.4.10': resolution: {integrity: sha512-F8ZtBMhSXyYKuBfGpYwqA5rsONnOwAVvjyE7KPYJ7wgZqo2roASqNWUnianOomJX5u1cxeRooHV59N0PhvEOgw==} @@ -3595,10 +3566,12 @@ packages: abstract-leveldown@6.2.3: resolution: {integrity: sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==} engines: {node: '>=6'} + deprecated: Superseded by abstract-level (https://github.com/Level/community#faq) abstract-leveldown@6.3.0: resolution: {integrity: sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==} engines: {node: '>=6'} + deprecated: Superseded by abstract-level (https://github.com/Level/community#faq) acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -3614,11 +3587,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.12.0: - resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} @@ -4478,6 +4446,7 @@ packages: deferred-leveldown@5.3.0: resolution: {integrity: sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==} engines: {node: '>=6'} + deprecated: Superseded by abstract-level (https://github.com/Level/community#faq) define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} @@ -4600,6 +4569,10 @@ packages: dotenv-expand@5.1.0: resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + dotenv@9.0.2: resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==} engines: {node: '>=10'} @@ -5167,6 +5140,10 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported + glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + global-agent@3.0.0: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} engines: {node: '>=10.0'} @@ -5733,11 +5710,6 @@ packages: canvas: optional: true - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -5836,6 +5808,7 @@ packages: level-js@5.0.2: resolution: {integrity: sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==} + deprecated: Superseded by browser-level (https://github.com/Level/community#faq) level-packager@5.1.1: resolution: {integrity: sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==} @@ -5852,10 +5825,12 @@ packages: leveldown@5.6.0: resolution: {integrity: sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==} engines: {node: '>=8.6.0'} + deprecated: Superseded by classic-level (https://github.com/Level/community#faq) levelup@4.4.0: resolution: {integrity: sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==} engines: {node: '>=6'} + deprecated: Superseded by abstract-level (https://github.com/Level/community#faq) levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -6036,6 +6011,10 @@ packages: magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + magicast@0.3.4: resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==} @@ -6147,6 +6126,10 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} + minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.1: resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} engines: {node: '>=16 || 14 >=14.17'} @@ -6773,6 +6756,9 @@ packages: proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} @@ -7558,10 +7544,6 @@ packages: resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} engines: {node: '>=14.14'} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-ico@1.1.5: resolution: {integrity: sha512-5kIh7m7bkIlqIESEZkL8gAMMzucXKfPe3hX2FoDY5HEAfD9OJU+Qh9b6Enp74w0qRcxVT5ejss66PHKqc3AVkg==} engines: {node: '>=4'} @@ -7734,6 +7716,9 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unplugin@1.0.1: + resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} + unplugin@1.15.0: resolution: {integrity: sha512-jTPIs63W+DUEDW207ztbaoO7cQ4p5aVaB823LSlxpsFEU3Mykwxf3ZGC/wzxFJeZlASZYgVrWeo7LgOrqJZ8RA==} engines: {node: '>=14.0.0'} @@ -7949,9 +7934,6 @@ packages: typescript: optional: true - vue-component-type-helpers@2.0.29: - resolution: {integrity: sha512-58i+ZhUAUpwQ+9h5Hck0D+jr1qbYl4voRt5KffBx8qzELViQ4XdT/Tuo+mzq8u63teAG8K0lLaOiL5ofqW38rg==} - vue-component-type-helpers@2.1.10: resolution: {integrity: sha512-lfgdSLQKrUmADiSV6PbBvYgQ33KF3Ztv6gP85MfGaGaSGMTXORVaHT1EHfsqCgzRNBstPKYDmvAV9Do5CmJ07A==} @@ -8024,6 +8006,13 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + webpack-virtual-modules@0.6.2: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} @@ -8626,11 +8615,6 @@ snapshots: '@aws-sdk/util-buffer-from': 3.6.1 tslib: 2.6.3 - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.1.0 - '@babel/code-frame@7.26.2': dependencies: '@babel/helper-validator-identifier': 7.25.9 @@ -8642,15 +8626,15 @@ snapshots: '@babel/core@7.25.2': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) '@babel/helpers': 7.25.6 - '@babel/parser': 7.25.6 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 convert-source-map: 2.0.0 debug: 4.3.7 gensync: 1.0.0-beta.2 @@ -8659,13 +8643,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.25.6': - dependencies: - '@babel/types': 7.25.6 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - '@babel/generator@7.26.2': dependencies: '@babel/parser': 7.26.2 @@ -8674,10 +8651,6 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - '@babel/helper-annotate-as-pure@7.24.7': - dependencies: - '@babel/types': 7.26.0 - '@babel/helper-annotate-as-pure@7.25.9': dependencies: '@babel/types': 7.26.0 @@ -8690,21 +8663,6 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.25.2) - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -8718,22 +8676,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.26.0 - - '@babel/helper-function-name@7.24.7': - dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.26.0 - - '@babel/helper-member-expression-to-functions@7.24.7': - dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.26.0 - transitivePeerDependencies: - - supports-color - '@babel/helper-member-expression-to-functions@7.25.9': dependencies: '@babel/traverse': 7.25.9 @@ -8747,7 +8689,7 @@ snapshots: '@babel/helper-module-imports@7.24.7': dependencies: - '@babel/traverse': 7.25.6 + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -8757,32 +8699,17 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.6 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.24.7': - dependencies: - '@babel/types': 7.26.0 - '@babel/helper-optimise-call-expression@7.25.9': dependencies: '@babel/types': 7.26.0 - '@babel/helper-plugin-utils@7.24.7': {} - '@babel/helper-plugin-utils@7.25.9': {} - '@babel/helper-replace-supers@7.24.7(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 - '@babel/helper-optimise-call-expression': 7.24.7 - transitivePeerDependencies: - - supports-color - '@babel/helper-replace-supers@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -8794,14 +8721,7 @@ snapshots: '@babel/helper-simple-access@7.24.7': dependencies: - '@babel/traverse': 7.25.6 - '@babel/types': 7.26.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.24.7': - dependencies: - '@babel/traverse': 7.25.6 + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -8813,35 +8733,16 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.26.0 - - '@babel/helper-string-parser@7.24.8': {} - '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-identifier@7.25.9': {} '@babel/helper-validator-option@7.24.8': {} '@babel/helpers@7.25.6': dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.25.9 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.1.0 - - '@babel/parser@7.25.6': - dependencies: - '@babel/types': 7.25.6 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 '@babel/parser@7.26.2': dependencies: @@ -8850,8 +8751,8 @@ snapshots: '@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-decorators': 7.24.7(@babel/core@7.25.2) transitivePeerDependencies: - supports-color @@ -8872,12 +8773,12 @@ snapshots: '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': dependencies: @@ -8892,19 +8793,19 @@ snapshots: '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-typescript@7.24.7(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.25.2) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) transitivePeerDependencies: - supports-color @@ -8913,30 +8814,12 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.25.0': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.26.2 - '@babel/types': 7.25.6 - '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.26.2 '@babel/types': 7.26.0 - '@babel/traverse@7.25.6': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.6 - '@babel/parser': 7.26.2 - '@babel/template': 7.25.0 - '@babel/types': 7.25.6 - debug: 4.3.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - '@babel/traverse@7.25.9': dependencies: '@babel/code-frame': 7.26.2 @@ -8949,12 +8832,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.25.6': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - '@babel/types@7.26.0': dependencies: '@babel/helper-string-parser': 7.25.9 @@ -10798,6 +10675,8 @@ snapshots: '@sentry/types': 7.118.0 '@sentry/utils': 7.118.0 + '@sentry/babel-plugin-component-annotate@2.22.7': {} + '@sentry/browser@7.118.0': dependencies: '@sentry-internal/feedback': 7.118.0 @@ -10809,6 +10688,60 @@ snapshots: '@sentry/types': 7.118.0 '@sentry/utils': 7.118.0 + '@sentry/bundler-plugin-core@2.22.7': + dependencies: + '@babel/core': 7.25.2 + '@sentry/babel-plugin-component-annotate': 2.22.7 + '@sentry/cli': 2.39.1 + dotenv: 16.4.7 + find-up: 5.0.0 + glob: 9.3.5 + magic-string: 0.30.8 + unplugin: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@sentry/cli-darwin@2.39.1': + optional: true + + '@sentry/cli-linux-arm64@2.39.1': + optional: true + + '@sentry/cli-linux-arm@2.39.1': + optional: true + + '@sentry/cli-linux-i686@2.39.1': + optional: true + + '@sentry/cli-linux-x64@2.39.1': + optional: true + + '@sentry/cli-win32-i686@2.39.1': + optional: true + + '@sentry/cli-win32-x64@2.39.1': + optional: true + + '@sentry/cli@2.39.1': + dependencies: + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + which: 2.0.2 + optionalDependencies: + '@sentry/cli-darwin': 2.39.1 + '@sentry/cli-linux-arm': 2.39.1 + '@sentry/cli-linux-arm64': 2.39.1 + '@sentry/cli-linux-i686': 2.39.1 + '@sentry/cli-linux-x64': 2.39.1 + '@sentry/cli-win32-i686': 2.39.1 + '@sentry/cli-win32-x64': 2.39.1 + transitivePeerDependencies: + - encoding + - supports-color + '@sentry/core@7.118.0': dependencies: '@sentry/types': 7.118.0 @@ -10843,6 +10776,14 @@ snapshots: dependencies: '@sentry/types': 7.118.0 + '@sentry/vite-plugin@2.22.7': + dependencies: + '@sentry/bundler-plugin-core': 2.22.7 + unplugin: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + '@shaderfrog/glsl-parser@2.1.5': {} '@sinclair/typebox@0.27.8': {} @@ -10890,11 +10831,11 @@ snapshots: storybook: 8.4.2(prettier@3.3.2) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.4.2(@types/react@18.3.3)(storybook@8.4.2(prettier@3.3.2))': + '@storybook/addon-docs@8.4.2(@types/react@18.3.3)(storybook@8.4.2(prettier@3.3.2))(webpack-sources@3.2.3)': dependencies: '@mdx-js/react': 3.1.0(@types/react@18.3.3)(react@18.3.1) '@storybook/blocks': 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.2)) - '@storybook/csf-plugin': 8.4.2(storybook@8.4.2(prettier@3.3.2)) + '@storybook/csf-plugin': 8.4.2(storybook@8.4.2(prettier@3.3.2))(webpack-sources@3.2.3) '@storybook/react-dom-shim': 8.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.2)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -10904,12 +10845,12 @@ snapshots: - '@types/react' - webpack-sources - '@storybook/addon-essentials@8.4.2(@types/react@18.3.3)(storybook@8.4.2(prettier@3.3.2))': + '@storybook/addon-essentials@8.4.2(@types/react@18.3.3)(storybook@8.4.2(prettier@3.3.2))(webpack-sources@3.2.3)': dependencies: '@storybook/addon-actions': 8.4.2(storybook@8.4.2(prettier@3.3.2)) '@storybook/addon-backgrounds': 8.4.2(storybook@8.4.2(prettier@3.3.2)) '@storybook/addon-controls': 8.4.2(storybook@8.4.2(prettier@3.3.2)) - '@storybook/addon-docs': 8.4.2(@types/react@18.3.3)(storybook@8.4.2(prettier@3.3.2)) + '@storybook/addon-docs': 8.4.2(@types/react@18.3.3)(storybook@8.4.2(prettier@3.3.2))(webpack-sources@3.2.3) '@storybook/addon-highlight': 8.4.2(storybook@8.4.2(prettier@3.3.2)) '@storybook/addon-measure': 8.4.2(storybook@8.4.2(prettier@3.3.2)) '@storybook/addon-outline': 8.4.2(storybook@8.4.2(prettier@3.3.2)) @@ -10973,9 +10914,9 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.4.2(storybook@8.4.2(prettier@3.3.2))(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1))': + '@storybook/builder-vite@8.4.2(storybook@8.4.2(prettier@3.3.2))(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1))(webpack-sources@3.2.3)': dependencies: - '@storybook/csf-plugin': 8.4.2(storybook@8.4.2(prettier@3.3.2)) + '@storybook/csf-plugin': 8.4.2(storybook@8.4.2(prettier@3.3.2))(webpack-sources@3.2.3) browser-assert: 1.2.1 storybook: 8.4.2(prettier@3.3.2) ts-dedent: 2.2.0 @@ -11007,10 +10948,10 @@ snapshots: - supports-color - utf-8-validate - '@storybook/csf-plugin@8.4.2(storybook@8.4.2(prettier@3.3.2))': + '@storybook/csf-plugin@8.4.2(storybook@8.4.2(prettier@3.3.2))(webpack-sources@3.2.3)': dependencies: storybook: 8.4.2(prettier@3.3.2) - unplugin: 1.15.0 + unplugin: 1.15.0(webpack-sources@3.2.3) transitivePeerDependencies: - webpack-sources @@ -11045,11 +10986,11 @@ snapshots: react-dom: 18.3.1(react@18.3.1) storybook: 8.4.2(prettier@3.3.2) - '@storybook/react-vite@8.4.2(@storybook/test@8.4.2(storybook@8.4.2(prettier@3.3.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.4.2(prettier@3.3.2))(typescript@5.5.3)(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1))': + '@storybook/react-vite@8.4.2(@storybook/test@8.4.2(storybook@8.4.2(prettier@3.3.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.24.0)(storybook@8.4.2(prettier@3.3.2))(typescript@5.5.3)(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1))(webpack-sources@3.2.3)': dependencies: '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.5.3)(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1)) '@rollup/pluginutils': 5.1.0(rollup@4.24.0) - '@storybook/builder-vite': 8.4.2(storybook@8.4.2(prettier@3.3.2))(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1)) + '@storybook/builder-vite': 8.4.2(storybook@8.4.2(prettier@3.3.2))(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1))(webpack-sources@3.2.3) '@storybook/react': 8.4.2(@storybook/test@8.4.2(storybook@8.4.2(prettier@3.3.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.2(prettier@3.3.2))(typescript@5.5.3) find-up: 5.0.0 magic-string: 0.30.11 @@ -11098,9 +11039,9 @@ snapshots: dependencies: storybook: 8.4.2(prettier@3.3.2) - '@storybook/vue3-vite@8.4.2(storybook@8.4.2(prettier@3.3.2))(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1))(vue@3.5.2(typescript@5.5.3))': + '@storybook/vue3-vite@8.4.2(storybook@8.4.2(prettier@3.3.2))(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1))(vue@3.5.2(typescript@5.5.3))(webpack-sources@3.2.3)': dependencies: - '@storybook/builder-vite': 8.4.2(storybook@8.4.2(prettier@3.3.2))(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1)) + '@storybook/builder-vite': 8.4.2(storybook@8.4.2(prettier@3.3.2))(vite@5.4.10(@types/node@22.9.0)(lightningcss@1.25.1))(webpack-sources@3.2.3) '@storybook/vue3': 8.4.2(storybook@8.4.2(prettier@3.3.2))(vue@3.5.2(typescript@5.5.3)) find-package-json: 1.2.0 magic-string: 0.30.11 @@ -11177,7 +11118,7 @@ snapshots: '@testing-library/dom@10.4.0': dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.26.2 '@babel/runtime': 7.24.7 '@types/aria-query': 5.0.4 aria-query: 5.3.0 @@ -11237,24 +11178,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.26.0 '@types/babel__template@7.4.4': dependencies: '@babel/parser': 7.26.2 - '@babel/types': 7.25.6 + '@babel/types': 7.26.0 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.26.0 '@types/cacheable-request@6.0.3': dependencies: @@ -11724,24 +11665,12 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 - '@volar/language-core@2.4.0-alpha.12': - dependencies: - '@volar/source-map': 2.4.0-alpha.12 - '@volar/language-core@2.4.10': dependencies: '@volar/source-map': 2.4.10 - '@volar/source-map@2.4.0-alpha.12': {} - '@volar/source-map@2.4.10': {} - '@volar/typescript@2.4.0-alpha.12': - dependencies: - '@volar/language-core': 2.4.0-alpha.12 - path-browserify: 1.0.1 - vscode-uri: 3.0.8 - '@volar/typescript@2.4.10': dependencies: '@volar/language-core': 2.4.10 @@ -11753,11 +11682,11 @@ snapshots: '@vue/babel-plugin-jsx@1.2.2(@babel/core@7.25.2)': dependencies: '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 '@vue/babel-helper-vue-transform-on': 1.2.2 '@vue/babel-plugin-resolve-type': 1.2.2(@babel/core@7.25.2) camelcase: 6.3.0 @@ -11770,7 +11699,7 @@ snapshots: '@vue/babel-plugin-resolve-type@1.2.2(@babel/core@7.25.2)': dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.26.2 '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.25.9 @@ -11779,7 +11708,7 @@ snapshots: '@vue/compiler-core@3.5.2': dependencies: - '@babel/parser': 7.25.6 + '@babel/parser': 7.26.2 '@vue/shared': 3.5.2 entities: 4.5.0 estree-walker: 2.0.2 @@ -11792,7 +11721,7 @@ snapshots: '@vue/compiler-sfc@3.5.2': dependencies: - '@babel/parser': 7.25.6 + '@babel/parser': 7.26.2 '@vue/compiler-core': 3.5.2 '@vue/compiler-dom': 3.5.2 '@vue/compiler-ssr': 3.5.2 @@ -11856,7 +11785,7 @@ snapshots: '@vue/language-core@2.0.24(typescript@5.5.3)': dependencies: - '@volar/language-core': 2.4.0-alpha.12 + '@volar/language-core': 2.4.10 '@vue/compiler-dom': 3.5.2 '@vue/shared': 3.5.2 computeds: 0.0.1 @@ -11907,7 +11836,7 @@ snapshots: '@vue/test-utils@2.4.6': dependencies: js-beautify: 1.15.1 - vue-component-type-helpers: 2.0.29 + vue-component-type-helpers: 2.1.10 '@vue/tsconfig@0.5.1': {} @@ -11960,18 +11889,16 @@ snapshots: xtend: 4.0.2 optional: true - acorn-jsx@5.3.2(acorn@8.12.0): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.12.0 + acorn: 8.14.0 acorn-walk@8.3.3: dependencies: - acorn: 8.12.0 + acorn: 8.14.0 acorn@7.4.1: {} - acorn@8.12.0: {} - acorn@8.14.0: {} ag-charts-community@10.3.3: @@ -12253,11 +12180,11 @@ snapshots: babel-plugin-react-compiler@19.0.0-beta-6fc168f-20241025: dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.26.0 babel-plugin-react-compiler@19.0.0-beta-a7bf2bd-20241110: dependencies: - '@babel/types': 7.25.6 + '@babel/types': 7.26.0 babel-walk@3.0.0-canary-5: dependencies: @@ -13086,6 +13013,8 @@ snapshots: dotenv-expand@5.1.0: {} + dotenv@16.4.7: {} + dotenv@9.0.2: {} eastasianwidth@0.2.0: {} @@ -13513,14 +13442,14 @@ snapshots: espree@10.2.0: dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 4.1.0 espree@9.6.1: dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} @@ -13845,6 +13774,13 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 + glob@9.3.5: + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.11.1 + global-agent@3.0.0: dependencies: boolean: 3.2.0 @@ -14476,8 +14412,6 @@ snapshots: - supports-color - utf-8-validate - jsesc@2.5.2: {} - jsesc@3.0.2: {} json-buffer@3.0.1: {} @@ -14776,10 +14710,14 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.8: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + magicast@0.3.4: dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 source-map-js: 1.2.0 make-dir@4.0.0: @@ -14867,6 +14805,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@8.0.4: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.1: dependencies: brace-expansion: 2.0.1 @@ -14915,7 +14857,7 @@ snapshots: mlly@1.7.1: dependencies: - acorn: 8.12.0 + acorn: 8.14.0 pathe: 1.1.2 pkg-types: 1.1.2 ufo: 1.5.3 @@ -15410,6 +15352,8 @@ snapshots: proto-list@1.2.4: {} + proxy-from-env@1.1.0: {} + prr@1.0.1: optional: true @@ -15629,8 +15573,8 @@ snapshots: react-docgen@7.1.0: dependencies: '@babel/core': 7.25.2 - '@babel/traverse': 7.25.6 - '@babel/types': 7.25.6 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 '@types/doctrine': 0.0.9 @@ -16425,8 +16369,6 @@ snapshots: tmp@0.2.3: {} - to-fast-properties@2.0.0: {} - to-ico@1.1.5: dependencies: arrify: 1.0.1 @@ -16597,10 +16539,19 @@ snapshots: unpipe@1.0.0: {} - unplugin@1.15.0: + unplugin@1.0.1: + dependencies: + acorn: 8.14.0 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.5.0 + + unplugin@1.15.0(webpack-sources@3.2.3): dependencies: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 + optionalDependencies: + webpack-sources: 3.2.3 upath@2.0.1: {} @@ -16862,8 +16813,6 @@ snapshots: optionalDependencies: typescript: 5.5.3 - vue-component-type-helpers@2.0.29: {} - vue-component-type-helpers@2.1.10: {} vue-demi@0.14.10(vue@3.5.2(typescript@5.5.3)): @@ -16872,8 +16821,8 @@ snapshots: vue-docgen-api@4.79.2(vue@3.5.2(typescript@5.5.3)): dependencies: - '@babel/parser': 7.25.6 - '@babel/types': 7.25.6 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@vue/compiler-dom': 3.5.2 '@vue/compiler-sfc': 3.5.2 ast-types: 0.16.1 @@ -16925,7 +16874,7 @@ snapshots: vue-tsc@2.0.24(typescript@5.5.3): dependencies: - '@volar/typescript': 2.4.0-alpha.12 + '@volar/typescript': 2.4.10 '@vue/language-core': 2.0.24(typescript@5.5.3) semver: 7.6.3 typescript: 5.5.3 @@ -16950,6 +16899,10 @@ snapshots: webidl-conversions@7.0.0: {} + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.5.0: {} + webpack-virtual-modules@0.6.2: {} whatwg-encoding@3.1.1: diff --git a/rust-toolchain.toml b/rust-toolchain.toml index a4504f6efdca..5e37ef6b5892 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] channel = "nightly-2024-08-08" -components = ["clippy", "rustfmt"] +components = ["clippy", "rustfmt", "rust-src"] profile = "default" targets = ["wasm32-unknown-unknown"]