diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a4b0c67d5163..daaf5effc2a0 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,4 +1,4 @@
-name: "CI: Build & Test"
+name: 'CI: Build & Test'
on:
push:
branches:
@@ -17,7 +17,7 @@ on:
required: false
schedule:
# Run every day at midnight (without cache)
- - cron: "0 0 * * *"
+ - cron: '0 0 * * *'
# Cancel in progress workflows on pull_requests.
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value
@@ -57,7 +57,7 @@ env:
# https://bsky.app/profile/joyeecheung.bsky.social/post/3lhy6o54fo22h
# Apparently some of our CI failures are attributable to a corrupt v8 cache, causing v8 failures with: "Check failed: current == end_slot_index.".
# This option both controls the `v8-compile-cache-lib` and `v8-compile-cache` packages.
- DISABLE_V8_COMPILE_CACHE: "1"
+ DISABLE_V8_COMPILE_CACHE: '1'
jobs:
job_get_metadata:
@@ -85,7 +85,7 @@ jobs:
with:
ref: ${{ github.event.pull_request.base.sha }}
- - name: "Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})"
+ - name: 'Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})'
uses: actions/checkout@v6
with:
ref: ${{ env.HEAD_COMMIT }}
@@ -93,7 +93,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
@@ -200,7 +200,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Restore NX cache
uses: actions/cache/restore@v5
with:
@@ -239,7 +239,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Restore NX cache
uses: actions/cache/restore@v5
with:
@@ -296,7 +296,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Restore caches
uses: ./.github/actions/restore-cache
with:
@@ -328,7 +328,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Restore caches
uses: ./.github/actions/restore-cache
with:
@@ -351,7 +351,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Check that yarn.lock is stable
run: yarn install --frozen-lockfile --ignore-engines
- name: Check for duplicate dependencies in lockfile
@@ -371,7 +371,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
@@ -393,7 +393,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Restore caches
uses: ./.github/actions/restore-cache
with:
@@ -403,14 +403,7 @@ jobs:
job_artifacts:
name: Upload Artifacts
- needs:
- [
- job_get_metadata,
- job_build,
- job_build_layer,
- job_build_bundles,
- job_build_tarballs,
- ]
+ needs: [job_get_metadata, job_build, job_build_layer, job_build_bundles, job_build_tarballs]
runs-on: ubuntu-24.04
# Build artifacts are only needed for releasing workflow.
if: needs.job_get_metadata.outputs.is_release == 'true'
@@ -422,7 +415,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Restore caches
uses: ./.github/actions/restore-cache
with:
@@ -478,7 +471,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Restore caches
uses: ./.github/actions/restore-cache
with:
@@ -513,7 +506,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Set up Bun
uses: oven-sh/setup-bun@v2
- name: Restore caches
@@ -538,7 +531,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Set up Deno
uses: denoland/setup-deno@v2.0.4
with:
@@ -632,9 +625,9 @@ jobs:
# Only check all projects for full bundle
# We also shard the tests as they take the longest
- bundle: bundle_tracing_replay_feedback_logs_metrics_min
- project: "webkit"
+ project: 'webkit'
- bundle: bundle_tracing_replay_feedback_logs_metrics_min
- project: "firefox"
+ project: 'firefox'
- bundle: esm
project: chromium
shard: 1
@@ -654,7 +647,7 @@ jobs:
exclude:
# Do not run the un-sharded esm tests
- bundle: esm
- project: "chromium"
+ project: 'chromium'
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
@@ -664,7 +657,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Restore caches
uses: ./.github/actions/restore-cache
with:
@@ -738,7 +731,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Restore caches
uses: ./.github/actions/restore-cache
with:
@@ -794,7 +787,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Restore caches
uses: ./.github/actions/restore-cache
with:
@@ -823,7 +816,7 @@ jobs:
include:
# Only check typescript for latest version (to streamline CI)
- node: 24
- typescript: "3.8"
+ typescript: '3.8'
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
uses: actions/checkout@v6
@@ -864,7 +857,7 @@ jobs:
include:
# Only check typescript for latest version (to streamline CI)
- node: 24
- typescript: "3.8"
+ typescript: '3.8'
steps:
- name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }})
uses: actions/checkout@v6
@@ -901,7 +894,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Restore caches
uses: ./.github/actions/restore-cache
with:
@@ -925,7 +918,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Set up Bun
uses: oven-sh/setup-bun@v2
- name: Restore caches
@@ -991,7 +984,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "package.json"
+ node-version-file: 'package.json'
- name: Restore NX cache
uses: actions/cache/restore@v5
with:
@@ -1022,19 +1015,20 @@ jobs:
name: E2E ${{ matrix.label || matrix.test-application }} Test
# We need to add the `always()` check here because the previous step has this as well :(
# See: https://github.com/actions/runner/issues/2205
- if: always() && needs.job_build_tarballs.result == 'success' && needs.job_build.outputs.e2e-matrix !='{"include":[]}'
+ if:
+ always() && needs.job_build_tarballs.result == 'success' && needs.job_build.outputs.e2e-matrix !='{"include":[]}'
needs: [job_get_metadata, job_build, job_build_layer, job_build_tarballs]
runs-on: ubuntu-24.04
timeout-minutes: 15
env:
# We just use a dummy DSN here, only send to the tunnel anyhow
- E2E_TEST_DSN: "https://username@domain/123"
+ E2E_TEST_DSN: 'https://username@domain/123'
# Needed because some apps expect a certain prefix
- NEXT_PUBLIC_E2E_TEST_DSN: "https://username@domain/123"
- PUBLIC_E2E_TEST_DSN: "https://username@domain/123"
- REACT_APP_E2E_TEST_DSN: "https://username@domain/123"
- E2E_TEST_SENTRY_ORG_SLUG: "sentry-javascript-sdks"
- E2E_TEST_SENTRY_PROJECT: "sentry-javascript-e2e-tests"
+ NEXT_PUBLIC_E2E_TEST_DSN: 'https://username@domain/123'
+ PUBLIC_E2E_TEST_DSN: 'https://username@domain/123'
+ REACT_APP_E2E_TEST_DSN: 'https://username@domain/123'
+ E2E_TEST_SENTRY_ORG_SLUG: 'sentry-javascript-sdks'
+ E2E_TEST_SENTRY_PROJECT: 'sentry-javascript-e2e-tests'
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.job_build.outputs.e2e-matrix) }}
@@ -1049,7 +1043,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "dev-packages/e2e-tests/test-applications/${{ matrix.test-application }}/package.json"
+ node-version-file: 'dev-packages/e2e-tests/test-applications/${{ matrix.test-application }}/package.json'
- name: Set up Bun
if:
contains(fromJSON('["node-exports-test-app","nextjs-16-bun", "elysia-bun", "hono-4"]'),
@@ -1166,8 +1160,8 @@ jobs:
NEXT_PUBLIC_E2E_TEST_DSN: ${{ secrets.E2E_TEST_DSN }}
PUBLIC_E2E_TEST_DSN: ${{ secrets.E2E_TEST_DSN }}
REACT_APP_E2E_TEST_DSN: ${{ secrets.E2E_TEST_DSN }}
- E2E_TEST_SENTRY_ORG_SLUG: "sentry-javascript-sdks"
- E2E_TEST_SENTRY_PROJECT: "sentry-javascript-e2e-tests"
+ E2E_TEST_SENTRY_ORG_SLUG: 'sentry-javascript-sdks'
+ E2E_TEST_SENTRY_PROJECT: 'sentry-javascript-e2e-tests'
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.job_build.outputs.e2e-matrix-optional) }}
@@ -1183,7 +1177,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
- node-version-file: "dev-packages/e2e-tests/test-applications/${{ matrix.test-application }}/package.json"
+ node-version-file: 'dev-packages/e2e-tests/test-applications/${{ matrix.test-application }}/package.json'
- name: Restore caches
uses: ./.github/actions/restore-cache
with:
diff --git a/dev-packages/e2e-tests/test-applications/ember-classic/app/instance-initializers/sentry-performance.ts b/dev-packages/e2e-tests/test-applications/ember-classic/app/instance-initializers/sentry-performance.ts
index 1d56dcc2dd83..b7c3f70b1e30 100644
--- a/dev-packages/e2e-tests/test-applications/ember-classic/app/instance-initializers/sentry-performance.ts
+++ b/dev-packages/e2e-tests/test-applications/ember-classic/app/instance-initializers/sentry-performance.ts
@@ -1,12 +1,11 @@
import type ApplicationInstance from '@ember/application/instance';
-import { addIntegration, browserTracingIntegration } from '@sentry/ember';
+import { instrumentAppInstancePerformance } from '@sentry/ember';
export function initialize(appInstance: ApplicationInstance): void {
- addIntegration(browserTracingIntegration({
- appInstance,
+ instrumentAppInstancePerformance(appInstance, {
minimumRunloopQueueDuration: 0,
minimumComponentRenderDuration: 0,
- }));
+ });
}
export default {
diff --git a/dev-packages/e2e-tests/test-applications/ember-classic/tests/errors.test.ts b/dev-packages/e2e-tests/test-applications/ember-classic/tests/errors.test.ts
index 3f4b1f5c099e..a34194d4fd30 100644
--- a/dev-packages/e2e-tests/test-applications/ember-classic/tests/errors.test.ts
+++ b/dev-packages/e2e-tests/test-applications/ember-classic/tests/errors.test.ts
@@ -31,7 +31,7 @@ test('sends an error', async ({ page }) => {
test('assigns the correct transaction value after a navigation', async ({ page }) => {
const pageloadTxnPromise = waitForTransaction('ember-classic', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
});
const errorPromise = waitForError('ember-classic', async errorEvent => {
diff --git a/dev-packages/e2e-tests/test-applications/ember-classic/tests/performance.test.ts b/dev-packages/e2e-tests/test-applications/ember-classic/tests/performance.test.ts
index e6aa4747bf92..696a82a9c7e2 100644
--- a/dev-packages/e2e-tests/test-applications/ember-classic/tests/performance.test.ts
+++ b/dev-packages/e2e-tests/test-applications/ember-classic/tests/performance.test.ts
@@ -3,7 +3,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('sends a pageload transaction with a parameterized URL', async ({ page }) => {
const transactionPromise = waitForTransaction('ember-classic', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
});
await page.goto(`/`);
@@ -26,11 +26,11 @@ test('sends a pageload transaction with a parameterized URL', async ({ page }) =
test('sends a navigation transaction with a parameterized URL', async ({ page }) => {
const pageloadTxnPromise = waitForTransaction('ember-classic', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
});
const navigationTxnPromise = waitForTransaction('ember-classic', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
});
await page.goto(`/`);
@@ -54,11 +54,11 @@ test('sends a navigation transaction with a parameterized URL', async ({ page })
test('sends a navigation transaction even if the pageload span is still active', async ({ page }) => {
const pageloadTxnPromise = waitForTransaction('ember-classic', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
});
const navigationTxnPromise = waitForTransaction('ember-classic', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
});
await page.goto(`/`);
@@ -99,11 +99,11 @@ test('sends a navigation transaction even if the pageload span is still active',
test('captures correct spans for navigation', async ({ page }) => {
const pageloadTxnPromise = waitForTransaction('ember-classic', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
});
const navigationTxnPromise = waitForTransaction('ember-classic', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
});
await page.goto(`/tracing`);
diff --git a/dev-packages/e2e-tests/test-applications/ember-embroider/app/instance-initializers/sentry-performance.ts b/dev-packages/e2e-tests/test-applications/ember-embroider/app/instance-initializers/sentry-performance.ts
index 1d56dcc2dd83..b7c3f70b1e30 100644
--- a/dev-packages/e2e-tests/test-applications/ember-embroider/app/instance-initializers/sentry-performance.ts
+++ b/dev-packages/e2e-tests/test-applications/ember-embroider/app/instance-initializers/sentry-performance.ts
@@ -1,12 +1,11 @@
import type ApplicationInstance from '@ember/application/instance';
-import { addIntegration, browserTracingIntegration } from '@sentry/ember';
+import { instrumentAppInstancePerformance } from '@sentry/ember';
export function initialize(appInstance: ApplicationInstance): void {
- addIntegration(browserTracingIntegration({
- appInstance,
+ instrumentAppInstancePerformance(appInstance, {
minimumRunloopQueueDuration: 0,
minimumComponentRenderDuration: 0,
- }));
+ });
}
export default {
diff --git a/dev-packages/e2e-tests/test-applications/ember-embroider/tests/errors.test.ts b/dev-packages/e2e-tests/test-applications/ember-embroider/tests/errors.test.ts
index e9cfd7e9f1c6..50ec82e11153 100644
--- a/dev-packages/e2e-tests/test-applications/ember-embroider/tests/errors.test.ts
+++ b/dev-packages/e2e-tests/test-applications/ember-embroider/tests/errors.test.ts
@@ -31,7 +31,7 @@ test('sends an error', async ({ page }) => {
test('assigns the correct transaction value after a navigation', async ({ page }) => {
const pageloadTxnPromise = waitForTransaction('ember-embroider', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
});
const errorPromise = waitForError('ember-embroider', async errorEvent => {
diff --git a/dev-packages/e2e-tests/test-applications/ember-embroider/tests/performance.test.ts b/dev-packages/e2e-tests/test-applications/ember-embroider/tests/performance.test.ts
index a82964b46a92..b64838abe288 100644
--- a/dev-packages/e2e-tests/test-applications/ember-embroider/tests/performance.test.ts
+++ b/dev-packages/e2e-tests/test-applications/ember-embroider/tests/performance.test.ts
@@ -3,7 +3,7 @@ import { waitForTransaction } from '@sentry-internal/test-utils';
test('sends a pageload transaction with a parameterized URL', async ({ page }) => {
const transactionPromise = waitForTransaction('ember-embroider', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
});
await page.goto(`/`);
@@ -26,11 +26,11 @@ test('sends a pageload transaction with a parameterized URL', async ({ page }) =
test('sends a navigation transaction with a parameterized URL', async ({ page }) => {
const pageloadTxnPromise = waitForTransaction('ember-embroider', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
});
const navigationTxnPromise = waitForTransaction('ember-embroider', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
});
await page.goto(`/`);
@@ -54,11 +54,11 @@ test('sends a navigation transaction with a parameterized URL', async ({ page })
test('sends a navigation transaction even if the pageload span is still active', async ({ page }) => {
const pageloadTxnPromise = waitForTransaction('ember-embroider', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
});
const navigationTxnPromise = waitForTransaction('ember-embroider', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
});
await page.goto(`/`);
@@ -99,11 +99,11 @@ test('sends a navigation transaction even if the pageload span is still active',
test('captures correct spans for navigation', async ({ page }) => {
const pageloadTxnPromise = waitForTransaction('ember-embroider', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
});
const navigationTxnPromise = waitForTransaction('ember-embroider', async transactionEvent => {
- return !!transactionEvent?.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
});
await page.goto(`/tracing`);
diff --git a/dev-packages/e2e-tests/test-applications/ember-strict-resolver/.gitignore b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/.gitignore
new file mode 100644
index 000000000000..df2af05cbfdd
--- /dev/null
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/.gitignore
@@ -0,0 +1,2 @@
+/test-results
+/dist
diff --git a/dev-packages/e2e-tests/test-applications/ember-strict-resolver/babel.config.cjs b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/babel.config.cjs
new file mode 100644
index 000000000000..93f46269427a
--- /dev/null
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/babel.config.cjs
@@ -0,0 +1,37 @@
+/**
+ * This babel config is used for local tests in the e2e app.
+ */
+const { buildMacros } = require('@embroider/macros/babel');
+
+const macros = buildMacros();
+
+module.exports = {
+ plugins: [
+ [
+ '@babel/plugin-transform-typescript',
+ {
+ allExtensions: true,
+ allowDeclareFields: true,
+ onlyRemoveTypeImports: true,
+ },
+ ],
+ [
+ 'babel-plugin-ember-template-compilation',
+ {
+ transforms: [...macros.templateMacros],
+ },
+ ],
+ [
+ 'module:decorator-transforms',
+ {
+ runtime: {
+ import: require.resolve('decorator-transforms/runtime-esm'),
+ },
+ },
+ ],
+ ...macros.babelMacros,
+ ],
+ generatorOpts: {
+ compact: false,
+ },
+};
diff --git a/dev-packages/e2e-tests/test-applications/ember-strict-resolver/index.html b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/index.html
new file mode 100644
index 000000000000..ee0fb589b572
--- /dev/null
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+ Demo App
+
+
+
+
+
+
+
+
+
diff --git a/dev-packages/e2e-tests/test-applications/ember-strict-resolver/package.json b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/package.json
new file mode 100644
index 000000000000..3502d5ab801c
--- /dev/null
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "ember-strict-resolver",
+ "version": "0.0.0",
+ "private": true,
+ "description": "Standalone Ember SDK demo app for e2e tests",
+ "license": "MIT",
+ "scripts": {
+ "build": "vite build",
+ "start": "vite preview --port 3030",
+ "test": "playwright test",
+ "test:build": "pnpm install && pnpm run build",
+ "test:assert": "pnpm run test"
+ },
+ "devDependencies": {
+ "@playwright/test": "~1.56.0",
+ "@babel/core": "^7.29.0",
+ "@babel/plugin-transform-typescript": "^7.28.6",
+ "@babel/runtime": "^7.29.2",
+ "@ember/app-tsconfig": "^2.0.0",
+ "@embroider/compat": "^4.1.17",
+ "@embroider/core": "^4.4.7",
+ "@embroider/macros": "^1.20.2",
+ "@embroider/vite": "^1.7.2",
+ "@glint/ember-tsc": "^1.5.0",
+ "@glint/template": "^1.7.7",
+ "@rollup/plugin-babel": "^7.0.0",
+ "@sentry/ember": "file:../../packed/sentry-ember-packed.tgz",
+ "@sentry-internal/test-utils": "link:../../../test-utils",
+ "babel-plugin-ember-template-compilation": "^4.0.0",
+ "decorator-transforms": "^2.3.1",
+ "ember-page-title": "^9.0.3",
+ "ember-source": "^6.12.0",
+ "ember-strict-application-resolver": "^0.1.1",
+ "typescript": "~5.9.3",
+ "vite": "^7.3.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "ember": {
+ "edition": "octane"
+ },
+ "volta": {
+ "extends": "../../package.json"
+ }
+}
diff --git a/dev-packages/e2e-tests/test-applications/ember-strict-resolver/playwright.config.mjs b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/playwright.config.mjs
new file mode 100644
index 000000000000..fa015b64f79b
--- /dev/null
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/playwright.config.mjs
@@ -0,0 +1,10 @@
+import { getPlaywrightConfig } from '@sentry-internal/test-utils';
+
+const config = getPlaywrightConfig({
+ startCommand: 'pnpm start',
+ eventProxyFile: 'start-event-proxy.mjs',
+ eventProxyPort: 3031,
+ port: 3030,
+});
+
+export default config;
diff --git a/packages/ember/demo-app/app.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/app.gts
similarity index 64%
rename from packages/ember/demo-app/app.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/app.gts
index 13c5bcab09a1..f3b26b618d18 100644
--- a/packages/ember/demo-app/app.gts
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/app.gts
@@ -7,22 +7,7 @@ import * as Sentry from '@sentry/ember';
Sentry.init({
dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0',
tracesSampleRate: 1.0,
- // Use a mock transport for dev mode
- transport: () => ({
- send: (envelope: unknown) => {
- const win = window as Window & { _sentryTestEvents?: unknown[] };
- const items =
- (envelope as [unknown, Array<[{ type: string }, unknown]>])[1] || [];
- for (const [header, payload] of items) {
- if (header.type === 'event' || header.type === 'transaction') {
- win._sentryTestEvents = win._sentryTestEvents || [];
- win._sentryTestEvents.push(payload);
- }
- }
- return Promise.resolve({});
- },
- flush: () => Promise.resolve(true),
- }),
+ tunnel: 'http://localhost:3031/', // proxy server
});
class Router extends EmberRouter {
@@ -40,6 +25,12 @@ export class App extends EmberApp {
};
}
+// Manually register instance initializers
+const instanceInitializers = import.meta.glob('./instance-initializers/**/*', { eager: true });
+Object.values(instanceInitializers).forEach(module => {
+ App.instanceInitializer(module.default);
+});
+
Router.map(function () {
this.route('tracing');
this.route('replay');
diff --git a/packages/ember/demo-app/components/slow-loading-list.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/components/slow-loading-list.gts
similarity index 100%
rename from packages/ember/demo-app/components/slow-loading-list.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/components/slow-loading-list.gts
diff --git a/packages/ember/demo-app/components/test-section.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/components/test-section.gts
similarity index 100%
rename from packages/ember/demo-app/components/test-section.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/components/test-section.gts
diff --git a/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/instance-initializers/sentry-performance.ts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/instance-initializers/sentry-performance.ts
new file mode 100644
index 000000000000..02b0fa780ae1
--- /dev/null
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/instance-initializers/sentry-performance.ts
@@ -0,0 +1,11 @@
+import type ApplicationInstance from '@ember/application/instance';
+import * as Sentry from '@sentry/ember';
+
+export function initialize(appInstance: ApplicationInstance): void {
+ Sentry.instrumentAppInstancePerformance(appInstance);
+}
+
+export default {
+ initialize,
+ name: 'sentry-performance',
+};
diff --git a/packages/ember/demo-app/routes/slow-loading-route.ts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/routes/slow-loading-route.ts
similarity index 89%
rename from packages/ember/demo-app/routes/slow-loading-route.ts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/routes/slow-loading-route.ts
index 635a2cdedcef..e05a8ab70bf0 100644
--- a/packages/ember/demo-app/routes/slow-loading-route.ts
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/routes/slow-loading-route.ts
@@ -2,7 +2,7 @@ import Route from '@ember/routing/route';
import { instrumentRoutePerformance } from '@sentry/ember';
function sleep(ms: number): Promise {
- return new Promise((resolve) => setTimeout(resolve, ms));
+ return new Promise(resolve => setTimeout(resolve, ms));
}
class SlowLoadingRoute extends Route {
diff --git a/packages/ember/demo-app/routes/slow-loading-route/index.ts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/routes/slow-loading-route/index.ts
similarity index 89%
rename from packages/ember/demo-app/routes/slow-loading-route/index.ts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/routes/slow-loading-route/index.ts
index 3be2c9631539..89868d846e23 100644
--- a/packages/ember/demo-app/routes/slow-loading-route/index.ts
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/routes/slow-loading-route/index.ts
@@ -2,7 +2,7 @@ import Route from '@ember/routing/route';
import { instrumentRoutePerformance } from '@sentry/ember';
function sleep(ms: number): Promise {
- return new Promise((resolve) => setTimeout(resolve, ms));
+ return new Promise(resolve => setTimeout(resolve, ms));
}
class SlowLoadingRouteIndexRoute extends Route {
diff --git a/packages/ember/demo-app/routes/with-error/index.ts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/routes/with-error/index.ts
similarity index 100%
rename from packages/ember/demo-app/routes/with-error/index.ts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/routes/with-error/index.ts
diff --git a/packages/ember/demo-app/routes/with-loading/index.ts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/routes/with-loading/index.ts
similarity index 89%
rename from packages/ember/demo-app/routes/with-loading/index.ts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/routes/with-loading/index.ts
index 3bfb70cebcfc..7f892ec8d9e2 100644
--- a/packages/ember/demo-app/routes/with-loading/index.ts
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/routes/with-loading/index.ts
@@ -2,7 +2,7 @@ import Route from '@ember/routing/route';
import { instrumentRoutePerformance } from '@sentry/ember';
function sleep(ms: number): Promise {
- return new Promise((resolve) => setTimeout(resolve, ms));
+ return new Promise(resolve => setTimeout(resolve, ms));
}
class WithLoadingIndexRoute extends Route {
diff --git a/packages/ember/demo-app/styles.css b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/styles.css
similarity index 100%
rename from packages/ember/demo-app/styles.css
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/styles.css
diff --git a/packages/ember/demo-app/templates/application.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/application.gts
similarity index 100%
rename from packages/ember/demo-app/templates/application.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/application.gts
diff --git a/packages/ember/demo-app/templates/index.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/index.gts
similarity index 95%
rename from packages/ember/demo-app/templates/index.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/index.gts
index 931b83cdfff2..0c0cd9b5aa07 100644
--- a/packages/ember/demo-app/templates/index.gts
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/index.gts
@@ -1,8 +1,10 @@
import { on } from '@ember/modifier';
import { scheduleOnce } from '@ember/runloop';
+import * as Sentry from '@sentry/ember';
function createError(): void {
- throw new Error('Generic Javascript Error');
+ // @ts-expect-error this is fine
+ this.nonExistentFunction();
}
function createEmberError(): void {
diff --git a/packages/ember/demo-app/templates/slow-loading-route.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/slow-loading-route.gts
similarity index 100%
rename from packages/ember/demo-app/templates/slow-loading-route.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/slow-loading-route.gts
diff --git a/packages/ember/demo-app/templates/slow-loading-route/index.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/slow-loading-route/index.gts
similarity index 100%
rename from packages/ember/demo-app/templates/slow-loading-route/index.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/slow-loading-route/index.gts
diff --git a/packages/ember/demo-app/templates/tracing.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/tracing.gts
similarity index 100%
rename from packages/ember/demo-app/templates/tracing.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/tracing.gts
diff --git a/packages/ember/demo-app/templates/with-error.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/with-error.gts
similarity index 100%
rename from packages/ember/demo-app/templates/with-error.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/with-error.gts
diff --git a/packages/ember/demo-app/templates/with-error/error.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/with-error/error.gts
similarity index 100%
rename from packages/ember/demo-app/templates/with-error/error.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/with-error/error.gts
diff --git a/packages/ember/demo-app/templates/with-error/index.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/with-error/index.gts
similarity index 100%
rename from packages/ember/demo-app/templates/with-error/index.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/with-error/index.gts
diff --git a/packages/ember/demo-app/templates/with-loading.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/with-loading.gts
similarity index 100%
rename from packages/ember/demo-app/templates/with-loading.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/with-loading.gts
diff --git a/packages/ember/demo-app/templates/with-loading/index.gts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/with-loading/index.gts
similarity index 100%
rename from packages/ember/demo-app/templates/with-loading/index.gts
rename to dev-packages/e2e-tests/test-applications/ember-strict-resolver/src/templates/with-loading/index.gts
diff --git a/dev-packages/e2e-tests/test-applications/ember-strict-resolver/start-event-proxy.mjs b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/start-event-proxy.mjs
new file mode 100644
index 000000000000..0f588cdd1630
--- /dev/null
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/start-event-proxy.mjs
@@ -0,0 +1,6 @@
+import { startEventProxyServer } from '@sentry-internal/test-utils';
+
+startEventProxyServer({
+ port: 3031,
+ proxyServerName: 'ember-strict-resolver',
+});
diff --git a/dev-packages/e2e-tests/test-applications/ember-strict-resolver/tests/errors.test.ts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/tests/errors.test.ts
new file mode 100644
index 000000000000..d003aec0c290
--- /dev/null
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/tests/errors.test.ts
@@ -0,0 +1,79 @@
+import { expect, test } from '@playwright/test';
+import { waitForError, waitForTransaction } from '@sentry-internal/test-utils';
+
+test('sends an error', async ({ page }) => {
+ const errorPromise = waitForError('ember-strict-resolver', async errorEvent => {
+ return !errorEvent.type;
+ });
+
+ await page.goto(`/`);
+
+ await page.locator('[data-test-button="Throw Generic Javascript Error"]').click();
+
+ const error = await errorPromise;
+
+ expect(error).toMatchObject({
+ exception: {
+ values: [
+ {
+ type: 'TypeError',
+ value: 'this.nonExistentFunction is not a function',
+ mechanism: {
+ type: 'auto.browser.browserapierrors.addEventListener',
+ handled: false,
+ },
+ },
+ ],
+ },
+ transaction: 'route:index',
+ });
+});
+
+test('assigns the correct transaction value after a navigation', async ({ page }) => {
+ const pageloadTxnPromise = waitForTransaction('ember-strict-resolver', async transactionEvent => {
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ });
+
+ const errorPromise = waitForError('ember-strict-resolver', async errorEvent => {
+ return !errorEvent.type;
+ });
+
+ await page.goto(`/tracing`);
+ await pageloadTxnPromise;
+
+ await page.getByText('Home').click();
+
+ const [_, error] = await Promise.all([
+ page.locator('[data-test-button="Throw Generic Javascript Error"]').click(),
+ errorPromise,
+ ]);
+
+ expect(error).toMatchObject({
+ exception: {
+ values: [
+ {
+ type: 'TypeError',
+ value: 'this.nonExistentFunction is not a function',
+ mechanism: {
+ type: 'auto.browser.browserapierrors.addEventListener',
+ handled: false,
+ },
+ },
+ ],
+ },
+ transaction: 'route:index',
+ });
+});
+
+test('captures Ember error', async ({ page }) => {
+ const errorPromise = waitForError('ember-strict-resolver', event => {
+ return event.exception?.values?.[0]?.value?.includes('EmberError') ?? false;
+ });
+
+ await page.goto('/');
+ await page.locator('[data-test-button="Throw EmberError"]').click();
+
+ const errorEvent = await errorPromise;
+
+ expect(errorEvent.exception?.values?.[0]?.value).toContain('EmberError');
+});
diff --git a/dev-packages/e2e-tests/test-applications/ember-strict-resolver/tests/sentry-performance.test.ts b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/tests/sentry-performance.test.ts
new file mode 100644
index 000000000000..798a320f5a10
--- /dev/null
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/tests/sentry-performance.test.ts
@@ -0,0 +1,396 @@
+import { expect, test } from '@playwright/test';
+import { waitForTransaction } from '@sentry-internal/test-utils';
+
+test('sends a pageload transaction with a parameterized URL', async ({ page }) => {
+ const transactionPromise = waitForTransaction('ember-strict-resolver', async transactionEvent => {
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ });
+
+ await page.goto(`/`);
+
+ const rootSpan = await transactionPromise;
+
+ expect(rootSpan).toMatchObject({
+ contexts: {
+ trace: {
+ op: 'pageload',
+ origin: 'auto.pageload.ember',
+ },
+ },
+ transaction: 'route:index',
+ transaction_info: {
+ source: 'route',
+ },
+ });
+});
+
+test('sends a navigation transaction with a parameterized URL', async ({ page }) => {
+ const pageloadTxnPromise = waitForTransaction('ember-strict-resolver', async transactionEvent => {
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ });
+
+ const navigationTxnPromise = waitForTransaction('ember-strict-resolver', async transactionEvent => {
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
+ });
+
+ await page.goto(`/`);
+ await pageloadTxnPromise;
+
+ const [_, navigationTxn] = await Promise.all([page.getByText('Tracing').click(), navigationTxnPromise]);
+
+ expect(navigationTxn).toMatchObject({
+ contexts: {
+ trace: {
+ op: 'navigation',
+ origin: 'auto.navigation.ember',
+ },
+ },
+ transaction: 'route:tracing',
+ transaction_info: {
+ source: 'route',
+ },
+ });
+});
+
+test('sends a navigation transaction even if the pageload span is still active', async ({ page }) => {
+ const pageloadTxnPromise = waitForTransaction('ember-strict-resolver', async transactionEvent => {
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ });
+
+ const navigationTxnPromise = waitForTransaction('ember-strict-resolver', async transactionEvent => {
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
+ });
+
+ await page.goto(`/`);
+
+ // immediately navigate to a different route
+ const [_, pageloadTxn, navigationTxn] = await Promise.all([
+ page.getByText('Tracing').click(),
+ pageloadTxnPromise,
+ navigationTxnPromise,
+ ]);
+
+ expect(pageloadTxn).toMatchObject({
+ contexts: {
+ trace: {
+ op: 'pageload',
+ origin: 'auto.pageload.ember',
+ },
+ },
+ transaction: 'route:index',
+ transaction_info: {
+ source: 'route',
+ },
+ });
+
+ expect(navigationTxn).toMatchObject({
+ contexts: {
+ trace: {
+ op: 'navigation',
+ origin: 'auto.navigation.ember',
+ },
+ },
+ transaction: 'route:tracing',
+ transaction_info: {
+ source: 'route',
+ },
+ });
+});
+
+test('captures correct spans for navigation', async ({ page }) => {
+ const pageloadTxnPromise = waitForTransaction('ember-strict-resolver', async transactionEvent => {
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'pageload';
+ });
+
+ const navigationTxnPromise = waitForTransaction('ember-strict-resolver', async transactionEvent => {
+ return !!transactionEvent.transaction && transactionEvent.contexts?.trace?.op === 'navigation';
+ });
+
+ await page.goto(`/tracing`);
+ await pageloadTxnPromise;
+
+ const [_, navigationTxn] = await Promise.all([
+ page.getByText('Transition to slow loading route').click(),
+ navigationTxnPromise,
+ ]);
+
+ const traceId = navigationTxn.contexts?.trace?.trace_id;
+ const spanId = navigationTxn.contexts?.trace?.span_id;
+
+ expect(traceId).toBeDefined();
+ expect(spanId).toBeDefined();
+
+ const spans = navigationTxn.spans || [];
+
+ expect(navigationTxn).toMatchObject({
+ contexts: {
+ trace: {
+ op: 'navigation',
+ origin: 'auto.navigation.ember',
+ },
+ },
+ transaction: 'route:slow-loading-route.index',
+ transaction_info: {
+ source: 'route',
+ },
+ });
+
+ const transitionSpans = spans.filter(span => span.op === 'ui.ember.transition');
+ const beforeModelSpans = spans.filter(span => span.op === 'ui.ember.route.before_model');
+ const modelSpans = spans.filter(span => span.op === 'ui.ember.route.model');
+ const afterModelSpans = spans.filter(span => span.op === 'ui.ember.route.after_model');
+ const renderSpans = spans.filter(span => span.op === 'ui.ember.runloop.render');
+
+ expect(transitionSpans).toHaveLength(1);
+
+ // We have two spans each there - one for `slow-loading-route` and one for `slow-load-route.index`
+ expect(beforeModelSpans).toHaveLength(2);
+ expect(modelSpans).toHaveLength(2);
+ expect(afterModelSpans).toHaveLength(2);
+
+ // There may be many render spans...
+ expect(renderSpans.length).toBeGreaterThan(1);
+
+ expect(transitionSpans[0]).toEqual({
+ data: {
+ 'sentry.op': 'ui.ember.transition',
+ 'sentry.origin': 'auto.ui.ember',
+ },
+ description: 'route:tracing -> route:slow-loading-route.index',
+ op: 'ui.ember.transition',
+ origin: 'auto.ui.ember',
+ parent_span_id: spanId,
+ span_id: expect.stringMatching(/[a-f0-9]{16}/),
+ start_timestamp: expect.any(Number),
+ timestamp: expect.any(Number),
+ trace_id: traceId,
+ });
+
+ expect(beforeModelSpans).toEqual([
+ {
+ data: {
+ 'sentry.op': 'ui.ember.route.before_model',
+ 'sentry.origin': 'auto.ui.ember',
+ 'sentry.source': 'custom',
+ },
+ description: 'slow-loading-route',
+ op: 'ui.ember.route.before_model',
+ origin: 'auto.ui.ember',
+ parent_span_id: spanId,
+ span_id: expect.stringMatching(/[a-f0-9]{16}/),
+ start_timestamp: expect.any(Number),
+ timestamp: expect.any(Number),
+ trace_id: traceId,
+ },
+ {
+ data: {
+ 'sentry.op': 'ui.ember.route.before_model',
+ 'sentry.origin': 'auto.ui.ember',
+ 'sentry.source': 'custom',
+ },
+ description: 'slow-loading-route.index',
+ op: 'ui.ember.route.before_model',
+ origin: 'auto.ui.ember',
+ parent_span_id: spanId,
+ span_id: expect.stringMatching(/[a-f0-9]{16}/),
+ start_timestamp: expect.any(Number),
+ timestamp: expect.any(Number),
+ trace_id: traceId,
+ },
+ ]);
+
+ expect(modelSpans).toEqual([
+ {
+ data: {
+ 'sentry.op': 'ui.ember.route.model',
+ 'sentry.origin': 'auto.ui.ember',
+ 'sentry.source': 'custom',
+ },
+ description: 'slow-loading-route',
+ op: 'ui.ember.route.model',
+ origin: 'auto.ui.ember',
+ parent_span_id: spanId,
+ span_id: expect.stringMatching(/[a-f0-9]{16}/),
+ start_timestamp: expect.any(Number),
+ timestamp: expect.any(Number),
+ trace_id: traceId,
+ },
+ {
+ data: {
+ 'sentry.op': 'ui.ember.route.model',
+ 'sentry.origin': 'auto.ui.ember',
+ 'sentry.source': 'custom',
+ },
+ description: 'slow-loading-route.index',
+ op: 'ui.ember.route.model',
+ origin: 'auto.ui.ember',
+ parent_span_id: spanId,
+ span_id: expect.stringMatching(/[a-f0-9]{16}/),
+ start_timestamp: expect.any(Number),
+ timestamp: expect.any(Number),
+ trace_id: traceId,
+ },
+ ]);
+
+ expect(afterModelSpans).toEqual([
+ {
+ data: {
+ 'sentry.op': 'ui.ember.route.after_model',
+ 'sentry.origin': 'auto.ui.ember',
+ 'sentry.source': 'custom',
+ },
+ description: 'slow-loading-route',
+ op: 'ui.ember.route.after_model',
+ origin: 'auto.ui.ember',
+ parent_span_id: spanId,
+ span_id: expect.stringMatching(/[a-f0-9]{16}/),
+ start_timestamp: expect.any(Number),
+ timestamp: expect.any(Number),
+ trace_id: traceId,
+ },
+ {
+ data: {
+ 'sentry.op': 'ui.ember.route.after_model',
+ 'sentry.origin': 'auto.ui.ember',
+ 'sentry.source': 'custom',
+ },
+ description: 'slow-loading-route.index',
+ op: 'ui.ember.route.after_model',
+ origin: 'auto.ui.ember',
+ parent_span_id: spanId,
+ span_id: expect.stringMatching(/[a-f0-9]{16}/),
+ start_timestamp: expect.any(Number),
+ timestamp: expect.any(Number),
+ trace_id: traceId,
+ },
+ ]);
+
+ expect(renderSpans).toContainEqual({
+ data: {
+ 'sentry.op': 'ui.ember.runloop.render',
+ 'sentry.origin': 'auto.ui.ember',
+ },
+ description: 'runloop',
+ op: 'ui.ember.runloop.render',
+ origin: 'auto.ui.ember',
+ parent_span_id: spanId,
+ span_id: expect.stringMatching(/[a-f0-9]{16}/),
+ start_timestamp: expect.any(Number),
+ timestamp: expect.any(Number),
+ trace_id: traceId,
+ });
+});
+
+test('handles slow loading route', async ({ page }) => {
+ const transactionPromise = waitForTransaction('ember-strict-resolver', transactionEvent => {
+ return transactionEvent.transaction === 'route:slow-loading-route.index';
+ });
+ await page.goto('/tracing');
+ await page.locator('[data-test-button="Transition to slow loading route"]').click();
+
+ const transaction = await transactionPromise;
+ expect(transaction).toMatchObject({
+ transaction: 'route:slow-loading-route.index',
+ contexts: {
+ trace: {
+ data: {
+ fromRoute: 'tracing',
+ toRoute: 'slow-loading-route.index',
+ },
+ },
+ },
+ });
+ expect(transaction.spans).toContainEqual(
+ expect.objectContaining({
+ op: 'ui.ember.transition',
+ description: 'route:tracing -> route:slow-loading-route.index',
+ }),
+ );
+ expect(transaction.spans).toContainEqual(
+ expect.objectContaining({
+ op: 'ui.ember.route.before_model',
+ description: 'slow-loading-route',
+ }),
+ );
+ expect(transaction.spans).toContainEqual(
+ expect.objectContaining({
+ op: 'ui.ember.route.before_model',
+ description: 'slow-loading-route.index',
+ }),
+ );
+ expect(transaction.spans).toContainEqual(
+ expect.objectContaining({
+ op: 'ui.ember.route.model',
+ description: 'slow-loading-route.index',
+ }),
+ );
+ expect(transaction.spans).toContainEqual(
+ expect.objectContaining({
+ op: 'ui.ember.route.model',
+ description: 'slow-loading-route',
+ }),
+ );
+ expect(transaction.spans).toContainEqual(
+ expect.objectContaining({
+ op: 'ui.ember.route.after_model',
+ description: 'slow-loading-route',
+ }),
+ );
+ expect(transaction.spans).toContainEqual(
+ expect.objectContaining({
+ op: 'ui.ember.route.after_model',
+ description: 'slow-loading-route.index',
+ }),
+ );
+ expect(transaction.spans).toContainEqual(
+ expect.objectContaining({
+ op: 'ui.ember.route.setup_controller',
+ description: 'slow-loading-route',
+ }),
+ );
+ expect(transaction.spans).toContainEqual(
+ expect.objectContaining({
+ op: 'ui.ember.route.setup_controller',
+ description: 'slow-loading-route.index',
+ }),
+ );
+});
+
+test('handles page with loading state', async ({ page }) => {
+ const transactionPromise = waitForTransaction('ember-strict-resolver', transactionEvent => {
+ return transactionEvent.transaction === 'route:with-loading.index';
+ });
+ await page.goto('/with-loading');
+
+ const transaction = await transactionPromise;
+ expect(transaction).toMatchObject({
+ transaction: 'route:with-loading.index',
+ contexts: {
+ trace: {
+ data: {
+ toRoute: 'with-loading.index',
+ },
+ },
+ },
+ });
+});
+
+test('handles page with error state', async ({ page }) => {
+ // The route's model hook intentionally throws, so we need to handle errors
+ const transactionPromise = waitForTransaction('ember-strict-resolver', transactionEvent => {
+ return transactionEvent.transaction === 'route:with-error.index';
+ });
+ await page.goto('/with-error');
+
+ const transaction = await transactionPromise;
+ expect(transaction).toMatchObject({
+ transaction: 'route:with-error.index',
+ contexts: {
+ trace: {
+ data: {
+ toRoute: 'with-error.index',
+ },
+ },
+ },
+ });
+});
diff --git a/dev-packages/e2e-tests/test-applications/ember-strict-resolver/tsconfig.json b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/tsconfig.json
new file mode 100644
index 000000000000..9e63e049aabf
--- /dev/null
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/tsconfig.json
@@ -0,0 +1,9 @@
+{
+ "extends": "@ember/app-tsconfig",
+ "include": ["tests/**/*", "src/**/*"],
+ "compilerOptions": {
+ "rootDir": ".",
+ "lib": ["DOM", "ES2020"],
+ "types": ["ember-source/types", "vite/client", "@embroider/core/virtual", "@glint/ember-tsc/types"]
+ }
+}
diff --git a/dev-packages/e2e-tests/test-applications/ember-strict-resolver/vite.config.mjs b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/vite.config.mjs
new file mode 100644
index 000000000000..ea181c282ed8
--- /dev/null
+++ b/dev-packages/e2e-tests/test-applications/ember-strict-resolver/vite.config.mjs
@@ -0,0 +1,13 @@
+import { defineConfig } from 'vite';
+import { extensions, ember } from '@embroider/vite';
+import { babel } from '@rollup/plugin-babel';
+
+export default defineConfig({
+ plugins: [
+ ember(),
+ babel({
+ babelHelpers: 'inline',
+ extensions,
+ }),
+ ],
+});
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/.ember-cli b/dev-packages/e2e-tests/test-applications/ember-vite/.ember-cli
index 05702eb74223..85a62bfab89d 100644
--- a/dev-packages/e2e-tests/test-applications/ember-vite/.ember-cli
+++ b/dev-packages/e2e-tests/test-applications/ember-vite/.ember-cli
@@ -1,9 +1,3 @@
{
- /**
- Ember CLI sends analytics information by default. The data is completely
- anonymous, but there are times when you might want to disable this behavior.
-
- Setting `disableAnalytics` to true will prevent any data from being sent.
- */
- "disableAnalytics": true,
+ "disableAnalytics": true
}
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/.template-lintrc.mjs b/dev-packages/e2e-tests/test-applications/ember-vite/.template-lintrc.mjs
index 8c6dc5676219..8b6625cd9a94 100644
--- a/dev-packages/e2e-tests/test-applications/ember-vite/.template-lintrc.mjs
+++ b/dev-packages/e2e-tests/test-applications/ember-vite/.template-lintrc.mjs
@@ -1,4 +1,4 @@
export default {
- extends: "recommended",
+ extends: 'recommended',
checkHbsTemplateLiterals: false,
};
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/app/config/environment.ts b/dev-packages/e2e-tests/test-applications/ember-vite/app/config/environment.ts
index e7a2322de452..a6c4b45cd292 100644
--- a/dev-packages/e2e-tests/test-applications/ember-vite/app/config/environment.ts
+++ b/dev-packages/e2e-tests/test-applications/ember-vite/app/config/environment.ts
@@ -4,8 +4,14 @@ import { assert } from '@ember/debug';
const config = loadConfigFromMeta('ember-vite') as unknown;
assert('config is not an object', typeof config === 'object' && config !== null);
-assert('modulePrefix was not detected on your config', 'modulePrefix' in config && typeof config.modulePrefix === 'string');
-assert('locationType was not detected on your config', 'locationType' in config && typeof config.locationType === 'string');
+assert(
+ 'modulePrefix was not detected on your config',
+ 'modulePrefix' in config && typeof config.modulePrefix === 'string',
+);
+assert(
+ 'locationType was not detected on your config',
+ 'locationType' in config && typeof config.locationType === 'string',
+);
assert('rootURL was not detected on your config', 'rootURL' in config && typeof config.rootURL === 'string');
assert('APP was not detected on your config', 'APP' in config && typeof config.APP === 'object');
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/app/instance-initializers/sentry-performance.ts b/dev-packages/e2e-tests/test-applications/ember-vite/app/instance-initializers/sentry-performance.ts
index 1d56dcc2dd83..b7c3f70b1e30 100644
--- a/dev-packages/e2e-tests/test-applications/ember-vite/app/instance-initializers/sentry-performance.ts
+++ b/dev-packages/e2e-tests/test-applications/ember-vite/app/instance-initializers/sentry-performance.ts
@@ -1,12 +1,11 @@
import type ApplicationInstance from '@ember/application/instance';
-import { addIntegration, browserTracingIntegration } from '@sentry/ember';
+import { instrumentAppInstancePerformance } from '@sentry/ember';
export function initialize(appInstance: ApplicationInstance): void {
- addIntegration(browserTracingIntegration({
- appInstance,
+ instrumentAppInstancePerformance(appInstance, {
minimumRunloopQueueDuration: 0,
minimumComponentRenderDuration: 0,
- }));
+ });
}
export default {
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/babel.config.mjs b/dev-packages/e2e-tests/test-applications/ember-vite/babel.config.mjs
index 5a9924d96a74..5f7a480440db 100644
--- a/dev-packages/e2e-tests/test-applications/ember-vite/babel.config.mjs
+++ b/dev-packages/e2e-tests/test-applications/ember-vite/babel.config.mjs
@@ -1,14 +1,11 @@
-import { dirname } from "node:path";
-import { fileURLToPath } from "node:url";
-import {
- babelCompatSupport,
- templateCompatSupport,
-} from "@embroider/compat/babel";
+import { dirname } from 'node:path';
+import { fileURLToPath } from 'node:url';
+import { babelCompatSupport, templateCompatSupport } from '@embroider/compat/babel';
export default {
plugins: [
[
- "@babel/plugin-transform-typescript",
+ '@babel/plugin-transform-typescript',
{
allExtensions: true,
onlyRemoveTypeImports: true,
@@ -16,28 +13,26 @@ export default {
},
],
[
- "babel-plugin-ember-template-compilation",
+ 'babel-plugin-ember-template-compilation',
{
enableLegacyModules: [
- "ember-cli-htmlbars",
- "ember-cli-htmlbars-inline-precompile",
- "htmlbars-inline-precompile",
+ 'ember-cli-htmlbars',
+ 'ember-cli-htmlbars-inline-precompile',
+ 'htmlbars-inline-precompile',
],
transforms: [...templateCompatSupport()],
},
],
[
- "module:decorator-transforms",
+ 'module:decorator-transforms',
{
runtime: {
- import: fileURLToPath(
- import.meta.resolve("decorator-transforms/runtime-esm"),
- ),
+ import: fileURLToPath(import.meta.resolve('decorator-transforms/runtime-esm')),
},
},
],
[
- "@babel/plugin-transform-runtime",
+ '@babel/plugin-transform-runtime',
{
absoluteRuntime: dirname(fileURLToPath(import.meta.url)),
useESModules: true,
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/config/environment.js b/dev-packages/e2e-tests/test-applications/ember-vite/config/environment.js
index fc3e02969719..769b0dfcb259 100644
--- a/dev-packages/e2e-tests/test-applications/ember-vite/config/environment.js
+++ b/dev-packages/e2e-tests/test-applications/ember-vite/config/environment.js
@@ -1,11 +1,11 @@
-"use strict";
+'use strict';
module.exports = function (environment) {
const ENV = {
- modulePrefix: "ember-vite",
+ modulePrefix: 'ember-vite',
environment,
- rootURL: "/",
- locationType: "history",
+ rootURL: '/',
+ locationType: 'history',
EmberENV: {
EXTEND_PROTOTYPES: false,
FEATURES: {},
@@ -15,18 +15,18 @@ module.exports = function (environment) {
ENV.sentryDsn = process.env.E2E_TEST_DSN;
- if (environment === "development") {
+ if (environment === 'development') {
}
- if (environment === "test") {
- ENV.locationType = "none";
+ if (environment === 'test') {
+ ENV.locationType = 'none';
ENV.APP.LOG_ACTIVE_GENERATION = false;
ENV.APP.LOG_VIEW_LOOKUPS = false;
- ENV.APP.rootElement = "#ember-testing";
+ ENV.APP.rootElement = '#ember-testing';
ENV.APP.autoboot = false;
}
- if (environment === "production") {
+ if (environment === 'production') {
}
return ENV;
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/ember-cli-build.mjs b/dev-packages/e2e-tests/test-applications/ember-vite/ember-cli-build.mjs
index 60915b249ba4..3047eaa76724 100644
--- a/dev-packages/e2e-tests/test-applications/ember-vite/ember-cli-build.mjs
+++ b/dev-packages/e2e-tests/test-applications/ember-vite/ember-cli-build.mjs
@@ -1,8 +1,8 @@
-import EmberApp from "ember-cli/lib/broccoli/ember-app.js";
-import { compatBuild } from "@embroider/compat";
+import EmberApp from 'ember-cli/lib/broccoli/ember-app.js';
+import { compatBuild } from '@embroider/compat';
export default async function (defaults) {
- const { buildOnce } = await import("@embroider/vite");
+ const { buildOnce } = await import('@embroider/vite');
const app = new EmberApp(defaults, {
tests: false,
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/index.html b/dev-packages/e2e-tests/test-applications/ember-vite/index.html
index 071f6142f6ca..c47ee3dc7a4c 100644
--- a/dev-packages/e2e-tests/test-applications/ember-vite/index.html
+++ b/dev-packages/e2e-tests/test-applications/ember-vite/index.html
@@ -18,8 +18,8 @@
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/package.json b/dev-packages/e2e-tests/test-applications/ember-vite/package.json
index 66ef0e81439c..a1dff896e46b 100644
--- a/dev-packages/e2e-tests/test-applications/ember-vite/package.json
+++ b/dev-packages/e2e-tests/test-applications/ember-vite/package.json
@@ -10,10 +10,14 @@
"doc": "doc",
"test": "tests"
},
+ "exports": {
+ "./tests/*": "./tests/*",
+ "./*": "./app/*"
+ },
"scripts": {
- "proxy": "ts-node-script start-event-proxy.ts",
+ "proxy": "node start-event-proxy.mjs",
"build": "vite build",
- "start": "ember serve --path dist/ --port 4020",
+ "start": "vite preview --port 3030",
"test": "playwright test",
"test:build": "pnpm install && pnpm build",
"test:assert": "playwright test",
@@ -54,9 +58,8 @@
"ember-resolver": "^13.2.0",
"ember-source": "~6.12.0",
"testem": "^3.20.0",
- "ts-node": "10.9.1",
"typescript": "~5.4.5",
- "vite": "^8.0.9"
+ "vite": "^7.0.0"
},
"engines": {
"node": ">=18"
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/playwright.config.ts b/dev-packages/e2e-tests/test-applications/ember-vite/playwright.config.ts
index 734cac1d0e24..fa015b64f79b 100644
--- a/dev-packages/e2e-tests/test-applications/ember-vite/playwright.config.ts
+++ b/dev-packages/e2e-tests/test-applications/ember-vite/playwright.config.ts
@@ -1,44 +1,10 @@
-import type { PlaywrightTestConfig } from '@playwright/test';
-import { devices } from '@playwright/test';
-
-// Fix urls not resolving to localhost on Node v17+
-import { setDefaultResultOrder } from 'dns';
-setDefaultResultOrder('ipv4first');
-
-const emberPort = 4020;
-const eventProxyPort = 3031;
-
-const config: PlaywrightTestConfig = {
- testDir: './tests',
- timeout: 30_000,
- expect: {
- timeout: 10000,
- },
- fullyParallel: false,
- workers: 1,
- forbidOnly: !!process.env.CI,
- retries: 0,
- reporter: process.env.CI ? [['list'], ['junit', { outputFile: 'results.junit.xml' }]] : 'list',
- use: {
- baseURL: `http://localhost:${emberPort}`,
- trace: 'on-first-retry',
- },
- projects: [
- {
- name: 'chromium',
- use: { ...devices['Desktop Chrome'] },
- },
- ],
- webServer: [
- {
- command: 'pnpm ts-node-script start-event-proxy.ts',
- port: eventProxyPort,
- },
- {
- command: `pnpm start`,
- port: emberPort,
- },
- ],
-};
+import { getPlaywrightConfig } from '@sentry-internal/test-utils';
+
+const config = getPlaywrightConfig({
+ startCommand: 'pnpm start',
+ eventProxyFile: 'start-event-proxy.mjs',
+ eventProxyPort: 3031,
+ port: 3030,
+});
export default config;
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/start-event-proxy.ts b/dev-packages/e2e-tests/test-applications/ember-vite/start-event-proxy.mjs
similarity index 100%
rename from dev-packages/e2e-tests/test-applications/ember-vite/start-event-proxy.ts
rename to dev-packages/e2e-tests/test-applications/ember-vite/start-event-proxy.mjs
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/tsconfig.json b/dev-packages/e2e-tests/test-applications/ember-vite/tsconfig.json
index 1fede8b160f8..62ca153b20cf 100644
--- a/dev-packages/e2e-tests/test-applications/ember-vite/tsconfig.json
+++ b/dev-packages/e2e-tests/test-applications/ember-vite/tsconfig.json
@@ -8,11 +8,6 @@
"ember-vite/*": ["./app/*"],
"*": ["./types/*"]
},
- "types": [
- "ember-source/types",
- "@embroider/core/virtual",
- "vite/client",
- "@glint/ember-tsc/types"
- ]
+ "types": ["ember-source/types", "@embroider/core/virtual", "vite/client", "@glint/ember-tsc/types"]
}
}
diff --git a/dev-packages/e2e-tests/test-applications/ember-vite/vite.config.mjs b/dev-packages/e2e-tests/test-applications/ember-vite/vite.config.mjs
index 8408c6ed1f85..abdbb34158c8 100644
--- a/dev-packages/e2e-tests/test-applications/ember-vite/vite.config.mjs
+++ b/dev-packages/e2e-tests/test-applications/ember-vite/vite.config.mjs
@@ -1,13 +1,13 @@
-import { defineConfig } from "vite";
-import { extensions, classicEmberSupport, ember } from "@embroider/vite";
-import { babel } from "@rollup/plugin-babel";
+import { defineConfig } from 'vite';
+import { extensions, classicEmberSupport, ember } from '@embroider/vite';
+import { babel } from '@rollup/plugin-babel';
export default defineConfig({
plugins: [
classicEmberSupport(),
ember(),
babel({
- babelHelpers: "runtime",
+ babelHelpers: 'runtime',
extensions,
}),
],
diff --git a/packages/ember/.editorconfig b/packages/ember/.editorconfig
deleted file mode 100644
index c35a002406b9..000000000000
--- a/packages/ember/.editorconfig
+++ /dev/null
@@ -1,19 +0,0 @@
-# EditorConfig helps developers define and maintain consistent
-# coding styles between different editors and IDEs
-# editorconfig.org
-
-root = true
-
-[*]
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
-indent_style = space
-indent_size = 2
-
-[*.hbs]
-insert_final_newline = false
-
-[*.{diff,md}]
-trim_trailing_whitespace = false
diff --git a/packages/ember/.oxlintrc.json b/packages/ember/.oxlintrc.json
index 9c0c3060af0f..1f14492e9cbd 100644
--- a/packages/ember/.oxlintrc.json
+++ b/packages/ember/.oxlintrc.json
@@ -1,18 +1,15 @@
{
"$schema": "../../node_modules/oxlint/configuration_schema.json",
"extends": ["../../.oxlintrc.base.json"],
+ "env": {
+ "browser": true
+ },
"overrides": [
{
- "files": ["vendor/**/*.js"],
- "env": {
- "browser": true,
- "node": false
- }
- },
- {
- "files": ["{addon,app,tests}/**/*.{js,ts,d.ts}"],
+ "files": ["src/**/*.{js,ts,d.ts}"],
"rules": {
- "import/no-unresolved": "off"
+ "import/no-unresolved": "off",
+ "no-restricted-globals": "off"
}
}
]
diff --git a/packages/ember/.prettierignore b/packages/ember/.prettierignore
deleted file mode 100644
index b5f539be6166..000000000000
--- a/packages/ember/.prettierignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# unconventional js
-/blueprints/*/files/
-
-# compiled output
-/dist/
-/dist-*/
-/declarations/
-
-# misc
-/coverage/
-pnpm-lock.yaml
-config/ember-cli-update.json
-*.yaml
-*.yml
-*.md
-*.html
diff --git a/packages/ember/.prettierrc.mjs b/packages/ember/.prettierrc.mjs
deleted file mode 100644
index 9cc6b3dbcfd3..000000000000
--- a/packages/ember/.prettierrc.mjs
+++ /dev/null
@@ -1,12 +0,0 @@
-export default {
- plugins: ['prettier-plugin-ember-template-tag'],
- overrides: [
- {
- files: '*.{js,gjs,ts,gts,mjs,mts,cjs,cts}',
- options: {
- singleQuote: true,
- templateSingleQuote: false,
- },
- },
- ],
-};
diff --git a/packages/ember/.template-lintrc.mjs b/packages/ember/.template-lintrc.mjs
deleted file mode 100644
index 8b6625cd9a94..000000000000
--- a/packages/ember/.template-lintrc.mjs
+++ /dev/null
@@ -1,4 +0,0 @@
-export default {
- extends: 'recommended',
- checkHbsTemplateLiterals: false,
-};
diff --git a/packages/ember/README.md b/packages/ember/README.md
index 4d6591650351..9c43e7ba366d 100644
--- a/packages/ember/README.md
+++ b/packages/ember/README.md
@@ -62,10 +62,10 @@ For automatic performance instrumentation (page loads, navigation, runloop, comp
```typescript
// app/instance-initializers/sentry-performance.ts
import type ApplicationInstance from '@ember/application/instance';
-import { addIntegration, browserTracingIntegration } from '@sentry/ember';
+import { instrumentAppInstancePerformance } from '@sentry/ember';
export function initialize(appInstance: ApplicationInstance): void {
- addIntegration(browserTracingIntegration({ appInstance }));
+ instrumentAppInstancePerformance(appInstance, optionalOptions);
}
export default {
@@ -75,17 +75,17 @@ export default {
### Performance Options
-| Option | Type | Default | Description |
-|--------|------|---------|-------------|
-| `appInstance` | `ApplicationInstance` | *required* | The Ember application instance |
-| `disableRunloopPerformance` | `boolean` | `false` | Disable runloop queue tracking |
-| `disableInstrumentComponents` | `boolean` | `false` | Disable component render tracking |
-| `enableComponentDefinitions` | `boolean` | `false` | Enable component definition tracking |
-| `minimumRunloopQueueDuration` | `number` | `5` | Minimum duration (ms) for runloop spans |
-| `minimumComponentRenderDuration` | `number` | `2` | Minimum duration (ms) for component spans |
-| `instrumentPageLoad` | `boolean` | `true` | Instrument page load spans |
-| `instrumentNavigation` | `boolean` | `true` | Instrument navigation spans |
-| `idleTimeout` | `number` | `5000` | Idle timeout (ms) for tracing |
+| Option | Type | Default | Description |
+| -------------------------------- | --------------------- | ---------- | ----------------------------------------- |
+| `appInstance` | `ApplicationInstance` | _required_ | The Ember application instance |
+| `disableRunloopPerformance` | `boolean` | `false` | Disable runloop queue tracking |
+| `disableInstrumentComponents` | `boolean` | `false` | Disable component render tracking |
+| `enableComponentDefinitions` | `boolean` | `false` | Enable component definition tracking |
+| `minimumRunloopQueueDuration` | `number` | `5` | Minimum duration (ms) for runloop spans |
+| `minimumComponentRenderDuration` | `number` | `2` | Minimum duration (ms) for component spans |
+| `instrumentPageLoad` | `boolean` | `true` | Instrument page load spans |
+| `instrumentNavigation` | `boolean` | `true` | Instrument navigation spans |
+| `idleTimeout` | `number` | `5000` | Idle timeout (ms) for tracing |
You can also use the convenience function `setupPerformance`:
diff --git a/packages/ember/UPGRADE.md b/packages/ember/UPGRADE.md
index 7f5ec010dc27..14099538a581 100644
--- a/packages/ember/UPGRADE.md
+++ b/packages/ember/UPGRADE.md
@@ -6,11 +6,11 @@ This guide covers migrating from the v1 Ember addon format to the v2 addon forma
The v2 addon is a modern [Ember v2 addon](https://rfcs.emberjs.com/id/0507-embroider-v2-package-format/) that works with Embroider and Vite. Key differences:
-| Feature | v1 Addon | v2 Addon |
-|---------|----------|----------|
-| Configuration | `config/environment.js` | Direct `Sentry.init()` call |
+| Feature | v1 Addon | v2 Addon |
+| --------------------------- | --------------------------- | ------------------------------------------------------------ |
+| Configuration | `config/environment.js` | Direct `Sentry.init()` call |
| Performance instrumentation | Auto-registered initializer | Manual instance-initializer with `browserTracingIntegration` |
-| Build compatibility | Classic builds only | Embroider & Vite compatible |
+| Build compatibility | Classic builds only | Embroider & Vite compatible |
## Step 1: Update Configuration
@@ -73,10 +73,10 @@ In v1, performance instrumentation was automatic. In v2, create an instance-init
```typescript
import type ApplicationInstance from '@ember/application/instance';
-import { addIntegration, browserTracingIntegration } from '@sentry/ember';
+import { instrumentAppInstancePerformance } from '@sentry/ember';
export function initialize(appInstance: ApplicationInstance): void {
- addIntegration(browserTracingIntegration({ appInstance }));
+ instrumentAppInstancePerformance(appInstance);
}
export default {
@@ -88,12 +88,10 @@ export default {
```typescript
import type ApplicationInstance from '@ember/application/instance';
-import { addIntegration, browserTracingIntegration } from '@sentry/ember';
+import { instrumentAppInstancePerformance } from '@sentry/ember';
export function initialize(appInstance: ApplicationInstance): void {
- addIntegration(browserTracingIntegration({
- appInstance,
-
+ instrumentAppInstancePerformance(appInstance, {
// Disable runloop queue tracking
disableRunloopPerformance: false,
@@ -115,7 +113,7 @@ export function initialize(appInstance: ApplicationInstance): void {
// Idle timeout (ms)
idleTimeout: 5000,
- }));
+ });
}
export default {
@@ -149,7 +147,7 @@ Most imports remain the same, but check for these changes:
```typescript
// v2 - new import for browserTracingIntegration
-import { addIntegration, browserTracingIntegration } from '@sentry/ember';
+import { addIntegration, browserTracingIntegration, instrumentAppInstancePerformance } from '@sentry/ember';
// v2 - same for instrumentRoutePerformance
import { instrumentRoutePerformance } from '@sentry/ember';
@@ -197,12 +195,14 @@ config/
```
**app/app.js:**
+
```javascript
import Application from '@ember/application';
// Sentry was auto-initialized from config
```
**config/environment.js:**
+
```javascript
module.exports = function (environment) {
return {
@@ -230,6 +230,7 @@ config/
```
**app/app.ts:**
+
```typescript
import Application from '@ember/application';
import Resolver from 'ember-resolver';
@@ -252,12 +253,13 @@ loadInitializers(App, config.modulePrefix);
```
**app/instance-initializers/sentry-performance.ts:**
+
```typescript
import type ApplicationInstance from '@ember/application/instance';
-import { addIntegration, browserTracingIntegration } from '@sentry/ember';
+import { instrumentAppInstancePerformance } from '@sentry/ember';
export function initialize(appInstance: ApplicationInstance): void {
- addIntegration(browserTracingIntegration({ appInstance }));
+ instrumentAppInstancePerformance(appInstance);
}
export default { initialize };
@@ -268,6 +270,7 @@ export default { initialize };
### "Cannot find module '@sentry/ember/performance'"
Make sure you're importing from the correct path:
+
```typescript
import { browserTracingIntegration } from '@sentry/ember';
```
diff --git a/packages/ember/addon/utils/performance.ts b/packages/ember/addon/utils/performance.ts
deleted file mode 100644
index 0cf27396ba81..000000000000
--- a/packages/ember/addon/utils/performance.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-import type ApplicationInstance from '@ember/application/instance';
-import { _backburner, run } from '@ember/runloop';
-import { getOwnConfig, importSync, isTesting, macroCondition } from '@embroider/macros';
-import { getClient } from '@sentry/browser';
-import { addIntegration, GLOBAL_OBJ } from '@sentry/core';
-import type { ExtendedBackburner } from '@sentry/ember/runloop';
-import type { EmberSentryConfig, GlobalConfig, OwnConfig } from '../types';
-import type { browserTracingIntegration as browserTracingIntegrationType } from './browserTracingIntegration';
-
-export function getSentryConfig(): EmberSentryConfig {
- const _global = GLOBAL_OBJ as typeof GLOBAL_OBJ & GlobalConfig;
- _global.__sentryEmberConfig = _global.__sentryEmberConfig ?? {};
- const environmentConfig = getOwnConfig().sentryConfig;
- if (!environmentConfig.sentry) {
- environmentConfig.sentry = {
- browserTracingOptions: {},
- };
- }
- Object.assign(environmentConfig.sentry, _global.__sentryEmberConfig);
- return environmentConfig;
-}
-
-export function getBackburner(): Pick {
- if (_backburner) {
- return _backburner as unknown as Pick;
- }
-
- if ((run as unknown as { backburner?: Pick }).backburner) {
- return (run as unknown as { backburner: Pick }).backburner;
- }
-
- return {
- on() {
- // noop
- },
- off() {
- // noop
- },
- };
-}
-
-/**
- * Utility to register the browser tracing integration and instrument the app instance for performance.
- */
-export function instrumentForPerformance(appInstance: ApplicationInstance): void {
- const config = getSentryConfig();
- // Maintaining backwards compatibility with config.browserTracingOptions, but passing it with Sentry options is preferred.
- const browserTracingOptions = config.browserTracingOptions || config.sentry.browserTracingOptions || {};
-
- const { browserTracingIntegration } = importSync('./browserTracingIntegration') as {
- browserTracingIntegration: typeof browserTracingIntegrationType;
- };
-
- const idleTimeout = config.transitionTimeout || 5000;
-
- const emberSpecificConfig = {
- minimumRunloopQueueDuration: config.minimumRunloopQueueDuration,
- minimumComponentRenderDuration: config.minimumComponentRenderDuration,
- enableComponentDefinitions: config.enableComponentDefinitions,
- disableInitialLoadInstrumentation: config.disableInitialLoadInstrumentation,
- disableRunloopPerformance: config.disableRunloopPerformance,
- disableInstrumentComponents: config.disableInstrumentComponents,
- };
-
- const browserTracing = browserTracingIntegration({
- appInstance,
- idleTimeout,
- ...browserTracingOptions,
- ...emberSpecificConfig,
- });
-
- const client = getClient();
- const isAlreadyInitialized = macroCondition(isTesting()) ? client?.getIntegrationByName('BrowserTracing') : false;
- addIntegration(browserTracing);
-
- // Ensure this is re-run in tests even if the integration is already initialized
- if (isAlreadyInitialized && client) {
- browserTracing.afterAllSetup?.(client);
- }
-}
diff --git a/packages/ember/babel.config.cjs b/packages/ember/babel.config.cjs
index fe72f41b2660..60af86e9b87f 100644
--- a/packages/ember/babel.config.cjs
+++ b/packages/ember/babel.config.cjs
@@ -5,16 +5,8 @@
*/
const { buildMacros } = require('@embroider/macros/babel');
-const {
- babelCompatSupport,
- templateCompatSupport,
-} = require('@embroider/compat/babel');
-
const macros = buildMacros();
-// For scenario testing
-const isCompat = Boolean(process.env.ENABLE_COMPAT_BUILD);
-
module.exports = {
plugins: [
[
@@ -28,9 +20,7 @@ module.exports = {
[
'babel-plugin-ember-template-compilation',
{
- transforms: [
- ...(isCompat ? templateCompatSupport() : macros.templateMacros),
- ],
+ transforms: [...macros.templateMacros],
},
],
[
@@ -41,7 +31,7 @@ module.exports = {
},
},
],
- ...(isCompat ? babelCompatSupport() : macros.babelMacros),
+ ...macros.babelMacros,
],
generatorOpts: {
diff --git a/packages/ember/config/ember-cli-update.json b/packages/ember/config/ember-cli-update.json
index 655e292304fc..ef6bfd6d57a5 100644
--- a/packages/ember/config/ember-cli-update.json
+++ b/packages/ember/config/ember-cli-update.json
@@ -9,11 +9,7 @@
{
"name": "@ember/addon-blueprint",
"isBaseBlueprint": true,
- "options": [
- "--ci-provider=github",
- "--pnpm",
- "--typescript"
- ]
+ "options": ["--ci-provider=github", "--pnpm", "--typescript"]
}
]
}
diff --git a/packages/ember/demo-app/templates/replay.gts b/packages/ember/demo-app/templates/replay.gts
deleted file mode 100644
index e5929d6b1171..000000000000
--- a/packages/ember/demo-app/templates/replay.gts
+++ /dev/null
@@ -1,4 +0,0 @@
-
- Session Replay Test
- Session replay is running on this page.
-
diff --git a/packages/ember/eslint.config.mjs b/packages/ember/eslint.config.mjs
index d947a4d8a720..5ab002822104 100644
--- a/packages/ember/eslint.config.mjs
+++ b/packages/ember/eslint.config.mjs
@@ -33,14 +33,7 @@ const tsParserOptions = {
};
export default defineConfig([
- globalIgnores([
- 'dist/',
- 'dist-*/',
- 'declarations/',
- 'coverage/',
- '!**/.*',
- '.npm-deps/',
- ]),
+ globalIgnores(['dist/', 'dist-*/', 'declarations/', 'coverage/', '!**/.*', '.npm-deps/']),
js.configs.recommended,
prettier,
ember.configs.base,
diff --git a/packages/ember/index.html b/packages/ember/index.html
deleted file mode 100644
index 66366871301d..000000000000
--- a/packages/ember/index.html
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-
- Demo App
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/ember/package.json b/packages/ember/package.json
index 2dd848a8a663..26427e0c7cba 100644
--- a/packages/ember/package.json
+++ b/packages/ember/package.json
@@ -1,6 +1,6 @@
{
"name": "@sentry/ember",
- "version": "10.52.0",
+ "version": "10.53.1",
"description": "Official Sentry SDK for Ember.js",
"keywords": [
"ember-addon"
@@ -28,77 +28,38 @@
"scripts": {
"build": "rollup --config",
"build:dev": "yarn build",
- "build:tarball": "yarn build && npm pack",
+ "build:tarball": "npm pack",
"build:watch": "rollup --config --watch",
"circularDepCheck": "madge --circular src/index.ts",
"clean": "rimraf dist declarations *.tgz .turbo",
- "format": "prettier . --cache --write",
- "lint": "concurrently \"yarn:lint:*(!fix)\" --names \"lint:\" --prefixColors auto",
- "lint:fix": "concurrently \"yarn:lint:*:fix\" --names \"fix:\" --prefixColors auto && yarn format",
- "lint:format": "prettier . --cache --check",
- "lint:hbs": "ember-template-lint . --no-error-on-unmatched-pattern",
- "lint:hbs:fix": "ember-template-lint . --fix --no-error-on-unmatched-pattern",
- "lint:js": "eslint . --cache",
- "lint:js:fix": "eslint . --fix",
- "lint:types": "ember-tsc --noEmit",
- "lint:publish": "yarn build && publint run --level error --pack npm",
+ "lint:fix": "OXLINT_TSGOLINT_DANGEROUSLY_SUPPRESS_PROGRAM_DIAGNOSTICS=true oxlint . --fix --type-aware",
+ "lint": "OXLINT_TSGOLINT_DANGEROUSLY_SUPPRESS_PROGRAM_DIAGNOSTICS=true oxlint . --type-aware",
"prepack": "rollup --config",
- "start": "vite dev",
- "test": "vite build --mode=development --out-dir dist-tests && testem --file testem.cjs ci --port 0",
+ "test": "yarn test:unit",
+ "test:unit": "vitest run",
+ "test:unit:watch": "vitest --watch",
"yalc:publish": "yalc publish --push --sig"
},
"dependencies": {
"@embroider/addon-shim": "^1.10.2",
- "@sentry/browser": "10.52.0",
- "@sentry/core": "10.52.0",
+ "@sentry/browser": "10.53.1",
+ "@sentry/core": "10.53.1",
"decorator-transforms": "^2.3.2"
},
"devDependencies": {
"@babel/core": "^7.29.0",
"@babel/eslint-parser": "^7.28.6",
"@babel/plugin-transform-typescript": "^7.28.6",
- "@babel/runtime": "^7.29.2",
"@ember/app-tsconfig": "^2.0.0",
"@ember/library-tsconfig": "^2.0.0",
- "@ember/test-helpers": "^5.4.2",
- "@ember/test-waiters": "^4.1.1",
"@embroider/addon-dev": "^8.3.0",
"@embroider/compat": "^4.1.17",
"@embroider/core": "^4.4.7",
"@embroider/macros": "^1.20.2",
"@embroider/vite": "^1.7.2",
- "@eslint/js": "^9.39.4",
- "@glimmer/component": "^2.1.1",
"@glint/ember-tsc": "^1.5.0",
- "@glint/template": "^1.7.7",
- "@glint/tsserver-plugin": "^2.4.0",
"@rollup/plugin-babel": "^7.0.0",
- "@types/qunit": "^2.19.13",
- "@types/sinon": "^21.0.1",
- "babel-plugin-ember-template-compilation": "^4.0.0",
- "concurrently": "^9.2.1",
- "ember-page-title": "^9.0.3",
- "ember-qunit": "^9.0.4",
- "ember-source": "^6.12.0",
- "ember-strict-application-resolver": "^0.1.1",
- "ember-template-lint": "^7.9.3",
- "eslint": "^9.39.4",
- "eslint-config-prettier": "^10.1.8",
- "eslint-plugin-ember": "^13.2.1",
- "eslint-plugin-import": "^2.32.0",
- "eslint-plugin-n": "^18.0.1",
- "globals": "^17.6.0",
- "prettier": "^3.8.3",
- "prettier-plugin-ember-template-tag": "^2.1.6",
- "publint": "^0.3.20",
- "qunit": "^2.25.0",
- "qunit-dom": "^3.5.1",
- "rollup": "^4.60.3",
- "sinon": "^22.0.0",
- "testem": "^3.20.0",
- "typescript": "~5.9.3",
- "typescript-eslint": "^8.59.2",
- "vite": "^8.0.11"
+ "ember-source": "^6.12.0"
},
"engines": {
"node": ">=18"
@@ -116,5 +77,20 @@
"version": 2,
"type": "addon",
"main": "addon-main.cjs"
+ },
+ "nx": {
+ "targets": {
+ "build:transpile": {
+ "dependsOn": [
+ "^build:transpile",
+ "^build:types"
+ ],
+ "outputs": [
+ "{projectRoot}/dist",
+ "{projectRoot}/**/*.d.ts",
+ "{projectRoot}/declarations/*.d.ts.map"
+ ]
+ }
+ }
}
}
diff --git a/packages/ember/src/index.ts b/packages/ember/src/index.ts
index 6c63607cee38..d0a3012ff128 100644
--- a/packages/ember/src/index.ts
+++ b/packages/ember/src/index.ts
@@ -7,11 +7,7 @@
// Re-export everything from @sentry/browser
export * from '@sentry/browser';
-export { init } from './utils/sentry/init.ts';
-export { instrumentRoutePerformance } from './utils/sentry/instrument-route-performance.ts';
-export {
- _resetGlobalInstrumentation,
- browserTracingIntegration,
- setupPerformance,
-} from './utils/sentry/setup-performance.ts';
-export type { EmberBrowserTracingOptions } from './utils/sentry/setup-performance.ts';
+// Sentry-specific utilities
+export { init } from './init.ts';
+export { instrumentRoutePerformance } from './utils/instrumentRoutePerformance.ts';
+export { browserTracingIntegration, instrumentAppInstancePerformance } from './utils/browserTracingIntegration.ts';
diff --git a/packages/ember/src/utils/sentry/init.ts b/packages/ember/src/init.ts
similarity index 100%
rename from packages/ember/src/utils/sentry/init.ts
rename to packages/ember/src/init.ts
diff --git a/packages/ember/addon/utils/browserTracingIntegration.ts b/packages/ember/src/utils/browserTracingIntegration.ts
similarity index 65%
rename from packages/ember/addon/utils/browserTracingIntegration.ts
rename to packages/ember/src/utils/browserTracingIntegration.ts
index 67d04da01ce2..cc52009e5b0f 100644
--- a/packages/ember/addon/utils/browserTracingIntegration.ts
+++ b/packages/ember/src/utils/browserTracingIntegration.ts
@@ -1,17 +1,17 @@
import {
+ addIntegration,
browserTracingIntegration as originalBrowserTracingIntegration,
startBrowserTracingNavigationSpan,
startBrowserTracingPageLoadSpan,
} from '@sentry/browser';
-import { consoleSandbox, type Integration } from '@sentry/core';
+import type { Integration } from '@sentry/core';
import type ApplicationInstance from '@ember/application/instance';
-import { instrumentEmberAppInstanceForPerformance } from './instrumentEmberAppInstanceForPerformance';
-import { instrumentGlobalsForPerformance } from './instrumentEmberGlobals';
+import { instrumentEmberAppInstanceForPerformance } from './instrumentEmberAppInstanceForPerformance.ts';
+import { instrumentGlobalsForPerformance } from './instrumentEmberGlobals.ts';
import { isTesting, macroCondition } from '@embroider/macros';
type EmberBrowserTracingIntegrationOptions = Parameters[0] & {
- // TODO(v11): make this required
- appInstance?: ApplicationInstance;
+ appInstance: ApplicationInstance;
disableRunloopPerformance?: boolean;
minimumRunloopQueueDuration?: number;
disableInstrumentComponents?: boolean;
@@ -42,9 +42,9 @@ export function browserTracingIntegration(options: EmberBrowserTracingIntegratio
const globalsPerformanceConfig = {
disableRunloopPerformance: options.disableRunloopPerformance ?? false,
- minimumRunloopQueueDuration: options.minimumRunloopQueueDuration,
+ minimumRunloopQueueDuration: options.minimumRunloopQueueDuration ?? 0,
disableInstrumentComponents: options.disableInstrumentComponents ?? false,
- minimumComponentRenderDuration: options.minimumComponentRenderDuration,
+ minimumComponentRenderDuration: options.minimumComponentRenderDuration ?? 0,
enableComponentDefinitions: options.enableComponentDefinitions ?? false,
disableInitialLoadInstrumentation: options.disableInitialLoadInstrumentation ?? false,
};
@@ -54,34 +54,38 @@ export function browserTracingIntegration(options: EmberBrowserTracingIntegratio
afterAllSetup(client) {
integration.afterAllSetup(client);
- // Run this in the next tick to ensure the ember router etc. is properly initialized
+ instrumentEmberAppInstanceForPerformance(
+ client,
+ appInstance,
+ appInstancePerformanceConfig,
+ startBrowserTracingPageLoadSpan,
+ startBrowserTracingNavigationSpan,
+ );
- setTimeout(() => {
- if (appInstance) {
- instrumentEmberAppInstanceForPerformance(
- client,
- appInstance,
- appInstancePerformanceConfig,
- startBrowserTracingPageLoadSpan,
- startBrowserTracingNavigationSpan,
- );
- } else {
- consoleSandbox(() => {
- // eslint-disable-next-line no-console
- console.warn('Skipping router instrumentation because appInstance is not provided.');
- });
+ // We only want to run this once in tests!
+ if (macroCondition(isTesting())) {
+ if (_initialized) {
+ return;
}
+ }
- // We only want to run this once in tests!
- if (macroCondition(isTesting())) {
- if (_initialized) {
- return;
- }
- }
-
- instrumentGlobalsForPerformance(globalsPerformanceConfig);
- _initialized = true;
- });
+ instrumentGlobalsForPerformance(globalsPerformanceConfig);
+ _initialized = true;
},
};
}
+
+/**
+ * Utility to simplify adding the browser tracing integration to an app instance.
+ */
+export function instrumentAppInstancePerformance(
+ appInstance: ApplicationInstance,
+ options?: Partial[0]>,
+): void {
+ addIntegration(
+ browserTracingIntegration({
+ ...options,
+ appInstance,
+ }),
+ );
+}
diff --git a/packages/ember/src/utils/ember/router.ts b/packages/ember/src/utils/ember/router.ts
deleted file mode 100644
index 9c70437e4e12..000000000000
--- a/packages/ember/src/utils/ember/router.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-import type RouterService from '@ember/routing/router-service';
-import type Transition from '@ember/routing/transition';
-
-export interface EmberRouterMain {
- location: {
- formatURL?: (url: string) => string;
- getURL?: () => string;
- implementation?: string;
- rootURL: string;
- };
-}
-
-/**
- * @private
- *
- * Get the current URL from the Ember router location.
- */
-export function getLocationURL(location: EmberRouterMain['location']): string {
- if (!location?.getURL || !location?.formatURL) {
- return '';
- }
-
- const url = location.formatURL(location.getURL());
-
- // `implementation` is optional in Ember's predefined location types, so we also check if the URL starts with '#'.
- if (location.implementation === 'hash' || url.startsWith('#')) {
- return `${location.rootURL}${url}`;
- }
-
- return url;
-}
-
-/**
- * @private
- */
-export function getTransitionInformation(
- transition: Transition,
- router: RouterService,
-): {
- fromRoute: string | undefined;
- toRoute: string | undefined;
-} {
- const fromRoute = transition?.from?.name as string | undefined;
-
- const toRoute =
- (transition?.to?.name as string | undefined) ??
- router.currentRouteName ??
- undefined;
-
- return {
- fromRoute,
- toRoute,
- };
-}
-
-/**
- * @private
- */
-export function isTransitionIntermediate(transition: Transition): boolean {
- // We want to use ignore, as this may actually be defined on new versions
- const isIntermediate: boolean | undefined = transition.isIntermediate;
-
- if (typeof isIntermediate === 'boolean') {
- return isIntermediate;
- }
-
- // For versions without this, we look if the route is a `.loading` or `.error` route
- // This is not perfect and may false-positive in some cases, but it's the best we can do
- return (
- transition.to?.localName === 'loading' ||
- transition.to?.localName === 'error'
- );
-}
diff --git a/packages/ember/addon/utils/instrumentEmberAppInstanceForPerformance.ts b/packages/ember/src/utils/instrumentEmberAppInstanceForPerformance.ts
similarity index 56%
rename from packages/ember/addon/utils/instrumentEmberAppInstanceForPerformance.ts
rename to packages/ember/src/utils/instrumentEmberAppInstanceForPerformance.ts
index c10e3913b4ef..f81a274570b9 100644
--- a/packages/ember/addon/utils/instrumentEmberAppInstanceForPerformance.ts
+++ b/packages/ember/src/utils/instrumentEmberAppInstanceForPerformance.ts
@@ -1,14 +1,27 @@
import type ApplicationInstance from '@ember/application/instance';
-import type Transition from '@ember/routing/-private/transition';
+import type Transition from '@ember/routing/transition';
import type RouterService from '@ember/routing/router-service';
import type {
startBrowserTracingNavigationSpan as startBrowserTracingNavigationSpanType,
startBrowserTracingPageLoadSpan as startBrowserTracingPageLoadSpanType,
} from '@sentry/browser';
-import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, startInactiveSpan } from '@sentry/browser';
-import type { Client, Span } from '@sentry/core';
-import type { EmberRouterMain } from '../types';
-import { getBackburner } from './performance';
+import {
+ SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,
+ SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,
+ startInactiveSpan,
+ WINDOW,
+} from '@sentry/browser';
+import { getCurrentScope, spanToJSON, type Client, type Span } from '@sentry/core';
+import { getBackburner } from './utils.ts';
+
+interface EmberRouterMain {
+ location: {
+ formatURL?: (url: string) => string;
+ getURL?: () => string;
+ implementation?: string;
+ rootURL: string;
+ };
+}
export function instrumentEmberAppInstanceForPerformance(
client: Client,
@@ -17,17 +30,9 @@ export function instrumentEmberAppInstanceForPerformance(
startBrowserTracingPageLoadSpan: typeof startBrowserTracingPageLoadSpanType,
startBrowserTracingNavigationSpan: typeof startBrowserTracingNavigationSpanType,
): void {
- // eslint-disable-next-line ember/no-private-routing-service
- const routerMain = appInstance.lookup('router:main') as EmberRouterMain;
- let routerService = appInstance.lookup('service:router') as RouterService & {
- externalRouter?: RouterService;
- _hasMountedSentryPerformanceRouting?: boolean;
- };
+ const { disableRunloopPerformance, instrumentPageLoad, instrumentNavigation } = config;
+ const routerService = getRouterService(appInstance);
- if (routerService.externalRouter) {
- // Using ember-engines-router-service in an engine.
- routerService = routerService.externalRouter;
- }
if (routerService._hasMountedSentryPerformanceRouting) {
// Routing listens to route changes on the main router, and should not be initialized multiple times per page.
return;
@@ -37,67 +42,26 @@ export function instrumentEmberAppInstanceForPerformance(
return;
}
- routerService._hasMountedSentryPerformanceRouting = true;
- _instrumentEmberRouter(
- client,
- routerService,
- routerMain,
- config,
- startBrowserTracingPageLoadSpan,
- startBrowserTracingNavigationSpan,
- );
-}
-
-function getTransitionInformation(
- transition: Transition | undefined,
- router: RouterService,
-): { fromRoute?: string; toRoute?: string } {
- const fromRoute = transition?.from?.name;
- const toRoute = transition?.to?.name || router.currentRouteName;
- return {
- fromRoute,
- toRoute,
- };
-}
-
-// Only exported for testing
-export function _getLocationURL(location: EmberRouterMain['location']): string {
- if (!location?.getURL || !location?.formatURL) {
- return '';
- }
- const url = location.formatURL(location.getURL());
-
- // `implementation` is optional in Ember's predefined location types, so we also check if the URL starts with '#'.
- if (location.implementation === 'hash' || url.startsWith('#')) {
- return `${location.rootURL}${url}`;
- }
- return url;
-}
-
-function _instrumentEmberRouter(
- client: Client,
- routerService: RouterService,
- routerMain: EmberRouterMain,
- config: { disableRunloopPerformance?: boolean; instrumentPageLoad?: boolean; instrumentNavigation?: boolean },
- startBrowserTracingPageLoadSpan: typeof startBrowserTracingPageLoadSpanType,
- startBrowserTracingNavigationSpan: typeof startBrowserTracingNavigationSpanType,
-): void {
- const { disableRunloopPerformance, instrumentPageLoad, instrumentNavigation } = config;
+ const routerMain = getRouterMain(appInstance);
const location = routerMain.location;
let activeRootSpan: Span | undefined;
let transitionSpan: Span | undefined;
const url = _getLocationURL(location);
- if (url && instrumentPageLoad !== false) {
- const routeInfo = routerService.recognize(url);
+ if (instrumentPageLoad !== false) {
+ // Somehow the router service etc. may not be fully ready/initialized yet at this point
+ // Probably because we are running this before the Ember setup is necessarily completed
+ // So in order to accomodate this, we fall back to starting the pageload span with the current URL and update it later
+ const routeInfo = url ? routerService.recognize(url) : undefined;
+
activeRootSpan = startBrowserTracingPageLoadSpan(client, {
- name: `route:${routeInfo.name}`,
+ name: routeInfo ? `route:${routeInfo.name}` : url || WINDOW.location.pathname,
attributes: {
- [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',
+ [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: routeInfo ? 'route' : 'url',
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.ember',
url,
- toRoute: routeInfo.name,
+ toRoute: routeInfo?.name,
},
});
}
@@ -110,29 +74,51 @@ function _instrumentEmberRouter(
getBackburner().off('end', finishActiveTransaction);
};
- if (instrumentNavigation === false) {
- return;
- }
-
routerService.on('routeWillChange', (transition: Transition) => {
const { fromRoute, toRoute } = getTransitionInformation(transition, routerService);
+ // Store this here to be used, even if the active span has ended
+ getCurrentScope().setTransactionName(`route:${toRoute}`);
+
// We want to ignore loading && error routes
if (transitionIsIntermediate(transition)) {
return;
}
- activeRootSpan?.end();
+ // If this is not the initial transition, we want to end the active root span and start a new one
+ if (fromRoute != null) {
+ activeRootSpan?.end();
+
+ if (instrumentNavigation !== false) {
+ activeRootSpan = startBrowserTracingNavigationSpan(client, {
+ name: `route:${toRoute}`,
+ attributes: {
+ [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',
+ [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.ember',
+ fromRoute,
+ toRoute,
+ },
+ });
+ }
+ } else if (activeRootSpan && spanToJSON(activeRootSpan).data[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE] === 'url') {
+ // We make sure to update the pageload span with the current URL, if we couldn't get it before
+ // In this case we re-load the router:main reference, as this may change and we may have a stale reference
+ const location = getRouterMain(appInstance).location;
+ const url = _getLocationURL(location);
+ if (url) {
+ activeRootSpan.updateName(`route:${toRoute}`);
+ activeRootSpan.setAttributes({
+ [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',
+ url,
+ toRoute: toRoute,
+ });
+ }
+ }
- activeRootSpan = startBrowserTracingNavigationSpan(client, {
- name: `route:${toRoute}`,
- attributes: {
- [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',
- [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.ember',
- fromRoute,
- toRoute,
- },
- });
+ // transition spans are only emitted if instrumentNavigation is true
+ if (instrumentNavigation === false) {
+ return;
+ }
transitionSpan = startInactiveSpan({
attributes: {
@@ -159,6 +145,53 @@ function _instrumentEmberRouter(
});
}
+function getRouterService(
+ appInstance: ApplicationInstance,
+): RouterService & { _hasMountedSentryPerformanceRouting?: boolean } {
+ const routerService = appInstance.lookup('service:router') as RouterService & {
+ externalRouter?: RouterService;
+ _hasMountedSentryPerformanceRouting?: boolean;
+ };
+
+ if (routerService.externalRouter) {
+ // Using ember-engines-router-service in an engine.
+ return routerService.externalRouter;
+ }
+
+ return routerService;
+}
+
+function getRouterMain(appInstance: ApplicationInstance): EmberRouterMain {
+ return appInstance.lookup('router:main') as EmberRouterMain;
+}
+
+function getTransitionInformation(
+ transition: Transition | undefined,
+ router: RouterService,
+): { fromRoute?: string; toRoute?: string } {
+ const fromRoute = transition?.from?.name;
+ const toRoute = transition?.to?.name ?? router.currentRouteName ?? undefined;
+
+ return {
+ fromRoute,
+ toRoute,
+ };
+}
+
+// Only exported for testing
+export function _getLocationURL(location: EmberRouterMain['location']): string {
+ if (!location?.getURL || !location?.formatURL) {
+ return '';
+ }
+ const url = location.formatURL(location.getURL());
+
+ // `implementation` is optional in Ember's predefined location types, so we also check if the URL starts with '#'.
+ if (location.implementation === 'hash' || url.startsWith('#')) {
+ return `${location.rootURL}${url}`;
+ }
+ return url;
+}
+
function transitionIsIntermediate(transition: Transition): boolean {
// We want to use ignore, as this may actually be defined on new versions
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
diff --git a/packages/ember/addon/utils/instrumentEmberGlobals.ts b/packages/ember/src/utils/instrumentEmberGlobals.ts
similarity index 86%
rename from packages/ember/addon/utils/instrumentEmberGlobals.ts
rename to packages/ember/src/utils/instrumentEmberGlobals.ts
index 02e365e27c23..58ecdefe9bb1 100644
--- a/packages/ember/addon/utils/instrumentEmberGlobals.ts
+++ b/packages/ember/src/utils/instrumentEmberGlobals.ts
@@ -1,10 +1,12 @@
import { subscribe } from '@ember/instrumentation';
import { scheduleOnce } from '@ember/runloop';
-import type { EmberRunQueues } from '@ember/runloop/-private/types';
import { getActiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startInactiveSpan } from '@sentry/browser';
import type { Span } from '@sentry/core';
import { browserPerformanceTimeOrigin, timestampInSeconds } from '@sentry/core';
-import { getBackburner } from './performance';
+import { getBackburner } from './utils.ts';
+
+// Ember runloop queue names
+type EmberRunQueues = 'actions' | 'afterRender' | 'destroy' | 'render' | 'routerTransitions' | 'sync';
type Payload = {
containerKey: string;
@@ -172,23 +174,33 @@ function _instrumentComponents(config: {
const beforeComponentDefinitionEntries = {} as RenderEntries;
function _subscribeToRenderEvents(): void {
- subscribe('render.component', {
- before(_name: string, _timestamp: number, payload: Payload) {
- processComponentRenderBefore(payload, beforeEntries);
+ subscribe('render.component', {
+ before(_name: string, _timestamp: number, payload: object) {
+ processComponentRenderBefore(payload as Payload, beforeEntries);
},
- after(_name: string, _timestamp: number, payload: Payload, _beganIndex: number) {
- processComponentRenderAfter(payload, beforeEntries, 'ui.ember.component.render', minComponentDuration);
+ after(_name: string, _timestamp: number, payload: object) {
+ processComponentRenderAfter(
+ payload as Payload,
+ beforeEntries,
+ 'ui.ember.component.render',
+ minComponentDuration,
+ );
},
});
if (enableComponentDefinitions) {
- subscribe('render.getComponentDefinition', {
- before(_name: string, _timestamp: number, payload: Payload) {
- processComponentRenderBefore(payload, beforeComponentDefinitionEntries);
+ subscribe('render.getComponentDefinition', {
+ before(_name: string, _timestamp: number, payload: object) {
+ processComponentRenderBefore(payload as Payload, beforeComponentDefinitionEntries);
},
- after(_name: string, _timestamp: number, payload: Payload, _beganIndex: number) {
- processComponentRenderAfter(payload, beforeComponentDefinitionEntries, 'ui.ember.component.definition', 0);
+ after(_name: string, _timestamp: number, payload: object) {
+ processComponentRenderAfter(
+ payload as Payload,
+ beforeComponentDefinitionEntries,
+ 'ui.ember.component.definition',
+ 0,
+ );
},
});
}
diff --git a/packages/ember/src/utils/sentry/instrument-route-performance.ts b/packages/ember/src/utils/instrumentRoutePerformance.ts
similarity index 86%
rename from packages/ember/src/utils/sentry/instrument-route-performance.ts
rename to packages/ember/src/utils/instrumentRoutePerformance.ts
index b197c75f933e..81ceb4349a37 100644
--- a/packages/ember/src/utils/sentry/instrument-route-performance.ts
+++ b/packages/ember/src/utils/instrumentRoutePerformance.ts
@@ -1,15 +1,10 @@
import { startSpan } from '@sentry/browser';
-import {
- SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,
- SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,
-} from '@sentry/core';
+import { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '@sentry/core';
import type Route from '@ember/routing/route';
import type { TransactionSource } from '@sentry/core';
-type RouteConstructor = new (
- ...args: ConstructorParameters
-) => Route;
+type RouteConstructor = new (...args: ConstructorParameters) => Route;
/**
* Enables monitoring the performance of an Ember app.
@@ -34,9 +29,7 @@ type RouteConstructor = new (
* export default instrumentRoutePerformance(ApplicationRoute);
* ```
*/
-export function instrumentRoutePerformance(
- BaseRoute: T,
-): T {
+export function instrumentRoutePerformance(BaseRoute: T): T {
const instrumentFunction = async (
op: string,
name: string,
@@ -77,13 +70,7 @@ export function instrumentRoutePerformance(
}
public async model(...args: unknown[]): Promise {
- return instrumentFunction(
- 'ui.ember.route.model',
- this.fullRouteName,
- super.model.bind(this),
- args,
- 'custom',
- );
+ return instrumentFunction('ui.ember.route.model', this.fullRouteName, super.model.bind(this), args, 'custom');
}
public afterModel(...args: unknown[]): void | Promise {
diff --git a/packages/ember/src/utils/sentry/setup-performance.ts b/packages/ember/src/utils/sentry/setup-performance.ts
deleted file mode 100644
index b238f4b9f27a..000000000000
--- a/packages/ember/src/utils/sentry/setup-performance.ts
+++ /dev/null
@@ -1,552 +0,0 @@
-import { subscribe, unsubscribe } from '@ember/instrumentation';
-import { _backburner, run, scheduleOnce } from '@ember/runloop';
-import {
- browserTracingIntegration as originalBrowserTracingIntegration,
- getActiveSpan,
- startBrowserTracingNavigationSpan,
- startBrowserTracingPageLoadSpan,
- SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,
- SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,
- startInactiveSpan,
-} from '@sentry/browser';
-import {
- addIntegration,
- timestampInSeconds,
-} from '@sentry/core';
-import {
- getLocationURL,
- getTransitionInformation,
- isTransitionIntermediate,
-} from '../ember/router.ts';
-
-import type ApplicationInstance from '@ember/application/instance';
-import type RouterService from '@ember/routing/router-service';
-import type { BrowserClient } from '@sentry/browser';
-import type { Integration, Span } from '@sentry/core';
-import type { EmberRouterMain } from '../ember/router.ts';
-
-// Module-level flag to prevent duplicate global listeners (runloop, components)
-// from accumulating across repeated setupPerformance calls (e.g., in tests or ember-engines).
-let _isGlobalInstrumentationInitialized = false;
-
-// Cleanup functions for global listeners registered by _instrumentEmberRunloop
-// and _instrumentComponents, so they can be torn down on reset.
-const _globalCleanupFns: Array<() => void> = [];
-
-/**
- * Reset the global instrumentation state and unsubscribe accumulated listeners.
- * Intended for test teardown only.
- * @internal
- */
-export function _resetGlobalInstrumentation(): void {
- _isGlobalInstrumentationInitialized = false;
- for (const cleanup of _globalCleanupFns) {
- cleanup();
- }
- _globalCleanupFns.length = 0;
-}
-
-// Ember runloop queue names
-type EmberRunQueues =
- | 'actions'
- | 'afterRender'
- | 'destroy'
- | 'render'
- | 'routerTransitions'
- | 'sync';
-
-/**
- * Extended Backburner interface with the 'off' method that's not in the public types.
- */
-interface ExtendedBackburner {
- on(eventName: string, callback: (...args: unknown[]) => void): void;
- off(eventName: string, callback: (...args: unknown[]) => void): void;
-}
-
-/**
- * Options for the Ember-specific browserTracingIntegration.
- */
-export interface EmberBrowserTracingOptions extends Omit[0], 'instrumentNavigation' | 'instrumentPageLoad'> {
- /**
- * The Ember ApplicationInstance, required for router instrumentation.
- */
- appInstance: ApplicationInstance;
-
- /**
- * Whether to disable component render tracking.
- * @default false
- */
- disableInstrumentComponents?: boolean;
-
- /**
- * Whether to disable runloop performance tracking.
- * @default false
- */
- disableRunloopPerformance?: boolean;
-
- /**
- * Whether to enable component definition tracking.
- * @default false
- */
- enableComponentDefinitions?: boolean;
-
- /**
- * The time (ms) that has to pass without any span being created.
- * If this time is exceeded, the idle span will finish.
- * @default 5000
- */
- idleTimeout?: number;
-
- /**
- * Whether to instrument navigation spans.
- * @default true
- */
- instrumentNavigation?: boolean;
-
- /**
- * Whether to instrument page load spans.
- * @default true
- */
- instrumentPageLoad?: boolean;
-
- /**
- * Minimum duration (ms) for component render spans to be recorded.
- * @default 2
- */
- minimumComponentRenderDuration?: number;
-
- /**
- * Minimum duration (ms) for runloop queue spans to be recorded.
- * @default 5
- */
- minimumRunloopQueueDuration?: number;
-}
-
-function getBackburner(): Pick {
- if (_backburner) {
- return _backburner as unknown as Pick;
- }
-
- if (
- (run as unknown as { backburner?: Pick })
- .backburner
- ) {
- return (
- run as unknown as { backburner: Pick }
- ).backburner;
- }
-
- return {
- on() {
- // noop
- },
- off() {
- // noop
- },
- };
-}
-
-function _instrumentEmberRouter(
- routerService: RouterService,
- routerMain: EmberRouterMain,
- client: BrowserClient,
- options: {
- disableRunloopPerformance?: boolean;
- instrumentNavigation?: boolean;
- instrumentPageLoad?: boolean;
- },
-): void {
- const { disableRunloopPerformance } = options;
- const location = routerMain.location;
- let activeRootSpan: Span | undefined;
- let transitionSpan: Span | undefined;
-
- const url = getLocationURL(location);
-
- if (url && options.instrumentPageLoad !== false) {
- let routeInfo;
- try {
- routeInfo = routerService.recognize(url);
- } catch {
- // Fall through — skip page load span but continue with router instrumentation
- }
- if (routeInfo) {
- activeRootSpan = startBrowserTracingPageLoadSpan(client, {
- name: `route:${routeInfo.name}`,
- attributes: {
- [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',
- [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.pageload.ember',
- url,
- toRoute: routeInfo.name,
- },
- });
- }
- }
-
- function createFinishActiveTransaction(
- spanToFinish: Span,
- ): (_: unknown, nextInstance: unknown) => void {
- const handler = (_: unknown, nextInstance: unknown): void => {
- if (nextInstance) {
- return;
- }
- spanToFinish.end();
- getBackburner().off('end', handler);
- };
- return handler;
- }
-
- if (options.instrumentNavigation === false) {
- return;
- }
-
- routerService.on('routeWillChange', (transition) => {
- const { fromRoute, toRoute } = getTransitionInformation(
- transition,
- routerService,
- );
-
- // We want to ignore loading && error routes
- if (isTransitionIntermediate(transition)) {
- return;
- }
-
- activeRootSpan?.end();
- transitionSpan?.end();
-
- activeRootSpan = startBrowserTracingNavigationSpan(client, {
- name: `route:${toRoute}`,
- attributes: {
- [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'route',
- [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.navigation.ember',
- fromRoute,
- toRoute,
- },
- });
-
- transitionSpan = startInactiveSpan({
- attributes: {
- [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.ember',
- },
- op: 'ui.ember.transition',
- name: `route:${fromRoute} -> route:${toRoute}`,
- onlyIfParent: true,
- });
- });
-
- routerService.on('routeDidChange', (transition) => {
- if (
- !transitionSpan ||
- !activeRootSpan ||
- isTransitionIntermediate(transition)
- ) {
- return;
- }
- transitionSpan.end();
-
- if (disableRunloopPerformance) {
- activeRootSpan.end();
- return;
- }
-
- getBackburner().on('end', createFinishActiveTransaction(activeRootSpan));
- });
-}
-
-function _instrumentEmberRunloop(options: { disableRunloopPerformance?: boolean; minimumRunloopQueueDuration?: number }): void {
- const { disableRunloopPerformance, minimumRunloopQueueDuration } = options;
- if (disableRunloopPerformance) {
- return;
- }
-
- let currentQueueStart: number | undefined;
- const instrumentedEmberQueues = [
- 'actions',
- 'routerTransitions',
- 'render',
- 'afterRender',
- 'destroy',
- ] as EmberRunQueues[];
-
- const beginHandler = (_: unknown, previousInstance: unknown): void => {
- if (previousInstance) {
- return;
- }
- const activeSpan = getActiveSpan();
- if (!activeSpan) {
- return;
- }
- currentQueueStart = timestampInSeconds();
-
- const processQueue = (queue: EmberRunQueues): void => {
- // Process this queue using the end of the previous queue.
- if (currentQueueStart) {
- const now = timestampInSeconds();
- const minQueueDuration = minimumRunloopQueueDuration ?? 5;
-
- if ((now - currentQueueStart) * 1000 >= minQueueDuration) {
- startInactiveSpan({
- attributes: {
- [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.ember',
- },
- name: 'runloop',
- op: `ui.ember.runloop.${queue}`,
- startTime: currentQueueStart,
- onlyIfParent: true,
- })?.end(now);
- }
- currentQueueStart = undefined;
- }
-
- // Setup for next queue
-
- const stillActiveSpan = getActiveSpan();
- if (!stillActiveSpan) {
- return;
- }
- currentQueueStart = timestampInSeconds();
- };
-
- instrumentedEmberQueues.forEach((queue) => {
- // eslint-disable-next-line ember/no-runloop -- scheduleOnce is the only way to instrument Ember's backburner queues
- scheduleOnce(queue, null, processQueue, queue);
- });
- };
-
- getBackburner().on('begin', beginHandler);
- _globalCleanupFns.push(() => getBackburner().off('begin', beginHandler));
-}
-
-type Payload = {
- containerKey: string;
- initialRender: true;
- object: string;
-};
-
-type RenderEntry = {
- payload: Payload;
- now: number;
-};
-
-interface RenderEntries {
- [name: string]: RenderEntry;
-}
-
-function processComponentRenderBefore(
- payload: Payload,
- beforeEntries: RenderEntries,
-): void {
- const info = {
- payload,
- now: timestampInSeconds(),
- };
- beforeEntries[payload.object] = info;
-}
-
-function processComponentRenderAfter(
- payload: Payload,
- beforeEntries: RenderEntries,
- op: string,
- minComponentDuration: number,
-): void {
- const begin = beforeEntries[payload.object];
- delete beforeEntries[payload.object];
-
- if (!begin) {
- return;
- }
-
- const now = timestampInSeconds();
- const componentRenderDuration = now - begin.now;
-
- if (componentRenderDuration * 1000 >= minComponentDuration) {
- startInactiveSpan({
- name: payload.containerKey || payload.object,
- op,
- startTime: begin.now,
- attributes: {
- [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.ui.ember',
- },
- onlyIfParent: true,
- })?.end(now);
- }
-}
-
-function _instrumentComponents(options: { disableInstrumentComponents?: boolean; minimumComponentRenderDuration?: number; enableComponentDefinitions?: boolean }): void {
- const {
- disableInstrumentComponents,
- minimumComponentRenderDuration,
- enableComponentDefinitions,
- } = options;
- if (disableInstrumentComponents) {
- return;
- }
-
- const minComponentDuration = minimumComponentRenderDuration ?? 2;
-
- const beforeEntries = {} as RenderEntries;
- const beforeComponentDefinitionEntries = {} as RenderEntries;
-
- function _subscribeToRenderEvents(): void {
- const renderSub = subscribe('render.component', {
- before(_name: string, _timestamp: number, payload: object) {
- processComponentRenderBefore(payload as Payload, beforeEntries);
- },
-
- after(_name: string, _timestamp: number, payload: object) {
- processComponentRenderAfter(
- payload as Payload,
- beforeEntries,
- 'ui.ember.component.render',
- minComponentDuration,
- );
- },
- });
- _globalCleanupFns.push(() => unsubscribe(renderSub));
-
- if (enableComponentDefinitions) {
- const defSub = subscribe('render.getComponentDefinition', {
- before(_name: string, _timestamp: number, payload: object) {
- processComponentRenderBefore(
- payload as Payload,
- beforeComponentDefinitionEntries,
- );
- },
-
- after(_name: string, _timestamp: number, payload: object) {
- processComponentRenderAfter(
- payload as Payload,
- beforeComponentDefinitionEntries,
- 'ui.ember.component.definition',
- 0,
- );
- },
- });
- _globalCleanupFns.push(() => unsubscribe(defSub));
- }
- }
- _subscribeToRenderEvents();
-}
-
-/**
- * A custom `browserTracingIntegration` for Ember.js applications.
- *
- * This wraps the standard browser tracing integration with Ember-specific
- * router instrumentation, runloop tracking, and component render tracking.
- *
- * @param options - Ember browser tracing options including `appInstance`
- * @returns A Sentry integration
- *
- * @example
- * ```typescript
- * // app/instance-initializers/sentry-performance.ts
- * import type ApplicationInstance from '@ember/application/instance';
- * import { browserTracingIntegration, addIntegration } from '@sentry/ember';
- *
- * export function initialize(appInstance: ApplicationInstance): void {
- * addIntegration(browserTracingIntegration({ appInstance }));
- * }
- *
- * export default { initialize };
- * ```
- */
-export function browserTracingIntegration(options: EmberBrowserTracingOptions): Integration {
- const {
- appInstance,
- disableInstrumentComponents,
- disableRunloopPerformance,
- enableComponentDefinitions,
- instrumentNavigation = true,
- instrumentPageLoad = true,
- minimumComponentRenderDuration,
- minimumRunloopQueueDuration,
- idleTimeout = 5000,
- ...baseBrowserTracingOptions
- } = options;
-
- const integration = originalBrowserTracingIntegration({
- ...baseBrowserTracingOptions,
- idleTimeout,
- instrumentNavigation: false,
- instrumentPageLoad: false,
- });
-
- return {
- ...integration,
- afterAllSetup(client) {
- integration.afterAllSetup(client);
-
- // Disable in fastboot - we only want to run Sentry client-side
- const fastboot = appInstance.lookup('service:fastboot') as unknown as
- | { isFastBoot: boolean }
- | undefined;
- if (fastboot?.isFastBoot) {
- return;
- }
-
- // Instrument global singletons (runloop, components) independently
- // of router state — these should work even if the router is unavailable.
- if (!_isGlobalInstrumentationInitialized) {
- _isGlobalInstrumentationInitialized = true;
- _instrumentEmberRunloop({ disableRunloopPerformance, minimumRunloopQueueDuration });
- _instrumentComponents({ disableInstrumentComponents, minimumComponentRenderDuration, enableComponentDefinitions });
- }
-
- // eslint-disable-next-line ember/no-private-routing-service
- const routerMain = appInstance.lookup('router:main') as EmberRouterMain;
- let routerService = appInstance.lookup('service:router') as RouterService & {
- externalRouter?: RouterService;
- _hasMountedSentryPerformanceRouting?: boolean;
- };
-
- if (routerService.externalRouter) {
- // Using ember-engines-router-service in an engine.
- routerService = routerService.externalRouter;
- }
- if (routerService._hasMountedSentryPerformanceRouting) {
- // Routing listens to route changes on the main router, and should not be initialized multiple times per page.
- return;
- }
- if (!routerService.recognize) {
- // Router is missing critical functionality to limit cardinality of the transaction names.
- return;
- }
-
- routerService._hasMountedSentryPerformanceRouting = true;
- _instrumentEmberRouter(routerService, routerMain, client as BrowserClient, {
- disableRunloopPerformance,
- instrumentNavigation,
- instrumentPageLoad,
- });
- },
- };
-}
-
-/**
- * Set up Sentry performance instrumentation for an Ember application.
- *
- * This is a convenience function that creates and adds the Ember
- * `browserTracingIntegration`. For more control, use the integration directly.
- *
- * @param appInstance - The Ember ApplicationInstance
- * @param options - Performance instrumentation options
- *
- * @example
- * ```typescript
- * // app/instance-initializers/sentry-performance.ts
- * import type ApplicationInstance from '@ember/application/instance';
- * import { setupPerformance } from '@sentry/ember';
- *
- * export function initialize(appInstance: ApplicationInstance): void {
- * setupPerformance(appInstance);
- * }
- *
- * export default { initialize };
- * ```
- */
-export function setupPerformance(
- appInstance: ApplicationInstance,
- options: Omit = {},
-): void {
- addIntegration(browserTracingIntegration({ appInstance, ...options }));
-}
diff --git a/packages/ember/src/utils/utils.ts b/packages/ember/src/utils/utils.ts
new file mode 100644
index 000000000000..464c2806fcb6
--- /dev/null
+++ b/packages/ember/src/utils/utils.ts
@@ -0,0 +1,25 @@
+import { _backburner, run } from '@ember/runloop';
+
+interface ExtendedBackburner {
+ on(eventName: string, callback: (...args: unknown[]) => void): void;
+ off(eventName: string, callback: (...args: unknown[]) => void): void;
+}
+
+export function getBackburner(): Pick {
+ if (_backburner) {
+ return _backburner as unknown as Pick;
+ }
+
+ if ((run as unknown as { backburner?: Pick }).backburner) {
+ return (run as unknown as { backburner: Pick }).backburner;
+ }
+
+ return {
+ on() {
+ // noop
+ },
+ off() {
+ // noop
+ },
+ };
+}
diff --git a/packages/ember/testem.cjs b/packages/ember/testem.cjs
deleted file mode 100644
index 9c064583c441..000000000000
--- a/packages/ember/testem.cjs
+++ /dev/null
@@ -1,26 +0,0 @@
-'use strict';
-
-if (typeof module !== 'undefined') {
- module.exports = {
- test_page: 'tests/index.html?hidepassed',
- cwd: 'dist-tests',
- disable_watching: true,
- launch_in_ci: ['Chrome'],
- launch_in_dev: ['Chrome'],
- browser_start_timeout: 120,
- browser_args: {
- Chrome: {
- ci: [
- // --no-sandbox is needed when running Chrome inside a container
- process.env.CI ? '--no-sandbox' : null,
- '--headless=new',
- '--disable-dev-shm-usage',
- '--disable-software-rasterizer',
- '--mute-audio',
- '--remote-debugging-port=0',
- '--window-size=1440,900',
- ].filter(Boolean),
- },
- },
- };
-}
diff --git a/packages/ember/tests/acceptance/sentry-errors-test.ts b/packages/ember/tests/acceptance/sentry-errors-test.ts
deleted file mode 100644
index 634175e1759d..000000000000
--- a/packages/ember/tests/acceptance/sentry-errors-test.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import { module, test } from 'qunit';
-import { setupApplicationTest } from 'ember-qunit';
-import { click, visit } from '@ember/test-helpers';
-import { next } from '@ember/runloop';
-import { setupSentryTest } from '../helpers/setup-sentry.ts';
-import {
- assertSentryErrorCount,
- assertSentryErrors,
-} from '../helpers/utils.ts';
-
-import type { SentryTestContext } from '../helpers/setup-sentry.ts';
-
-module('Acceptance | Sentry Errors', function (hooks) {
- setupApplicationTest(hooks);
- setupSentryTest(hooks);
-
- test('Check "Throw Generic Javascript Error"', async function (this: SentryTestContext, assert) {
- assert.expect(3);
-
- await visit('/');
-
- await click('[data-test-button="Throw Generic Javascript Error"]');
-
- assertSentryErrorCount(assert, 1);
- assertSentryErrors(assert, 0, {
- errorBodyContains: [...this.errorMessages],
- });
- });
-
- test('Check "Throw EmberError"', async function (this: SentryTestContext, assert) {
- assert.expect(3);
-
- await visit('/');
-
- await click('[data-test-button="Throw EmberError"]');
-
- assertSentryErrorCount(assert, 1);
- assertSentryErrors(assert, 0, {
- errorBodyContains: [...this.errorMessages],
- });
- });
-
- test('Check "Caught Thrown EmberError"', async function (this: SentryTestContext, assert) {
- assert.expect(1);
-
- await visit('/');
-
- await click('[data-test-button="Caught Thrown EmberError"]');
-
- assertSentryErrorCount(assert, 0);
- });
-
- test('Check "Error From Fetch"', async function (this: SentryTestContext, assert) {
- assert.expect(3);
-
- this.fetchStub.onFirstCall().callsFake(() => {
- throw new Error('Test error...');
- });
-
- await visit('/');
-
- await click('[data-test-button="Error From Fetch"]');
-
- const done = assert.async();
-
- // eslint-disable-next-line ember/no-runloop -- next() needed to wait for async error handler
- next(() => {
- assertSentryErrorCount(assert, 1);
- assertSentryErrors(assert, 0, { errorBodyContains: ['Test error...'] });
- done();
- });
- });
-
- test('Check "Error in AfterRender"', async function (this: SentryTestContext, assert) {
- assert.expect(4);
-
- await visit('/');
-
- await click('[data-test-button="Error in AfterRender"]');
-
- assertSentryErrorCount(assert, 1);
- assert.ok(
- this.qunitOnUnhandledRejection.calledOnce,
- 'Uncaught rejection should only be called once',
- );
- assertSentryErrors(assert, 0, {
- errorBodyContains: [...this.errorMessages],
- });
- });
-
- test('Check "Promise Rejection"', async function (this: SentryTestContext, assert) {
- assert.expect(4);
-
- await visit('/');
-
- await click('[data-test-button="Promise Rejection"]');
-
- assertSentryErrorCount(assert, 1);
- assert.ok(
- this.qunitOnUnhandledRejection.calledOnce,
- 'Uncaught rejection should only be called once',
- );
- assertSentryErrors(assert, 0, {
- errorBodyContains: [this.qunitOnUnhandledRejection.getCall(0).args[0]],
- });
- });
-
- test('Check "Error inside Promise"', async function (this: SentryTestContext, assert) {
- assert.expect(4);
-
- await visit('/');
-
- await click('[data-test-button="Error inside Promise"]');
-
- assertSentryErrorCount(assert, 1);
- assert.ok(
- this.qunitOnUnhandledRejection.calledOnce,
- 'Uncaught rejection should only be called once',
- );
- assertSentryErrors(assert, 0, {
- errorBodyContains: ['Error within Promise'],
- });
- });
-});
diff --git a/packages/ember/tests/acceptance/sentry-performance-test.ts b/packages/ember/tests/acceptance/sentry-performance-test.ts
deleted file mode 100644
index 7cd882e8522e..000000000000
--- a/packages/ember/tests/acceptance/sentry-performance-test.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-import { module, test } from 'qunit';
-import { setupApplicationTest } from 'ember-qunit';
-import {
- click,
- find,
- resetOnerror,
- settled,
- setupOnerror,
- visit,
-} from '@ember/test-helpers';
-import { setupSentryTest } from '../helpers/setup-sentry.ts';
-import {
- assertSentryTransactionCount,
- assertSentryTransactions,
-} from '../helpers/utils.ts';
-
-const SLOW_TRANSITION_WAIT = 3000;
-
-module('Acceptance | Sentry Performance', function (hooks) {
- setupApplicationTest(hooks);
- setupSentryTest(hooks);
-
- test('Test transaction', async function (assert) {
- await visit('/tracing');
-
- assertSentryTransactionCount(assert, 1);
- assertSentryTransactions(assert, 0, {
- spans: ['ui.ember.transition | route:undefined -> route:tracing'],
- transaction: 'route:tracing',
- attributes: {
- fromRoute: undefined,
- toRoute: 'tracing',
- },
- });
- });
-
- test('Test navigating to slow route', async function (assert) {
- await visit('/tracing');
-
- await click('[data-test-button="Transition to slow loading route"]');
-
- assertSentryTransactionCount(assert, 2);
- assertSentryTransactions(assert, 1, {
- spans: [
- 'ui.ember.transition | route:tracing -> route:slow-loading-route.index',
- 'ui.ember.route.before_model | slow-loading-route',
- 'ui.ember.route.model | slow-loading-route',
- 'ui.ember.route.after_model | slow-loading-route',
- 'ui.ember.route.before_model | slow-loading-route.index',
- 'ui.ember.route.model | slow-loading-route.index',
- 'ui.ember.route.after_model | slow-loading-route.index',
- 'ui.ember.route.setup_controller | slow-loading-route',
- 'ui.ember.route.setup_controller | slow-loading-route.index',
- ],
- transaction: 'route:slow-loading-route.index',
- durationCheck: (duration) => duration > SLOW_TRANSITION_WAIT,
- attributes: {
- fromRoute: 'tracing',
- toRoute: 'slow-loading-route.index',
- },
- });
- });
-
- test('Test page with loading state', async function (assert) {
- await visit('/with-loading');
-
- assertSentryTransactionCount(assert, 1);
- assertSentryTransactions(assert, 0, {
- spans: [
- 'ui.ember.transition | route:undefined -> route:with-loading.index',
- 'ui.ember.route.before_model | with-loading.index',
- 'ui.ember.route.model | with-loading.index',
- 'ui.ember.route.after_model | with-loading.index',
- 'ui.ember.route.setup_controller | with-loading.index',
- ],
- transaction: 'route:with-loading.index',
- attributes: {
- fromRoute: undefined,
- toRoute: 'with-loading.index',
- },
- });
- });
-
- test('Test page with error state', async function (assert) {
- // The route's model hook intentionally throws, so we need to handle errors
- setupOnerror(() => {
- // Swallow errors to let Ember transition to error substate
- });
-
- try {
- await visit('/with-error');
- } catch {
- // visit() may reject when the route model hook throws
- }
-
- await settled();
-
- resetOnerror();
-
- // Ensure we are on error page
- assert.ok(find('#test-page-load-error'), 'Error template is rendered');
-
- assertSentryTransactionCount(assert, 1);
- assertSentryTransactions(assert, 0, {
- spans: [
- 'ui.ember.transition | route:undefined -> route:with-error.index',
- 'ui.ember.route.before_model | with-error.index',
- 'ui.ember.route.model | with-error.index',
- ],
- transaction: 'route:with-error.index',
- attributes: {
- fromRoute: undefined,
- toRoute: 'with-error.index',
- },
- });
- });
-});
diff --git a/packages/ember/tests/acceptance/sentry-replay-test.ts b/packages/ember/tests/acceptance/sentry-replay-test.ts
deleted file mode 100644
index 638f06cb0fbd..000000000000
--- a/packages/ember/tests/acceptance/sentry-replay-test.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { module, test } from 'qunit';
-import { setupApplicationTest } from 'ember-qunit';
-import { visit } from '@ember/test-helpers';
-import * as Sentry from '@sentry/ember';
-import { setupSentryTest } from '../helpers/setup-sentry.ts';
-
-import type { BrowserClient, replayIntegration } from '@sentry/ember';
-
-module('Acceptance | Sentry Session Replay', function (hooks) {
- setupApplicationTest(hooks);
- setupSentryTest(hooks);
-
- test('Test replay', async function (assert) {
- await visit('/replay');
-
- const integration =
- Sentry.getClient()?.getIntegrationByName<
- ReturnType
- >('Replay');
- assert.ok(integration);
-
- const replay = integration!['_replay'] as ReturnType['_replay'];
-
- assert.true(replay.isEnabled());
- assert.false(replay.isPaused());
- });
-});
diff --git a/packages/ember/tests/helpers/setup-sentry.ts b/packages/ember/tests/helpers/setup-sentry.ts
deleted file mode 100644
index 136870bc58b5..000000000000
--- a/packages/ember/tests/helpers/setup-sentry.ts
+++ /dev/null
@@ -1,82 +0,0 @@
-import { getContext, resetOnerror, setupOnerror } from '@ember/test-helpers';
-import { setupPerformance, _resetGlobalInstrumentation } from '@sentry/ember';
-import sinon from 'sinon';
-
-import type { TestContext } from '@ember/test-helpers';
-
-import type ApplicationInstance from '@ember/application/instance';
-
-export type SentryTestContext = TestContext & {
- errorMessages: string[];
- fetchStub: sinon.SinonStub;
- qunitOnUnhandledRejection: sinon.SinonStub;
- _windowOnError: OnErrorEventHandler;
-};
-
-export function setupSentryTest(hooks: NestedHooks): void {
- hooks.beforeEach(function (this: SentryTestContext) {
- window._sentryTestEvents = [];
-
- // Set up performance instrumentation using the test app instance
- const context = getContext() as { owner?: ApplicationInstance } | undefined;
- if (context?.owner) {
- setupPerformance(context.owner, {
- minimumRunloopQueueDuration: 5,
- minimumComponentRenderDuration: 0,
- });
- }
- const errorMessages: string[] = [];
- this.errorMessages = errorMessages;
-
- /**
- * Stub out fetch function to assert on Sentry calls.
- */
- this.fetchStub = sinon.stub(window, 'fetch');
-
- /**
- * Stops global test suite failures from unhandled rejections and allows assertion on them.
- * onUncaughtException is used in QUnit 2.17 onwards.
- */
- this.qunitOnUnhandledRejection = sinon.stub(
- QUnit,
- // @ts-expect-error this is OK
- QUnit.onUncaughtException
- ? 'onUncaughtException'
- : 'onUnhandledRejection',
- );
-
- // @ts-expect-error this is fine
- QUnit.onError = function ({ message }: { message: string }) {
- errorMessages.push(message.split('Error: ')[1]!);
- return true;
- };
-
- setupOnerror(function (error: Error) {
- errorMessages.push(error.message);
- throw error;
- });
-
- this._windowOnError = window.onerror;
-
- /**
- * Will collect errors when run via testem in cli
- */
- window.onerror = (error) => {
- errorMessages.push(error.toString().split('Error: ')[1]!);
- };
- });
-
- hooks.afterEach(function (this: SentryTestContext) {
- _resetGlobalInstrumentation();
- this.fetchStub.restore();
- this.qunitOnUnhandledRejection.restore();
- window.onerror = this._windowOnError;
- resetOnerror();
- });
-}
-
-declare global {
- interface Window {
- _sentryTestEvents: unknown[];
- }
-}
diff --git a/packages/ember/tests/helpers/utils.ts b/packages/ember/tests/helpers/utils.ts
deleted file mode 100644
index 4d12de0536f3..000000000000
--- a/packages/ember/tests/helpers/utils.ts
+++ /dev/null
@@ -1,139 +0,0 @@
-import type { Event } from '@sentry/core';
-
-const defaultAssertOptions = {
- errorBodyContains: [],
-};
-
-function getTestSentryErrors(): Event[] {
- return (window._sentryTestEvents as Event[]).filter(
- (event) => event['type'] !== 'transaction',
- );
-}
-
-function getTestSentryTransactions(): Event[] {
- return (window._sentryTestEvents as Event[]).filter(
- (event) => event['type'] === 'transaction',
- );
-}
-
-export function assertSentryErrorCount(assert: Assert, count: number): void {
- assert.equal(
- getTestSentryErrors().length,
- count,
- 'Check correct number of Sentry events were sent',
- );
-}
-
-export function assertSentryTransactionCount(
- assert: Assert,
- count: number,
-): void {
- assert.equal(
- getTestSentryTransactions().length,
- count,
- 'Check correct number of Sentry events were sent',
- );
-}
-
-export function assertSentryErrors(
- assert: Assert,
- callNumber: number,
- options: {
- errorBodyContains: string[];
- },
-): void {
- const sentryTestEvents = getTestSentryErrors();
- const assertOptions = Object.assign({}, defaultAssertOptions, options);
-
- const event = sentryTestEvents[callNumber];
-
- /**
- * Body could be parsed here to check exact properties, but that requires too much implementation specific detail,
- * instead this loosely matches on contents to check the correct error is being sent.
- */
- assert.ok(
- assertOptions.errorBodyContains.length,
- 'Must pass strings to check against error body',
- );
- const errorBody = JSON.stringify(event);
- assertOptions.errorBodyContains.forEach((bodyContent) => {
- assert.ok(
- errorBody.includes(bodyContent),
- `Checking that error body includes ${bodyContent}`,
- );
- });
-}
-
-export function assertSentryTransactions(
- assert: Assert,
- callNumber: number,
- options: {
- spans: string[];
- transaction: string;
- attributes: Record;
- durationCheck?: (duration: number) => boolean;
- },
-): void {
- const sentryTestEvents = getTestSentryTransactions();
- const event = sentryTestEvents[callNumber]!;
-
- assert.ok(event, 'event exists');
- assert.ok(event.spans, 'event has spans');
-
- const spans = event.spans || [];
-
- // instead of checking the specific order of runloop spans (which is brittle),
- // we check (below) that _any_ runloop spans are added
- // Also we ignore ui.long-task spans and ui.long-animation-frame, as they are brittle and may or may not appear
- const filteredSpans = spans
- .filter((span) => {
- const op = span.op;
- return (
- !op?.startsWith('ui.ember.runloop.') &&
- !op?.startsWith('ui.long-task') &&
- !op?.startsWith('ui.long-animation-frame')
- );
- })
- .map((spanJson) => {
- return `${spanJson.op} | ${spanJson.description}`;
- });
-
- // Runloop instrumentation may not fire in all test environments (e.g. strict app resolver)
- // so we only check for runloop spans if they exist
- const runloopSpans = spans.filter((span) =>
- span.op?.startsWith('ui.ember.runloop.'),
- );
- if (runloopSpans.length > 0) {
- assert.ok(runloopSpans.length > 0, 'it captures runloop spans');
- runloopSpans.forEach((span) => {
- assert.ok(
- span.op?.startsWith('ui.ember.runloop.'),
- `runloop span has correct op: ${span.op}`,
- );
- assert.ok(
- span.description,
- `runloop span has a description: ${span.description}`,
- );
- });
- } else {
- assert.true(
- true,
- 'runloop spans not captured (expected in strict resolver test environment)',
- );
- }
- assert.deepEqual(filteredSpans, options.spans, 'Has correct spans');
-
- assert.equal(event.transaction, options.transaction);
-
- Object.keys(options.attributes).forEach((key) => {
- assert.equal(event.contexts?.trace?.data?.[key], options.attributes[key]);
- });
-
- if (options.durationCheck && event.timestamp && event.start_timestamp) {
- const duration = (event.timestamp - event.start_timestamp) * 1000;
- assert.ok(
- options.durationCheck(duration),
- `duration (${duration}ms) passes duration check`,
- );
- }
-}
diff --git a/packages/ember/tests/index.html b/packages/ember/tests/index.html
deleted file mode 100644
index 0bf82bddc16e..000000000000
--- a/packages/ember/tests/index.html
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
- sentry-ember Tests
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/ember/tests/instrument-route-performance.test.ts b/packages/ember/tests/instrument-route-performance.test.ts
new file mode 100644
index 000000000000..bbd2db964a13
--- /dev/null
+++ b/packages/ember/tests/instrument-route-performance.test.ts
@@ -0,0 +1,66 @@
+import type Route from '@ember/routing/route';
+import { startSpan } from '@sentry/browser';
+import { describe, expect, it, vi } from 'vitest';
+
+vi.mock('@sentry/browser', () => ({
+ startSpan: vi.fn((_options: unknown, callback: () => unknown) => callback()),
+}));
+vi.mock('@sentry/core', () => ({
+ SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN: 'sentry.origin',
+ SEMANTIC_ATTRIBUTE_SENTRY_SOURCE: 'sentry.source',
+}));
+
+describe('instrumentRoutePerformance', () => {
+ it('wrapped Route hooks maintain the current context', async () => {
+ const { instrumentRoutePerformance } = await import('../src/utils/instrumentRoutePerformance.ts');
+
+ const beforeModel = vi.fn();
+ const model = vi.fn();
+ const afterModel = vi.fn();
+ const setupController = vi.fn();
+
+ class DummyRoute {
+ public fullRouteName = 'dummy';
+
+ public beforeModel(...args: unknown[]): void {
+ beforeModel.apply(this, args);
+ }
+
+ public model(...args: unknown[]): void {
+ model.apply(this, args);
+ }
+
+ public afterModel(...args: unknown[]): void {
+ afterModel.apply(this, args);
+ }
+
+ public setupController(...args: unknown[]): void {
+ setupController.apply(this, args);
+ }
+ }
+
+ const InstrumentedDummyRoute = instrumentRoutePerformance(
+ DummyRoute as unknown as new (...args: unknown[]) => Route,
+ );
+
+ const route = new InstrumentedDummyRoute();
+
+ await route.beforeModel('foo');
+ expect(beforeModel).toHaveBeenCalledWith('foo');
+ expect(beforeModel.mock.contexts[0]).toBe(route);
+
+ await route.model('bar');
+ expect(model).toHaveBeenCalledWith('bar');
+ expect(model.mock.contexts[0]).toBe(route);
+
+ await route.afterModel('bax');
+ expect(afterModel).toHaveBeenCalledWith('bax');
+ expect(afterModel.mock.contexts[0]).toBe(route);
+
+ await route.setupController('baz');
+ expect(setupController).toHaveBeenCalledWith('baz');
+ expect(setupController.mock.contexts[0]).toBe(route);
+
+ expect(startSpan).toHaveBeenCalledTimes(4);
+ });
+});
diff --git a/packages/ember/tests/instrument-router-location.test.ts b/packages/ember/tests/instrument-router-location.test.ts
new file mode 100644
index 000000000000..8587ca8803b5
--- /dev/null
+++ b/packages/ember/tests/instrument-router-location.test.ts
@@ -0,0 +1,82 @@
+import { describe, expect, it } from 'vitest';
+import { _getLocationURL } from '../src/utils/instrumentEmberAppInstanceForPerformance.ts';
+
+interface Location {
+ formatURL?: (url: string) => string;
+ getURL?: () => string;
+ implementation?: string;
+ rootURL: string;
+}
+
+describe('_getLocationURL', () => {
+ it('handles hash location without implementation field', () => {
+ const mockLocation: Location = {
+ getURL: () => '#/test-route',
+ formatURL: (url: string) => url,
+ rootURL: '/',
+ };
+
+ expect(_getLocationURL(mockLocation)).toBe('/#/test-route');
+ });
+
+ it('handles hash location with implementation field', () => {
+ const mockLocation: Location = {
+ getURL: () => '#/test-route',
+ formatURL: (url: string) => url,
+ implementation: 'hash',
+ rootURL: '/',
+ };
+
+ expect(_getLocationURL(mockLocation)).toBe('/#/test-route');
+ });
+
+ it('handles history location', () => {
+ const mockLocation: Location = {
+ getURL: () => '/test-route',
+ formatURL: (url: string) => url,
+ implementation: 'history',
+ rootURL: '/',
+ };
+
+ expect(_getLocationURL(mockLocation)).toBe('/test-route');
+ });
+
+ it('handles none location type', () => {
+ const mockLocation: Location = {
+ getURL: () => '',
+ formatURL: (url: string) => url,
+ implementation: 'none',
+ rootURL: '/',
+ };
+
+ expect(_getLocationURL(mockLocation)).toBe('');
+ });
+
+ it('handles custom rootURL for hash location', () => {
+ const mockLocation: Location = {
+ getURL: () => '#/test-route',
+ formatURL: (url: string) => url,
+ rootURL: '/my-app/',
+ };
+
+ expect(_getLocationURL(mockLocation)).toBe('/my-app/#/test-route');
+ });
+
+ it('handles location without getURL method', () => {
+ const mockLocation: Location = {
+ formatURL: (url: string) => url,
+ rootURL: '/',
+ };
+
+ expect(_getLocationURL(mockLocation)).toBe('');
+ });
+
+ it('handles location without formatURL method', () => {
+ const mockLocation: Location = {
+ getURL: () => '#/test-route',
+ rootURL: '/',
+ };
+
+ expect(_getLocationURL(mockLocation)).toBe('');
+ });
+});
diff --git a/packages/ember/tests/test-helper.ts b/packages/ember/tests/test-helper.ts
deleted file mode 100644
index 4b515a5bab80..000000000000
--- a/packages/ember/tests/test-helper.ts
+++ /dev/null
@@ -1,106 +0,0 @@
-import EmberApp from 'ember-strict-application-resolver';
-import EmberRouter from '@ember/routing/router';
-import * as QUnit from 'qunit';
-import { setApplication } from '@ember/test-helpers';
-import { setup } from 'qunit-dom';
-import { start as qunitStart, setupEmberOnerrorValidation } from 'ember-qunit';
-import PageTitleService from 'ember-page-title/services/page-title';
-import * as Sentry from '@sentry/ember';
-import { replayIntegration } from '@sentry/ember';
-import { setTesting } from '@embroider/macros';
-
-// Initialize Sentry
-Sentry.init({
- dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0',
- tracesSampleRate: 1.0,
- replaysSessionSampleRate: 1.0,
- replaysOnErrorSampleRate: 1.0,
- integrations: [replayIntegration()],
- // Use a mock transport for testing
- transport: () => ({
- send: (envelope: unknown) => {
- // Extract event items from the envelope and store them
- const items =
- (envelope as [unknown, Array<[{ type: string }, unknown]>])[1] || [];
- for (const [header, payload] of items) {
- if (header.type === 'event' || header.type === 'transaction') {
- window._sentryTestEvents = window._sentryTestEvents || [];
- window._sentryTestEvents.push(payload);
- }
- }
- return Promise.resolve({});
- },
- flush: () => Promise.resolve(true),
- }),
-});
-
-class Router extends EmberRouter {
- location = 'none';
- rootURL = '/';
-}
-
-// Transform glob imports to have correct module names for the resolver
-// and extract the default export if present
-function normalizeGlobModulesWithDefault(
- glob: Record>,
- basePath: string,
-): Record {
- const normalized: Record = {};
- for (const [path, mod] of Object.entries(glob)) {
- // Transform ../demo-app/templates/index.gts -> ./templates/index
- const normalizedPath = path
- .replace(basePath + '/', './')
- .replace(/\.gts$/, '')
- .replace(/\.ts$/, '');
- // Use the default export if present, otherwise the whole module
- normalized[normalizedPath] = mod.default ?? mod;
- }
- return normalized;
-}
-
-const templates = import.meta.glob('../demo-app/templates/**/*', {
- eager: true,
-}) as Record>;
-const routes = import.meta.glob('../demo-app/routes/**/*', {
- eager: true,
-}) as Record>;
-const components = import.meta.glob('../demo-app/components/**/*', {
- eager: true,
-}) as Record>;
-
-class TestApp extends EmberApp {
- modules = {
- './router': Router,
- './services/page-title': PageTitleService,
- ...normalizeGlobModulesWithDefault(templates, '../demo-app'),
- ...normalizeGlobModulesWithDefault(routes, '../demo-app'),
- ...normalizeGlobModulesWithDefault(components, '../demo-app'),
- };
-}
-
-Router.map(function () {
- this.route('tracing');
- this.route('replay');
- this.route('slow-loading-route', function () {
- this.route('index', { path: '/' });
- });
- this.route('with-loading', function () {
- this.route('index', { path: '/' });
- });
- this.route('with-error', function () {
- this.route('index', { path: '/' });
- });
-});
-
-export function start() {
- setTesting(true);
- setApplication(
- TestApp.create({
- autoboot: false,
- rootElement: '#ember-testing',
- }),
- );
- setup(QUnit.assert);
- setupEmberOnerrorValidation();
- qunitStart();
-}
diff --git a/packages/ember/tests/unit/instrument-route-performance-test.ts b/packages/ember/tests/unit/instrument-route-performance-test.ts
deleted file mode 100644
index da87a463945c..000000000000
--- a/packages/ember/tests/unit/instrument-route-performance-test.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-import { module, test } from 'qunit';
-import { setupTest } from 'ember-qunit';
-import { instrumentRoutePerformance } from '@sentry/ember';
-import Route from '@ember/routing/route';
-import sinon from 'sinon';
-import { setupSentryTest } from '../helpers/setup-sentry.ts';
-
-import type { SentryTestContext } from '../helpers/setup-sentry.ts';
-
-module('Unit | Utility | instrument-route-performance', function (hooks) {
- setupTest(hooks);
- setupSentryTest(hooks);
-
- test('wrapped Route hooks maintain the current context', function (this: SentryTestContext, assert) {
- const beforeModel = sinon.spy();
- const model = sinon.spy();
- const afterModel = sinon.spy();
- const setupController = sinon.spy();
-
- class DummyRoute extends Route {
- public beforeModel(...args: unknown[]): ReturnType {
- return beforeModel.call(this, ...args);
- }
-
- public model(...args: unknown[]): unknown {
- return model.call(this, ...args);
- }
-
- public afterModel(...args: unknown[]): ReturnType {
- return afterModel.call(this, ...args);
- }
-
- public setupController(...args: unknown[]): unknown {
- return setupController.call(this, ...args);
- }
- }
-
- const InstrumentedDummyRoute = instrumentRoutePerformance(DummyRoute);
-
- this.owner.register('route:dummy', InstrumentedDummyRoute);
-
- const route = this.owner.lookup('route:dummy') as DummyRoute;
-
- route.beforeModel('foo');
-
- assert.ok(
- beforeModel.calledOn(route),
- 'The context for `beforeModel` is the route',
- );
- assert.ok(
- beforeModel.calledWith('foo'),
- 'The arguments for `beforeModel` are passed through',
- );
-
- route.model('bar');
-
- assert.ok(model.calledOn(route), 'The context for `model` is the route');
- assert.ok(
- model.calledWith('bar'),
- 'The arguments for `model` are passed through',
- );
-
- route.afterModel('bax');
-
- assert.ok(
- afterModel.calledOn(route),
- 'The context for `afterModel` is the route',
- );
- assert.ok(
- afterModel.calledWith('bax'),
- 'The arguments for `afterModel` are passed through',
- );
-
- route.setupController('baz');
-
- assert.ok(
- setupController.calledOn(route),
- 'The context for `setupController` is the route',
- );
- assert.ok(
- setupController.calledWith('baz'),
- 'The arguments for `setupController` are passed through',
- );
- });
-});
diff --git a/packages/ember/tests/unit/instrument-router-location-test.ts b/packages/ember/tests/unit/instrument-router-location-test.ts
deleted file mode 100644
index 75e5fa7790f6..000000000000
--- a/packages/ember/tests/unit/instrument-router-location-test.ts
+++ /dev/null
@@ -1,131 +0,0 @@
-import { setupTest } from 'ember-qunit';
-import { module, test } from 'qunit';
-import { setupSentryTest } from '../helpers/setup-sentry.ts';
-import { getLocationURL } from '../../src/utils/ember/router.ts';
-
-import type { SentryTestContext } from '../helpers/setup-sentry.ts';
-
-interface Location {
- formatURL?: (url: string) => string;
- getURL?: () => string;
- implementation?: string;
- rootURL: string;
-}
-
-module('Unit | Utility | instrument-router-location', function (hooks) {
- setupTest(hooks);
- setupSentryTest(hooks);
-
- test('getLocationURL handles hash location without implementation field', function (this: SentryTestContext, assert) {
- // This simulates the default Ember HashLocation which doesn't include the implementation field
- const mockLocation: Location = {
- getURL: () => '#/test-route',
- formatURL: (url: string) => url,
- rootURL: '/',
- };
-
- const result = getLocationURL(mockLocation);
- assert.strictEqual(
- result,
- '/#/test-route',
- 'Should prepend rootURL to hash URL when implementation is not set',
- );
- });
-
- test('getLocationURL handles hash location with implementation field', function (this: SentryTestContext, assert) {
- // This simulates a custom HashLocation with explicit implementation field
- const mockLocation: Location = {
- getURL: () => '#/test-route',
- formatURL: (url: string) => url,
- implementation: 'hash',
- rootURL: '/',
- };
-
- const result = getLocationURL(mockLocation);
- assert.strictEqual(
- result,
- '/#/test-route',
- 'Should prepend rootURL to hash URL when implementation is hash',
- );
- });
-
- test('getLocationURL handles history location', function (this: SentryTestContext, assert) {
- // This simulates a history location
- const mockLocation: Location = {
- getURL: () => '/test-route',
- formatURL: (url: string) => url,
- implementation: 'history',
- rootURL: '/',
- };
-
- const result = getLocationURL(mockLocation);
- assert.strictEqual(
- result,
- '/test-route',
- 'Should return URL as-is for non-hash locations',
- );
- });
-
- test('getLocationURL handles none location type', function (this: SentryTestContext, assert) {
- // This simulates a 'none' location (often used in tests)
- const mockLocation: Location = {
- getURL: () => '',
- formatURL: (url: string) => url,
- implementation: 'none',
- rootURL: '/',
- };
-
- const result = getLocationURL(mockLocation);
- assert.strictEqual(
- result,
- '',
- 'Should return empty string when URL is empty',
- );
- });
-
- test('getLocationURL handles custom rootURL for hash location', function (this: SentryTestContext, assert) {
- // Test with non-root rootURL
- const mockLocation: Location = {
- getURL: () => '#/test-route',
- formatURL: (url: string) => url,
- rootURL: '/my-app/',
- };
-
- const result = getLocationURL(mockLocation);
- assert.strictEqual(
- result,
- '/my-app/#/test-route',
- 'Should prepend custom rootURL to hash URL when implementation is not set',
- );
- });
-
- test('getLocationURL handles location without getURL method', function (this: SentryTestContext, assert) {
- // This simulates an incomplete location object
- const mockLocation: Location = {
- formatURL: (url: string) => url,
- rootURL: '/',
- };
-
- const result = getLocationURL(mockLocation);
- assert.strictEqual(
- result,
- '',
- 'Should return empty string when getURL is not available',
- );
- });
-
- test('getLocationURL handles location without formatURL method', function (this: SentryTestContext, assert) {
- // This simulates an incomplete location object
- const mockLocation: Location = {
- getURL: () => '#/test-route',
- rootURL: '/',
- };
-
- const result = getLocationURL(mockLocation);
- assert.strictEqual(
- result,
- '',
- 'Should return empty string when formatURL is not available',
- );
- });
-});
diff --git a/packages/ember/tsconfig.json b/packages/ember/tsconfig.json
index 4162dc6fb5b3..87e0120353ab 100644
--- a/packages/ember/tsconfig.json
+++ b/packages/ember/tsconfig.json
@@ -5,19 +5,9 @@
*/
{
"extends": "@ember/app-tsconfig",
- "include": [
- "src/**/*",
- "tests/**/*",
- "unpublished-development-types/**/*",
- "demo-app/**/*"
- ],
+ "include": ["src/**/*", "tests/**/*", "unpublished-development-types/**/*"],
"compilerOptions": {
"rootDir": ".",
- "types": [
- "ember-source/types",
- "vite/client",
- "@embroider/core/virtual",
- "@glint/ember-tsc/types"
- ]
+ "types": ["ember-source/types", "vite/client", "@embroider/core/virtual", "@glint/ember-tsc/types"]
}
}
diff --git a/packages/ember/vite.config.mjs b/packages/ember/vite.config.mjs
index b50ac32a679e..fb13286babd4 100644
--- a/packages/ember/vite.config.mjs
+++ b/packages/ember/vite.config.mjs
@@ -1,49 +1,14 @@
import { defineConfig } from 'vite';
-import { extensions, ember, classicEmberSupport } from '@embroider/vite';
+import { extensions, ember } from '@embroider/vite';
import { babel } from '@rollup/plugin-babel';
-import { resolve, dirname } from 'node:path';
-import { fileURLToPath } from 'node:url';
-
-const __dirname = dirname(fileURLToPath(import.meta.url));
-
-// For scenario testing
-const isCompat = Boolean(process.env.ENABLE_COMPAT_BUILD);
export default defineConfig({
plugins: [
- ...(isCompat ? [classicEmberSupport()] : []),
ember(),
babel({
babelHelpers: 'inline',
extensions,
}),
],
- resolve: {
- // Monorepo workaround: in the sentry-javascript monorepo, @sentry/* packages
- // resolve to workspace symlinks (raw TS sources). We alias them to either the
- // built dist/ or npm-downloaded copies so Vite can bundle the test app.
- // This section can be removed if the addon is ever extracted to its own repo.
- alias: {
- '@sentry/ember': resolve(__dirname, 'dist/index.js'),
- '@sentry/browser': resolve(__dirname, '.npm-deps/browser'),
- '@sentry/core': resolve(__dirname, '.npm-deps/core'),
- '@sentry-internal/browser-utils': resolve(
- __dirname,
- '.npm-deps/browser-utils',
- ),
- '@sentry-internal/feedback': resolve(__dirname, '.npm-deps/feedback'),
- '@sentry-internal/replay': resolve(__dirname, '.npm-deps/replay'),
- '@sentry-internal/replay-canvas': resolve(
- __dirname,
- '.npm-deps/replay-canvas',
- ),
- },
- },
- build: {
- rollupOptions: {
- input: {
- tests: 'tests/index.html',
- },
- },
- },
+ build: {},
});
diff --git a/yarn.lock b/yarn.lock
index c9da68262465..37368e75cce7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3409,7 +3409,7 @@
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.6.tgz#d267a43cb1836dc4d182cce93ae75ba954ef6d2b"
integrity sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==
-"@babel/runtime@^7.28.3", "@babel/runtime@^7.29.2":
+"@babel/runtime@^7.28.3":
version "7.29.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.29.2.tgz#9a6e2d05f4b6692e1801cd4fb176ad823930ed5e"
integrity sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==
@@ -3791,26 +3791,6 @@
resolved "https://registry.yarnpkg.com/@ember/library-tsconfig/-/library-tsconfig-2.0.0.tgz#c3f631a3c2316bdd0a8b5913d7c38862a452df22"
integrity sha512-DTGt9TYZ3bhObUviQXx4C0v46oWM7HsRrUTbgONw2QBhJVHlmXA89uXenlvuqVrCQkA0g5kz7wwyOlcjIZ8h0w==
-"@ember/test-helpers@^5.4.2":
- version "5.4.2"
- resolved "https://registry.yarnpkg.com/@ember/test-helpers/-/test-helpers-5.4.2.tgz#828d38557a1c7a994ec5f8cb6318f743a768d837"
- integrity sha512-ZT++x8DbixXgvxO00J064rzNcsn9WycMPisNvee6dg9u6G4Z1yx0Hc8HqUFBJP7NyxVKZCokHlRWRQuz9S6wvQ==
- dependencies:
- "@ember/test-waiters" "^3.1.0 || ^4.0.0"
- "@embroider/addon-shim" "^1.10.2"
- "@embroider/macros" "^1.20.2"
- "@simple-dom/interface" "^1.4.0"
- decorator-transforms "^2.0.0"
- dom-element-descriptors "^0.5.0"
-
-"@ember/test-waiters@^3.1.0 || ^4.0.0", "@ember/test-waiters@^4.1.1":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@ember/test-waiters/-/test-waiters-4.1.1.tgz#f92747479845c52e3ec00fe0138c0ed19b0bbb2f"
- integrity sha512-HbK70JYCDJcGI0CrwcbjeL2QHAn0HLwa3oGep7mr6l/yO95U7JYA8VN+/9VTsWJTmKueLtWayUqEmGS3a3mVOg==
- dependencies:
- "@embroider/addon-shim" "^1.9.0"
- "@embroider/macros" "^1.16.9"
-
"@embroider/addon-dev@^8.3.0":
version "8.3.0"
resolved "https://registry.yarnpkg.com/@embroider/addon-dev/-/addon-dev-8.3.0.tgz#9a8c4ed0297478081164c5b66f3c731a9f15ee42"
@@ -3827,7 +3807,7 @@
walk-sync "^3.0.0"
yargs "^17.0.1"
-"@embroider/addon-shim@^1.10.2", "@embroider/addon-shim@^1.9.0":
+"@embroider/addon-shim@^1.10.2":
version "1.10.2"
resolved "https://registry.yarnpkg.com/@embroider/addon-shim/-/addon-shim-1.10.2.tgz#5164c65de0fd242422594c2f94b3c5eab4ab8e36"
integrity sha512-EfI9cJ5/3QSUJtwm7x1MXrx3TEa2p7RNgSHefy7fvGm8/DP1xUFL25nST1NaHbHcqR1UhMlrTtv5iUIDoVzeQQ==
@@ -3837,16 +3817,6 @@
common-ancestor-path "^1.0.1"
semver "^7.3.8"
-"@embroider/addon-shim@^1.8.7", "@embroider/addon-shim@^1.8.9":
- version "1.8.9"
- resolved "https://registry.yarnpkg.com/@embroider/addon-shim/-/addon-shim-1.8.9.tgz#ef37eba069d391b2d2a80aa62880c469051c4d43"
- integrity sha512-qyN64T1jMHZ99ihlk7VFHCWHYZHLE1DOdHi0J7lmn5waV1DoW7gD8JLi1i7FregzXtKhbDc7shyEmTmWPTs8MQ==
- dependencies:
- "@embroider/shared-internals" "^2.6.0"
- broccoli-funnel "^3.0.8"
- common-ancestor-path "^1.0.1"
- semver "^7.3.8"
-
"@embroider/compat@^4.1.17":
version "4.1.18"
resolved "https://registry.yarnpkg.com/@embroider/compat/-/compat-4.1.18.tgz#0ab61f461cbe62fc738efd509f4105122453eec5"
@@ -3929,7 +3899,7 @@
typescript-memoize "^1.0.1"
walk-sync "^3.0.0"
-"@embroider/macros@1.20.2", "@embroider/macros@^1.16.12", "@embroider/macros@^1.16.9", "@embroider/macros@^1.20.2":
+"@embroider/macros@1.20.2", "@embroider/macros@^1.20.2":
version "1.20.2"
resolved "https://registry.yarnpkg.com/@embroider/macros/-/macros-1.20.2.tgz#e232ca61354f5001b29cda6030ebcd52e4b0023b"
integrity sha512-WJWSkG9vIL0s93vKwtNFqqAOCOflNkWNpqsC7VAqXeeTKNpCc7wtdOhPkNGJpb52CEt7vlQ5R/zMyCfGAB7MEA==
@@ -3970,24 +3940,6 @@
semver "^7.3.5"
typescript-memoize "^1.0.1"
-"@embroider/shared-internals@^2.6.0":
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/@embroider/shared-internals/-/shared-internals-2.8.1.tgz#2aecff7324299f1e5fe563be7ee9882ee5566bcc"
- integrity sha512-zi0CENFD1e0DH7c9M/rNKJnFnt2c3+736J3lguBddZdmaIV6Cb8l3HQSkskSW5O4ady+SavemLKO3hCjQQJBIw==
- dependencies:
- babel-import-util "^2.0.0"
- debug "^4.3.2"
- ember-rfc176-data "^0.3.17"
- fs-extra "^9.1.0"
- is-subdir "^1.2.0"
- js-string-escape "^1.0.1"
- lodash "^4.17.21"
- minimatch "^3.0.4"
- pkg-entry-points "^1.1.0"
- resolve-package-path "^4.0.1"
- semver "^7.3.5"
- typescript-memoize "^1.0.1"
-
"@embroider/vite@^1.7.2":
version "1.7.2"
resolved "https://registry.yarnpkg.com/@embroider/vite/-/vite-1.7.2.tgz#7ff698b685bab03d5e13f12047fd9319c4063b94"
@@ -4009,14 +3961,6 @@
source-map-url "^0.4.1"
terser "^5.7.0"
-"@emnapi/core@1.10.0":
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.10.0.tgz#380ccc8f2412ea22d1d972df7f8ee23a3b9c7467"
- integrity sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==
- dependencies:
- "@emnapi/wasi-threads" "1.2.1"
- tslib "^2.4.0"
-
"@emnapi/core@1.9.2", "@emnapi/core@^1.1.0", "@emnapi/core@^1.4.3":
version "1.9.2"
resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.9.2.tgz#3870265ecffc7352d01ead62d8d83d8358a2d034"
@@ -4025,13 +3969,6 @@
"@emnapi/wasi-threads" "1.2.1"
tslib "^2.4.0"
-"@emnapi/runtime@1.10.0":
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.10.0.tgz#4b260c0d3534204e98c6110b8db1a987d26ec87c"
- integrity sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==
- dependencies:
- tslib "^2.4.0"
-
"@emnapi/runtime@1.9.2", "@emnapi/runtime@^1.1.0", "@emnapi/runtime@^1.4.3", "@emnapi/runtime@^1.7.0":
version "1.9.2"
resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.9.2.tgz#8b469a3db160817cadb1de9050211a9d1ea84fa2"
@@ -5167,13 +5104,6 @@
resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz#04d90d5752b4ce65d2b6ac25eba08ff7624fe07c"
integrity sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==
-"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.5.0", "@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1":
- version "4.9.1"
- resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595"
- integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==
- dependencies:
- eslint-visitor-keys "^3.4.3"
-
"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3"
@@ -5181,34 +5111,11 @@
dependencies:
eslint-visitor-keys "^3.4.3"
-"@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.12.2", "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0", "@eslint-community/regexpp@^4.6.1":
+"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0", "@eslint-community/regexpp@^4.6.1":
version "4.12.2"
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b"
integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==
-"@eslint/config-array@^0.21.2":
- version "0.21.2"
- resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.2.tgz#f29e22057ad5316cf23836cee9a34c81fffcb7e6"
- integrity sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==
- dependencies:
- "@eslint/object-schema" "^2.1.7"
- debug "^4.3.1"
- minimatch "^3.1.5"
-
-"@eslint/config-helpers@^0.4.2":
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda"
- integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==
- dependencies:
- "@eslint/core" "^0.17.0"
-
-"@eslint/core@^0.17.0":
- version "0.17.0"
- resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c"
- integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==
- dependencies:
- "@types/json-schema" "^7.0.15"
-
"@eslint/eslintrc@^2.1.4":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
@@ -5224,44 +5131,11 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/eslintrc@^3.3.5":
- version "3.3.5"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.5.tgz#c131793cfc1a7b96f24a83e0a8bbd4b881558c60"
- integrity sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==
- dependencies:
- ajv "^6.14.0"
- debug "^4.3.2"
- espree "^10.0.1"
- globals "^14.0.0"
- ignore "^5.2.0"
- import-fresh "^3.2.1"
- js-yaml "^4.1.1"
- minimatch "^3.1.5"
- strip-json-comments "^3.1.1"
-
"@eslint/js@8.57.0":
version "8.57.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
-"@eslint/js@9.39.4", "@eslint/js@^9.39.4":
- version "9.39.4"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.4.tgz#a3f83bfc6fd9bf33a853dfacd0b49b398eb596c1"
- integrity sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==
-
-"@eslint/object-schema@^2.1.7":
- version "2.1.7"
- resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad"
- integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==
-
-"@eslint/plugin-kit@^0.4.1":
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2"
- integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==
- dependencies:
- "@eslint/core" "^0.17.0"
- levn "^0.4.1"
-
"@fastify/busboy@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8"
@@ -5282,15 +5156,7 @@
resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
-"@glimmer/component@^2.1.1":
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/@glimmer/component/-/component-2.1.1.tgz#aa80876d601a1639655ffd10a54229f8de07bdd9"
- integrity sha512-zFZFaMbWy+9WOcDg/kCgrkGgqkLT39EE4FgyFD0MIkQO5coQsrRZyLsiBu1tbchyM+8hT8jAv+EQVUd8u+MdSQ==
- dependencies:
- "@embroider/addon-shim" "^1.10.2"
- "@glimmer/env" "0.1.7"
-
-"@glimmer/env@0.1.7", "@glimmer/env@^0.1.7":
+"@glimmer/env@^0.1.7":
version "0.1.7"
resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07"
integrity sha1-/S0rVakCnGs3psk16MiHGucN+gc=
@@ -5328,7 +5194,7 @@
dependencies:
"@glimmer/interfaces" "0.94.6"
-"@glint/ember-tsc@1.5.0", "@glint/ember-tsc@^1.5.0":
+"@glint/ember-tsc@^1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@glint/ember-tsc/-/ember-tsc-1.5.0.tgz#ae4d2cea1b253e3af6f80171c76110bf7afed0ed"
integrity sha512-mMAG91QyzKQvklnoQFy5orNA4gYU2LPQlPHUbJnuAHJ0c5pwyUO/rjseudFXAWRA5F8cQmNLqtximnLTvHSMzw==
@@ -5350,22 +5216,11 @@
vscode-languageserver-textdocument "^1.0.12"
vscode-uri "^3.1.0"
-"@glint/template@1.7.7", "@glint/template@^1.7.7":
+"@glint/template@1.7.7":
version "1.7.7"
resolved "https://registry.yarnpkg.com/@glint/template/-/template-1.7.7.tgz#d1ab3cf490c5308cc6d744eb625afa8b16558c48"
integrity sha512-jcPdQ3A6cXo5h9RBi0tK4/o5qNn7868Y8xpkwWQNPAd8xQKuRKmG9dGJwUycXvtqISzfrnL1p3MQr3hYN/Ua6Q==
-"@glint/tsserver-plugin@^2.4.0":
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/@glint/tsserver-plugin/-/tsserver-plugin-2.4.0.tgz#4b450532ce021bb38edba5d4e0aa6c85399ce4f7"
- integrity sha512-3HD8v9c2PvIR1dOCJfeilgIjLnSCiBeEgi6NEm14oa90bw0mu9LVB/YO8aCAGWw9A/CERnrV4HZdHqsr3rdySQ==
- dependencies:
- "@glint/ember-tsc" "1.5.0"
- "@volar/language-core" "~2.4.28"
- "@volar/typescript" "~2.4.28"
- jiti "~2.6.1"
- typescript "^5.9.3"
-
"@google-cloud/bigquery@^5.3.0":
version "5.5.0"
resolved "https://registry.yarnpkg.com/@google-cloud/bigquery/-/bigquery-5.5.0.tgz#cfe72f8d056abd9c8289c724150d1082a0a6367d"
@@ -5723,27 +5578,6 @@
resolved "https://registry.yarnpkg.com/@hono/node-server/-/node-server-1.19.14.tgz#e30f844bc77e3ce7be442aac3b1f73ad8b58d181"
integrity sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==
-"@humanfs/core@^0.19.2":
- version "0.19.2"
- resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.2.tgz#a8272ca03b2acf492670222b2320b6c421bfde60"
- integrity sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==
- dependencies:
- "@humanfs/types" "^0.15.0"
-
-"@humanfs/node@^0.16.6":
- version "0.16.8"
- resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.8.tgz#8f800cccc13f4f8cd3116e2d9c0a94939da3e3ed"
- integrity sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==
- dependencies:
- "@humanfs/core" "^0.19.2"
- "@humanfs/types" "^0.15.0"
- "@humanwhocodes/retry" "^0.4.0"
-
-"@humanfs/types@^0.15.0":
- version "0.15.0"
- resolved "https://registry.yarnpkg.com/@humanfs/types/-/types-0.15.0.tgz#f2a09f62012390b2bff3fc6fb248ddec8c09a090"
- integrity sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==
-
"@humanwhocodes/config-array@^0.11.14":
version "0.11.14"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
@@ -5763,11 +5597,6 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
-"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2":
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba"
- integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==
-
"@img/colour@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@img/colour/-/colour-1.0.0.tgz#d2fabb223455a793bf3bf9c70de3d28526aa8311"
@@ -6162,19 +5991,6 @@
resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b"
integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==
-"@lint-todo/utils@^13.1.1":
- version "13.1.1"
- resolved "https://registry.yarnpkg.com/@lint-todo/utils/-/utils-13.1.1.tgz#5c054d61ee037b9e552add118264771122cc1166"
- integrity sha512-F5z53uvRIF4dYfFfJP3a2Cqg+4P1dgJchJsFnsZE0eZp0LK8X7g2J0CsJHRgns+skpXOlM7n5vFGwkWCWj8qJg==
- dependencies:
- "@types/eslint" "^8.4.9"
- find-up "^5.0.0"
- fs-extra "^9.1.0"
- proper-lockfile "^4.1.2"
- slash "^3.0.0"
- tslib "^2.4.1"
- upath "^2.0.1"
-
"@lukeed/csprng@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@lukeed/csprng/-/csprng-1.1.0.tgz#1e3e4bd05c1cc7a0b2ddbd8a03f39f6e4b5e6cfe"
@@ -6260,13 +6076,6 @@
dependencies:
"@tybys/wasm-util" "^0.10.1"
-"@napi-rs/wasm-runtime@^1.1.4":
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz#a46bbfedc29751b7170c5d23bc1d8ee8c7e3c1e1"
- integrity sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==
- dependencies:
- "@tybys/wasm-util" "^0.10.1"
-
"@nestjs/common@^10.0.0":
version "10.4.15"
resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-10.4.15.tgz#27c291466d9100eb86fdbe6f7bbb4d1a6ad55f70"
@@ -6984,11 +6793,6 @@
dependencies:
"@octokit/openapi-types" "^12.11.0"
-"@one-ini/wasm@0.2.1":
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/@one-ini/wasm/-/wasm-0.2.1.tgz#5e85cbb433460b23aaa18ac024cd1a556e9e5df9"
- integrity sha512-TUqERXGNTifZ9y2g3wPxQrw3HpHv/02DsW3D90T9x0hhonrL1ZqpSmNrU2XkoIq0fP1N6gZfVQzy2Fw1ZvGBNg==
-
"@opentelemetry/api-logs@0.207.0":
version "0.207.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.207.0.tgz#ae991c51eedda55af037a3e6fc1ebdb12b289f49"
@@ -7305,155 +7109,66 @@
dependencies:
"@opentelemetry/core" "^2.0.0"
-"@oxc-parser/binding-android-arm-eabi@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.130.0.tgz#55917e12ce2bf91f5d8f7af6fa337511b2ca6278"
- integrity sha512-h/xYU8/7ADWzVSf5I+YalLpj33LOy9CI/zgbJNIZ5eunRBG+Czqa3lZsvuPHHf3rOt6z1c5+UzoxjbAzAvhwVw==
-
-"@oxc-parser/binding-android-arm64@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.130.0.tgz#6a88c34fa1641bff439b4def7e4a86070239ac83"
- integrity sha512-oFWFJrsGv9siFM4HjMqKNB7IuIZD/SMmZdCXl8xyx7lDplGvPKyewpOo272rSWgMXe2Wx7bWI0Yj+gkHv4qbeg==
-
"@oxc-parser/binding-android-arm64@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.76.0.tgz#2bf8524add42f7a399ea0da9ae8e764bb9aeb61b"
integrity sha512-1XJW/16CDmF5bHE7LAyPPmEEVnxSadDgdJz+xiLqBrmC4lfAeuAfRw3HlOygcPGr+AJsbD4Z5sFJMkwjbSZlQg==
-"@oxc-parser/binding-darwin-arm64@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.130.0.tgz#d056a2b3a0100a5610e3014d75fe6d567fc49bd1"
- integrity sha512-sGUzupdTplK9jQg7eJZ878HfEgQjJNBc6dAYVWJ9W5aU+J8rLfRJhTVsKThiu1pNwm6Y1qKCcbC6WhNWSXR3Ig==
-
"@oxc-parser/binding-darwin-arm64@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.76.0.tgz#e253b72b235dd6600449a5907e355f167a92a986"
integrity sha512-yoQwSom8xsB+JdGsPUU0xxmxLKiF2kdlrK7I56WtGKZilixuBf/TmOwNYJYLRWkBoW5l2/pDZOhBm2luwmLiLw==
-"@oxc-parser/binding-darwin-x64@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.130.0.tgz#21340dd67fcdfec7b0be9d4fc6490f84b80cc641"
- integrity sha512-PsB4cdCISbC00Uy8eiD8bc2AkGWjZqrSrJnkBFuG2ptrrf6mZ2F5gLFSjOAVMMgZPg8B1D7OydJwLWSfyI2Plg==
-
"@oxc-parser/binding-darwin-x64@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.76.0.tgz#4490fd095ed0564f48938ca4f8cf3f00f7afeb1a"
integrity sha512-uRIopPLvr3pf2Xj7f5LKyCuqzIU6zOS+zEIR8UDYhcgJyZHnvBkfrYnfcztyIcrGdQehrFUi3uplmI09E7RdiQ==
-"@oxc-parser/binding-freebsd-x64@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.130.0.tgz#08db5e6dd718b4e7e7c98e5e2ca7bb538fd460a6"
- integrity sha512-DgABp3l38hS77JbXCV4qk1+n6DPym5u8zzwuweokezm2tX194nDSJDENbDRECxVsiNbprKATLbk+Z5wlHT0OHw==
-
"@oxc-parser/binding-freebsd-x64@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.76.0.tgz#b1a448bfc52bec9523a7aa3958476ed8f391c367"
integrity sha512-a0EOFvnOd2FqmDSvH6uWLROSlU6KV/JDKbsYDA/zRLyKcG6HCsmFnPsp8iV7/xr9WMbNgyJi6R5IMpePQlUq7Q==
-"@oxc-parser/binding-linux-arm-gnueabihf@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.130.0.tgz#3ad94b6f0b763dec37ee0412905dad8e34c1a5a0"
- integrity sha512-4Kn3CTEmwFrzhTSC/JuUW16qovmaMdX7jeSKbL8w0pLtLww7To1a2XJi9Z5uD8QWUkfUHhqfV+VD6dVzBnWzoA==
-
"@oxc-parser/binding-linux-arm-gnueabihf@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.76.0.tgz#4a8f1fc55582bc2a045dd79242d4fb18f1af2560"
integrity sha512-ikRYDHL3fOdZwfJKmcdqjlLgkeNZ3Ez0qM8wAev5zlHZ+lY/Ig7qG5SCqPlvuTu+nNQ6zrFFaKvvt69EBKXU/g==
-"@oxc-parser/binding-linux-arm-musleabihf@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.130.0.tgz#f2604ea11032989d779a22c47b8a636f91d2dd44"
- integrity sha512-D35KZM3F4rRu1uAFKyBlg3Gaf/ybCjyaPR1hfgvk5ex8NtcTmRgc0JgSighEyNg96TPrFhemFba68SZuxaha8w==
-
"@oxc-parser/binding-linux-arm-musleabihf@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.76.0.tgz#bcd4f29ce158b1a817178c2e6962d1b51e9dc5ae"
integrity sha512-dtRv5J5MRCLR7x39K8ufIIW4svIc7gYFUaI0YFXmmeOBhK/K2t/CkguPnDroKtsmXIPHDRtmJ1JJYzNcgJl6Wg==
-"@oxc-parser/binding-linux-arm64-gnu@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.130.0.tgz#e3e3da7b98a5b8988893cba16cb81e0ee513ed1d"
- integrity sha512-Q9o7oVlo955KHwS8l1u0bCzIx+JsZUA3XToLXC+MsMhye/9LeBQbt84nh120cl2XLy+TEzvugYDiHShg5yaX6Q==
-
"@oxc-parser/binding-linux-arm64-gnu@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.76.0.tgz#a398c29fc1d5a9cf16025a366fd2cca2a0cab097"
integrity sha512-IE4iiiggFH2snagQxHrY5bv6dDpRMMat+vdlMN/ibonA65eOmRLp8VLTXnDiNrcla/itJ1L9qGABHNKU+SnE8g==
-"@oxc-parser/binding-linux-arm64-musl@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.130.0.tgz#97ce15b046257465757e838ce173c09d540e840a"
- integrity sha512-EiJ/gC0ljbcwVpycC8YWw6ggMbtsPX8XMOt0mPx0aqWeMsNR+L9m05Flbvd5T+GlivG+GkSWQL7tM9SRFpM/dw==
-
"@oxc-parser/binding-linux-arm64-musl@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.76.0.tgz#35c3236396a70dfb071f5a92764b23acca9f6357"
integrity sha512-wi9zQPMDHrBuRuT7Iurfidc9qlZh7cKa5vfYzOWNBCaqJdgxmNOFzvYen02wVUxSWGKhpiPHxrPX0jdRyJ8Npg==
-"@oxc-parser/binding-linux-ppc64-gnu@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.130.0.tgz#8c364ef28a2a4f694cc58c4fd951e1710a3703ed"
- integrity sha512-b+h/lsLLurp756dMGizNs5uPaJfyEdWrTcV5t8M609jWm1DEHB1StpRXCkyvwtkJx3m+qL5BNQ0dEKan/4yGFA==
-
-"@oxc-parser/binding-linux-riscv64-gnu@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.130.0.tgz#1085fd4fe2664d6c138463f42a36286e9e70c3f5"
- integrity sha512-O19Cil83XAyjEFfo8WhkMwY58ALqZ7ckjGL+25mjMIuF84urWBeANH0FC8B8BsSSygWU3/1aY3ADdDbp+wlBnw==
-
"@oxc-parser/binding-linux-riscv64-gnu@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.76.0.tgz#0e3e6567e78bcab5f29376d17512c428cdd7db64"
integrity sha512-0tqqu1pqPee2lLGY8vtYlX1L415fFn89e0a3yp4q5N9f03j1rRs0R31qesTm3bt/UK8HYjECZ+56FCVPs2MEMQ==
-"@oxc-parser/binding-linux-riscv64-musl@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.130.0.tgz#de0ea9c5a5dcb1dd2a0db73baab73e2f4e1005cd"
- integrity sha512-BgXRVC0+83n3YzCscLQjj6nbyeBIVeZYPTI4fFMAE4WNm2+4RXhWp03IVizL7esIz36kgmT48aebk1iM+cs8sw==
-
-"@oxc-parser/binding-linux-s390x-gnu@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.130.0.tgz#6e0837ab6b7d1f2462cef3a86953de0288327ac2"
- integrity sha512-6tJz0xvnGhsokE7N1WlUSBXibpYmT9xSJFS1Ce41Km/+8gQvdlW8MLhRv8PD0L7ix8vRG0FDDepp3jdOFzdVdw==
-
"@oxc-parser/binding-linux-s390x-gnu@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.76.0.tgz#a37496f6b9f2976c40daba44e3b521822323d210"
integrity sha512-y36Hh1a5TA+oIGtlc8lT7N9vdHXBlhBetQJW0p457KbiVQ7jF7AZkaPWhESkjHWAsTVKD2OjCa9ZqfaqhSI0FQ==
-"@oxc-parser/binding-linux-x64-gnu@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.130.0.tgz#738e29a90190a0d97e91cb9ed4a94c0f8121a0e3"
- integrity sha512-9aCWj83dp3heTQGmGnZGdIWgxjZrr/7VQ0TGFHH5PKByxJKF2Hcr4qvaSUHhhGEa3MSsDjTL1YDP8RAgdL5/Cg==
-
"@oxc-parser/binding-linux-x64-gnu@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.76.0.tgz#ea13a10abe105f8ef29a36ae0285de7ed69488de"
integrity sha512-7/acaG9htovp3gp/J0kHgbItQTuHctl+rbqPPqZ9DRBYTz8iV8kv3QN8t8Or8i/hOmOjfZp9McDoSU1duoR4/A==
-"@oxc-parser/binding-linux-x64-musl@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.130.0.tgz#127c87488a0d23bc0990346c66ffa6e6f8f82fc8"
- integrity sha512-afXt87aZBqrUVli8TB/I8H1G50RDWcwirjWtXGXYqJ2ZqWEiErH7V72j3LUSDZaivmtu2OLX0KQ/mbhP81mr7A==
-
"@oxc-parser/binding-linux-x64-musl@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.76.0.tgz#6733905918333044865cb4d1e42988741fc54dc0"
integrity sha512-AxFt0reY6Q2rfudABmMTFGR8tFFr58NlH2rRBQgcj+F+iEwgJ+jMwAPhXd2y1I2zaI8GspuahedUYQinqxWqjA==
-"@oxc-parser/binding-openharmony-arm64@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.130.0.tgz#9313e4d25badec37d9c349ecab9692af3c1bf556"
- integrity sha512-I0NCrZV/YZuCGWgqwNN/GO/iXlLF2z+Wgc7u+Aa9N4P51oYeIa0XT+zVBUne4csO9GqxskXgI4g8JzzWGRpfOw==
-
-"@oxc-parser/binding-wasm32-wasi@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.130.0.tgz#9fb2d63b814bb7052774c50cd9b8c19047839a14"
- integrity sha512-sJgQkGaBX0WJvPUDfwciex6IcTk5O5NLQ1bhEb6f3nBruh1GshKMRSMt2bxZlYrgBzjyBbJzsnO+InPG0bg+fA==
- dependencies:
- "@emnapi/core" "1.10.0"
- "@emnapi/runtime" "1.10.0"
- "@napi-rs/wasm-runtime" "^1.1.4"
-
"@oxc-parser/binding-wasm32-wasi@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.76.0.tgz#c47b50591e25b63d6d2ba7c34b5a71fa39c0a608"
@@ -7461,26 +7176,11 @@
dependencies:
"@napi-rs/wasm-runtime" "^0.2.11"
-"@oxc-parser/binding-win32-arm64-msvc@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.130.0.tgz#939e48db2b47c93e7e3d4601c8eb6ff113ecc1db"
- integrity sha512-bjcma99sQrNh6RY4mPO9yTkfxql6TDFoN3HWdK31RCKXwNhcDgJXW/l8PUtzKNiQ+9vpKJfJtQq+LklBuxSOBA==
-
"@oxc-parser/binding-win32-arm64-msvc@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.76.0.tgz#3bd03fe4bfe792e9de2e6c492036c85314593b05"
integrity sha512-G7ZlEWcb2hNwCK3qalzqJoyB6HaTigQ/GEa7CU8sAJ/WwMdG/NnPqiC9IqpEAEy1ARSo4XMALfKbKNuqbSs5mg==
-"@oxc-parser/binding-win32-ia32-msvc@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.130.0.tgz#ed50388593afc1b97f57d598edf4d51fe3e6d6fa"
- integrity sha512-hRYbv6HhpSTzT4xTiIkadLI7upLQxuOdLPR/9nL1fTjwhgutBTPXrwaAPb/jTFVx6/8C7Jb5HcUKhmNwloTbFA==
-
-"@oxc-parser/binding-win32-x64-msvc@0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.130.0.tgz#e405110c0812d028c69775c35c6fb235f0fdff55"
- integrity sha512-RBpA9TsRucJq6HNVNCFF1iKg+QeTkLdZf7hi4xaOGCPvMZWvDHjQgSOEZMUpuW4JNciHbxNhLEYmz5CVygjVGQ==
-
"@oxc-parser/binding-win32-x64-msvc@0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.76.0.tgz#3dbef82283f871c9cb59325c9daf4f740d11a6e9"
@@ -7491,16 +7191,6 @@
resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.124.0.tgz#1dfd7b3fbb98febc2f91b505f48c940db73c8701"
integrity sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==
-"@oxc-project/types@=0.129.0":
- version "0.129.0"
- resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.129.0.tgz#8e6362388ce6092feafd14f3a73ae6407b1285d9"
- integrity sha512-3oz8m3FGdr2nDXVqmFUw7jolKliC4MoyXYIG2c7gpjBnzUWQpUGIYcXYKxTdTi+N2jusvt610ckTMkxdwHkYEg==
-
-"@oxc-project/types@^0.130.0":
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.130.0.tgz#a7825148711dc28805c46cfc21d94b63a4d41e88"
- integrity sha512-ibD2usx9JRu7f5pu2tMKMI4cpA4NgXJQoYRP4pQ7Pxmn1l6k/53qWtQWZayhYy3X4QZkt90Ot+mJEaeXouio6Q==
-
"@oxc-project/types@^0.76.0":
version "0.76.0"
resolved "https://registry.yarnpkg.com/@oxc-project/types/-/types-0.76.0.tgz#89ae800d774ccb344278fc17ab6c15348da8b995"
@@ -8039,11 +7729,6 @@
resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==
-"@publint/pack@^0.1.4":
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/@publint/pack/-/pack-0.1.4.tgz#866a82a1a8ab52329ae08baec6f3969ed99a30bf"
- integrity sha512-HDVTWq3H0uTXiU0eeSQntcVUTPP3GamzeXI41+x7uU9J65JgWQh3qWZHblR1i0npXfFtF+mxBiU2nJH8znxWnQ==
-
"@react-router/dev@^7.13.0":
version "7.13.0"
resolved "https://registry.yarnpkg.com/@react-router/dev/-/dev-7.13.0.tgz#e66b09dc0a4c13a861e924f43ebb61078d79942f"
@@ -8243,135 +7928,66 @@
dependencies:
web-streams-polyfill "^3.1.1"
-"@rolldown/binding-android-arm64@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0.tgz#aefa7afdcabc1269b1933d50cad31013cb697143"
- integrity sha512-TWMZnRLMe63C2Lhyicviu7ZHaU4kxa6PS3rofvc9GmcvptzNN11BcfQ4Sl7MwTOsisQoa2keB/EBdNCAnUo8vA==
-
"@rolldown/binding-android-arm64@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.15.tgz#ca20574c469ade7b941f90c9af5e83e7c67f06b7"
integrity sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==
-"@rolldown/binding-darwin-arm64@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0.tgz#83e708d97f9f8f3791e79ef8c24d5fcc5e8f29df"
- integrity sha512-6XcD+8k0gPVItNagEw78/qqcBDwKcwDYS8V2hRmVsfUSIrd8cWe/CBvRDI5toqFyPfj+FJr6t8U6Xj2P2prEew==
-
"@rolldown/binding-darwin-arm64@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.15.tgz#ce2c5c7fc4958dfc94783dc09b3d09f3c2e1d072"
integrity sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==
-"@rolldown/binding-darwin-x64@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0.tgz#4649bb4db634850f6de2b2f1ec37fc39a18adcf8"
- integrity sha512-iN/tWVXRQDWvmZlKdceP1Dwug9GDpEymhb9p4xnEe6zvCg5lFmzVljl+1qR1NVx3yfGpr2Na+CuLmv5IU8uzfQ==
-
"@rolldown/binding-darwin-x64@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.15.tgz#251ecdf1fdb751031cb6486907c105daaf9dab21"
integrity sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==
-"@rolldown/binding-freebsd-x64@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0.tgz#2b0e50fdc926fa9680dca9d6acc4c3729b7df899"
- integrity sha512-jjQMDvvwSOuhOwMszD/klSOjyWMM3zI64hWTj9KT5x4MxRbZAf+7vLQ6qouRhtsLVFHr3f0ILaJAfgENPiQdAQ==
-
"@rolldown/binding-freebsd-x64@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.15.tgz#dbcfe95f409bf671a77bd83bff0fdc877d217728"
integrity sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==
-"@rolldown/binding-linux-arm-gnueabihf@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0.tgz#8fd160371f4c160a2fa52de8f9ede51fbd43fc5b"
- integrity sha512-d//Dtg2x6/m3mbV64yUGNnDGNZaDGRpDLLNGerHQUVObuNaIQaaDp25yUiqGXtHEXX+NP2d0wAlmKgpYgIAJ2A==
-
"@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.15.tgz#ea002b45445be6f9ed1883a834b335bc2ccd510f"
integrity sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==
-"@rolldown/binding-linux-arm64-gnu@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0.tgz#9915488c96cb0fc49a70bd27c030def3cbbc8cbb"
- integrity sha512-n7Ofp0mx+aB2cC+Sdy5YtMnXtY9lchnHbY+3Yt0uq9JsWQExf4f5Whu0tK0R8Jdc9S6RchTHjIFY7uc92puOVQ==
-
"@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.15.tgz#12b96e7e7821a9dc2cd5c670ad56882987ed5c62"
integrity sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==
-"@rolldown/binding-linux-arm64-musl@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0.tgz#74bb160f2747404eed2f917bea01b0548c783848"
- integrity sha512-EIVjy2cgd7uuMMo94FVkBp7F6DhcZAUwNURkSG3RwUmvAXR6s0ISxM81U+IydcZByPG0pZIHsf1b6kTxoFDgJA==
-
"@rolldown/binding-linux-arm64-musl@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.15.tgz#738b0f62f0b65bf676dfe48595017f1883859d1f"
integrity sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==
-"@rolldown/binding-linux-ppc64-gnu@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0.tgz#fdc876160b6738ff34a7d719c4ea42edb38a70bc"
- integrity sha512-JEwwOPcwTLAcpDQlqSmjEmfs63xJnSiUNIGvLcDLUHCWK4XowpS/7c7tUsUH6uT/ct6bMUTdXKfI8967FYj6mg==
-
"@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.15.tgz#3088b9fbc2783033985b558316f87f39281bc533"
integrity sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==
-"@rolldown/binding-linux-s390x-gnu@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0.tgz#39668ce16e8c2ac16308fdb7116ebd5b44acab65"
- integrity sha512-0wjCFhLrihtAubnT9iA0N++0pSV0z5Hg7tNGdNJ4RFaINceHadoF+kiFGyY1qSSNVIAZtLotG8Ju1bgDPkjnFA==
-
"@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.15.tgz#ac0aa6f1b72e3151d56c43145a71c745cf862a9a"
integrity sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==
-"@rolldown/binding-linux-x64-gnu@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0.tgz#02a7e4a0fa3af90bf4e937ecd1f4c0dc07ab2397"
- integrity sha512-Dfn7iak9BcMMePxcoJfpSbWqnEyrp/dRF63/8qW/eHBdOZov6x5aShLLEYGYdIeSJ6vMLK/XCVB+lGIxm41bQA==
-
"@rolldown/binding-linux-x64-gnu@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.15.tgz#b8cf27aa5be6da641c22dad5665d0240551d2dec"
integrity sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==
-"@rolldown/binding-linux-x64-musl@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0.tgz#610a08a3055d21f287c550e16a5541501883f2b1"
- integrity sha512-5/utzzDmD/pD/bmuaUcbTf/sZYy0aztwIVlfpoW1fTjCZ0BaPOMVWGZL1zvgxyi7ZIVYWlxKONHmSbHuiOh8Jw==
-
"@rolldown/binding-linux-x64-musl@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.15.tgz#4531f9eca77963935026634ba9b61c2535340534"
integrity sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==
-"@rolldown/binding-openharmony-arm64@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0.tgz#62e5da4d623b446a57c9f472b598fedaf5289a3d"
- integrity sha512-ouJs8VcUomfLfpbUECqFMRqdV4x6aeAK3MA4m6vTrJJjKyWTV5KnxZx7Jd9G+GlDaQQxubcba00x16OyJ1meig==
-
"@rolldown/binding-openharmony-arm64@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.15.tgz#66ff691a65f9325171bced98e353b4cc4b0095c3"
integrity sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==
-"@rolldown/binding-wasm32-wasi@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0.tgz#57191a2986e7f43a920fc618da92f29b0b8123c9"
- integrity sha512-E+oHKGiDA+lsKMmFtffDDw91EryDT7uJocrIuCHqhm6bCTM6xFK+3gaCkYOHfPwQr0cCNarSM2xaELoQDz9jJg==
- dependencies:
- "@emnapi/core" "1.10.0"
- "@emnapi/runtime" "1.10.0"
- "@napi-rs/wasm-runtime" "^1.1.4"
-
"@rolldown/binding-wasm32-wasi@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.15.tgz#7db6c90aa510eef65d7d0f14e8ca23775e8e5eee"
@@ -8381,31 +7997,16 @@
"@emnapi/runtime" "1.9.2"
"@napi-rs/wasm-runtime" "^1.1.3"
-"@rolldown/binding-win32-arm64-msvc@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0.tgz#77faf1e28521411bd0be6f4e55f3c4c5f17cd619"
- integrity sha512-yYK02n8Rngo+gbm1y6G0+7jk1sJ/2Wt7K0me0Y7k/ErBpyf+LJ2gFpqWVTcRV1rUepBlQRmpgWkTQCiiwrK0Ow==
-
"@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.15.tgz#81f9097abbd4493cc13373b26f5a3da8461dbb47"
integrity sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==
-"@rolldown/binding-win32-x64-msvc@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0.tgz#980a8f9983b0bd3d35ee867ade85cb020eca27ba"
- integrity sha512-14bpChMahXRRXiTwahSl+zzHPW6qQTXtkMuJBFlbo+pqSAews2d4BdCSHfrJ/MBsCZtpmTafsY+1QhBzitcmdg==
-
"@rolldown/binding-win32-x64-msvc@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.15.tgz#cef11bc89149f3a77771727be75490fbb13ae193"
integrity sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==
-"@rolldown/pluginutils@1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0.tgz#d660b953fd500d552fc17213f279e29037f08c2d"
- integrity sha512-aKs/3GSWyV0mrhNmt/96/Z3yczC3yvrzYATCiCXQebBsGyYzjNdUphRVLeJQ67ySKVXRfMxt2lm12pmXvbPFQQ==
-
"@rolldown/pluginutils@1.0.0-rc.15":
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.15.tgz#e75d7731593e195d23710f9ff49bf5c745c96682"
@@ -8735,25 +8336,6 @@
"@angular-devkit/schematics" "14.2.13"
jsonc-parser "3.1.0"
-"@sec-ant/readable-stream@^0.4.1":
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c"
- integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==
-
-"@sentry-internal/browser-utils@10.52.0":
- version "10.52.0"
- resolved "https://registry.yarnpkg.com/@sentry-internal/browser-utils/-/browser-utils-10.52.0.tgz#e533b829dfe5959982369f01dc2b8423fcea481d"
- integrity sha512-x/yEPZdpH6NGQeoeQnV9tj8reAH8twNttiltGZl2o8Rk7sQeUfe7E8yuYP2XbJ2RqyZK5qRS3COrNyMPzf6KFA==
- dependencies:
- "@sentry/core" "10.52.0"
-
-"@sentry-internal/feedback@10.52.0":
- version "10.52.0"
- resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-10.52.0.tgz#4c08cf86dd2a82bfc57c070a9d5636d4d7af8658"
- integrity sha512-5kAn1W8ZvCuHtEHXpq6iRkUMdNCilwww+YxaN2yofVrCivAbB3Ha5JJUMqmWOPW0pC27zGYmoJMIDvG+PczUxA==
- dependencies:
- "@sentry/core" "10.52.0"
-
"@sentry-internal/node-cpu-profiler@^2.4.0":
version "2.4.0"
resolved "https://registry.yarnpkg.com/@sentry-internal/node-cpu-profiler/-/node-cpu-profiler-2.4.0.tgz#3f14cb7c3637b48e87056c2a5787c5e0aa90b987"
@@ -8770,22 +8352,6 @@
detect-libc "^2.0.4"
node-abi "^3.89.0"
-"@sentry-internal/replay-canvas@10.52.0":
- version "10.52.0"
- resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-10.52.0.tgz#0506c91ec1d5903196aa26bd28ee06108fe17bca"
- integrity sha512-BI5ie4dxPuUJ344CXVSnAxY1xZCbghglPSCIlTOYODpR9so9yo5IZh+Mwspt0oWsUMaxWJiQSNYlbPWi7WDavg==
- dependencies:
- "@sentry-internal/replay" "10.52.0"
- "@sentry/core" "10.52.0"
-
-"@sentry-internal/replay@10.52.0":
- version "10.52.0"
- resolved "https://registry.yarnpkg.com/@sentry-internal/replay/-/replay-10.52.0.tgz#332b3a9e4116c42188477229af2824c7c73c4271"
- integrity sha512-diywyuc/H7VTUR+W5ryVmLF+0X4UP1OskMqb6V8RSAvJHcj2JmIm7uP+Fc6ACTno+b6AUShwT/L4xVXzO6X9Cw==
- dependencies:
- "@sentry-internal/browser-utils" "10.52.0"
- "@sentry/core" "10.52.0"
-
"@sentry-internal/rrdom@2.42.0":
version "2.42.0"
resolved "https://registry.yarnpkg.com/@sentry-internal/rrdom/-/rrdom-2.42.0.tgz#fc26d88d01edce7580b66f255b8ad65816829aaa"
@@ -8825,17 +8391,6 @@
resolved "https://registry.yarnpkg.com/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-5.3.0.tgz#356218f747969f9af970987dcf0f17ec81d6e50c"
integrity sha512-p4q8gn8wcFqZGP/s2MnJCAAd8fTikaU6A0mM97RDHQgStcrYiaS0Sc5zUNfb1V+UOLPuvdEdL6MwyxfzjYJQTA==
-"@sentry/browser@10.52.0":
- version "10.52.0"
- resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-10.52.0.tgz#5ed5e29e1dffc509c6cf95495c96674a9ea1b25c"
- integrity sha512-ijL9jN86oXwXQWbwhPlEb70ODJSEmjxQEQdnZkC4gDWbjswcwvRsVJPYk+1xl2ir2iZixRIHipVxDcLwian35g==
- dependencies:
- "@sentry-internal/browser-utils" "10.52.0"
- "@sentry-internal/feedback" "10.52.0"
- "@sentry-internal/replay" "10.52.0"
- "@sentry-internal/replay-canvas" "10.52.0"
- "@sentry/core" "10.52.0"
-
"@sentry/bundler-plugin-core@5.3.0", "@sentry/bundler-plugin-core@^5.3.0":
version "5.3.0"
resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-5.3.0.tgz#2772866dcb076c36721d2acab1010a6fc0b3ff2f"
@@ -8909,11 +8464,6 @@
"@sentry/cli-win32-i686" "2.58.5"
"@sentry/cli-win32-x64" "2.58.5"
-"@sentry/core@10.52.0":
- version "10.52.0"
- resolved "https://registry.yarnpkg.com/@sentry/core/-/core-10.52.0.tgz#13842ef35db9909d64770d84656704cb929de445"
- integrity sha512-VA/kAqLhkMnRWY2RXdBLyTemR9D4m7MVRy/gyapoq9yvllVPx9WXbvKgnMP2LQp7mFgT/oLFvw58aQKaYTGn3A==
-
"@sentry/rollup-plugin@5.3.0", "@sentry/rollup-plugin@^5.3.0":
version "5.3.0"
resolved "https://registry.yarnpkg.com/@sentry/rollup-plugin/-/rollup-plugin-5.3.0.tgz#1dbfbee8d5d2a0f6acc245f4dd05e46c66291710"
@@ -8993,13 +8543,6 @@
resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224"
integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==
-"@simple-dom/document@^1.4.0":
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/@simple-dom/document/-/document-1.4.0.tgz#af60855f957f284d436983798ef1006cca1a1678"
- integrity sha512-/RUeVH4kuD3rzo5/91+h4Z1meLSLP66eXqpVAw/4aZmYozkeqUkMprq0znL4psX/adEed5cBgiNJcfMz/eKZLg==
- dependencies:
- "@simple-dom/interface" "^1.4.0"
-
"@simple-dom/interface@^1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@simple-dom/interface/-/interface-1.4.0.tgz#e8feea579232017f89b0138e2726facda6fbb71f"
@@ -9037,28 +8580,6 @@
resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz#abb11d99aeb6d27f1b563c38147a72d50058e339"
integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==
-"@sinonjs/commons@^3.0.1":
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd"
- integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==
- dependencies:
- type-detect "4.0.8"
-
-"@sinonjs/fake-timers@^15.4.0":
- version "15.4.0"
- resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz#5d40c151a9e66075fe4520bec40bccfe54931962"
- integrity sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==
- dependencies:
- "@sinonjs/commons" "^3.0.1"
-
-"@sinonjs/samsam@^10.0.2":
- version "10.0.2"
- resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-10.0.2.tgz#d2cb34f0bcddb955b6971585c2f0334e68a9e66d"
- integrity sha512-8lVwD1Df1BmzoaOLhMcGGcz/Jyr5QY2KSB75/YK1QgKzoabTeLdIVyhXNZK9ojfSKSdirbXqdbsXXqP9/Ve8+A==
- dependencies:
- "@sinonjs/commons" "^3.0.1"
- type-detect "^4.1.0"
-
"@size-limit/esbuild@~12.1.0":
version "12.1.0"
resolved "https://registry.yarnpkg.com/@size-limit/esbuild/-/esbuild-12.1.0.tgz#d0527ee8eed98794966b089c7fe61760cf4e6c7b"
@@ -9580,11 +9101,6 @@
color "^5.0.2"
text-hex "1.0.x"
-"@socket.io/component-emitter@~3.1.0":
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553"
- integrity sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==
-
"@solid-devtools/debugger@^0.28.1":
version "0.28.1"
resolved "https://registry.yarnpkg.com/@solid-devtools/debugger/-/debugger-0.28.1.tgz#5c2e9d533ef65ac9debb4b1c3a625c6494f811c6"
@@ -10313,21 +9829,11 @@
dependencies:
"@types/node" "*"
-"@types/cookie@^0.4.1":
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d"
- integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==
-
"@types/cookie@^0.6.0":
version "0.6.0"
resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5"
integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==
-"@types/cors@^2.8.12":
- version "2.8.12"
- resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080"
- integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==
-
"@types/css-font-loading-module@0.0.7":
version "0.0.7"
resolved "https://registry.yarnpkg.com/@types/css-font-loading-module/-/css-font-loading-module-0.0.7.tgz#2f98ede46acc0975de85c0b7b0ebe06041d24601"
@@ -10366,19 +9872,6 @@
"@types/estree" "*"
"@types/json-schema" "*"
-"@types/eslint@^8.4.9":
- version "8.56.12"
- resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.56.12.tgz#1657c814ffeba4d2f84c0d4ba0f44ca7ea1ca53a"
- integrity sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==
- dependencies:
- "@types/estree" "*"
- "@types/json-schema" "*"
-
-"@types/esrecurse@^4.3.1":
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/@types/esrecurse/-/esrecurse-4.3.1.tgz#6f636af962fbe6191b830bd676ba5986926bccec"
- integrity sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==
-
"@types/estree@*", "@types/estree@1.0.8", "@types/estree@^1.0.0", "@types/estree@^1.0.1", "@types/estree@^1.0.6", "@types/estree@^1.0.8":
version "1.0.8"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
@@ -10617,7 +10110,7 @@
dependencies:
"@types/node" "*"
-"@types/node@*", "@types/node@>=10.0.0", "@types/node@>=13.7.0", "@types/node@>=18":
+"@types/node@*", "@types/node@>=13.7.0", "@types/node@>=18":
version "25.3.3"
resolved "https://registry.yarnpkg.com/@types/node/-/node-25.3.3.tgz#605862544ee7ffd7a936bcbf0135a14012f1e549"
integrity sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==
@@ -10677,11 +10170,6 @@
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1"
integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==
-"@types/qunit@^2.19.13":
- version "2.19.14"
- resolved "https://registry.yarnpkg.com/@types/qunit/-/qunit-2.19.14.tgz#d73ab00eb202b48757cd7d15b65e1de6d142c930"
- integrity sha512-ou2RMtwyDnW1btrMnDMZeL6V5/yRRbuHKrRC6y8IuzDljjVzw6wPCVFb8p4qJD0NkUkf3BdZeJJIBzjK1BUUDQ==
-
"@types/range-parser@*":
version "1.2.3"
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c"
@@ -10791,18 +10279,6 @@
"@types/mime" "*"
"@types/node" "*"
-"@types/sinon@^21.0.1":
- version "21.0.1"
- resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-21.0.1.tgz#f995e2afdf15be832d5f1645803d82a8eb95a1bc"
- integrity sha512-5yoJSqLbjH8T9V2bksgRayuhpZy+723/z6wBOR+Soe4ZlXC0eW8Na71TeaZPUWDQvM7LYKa9UGFc6LRqxiR5fQ==
- dependencies:
- "@types/sinonjs__fake-timers" "*"
-
-"@types/sinonjs__fake-timers@*":
- version "8.1.2"
- resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz#bf2e02a3dbd4aecaf95942ecd99b7402e03fad5e"
- integrity sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==
-
"@types/sockjs@^0.3.33":
version "0.3.36"
resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535"
@@ -10886,20 +10362,6 @@
dependencies:
"@types/yargs-parser" "*"
-"@typescript-eslint/eslint-plugin@8.59.3":
- version "8.59.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.3.tgz#5d6da7e7b236b46452fa00d3904bb6f59615bfde"
- integrity sha512-PwFvSKsXGShKGW6n5bZOhGHEcCZXM8HofLK9fNsEwZXzFRjoY+XT1Vsf1zgyXdwTr0ZYz1/2tkZ0DBTT9jZjhw==
- dependencies:
- "@eslint-community/regexpp" "^4.12.2"
- "@typescript-eslint/scope-manager" "8.59.3"
- "@typescript-eslint/type-utils" "8.59.3"
- "@typescript-eslint/utils" "8.59.3"
- "@typescript-eslint/visitor-keys" "8.59.3"
- ignore "^7.0.5"
- natural-compare "^1.4.0"
- ts-api-utils "^2.5.0"
-
"@typescript-eslint/eslint-plugin@^5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db"
@@ -10916,17 +10378,6 @@
semver "^7.3.7"
tsutils "^3.21.0"
-"@typescript-eslint/parser@8.59.3":
- version "8.59.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.59.3.tgz#f46cbc70ae0a25119ef94eac9ecd46714788e1a1"
- integrity sha512-HPwA+hVkfcriajbNvTmZv4VRauibay+cWArYUYq7u7W7PmGShMxbPxLvrwDme55a6d5alG3nrYfhyJ/G28XlLg==
- dependencies:
- "@typescript-eslint/scope-manager" "8.59.3"
- "@typescript-eslint/types" "8.59.3"
- "@typescript-eslint/typescript-estree" "8.59.3"
- "@typescript-eslint/visitor-keys" "8.59.3"
- debug "^4.4.3"
-
"@typescript-eslint/parser@^5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7"
@@ -10946,15 +10397,6 @@
"@typescript-eslint/types" "^8.35.0"
debug "^4.3.4"
-"@typescript-eslint/project-service@8.59.3":
- version "8.59.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.59.3.tgz#1be5ae152aad987a156c9a1a9b4256e75cfbbe0c"
- integrity sha512-ECiUWa/KYRGDFUqTNehaRgzDshnJfkTABJxVemHk4ko22gcr0ukloKjWvyQ64g8YCV/UI47kN1dbmjf/GaQYng==
- dependencies:
- "@typescript-eslint/tsconfig-utils" "^8.59.3"
- "@typescript-eslint/types" "^8.59.3"
- debug "^4.4.3"
-
"@typescript-eslint/scope-manager@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c"
@@ -10971,24 +10413,11 @@
"@typescript-eslint/types" "7.18.0"
"@typescript-eslint/visitor-keys" "7.18.0"
-"@typescript-eslint/scope-manager@8.59.3":
- version "8.59.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.59.3.tgz#91a60f66803fe9dae0696fbab2451f5723f119d2"
- integrity sha512-t2LvZnoEfzKtnPjgeEu41xw5gxq9mQVfYy4OoZ4Vlt0sk3JwxmhCca/AR7DwOiHrjWgjAj6as4AhRLKSDfvZIA==
- dependencies:
- "@typescript-eslint/types" "8.59.3"
- "@typescript-eslint/visitor-keys" "8.59.3"
-
"@typescript-eslint/tsconfig-utils@8.35.0", "@typescript-eslint/tsconfig-utils@^8.35.0":
version "8.35.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.0.tgz#6e05aeb999999e31d562ceb4fe144f3cbfbd670e"
integrity sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==
-"@typescript-eslint/tsconfig-utils@8.59.3", "@typescript-eslint/tsconfig-utils@^8.57.1", "@typescript-eslint/tsconfig-utils@^8.59.3":
- version "8.59.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.3.tgz#88ca9036b42ccdd1e630cfdafd2e042c2ca6a835"
- integrity sha512-PcIJHjmaREXLgIAIzLnSY9VucEzz8FKXsRgFa1DmdGCK/5tJpW03TKJF01Q6VZd1lLdz2sIKPWaDUZN9dp//dw==
-
"@typescript-eslint/type-utils@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a"
@@ -10999,17 +10428,6 @@
debug "^4.3.4"
tsutils "^3.21.0"
-"@typescript-eslint/type-utils@8.59.3":
- version "8.59.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.59.3.tgz#421fb2448bdfeb301d134a01cd02503f67fd8192"
- integrity sha512-g71d8QD8UaiHGvrJwyIS1hCX5r63w6Jll+4VEYhEAHXTDIqX1JgxhTAbEHtKntL9kuc4jRo7/GWw5xfCepSccQ==
- dependencies:
- "@typescript-eslint/types" "8.59.3"
- "@typescript-eslint/typescript-estree" "8.59.3"
- "@typescript-eslint/utils" "8.59.3"
- debug "^4.4.3"
- ts-api-utils "^2.5.0"
-
"@typescript-eslint/types@5.62.0":
version "5.62.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f"
@@ -11025,11 +10443,6 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.35.0.tgz#e60d062907930e30008d796de5c4170f02618a93"
integrity sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==
-"@typescript-eslint/types@8.59.3", "@typescript-eslint/types@^8.59.3":
- version "8.59.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.59.3.tgz#b7ca539c5e302fdde9a7cadb73caed107ef8f2cd"
- integrity sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==
-
"@typescript-eslint/types@^8.11.0", "@typescript-eslint/types@^8.35.0":
version "8.47.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.47.0.tgz#c7fc9b6642d03505f447a8392934b9d1850de5af"
@@ -11062,21 +10475,6 @@
semver "^7.6.0"
ts-api-utils "^1.3.0"
-"@typescript-eslint/typescript-estree@8.59.3":
- version "8.59.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.3.tgz#e6bb1408e00b47e431427a40268db4e86cb121ab"
- integrity sha512-CbRjVRAf7Lr9Kr8RopKcbY45p2VfmmHrm0ygOCYFi7oU8q19m0Fs/6iHS7kNOmwpp+ob07ZVcAqlxUod9lYdmg==
- dependencies:
- "@typescript-eslint/project-service" "8.59.3"
- "@typescript-eslint/tsconfig-utils" "8.59.3"
- "@typescript-eslint/types" "8.59.3"
- "@typescript-eslint/visitor-keys" "8.59.3"
- debug "^4.4.3"
- minimatch "^10.2.2"
- semver "^7.7.3"
- tinyglobby "^0.2.15"
- ts-api-utils "^2.5.0"
-
"@typescript-eslint/typescript-estree@^8.23.0":
version "8.35.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.0.tgz#86141e6c55b75bc1eaecc0781bd39704de14e52a"
@@ -11107,16 +10505,6 @@
eslint-scope "^5.1.1"
semver "^7.3.7"
-"@typescript-eslint/utils@8.59.3":
- version "8.59.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.59.3.tgz#f693f979deb4dc3994de03ff8b23976d625c36c5"
- integrity sha512-JAvT14goBzRzzzZyqq3P9BLArIxTtQURUtFgQ/V7FO+eU+Gg6ES+5ymOPP1wRxXcxAYeivCk4uS3jCKWI1K8Zg==
- dependencies:
- "@eslint-community/eslint-utils" "^4.9.1"
- "@typescript-eslint/scope-manager" "8.59.3"
- "@typescript-eslint/types" "8.59.3"
- "@typescript-eslint/typescript-estree" "8.59.3"
-
"@typescript-eslint/utils@^7.0.0":
version "7.18.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f"
@@ -11151,14 +10539,6 @@
"@typescript-eslint/types" "8.35.0"
eslint-visitor-keys "^4.2.1"
-"@typescript-eslint/visitor-keys@8.59.3":
- version "8.59.3"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.3.tgz#820843b1b5ca4290009cf189382abcf6fe00dfa6"
- integrity sha512-f1UQF7ggd42YiwI5wGrRaPsa+P0CINBlrkLPmGfpq/u/I/oVtecoEIfFR9ag/oa1sLOsRNZ6xehf6qMZhQGBDg==
- dependencies:
- "@typescript-eslint/types" "8.59.3"
- eslint-visitor-keys "^5.0.0"
-
"@typespec/ts-http-runtime@^0.3.0":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz#1048df6182b02bec8962a9cffd1c5ee1a129541f"
@@ -11920,11 +11300,6 @@
dependencies:
tslib "^2.6.3"
-"@xmldom/xmldom@^0.9.9":
- version "0.9.10"
- resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.9.10.tgz#a0ad5a26fe8aa996310870726e1704977f769dee"
- integrity sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==
-
"@xstate/fsm@^1.4.0":
version "1.6.5"
resolved "https://registry.yarnpkg.com/@xstate/fsm/-/fsm-1.6.5.tgz#f599e301997ad7e3c572a0b1ff0696898081bea5"
@@ -12148,16 +11523,6 @@ ajv@^6.11.0, ajv@^6.12.4, ajv@^6.12.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ajv@^6.14.0:
- version "6.15.0"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.15.0.tgz#07e982c74626167aa7a2495c53817892d7139492"
- integrity sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==
- dependencies:
- fast-deep-equal "^3.1.1"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.4.1"
- uri-js "^4.2.2"
-
ajv@^8.0.0, ajv@^8.10.0, ajv@^8.9.0:
version "8.18.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.18.0.tgz#8864186b6738d003eb3a933172bb3833e10cefbc"
@@ -12393,11 +11758,6 @@ aria-query@^4.2.2:
"@babel/runtime" "^7.10.2"
"@babel/runtime-corejs3" "^7.10.2"
-aria-query@^5.3.2:
- version "5.3.2"
- resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59"
- integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==
-
array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b"
@@ -12767,11 +12127,6 @@ axobject-query@^3.2.1:
dependencies:
dequal "^2.0.3"
-axobject-query@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee"
- integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==
-
b4a@^1.6.4:
version "1.6.4"
resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.4.tgz#ef1c1422cae5ce6535ec191baeed7567443f36c9"
@@ -12787,11 +12142,6 @@ babel-dead-code-elimination@^1.0.10, babel-dead-code-elimination@^1.0.6, babel-d
"@babel/traverse" "^7.23.7"
"@babel/types" "^7.23.6"
-babel-import-util@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/babel-import-util/-/babel-import-util-2.0.0.tgz#99a2e7424bcde01898bc61bb19700ff4c74379a3"
- integrity sha512-pkWynbLwru0RZmA9iKeQL63+CkkW0RCP3kL5njCtudd6YPUKb5Pa0kL4fb3bmuKn2QDBFwY5mvvhEK/+jv2Ynw==
-
babel-import-util@^2.0.2:
version "2.1.1"
resolved "https://registry.yarnpkg.com/babel-import-util/-/babel-import-util-2.1.1.tgz#0f4905fe899abfb8cd835dd52f3df1966d1ffbb0"
@@ -12870,15 +12220,6 @@ babel-plugin-ember-template-compilation@^3.1.0:
babel-import-util "^3.0.0"
import-meta-resolve "^4.1.0"
-babel-plugin-ember-template-compilation@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-ember-template-compilation/-/babel-plugin-ember-template-compilation-4.0.0.tgz#d35045b15b7cd4cae64204979a19f649adb50317"
- integrity sha512-J2dR6ZPfPNuIR7vzhneO9xR0aTvOHITszuGif2EOYw3Qg3KlIVEd/hNnEeubyWgjYXn06Sgm6/NdNXEMNSsWYQ==
- dependencies:
- "@glimmer/syntax" ">= 0.94.9"
- babel-import-util "^3.0.0"
- import-meta-resolve "^4.1.0"
-
babel-plugin-istanbul@6.1.1:
version "6.1.1"
resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73"
@@ -13009,13 +12350,6 @@ babylon@^6.18.0:
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
-backbone@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.6.1.tgz#6e067777767f54b9e150d3de825f7d66e7ed77d0"
- integrity sha512-YQzWxOrIgL6BoFnZjThVN99smKYhyEXXFyJJ2lsF1wJLyo4t+QjmkLrH8/fN22FZ4ykF70Xq7PgTugJVR4zS9Q==
- dependencies:
- underscore ">=1.8.3"
-
backburner.js@^2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/backburner.js/-/backburner.js-2.8.0.tgz#72f8c7455ff664ff8e79a32415977e10a18e03c7"
@@ -13079,11 +12413,6 @@ base64-js@^1.2.0, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-base64id@2.0.0, base64id@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6"
- integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==
-
baseline-browser-mapping@^2.10.12:
version "2.10.29"
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.29.tgz#47bdc13027af28d341f367a4f35a07ce872e27b4"
@@ -13879,14 +13208,6 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
- integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
- dependencies:
- ansi-styles "^4.1.0"
- supports-color "^7.1.0"
-
chalk@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
@@ -13895,6 +13216,14 @@ chalk@^3.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
chalk@^5.0.0, chalk@^5.2.0, chalk@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385"
@@ -13925,13 +13254,6 @@ chardet@^0.7.0:
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
-charm@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/charm/-/charm-1.0.2.tgz#8add367153a6d9a581331052c4090991da995e35"
- integrity sha512-wqW3VdPnlSWT4eRiYX+hcs+C6ViBPUWk1qTCd+37qw9kEm/a5n2qcyQDMBWvSYKN/ctqZzeXNQaeBjOetJJUkw==
- dependencies:
- inherits "^2.0.1"
-
check-error@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc"
@@ -14249,11 +13571,6 @@ commander@12.0.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-12.0.0.tgz#b929db6df8546080adfd004ab215ed48cf6f2592"
integrity sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==
-commander@7.2.0, commander@^7.2.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
- integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
-
commander@^10.0.0, commander@^10.0.1:
version "10.0.1"
resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
@@ -14269,7 +13586,7 @@ commander@^12.1.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3"
integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==
-commander@^14.0.2, commander@^14.0.3:
+commander@^14.0.2:
version "14.0.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2"
integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==
@@ -14284,6 +13601,11 @@ commander@^4.0.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
+commander@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+ integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
commander@^8.3.0:
version "8.3.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
@@ -14337,7 +13659,7 @@ compressible@~2.0.18:
dependencies:
mime-db ">= 1.43.0 < 2"
-compression@^1.7.4, compression@^1.8.1:
+compression@^1.7.4:
version "1.8.1"
resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79"
integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==
@@ -14365,18 +13687,6 @@ concat-stream@^2.0.0:
readable-stream "^3.0.2"
typedarray "^0.0.6"
-concurrently@^9.2.1:
- version "9.2.1"
- resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.2.1.tgz#248ea21b95754947be2dad9c3e4b60f18ca4e44f"
- integrity sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==
- dependencies:
- chalk "4.1.2"
- rxjs "7.8.2"
- shell-quote "1.8.3"
- supports-color "8.1.1"
- tree-kill "1.2.2"
- yargs "17.7.2"
-
confbox@^0.1.8:
version "0.1.8"
resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06"
@@ -14435,11 +13745,6 @@ console-ui@^3.1.2:
ora "^3.4.0"
through2 "^3.0.1"
-consolidate@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-1.0.4.tgz#9052e88bf3cf89a444df3cb61f1d4c6b9c8afcf0"
- integrity sha512-RuZ3xnqEDsxiwaoIkqVeeK3gg9qxw7+YKYX2tKhLs1eukVKMgSr4VYI3iYFsRHi4TloHYDlugrz3kvkjs3nynA==
-
content-disposition@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.1.tgz#a8b7bbeb2904befdfb6787e5c0c086959f605f9b"
@@ -14452,12 +13757,7 @@ content-disposition@~0.5.4:
dependencies:
safe-buffer "5.2.1"
-content-tag@^3.1.1:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/content-tag/-/content-tag-3.1.3.tgz#4ef462f459a81ba73945dd661a8041bf8062cc03"
- integrity sha512-4Kiv9mEroxuMXfWUNUHcljVJgxThCNk7eEswdHMXdzJnkBBaYDqDwzHkoh3F74JJhfU3taJOsgpR6oEGIDg17g==
-
-content-tag@^4.1.0, content-tag@^4.1.1, content-tag@^4.2.0:
+content-tag@^4.1.0, content-tag@^4.1.1:
version "4.2.0"
resolved "https://registry.yarnpkg.com/content-tag/-/content-tag-4.2.0.tgz#b241f94a37a117fda7e0471dbcbfb664454e38cd"
integrity sha512-f/o+F3qSa4gg23I7RWy6cMDxP2nPo99YWusxw2bjne7ZC6Acqqf4uB/+87AekOq1ehTocHH7b7nMd2X4S3NHVw==
@@ -14509,7 +13809,7 @@ cookie@^0.6.0:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
-cookie@^0.7.1, cookie@^0.7.2, cookie@~0.7.1, cookie@~0.7.2:
+cookie@^0.7.1, cookie@^0.7.2, cookie@~0.7.1:
version "0.7.2"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7"
integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==
@@ -14576,7 +13876,7 @@ core-util-is@~1.0.0:
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-cors@2.8.6, cors@^2.8.5, cors@~2.8.5:
+cors@2.8.6, cors@^2.8.5:
version "2.8.6"
resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.6.tgz#ff5dd69bd95e547503820d29aba4f8faf8dfec96"
integrity sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==
@@ -14945,7 +14245,7 @@ debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.6.8:
dependencies:
ms "2.0.0"
-debug@4, debug@4.x, debug@^4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3, debug@~4.4.1:
+debug@4, debug@4.x, debug@^4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3:
version "4.4.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
@@ -14966,13 +14266,6 @@ debug@^3.2.6, debug@^3.2.7:
dependencies:
ms "^2.1.1"
-debug@~4.3.1, debug@~4.3.4:
- version "4.3.7"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52"
- integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==
- dependencies:
- ms "^2.1.3"
-
decamelize@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
@@ -15007,15 +14300,7 @@ decompress-response@^6.0.0:
dependencies:
mimic-response "^3.1.0"
-decorator-transforms@^2.0.0:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/decorator-transforms/-/decorator-transforms-2.2.2.tgz#c163e86815c78152528a8c1549e95d8f3403e61b"
- integrity sha512-NHCSJXOUQ29YFli1QzstXWo72EyASpoVx+s0YdkMwswpovf/iAJP580nD1tB0Ph9exvtbfWdVrSAloXrWVo1Xg==
- dependencies:
- "@babel/plugin-syntax-decorators" "^7.23.3"
- babel-import-util "^3.0.0"
-
-decorator-transforms@^2.2.2, decorator-transforms@^2.3.2:
+decorator-transforms@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/decorator-transforms/-/decorator-transforms-2.3.2.tgz#265a3dd318f875d10a9aae88415a6dd7806a3dd4"
integrity sha512-XcErcjlmCzG5ODgYjt6ZTXwd6S8fPKln/sJmw15ZXkWG2JpoQNwszis+AwF6XSGlOoG7g8MCEO97g+Yw3fk5OQ==
@@ -15355,11 +14640,6 @@ diff@^8.0.2:
resolved "https://registry.yarnpkg.com/diff/-/diff-8.0.3.tgz#c7da3d9e0e8c283bb548681f8d7174653720c2d5"
integrity sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==
-diff@^9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/diff/-/diff-9.0.0.tgz#297c31cd7c280f13dfe335791ec2063bd4a73a6f"
- integrity sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==
-
dir-glob@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
@@ -15410,11 +14690,6 @@ dom-converter@^0.2.0:
dependencies:
utila "~0.4"
-dom-element-descriptors@^0.5.0, dom-element-descriptors@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/dom-element-descriptors/-/dom-element-descriptors-0.5.1.tgz#3ebfcf64198f922dba928f84f7970bb571891317"
- integrity sha512-DLayMRQ+yJaziF4JJX1FMjwjdr7wdTr1y9XvZ+NfHELfOMcYDnCHneAYXAS4FT1gLILh4V0juMZohhH1N5FsoQ==
-
dom-mutator@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/dom-mutator/-/dom-mutator-0.6.0.tgz#079d7a4b3e8981a562cd777548b99baab51d65c5"
@@ -15582,16 +14857,6 @@ editions@^2.2.0:
errlop "^2.0.0"
semver "^6.3.0"
-editorconfig@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-3.0.2.tgz#078dff888b3db3286f3bd9cff989e672267a2291"
- integrity sha512-T0ix8GhtxyKVfUFEcvdNDt3YGqlwkFHbD4/5bgFUDgFmxhI/cSRAeJ87/Sz//Cq8Eam6JX/e23RkoFO71P7aAA==
- dependencies:
- "@one-ini/wasm" "0.2.1"
- commander "^14.0.3"
- minimatch "~10.2.4"
- semver "^7.7.4"
-
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
@@ -15761,57 +15026,11 @@ ember-cli-version-checker@^5.1.2:
semver "^7.3.4"
silent-error "^1.1.1"
-ember-eslint-parser@^0.11.3:
- version "0.11.3"
- resolved "https://registry.yarnpkg.com/ember-eslint-parser/-/ember-eslint-parser-0.11.3.tgz#fbc35431c4edbadcaaaa016bb8d77b4a9ea9900d"
- integrity sha512-tGLDVyemseglpXyt3MMnggWL2ROYglRGoL0lKVy+GySFcrD4YQbt5iyvrY9hcEnN62gmkFLIFRinIq5niqYKXg==
- dependencies:
- "@glimmer/syntax" "^0.95.0"
- "@typescript-eslint/tsconfig-utils" "^8.57.1"
- content-tag "^4.1.1"
- ember-estree "^0.6.3"
- eslint-scope "^9.1.2"
- html-tags "^5.1.0"
- mathml-tag-names "^4.0.0"
- svg-tags "^1.0.0"
-
-ember-estree@^0.6.3:
- version "0.6.4"
- resolved "https://registry.yarnpkg.com/ember-estree/-/ember-estree-0.6.4.tgz#e4fa1303d95f33ecfdbfa2acacc334d4341c890f"
- integrity sha512-/0+JLFt200RB/gUfLfRALTFWby6fGS7Bu+NN985Y8gadEntX4KoiYHhOl2hkzvy+AmBi+PbHxBa9QVCV7K/PUg==
- dependencies:
- "@glimmer/env" "^0.1.7"
- "@glimmer/syntax" "^0.95.0"
- content-tag "^4.2.0"
- oxc-parser "^0.130.0"
-
-ember-page-title@^9.0.3:
- version "9.0.3"
- resolved "https://registry.yarnpkg.com/ember-page-title/-/ember-page-title-9.0.3.tgz#803a4b6d77d440ffb3cd32bcb548e1142416fd09"
- integrity sha512-fedRHUsvq8tIZgOii8jTrfAyeq+la/9H5eAzhNNwEyzo7nDMmqK2SxsyBUGXprd8fOacsPabLlzlucMi/4mUpA==
- dependencies:
- "@embroider/addon-shim" "^1.8.7"
- "@simple-dom/document" "^1.4.0"
-
-ember-qunit@^9.0.4:
- version "9.0.4"
- resolved "https://registry.yarnpkg.com/ember-qunit/-/ember-qunit-9.0.4.tgz#3b16131c2b03f657a231b9768b78b57ca18dd9ea"
- integrity sha512-rv6gKvrdXdPBTdSZC5co82eIcDWWVR7RjafU/c+5TTz290oXhIHPoVuZbcO2F5RiAqkTW0jKzwkCP8y+2tCjFw==
- dependencies:
- "@embroider/addon-shim" "^1.9.0"
- "@embroider/macros" "^1.16.12"
- qunit-theme-ember "^1.0.0"
-
ember-rfc176-data@^0.3.17:
version "0.3.17"
resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.17.tgz#d4fc6c33abd6ef7b3440c107a28e04417b49860a"
integrity sha512-EVzTTKqxv9FZbEh6Ktw56YyWRAA0MijKvl7H8C06wVF+8f/cRRz3dXxa4nkwjzyVwx4rzKGuIGq77hxJAQhWWw==
-ember-rfc176-data@^0.3.18:
- version "0.3.18"
- resolved "https://registry.yarnpkg.com/ember-rfc176-data/-/ember-rfc176-data-0.3.18.tgz#bb6fdcef49999981317ea81b6cc9210fb4108d65"
- integrity sha512-JtuLoYGSjay1W3MQAxt3eINWXNYYQliK90tLwtb8aeCuQK8zKGCRbBodVIrkcTqshULMnRuTOS6t1P7oQk3g6Q==
-
ember-router-generator@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ember-router-generator/-/ember-router-generator-2.0.0.tgz#d04abfed4ba8b42d166477bbce47fccc672dbde0"
@@ -15851,22 +15070,6 @@ ember-source@^6.12.0:
silent-error "^1.1.1"
simple-html-tokenizer "^0.5.11"
-ember-strict-application-resolver@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ember-strict-application-resolver/-/ember-strict-application-resolver-0.1.1.tgz#cb9715f6a0d6f30d6f35272c404597e3ad9fd9b2"
- integrity sha512-/49JZ2Yk2ggicAGIoFNWcz05llhe2i+/2dpH5Pv1KlwZOBKkqMMJpTKEB4IMg+FjKBiE0r2yxuZzo9Oly9vc1A==
- dependencies:
- "@embroider/addon-shim" "^1.8.9"
- decorator-transforms "^2.2.2"
-
-ember-template-lint@^7.9.3:
- version "7.9.3"
- resolved "https://registry.yarnpkg.com/ember-template-lint/-/ember-template-lint-7.9.3.tgz#f8f8e965a10b6872f8062c49374495b2cef47fed"
- integrity sha512-iqC4rv/oVlXViGuf7hlOA/bC550ZqacZKAc8WvQV0ueeCtIYPkYYK+Tc7FwpM8qGx3jiwu/ZsTuNfPInI5pL7Q==
- dependencies:
- "@lint-todo/utils" "^13.1.1"
- content-tag "^3.1.1"
-
emoji-regex-xs@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz#e8af22e5d9dbd7f7f22d280af3d19d2aab5b0724"
@@ -15926,27 +15129,6 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1:
dependencies:
once "^1.4.0"
-engine.io-parser@~5.2.1:
- version "5.2.3"
- resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f"
- integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==
-
-engine.io@~6.6.0:
- version "6.6.2"
- resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.6.2.tgz#32bd845b4db708f8c774a4edef4e5c8a98b3da72"
- integrity sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==
- dependencies:
- "@types/cookie" "^0.4.1"
- "@types/cors" "^2.8.12"
- "@types/node" ">=10.0.0"
- accepts "~1.3.4"
- base64id "2.0.0"
- cookie "~0.7.2"
- cors "~2.8.5"
- debug "~4.3.1"
- engine.io-parser "~5.2.1"
- ws "~8.17.1"
-
enhanced-resolve@^5.10.0, enhanced-resolve@^5.14.1, enhanced-resolve@^5.18.0, enhanced-resolve@^5.20.0:
version "5.20.1"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz#eeeb3966bea62c348c40a0cc9e7912e2557d0be0"
@@ -15955,14 +15137,6 @@ enhanced-resolve@^5.10.0, enhanced-resolve@^5.14.1, enhanced-resolve@^5.18.0, en
graceful-fs "^4.2.4"
tapable "^2.3.0"
-enhanced-resolve@^5.17.1:
- version "5.21.3"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.21.3.tgz#fa7fed23679e9169dfb705b8e201924421c4414a"
- integrity sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==
- dependencies:
- graceful-fs "^4.2.4"
- tapable "^2.3.3"
-
enquirer@~2.3.6:
version "2.3.6"
resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
@@ -16774,18 +15948,6 @@ escodegen@^2.0.0, escodegen@^2.1.0:
optionalDependencies:
source-map "~0.6.1"
-eslint-compat-utils@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz#7fc92b776d185a70c4070d03fd26fde3d59652e4"
- integrity sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==
- dependencies:
- semver "^7.5.4"
-
-eslint-config-prettier@^10.1.8:
- version "10.1.8"
- resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97"
- integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==
-
eslint-config-prettier@^9.1.0:
version "9.1.2"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz#90deb4fa0259592df774b600dbd1d2249a78ce91"
@@ -16809,44 +15971,12 @@ eslint-module-utils@^2.12.1:
eslint-plugin-deprecation@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-3.0.0.tgz#c0b6bce543c2a01f231d39a1c54fdfebf3560d48"
- integrity sha512-JuVLdNg/uf0Adjg2tpTyYoYaMbwQNn/c78P1HcccokvhtRphgnRjZDKmhlxbxYptppex03zO76f97DD/yQHv7A==
- dependencies:
- "@typescript-eslint/utils" "^7.0.0"
- ts-api-utils "^1.3.0"
- tslib "^2.3.1"
-
-eslint-plugin-ember@^13.2.1:
- version "13.2.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-ember/-/eslint-plugin-ember-13.2.1.tgz#195cd18ac0061f49fb3b1e5a49a7e00b3d10385d"
- integrity sha512-YJNM+LTLqFcfMW5raaSlvQnM6jQG8W6NAo/fllAGiN7jl3JqjB/r3qZPYxk9kaVoDT3TTpUnERXDdEd3U2WGuA==
- dependencies:
- "@ember-data/rfc395-data" "^0.0.4"
- aria-query "^5.3.2"
- axobject-query "^4.1.0"
- css-tree "^3.0.1"
- editorconfig "^3.0.2"
- ember-eslint-parser "^0.11.3"
- ember-rfc176-data "^0.3.18"
- eslint-utils "^3.0.0"
- estraverse "^5.3.0"
- html-tags "^3.3.1"
- language-tags "^1.0.9"
- lodash.camelcase "^4.3.0"
- lodash.kebabcase "^4.1.1"
- mathml-tag-names "^4.0.0"
- requireindex "^1.2.0"
- snake-case "^3.0.3"
- svg-tags "^1.0.0"
-
-eslint-plugin-es-x@^7.8.0:
- version "7.8.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz#a207aa08da37a7923f2a9599e6d3eb73f3f92b74"
- integrity sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==
+ resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-3.0.0.tgz#c0b6bce543c2a01f231d39a1c54fdfebf3560d48"
+ integrity sha512-JuVLdNg/uf0Adjg2tpTyYoYaMbwQNn/c78P1HcccokvhtRphgnRjZDKmhlxbxYptppex03zO76f97DD/yQHv7A==
dependencies:
- "@eslint-community/eslint-utils" "^4.1.2"
- "@eslint-community/regexpp" "^4.11.0"
- eslint-compat-utils "^0.5.1"
+ "@typescript-eslint/utils" "^7.0.0"
+ ts-api-utils "^1.3.0"
+ tslib "^2.3.1"
eslint-plugin-import@^2.32.0:
version "2.32.0"
@@ -16889,20 +16019,6 @@ eslint-plugin-jsdoc@^50.6.1:
semver "^7.7.2"
spdx-expression-parse "^4.0.0"
-eslint-plugin-n@^18.0.1:
- version "18.0.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-18.0.1.tgz#f21f6848648d0fcf11e6d9260ebf1c80994b99f7"
- integrity sha512-q3ARhk+eZRc7myR0KHx+R3/GJeOHF+Ir6PK95Pu2tEX8Sl/4BIpmmVLva2kPrjC2gCmn6WHlHm+3yeo6Rxhycw==
- dependencies:
- "@eslint-community/eslint-utils" "^4.5.0"
- enhanced-resolve "^5.17.1"
- eslint-plugin-es-x "^7.8.0"
- get-tsconfig "^4.8.1"
- globals "^15.11.0"
- globrex "^0.1.2"
- ignore "^5.3.2"
- semver "^7.6.3"
-
eslint-plugin-react-hooks@^4.6.0:
version "4.6.2"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596"
@@ -16964,36 +16080,6 @@ eslint-scope@^7.2.2:
esrecurse "^4.3.0"
estraverse "^5.2.0"
-eslint-scope@^8.4.0:
- version "8.4.0"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82"
- integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==
- dependencies:
- esrecurse "^4.3.0"
- estraverse "^5.2.0"
-
-eslint-scope@^9.1.2:
- version "9.1.2"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-9.1.2.tgz#b9de6ace2fab1cff24d2e58d85b74c8fcea39802"
- integrity sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==
- dependencies:
- "@types/esrecurse" "^4.3.1"
- "@types/estree" "^1.0.8"
- esrecurse "^4.3.0"
- estraverse "^5.2.0"
-
-eslint-utils@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
- integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
- dependencies:
- eslint-visitor-keys "^2.0.0"
-
-eslint-visitor-keys@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
- integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
-
eslint-visitor-keys@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
@@ -17009,11 +16095,6 @@ eslint-visitor-keys@^4.2.1:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1"
integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==
-eslint-visitor-keys@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be"
- integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==
-
eslint@8.57.0:
version "8.57.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
@@ -17058,46 +16139,6 @@ eslint@8.57.0:
strip-ansi "^6.0.1"
text-table "^0.2.0"
-eslint@^9.39.4:
- version "9.39.4"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.4.tgz#855da1b2e2ad66dc5991195f35e262bcec8117b5"
- integrity sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==
- dependencies:
- "@eslint-community/eslint-utils" "^4.8.0"
- "@eslint-community/regexpp" "^4.12.1"
- "@eslint/config-array" "^0.21.2"
- "@eslint/config-helpers" "^0.4.2"
- "@eslint/core" "^0.17.0"
- "@eslint/eslintrc" "^3.3.5"
- "@eslint/js" "9.39.4"
- "@eslint/plugin-kit" "^0.4.1"
- "@humanfs/node" "^0.16.6"
- "@humanwhocodes/module-importer" "^1.0.1"
- "@humanwhocodes/retry" "^0.4.2"
- "@types/estree" "^1.0.6"
- ajv "^6.14.0"
- chalk "^4.0.0"
- cross-spawn "^7.0.6"
- debug "^4.3.2"
- escape-string-regexp "^4.0.0"
- eslint-scope "^8.4.0"
- eslint-visitor-keys "^4.2.1"
- espree "^10.4.0"
- esquery "^1.5.0"
- esutils "^2.0.2"
- fast-deep-equal "^3.1.3"
- file-entry-cache "^8.0.0"
- find-up "^5.0.0"
- glob-parent "^6.0.2"
- ignore "^5.2.0"
- imurmurhash "^0.1.4"
- is-glob "^4.0.0"
- json-stable-stringify-without-jsonify "^1.0.1"
- lodash.merge "^4.6.2"
- minimatch "^3.1.5"
- natural-compare "^1.4.0"
- optionator "^0.9.3"
-
esm-env@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/esm-env/-/esm-env-1.2.2.tgz#263c9455c55861f41618df31b20cb571fc20b75e"
@@ -17108,7 +16149,7 @@ esm@^3.2.25:
resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
-espree@^10.0.1, espree@^10.3.0, espree@^10.4.0:
+espree@^10.3.0:
version "10.4.0"
resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837"
integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==
@@ -17138,13 +16179,6 @@ esquery@^1.4.2, esquery@^1.6.0:
dependencies:
estraverse "^5.1.0"
-esquery@^1.5.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d"
- integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==
- dependencies:
- estraverse "^5.1.0"
-
esrecurse@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
@@ -17214,11 +16248,6 @@ eventemitter3@^5.0.1:
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4"
integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==
-events-to-array@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/events-to-array/-/events-to-array-2.0.3.tgz#0cd5ee538baae3ea9ec07539d778a2a6056699bc"
- integrity sha512-f/qE2gImHRa4Cp2y1stEOSgw8wTFyUdVJX7G//bMwbaV9JqISFxg99NbmVQeP7YLnDUZ2un851jlaDrlpmGehQ==
-
events@^3.0.0, events@^3.2.0, events@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
@@ -17279,24 +16308,6 @@ execa@^8.0.1:
signal-exit "^4.1.0"
strip-final-newline "^3.0.0"
-execa@^9.6.1:
- version "9.6.1"
- resolved "https://registry.yarnpkg.com/execa/-/execa-9.6.1.tgz#5b90acedc6bdc0fa9b9a6ddf8f9cbb0c75a7c471"
- integrity sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==
- dependencies:
- "@sindresorhus/merge-streams" "^4.0.0"
- cross-spawn "^7.0.6"
- figures "^6.1.0"
- get-stream "^9.0.0"
- human-signals "^8.0.1"
- is-plain-obj "^4.1.0"
- is-stream "^4.0.1"
- npm-run-path "^6.0.0"
- pretty-ms "^9.2.0"
- signal-exit "^4.1.0"
- strip-final-newline "^4.0.0"
- yoctocolors "^2.1.1"
-
exit-hook@2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-2.2.1.tgz#007b2d92c6428eda2b76e7016a34351586934593"
@@ -17319,7 +16330,7 @@ expect-type@^1.2.1:
resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.2.1.tgz#af76d8b357cf5fa76c41c09dafb79c549e75f71f"
integrity sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==
-express@5.2.1, express@^5.2.1:
+express@5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/express/-/express-5.2.1.tgz#8f21d15b6d327f92b4794ecf8cb08a72f956ac04"
integrity sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==
@@ -17634,13 +16645,6 @@ figures@^2.0.0:
dependencies:
escape-string-regexp "^1.0.5"
-figures@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a"
- integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==
- dependencies:
- is-unicode-supported "^2.0.0"
-
file-entry-cache@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
@@ -17648,13 +16652,6 @@ file-entry-cache@^6.0.1:
dependencies:
flat-cache "^3.0.4"
-file-entry-cache@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
- integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
- dependencies:
- flat-cache "^4.0.0"
-
file-type@21.3.4:
version "21.3.4"
resolved "https://registry.yarnpkg.com/file-type/-/file-type-21.3.4.tgz#e3f902faee8ec4aa152909fc902a7a77f9c06725"
@@ -17813,20 +16810,12 @@ flat-cache@^3.0.4:
flatted "^3.1.0"
rimraf "^3.0.2"
-flat-cache@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
- integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==
- dependencies:
- flatted "^3.2.9"
- keyv "^4.5.4"
-
flat@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
-flatted@^3.1.0, flatted@^3.2.9:
+flatted@^3.1.0:
version "3.4.2"
resolved "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz"
integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==
@@ -18201,14 +17190,6 @@ get-stream@^8.0.1:
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2"
integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==
-get-stream@^9.0.0:
- version "9.0.1"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27"
- integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==
- dependencies:
- "@sec-ant/readable-stream" "^0.4.1"
- is-stream "^4.0.1"
-
get-symbol-description@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee"
@@ -18218,13 +17199,6 @@ get-symbol-description@^1.1.0:
es-errors "^1.3.0"
get-intrinsic "^1.2.6"
-get-tsconfig@^4.8.1:
- version "4.14.0"
- resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.14.0.tgz#985d85c52a9903864280ccc2448d413fbf1efed8"
- integrity sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==
- dependencies:
- resolve-pkg-maps "^1.0.0"
-
getopts@2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.3.0.tgz#71e5593284807e03e2427449d4f6712a268666f4"
@@ -18391,21 +17365,6 @@ globals@^13.19.0:
dependencies:
type-fest "^0.20.2"
-globals@^14.0.0:
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e"
- integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
-
-globals@^15.11.0:
- version "15.15.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-15.15.0.tgz#7c4761299d41c32b075715a4ce1ede7897ff72a8"
- integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==
-
-globals@^17.6.0:
- version "17.6.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-17.6.0.tgz#0f0be018d5cca8690e6375ead1f65c4bb96191fc"
- integrity sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==
-
globalthis@^1.0.2, globalthis@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236"
@@ -18547,11 +17506,6 @@ gray-matter@^4.0.3:
section-matter "^1.0.0"
strip-bom-string "^1.0.0"
-growly@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
- integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
-
gtoken@^5.0.4:
version "5.2.1"
resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.2.1.tgz#4dae1fea17270f457954b4a45234bba5fc796d16"
@@ -18979,16 +17933,6 @@ html-minifier-terser@^6.0.2:
relateurl "^0.2.7"
terser "^5.10.0"
-html-tags@^3.3.1:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce"
- integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==
-
-html-tags@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-5.1.0.tgz#ec7214b57b3e50e2a4cec39414454338a94291f8"
- integrity sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==
-
html-to-image@^1.11.11:
version "1.11.11"
resolved "https://registry.yarnpkg.com/html-to-image/-/html-to-image-1.11.11.tgz#c0f8a34dc9e4b97b93ff7ea286eb8562642ebbea"
@@ -19174,11 +18118,6 @@ human-signals@^5.0.0:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28"
integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==
-human-signals@^8.0.1:
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-8.0.1.tgz#f08bb593b6d1db353933d06156cedec90abe51fb"
- integrity sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==
-
humanize-ms@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
@@ -19236,7 +18175,7 @@ ignore-walk@^5.0.1:
dependencies:
minimatch "^5.0.1"
-ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4, ignore@^5.3.2:
+ignore@^5.0.4, ignore@^5.2.0, ignore@^5.2.4:
version "5.3.2"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
@@ -19715,7 +18654,7 @@ is-plain-obj@^3.0.0:
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7"
integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==
-is-plain-obj@^4.0.0, is-plain-obj@^4.1.0:
+is-plain-obj@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0"
integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==
@@ -19798,11 +18737,6 @@ is-stream@^3.0.0:
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
-is-stream@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b"
- integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==
-
is-string@^1.0.7, is-string@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9"
@@ -19844,11 +18778,6 @@ is-unicode-supported@^1.1.0, is-unicode-supported@^1.3.0:
resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714"
integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==
-is-unicode-supported@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a"
- integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==
-
is-url-superb@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-4.0.0.tgz#b54d1d2499bb16792748ac967aa3ecb41a33a8c2"
@@ -20074,7 +19003,7 @@ jiti@^1.19.3, jiti@^1.21.0, jiti@^1.21.6:
resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268"
integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==
-jiti@^2.1.2, jiti@^2.4.2, jiti@^2.6.1, jiti@~2.6.1:
+jiti@^2.1.2, jiti@^2.4.2, jiti@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92"
integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==
@@ -20123,7 +19052,7 @@ js-yaml@^3.10.0, js-yaml@^3.13.0, js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
-js-yaml@^4.1.0, js-yaml@^4.1.1:
+js-yaml@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz"
integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==
@@ -20265,11 +19194,6 @@ json-bigint@^1.0.0:
dependencies:
bignumber.js "^9.0.0"
-json-buffer@3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
- integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
-
json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
@@ -20440,13 +19364,6 @@ karma-source-map-support@1.4.0:
dependencies:
source-map-support "^0.5.5"
-keyv@^4.5.4:
- version "4.5.4"
- resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
- integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
- dependencies:
- json-buffer "3.0.1"
-
kind-of@^6.0.0, kind-of@^6.0.2:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
@@ -20515,18 +19432,6 @@ langsmith@^0.3.67:
semver "^7.6.3"
uuid "^10.0.0"
-language-subtag-registry@^0.3.20:
- version "0.3.23"
- resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7"
- integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==
-
-language-tags@^1.0.9:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.9.tgz#1ffdcd0ec0fafb4b1be7f8b11f306ad0f9c08777"
- integrity sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==
- dependencies:
- language-subtag-registry "^0.3.20"
-
launch-editor@^2.11.1:
version "2.12.0"
resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.12.0.tgz#cc740f4e0263a6b62ead2485f9896e545321f817"
@@ -20603,80 +19508,6 @@ license-webpack-plugin@4.0.2:
dependencies:
webpack-sources "^3.0.0"
-lightningcss-android-arm64@1.32.0:
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz#f033885116dfefd9c6f54787523e3514b61e1968"
- integrity sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==
-
-lightningcss-darwin-arm64@1.32.0:
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz#50b71871b01c8199584b649e292547faea7af9b5"
- integrity sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==
-
-lightningcss-darwin-x64@1.32.0:
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz#35f3e97332d130b9ca181e11b568ded6aebc6d5e"
- integrity sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==
-
-lightningcss-freebsd-x64@1.32.0:
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz#9777a76472b64ed6ff94342ad64c7bafd794a575"
- integrity sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==
-
-lightningcss-linux-arm-gnueabihf@1.32.0:
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz#13ae652e1ab73b9135d7b7da172f666c410ad53d"
- integrity sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==
-
-lightningcss-linux-arm64-gnu@1.32.0:
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz#417858795a94592f680123a1b1f9da8a0e1ef335"
- integrity sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==
-
-lightningcss-linux-arm64-musl@1.32.0:
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz#6be36692e810b718040802fd809623cffe732133"
- integrity sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==
-
-lightningcss-linux-x64-gnu@1.32.0:
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz#0b7803af4eb21cfd38dd39fe2abbb53c7dd091f6"
- integrity sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==
-
-lightningcss-linux-x64-musl@1.32.0:
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz#88dc8ba865ddddb1ac5ef04b0f161804418c163b"
- integrity sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==
-
-lightningcss-win32-arm64-msvc@1.32.0:
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz#4f30ba3fa5e925f5b79f945e8cc0d176c3b1ab38"
- integrity sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==
-
-lightningcss-win32-x64-msvc@1.32.0:
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz#141aa5605645064928902bb4af045fa7d9f4220a"
- integrity sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==
-
-lightningcss@^1.32.0:
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/lightningcss/-/lightningcss-1.32.0.tgz#b85aae96486dcb1bf49a7c8571221273f4f1e4a9"
- integrity sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==
- dependencies:
- detect-libc "^2.0.3"
- optionalDependencies:
- lightningcss-android-arm64 "1.32.0"
- lightningcss-darwin-arm64 "1.32.0"
- lightningcss-darwin-x64 "1.32.0"
- lightningcss-freebsd-x64 "1.32.0"
- lightningcss-linux-arm-gnueabihf "1.32.0"
- lightningcss-linux-arm64-gnu "1.32.0"
- lightningcss-linux-arm64-musl "1.32.0"
- lightningcss-linux-x64-gnu "1.32.0"
- lightningcss-linux-x64-musl "1.32.0"
- lightningcss-win32-arm64-msvc "1.32.0"
- lightningcss-win32-x64-msvc "1.32.0"
-
lilconfig@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4"
@@ -20791,11 +19622,6 @@ lodash._reinterpolate@^3.0.0:
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
-lodash.camelcase@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
- integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
-
lodash.clonedeep@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
@@ -20851,11 +19677,6 @@ lodash.isstring@^4.0.1:
resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==
-lodash.kebabcase@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
- integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY=
-
lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
@@ -20901,7 +19722,7 @@ lodash.uniq@^4.2.0, lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.18.1:
+lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21:
version "4.18.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c"
integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==
@@ -21218,11 +20039,6 @@ math-intrinsics@^1.1.0:
resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
-mathml-tag-names@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-4.0.0.tgz#295494906312f849a9236e6cd9accc902814d477"
- integrity sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==
-
mdast-util-definitions@^5.0.0:
version "5.1.2"
resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz#9910abb60ac5d7115d6819b57ae0bcef07a3f7a7"
@@ -21915,14 +20731,14 @@ minimalistic-assert@^1.0.0:
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
-minimatch@10.2.4, minimatch@10.2.5, minimatch@^10.2.2, minimatch@^10.2.4, minimatch@^10.2.5, minimatch@~10.2.4:
+minimatch@10.2.4, minimatch@10.2.5, minimatch@^10.2.2, minimatch@^10.2.4:
version "10.2.5"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.5.tgz#bd48687a0be38ed2961399105600f832095861d1"
integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==
dependencies:
brace-expansion "^5.0.5"
-"minimatch@2 || 3", minimatch@3.1.5, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@^3.1.5, minimatch@~3.0.4:
+"minimatch@2 || 3", minimatch@3.1.5, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@~3.0.4:
version "3.1.5"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e"
integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==
@@ -22061,11 +20877,6 @@ mkdirp@^1.0.3, mkdirp@^1.0.4:
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-mkdirp@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50"
- integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==
-
mkdist@^1.3.0:
version "1.5.4"
resolved "https://registry.yarnpkg.com/mkdist/-/mkdist-1.5.4.tgz#c2343fab3297e49896013563fb3b0113a07b65da"
@@ -22752,18 +21563,6 @@ node-mock-http@^1.0.0, node-mock-http@^1.0.4:
resolved "https://registry.yarnpkg.com/node-mock-http/-/node-mock-http-1.0.4.tgz#21f2ab4ce2fe4fbe8a660d7c5195a1db85e042a4"
integrity sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==
-node-notifier@^10.0.1:
- version "10.0.1"
- resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-10.0.1.tgz#0e82014a15a8456c4cfcdb25858750399ae5f1c7"
- integrity sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==
- dependencies:
- growly "^1.3.0"
- is-wsl "^2.2.0"
- semver "^7.3.5"
- shellwords "^0.1.1"
- uuid "^8.3.2"
- which "^2.0.2"
-
node-releases@^2.0.27:
version "2.0.27"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e"
@@ -22790,11 +21589,6 @@ node-source-walk@^7.0.1:
dependencies:
"@babel/parser" "^7.26.7"
-node-watch@0.7.3:
- version "0.7.3"
- resolved "https://registry.yarnpkg.com/node-watch/-/node-watch-0.7.3.tgz#6d4db88e39c8d09d3ea61d6568d80e5975abc7ab"
- integrity sha512-3l4E8uMPY1HdMMryPRUAl+oIHtXtyiTlIiESNSVSNxcPfzAFzeTbXFQkZfAwBbo0B1qMSG8nUABx+Gd+YrbKrQ==
-
nodemon@^3.1.10:
version "3.1.10"
resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.10.tgz#5015c5eb4fffcb24d98cf9454df14f4fecec9bc1"
@@ -23469,34 +22263,6 @@ own-keys@^1.0.1:
object-keys "^1.1.1"
safe-push-apply "^1.0.0"
-oxc-parser@^0.130.0:
- version "0.130.0"
- resolved "https://registry.yarnpkg.com/oxc-parser/-/oxc-parser-0.130.0.tgz#b8f03385db908d9fdfff49c8f37b1748b1f41596"
- integrity sha512-X0PJ+NmOok8qP3vK9uaW431ngkdM9UPEK7KG466urtIL2+EYTEgbZK2yqe2MWKJKBjRlFweP/pJPx0x9muMEVw==
- dependencies:
- "@oxc-project/types" "^0.130.0"
- optionalDependencies:
- "@oxc-parser/binding-android-arm-eabi" "0.130.0"
- "@oxc-parser/binding-android-arm64" "0.130.0"
- "@oxc-parser/binding-darwin-arm64" "0.130.0"
- "@oxc-parser/binding-darwin-x64" "0.130.0"
- "@oxc-parser/binding-freebsd-x64" "0.130.0"
- "@oxc-parser/binding-linux-arm-gnueabihf" "0.130.0"
- "@oxc-parser/binding-linux-arm-musleabihf" "0.130.0"
- "@oxc-parser/binding-linux-arm64-gnu" "0.130.0"
- "@oxc-parser/binding-linux-arm64-musl" "0.130.0"
- "@oxc-parser/binding-linux-ppc64-gnu" "0.130.0"
- "@oxc-parser/binding-linux-riscv64-gnu" "0.130.0"
- "@oxc-parser/binding-linux-riscv64-musl" "0.130.0"
- "@oxc-parser/binding-linux-s390x-gnu" "0.130.0"
- "@oxc-parser/binding-linux-x64-gnu" "0.130.0"
- "@oxc-parser/binding-linux-x64-musl" "0.130.0"
- "@oxc-parser/binding-openharmony-arm64" "0.130.0"
- "@oxc-parser/binding-wasm32-wasi" "0.130.0"
- "@oxc-parser/binding-win32-arm64-msvc" "0.130.0"
- "@oxc-parser/binding-win32-ia32-msvc" "0.130.0"
- "@oxc-parser/binding-win32-x64-msvc" "0.130.0"
-
oxc-parser@^0.76.0:
version "0.76.0"
resolved "https://registry.yarnpkg.com/oxc-parser/-/oxc-parser-0.76.0.tgz#041650d3be1b6f31ee74b5c0f8987a6818fa85fd"
@@ -23708,11 +22474,6 @@ package-json-from-dist@^1.0.0, package-json-from-dist@^1.0.1:
resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
-package-manager-detector@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/package-manager-detector/-/package-manager-detector-1.6.0.tgz#70d0cf0aa02c877eeaf66c4d984ede0be9130734"
- integrity sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==
-
package-name-regex@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/package-name-regex/-/package-name-regex-2.0.6.tgz#b54bcb04d950e38082b7bb38fa558e01c1679334"
@@ -23803,11 +22564,6 @@ parse-ms@^2.1.0:
resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d"
integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==
-parse-ms@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-4.0.0.tgz#c0c058edd47c2a590151a718990533fd62803df4"
- integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==
-
parse-node-version@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
@@ -24199,7 +22955,7 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0:
dependencies:
find-up "^4.0.0"
-pkg-entry-points@^1.1.0, pkg-entry-points@^1.1.1:
+pkg-entry-points@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/pkg-entry-points/-/pkg-entry-points-1.1.1.tgz#d5cd87f934e873bf73143ed1d0baf637e5f8fda4"
integrity sha512-BhZa7iaPmB4b3vKIACoppyUoYn8/sFs17VJJtzrzPZvEnN2nqrgg911tdL65lA2m1ml6UI3iPeYbZQ4VXpn1mA==
@@ -24847,7 +23603,7 @@ postcss@8.4.31:
picocolors "^1.0.0"
source-map-js "^1.0.2"
-postcss@^8.1.10, postcss@^8.2.14, postcss@^8.3.7, postcss@^8.4.27, postcss@^8.4.39, postcss@^8.4.43, postcss@^8.4.7, postcss@^8.4.8, postcss@^8.5.1, postcss@^8.5.14, postcss@^8.5.3, postcss@^8.5.6:
+postcss@^8.1.10, postcss@^8.2.14, postcss@^8.3.7, postcss@^8.4.27, postcss@^8.4.39, postcss@^8.4.43, postcss@^8.4.7, postcss@^8.4.8, postcss@^8.5.1, postcss@^8.5.3, postcss@^8.5.6:
version "8.5.14"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.14.tgz#a66c2d7808fadf69ebb5b84a03f8bafd76c4919c"
integrity sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==
@@ -24947,14 +23703,6 @@ prelude-ls@^1.2.1:
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
-prettier-plugin-ember-template-tag@^2.1.6:
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/prettier-plugin-ember-template-tag/-/prettier-plugin-ember-template-tag-2.1.6.tgz#38c2a5f997dad29f59f66bfcbd4a2298cedd0851"
- integrity sha512-Y0/Id2dxccxM9pRaBXLT7sc89mc6B0UVX7Lh0SCEPb2WtQuksx4wJx98YATQKKiv5vInPmDLi9RGMipU6vAztQ==
- dependencies:
- "@babel/traverse" "^7.29.0"
- content-tag "^4.2.0"
-
prettier@^2.5.1:
version "2.8.8"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
@@ -24965,11 +23713,6 @@ prettier@^3.6.2:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.8.1.tgz#edf48977cf991558f4fcbd8a3ba6015ba2a3a173"
integrity sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==
-prettier@^3.8.3:
- version "3.8.3"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.8.3.tgz#560f2de55bf01b4c0503bc629d5df99b9a1d09b0"
- integrity sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==
-
pretty-bytes@^5.3.0:
version "5.6.0"
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
@@ -25037,18 +23780,6 @@ pretty-ms@^7.0.1:
dependencies:
parse-ms "^2.1.0"
-pretty-ms@^9.2.0:
- version "9.3.0"
- resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-9.3.0.tgz#dd2524fcb3c326b4931b2272dfd1e1a8ed9a9f5a"
- integrity sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==
- dependencies:
- parse-ms "^4.0.0"
-
-printf@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/printf/-/printf-0.6.1.tgz#b9afa3d3b55b7f2e8b1715272479fc756ed88650"
- integrity sha512-is0ctgGdPJ5951KulgfzvHGwJtZ5ck8l042vRkV6jrkpBzTmb/lueTqguWHy2JfVA+RY6gFVlaZgUS0j7S/dsw==
-
prisma@6.15.0:
version "6.15.0"
resolved "https://registry.yarnpkg.com/prisma/-/prisma-6.15.0.tgz#198f95a4468aba8f3c95b58bf3400f65daeb8942"
@@ -25081,11 +23812,6 @@ proc-log@^2.0.0, proc-log@^2.0.1:
resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685"
integrity sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==
-proc-log@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-6.1.0.tgz#18519482a37d5198e231133a70144a50f21f0215"
- integrity sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==
-
process-nextick-args@~2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
@@ -25153,15 +23879,6 @@ propagate@^2.0.0:
resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45"
integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==
-proper-lockfile@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f"
- integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==
- dependencies:
- graceful-fs "^4.2.4"
- retry "^0.12.0"
- signal-exit "^3.0.2"
-
property-information@^6.0.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.3.0.tgz#ba4a06ec6b4e1e90577df9931286953cdf4282c3"
@@ -25232,16 +23949,6 @@ pstree.remy@^1.1.8:
resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
-publint@^0.3.20:
- version "0.3.21"
- resolved "https://registry.yarnpkg.com/publint/-/publint-0.3.21.tgz#91e1425f638e2128343d5543f77551915d57409a"
- integrity sha512-OqejcnMV6E9zel2oCrUOJEiiFkGiAAni0A6ibfQNh1k9Gu5z4F+Yso8lllam7AzmV6Do0vp7u3UpZNRBwuXaHQ==
- dependencies:
- "@publint/pack" "^0.1.4"
- package-manager-detector "^1.6.0"
- picocolors "^1.1.1"
- sade "^1.8.1"
-
pump@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
@@ -25309,27 +24016,6 @@ quick-temp@^0.1.3, quick-temp@^0.1.5, quick-temp@^0.1.8:
rimraf "^2.5.4"
underscore.string "~3.3.4"
-qunit-dom@^3.5.1:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/qunit-dom/-/qunit-dom-3.5.1.tgz#2c0337f4db81cf3923c1f82a902a6be850a2e908"
- integrity sha512-ZnvTADVXASdjLxrUDuS/8NaOzadhxN+fZgafjuQV1EOMFd3dJqLkP0RqsGdAxQBxZ7KzKg57AAJO20dM6/PxkA==
- dependencies:
- dom-element-descriptors "^0.5.1"
-
-qunit-theme-ember@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/qunit-theme-ember/-/qunit-theme-ember-1.0.0.tgz#3b750b9e3ab2837cc3b31cc5b73a0b71b964b0db"
- integrity sha512-vdMVVo6ecdCkWttMTKeyq1ZTLGHcA6zdze2zhguNuc3ritlJMhOXY5RDseqazOwqZVfCg3rtlmL3fMUyIzUyFQ==
-
-qunit@^2.25.0:
- version "2.25.0"
- resolved "https://registry.yarnpkg.com/qunit/-/qunit-2.25.0.tgz#a9bc86543971f378a0af64e81292fbef6c12e1b8"
- integrity sha512-MONPKgjavgTqArCwZOEz8nEMbA19zNXIp5ZOW9rPYj5cbgQp0fiI36c9dPTSzTRRzx+KcfB5eggYB/ENqxi0+w==
- dependencies:
- commander "7.2.0"
- node-watch "0.7.3"
- tiny-glob "0.2.9"
-
quote-unquote@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/quote-unquote/-/quote-unquote-1.0.0.tgz#67a9a77148effeaf81a4d428404a710baaac8a0b"
@@ -26020,11 +24706,6 @@ require-in-the-middle@^8.0.0:
debug "^4.3.5"
module-details-from-path "^1.0.3"
-requireindex@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef"
- integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==
-
requirejs-config-file@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz#4244da5dd1f59874038cc1091d078d620abb6ebc"
@@ -26112,11 +24793,6 @@ resolve-pathname@^3.0.0:
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd"
integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==
-resolve-pkg-maps@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
- integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
-
resolve-url-loader@5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz#ee3142fb1f1e0d9db9524d539cfa166e9314f795"
@@ -26301,30 +24977,6 @@ roarr@^7.0.4:
safe-stable-stringify "^2.4.1"
semver-compare "^1.0.0"
-rolldown@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/rolldown/-/rolldown-1.0.0.tgz#9baf1407c4117570f19f75f697c4a0216065d12e"
- integrity sha512-yD986aXDESFGS95spT1LAv0jssywP4npMEjmMHyN2/5+eE8qQJUype2AaKkRiLgBgyD0LFlubwAht7VmY8rGoA==
- dependencies:
- "@oxc-project/types" "=0.129.0"
- "@rolldown/pluginutils" "1.0.0"
- optionalDependencies:
- "@rolldown/binding-android-arm64" "1.0.0"
- "@rolldown/binding-darwin-arm64" "1.0.0"
- "@rolldown/binding-darwin-x64" "1.0.0"
- "@rolldown/binding-freebsd-x64" "1.0.0"
- "@rolldown/binding-linux-arm-gnueabihf" "1.0.0"
- "@rolldown/binding-linux-arm64-gnu" "1.0.0"
- "@rolldown/binding-linux-arm64-musl" "1.0.0"
- "@rolldown/binding-linux-ppc64-gnu" "1.0.0"
- "@rolldown/binding-linux-s390x-gnu" "1.0.0"
- "@rolldown/binding-linux-x64-gnu" "1.0.0"
- "@rolldown/binding-linux-x64-musl" "1.0.0"
- "@rolldown/binding-openharmony-arm64" "1.0.0"
- "@rolldown/binding-wasm32-wasi" "1.0.0"
- "@rolldown/binding-win32-arm64-msvc" "1.0.0"
- "@rolldown/binding-win32-x64-msvc" "1.0.0"
-
rolldown@^1.0.0-rc.15, rolldown@^1.0.0-rc.8:
version "1.0.0-rc.15"
resolved "https://registry.yarnpkg.com/rolldown/-/rolldown-1.0.0-rc.15.tgz#ea3526443b2dbe834e9f8f6c1fde6232ec687170"
@@ -26554,7 +25206,7 @@ rxjs@7.8.2, rxjs@^7.5.5, rxjs@^7.8.2:
dependencies:
tslib "^2.1.0"
-sade@^1.7.3, sade@^1.8.1:
+sade@^1.7.3:
version "1.8.1"
resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701"
integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==
@@ -27038,7 +25690,7 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-shell-quote@1.8.3, shell-quote@^1.7.3, shell-quote@^1.8.3:
+shell-quote@^1.7.3, shell-quote@^1.8.3:
version "1.8.3"
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b"
integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==
@@ -27052,11 +25704,6 @@ shelljs@^0.8.3:
interpret "^1.0.0"
rechoir "^0.6.2"
-shellwords@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
- integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
-
shiki@^1.26.1:
version "1.29.2"
resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.29.2.tgz#5c93771f2d5305ce9c05975c33689116a27dc657"
@@ -27194,16 +25841,6 @@ simple-wcswidth@^1.0.1:
resolved "https://registry.yarnpkg.com/simple-wcswidth/-/simple-wcswidth-1.1.2.tgz#66722f37629d5203f9b47c5477b1225b85d6525b"
integrity sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==
-sinon@^22.0.0:
- version "22.0.0"
- resolved "https://registry.yarnpkg.com/sinon/-/sinon-22.0.0.tgz#01cea95c919468f6ef01e21d406397e5c02aad9b"
- integrity sha512-sq/6DpdXOrLyfbKlXLg/Usc7xu8YXPeLkOFZRvA3bNUSA2lhbrZ06yuXbH1fkzBPCbz9O10+7hznzUsjaYNm0Q==
- dependencies:
- "@sinonjs/commons" "^3.0.1"
- "@sinonjs/fake-timers" "^15.4.0"
- "@sinonjs/samsam" "^10.0.2"
- diff "^9.0.0"
-
sirv@^3.0.0, sirv@^3.0.1, sirv@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/sirv/-/sirv-3.0.2.tgz#f775fccf10e22a40832684848d636346f41cd970"
@@ -27269,43 +25906,6 @@ smol-toml@1.6.1:
resolved "https://registry.yarnpkg.com/smol-toml/-/smol-toml-1.6.1.tgz#4fceb5f7c4b86c2544024ef686e12ff0983465be"
integrity sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==
-snake-case@^3.0.3:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
- integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==
- dependencies:
- dot-case "^3.0.4"
- tslib "^2.0.3"
-
-socket.io-adapter@~2.5.2:
- version "2.5.5"
- resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz#c7a1f9c703d7756844751b6ff9abfc1780664082"
- integrity sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==
- dependencies:
- debug "~4.3.4"
- ws "~8.17.1"
-
-socket.io-parser@~4.2.4:
- version "4.2.6"
- resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.6.tgz#19156bf179af3931abd05260cfb1491822578a6f"
- integrity sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==
- dependencies:
- "@socket.io/component-emitter" "~3.1.0"
- debug "~4.4.1"
-
-socket.io@^4.8.3:
- version "4.8.3"
- resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.3.tgz#ca6ba1431c69532e1e0a6f496deebeb601dbc4df"
- integrity sha512-2Dd78bqzzjE6KPkD5fHZmDAKRNe3J15q+YHDrIsy9WEkqttc7GY+kT9OBLSMaPbQaEd0x1BjcmtMtXkfpc+T5A==
- dependencies:
- accepts "~1.3.4"
- base64id "~2.0.0"
- cors "~2.8.5"
- debug "~4.4.1"
- engine.io "~6.6.0"
- socket.io-adapter "~2.5.2"
- socket.io-parser "~4.2.4"
-
sockjs@^0.3.24:
version "0.3.24"
resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce"
@@ -27472,11 +26072,6 @@ sparse-bitfield@^3.0.3:
dependencies:
memory-pager "^1.0.2"
-spawn-args@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/spawn-args/-/spawn-args-0.2.0.tgz#fb7d0bd1d70fd4316bd9e3dec389e65f9d6361bb"
- integrity sha1-+30L0dcP1DFr2ePew4nmX51jYbs=
-
spdx-compare@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/spdx-compare/-/spdx-compare-1.0.0.tgz#2c55f117362078d7409e6d7b08ce70a857cd3ed7"
@@ -27919,11 +26514,6 @@ strip-final-newline@^3.0.0:
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
-strip-final-newline@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz#35a369ec2ac43df356e3edd5dcebb6429aa1fa5c"
- integrity sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==
-
strip-indent@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
@@ -27982,11 +26572,6 @@ styled-jsx@5.1.1:
dependencies:
client-only "0.0.1"
-styled_string@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/styled_string/-/styled_string-0.0.1.tgz#d22782bd81295459bc4f1df18c4bad8e94dd124a"
- integrity sha1-0ieCvYEpVFm8Tx3xjEutjpTdEko=
-
stylehacks@^7.0.5:
version "7.0.7"
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-7.0.7.tgz#12b0dd1eceee4d564aae6da0632804ef0004a5be"
@@ -28041,13 +26626,6 @@ superjson@^2.2.2:
dependencies:
copy-anything "^4"
-supports-color@8.1.1, supports-color@^8.0.0, supports-color@^8.1.1:
- version "8.1.1"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
- integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
- dependencies:
- has-flag "^4.0.0"
-
supports-color@^10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-10.0.0.tgz#32000d5e49f1ae70b2645d47701004644a1d7b90"
@@ -28067,6 +26645,13 @@ supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
+supports-color@^8.0.0, supports-color@^8.1.1:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
supports-preserve-symlinks-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
@@ -28106,11 +26691,6 @@ svelte@^4.2.8:
magic-string "^0.30.4"
periscopic "^3.1.0"
-svg-tags@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764"
- integrity sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==
-
svgo@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-4.0.1.tgz"
@@ -28173,32 +26753,11 @@ tagged-tag@^1.0.0:
resolved "https://registry.yarnpkg.com/tagged-tag/-/tagged-tag-1.0.0.tgz#a0b5917c2864cba54841495abfa3f6b13edcf4d6"
integrity sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==
-tap-parser@^18.3.0:
- version "18.3.4"
- resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-18.3.4.tgz#503b6c8f20f37476d2e802e7e30b5a25d220cbbb"
- integrity sha512-CiqzdpWn2CvONcWp7UNMF9/rCPJwCz0es+qykkgJruu1Y/rAS8A5MEQujmjx9NErfst3dGiZJU3lDS2jBsgbPA==
- dependencies:
- events-to-array "^2.0.3"
- tap-yaml "4.4.2"
-
-tap-yaml@4.4.2:
- version "4.4.2"
- resolved "https://registry.yarnpkg.com/tap-yaml/-/tap-yaml-4.4.2.tgz#450ee4dcefcb6261bdf7d299b81ee6d9aca61d97"
- integrity sha512-03mQI7QhfVZHJqGgFyxNTgUbgsG41ZzpWSb7k1Gangmf9hF71Jpb0Fczs7KtOdUDaHx+KxlPUdM2pQJaijebGA==
- dependencies:
- yaml "^2.8.3"
- yaml-types "^0.4.0"
-
tapable@^2.0.0, tapable@^2.1.1, tapable@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6"
integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==
-tapable@^2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.3.tgz#5da7c9992c46038221267985ab28421a8879f160"
- integrity sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==
-
tar-fs@^2.0.0:
version "2.1.4"
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.4.tgz#800824dbf4ef06ded9afea4acafe71c67c76b930"
@@ -28350,36 +26909,6 @@ test-exclude@^7.0.1:
glob "^10.4.1"
minimatch "^9.0.4"
-testem@^3.20.0:
- version "3.20.0"
- resolved "https://registry.yarnpkg.com/testem/-/testem-3.20.0.tgz#7d6cf0e5ed9e271cf0d6b6617c555fa5c823e7e9"
- integrity sha512-SSFfJQK/SGruISFjoKG2jCYwK596wWNPJFj2Wo77GzeIUxZ8ZjuwpyF01uekTLu4ITL6i9R4m1sWaKPK/HsunA==
- dependencies:
- "@xmldom/xmldom" "^0.9.9"
- backbone "^1.6.1"
- charm "^1.0.2"
- chokidar "^5.0.0"
- commander "^14.0.3"
- compression "^1.8.1"
- consolidate "^1.0.4"
- execa "^9.6.1"
- express "^5.2.1"
- glob "^13.0.6"
- http-proxy "^1.18.1"
- js-yaml "^4.1.1"
- lodash "^4.18.1"
- minimatch "^10.2.5"
- mkdirp "^3.0.1"
- mustache "^4.2.0"
- node-notifier "^10.0.1"
- printf "^0.6.1"
- proc-log "^6.1.0"
- rimraf "^6.1.3"
- socket.io "^4.8.3"
- spawn-args "^0.2.0"
- styled_string "0.0.1"
- tap-parser "^18.3.0"
-
text-decoder@^1.1.0:
version "1.2.3"
resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.3.tgz#b19da364d981b2326d5f43099c310cc80d770c65"
@@ -28451,7 +26980,7 @@ tildify@2.0.0:
resolved "https://registry.yarnpkg.com/tildify/-/tildify-2.0.0.tgz#f205f3674d677ce698b7067a99e949ce03b4754a"
integrity sha512-Cc+OraorugtXNfs50hU9KS369rFXCfgGLpfCfvlc+Ud5u6VWmUQsOAa9HbTvheQdYnrdJqqv1e5oIqXppMYnSw==
-tiny-glob@0.2.9, tiny-glob@^0.2.9:
+tiny-glob@^0.2.9:
version "0.2.9"
resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.9.tgz#2212d441ac17928033b110f8b3640683129d31e2"
integrity sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==
@@ -28715,11 +27244,6 @@ ts-api-utils@^2.1.0:
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91"
integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==
-ts-api-utils@^2.5.0:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.5.0.tgz#4acd4a155e22734990a5ed1fe9e97f113bcb37c1"
- integrity sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==
-
ts-graphviz@^2.1.2:
version "2.1.6"
resolved "https://registry.yarnpkg.com/ts-graphviz/-/ts-graphviz-2.1.6.tgz#007fcb42b4e8c55d26543ece9e86395bd3c3cfd6"
@@ -28824,16 +27348,6 @@ type-check@^0.4.0, type-check@~0.4.0:
dependencies:
prelude-ls "^1.2.1"
-type-detect@4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
- integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
-
-type-detect@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c"
- integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==
-
type-fest@^0.20.2:
version "0.20.2"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
@@ -28955,16 +27469,6 @@ typescript-auto-import-cache@^0.3.5:
dependencies:
semver "^7.3.8"
-typescript-eslint@^8.59.2:
- version "8.59.3"
- resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.59.3.tgz#4a41d9007faa539a66292189e2795eeb0b9fca29"
- integrity sha512-KgusgyDgG4LI8Ih/sWaCtZ06tckLAS5CvT5A4D1Q7bYVoAAyzwiZvE4BmwDHkhRVkvhRBepKeASoFzQetha7Fg==
- dependencies:
- "@typescript-eslint/eslint-plugin" "8.59.3"
- "@typescript-eslint/parser" "8.59.3"
- "@typescript-eslint/typescript-estree" "8.59.3"
- "@typescript-eslint/utils" "8.59.3"
-
typescript-memoize@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.0.1.tgz#0a8199aa28f6fe18517f6e9308ef7bfbe9a98d59"
@@ -28980,7 +27484,7 @@ typescript@^3.9:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==
-typescript@^5.7.3, typescript@^5.8.3, typescript@^5.9.3, typescript@~5.9.3:
+typescript@^5.7.3, typescript@^5.8.3:
version "5.9.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
@@ -29098,11 +27602,6 @@ underscore.string@~3.3.4:
sprintf-js "^1.0.3"
util-deprecate "^1.0.2"
-underscore@>=1.8.3:
- version "1.13.8"
- resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.8.tgz#a93a21186c049dbf0e847496dba72b7bd8c1e92b"
- integrity sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==
-
undici-types@^5.26:
version "5.28.4"
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.28.4.tgz#501669b1af1f288a9cbc2e273811965c9178306d"
@@ -29516,11 +28015,6 @@ unzip-stream@^0.3.1:
binary "^0.3.0"
mkdirp "^0.5.1"
-upath@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b"
- integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==
-
update-browserslist-db@^1.2.0, update-browserslist-db@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz#64d76db58713136acbeb4c49114366cc6cc2e80d"
@@ -29871,19 +28365,6 @@ vite@^5.0.0, vite@^5.4.11, vite@^5.4.21:
optionalDependencies:
fsevents "~2.3.3"
-vite@^8.0.11:
- version "8.0.12"
- resolved "https://registry.yarnpkg.com/vite/-/vite-8.0.12.tgz#105cce7bcb60733f9159842ec2a5a10aadf2da86"
- integrity sha512-w2dDofOWv2QB09ZITZBsvKTVAlYvPR4IAmrY/v0ir9KvLs0xybR7i48wxhM1/oyBWO34wPns+bPGw5ZrZqDpZg==
- dependencies:
- lightningcss "^1.32.0"
- picomatch "^4.0.4"
- postcss "^8.5.14"
- rolldown "1.0.0"
- tinyglobby "^0.2.16"
- optionalDependencies:
- fsevents "~2.3.3"
-
vitefu@^0.2.2, vitefu@^0.2.4, vitefu@^0.2.5:
version "0.2.5"
resolved "https://registry.yarnpkg.com/vitefu/-/vitefu-0.2.5.tgz#c1b93c377fbdd3e5ddd69840ea3aa70b40d90969"
@@ -30672,11 +29153,6 @@ ws@^8.13.0, ws@^8.18.0, ws@^8.18.3, ws@^8.20.0, ws@^8.4.2:
resolved "https://registry.yarnpkg.com/ws/-/ws-8.20.0.tgz#4cd9532358eba60bc863aad1623dfb045a4d4af8"
integrity sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==
-ws@~8.17.1:
- version "8.17.1"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b"
- integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==
-
wsl-utils@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-0.1.0.tgz#8783d4df671d4d50365be2ee4c71917a0557baab"
@@ -30745,11 +29221,6 @@ yallist@^5.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533"
integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==
-yaml-types@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/yaml-types/-/yaml-types-0.4.0.tgz#e0cab9fb563cbf6f5fc0a40dd3b8cc7bfa06365e"
- integrity sha512-XfbA30NUg4/LWUiplMbiufUiwYhgB9jvBhTWel7XQqjV+GaB79c2tROu/8/Tu7jO0HvDvnKWtBk5ksWRrhQ/0g==
-
yaml@^1.10.0:
version "1.10.3"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.3.tgz#76e407ed95c42684fb8e14641e5de62fe65bbcb3"
@@ -30783,19 +29254,6 @@ yargs@17.5.1:
y18n "^5.0.5"
yargs-parser "^21.0.0"
-yargs@17.7.2, yargs@^17.0.1, yargs@^17.2.1, yargs@^17.5.1, yargs@^17.6.0, yargs@^17.6.2:
- version "17.7.2"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
- integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
- dependencies:
- cliui "^8.0.1"
- escalade "^3.1.1"
- get-caller-file "^2.0.5"
- require-directory "^2.1.1"
- string-width "^4.2.3"
- y18n "^5.0.5"
- yargs-parser "^21.1.1"
-
yargs@^16.1.1, yargs@^16.2.0:
version "16.2.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
@@ -30809,6 +29267,19 @@ yargs@^16.1.1, yargs@^16.2.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
+yargs@^17.0.1, yargs@^17.2.1, yargs@^17.5.1, yargs@^17.6.0, yargs@^17.6.2:
+ version "17.7.2"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
+ integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
+ dependencies:
+ cliui "^8.0.1"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.3"
+ y18n "^5.0.5"
+ yargs-parser "^21.1.1"
+
yarn-deduplicate@6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/yarn-deduplicate/-/yarn-deduplicate-6.0.2.tgz#63498d2d4c3a8567e992a994ce0ab51aa5681f2e"
@@ -30842,11 +29313,6 @@ yocto-queue@^1.0.0:
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
-yoctocolors@^2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.1.2.tgz#d795f54d173494e7d8db93150cec0ed7f678c83a"
- integrity sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==
-
youch-core@^0.3.3:
version "0.3.3"
resolved "https://registry.yarnpkg.com/youch-core/-/youch-core-0.3.3.tgz#c5d3d85aeea0d8bc7b36e9764ed3f14b7ceddc7d"