diff --git a/README.md b/README.md index 5e356f1d..56765fd8 100644 --- a/README.md +++ b/README.md @@ -1,62 +1,24 @@ -

- - Bedrock - -

+# Haiku Atelier -

- - Packagist Installs - +## Dépendances - - roots/wordpress Packagist Downloads - +### PHP - +#### Dépendances - - Build Status - +- `composer/installers` : permet d'installer et récupérer des dépendances dans des dossiers personnalisés ; nécessaire pour _Bedrock_. +- `crell/fp` : librairie proposant des méthodes de programmation fonctionnelle. +- `htmlburger/carbon-fields` : librairie en alternative à _Advanced Custom Fields_ permettant la création de champs et taxonomies personnalisés. +- `laravel/helpers` : ensemble de fonctions utilitaires ; +- `lstrojny/functional-php` libraire proposant des méthodes de programmation fonctionnelle (à sûrement remplacer par `laravel/helpers`). +- `mnsami/composer-custom-directory-installer` : permet d'installer des dépendances dans des dossiers personnalisés ; nécessaire pour `htmlburger/carbon-fields`. +- `oscarotero/env` : permet de récupérer les variables d'environnements des fichiers `.env` (?). +- `ramsey/uuid` : librairie pour la génération de _UUID_. +- `vlucas/phpdotenv` : permet de récupérer les variables d'environnements des fichiers `.env` (?). - - Follow Roots - -

+#### Dépendances de développement -

WordPress boilerplate with Composer, easier configuration, and an improved folder structure

- -

- Website    Documentation    Releases    Community -

- -## Sponsors - -Bedrock is an open source project and completely free to use. If you've benefited from our projects and would like to support our future endeavors, please consider [sponsoring Roots](https://github.com/sponsors/roots). - -
-KM Digital Carrot WordPress.com Worksite Safety Itineris -
- -## Overview - -Bedrock is a WordPress boilerplate for developers that want to manage their projects with Git and Composer. Much of the philosophy behind Bedrock is inspired by the [Twelve-Factor App](http://12factor.net/) methodology, including the [WordPress specific version](https://roots.io/twelve-factor-wordpress/). - -- Better folder structure -- Dependency management with [Composer](https://getcomposer.org) -- Easy WordPress configuration with environment specific files -- Environment variables with [Dotenv](https://github.com/vlucas/phpdotenv) -- Autoloader for mu-plugins (use regular plugins as mu-plugins) -- Enhanced security (separated web root and secure passwords with [wp-password-bcrypt](https://github.com/roots/wp-password-bcrypt)) - -## Getting Started - -See the [Bedrock installation documentation](https://roots.io/bedrock/docs/installation/). - -## Stay Connected - -- Join us on Discord by [sponsoring us on GitHub](https://github.com/sponsors/roots) -- Participate on [Roots Discourse](https://discourse.roots.io/) -- Follow [@rootswp on Twitter](https://twitter.com/rootswp) -- Read the [Roots Blog](https://roots.io/blog/) -- Subscribe to the [Roots Newsletter](https://roots.io/newsletter/) +- `phpstan/phpstan` : vérification de types statiques. +- `squizlabels/php_codesniffer` : linter. +- `szepeviktor/phpstan-wordpress` : _stubs WordPress_. +- `vimeo/pslam` : analyseur de code statique. diff --git a/composer.json b/composer.json index 7d0ba9fb..376821d5 100644 --- a/composer.json +++ b/composer.json @@ -21,7 +21,8 @@ "composer/installers": "^2.2", "crell/fp": "^1.0", "htmlburger/carbon-fields": "^3.6", - "idleberg/wordpress-vite-assets": "^1.2", + "illuminate/support": "^11.31", + "laravel/helpers": "^1.7", "lstrojny/functional-php": "^1.17", "mnsami/composer-custom-directory-installer": "^2.0", "oscarotero/env": "^2.1", @@ -32,16 +33,16 @@ "roots/wp-config": "^1.0.0", "roots/wp-password-bcrypt": "^1.1.0", "stripe/stripe-php": "^16.2", + "symfony/uid": "^7.1", "timber/timber": "^2.2", "vlucas/phpdotenv": "^5.5", "wpackagist-plugin/falcon": "^2.8", "wpackagist-plugin/force-regenerate-thumbnails": "^2.2", - "wpackagist-plugin/polylang": "^3.6", "wpackagist-plugin/query-monitor": "^3.16", "wpackagist-plugin/wc-multishipping": "^2.5", "wpackagist-plugin/woocommerce": "^9.1", "wpackagist-plugin/wp-openapi": "^1.0", - "wpackagist-theme/twentytwentyfour": "^1.0" + "wpackagist-theme/twentytwentyfour": "^1.3" }, "require-dev": { "phpstan/phpstan": "^1.12", diff --git a/composer.lock b/composer.lock index 5ae29403..ab6e9d18 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f7d825bdf01f1aaa226fa4e8ea80960f", + "content-hash": "6066b99e687fd33769663e50f74c5ec5", "packages": [ { "name": "brick/math", @@ -66,6 +66,75 @@ ], "time": "2023-11-29T23:19:16+00:00" }, + { + "name": "carbonphp/carbon-doctrine-types", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/dbal": "<4.0.0 || >=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2024-02-09T16:56:22+00:00" + }, { "name": "composer/installers", "version": "v2.3.0", @@ -282,6 +351,97 @@ ], "time": "2023-10-28T20:06:08+00:00" }, + { + "name": "doctrine/inflector", + "version": "2.0.10", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25 || ^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.10" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2024-02-18T20:23:39+00:00" + }, { "name": "graham-campbell/result-type", "version": "v1.1.3", @@ -485,50 +645,40 @@ "time": "2024-07-31T08:17:38+00:00" }, { - "name": "idleberg/vite-manifest", - "version": "v1.2.0", + "name": "illuminate/collections", + "version": "v11.31.0", "source": { "type": "git", - "url": "https://github.com/idleberg/php-vite-manifest.git", - "reference": "4f385011d36c3c568fd26434e50c41e97618474a" + "url": "https://github.com/illuminate/collections.git", + "reference": "4fdef06e35aac0239d76033a2bad0ddb921226e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/idleberg/php-vite-manifest/zipball/4f385011d36c3c568fd26434e50c41e97618474a", - "reference": "4f385011d36c3c568fd26434e50c41e97618474a", + "url": "https://api.github.com/repos/illuminate/collections/zipball/4fdef06e35aac0239d76033a2bad0ddb921226e8", + "reference": "4fdef06e35aac0239d76033a2bad0ddb921226e8", "shasum": "" }, "require": { - "league/uri": "^7.4.1", - "php": ">=8.1" + "illuminate/conditionable": "^11.0", + "illuminate/contracts": "^11.0", + "illuminate/macroable": "^11.0", + "php": "^8.2" }, - "require-dev": { - "brainmaestro/composer-git-hooks": "^3.0.0", - "codeception/codeception": "^5.0.4", - "codeception/module-asserts": "^3.0.0", - "friendsofphp/php-cs-fixer": "^3.8", - "icanhazstring/composer-unused": "^0.8.10", - "phpstan/phpstan": "^1.9", - "shipmonk/composer-dependency-analyser": "^1.6" + "suggest": { + "symfony/var-dumper": "Required to use the dump method (^7.0)." }, "type": "library", "extra": { - "hooks": { - "config": { - "stop-on-failure": [ - "pre-commit" - ] - }, - "pre-commit": [ - "composer run format", - "composer run lint", - "composer run unused" - ] + "branch-alias": { + "dev-master": "11.x-dev" } }, "autoload": { + "files": [ + "helpers.php" + ], "psr-4": { - "Idleberg\\ViteManifest\\": "src" + "Illuminate\\Support\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -537,68 +687,44 @@ ], "authors": [ { - "name": "Jan T. Sott", - "email": "idleberg@users.noreply.github.com" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "A parser for Vite manifest files", - "keywords": [ - "vite", - "vite manifest", - "vitejs" - ], + "description": "The Illuminate Collections package.", + "homepage": "https://laravel.com", "support": { - "issues": "https://github.com/idleberg/php-vite-manifest/issues", - "source": "https://github.com/idleberg/php-vite-manifest/tree/v1.2.0" + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" }, - "time": "2024-10-20T23:11:49+00:00" + "time": "2024-11-08T03:05:25+00:00" }, { - "name": "idleberg/wordpress-vite-assets", - "version": "v1.2.1", + "name": "illuminate/conditionable", + "version": "v11.31.0", "source": { "type": "git", - "url": "https://github.com/idleberg/php-wordpress-vite-assets.git", - "reference": "8a11b2894b5948759c9b54d2879be562fc7cc37e" + "url": "https://github.com/illuminate/conditionable.git", + "reference": "362dd761b9920367bca1427a902158225e9e3a23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/idleberg/php-wordpress-vite-assets/zipball/8a11b2894b5948759c9b54d2879be562fc7cc37e", - "reference": "8a11b2894b5948759c9b54d2879be562fc7cc37e", + "url": "https://api.github.com/repos/illuminate/conditionable/zipball/362dd761b9920367bca1427a902158225e9e3a23", + "reference": "362dd761b9920367bca1427a902158225e9e3a23", "shasum": "" }, "require": { - "idleberg/vite-manifest": "^1.2.0", - "php": ">=8.1" - }, - "require-dev": { - "brainmaestro/composer-git-hooks": "^3.0.0", - "codeception/codeception": "^5.0.4", - "codeception/module-asserts": "^3.0.0", - "friendsofphp/php-cs-fixer": "^3.11", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9", - "shipmonk/composer-dependency-analyser": "^1.6", - "szepeviktor/phpstan-wordpress": "^1.1" + "php": "^8.0.2" }, "type": "library", "extra": { - "hooks": { - "config": { - "stop-on-failure": [ - "pre-commit" - ] - }, - "pre-commit": [ - "composer run format", - "composer run lint", - "composer run unused" - ] + "branch-alias": { + "dev-master": "11.x-dev" } }, "autoload": { "psr-4": { - "Idleberg\\WordPress\\ViteAssets\\": "src/" + "Illuminate\\Support\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -607,69 +733,168 @@ ], "authors": [ { - "name": "Jan T. Sott", - "email": "idleberg@users.noreply.github.com" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "Injects assets from a Vite manifest to the Wordpress head, supports themes and plugins", - "keywords": [ - "vite", - "vite manifest", - "vitejs", - "wordpress" - ], + "description": "The Illuminate Conditionable package.", + "homepage": "https://laravel.com", "support": { - "issues": "https://github.com/idleberg/php-wordpress-vite-assets/issues", - "source": "https://github.com/idleberg/php-wordpress-vite-assets/tree/v1.2.1" + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" }, - "funding": [ - { - "url": "https://www.buymeacoffee.com/idleberg", - "type": "buy_me_a_coffee" - } - ], - "time": "2024-11-01T23:06:58+00:00" + "time": "2024-06-28T20:10:30+00:00" }, { - "name": "league/uri", - "version": "7.4.1", + "name": "illuminate/contracts", + "version": "v11.31.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/uri.git", - "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4" + "url": "https://github.com/illuminate/contracts.git", + "reference": "56312862af937bd6da8e6dc8bbd88188dfb478f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4", - "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/56312862af937bd6da8e6dc8bbd88188dfb478f8", + "reference": "56312862af937bd6da8e6dc8bbd88188dfb478f8", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.3", - "php": "^8.1" + "php": "^8.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/simple-cache": "^1.0|^2.0|^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Contracts\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Contracts package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2024-09-22T15:08:08+00:00" + }, + { + "name": "illuminate/macroable", + "version": "v11.31.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/macroable.git", + "reference": "e1cb9e51b9ed5d3c9bc1ab431d0a52fe42a990ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/macroable/zipball/e1cb9e51b9ed5d3c9bc1ab431d0a52fe42a990ed", + "reference": "e1cb9e51b9ed5d3c9bc1ab431d0a52fe42a990ed", + "shasum": "" + }, + "require": { + "php": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "11.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Support\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Macroable package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2024-06-28T20:10:30+00:00" + }, + { + "name": "illuminate/support", + "version": "v11.31.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/support.git", + "reference": "866b8240387ecdcbbf4a7e5713c0f93b321544d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/support/zipball/866b8240387ecdcbbf4a7e5713c0f93b321544d5", + "reference": "866b8240387ecdcbbf4a7e5713c0f93b321544d5", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-mbstring": "*", + "illuminate/collections": "^11.0", + "illuminate/conditionable": "^11.0", + "illuminate/contracts": "^11.0", + "illuminate/macroable": "^11.0", + "nesbot/carbon": "^2.72.2|^3.0", + "php": "^8.2", + "voku/portable-ascii": "^2.0" }, "conflict": { - "league/uri-schemes": "^1.0" + "tightenco/collect": "<5.5.33" + }, + "replace": { + "spatie/once": "*" }, "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-fileinfo": "to create Data URI from file contennts", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", - "league/uri-components": "Needed to easily manipulate URI objects components", - "php-64bit": "to improve IPV4 host parsing", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + "illuminate/filesystem": "Required to use the composer class (^11.0).", + "laravel/serializable-closure": "Required to use the once function (^1.3).", + "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).", + "ramsey/uuid": "Required to use Str::uuid() (^4.7).", + "symfony/process": "Required to use the composer class (^7.0).", + "symfony/uid": "Required to use Str::ulid() (^7.0).", + "symfony/var-dumper": "Required to use the dd function (^7.0).", + "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.x-dev" + "dev-master": "11.x-dev" } }, "autoload": { + "files": [ + "functions.php", + "helpers.php" + ], "psr-4": { - "League\\Uri\\": "" + "Illuminate\\Support\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -678,85 +903,50 @@ ], "authors": [ { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" } ], - "description": "URI manipulation library", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "middleware", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "uri-template", - "url", - "ws" - ], + "description": "The Illuminate Support package.", + "homepage": "https://laravel.com", "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.4.1" + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2024-03-23T07:42:40+00:00" + "time": "2024-11-11T20:45:02+00:00" }, { - "name": "league/uri-interfaces", - "version": "7.4.1", + "name": "laravel/helpers", + "version": "v1.7.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "8d43ef5c841032c87e2de015972c06f3865ef718" + "url": "https://github.com/laravel/helpers.git", + "reference": "6caaa242a23bc39b4e3cf57304b5409260a7a346" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718", - "reference": "8d43ef5c841032c87e2de015972c06f3865ef718", + "url": "https://api.github.com/repos/laravel/helpers/zipball/6caaa242a23bc39b4e3cf57304b5409260a7a346", + "reference": "6caaa242a23bc39b4e3cf57304b5409260a7a346", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^8.1", - "psr/http-factory": "^1", - "psr/http-message": "^1.1 || ^2.0" + "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "php": "^7.2.0|^8.0" }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "php-64bit": "to improve IPV4 host parsing", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + "require-dev": { + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^7.0|^8.0|^9.0|^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { - "psr-4": { - "League\\Uri\\": "" - } + "files": [ + "src/helpers.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -764,45 +954,23 @@ ], "authors": [ { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Dries Vints", + "email": "dries@laravel.com" } ], - "description": "Common interfaces and classes for URI representation and interaction", - "homepage": "https://uri.thephpleague.com", + "description": "Provides backwards compatibility for helpers in the latest Laravel release.", "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "url", - "ws" + "helpers", + "laravel" ], "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1" + "source": "https://github.com/laravel/helpers/tree/v1.7.0" }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2024-03-23T07:42:40+00:00" + "time": "2023-11-30T14:09:05+00:00" }, { "name": "lstrojny/functional-php", @@ -1014,6 +1182,112 @@ }, "time": "2020-08-18T11:00:11+00:00" }, + { + "name": "nesbot/carbon", + "version": "3.8.2", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "<100.0", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.57.2", + "kylekatarnls/multi-tester": "^2.5.3", + "ondrejmirtes/better-reflection": "^6.25.0.4", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.11.2", + "phpunit/phpunit": "^10.5.20", + "squizlabs/php_codesniffer": "^3.9.0" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2024-11-07T17:46:48+00:00" + }, { "name": "oscarotero/env", "version": "v2.1.0", @@ -1145,32 +1419,26 @@ "time": "2024-07-20T21:41:07+00:00" }, { - "name": "psr/http-factory", - "version": "1.1.0", + "name": "psr/clock", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", "shasum": "" }, "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" + "php": "^7.0 || ^8.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Psr\\Http\\Message\\": "src/" + "Psr\\Clock\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1183,38 +1451,37 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", "keywords": [ - "factory", - "http", - "message", + "clock", + "now", "psr", - "psr-17", - "psr-7", - "request", - "response" + "psr-20", + "time" ], "support": { - "source": "https://github.com/php-fig/http-factory" + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" }, - "time": "2024-04-15T12:06:14+00:00" + "time": "2022-11-25T14:36:26+00:00" }, { - "name": "psr/http-message", - "version": "2.0", + "name": "psr/container", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=7.4.0" }, "type": "library", "extra": { @@ -1224,7 +1491,7 @@ }, "autoload": { "psr-4": { - "Psr\\Http\\Message\\": "src/" + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1237,20 +1504,71 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2023-04-04T09:54:51+00:00" + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" }, { "name": "ramsey/collection", @@ -1569,7 +1887,7 @@ }, { "name": "roots/wordpress", - "version": "6.6.2", + "version": "6.7", "source": { "type": "git", "url": "https://github.com/roots/wordpress.git", @@ -1600,7 +1918,7 @@ ], "support": { "issues": "https://github.com/roots/wordpress/issues", - "source": "https://github.com/roots/wordpress/tree/6.6.2" + "source": "https://github.com/roots/wordpress/tree/6.7" }, "funding": [ { @@ -1683,22 +2001,22 @@ }, { "name": "roots/wordpress-no-content", - "version": "6.6.2", + "version": "6.7", "source": { "type": "git", "url": "https://github.com/WordPress/WordPress.git", - "reference": "6.6.2" + "reference": "6.7" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/release/wordpress-6.6.2-no-content.zip", - "shasum": "b496b8a9bb3c6d20a781344cbe3e189f7fd83871" + "url": "https://downloads.wordpress.org/release/wordpress-6.7-no-content.zip", + "shasum": "d30558244ed409b6421a5454f9c837d0884317f2" }, "require": { "php": ">= 7.2.24" }, "provide": { - "wordpress/core-implementation": "6.6.2" + "wordpress/core-implementation": "6.7" }, "suggest": { "ext-curl": "Performs remote request operations.", @@ -1749,7 +2067,7 @@ "type": "other" } ], - "time": "2024-09-10T15:25:31+00:00" + "time": "2024-11-12T20:51:37+00:00" }, { "name": "roots/wp-config", @@ -1931,6 +2249,80 @@ }, "time": "2024-10-29T21:15:53+00:00" }, + { + "name": "symfony/clock", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "97bebc53548684c17ed696bc8af016880f0f098d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/97bebc53548684c17ed696bc8af016880f0f098d", + "reference": "97bebc53548684c17ed696bc8af016880f0f098d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, { "name": "symfony/deprecation-contracts", "version": "v3.5.0", @@ -2313,6 +2705,407 @@ ], "time": "2024-09-09T11:45:10+00:00" }, + { + "name": "symfony/polyfill-php83", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5|^3.0" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.18|^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-28T12:35:13+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-04-18T09:32:20+00:00" + }, + { + "name": "symfony/uid", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "65befb3bb2d503bbffbd08c815aa38b472999917" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/65befb3bb2d503bbffbd08c815aa38b472999917", + "reference": "65befb3bb2d503bbffbd08c815aa38b472999917", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v7.1.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-25T14:20:29+00:00" + }, { "name": "timber/timber", "version": "v2.3.0", @@ -2578,6 +3371,80 @@ ], "time": "2024-07-20T21:52:34+00:00" }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, { "name": "wpackagist-plugin/falcon", "version": "2.8.3", @@ -2598,15 +3465,15 @@ }, { "name": "wpackagist-plugin/force-regenerate-thumbnails", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/force-regenerate-thumbnails/", - "reference": "tags/2.2.0" + "reference": "tags/2.2.1" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/force-regenerate-thumbnails.2.2.0.zip" + "url": "https://downloads.wordpress.org/plugin/force-regenerate-thumbnails.2.2.1.zip" }, "require": { "composer/installers": "^1.0 || ^2.0" @@ -2614,24 +3481,6 @@ "type": "wordpress-plugin", "homepage": "https://wordpress.org/plugins/force-regenerate-thumbnails/" }, - { - "name": "wpackagist-plugin/polylang", - "version": "3.6.5", - "source": { - "type": "svn", - "url": "https://plugins.svn.wordpress.org/polylang/", - "reference": "tags/3.6.5" - }, - "dist": { - "type": "zip", - "url": "https://downloads.wordpress.org/plugin/polylang.3.6.5.zip" - }, - "require": { - "composer/installers": "^1.0 || ^2.0" - }, - "type": "wordpress-plugin", - "homepage": "https://wordpress.org/plugins/polylang/" - }, { "name": "wpackagist-plugin/query-monitor", "version": "3.16.4", @@ -2670,15 +3519,15 @@ }, { "name": "wpackagist-plugin/woocommerce", - "version": "9.4.0", + "version": "9.4.1", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/woocommerce/", - "reference": "tags/9.4.0" + "reference": "tags/9.4.1" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/woocommerce.9.4.0.zip" + "url": "https://downloads.wordpress.org/plugin/woocommerce.9.4.1.zip" }, "require": { "composer/installers": "^1.0 || ^2.0" @@ -2706,15 +3555,15 @@ }, { "name": "wpackagist-theme/twentytwentyfour", - "version": "1.2", + "version": "1.3", "source": { "type": "svn", "url": "https://themes.svn.wordpress.org/twentytwentyfour/", - "reference": "1.2" + "reference": "1.3" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/theme/twentytwentyfour.1.2.zip" + "url": "https://downloads.wordpress.org/theme/twentytwentyfour.1.3.zip" }, "require": { "composer/installers": "^1.0 || ^2.0" @@ -2886,16 +3735,16 @@ }, { "name": "composer/pcre", - "version": "3.3.1", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", - "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { @@ -2905,8 +3754,8 @@ "phpstan/phpstan": "<1.11.10" }, "require-dev": { - "phpstan/phpstan": "^1.11.10", - "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", "phpunit/phpunit": "^8 || ^9" }, "type": "library", @@ -2945,7 +3794,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.3.1" + "source": "https://github.com/composer/pcre/tree/3.3.2" }, "funding": [ { @@ -2961,7 +3810,7 @@ "type": "tidelift" } ], - "time": "2024-08-27T18:44:43+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { "name": "composer/semver", @@ -3791,59 +4640,6 @@ ], "time": "2024-11-11T15:37:09+00:00" }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, { "name": "psr/log", "version": "3.0.2", @@ -3900,12 +4696,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "e63317470a1b96346be224a68f9e64567e1001c3" + "reference": "1b71197bf4ffb07c6beb67162144e07052aac77c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/e63317470a1b96346be224a68f9e64567e1001c3", - "reference": "e63317470a1b96346be224a68f9e64567e1001c3", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/1b71197bf4ffb07c6beb67162144e07052aac77c", + "reference": "1b71197bf4ffb07c6beb67162144e07052aac77c", "shasum": "" }, "conflict": { @@ -4014,7 +4810,7 @@ "contao/managed-edition": "<=1.5", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", - "craftcms/cms": "<4.6.2|>=5,<=5.2.2", + "craftcms/cms": "<=4.12.6.1|>=5,<=5.4.7.1", "croogo/croogo": "<4", "cuyz/valinor": "<0.12", "czim/file-handling": "<1.5|>=2,<2.3", @@ -4224,7 +5020,7 @@ "lara-zeus/artemis": ">=1,<=1.0.6", "lara-zeus/dynamic-dashboard": ">=3,<=3.0.1", "laravel/fortify": "<1.11.1", - "laravel/framework": "<6.20.44|>=7,<7.30.6|>=8,<8.75", + "laravel/framework": "<6.20.45|>=7,<7.30.7|>=8,<8.83.28|>=9,<9.52.17|>=10,<10.48.23|>=11,<11.31", "laravel/laravel": ">=5.4,<5.4.22", "laravel/reverb": "<1.4", "laravel/socialite": ">=1,<2.0.10", @@ -4282,7 +5078,7 @@ "mojo42/jirafeau": "<4.4", "mongodb/mongodb": ">=1,<1.9.2", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.3.6|>=4.4.0.0-beta,<4.4.2", + "moodle/moodle": "<4.3.6|>=4.4,<4.4.2", "mos/cimage": "<0.7.19", "movim/moxl": ">=0.8,<=0.10", "movingbytes/social-network": "<=1.2.1", @@ -4330,7 +5126,7 @@ "openmage/magento-lts": "<20.10.1", "opensolutions/vimbadmin": "<=3.0.15", "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", - "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", + "orchid/platform": ">=8,<14.43", "oro/calendar-bundle": ">=4.2,<=4.2.6|>=5,<=5.0.6|>=5.1,<5.1.1", "oro/commerce": ">=4.1,<5.0.11|>=5.1,<5.1.1", "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", @@ -4520,7 +5316,7 @@ "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", - "symfony/http-client": ">=4.3,<5.4.46|>=6,<6.4.14|>=7,<7.1.7", + "symfony/http-client": ">=4.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", "symfony/http-foundation": "<5.4.46|>=6,<6.4.14|>=7,<7.1.7", "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", @@ -4538,9 +5334,9 @@ "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2|>=5.4,<5.4.31|>=6,<6.3.8", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": "<5.4.46|>=6,<6.4.14|>=7,<7.1.7", + "symfony/symfony": "<5.4.47|>=6,<6.4.15|>=7,<7.1.8", "symfony/translation": ">=2,<2.0.17", "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", "symfony/ux-autocomplete": "<2.11.2", @@ -4733,7 +5529,7 @@ "type": "tidelift" } ], - "time": "2024-11-07T19:04:57+00:00" + "time": "2024-11-13T16:05:45+00:00" }, { "name": "sebastian/diff", @@ -4952,16 +5748,16 @@ }, { "name": "symfony/console", - "version": "v7.1.7", + "version": "v7.1.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3284aafcac338b6e86fd955ee4d794cbe434151a" + "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3284aafcac338b6e86fd955ee4d794cbe434151a", - "reference": "3284aafcac338b6e86fd955ee4d794cbe434151a", + "url": "https://api.github.com/repos/symfony/console/zipball/ff04e5b5ba043d2badfb308197b9e6b42883fcd5", + "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5", "shasum": "" }, "require": { @@ -5025,7 +5821,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.7" + "source": "https://github.com/symfony/console/tree/v7.1.8" }, "funding": [ { @@ -5041,7 +5837,7 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:55+00:00" + "time": "2024-11-06T14:23:19+00:00" }, { "name": "symfony/filesystem", @@ -5429,16 +6225,16 @@ }, { "name": "symfony/string", - "version": "v7.1.6", + "version": "v7.1.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "61b72d66bf96c360a727ae6232df5ac83c71f626" + "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/61b72d66bf96c360a727ae6232df5ac83c71f626", - "reference": "61b72d66bf96c360a727ae6232df5ac83c71f626", + "url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281", + "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281", "shasum": "" }, "require": { @@ -5496,7 +6292,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.6" + "source": "https://github.com/symfony/string/tree/v7.1.8" }, "funding": [ { @@ -5512,7 +6308,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-11-13T13:31:21+00:00" }, { "name": "szepeviktor/phpstan-wordpress", diff --git a/justfile b/justfile index 73f3249e..d17e229b 100644 --- a/justfile +++ b/justfile @@ -68,6 +68,12 @@ build-css: --minify \ --output-file "web/app/themes/haiku-atelier-2024/assets/css/pages/page-contact.min.css" \ -- "web/app/themes/haiku-atelier-2024/assets/css/pages/page-contact.css" + pnpm lightningcss \ + --bundle \ + --minify \ + --output-file "web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.min.css" \ + -- "web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.css" + # Compile le CSS à chaque changement de fichier watch-css: diff --git a/package.json b/package.json index b70be4e9..0b9c2a9a 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "prettier": "^3.3.3", "prettier-plugin-pkg": "^0.18.1", "prettier-plugin-sh": "^0.14.0", - "sass": "^1.80.6", + "sass-embedded": "^1.80.7", "stylelint": "^16.10.0", "stylelint-config-clean-order": "^6.1.0", "stylelint-config-sass-guidelines": "^12.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d0434aac..c00327d1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -93,9 +93,9 @@ importers: prettier-plugin-sh: specifier: ^0.14.0 version: 0.14.0(prettier@3.3.3) - sass: - specifier: ^1.80.6 - version: 1.80.6 + sass-embedded: + specifier: ^1.80.7 + version: 1.80.7 stylelint: specifier: ^16.10.0 version: 16.10.0(typescript@5.7.0-dev.20241105) @@ -122,19 +122,19 @@ importers: version: 8.14.0(eslint@9.14.0(jiti@2.4.0))(typescript@5.7.0-dev.20241105) vite: specifier: ^5.4.11 - version: 5.4.11(@types/node@22.9.0)(sass@1.80.6) + version: 5.4.11(@types/node@22.9.0)(sass-embedded@1.80.7)(sass@1.80.6) vite-plugin-manifest-sri: specifier: ^0.2.0 version: 0.2.0 vite-plugin-node-polyfills: specifier: ^0.22.0 - version: 0.22.0(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(sass@1.80.6)) + version: 0.22.0(rollup@4.26.0)(vite@5.4.11(@types/node@22.9.0)(sass-embedded@1.80.7)(sass@1.80.6)) vite-plugin-valibot-env: specifier: ^0.8.5 - version: 0.8.5(valibot@1.0.0-beta.3(typescript@5.7.0-dev.20241105))(vite@5.4.11(@types/node@22.9.0)(sass@1.80.6)) + version: 0.8.5(valibot@1.0.0-beta.3(typescript@5.7.0-dev.20241105))(vite@5.4.11(@types/node@22.9.0)(sass-embedded@1.80.7)(sass@1.80.6)) vite-tsconfig-paths: specifier: ^5.1.2 - version: 5.1.2(typescript@5.7.0-dev.20241105)(vite@5.4.11(@types/node@22.9.0)(sass@1.80.6)) + version: 5.1.2(typescript@5.7.0-dev.20241105)(vite@5.4.11(@types/node@22.9.0)(sass-embedded@1.80.7)(sass@1.80.6)) wp-types: specifier: ^4.66.1 version: 4.66.1 @@ -282,6 +282,9 @@ packages: cpu: [x64] os: [win32] + '@bufbuild/protobuf@2.2.2': + resolution: {integrity: sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A==} + '@csstools/css-parser-algorithms@3.0.4': resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} engines: {node: '>=18'} @@ -773,93 +776,93 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.25.0': - resolution: {integrity: sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==} + '@rollup/rollup-android-arm-eabi@4.26.0': + resolution: {integrity: sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.25.0': - resolution: {integrity: sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==} + '@rollup/rollup-android-arm64@4.26.0': + resolution: {integrity: sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.25.0': - resolution: {integrity: sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==} + '@rollup/rollup-darwin-arm64@4.26.0': + resolution: {integrity: sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.25.0': - resolution: {integrity: sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==} + '@rollup/rollup-darwin-x64@4.26.0': + resolution: {integrity: sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.25.0': - resolution: {integrity: sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==} + '@rollup/rollup-freebsd-arm64@4.26.0': + resolution: {integrity: sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.25.0': - resolution: {integrity: sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==} + '@rollup/rollup-freebsd-x64@4.26.0': + resolution: {integrity: sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.25.0': - resolution: {integrity: sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==} + '@rollup/rollup-linux-arm-gnueabihf@4.26.0': + resolution: {integrity: sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.25.0': - resolution: {integrity: sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==} + '@rollup/rollup-linux-arm-musleabihf@4.26.0': + resolution: {integrity: sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.25.0': - resolution: {integrity: sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==} + '@rollup/rollup-linux-arm64-gnu@4.26.0': + resolution: {integrity: sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.25.0': - resolution: {integrity: sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==} + '@rollup/rollup-linux-arm64-musl@4.26.0': + resolution: {integrity: sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': - resolution: {integrity: sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==} + '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': + resolution: {integrity: sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.25.0': - resolution: {integrity: sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==} + '@rollup/rollup-linux-riscv64-gnu@4.26.0': + resolution: {integrity: sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.25.0': - resolution: {integrity: sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==} + '@rollup/rollup-linux-s390x-gnu@4.26.0': + resolution: {integrity: sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.25.0': - resolution: {integrity: sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==} + '@rollup/rollup-linux-x64-gnu@4.26.0': + resolution: {integrity: sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.25.0': - resolution: {integrity: sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==} + '@rollup/rollup-linux-x64-musl@4.26.0': + resolution: {integrity: sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.25.0': - resolution: {integrity: sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==} + '@rollup/rollup-win32-arm64-msvc@4.26.0': + resolution: {integrity: sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.25.0': - resolution: {integrity: sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==} + '@rollup/rollup-win32-ia32-msvc@4.26.0': + resolution: {integrity: sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.25.0': - resolution: {integrity: sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==} + '@rollup/rollup-win32-x64-msvc@4.26.0': + resolution: {integrity: sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==} cpu: [x64] os: [win32] @@ -1226,6 +1229,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-builder@0.2.0: + resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} + buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} @@ -1289,6 +1295,9 @@ packages: colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + colorjs.io@0.5.2: + resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} + commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} @@ -1411,11 +1420,11 @@ packages: easy-table@1.2.0: resolution: {integrity: sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==} - electron-to-chromium@1.5.56: - resolution: {integrity: sha512-7lXb9dAvimCFdvUMTyucD4mnIndt/xhRKFAlky0CyFogdnNmdPQNoHI23msF/2V4mpTxMzgMdjK4+YRlFlRQZw==} + electron-to-chromium@1.5.57: + resolution: {integrity: sha512-xS65H/tqgOwUBa5UmOuNSLuslDo7zho0y/lgQw35pnrqiZh7UOWHCeL/Bt6noJATbA6tpQJGCifsFsIRZj1Fqg==} - elliptic@6.6.0: - resolution: {integrity: sha512-dpwoQcLc/2WLQvJvLRHKZ+f9FgOdjnq11rurqwekGQygGPsYSK29OMMD2WalatiqQ+XGFDglTNixpPfI+lpaAA==} + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1769,6 +1778,9 @@ packages: immutable@4.3.7: resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + immutable@5.0.2: + resolution: {integrity: sha512-1NU7hWZDkV7hJ4PJ9dur9gTNQ4ePNPN4k9/0YhwjzykTi/+3Q5pF93YU5QoVj8BuOnhLgaY8gs0U2pj4kSYVcw==} + import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -2344,20 +2356,148 @@ packages: ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - rollup@4.25.0: - resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==} + rollup@4.26.0: + resolution: {integrity: sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + sass-embedded-android-arm64@1.80.7: + resolution: {integrity: sha512-Gwl/OY80uEA14MLm7efJvc1ErgGT51SvAv4/kIpTziOJpkk+999/nrEJHQ6YAJ7r5DuQcKvC3lHipcENUIpP9A==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [android] + + sass-embedded-android-arm@1.80.7: + resolution: {integrity: sha512-pMxJ70yOGXYGmfoGlAMKqnr/nuP/UgKV3jc7v5kpmWGpPPMF2u63DM2QkvTqM32FyfwyxSycVaNFNT+gPomTiw==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [android] + + sass-embedded-android-ia32@1.80.7: + resolution: {integrity: sha512-CJccGPgBePPYiXhyQWvgHF8AqjIDSGf+mcC4Ac/f5upRd9Z/vhQVrJfsDxt4c4tV0HGEfbQpT9xOCYF1Z6luZQ==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [android] + + sass-embedded-android-riscv64@1.80.7: + resolution: {integrity: sha512-kIGcyuhNes9NUDzJ9VHy/ZGKdADCCt7JAwiC7lFSc6/xs5rJtGRn6hZ+mcG7gQWAezb5oK/VMQl8ps7HBFUEXw==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [android] + + sass-embedded-android-x64@1.80.7: + resolution: {integrity: sha512-oLMQiFpbSczOrGZSWlZvVJ1T9L6nDjS2u8PTxfT0MFX/FT3EhaxylHeiYKrmtY4epRufNCC/G96DMVqnSNa1QQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [android] + + sass-embedded-darwin-arm64@1.80.7: + resolution: {integrity: sha512-Vi5BbTWd9OO0tC60CPw5IY7w3Tccr1/Gy2DdkfE4qP6Rc368WmUis5ceG8ehAye0IT7aoRXpw8XTzWyXAZHbfw==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [darwin] + + sass-embedded-darwin-x64@1.80.7: + resolution: {integrity: sha512-yeANclgSHJ7K/XLG4Lnk7aQ5dk7K+oqIOtoOP0bjXgWsdPbes9V7k1ZJ9mZGl+f/XAPaRRPqjKs4WHU9s8m8MA==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [darwin] + + sass-embedded-linux-arm64@1.80.7: + resolution: {integrity: sha512-Idb5K9LHHWklN7A/kqWUd6sktA36V70bSjZ/gvCDu/5CBJBkMsVNdrxcdpGzrZe7pYV4XUTkMZOwf91owEywtQ==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-arm@1.80.7: + resolution: {integrity: sha512-ZttC6H2Z9YXUVFlprqZ0AgXuHdzqhvhUWsG7UUqkND9JSHvyFSwRij4h90aOK3gKg3PBGI4yG5tonLq2yV525A==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-ia32@1.80.7: + resolution: {integrity: sha512-xKnWWEFz1jFc9xDAG7nMcjPBCTuiJbqvTmEtwQoWj79hQrzVdkLM6SiUGVbGa1c2s2fJMS3Bg2fkDJBK6/BcuQ==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-arm64@1.80.7: + resolution: {integrity: sha512-7+GCYIh+c1BG4ot/PbTvVXUxd2GxDWcMxV7i3sARStQBDpTZFfohWdjUytLyqGxQgJIrbq0Q60Ucrw6HUJtJ9A==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [linux] + + sass-embedded-linux-musl-arm@1.80.7: + resolution: {integrity: sha512-gJLfSFiiuGaqWjaj0bcuhOlQ+t1jS9StuzXnW1b9gy2I6Y0uCprgbbELgtRVPSZlCG2BBolR76YCGQTB85M43Q==} + engines: {node: '>=14.0.0'} + cpu: [arm] + os: [linux] + + sass-embedded-linux-musl-ia32@1.80.7: + resolution: {integrity: sha512-Iw2E6P1lha335C5tGNgPjLD7Oll7OdLBJ7uPKaU+I7KbiOPk7ELsxUL9AYIrKO0/MLtgxGqOWWfTo/5cvU8xSA==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [linux] + + sass-embedded-linux-musl-riscv64@1.80.7: + resolution: {integrity: sha512-gd92dkDVpTh4xJb2hpX82E6el30h4MxCb7VJLwtbQSrQuxOlZgaDX4plMSZifsNTLvOsafdLCYyI+QsZRr8bkA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-musl-x64@1.80.7: + resolution: {integrity: sha512-i5udU+i0LZrL3dhHAgIfK7LBaHtScwAceiykndNIHyRXc1TY2DX3lG0EolVUvPyWFUNnvGCgxZF8oUToPzJ+pw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-linux-riscv64@1.80.7: + resolution: {integrity: sha512-DvnXvu019c6THNQnSWfy2eY/HFWZ2ogGUjRkdKAxj7U7i/YD+bsDIxdDQHZ48qzOguzx8n2aRa/clriM0HQPUA==} + engines: {node: '>=14.0.0'} + cpu: [riscv64] + os: [linux] + + sass-embedded-linux-x64@1.80.7: + resolution: {integrity: sha512-nQB+IZwCzVPpPkP5L9zV416/AGPLky7L2GGPWtvxG2CEeTV1Rzet+gkhzk2eYEdbh+3py/w9YVRTaQuZ3QV0vQ==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [linux] + + sass-embedded-win32-arm64@1.80.7: + resolution: {integrity: sha512-Q6Rh/CM30m8txoKK5SIVamnwPXs028Mvfq4Ol4saHgSYro9kY/HTrrWlG/RPd6sPvYBCYIm1mX8oBteDUMCajQ==} + engines: {node: '>=14.0.0'} + cpu: [arm64] + os: [win32] + + sass-embedded-win32-ia32@1.80.7: + resolution: {integrity: sha512-VZMRp81KWUZZDqNwkL3yTDT+VRxB7ScJKUJD1M8fq6P1nyJP35+r1byXLF4UQMoNgpC5B16txxMvqdkv43OqAA==} + engines: {node: '>=14.0.0'} + cpu: [ia32] + os: [win32] + + sass-embedded-win32-x64@1.80.7: + resolution: {integrity: sha512-4p+GzOJJ1KqxPKrkIkKisod4YAcC70fj4WMRLrQLLuUW+MzAvtKgX2+ZJf90D50CozSdgETGBvdPSj3VLjBzZw==} + engines: {node: '>=14.0.0'} + cpu: [x64] + os: [win32] + + sass-embedded@1.80.7: + resolution: {integrity: sha512-OwF0QvpDUjW2udPCvxgaObU0tQHycpsIgCDtHBVHuOqZ2LN0OkkY+uxSO7bOaw9wD7vXtt+1V+jiIZDTxiSRVQ==} + engines: {node: '>=16.0.0'} + hasBin: true + sass@1.80.6: resolution: {integrity: sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg==} engines: {node: '>=14.0.0'} @@ -2572,6 +2712,10 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + supports-hyperlinks@3.1.0: resolution: {integrity: sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==} engines: {node: '>=14.18'} @@ -2583,6 +2727,14 @@ packages: svg-tags@1.0.0: resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + sync-child-process@1.0.2: + resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==} + engines: {node: '>=16.0.0'} + + sync-message-port@1.1.3: + resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==} + engines: {node: '>=16.0.0'} + table@6.8.2: resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} engines: {node: '>=10.0.0'} @@ -2688,6 +2840,9 @@ packages: typescript: optional: true + varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + vite-plugin-manifest-sri@0.2.0: resolution: {integrity: sha512-Zt5jt19xTIJ91LOuQTCtNG7rTFc5OziAjBz2H5NdCGqaOD1nxrWExLhcKW+W4/q8/jOPCg/n5ncYEQmqCxiGQQ==} @@ -2908,6 +3063,8 @@ snapshots: '@biomejs/cli-win32-x64@1.9.4': optional: true + '@bufbuild/protobuf@2.2.2': {} + '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': dependencies: '@csstools/css-tokenizer': 3.0.3 @@ -3237,74 +3394,74 @@ snapshots: '@xml-tools/parser': 1.0.11 prettier: 3.3.3 - '@rollup/plugin-inject@5.0.5(rollup@4.25.0)': + '@rollup/plugin-inject@5.0.5(rollup@4.26.0)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.25.0) + '@rollup/pluginutils': 5.1.3(rollup@4.26.0) estree-walker: 2.0.2 magic-string: 0.30.12 optionalDependencies: - rollup: 4.25.0 + rollup: 4.26.0 - '@rollup/pluginutils@5.1.3(rollup@4.25.0)': + '@rollup/pluginutils@5.1.3(rollup@4.26.0)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.25.0 + rollup: 4.26.0 - '@rollup/rollup-android-arm-eabi@4.25.0': + '@rollup/rollup-android-arm-eabi@4.26.0': optional: true - '@rollup/rollup-android-arm64@4.25.0': + '@rollup/rollup-android-arm64@4.26.0': optional: true - '@rollup/rollup-darwin-arm64@4.25.0': + '@rollup/rollup-darwin-arm64@4.26.0': optional: true - '@rollup/rollup-darwin-x64@4.25.0': + '@rollup/rollup-darwin-x64@4.26.0': optional: true - '@rollup/rollup-freebsd-arm64@4.25.0': + '@rollup/rollup-freebsd-arm64@4.26.0': optional: true - '@rollup/rollup-freebsd-x64@4.25.0': + '@rollup/rollup-freebsd-x64@4.26.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.25.0': + '@rollup/rollup-linux-arm-gnueabihf@4.26.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.25.0': + '@rollup/rollup-linux-arm-musleabihf@4.26.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.25.0': + '@rollup/rollup-linux-arm64-gnu@4.26.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.25.0': + '@rollup/rollup-linux-arm64-musl@4.26.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.25.0': + '@rollup/rollup-linux-riscv64-gnu@4.26.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.25.0': + '@rollup/rollup-linux-s390x-gnu@4.26.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.25.0': + '@rollup/rollup-linux-x64-gnu@4.26.0': optional: true - '@rollup/rollup-linux-x64-musl@4.25.0': + '@rollup/rollup-linux-x64-musl@4.26.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.25.0': + '@rollup/rollup-win32-arm64-msvc@4.26.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.25.0': + '@rollup/rollup-win32-ia32-msvc@4.26.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.25.0': + '@rollup/rollup-win32-x64-msvc@4.26.0': optional: true '@sentry-internal/browser-utils@8.38.0': @@ -3727,7 +3884,7 @@ snapshots: browserify-rsa: 4.1.1 create-hash: 1.2.0 create-hmac: 1.1.7 - elliptic: 6.6.0 + elliptic: 6.6.1 hash-base: 3.0.4 inherits: 2.0.4 parse-asn1: 5.1.7 @@ -3741,10 +3898,12 @@ snapshots: browserslist@4.24.2: dependencies: caniuse-lite: 1.0.30001680 - electron-to-chromium: 1.5.56 + electron-to-chromium: 1.5.57 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) + buffer-builder@0.2.0: {} + buffer-xor@1.0.3: {} buffer@5.7.1: @@ -3790,6 +3949,7 @@ snapshots: chokidar@4.0.1: dependencies: readdirp: 4.0.2 + optional: true cipher-base@1.0.4: dependencies: @@ -3813,6 +3973,8 @@ snapshots: colord@2.9.3: {} + colorjs.io@0.5.2: {} + commander@4.1.1: {} commander@8.3.0: {} @@ -3841,7 +4003,7 @@ snapshots: create-ecdh@4.0.4: dependencies: bn.js: 4.12.1 - elliptic: 6.6.0 + elliptic: 6.6.1 create-hash@1.2.0: dependencies: @@ -3953,9 +4115,9 @@ snapshots: optionalDependencies: wcwidth: 1.0.1 - electron-to-chromium@1.5.56: {} + electron-to-chromium@1.5.57: {} - elliptic@6.6.0: + elliptic@6.6.1: dependencies: bn.js: 4.12.1 brorand: 1.1.0 @@ -4358,7 +4520,10 @@ snapshots: ignore@6.0.2: {} - immutable@4.3.7: {} + immutable@4.3.7: + optional: true + + immutable@5.0.2: {} import-fresh@3.3.0: dependencies: @@ -4864,7 +5029,8 @@ snapshots: dependencies: readable-stream: 3.6.2 - readdirp@4.0.2: {} + readdirp@4.0.2: + optional: true regexp-to-ast@0.5.0: {} @@ -4893,38 +5059,134 @@ snapshots: hash-base: 3.0.4 inherits: 2.0.4 - rollup@4.25.0: + rollup@4.26.0: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.25.0 - '@rollup/rollup-android-arm64': 4.25.0 - '@rollup/rollup-darwin-arm64': 4.25.0 - '@rollup/rollup-darwin-x64': 4.25.0 - '@rollup/rollup-freebsd-arm64': 4.25.0 - '@rollup/rollup-freebsd-x64': 4.25.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.25.0 - '@rollup/rollup-linux-arm-musleabihf': 4.25.0 - '@rollup/rollup-linux-arm64-gnu': 4.25.0 - '@rollup/rollup-linux-arm64-musl': 4.25.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.25.0 - '@rollup/rollup-linux-riscv64-gnu': 4.25.0 - '@rollup/rollup-linux-s390x-gnu': 4.25.0 - '@rollup/rollup-linux-x64-gnu': 4.25.0 - '@rollup/rollup-linux-x64-musl': 4.25.0 - '@rollup/rollup-win32-arm64-msvc': 4.25.0 - '@rollup/rollup-win32-ia32-msvc': 4.25.0 - '@rollup/rollup-win32-x64-msvc': 4.25.0 + '@rollup/rollup-android-arm-eabi': 4.26.0 + '@rollup/rollup-android-arm64': 4.26.0 + '@rollup/rollup-darwin-arm64': 4.26.0 + '@rollup/rollup-darwin-x64': 4.26.0 + '@rollup/rollup-freebsd-arm64': 4.26.0 + '@rollup/rollup-freebsd-x64': 4.26.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.26.0 + '@rollup/rollup-linux-arm-musleabihf': 4.26.0 + '@rollup/rollup-linux-arm64-gnu': 4.26.0 + '@rollup/rollup-linux-arm64-musl': 4.26.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.26.0 + '@rollup/rollup-linux-riscv64-gnu': 4.26.0 + '@rollup/rollup-linux-s390x-gnu': 4.26.0 + '@rollup/rollup-linux-x64-gnu': 4.26.0 + '@rollup/rollup-linux-x64-musl': 4.26.0 + '@rollup/rollup-win32-arm64-msvc': 4.26.0 + '@rollup/rollup-win32-ia32-msvc': 4.26.0 + '@rollup/rollup-win32-x64-msvc': 4.26.0 fsevents: 2.3.3 run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} + sass-embedded-android-arm64@1.80.7: + optional: true + + sass-embedded-android-arm@1.80.7: + optional: true + + sass-embedded-android-ia32@1.80.7: + optional: true + + sass-embedded-android-riscv64@1.80.7: + optional: true + + sass-embedded-android-x64@1.80.7: + optional: true + + sass-embedded-darwin-arm64@1.80.7: + optional: true + + sass-embedded-darwin-x64@1.80.7: + optional: true + + sass-embedded-linux-arm64@1.80.7: + optional: true + + sass-embedded-linux-arm@1.80.7: + optional: true + + sass-embedded-linux-ia32@1.80.7: + optional: true + + sass-embedded-linux-musl-arm64@1.80.7: + optional: true + + sass-embedded-linux-musl-arm@1.80.7: + optional: true + + sass-embedded-linux-musl-ia32@1.80.7: + optional: true + + sass-embedded-linux-musl-riscv64@1.80.7: + optional: true + + sass-embedded-linux-musl-x64@1.80.7: + optional: true + + sass-embedded-linux-riscv64@1.80.7: + optional: true + + sass-embedded-linux-x64@1.80.7: + optional: true + + sass-embedded-win32-arm64@1.80.7: + optional: true + + sass-embedded-win32-ia32@1.80.7: + optional: true + + sass-embedded-win32-x64@1.80.7: + optional: true + + sass-embedded@1.80.7: + dependencies: + '@bufbuild/protobuf': 2.2.2 + buffer-builder: 0.2.0 + colorjs.io: 0.5.2 + immutable: 5.0.2 + rxjs: 7.8.1 + supports-color: 8.1.1 + sync-child-process: 1.0.2 + varint: 6.0.0 + optionalDependencies: + sass-embedded-android-arm: 1.80.7 + sass-embedded-android-arm64: 1.80.7 + sass-embedded-android-ia32: 1.80.7 + sass-embedded-android-riscv64: 1.80.7 + sass-embedded-android-x64: 1.80.7 + sass-embedded-darwin-arm64: 1.80.7 + sass-embedded-darwin-x64: 1.80.7 + sass-embedded-linux-arm: 1.80.7 + sass-embedded-linux-arm64: 1.80.7 + sass-embedded-linux-ia32: 1.80.7 + sass-embedded-linux-musl-arm: 1.80.7 + sass-embedded-linux-musl-arm64: 1.80.7 + sass-embedded-linux-musl-ia32: 1.80.7 + sass-embedded-linux-musl-riscv64: 1.80.7 + sass-embedded-linux-musl-x64: 1.80.7 + sass-embedded-linux-riscv64: 1.80.7 + sass-embedded-linux-x64: 1.80.7 + sass-embedded-win32-arm64: 1.80.7 + sass-embedded-win32-ia32: 1.80.7 + sass-embedded-win32-x64: 1.80.7 + sass@1.80.6: dependencies: chokidar: 4.0.1 @@ -4932,6 +5194,7 @@ snapshots: source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.0 + optional: true semver-regex@4.0.5: {} @@ -5168,6 +5431,10 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + supports-hyperlinks@3.1.0: dependencies: has-flag: 4.0.0 @@ -5177,6 +5444,12 @@ snapshots: svg-tags@1.0.0: {} + sync-child-process@1.0.2: + dependencies: + sync-message-port: 1.1.3 + + sync-message-port@1.1.3: {} + table@6.8.2: dependencies: ajv: 8.17.1 @@ -5270,43 +5543,46 @@ snapshots: optionalDependencies: typescript: 5.7.0-dev.20241105 + varint@6.0.0: {} + vite-plugin-manifest-sri@0.2.0: {} - vite-plugin-node-polyfills@0.22.0(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(sass@1.80.6)): + vite-plugin-node-polyfills@0.22.0(rollup@4.26.0)(vite@5.4.11(@types/node@22.9.0)(sass-embedded@1.80.7)(sass@1.80.6)): dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.25.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.26.0) node-stdlib-browser: 1.2.1 - vite: 5.4.11(@types/node@22.9.0)(sass@1.80.6) + vite: 5.4.11(@types/node@22.9.0)(sass-embedded@1.80.7)(sass@1.80.6) transitivePeerDependencies: - rollup - vite-plugin-valibot-env@0.8.5(valibot@1.0.0-beta.3(typescript@5.7.0-dev.20241105))(vite@5.4.11(@types/node@22.9.0)(sass@1.80.6)): + vite-plugin-valibot-env@0.8.5(valibot@1.0.0-beta.3(typescript@5.7.0-dev.20241105))(vite@5.4.11(@types/node@22.9.0)(sass-embedded@1.80.7)(sass@1.80.6)): dependencies: kleur: 4.1.5 log-symbols: 7.0.0 valibot: 1.0.0-beta.3(typescript@5.7.0-dev.20241105) - vite: 5.4.11(@types/node@22.9.0)(sass@1.80.6) + vite: 5.4.11(@types/node@22.9.0)(sass-embedded@1.80.7)(sass@1.80.6) - vite-tsconfig-paths@5.1.2(typescript@5.7.0-dev.20241105)(vite@5.4.11(@types/node@22.9.0)(sass@1.80.6)): + vite-tsconfig-paths@5.1.2(typescript@5.7.0-dev.20241105)(vite@5.4.11(@types/node@22.9.0)(sass-embedded@1.80.7)(sass@1.80.6)): dependencies: debug: 4.3.7 globrex: 0.1.2 tsconfck: 3.1.4(typescript@5.7.0-dev.20241105) optionalDependencies: - vite: 5.4.11(@types/node@22.9.0)(sass@1.80.6) + vite: 5.4.11(@types/node@22.9.0)(sass-embedded@1.80.7)(sass@1.80.6) transitivePeerDependencies: - supports-color - typescript - vite@5.4.11(@types/node@22.9.0)(sass@1.80.6): + vite@5.4.11(@types/node@22.9.0)(sass-embedded@1.80.7)(sass@1.80.6): dependencies: esbuild: 0.21.5 postcss: 8.4.49 - rollup: 4.25.0 + rollup: 4.26.0 optionalDependencies: '@types/node': 22.9.0 fsevents: 2.3.3 sass: 1.80.6 + sass-embedded: 1.80.7 vm-browserify@1.1.2: {} diff --git a/web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.css b/web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.css new file mode 100644 index 00000000..f2a5712c --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.css @@ -0,0 +1,111 @@ +#page-succes-commande { + --page-hauteur-minimale: calc( + 100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--espace-xl) - 1px + ); + --page-marges-bloc-debut: var(--en-tete-hauteur); + display: flex; + flex-flow: column nowrap; + margin-top: var(--page-marges-bloc-debut); + margin-bottom: var(--espace-xl); + border-bottom: 1px solid var(--couleur-noir); +} +#page-succes-commande .contenu { + display: flex; + flex-flow: column nowrap; + place-items: center; + width: min(50rem, 100%); + min-height: var(--page-hauteur-minimale); + margin: auto; + font-weight: 500; + font-style: italic; + border: 1px solid var(--couleur-noir); + border-bottom: initial; +} +#page-succes-commande .contenu__en-tete { + width: 100%; + padding: var(--espace-m) var(--espace-xl); + color: var(--couleur-blanc); + background: var(--couleur-noir); +} +#page-succes-commande .contenu__en-tete h2 { + width: fit-content; + margin: auto; + text-transform: uppercase; + letter-spacing: var(--espacement-inter-lettres-etendu-l); +} +#page-succes-commande .contenu__rappel-commande { + display: flex; + flex-flow: column nowrap; +} +#page-succes-commande .contenu__rappel-commande__produit { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr; + border-bottom: 1px solid var(--couleur-noir); +} +#page-succes-commande .contenu__rappel-commande__produit__illustratif { + padding: var(--espace-l); + border-right: 1px solid var(--couleur-noir); +} +#page-succes-commande .contenu__rappel-commande__produit__illustratif picture { + overflow: hidden; +} +#page-succes-commande .contenu__rappel-commande__produit__illustratif img { + aspect-ratio: 1; + height: auto; + transition: 0.2s scale; +} +@media (hover: hover) { + #page-succes-commande .contenu__rappel-commande__produit__illustratif img:hover { + scale: 1.1; + } +} +#page-succes-commande .contenu__rappel-commande .detail-produit { + display: flex; + flex-flow: column nowrap; + place-content: center; + width: 100%; + padding: 0 var(--espace-xl); + font-style: italic; +} +#page-succes-commande .contenu__rappel-commande .detail-produit__nom-prix { + display: flex; + flex-flow: row nowrap; + column-gap: var(--espace-xl); + justify-content: space-between; + font-size: var(--espace-l); + line-height: var(--hauteur-ligne-moitie); + margin-bottom: var(--espace-xs); +} +#page-succes-commande .contenu__rappel-commande .detail-produit__nom-prix span { + min-width: 4rem; + font-weight: 600; + text-align: right; + font-style: initial; +} +#page-succes-commande .contenu__rappel-commande .detail-produit__description { + margin-bottom: var(--espace-l); + text-transform: lowercase; + line-height: var(--hauteur-ligne-moitie); +} +#page-succes-commande .contenu__textuel { + display: flex; + flex: 1; + flex-flow: column nowrap; + place-content: center; + max-width: 34rem; + height: 100%; + padding: var(--espace-xl); + font-style: normal; +} +#page-succes-commande .contenu__textuel p + p { + margin-top: var(--espace-m); +} +@media (width <= 50rem) { + #page-succes-commande .contenu { + border-right: initial; + border-left: initial; + } +} + +/*# sourceMappingURL=page-succes-commande.css.map */ diff --git a/web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.css.map b/web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.css.map new file mode 100644 index 00000000..549ecdd0 --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../src/sass/pages/page-succes-commande.scss"],"names":[],"mappings":"AAEA;EAEE;AAAA;AAAA;EAKA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AAGA;EACE;IACE;;;AAQV;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;IACE;IACA","file":"page-succes-commande.css"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.min.css b/web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.min.css new file mode 100644 index 00000000..4cc0525f --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/css/pages/page-succes-commande.min.css @@ -0,0 +1 @@ +#page-succes-commande{--page-hauteur-minimale:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--espace-xl) - 1px);--page-marges-bloc-debut:var(--en-tete-hauteur);margin-top:var(--page-marges-bloc-debut);margin-bottom:var(--espace-xl);border-bottom:1px solid var(--couleur-noir);flex-flow:column;display:flex}#page-succes-commande .contenu{width:min(50rem,100%);min-height:var(--page-hauteur-minimale);border:1px solid var(--couleur-noir);border-bottom:initial;flex-flow:column;place-items:center;margin:auto;font-style:italic;font-weight:500;display:flex}#page-succes-commande .contenu__en-tete{width:100%;padding:var(--espace-m)var(--espace-xl);color:var(--couleur-blanc);background:var(--couleur-noir)}#page-succes-commande .contenu__en-tete h2{text-transform:uppercase;width:fit-content;letter-spacing:var(--espacement-inter-lettres-etendu-l);margin:auto}#page-succes-commande .contenu__rappel-commande{flex-flow:column;display:flex}#page-succes-commande .contenu__rappel-commande__produit{border-bottom:1px solid var(--couleur-noir);grid-template-rows:1fr;grid-template-columns:1fr 1fr;display:grid}#page-succes-commande .contenu__rappel-commande__produit__illustratif{padding:var(--espace-l);border-right:1px solid var(--couleur-noir)}#page-succes-commande .contenu__rappel-commande__produit__illustratif picture{overflow:hidden}#page-succes-commande .contenu__rappel-commande__produit__illustratif img{aspect-ratio:1;height:auto;transition:scale .2s}@media (hover:hover){#page-succes-commande .contenu__rappel-commande__produit__illustratif img:hover{scale:1.1}}#page-succes-commande .contenu__rappel-commande .detail-produit{width:100%;padding:0 var(--espace-xl);flex-flow:column;place-content:center;font-style:italic;display:flex}#page-succes-commande .contenu__rappel-commande .detail-produit__nom-prix{column-gap:var(--espace-xl);font-size:var(--espace-l);line-height:var(--hauteur-ligne-moitie);margin-bottom:var(--espace-xs);flex-flow:row;justify-content:space-between;display:flex}#page-succes-commande .contenu__rappel-commande .detail-produit__nom-prix span{text-align:right;min-width:4rem;font-weight:600;font-style:initial}#page-succes-commande .contenu__rappel-commande .detail-produit__description{margin-bottom:var(--espace-l);text-transform:lowercase;line-height:var(--hauteur-ligne-moitie)}#page-succes-commande .contenu__textuel{max-width:34rem;height:100%;padding:var(--espace-xl);flex-flow:column;flex:1;place-content:center;font-style:normal;display:flex}#page-succes-commande .contenu__textuel p+p{margin-top:var(--espace-m)}@media (width<=50rem){#page-succes-commande .contenu{border-right:initial;border-left:initial}} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/exports.DtgtFHVi.js.map b/web/app/themes/haiku-atelier-2024/assets/js/exports.DtgtFHVi.js.map index b975dfaf..edfb4c98 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/exports.DtgtFHVi.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/exports.DtgtFHVi.js.map @@ -1 +1 @@ -{"version":3,"file":"exports.DtgtFHVi.js","sources":["../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/is.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/string.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/version.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/worldwide.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/browser.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/debug-build.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/logger.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/object.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/stacktrace.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/time.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/memo.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/misc.js","../../../../../../node_modules/.pnpm/vite-plugin-node-polyfills@0.22.0_rollup@4.25.0_vite@5.4.11_@types+node@22.9.0_sass@1.80.6_/node_modules/vite-plugin-node-polyfills/shims/global/dist/index.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/normalize.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/syncpromise.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/baggage.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/propagationContext.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/debug-ids.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/debug-build.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/carrier.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/session.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/scope.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/defaultScopes.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/asyncContext/index.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/currentScopes.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/metrics/metric-summary.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/semanticAttributes.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/utils/hasTracingEnabled.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/constants.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/eventProcessors.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/utils/prepareEvent.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/exports.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n case '[object WebAssembly.Exception]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat, className) {\n return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isErrorEvent(wat) {\n return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMError(wat) {\n return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMException(wat) {\n return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isString(wat) {\n return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isParameterizedString(wat) {\n return (\n typeof wat === 'object' &&\n wat !== null &&\n '__sentry_template_string__' in wat &&\n '__sentry_template_values__' in wat\n );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPrimitive(wat) {\n return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPlainObject(wat) {\n return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isEvent(wat) {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isElement(wat) {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isRegExp(wat) {\n return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nfunction isThenable(wat) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isSyntheticEvent(wat) {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nfunction isInstanceOf(wat, base) {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\n\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isVueViewModel(wat) {\n // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n return !!(typeof wat === 'object' && wat !== null && ((wat ).__isVue || (wat )._isVue));\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable, isVueViewModel };\n//# sourceMappingURL=is.js.map\n","import { isVueViewModel, isString, isRegExp } from './is.js';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nfunction truncate(str, max = 0) {\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line, colno) {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction safeJoin(input, delimiter) {\n if (!Array.isArray(input)) {\n return '';\n }\n\n const output = [];\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n try {\n // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n // console warnings. This happens when a Vue template is rendered with\n // an undeclared variable, which we try to stringify, ultimately causing\n // Vue to issue another warning which repeats indefinitely.\n // see: https://github.com/getsentry/sentry-javascript/pull/8981\n if (isVueViewModel(value)) {\n output.push('[VueViewModel]');\n } else {\n output.push(String(value));\n }\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nfunction isMatchingPattern(\n value,\n pattern,\n requireExactStringMatch = false,\n) {\n if (!isString(value)) {\n return false;\n }\n\n if (isRegExp(pattern)) {\n return pattern.test(value);\n }\n if (isString(pattern)) {\n return requireExactStringMatch ? value === pattern : value.includes(pattern);\n }\n\n return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nfunction stringMatchesSomePattern(\n testString,\n patterns = [],\n requireExactStringMatch = false,\n) {\n return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, truncate };\n//# sourceMappingURL=string.js.map\n","const SDK_VERSION = '8.38.0';\n\nexport { SDK_VERSION };\n//# sourceMappingURL=version.js.map\n","import { SDK_VERSION } from './version.js';\n\n/** Get's the global object for the current JavaScript runtime */\nconst GLOBAL_OBJ = globalThis ;\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__[]` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nfunction getGlobalSingleton(name, creator, obj) {\n const gbl = (obj || GLOBAL_OBJ) ;\n const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n const versionedCarrier = (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n return versionedCarrier[name] || (versionedCarrier[name] = creator());\n}\n\nexport { GLOBAL_OBJ, getGlobalSingleton };\n//# sourceMappingURL=worldwide.js.map\n","import { isString } from './is.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction htmlTreeAsString(\n elem,\n options = {},\n) {\n if (!elem) {\n return '';\n }\n\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n let currentElem = elem ;\n const MAX_TRAVERSE_HEIGHT = 5;\n const out = [];\n let height = 0;\n let len = 0;\n const separator = ' > ';\n const sepLength = separator.length;\n let nextStr;\n const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds maxStringLength\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return '';\n }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el, keyAttrs) {\n const elem = el\n\n;\n\n const out = [];\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n // @ts-expect-error WINDOW has HTMLElement\n if (WINDOW.HTMLElement) {\n // If using the component name annotation plugin, this value may be available on the DOM node\n if (elem instanceof HTMLElement && elem.dataset) {\n if (elem.dataset['sentryComponent']) {\n return elem.dataset['sentryComponent'];\n }\n if (elem.dataset['sentryElement']) {\n return elem.dataset['sentryElement'];\n }\n }\n }\n\n out.push(elem.tagName.toLowerCase());\n\n // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n const keyAttrPairs =\n keyAttrs && keyAttrs.length\n ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n : null;\n\n if (keyAttrPairs && keyAttrPairs.length) {\n keyAttrPairs.forEach(keyAttrPair => {\n out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n });\n } else {\n if (elem.id) {\n out.push(`#${elem.id}`);\n }\n\n const className = elem.className;\n if (className && isString(className)) {\n const classes = className.split(/\\s+/);\n for (const c of classes) {\n out.push(`.${c}`);\n }\n }\n }\n const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n for (const k of allowedAttrs) {\n const attr = elem.getAttribute(k);\n if (attr) {\n out.push(`[${k}=\"${attr}\"]`);\n }\n }\n\n return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nfunction getLocationHref() {\n try {\n return WINDOW.document.location.href;\n } catch (oO) {\n return '';\n }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existence of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getDomElement(selector) {\n if (WINDOW.document && WINDOW.document.querySelector) {\n return WINDOW.document.querySelector(selector) ;\n }\n return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` or `data-sentry-element` attribute with `data-sentry-component` taking\n * precedence. This attribute is added at build-time by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nfunction getComponentName(elem) {\n // @ts-expect-error WINDOW has HTMLElement\n if (!WINDOW.HTMLElement) {\n return null;\n }\n\n let currentElem = elem ;\n const MAX_TRAVERSE_HEIGHT = 5;\n for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n if (!currentElem) {\n return null;\n }\n\n if (currentElem instanceof HTMLElement) {\n if (currentElem.dataset['sentryComponent']) {\n return currentElem.dataset['sentryComponent'];\n }\n if (currentElem.dataset['sentryElement']) {\n return currentElem.dataset['sentryElement'];\n }\n }\n\n currentElem = currentElem.parentNode;\n }\n\n return null;\n}\n\nexport { getComponentName, getDomElement, getLocationHref, htmlTreeAsString };\n//# sourceMappingURL=browser.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { getGlobalSingleton, GLOBAL_OBJ } from './worldwide.js';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nconst CONSOLE_LEVELS = [\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'log',\n 'assert',\n 'trace',\n] ;\n\n/** This may be mutated by the console instrumentation. */\nconst originalConsoleMethods\n\n = {};\n\n/** JSDoc */\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nfunction consoleSandbox(callback) {\n if (!('console' in GLOBAL_OBJ)) {\n return callback();\n }\n\n const console = GLOBAL_OBJ.console ;\n const wrappedFuncs = {};\n\n const wrappedLevels = Object.keys(originalConsoleMethods) ;\n\n // Restore all wrapped console methods\n wrappedLevels.forEach(level => {\n const originalConsoleMethod = originalConsoleMethods[level] ;\n wrappedFuncs[level] = console[level] ;\n console[level] = originalConsoleMethod;\n });\n\n try {\n return callback();\n } finally {\n // Revert restoration to wrapped state\n wrappedLevels.forEach(level => {\n console[level] = wrappedFuncs[level] ;\n });\n }\n}\n\nfunction makeLogger() {\n let enabled = false;\n const logger = {\n enable: () => {\n enabled = true;\n },\n disable: () => {\n enabled = false;\n },\n isEnabled: () => enabled,\n };\n\n if (DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(name => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n logger[name] = (...args) => {\n if (enabled) {\n consoleSandbox(() => {\n GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n });\n }\n };\n });\n } else {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = () => undefined;\n });\n }\n\n return logger ;\n}\n\n/**\n * This is a logger singleton which either logs things or no-ops if logging is not enabled.\n * The logger is a singleton on the carrier, to ensure that a consistent logger is used throughout the SDK.\n */\nconst logger = getGlobalSingleton('logger', makeLogger);\n\nexport { CONSOLE_LEVELS, consoleSandbox, logger, originalConsoleMethods };\n//# sourceMappingURL=logger.js.map\n","import { htmlTreeAsString } from './browser.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { isError, isEvent, isInstanceOf, isElement, isPlainObject, isPrimitive } from './is.js';\nimport { logger } from './logger.js';\nimport { truncate } from './string.js';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, )` or `origMethod.apply(this, [])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n if (!(name in source)) {\n return;\n }\n\n const original = source[name] ;\n const wrapped = replacementFactory(original) ;\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n markFunctionWrapped(wrapped, original);\n }\n\n source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\n try {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n } catch (o_O) {\n DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nfunction markFunctionWrapped(wrapped, original) {\n try {\n const proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nfunction getOriginalFunction(func) {\n return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nfunction urlEncode(object) {\n return Object.keys(object)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argument itself, when value is neither an Event nor\n * an Error.\n */\nfunction convertToPlainObject(\n value,\n)\n\n {\n if (isError(value)) {\n return {\n message: value.message,\n name: value.name,\n stack: value.stack,\n ...getOwnProperties(value),\n };\n } else if (isEvent(value)) {\n const newObj\n\n = {\n type: value.type,\n target: serializeEventTarget(value.target),\n currentTarget: serializeEventTarget(value.currentTarget),\n ...getOwnProperties(value),\n };\n\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n newObj.detail = value.detail;\n }\n\n return newObj;\n } else {\n return value;\n }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target) {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n } catch (_oO) {\n return '';\n }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n if (typeof obj === 'object' && obj !== null) {\n const extractedProps = {};\n for (const property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = (obj )[property];\n }\n }\n return extractedProps;\n } else {\n return {};\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception, maxLength = 40) {\n const keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n\n const firstKey = keys[0];\n\n if (!firstKey) {\n return '[object has no keys]';\n }\n\n if (firstKey.length >= maxLength) {\n return truncate(firstKey, maxLength);\n }\n\n for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n const serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n\n return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nfunction dropUndefinedKeys(inputValue) {\n // This map keeps track of what already visited nodes map to.\n // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n // references as the input object.\n const memoizationMap = new Map();\n\n // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n if (isPojo(inputValue)) {\n // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n const returnValue = {};\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n for (const key of Object.getOwnPropertyNames(inputValue)) {\n if (typeof inputValue[key] !== 'undefined') {\n returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n }\n }\n\n return returnValue ;\n }\n\n if (Array.isArray(inputValue)) {\n // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n const returnValue = [];\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n inputValue.forEach((item) => {\n returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n });\n\n return returnValue ;\n }\n\n return inputValue;\n}\n\nfunction isPojo(input) {\n if (!isPlainObject(input)) {\n return false;\n }\n\n try {\n const name = (Object.getPrototypeOf(input) ).constructor.name;\n return !name || name === 'Object';\n } catch (e) {\n return true;\n }\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nfunction objectify(wat) {\n let objectified;\n switch (true) {\n case wat === undefined || wat === null:\n objectified = new String(wat);\n break;\n\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n objectified = new (wat ).constructor(wat);\n break;\n\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify, urlEncode };\n//# sourceMappingURL=object.js.map\n","const STACKTRACE_FRAME_LIMIT = 50;\nconst UNKNOWN_FUNCTION = '?';\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nfunction createStackParser(...parsers) {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n return (stack, skipFirstLines = 0, framesToPop = 0) => {\n const frames = [];\n const lines = stack.split('\\n');\n\n for (let i = skipFirstLines; i < lines.length; i++) {\n const line = lines[i] ;\n // Ignore lines over 1kb as they are unlikely to be stack frames.\n // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n // input size. Huge strings can result in hangs/Denial of Service:\n // https://github.com/getsentry/sentry-javascript/issues/2286\n if (line.length > 1024) {\n continue;\n }\n\n // https://github.com/getsentry/sentry-javascript/issues/5459\n // Remove webpack (error: *) wrappers\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n // https://github.com/getsentry/sentry-javascript/issues/7813\n // Skip Error: lines\n if (cleanedLine.match(/\\S*Error: /)) {\n continue;\n }\n\n for (const parser of sortedParsers) {\n const frame = parser(cleanedLine);\n\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n\n if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) {\n break;\n }\n }\n\n return stripSentryFramesAndReverse(frames.slice(framesToPop));\n };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nfunction stackParserFromStackParserOptions(stackParser) {\n if (Array.isArray(stackParser)) {\n return createStackParser(...stackParser);\n }\n return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nfunction stripSentryFramesAndReverse(stack) {\n if (!stack.length) {\n return [];\n }\n\n const localStack = Array.from(stack);\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (/sentryWrapped/.test(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n }\n\n // Reversing in the middle of the procedure allows us to just pop the values off the stack\n localStack.reverse();\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n\n // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n // is produced within the hub itself, making it:\n //\n // Sentry.captureException()\n // getCurrentHub().captureException()\n //\n // instead of just the top `Sentry` call itself.\n // This forces us to possibly strip an additional frame in the exact same was as above.\n if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n }\n }\n\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n ...frame,\n filename: frame.filename || getLastStackFrame(localStack).filename,\n function: frame.function || UNKNOWN_FUNCTION,\n }));\n}\n\nfunction getLastStackFrame(arr) {\n return arr[arr.length - 1] || {};\n}\n\nconst defaultFunctionName = '';\n\n/**\n * Safely extract function name from itself\n */\nfunction getFunctionName(fn) {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n\n/**\n * Get's stack frames from an event without needing to check for undefined properties.\n */\nfunction getFramesFromEvent(event) {\n const exception = event.exception;\n\n if (exception) {\n const frames = [];\n try {\n // @ts-expect-error Object could be undefined\n exception.values.forEach(value => {\n // @ts-expect-error Value could be undefined\n if (value.stacktrace.frames) {\n // @ts-expect-error Value could be undefined\n frames.push(...value.stacktrace.frames);\n }\n });\n return frames;\n } catch (_oO) {\n return undefined;\n }\n }\n return undefined;\n}\n\nexport { UNKNOWN_FUNCTION, createStackParser, getFramesFromEvent, getFunctionName, stackParserFromStackParserOptions, stripSentryFramesAndReverse };\n//# sourceMappingURL=stacktrace.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nfunction dateTimestampInSeconds() {\n return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc() {\n const { performance } = GLOBAL_OBJ ;\n if (!performance || !performance.now) {\n return dateTimestampInSeconds;\n }\n\n // Some browser and environments don't have a timeOrigin, so we fallback to\n // using Date.now() to compute the starting time.\n const approxStartingTimeOrigin = Date.now() - performance.now();\n const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n //\n // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n // correct for this.\n // See: https://github.com/getsentry/sentry-javascript/issues/2590\n // See: https://github.com/mdn/content/issues/4713\n // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n return () => {\n return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nconst timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nlet _browserPerformanceTimeOriginMode;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nconst browserPerformanceTimeOrigin = (() => {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n\n const { performance } = GLOBAL_OBJ ;\n if (!performance || !performance.now) {\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n const threshold = 3600 * 1000;\n const performanceNow = performance.now();\n const dateNow = Date.now();\n\n // if timeOrigin isn't available set delta to threshold so it isn't used\n const timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n const timeOriginIsReliable = timeOriginDelta < threshold;\n\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n // eslint-disable-next-line deprecation/deprecation\n const navigationStart = performance.timing && performance.timing.navigationStart;\n const hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n const navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n\nexport { _browserPerformanceTimeOriginMode, browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds };\n//# sourceMappingURL=time.js.map\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Helper to decycle json objects\n */\nfunction memoBuilder() {\n const hasWeakSet = typeof WeakSet === 'function';\n const inner = hasWeakSet ? new WeakSet() : [];\n function memoize(obj) {\n if (hasWeakSet) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < inner.length; i++) {\n const value = inner[i];\n if (value === obj) {\n return true;\n }\n }\n inner.push(obj);\n return false;\n }\n\n function unmemoize(obj) {\n if (hasWeakSet) {\n inner.delete(obj);\n } else {\n for (let i = 0; i < inner.length; i++) {\n if (inner[i] === obj) {\n inner.splice(i, 1);\n break;\n }\n }\n }\n }\n return [memoize, unmemoize];\n}\n\nexport { memoBuilder };\n//# sourceMappingURL=memo.js.map\n","import { addNonEnumerableProperty } from './object.js';\nimport { snipLine } from './string.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nfunction uuid4() {\n const gbl = GLOBAL_OBJ ;\n const crypto = gbl.crypto || gbl.msCrypto;\n\n let getRandomByte = () => Math.random() * 16;\n try {\n if (crypto && crypto.randomUUID) {\n return crypto.randomUUID().replace(/-/g, '');\n }\n if (crypto && crypto.getRandomValues) {\n getRandomByte = () => {\n // crypto.getRandomValues might return undefined instead of the typed array\n // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n // However, `typedArray` is still filled in-place.\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n const typedArray = new Uint8Array(1);\n crypto.getRandomValues(typedArray);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return typedArray[0];\n };\n }\n } catch (_) {\n // some runtimes can crash invoking crypto\n // https://github.com/getsentry/sentry-javascript/issues/8935\n }\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n return (([1e7] ) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n // eslint-disable-next-line no-bitwise\n ((c ) ^ ((getRandomByte() & 15) >> ((c ) / 4))).toString(16),\n );\n}\n\nfunction getFirstException(event) {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nfunction getEventDescription(event) {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n\n const firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || '';\n }\n return eventId || '';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nfunction addExceptionTypeValue(event, value, type) {\n const exception = (event.exception = event.exception || {});\n const values = (exception.values = exception.values || []);\n const firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nfunction addExceptionMechanism(event, newMechanism) {\n const firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n\n const defaultMechanism = { type: 'generic', handled: true };\n const currentMechanism = firstException.mechanism;\n firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n if (newMechanism && 'data' in newMechanism) {\n const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n firstException.mechanism.data = mergedData;\n }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\n\nfunction _parseInt(input) {\n return parseInt(input || '', 10);\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n const match = input.match(SEMVER_REGEXP) || [];\n const major = _parseInt(match[1]);\n const minor = _parseInt(match[2]);\n const patch = _parseInt(match[3]);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n if (frame.lineno === undefined) {\n return;\n }\n\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line) => snipLine(line, 0));\n\n // We guard here to ensure this is not larger than the existing number of lines\n const lineIndex = Math.min(maxLines - 1, sourceLine);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n frame.context_line = snipLine(lines[lineIndex], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nfunction checkOrSetAlreadyCaught(exception) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (exception && (exception ).__sentry_captured__) {\n return true;\n }\n\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception , '__sentry_captured__', true);\n } catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n\n return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nfunction arrayify(maybeArray) {\n return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, arrayify, checkOrSetAlreadyCaught, getEventDescription, parseSemver, uuid4 };\n//# sourceMappingURL=misc.js.map\n","const global = globalThis || void 0 || self;\n\nexport { global as default, global };\n//# sourceMappingURL=index.js.map\n","import { isVueViewModel, isSyntheticEvent } from './is.js';\nimport { memoBuilder } from './memo.js';\nimport { convertToPlainObject } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normalized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction normalize(input, depth = 100, maxProperties = +Infinity) {\n try {\n // since we're at the outermost level, we don't provide a key\n return visit('', input, depth, maxProperties);\n } catch (err) {\n return { ERROR: `**non-serializable** (${err})` };\n }\n}\n\n/** JSDoc */\nfunction normalizeToSize(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object,\n // Default Node.js REPL depth\n depth = 3,\n // 100kB, as 200kB is max payload size, so half sounds reasonable\n maxSize = 100 * 1024,\n) {\n const normalized = normalize(object, depth);\n\n if (jsonSize(normalized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return normalized ;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n key,\n value,\n depth = +Infinity,\n maxProperties = +Infinity,\n memo = memoBuilder(),\n) {\n const [memoize, unmemoize] = memo;\n\n // Get the simple cases out of the way first\n if (\n value == null || // this matches null and undefined -> eqeq not eqeqeq\n ['boolean', 'string'].includes(typeof value) ||\n (typeof value === 'number' && Number.isFinite(value))\n ) {\n return value ;\n }\n\n const stringified = stringifyValue(key, value);\n\n // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n if (!stringified.startsWith('[object ')) {\n return stringified;\n }\n\n // From here on, we can assert that `value` is either an object or an array.\n\n // Do not normalize objects that we know have already been normalized. As a general rule, the\n // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n // have already been normalized.\n if ((value )['__sentry_skip_normalization__']) {\n return value ;\n }\n\n // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n // We keep a certain amount of depth.\n // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n const remainingDepth =\n typeof (value )['__sentry_override_normalization_depth__'] === 'number'\n ? ((value )['__sentry_override_normalization_depth__'] )\n : depth;\n\n // We're also done if we've reached the max depth\n if (remainingDepth === 0) {\n // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n return stringified.replace('object ', '');\n }\n\n // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n if (memoize(value)) {\n return '[Circular ~]';\n }\n\n // If the value has a `toJSON` method, we call it to extract more information\n const valueWithToJSON = value ;\n if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n try {\n const jsonValue = valueWithToJSON.toJSON();\n // We need to normalize the return value of `.toJSON()` in case it has circular references\n return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n } catch (err) {\n // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n }\n }\n\n // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n // property/entry, and keep track of the number of items we add to it.\n const normalized = (Array.isArray(value) ? [] : {}) ;\n let numAdded = 0;\n\n // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n // properties are non-enumerable and otherwise would get missed.\n const visitable = convertToPlainObject(value );\n\n for (const visitKey in visitable) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n continue;\n }\n\n if (numAdded >= maxProperties) {\n normalized[visitKey] = '[MaxProperties ~]';\n break;\n }\n\n // Recursively visit all the child nodes\n const visitValue = visitable[visitKey];\n normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n numAdded++;\n }\n\n // Once we've visited all the branches, remove the parent from memo storage\n unmemoize(value);\n\n // Return accumulated values\n return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n key,\n // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n // our internal use, it'll do\n value,\n) {\n try {\n if (key === 'domain' && value && typeof value === 'object' && (value )._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n // which won't throw if they are not present.\n\n if (typeof global !== 'undefined' && value === global) {\n return '[Global]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof window !== 'undefined' && value === window) {\n return '[Window]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof document !== 'undefined' && value === document) {\n return '[Document]';\n }\n\n if (isVueViewModel(value)) {\n return '[VueViewModel]';\n }\n\n // React's SyntheticEvent thingy\n if (isSyntheticEvent(value)) {\n return '[SyntheticEvent]';\n }\n\n if (typeof value === 'number' && !Number.isFinite(value)) {\n return `[${value}]`;\n }\n\n if (typeof value === 'function') {\n return `[Function: ${getFunctionName(value)}]`;\n }\n\n if (typeof value === 'symbol') {\n return `[${String(value)}]`;\n }\n\n // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n if (typeof value === 'bigint') {\n return `[BigInt: ${String(value)}]`;\n }\n\n // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n // we can make sure that only plain objects come out that way.\n const objName = getConstructorName(value);\n\n // Handle HTML Elements\n if (/^HTML(\\w*)Element$/.test(objName)) {\n return `[HTMLElement: ${objName}]`;\n }\n\n return `[object ${objName}]`;\n } catch (err) {\n return `**non-serializable** (${err})`;\n }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value) {\n const prototype = Object.getPrototypeOf(value);\n\n return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\n // eslint-disable-next-line no-bitwise\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nfunction normalizeUrlToBase(url, basePath) {\n const escapedBase = basePath\n // Backslash to forward\n .replace(/\\\\/g, '/')\n // Escape RegExp special characters\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n let newUrl = url;\n try {\n newUrl = decodeURI(url);\n } catch (_Oo) {\n // Sometime this breaks\n }\n return (\n newUrl\n .replace(/\\\\/g, '/')\n .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n );\n}\n\nexport { normalize, normalizeToSize, normalizeUrlToBase };\n//# sourceMappingURL=normalize.js.map\n","import { isThenable } from './is.js';\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/** SyncPromise internal states */\nvar States; (function (States) {\n /** Pending */\n const PENDING = 0; States[States[\"PENDING\"] = PENDING] = \"PENDING\";\n /** Resolved / OK */\n const RESOLVED = 1; States[States[\"RESOLVED\"] = RESOLVED] = \"RESOLVED\";\n /** Rejected / Error */\n const REJECTED = 2; States[States[\"REJECTED\"] = REJECTED] = \"REJECTED\";\n})(States || (States = {}));\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nfunction resolvedSyncPromise(value) {\n return new SyncPromise(resolve => {\n resolve(value);\n });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nfunction rejectedSyncPromise(reason) {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise {\n\n constructor(\n executor,\n ) {SyncPromise.prototype.__init.call(this);SyncPromise.prototype.__init2.call(this);SyncPromise.prototype.__init3.call(this);SyncPromise.prototype.__init4.call(this);\n this._state = States.PENDING;\n this._handlers = [];\n\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n\n /** JSDoc */\n then(\n onfulfilled,\n onrejected,\n ) {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n result => {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result );\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n reason => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n },\n ]);\n this._executeHandlers();\n });\n }\n\n /** JSDoc */\n catch(\n onrejected,\n ) {\n return this.then(val => val, onrejected);\n }\n\n /** JSDoc */\n finally(onfinally) {\n return new SyncPromise((resolve, reject) => {\n let val;\n let isRejected;\n\n return this.then(\n value => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n reason => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n },\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val );\n });\n });\n }\n\n /** JSDoc */\n __init() {this._resolve = (value) => {\n this._setResult(States.RESOLVED, value);\n };}\n\n /** JSDoc */\n __init2() {this._reject = (reason) => {\n this._setResult(States.REJECTED, reason);\n };}\n\n /** JSDoc */\n __init3() {this._setResult = (state, value) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value ).then(this._resolve, this._reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };}\n\n /** JSDoc */\n __init4() {this._executeHandlers = () => {\n if (this._state === States.PENDING) {\n return;\n }\n\n const cachedHandlers = this._handlers.slice();\n this._handlers = [];\n\n cachedHandlers.forEach(handler => {\n if (handler[0]) {\n return;\n }\n\n if (this._state === States.RESOLVED) {\n handler[1](this._value );\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n };}\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { isString } from './is.js';\nimport { logger } from './logger.js';\n\nconst BAGGAGE_HEADER_NAME = 'baggage';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nconst MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nfunction baggageHeaderToDynamicSamplingContext(\n // Very liberal definition of what any incoming header might look like\n baggageHeader,\n) {\n const baggageObject = parseBaggageHeader(baggageHeader);\n\n if (!baggageObject) {\n return undefined;\n }\n\n // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n const dynamicSamplingContext = Object.entries(baggageObject).reduce((acc, [key, value]) => {\n if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n acc[nonPrefixedKey] = value;\n }\n return acc;\n }, {});\n\n // Only return a dynamic sampling context object if there are keys in it.\n // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n if (Object.keys(dynamicSamplingContext).length > 0) {\n return dynamicSamplingContext ;\n } else {\n return undefined;\n }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nfunction dynamicSamplingContextToSentryBaggageHeader(\n // this also takes undefined for convenience and bundle size in other places\n dynamicSamplingContext,\n) {\n if (!dynamicSamplingContext) {\n return undefined;\n }\n\n // Prefix all DSC keys with \"sentry-\" and put them into a new object\n const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce(\n (acc, [dscKey, dscValue]) => {\n if (dscValue) {\n acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n }\n return acc;\n },\n {},\n );\n\n return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Take a baggage header and parse it into an object.\n */\nfunction parseBaggageHeader(\n baggageHeader,\n) {\n if (!baggageHeader || (!isString(baggageHeader) && !Array.isArray(baggageHeader))) {\n return undefined;\n }\n\n if (Array.isArray(baggageHeader)) {\n // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n return baggageHeader.reduce((acc, curr) => {\n const currBaggageObject = baggageHeaderToObject(curr);\n Object.entries(currBaggageObject).forEach(([key, value]) => {\n acc[key] = value;\n });\n return acc;\n }, {});\n }\n\n return baggageHeaderToObject(baggageHeader);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader) {\n return baggageHeader\n .split(',')\n .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n .reduce((acc, [key, value]) => {\n if (key && value) {\n acc[key] = value;\n }\n return acc;\n }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object) {\n if (Object.keys(object).length === 0) {\n // An empty baggage header is not spec compliant: We return undefined.\n return undefined;\n }\n\n return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n );\n return baggageHeader;\n } else {\n return newBaggageHeader;\n }\n }, '');\n}\n\nexport { BAGGAGE_HEADER_NAME, MAX_BAGGAGE_STRING_LENGTH, SENTRY_BAGGAGE_KEY_PREFIX, SENTRY_BAGGAGE_KEY_PREFIX_REGEX, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, parseBaggageHeader };\n//# sourceMappingURL=baggage.js.map\n","import { uuid4 } from './misc.js';\n\n/**\n * Returns a new minimal propagation context\n */\nfunction generatePropagationContext() {\n return {\n traceId: uuid4(),\n spanId: uuid4().substring(16),\n };\n}\n\nexport { generatePropagationContext };\n//# sourceMappingURL=propagationContext.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nconst debugIdStackParserCache = new WeakMap();\n\n/**\n * Returns a map of filenames to debug identifiers.\n */\nfunction getFilenameToDebugIdMap(stackParser) {\n const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n if (!debugIdMap) {\n return {};\n }\n\n let debugIdStackFramesCache;\n const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n if (cachedDebugIdStackFrameCache) {\n debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n } else {\n debugIdStackFramesCache = new Map();\n debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n }\n\n // Build a map of filename -> debug_id.\n return Object.keys(debugIdMap).reduce((acc, debugIdStackTrace) => {\n let parsedStack;\n\n const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n if (cachedParsedStack) {\n parsedStack = cachedParsedStack;\n } else {\n parsedStack = stackParser(debugIdStackTrace);\n debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n }\n\n for (let i = parsedStack.length - 1; i >= 0; i--) {\n const stackFrame = parsedStack[i];\n const file = stackFrame && stackFrame.filename;\n\n if (stackFrame && file) {\n acc[file] = debugIdMap[debugIdStackTrace] ;\n break;\n }\n }\n return acc;\n }, {});\n}\n\n/**\n * Returns a list of debug images for the given resources.\n */\nfunction getDebugImagesForResources(\n stackParser,\n resource_paths,\n) {\n const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n const images = [];\n for (const path of resource_paths) {\n if (path && filenameDebugIdMap[path]) {\n images.push({\n type: 'sourcemap',\n code_file: path,\n debug_id: filenameDebugIdMap[path] ,\n });\n }\n }\n\n return images;\n}\n\nexport { getDebugImagesForResources, getFilenameToDebugIdMap };\n//# sourceMappingURL=debug-ids.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { GLOBAL_OBJ, SDK_VERSION } from '@sentry/utils';\n\n/**\n * An object that contains globally accessible properties and maintains a scope stack.\n * @hidden\n */\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n // This ensures a Sentry carrier exists\n getSentryCarrier(GLOBAL_OBJ);\n return GLOBAL_OBJ;\n}\n\n/** Will either get the existing sentry carrier, or create a new one. */\nfunction getSentryCarrier(carrier) {\n const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n\n // For now: First SDK that sets the .version property wins\n __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n\n // Intentionally populating and returning the version of \"this\" SDK instance\n // rather than what's set in .version so that \"this\" SDK always gets its carrier\n return (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n}\n\nexport { getMainCarrier, getSentryCarrier };\n//# sourceMappingURL=carrier.js.map\n","import { timestampInSeconds, uuid4, dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nfunction makeSession(context) {\n // Both timestamp and started are in seconds since the UNIX epoch.\n const startingTime = timestampInSeconds();\n\n const session = {\n sid: uuid4(),\n init: true,\n timestamp: startingTime,\n started: startingTime,\n duration: 0,\n status: 'ok',\n errors: 0,\n ignoreDuration: false,\n toJSON: () => sessionToJSON(session),\n };\n\n if (context) {\n updateSession(session, context);\n }\n\n return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nfunction updateSession(session, context = {}) {\n if (context.user) {\n if (!session.ipAddress && context.user.ip_address) {\n session.ipAddress = context.user.ip_address;\n }\n\n if (!session.did && !context.did) {\n session.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n session.timestamp = context.timestamp || timestampInSeconds();\n\n if (context.abnormal_mechanism) {\n session.abnormal_mechanism = context.abnormal_mechanism;\n }\n\n if (context.ignoreDuration) {\n session.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n session.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n session.init = context.init;\n }\n if (!session.did && context.did) {\n session.did = `${context.did}`;\n }\n if (typeof context.started === 'number') {\n session.started = context.started;\n }\n if (session.ignoreDuration) {\n session.duration = undefined;\n } else if (typeof context.duration === 'number') {\n session.duration = context.duration;\n } else {\n const duration = session.timestamp - session.started;\n session.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n session.release = context.release;\n }\n if (context.environment) {\n session.environment = context.environment;\n }\n if (!session.ipAddress && context.ipAddress) {\n session.ipAddress = context.ipAddress;\n }\n if (!session.userAgent && context.userAgent) {\n session.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n session.errors = context.errors;\n }\n if (context.status) {\n session.status = context.status;\n }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n * this function will keep the previously set status, unless it was `'ok'` in which case\n * it is changed to `'exited'`.\n */\nfunction closeSession(session, status) {\n let context = {};\n if (status) {\n context = { status };\n } else if (session.status === 'ok') {\n context = { status: 'exited' };\n }\n\n updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session) {\n return dropUndefinedKeys({\n sid: `${session.sid}`,\n init: session.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(session.started * 1000).toISOString(),\n timestamp: new Date(session.timestamp * 1000).toISOString(),\n status: session.status,\n errors: session.errors,\n did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n duration: session.duration,\n abnormal_mechanism: session.abnormal_mechanism,\n attrs: {\n release: session.release,\n environment: session.environment,\n ip_address: session.ipAddress,\n user_agent: session.userAgent,\n },\n });\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","import { addNonEnumerableProperty } from '@sentry/utils';\n\nconst SCOPE_SPAN_FIELD = '_sentrySpan';\n\n/**\n * Set the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _setSpanForScope(scope, span) {\n if (span) {\n addNonEnumerableProperty(scope , SCOPE_SPAN_FIELD, span);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete (scope )[SCOPE_SPAN_FIELD];\n }\n}\n\n/**\n * Get the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _getSpanForScope(scope) {\n return scope[SCOPE_SPAN_FIELD];\n}\n\nexport { _getSpanForScope, _setSpanForScope };\n//# sourceMappingURL=spanOnScope.js.map\n","import { generatePropagationContext, isPlainObject, dateTimestampInSeconds, uuid4, logger } from '@sentry/utils';\nimport { updateSession } from './session.js';\nimport { _setSpanForScope, _getSpanForScope } from './utils/spanOnScope.js';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information.\n */\nclass ScopeClass {\n /** Flag if notifying is happening. */\n\n /** Callback for client to receive scope changes. */\n\n /** Callback list that will be called during event processing. */\n\n /** Array of breadcrumbs. */\n\n /** User */\n\n /** Tags */\n\n /** Extra */\n\n /** Contexts */\n\n /** Attachments */\n\n /** Propagation Context for distributed tracing */\n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n\n /** Fingerprint */\n\n /** Severity */\n\n /**\n * Transaction Name\n *\n * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects.\n * It's purpose is to assign a transaction to the scope that's added to non-transaction events.\n */\n\n /** Session */\n\n /** Request Mode Session Status */\n\n /** The client on this scope */\n\n /** Contains the last event id of a captured event. */\n\n // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n this._propagationContext = generatePropagationContext();\n }\n\n /**\n * @inheritDoc\n */\n clone() {\n const newScope = new ScopeClass();\n newScope._breadcrumbs = [...this._breadcrumbs];\n newScope._tags = { ...this._tags };\n newScope._extra = { ...this._extra };\n newScope._contexts = { ...this._contexts };\n newScope._user = this._user;\n newScope._level = this._level;\n newScope._session = this._session;\n newScope._transactionName = this._transactionName;\n newScope._fingerprint = this._fingerprint;\n newScope._eventProcessors = [...this._eventProcessors];\n newScope._requestSession = this._requestSession;\n newScope._attachments = [...this._attachments];\n newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n newScope._propagationContext = { ...this._propagationContext };\n newScope._client = this._client;\n newScope._lastEventId = this._lastEventId;\n\n _setSpanForScope(newScope, _getSpanForScope(this));\n\n return newScope;\n }\n\n /**\n * @inheritDoc\n */\n setClient(client) {\n this._client = client;\n }\n\n /**\n * @inheritDoc\n */\n setLastEventId(lastEventId) {\n this._lastEventId = lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n getClient() {\n return this._client ;\n }\n\n /**\n * @inheritDoc\n */\n lastEventId() {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n addScopeListener(callback) {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n addEventProcessor(callback) {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setUser(user) {\n // If null is passed we want to unset everything, but still define keys,\n // so that later down in the pipeline any existing values are cleared.\n this._user = user || {\n email: undefined,\n id: undefined,\n ip_address: undefined,\n username: undefined,\n };\n\n if (this._session) {\n updateSession(this._session, { user });\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getUser() {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n getRequestSession() {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n setRequestSession(requestSession) {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTags(tags) {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTag(key, value) {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtras(extras) {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtra(key, extra) {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setFingerprint(fingerprint) {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setLevel(level) {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTransactionName(name) {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setContext(key, context) {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setSession(session) {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getSession() {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n update(captureContext) {\n if (!captureContext) {\n return this;\n }\n\n const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n const [scopeInstance, requestSession] =\n scopeToMerge instanceof Scope\n ? [scopeToMerge.getScopeData(), scopeToMerge.getRequestSession()]\n : isPlainObject(scopeToMerge)\n ? [captureContext , (captureContext ).requestSession]\n : [];\n\n const { tags, extra, user, contexts, level, fingerprint = [], propagationContext } = scopeInstance || {};\n\n this._tags = { ...this._tags, ...tags };\n this._extra = { ...this._extra, ...extra };\n this._contexts = { ...this._contexts, ...contexts };\n\n if (user && Object.keys(user).length) {\n this._user = user;\n }\n\n if (level) {\n this._level = level;\n }\n\n if (fingerprint.length) {\n this._fingerprint = fingerprint;\n }\n\n if (propagationContext) {\n this._propagationContext = propagationContext;\n }\n\n if (requestSession) {\n this._requestSession = requestSession;\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clear() {\n // client is not cleared here on purpose!\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._session = undefined;\n _setSpanForScope(this, undefined);\n this._attachments = [];\n this._propagationContext = generatePropagationContext();\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n const mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n\n const breadcrumbs = this._breadcrumbs;\n breadcrumbs.push(mergedBreadcrumb);\n this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getLastBreadcrumb() {\n return this._breadcrumbs[this._breadcrumbs.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n clearBreadcrumbs() {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addAttachment(attachment) {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clearAttachments() {\n this._attachments = [];\n return this;\n }\n\n /** @inheritDoc */\n getScopeData() {\n return {\n breadcrumbs: this._breadcrumbs,\n attachments: this._attachments,\n contexts: this._contexts,\n tags: this._tags,\n extra: this._extra,\n user: this._user,\n level: this._level,\n fingerprint: this._fingerprint || [],\n eventProcessors: this._eventProcessors,\n propagationContext: this._propagationContext,\n sdkProcessingMetadata: this._sdkProcessingMetadata,\n transactionName: this._transactionName,\n span: _getSpanForScope(this),\n };\n }\n\n /**\n * @inheritDoc\n */\n setSDKProcessingMetadata(newData) {\n this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setPropagationContext(context) {\n this._propagationContext = context;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getPropagationContext() {\n return this._propagationContext;\n }\n\n /**\n * @inheritDoc\n */\n captureException(exception, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture exception!');\n return eventId;\n }\n\n const syntheticException = new Error('Sentry syntheticException');\n\n this._client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureMessage(message, level, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture message!');\n return eventId;\n }\n\n const syntheticException = new Error(message);\n\n this._client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureEvent(event, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture event!');\n return eventId;\n }\n\n this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n return eventId;\n }\n\n /**\n * This will be called on every set call.\n */\n _notifyScopeListeners() {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n}\n\n// NOTE: By exporting this here as const & type, instead of doing `export class`,\n// We can get the correct class when importing from `@sentry/core`, but the original type (from `@sentry/types`)\n// This is helpful for interop, e.g. when doing `import type { Scope } from '@sentry/node';` (which re-exports this)\n\n/**\n * Holds additional event information.\n */\nconst Scope = ScopeClass;\n\n/**\n * Holds additional event information.\n */\n\nexport { Scope };\n//# sourceMappingURL=scope.js.map\n","import { getGlobalSingleton } from '@sentry/utils';\nimport { Scope } from './scope.js';\n\n/** Get the default current scope. */\nfunction getDefaultCurrentScope() {\n return getGlobalSingleton('defaultCurrentScope', () => new Scope());\n}\n\n/** Get the default isolation scope. */\nfunction getDefaultIsolationScope() {\n return getGlobalSingleton('defaultIsolationScope', () => new Scope());\n}\n\nexport { getDefaultCurrentScope, getDefaultIsolationScope };\n//# sourceMappingURL=defaultScopes.js.map\n","import { isThenable } from '@sentry/utils';\nimport { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes.js';\nimport { Scope } from '../scope.js';\nimport { getMainCarrier, getSentryCarrier } from '../carrier.js';\n\n/**\n * This is an object that holds a stack of scopes.\n */\nclass AsyncContextStack {\n\n constructor(scope, isolationScope) {\n let assignedScope;\n if (!scope) {\n assignedScope = new Scope();\n } else {\n assignedScope = scope;\n }\n\n let assignedIsolationScope;\n if (!isolationScope) {\n assignedIsolationScope = new Scope();\n } else {\n assignedIsolationScope = isolationScope;\n }\n\n // scope stack for domains or the process\n this._stack = [{ scope: assignedScope }];\n this._isolationScope = assignedIsolationScope;\n }\n\n /**\n * Fork a scope for the stack.\n */\n withScope(callback) {\n const scope = this._pushScope();\n\n let maybePromiseResult;\n try {\n maybePromiseResult = callback(scope);\n } catch (e) {\n this._popScope();\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n // @ts-expect-error - isThenable returns the wrong type\n return maybePromiseResult.then(\n res => {\n this._popScope();\n return res;\n },\n e => {\n this._popScope();\n throw e;\n },\n );\n }\n\n this._popScope();\n return maybePromiseResult;\n }\n\n /**\n * Get the client of the stack.\n */\n getClient() {\n return this.getStackTop().client ;\n }\n\n /**\n * Returns the scope of the top stack.\n */\n getScope() {\n return this.getStackTop().scope;\n }\n\n /**\n * Get the isolation scope for the stack.\n */\n getIsolationScope() {\n return this._isolationScope;\n }\n\n /**\n * Returns the topmost scope layer in the order domain > local > process.\n */\n getStackTop() {\n return this._stack[this._stack.length - 1] ;\n }\n\n /**\n * Push a scope to the stack.\n */\n _pushScope() {\n // We want to clone the content of prev scope\n const scope = this.getScope().clone();\n this._stack.push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * Pop a scope from the stack.\n */\n _popScope() {\n if (this._stack.length <= 1) return false;\n return !!this._stack.pop();\n }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack() {\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n\n return (sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()));\n}\n\nfunction withScope(callback) {\n return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope(scope, callback) {\n const stack = getAsyncContextStack() ;\n return stack.withScope(() => {\n stack.getStackTop().scope = scope;\n return callback(scope);\n });\n}\n\nfunction withIsolationScope(callback) {\n return getAsyncContextStack().withScope(() => {\n return callback(getAsyncContextStack().getIsolationScope());\n });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nfunction getStackAsyncContextStrategy() {\n return {\n withIsolationScope,\n withScope,\n withSetScope,\n withSetIsolationScope: (_isolationScope, callback) => {\n return withIsolationScope(callback);\n },\n getCurrentScope: () => getAsyncContextStack().getScope(),\n getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n };\n}\n\nexport { AsyncContextStack, getStackAsyncContextStrategy };\n//# sourceMappingURL=stackStrategy.js.map\n","import { getMainCarrier, getSentryCarrier } from '../carrier.js';\nimport { getStackAsyncContextStrategy } from './stackStrategy.js';\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nfunction setAsyncContextStrategy(strategy) {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n sentry.acs = strategy;\n}\n\n/**\n * Get the current async context strategy.\n * If none has been setup, the default will be used.\n */\nfunction getAsyncContextStrategy(carrier) {\n const sentry = getSentryCarrier(carrier);\n\n if (sentry.acs) {\n return sentry.acs;\n }\n\n // Otherwise, use the default one (stack)\n return getStackAsyncContextStrategy();\n}\n\nexport { getAsyncContextStrategy, setAsyncContextStrategy };\n//# sourceMappingURL=index.js.map\n","import { getGlobalSingleton } from '@sentry/utils';\nimport { getAsyncContextStrategy } from './asyncContext/index.js';\nimport { getMainCarrier } from './carrier.js';\nimport { Scope } from './scope.js';\n\n/**\n * Get the currently active scope.\n */\nfunction getCurrentScope() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getCurrentScope();\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current execution context.\n */\nfunction getIsolationScope() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getIsolationScope();\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nfunction getGlobalScope() {\n return getGlobalSingleton('globalScope', () => new Scope());\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n */\n\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nfunction withScope(\n ...rest\n) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [scope, callback] = rest;\n\n if (!scope) {\n return acs.withScope(callback);\n }\n\n return acs.withSetScope(scope, callback);\n }\n\n return acs.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n */\n\n/**\n * Either creates a new active isolation scope, or sets the given isolation scope as active scope in the given callback.\n */\nfunction withIsolationScope(\n ...rest\n\n) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [isolationScope, callback] = rest;\n\n if (!isolationScope) {\n return acs.withIsolationScope(callback);\n }\n\n return acs.withSetIsolationScope(isolationScope, callback);\n }\n\n return acs.withIsolationScope(rest[0]);\n}\n\n/**\n * Get the currently active client.\n */\nfunction getClient() {\n return getCurrentScope().getClient();\n}\n\nexport { getClient, getCurrentScope, getGlobalScope, getIsolationScope, withIsolationScope, withScope };\n//# sourceMappingURL=currentScopes.js.map\n","import { dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * key: bucketKey\n * value: [exportKey, MetricSummary]\n */\n\nconst METRICS_SPAN_FIELD = '_sentryMetrics';\n\n/**\n * Fetches the metric summary if it exists for the passed span\n */\nfunction getMetricSummaryJsonForSpan(span) {\n const storage = (span )[METRICS_SPAN_FIELD];\n\n if (!storage) {\n return undefined;\n }\n const output = {};\n\n for (const [, [exportKey, summary]] of storage) {\n const arr = output[exportKey] || (output[exportKey] = []);\n arr.push(dropUndefinedKeys(summary));\n }\n\n return output;\n}\n\n/**\n * Updates the metric summary on a span.\n */\nfunction updateMetricSummaryOnSpan(\n span,\n metricType,\n sanitizedName,\n value,\n unit,\n tags,\n bucketKey,\n) {\n const existingStorage = (span )[METRICS_SPAN_FIELD];\n const storage =\n existingStorage ||\n ((span )[METRICS_SPAN_FIELD] = new Map());\n\n const exportKey = `${metricType}:${sanitizedName}@${unit}`;\n const bucketItem = storage.get(bucketKey);\n\n if (bucketItem) {\n const [, summary] = bucketItem;\n storage.set(bucketKey, [\n exportKey,\n {\n min: Math.min(summary.min, value),\n max: Math.max(summary.max, value),\n count: (summary.count += 1),\n sum: (summary.sum += value),\n tags: summary.tags,\n },\n ]);\n } else {\n storage.set(bucketKey, [\n exportKey,\n {\n min: value,\n max: value,\n count: 1,\n sum: value,\n tags,\n },\n ]);\n }\n}\n\nexport { getMetricSummaryJsonForSpan, updateMetricSummaryOnSpan };\n//# sourceMappingURL=metric-summary.js.map\n","/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Use this attribute to represent the sample rate used for a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/** The reason why an idle span finished. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = 'sentry.idle_span_finish_reason';\n\n/** The unit of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = 'sentry.measurement_unit';\n\n/** The value of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = 'sentry.measurement_value';\n\n/**\n * The id of the profile that this span occurred in.\n */\nconst SEMANTIC_ATTRIBUTE_PROFILE_ID = 'sentry.profile_id';\n\nconst SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = 'sentry.exclusive_time';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_HIT = 'cache.hit';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_KEY = 'cache.key';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = 'cache.item_size';\n\n/** TODO: Remove these once we update to latest semantic conventions */\nconst SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD = 'http.request.method';\nconst SEMANTIC_ATTRIBUTE_URL_FULL = 'url.full';\n\nexport { SEMANTIC_ATTRIBUTE_CACHE_HIT, SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE, SEMANTIC_ATTRIBUTE_CACHE_KEY, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_URL_FULL };\n//# sourceMappingURL=semanticAttributes.js.map\n","const SPAN_STATUS_UNSET = 0;\nconst SPAN_STATUS_OK = 1;\nconst SPAN_STATUS_ERROR = 2;\n\n/**\n * Converts a HTTP status code into a sentry status with a message.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\n// https://develop.sentry.dev/sdk/event-payloads/span/\nfunction getSpanStatusFromHttpCode(httpStatus) {\n if (httpStatus < 400 && httpStatus >= 100) {\n return { code: SPAN_STATUS_OK };\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return { code: SPAN_STATUS_ERROR, message: 'unauthenticated' };\n case 403:\n return { code: SPAN_STATUS_ERROR, message: 'permission_denied' };\n case 404:\n return { code: SPAN_STATUS_ERROR, message: 'not_found' };\n case 409:\n return { code: SPAN_STATUS_ERROR, message: 'already_exists' };\n case 413:\n return { code: SPAN_STATUS_ERROR, message: 'failed_precondition' };\n case 429:\n return { code: SPAN_STATUS_ERROR, message: 'resource_exhausted' };\n case 499:\n return { code: SPAN_STATUS_ERROR, message: 'cancelled' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'invalid_argument' };\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return { code: SPAN_STATUS_ERROR, message: 'unimplemented' };\n case 503:\n return { code: SPAN_STATUS_ERROR, message: 'unavailable' };\n case 504:\n return { code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'internal_error' };\n }\n }\n\n return { code: SPAN_STATUS_ERROR, message: 'unknown_error' };\n}\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nfunction setHttpStatus(span, httpStatus) {\n span.setAttribute('http.response.status_code', httpStatus);\n\n const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n if (spanStatus.message !== 'unknown_error') {\n span.setStatus(spanStatus);\n }\n}\n\nexport { SPAN_STATUS_ERROR, SPAN_STATUS_OK, SPAN_STATUS_UNSET, getSpanStatusFromHttpCode, setHttpStatus };\n//# sourceMappingURL=spanstatus.js.map\n","import { dropUndefinedKeys, generateSentryTraceHeader, timestampInSeconds, addNonEnumerableProperty } from '@sentry/utils';\nimport { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { getMainCarrier } from '../carrier.js';\nimport { getCurrentScope } from '../currentScopes.js';\nimport { getMetricSummaryJsonForSpan, updateMetricSummaryOnSpan } from '../metrics/metric-summary.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../semanticAttributes.js';\nimport { SPAN_STATUS_UNSET, SPAN_STATUS_OK } from '../tracing/spanstatus.js';\nimport { _getSpanForScope } from './spanOnScope.js';\n\n// These are aligned with OpenTelemetry trace flags\nconst TRACE_FLAG_NONE = 0x0;\nconst TRACE_FLAG_SAMPLED = 0x1;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n * By default, this will only include trace_id, span_id & parent_span_id.\n * If `includeAllData` is true, it will also include data, op, status & origin.\n */\nfunction spanToTransactionTraceContext(span) {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { data, op, parent_span_id, status, origin } = spanToJSON(span);\n\n return dropUndefinedKeys({\n parent_span_id,\n span_id,\n trace_id,\n data,\n op,\n status,\n origin,\n });\n}\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in a non-transaction event.\n */\nfunction spanToTraceContext(span) {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { parent_span_id } = spanToJSON(span);\n\n return dropUndefinedKeys({ parent_span_id, span_id, trace_id });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nfunction spanToTraceHeader(span) {\n const { traceId, spanId } = span.spanContext();\n const sampled = spanIsSampled(span);\n return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input into a timestamp in seconds.\n */\nfunction spanTimeInputToSeconds(input) {\n if (typeof input === 'number') {\n return ensureTimestampInSeconds(input);\n }\n\n if (Array.isArray(input)) {\n // See {@link HrTime} for the array-based time format\n return input[0] + input[1] / 1e9;\n }\n\n if (input instanceof Date) {\n return ensureTimestampInSeconds(input.getTime());\n }\n\n return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n */\n// Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n// This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n// And `spanToJSON` needs the Span class from `span.ts` to check here.\nfunction spanToJSON(span) {\n if (spanIsSentrySpan(span)) {\n return span.getSpanJSON();\n }\n\n try {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n\n // Handle a span from @opentelemetry/sdk-base-trace's `Span` class\n if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n const { attributes, startTime, name, endTime, parentSpanId, status } = span;\n\n return dropUndefinedKeys({\n span_id,\n trace_id,\n data: attributes,\n description: name,\n parent_span_id: parentSpanId,\n start_timestamp: spanTimeInputToSeconds(startTime),\n // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n timestamp: spanTimeInputToSeconds(endTime) || undefined,\n status: getStatusMessage(status),\n op: attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n origin: attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] ,\n _metrics_summary: getMetricSummaryJsonForSpan(span),\n });\n }\n\n // Finally, at least we have `spanContext()`....\n return {\n span_id,\n trace_id,\n };\n } catch (e) {\n return {};\n }\n}\n\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span) {\n const castSpan = span ;\n return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\n\n/** Exported only for tests. */\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSentrySpan(span) {\n return typeof (span ).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nfunction spanIsSampled(span) {\n // We align our trace flags with the ones OpenTelemetry use\n // So we also check for sampled the same way they do.\n const { traceFlags } = span.spanContext();\n return traceFlags === TRACE_FLAG_SAMPLED;\n}\n\n/** Get the status message to use for a JSON representation of a span. */\nfunction getStatusMessage(status) {\n if (!status || status.code === SPAN_STATUS_UNSET) {\n return undefined;\n }\n\n if (status.code === SPAN_STATUS_OK) {\n return 'ok';\n }\n\n return status.message || 'unknown_error';\n}\n\nconst CHILD_SPANS_FIELD = '_sentryChildSpans';\nconst ROOT_SPAN_FIELD = '_sentryRootSpan';\n\n/**\n * Adds an opaque child span reference to a span.\n */\nfunction addChildSpanToSpan(span, childSpan) {\n // We store the root span reference on the child span\n // We need this for `getRootSpan()` to work\n const rootSpan = span[ROOT_SPAN_FIELD] || span;\n addNonEnumerableProperty(childSpan , ROOT_SPAN_FIELD, rootSpan);\n\n // We store a list of child spans on the parent span\n // We need this for `getSpanDescendants()` to work\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].add(childSpan);\n } else {\n addNonEnumerableProperty(span, CHILD_SPANS_FIELD, new Set([childSpan]));\n }\n}\n\n/** This is only used internally by Idle Spans. */\nfunction removeChildSpanFromSpan(span, childSpan) {\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].delete(childSpan);\n }\n}\n\n/**\n * Returns an array of the given span and all of its descendants.\n */\nfunction getSpanDescendants(span) {\n const resultSet = new Set();\n\n function addSpanChildren(span) {\n // This exit condition is required to not infinitely loop in case of a circular dependency.\n if (resultSet.has(span)) {\n return;\n // We want to ignore unsampled spans (e.g. non recording spans)\n } else if (spanIsSampled(span)) {\n resultSet.add(span);\n const childSpans = span[CHILD_SPANS_FIELD] ? Array.from(span[CHILD_SPANS_FIELD]) : [];\n for (const childSpan of childSpans) {\n addSpanChildren(childSpan);\n }\n }\n }\n\n addSpanChildren(span);\n\n return Array.from(resultSet);\n}\n\n/**\n * Returns the root span of a given span.\n */\nfunction getRootSpan(span) {\n return span[ROOT_SPAN_FIELD] || span;\n}\n\n/**\n * Returns the currently active span.\n */\nfunction getActiveSpan() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getActiveSpan) {\n return acs.getActiveSpan();\n }\n\n return _getSpanForScope(getCurrentScope());\n}\n\n/**\n * Updates the metric summary on the currently active span\n */\nfunction updateMetricSummaryOnActiveSpan(\n metricType,\n sanitizedName,\n value,\n unit,\n tags,\n bucketKey,\n) {\n const span = getActiveSpan();\n if (span) {\n updateMetricSummaryOnSpan(span, metricType, sanitizedName, value, unit, tags, bucketKey);\n }\n}\n\nexport { TRACE_FLAG_NONE, TRACE_FLAG_SAMPLED, addChildSpanToSpan, getActiveSpan, getRootSpan, getSpanDescendants, getStatusMessage, removeChildSpanFromSpan, spanIsSampled, spanTimeInputToSeconds, spanToJSON, spanToTraceContext, spanToTraceHeader, spanToTransactionTraceContext, updateMetricSummaryOnActiveSpan };\n//# sourceMappingURL=spanUtils.js.map\n","import { getClient } from '../currentScopes.js';\n\n// Treeshakable guard to remove all code related to tracing\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nfunction hasTracingEnabled(\n maybeOptions,\n) {\n if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n return false;\n }\n\n const client = getClient();\n const options = maybeOptions || (client && client.getOptions());\n // eslint-disable-next-line deprecation/deprecation\n return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n\nexport { hasTracingEnabled };\n//# sourceMappingURL=hasTracingEnabled.js.map\n","const DEFAULT_ENVIRONMENT = 'production';\n\nexport { DEFAULT_ENVIRONMENT };\n//# sourceMappingURL=constants.js.map\n","import { dropUndefinedKeys, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, addNonEnumerableProperty } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getClient } from '../currentScopes.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { spanToJSON, getRootSpan, spanIsSampled } from '../utils/spanUtils.js';\n\n/**\n * If you change this value, also update the terser plugin config to\n * avoid minification of the object property!\n */\nconst FROZEN_DSC_FIELD = '_frozenDsc';\n\n/**\n * Freeze the given DSC on the given span.\n */\nfunction freezeDscOnSpan(span, dsc) {\n const spanWithMaybeDsc = span ;\n addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nfunction getDynamicSamplingContextFromClient(trace_id, client) {\n const options = client.getOptions();\n\n const { publicKey: public_key } = client.getDsn() || {};\n\n const dsc = dropUndefinedKeys({\n environment: options.environment || DEFAULT_ENVIRONMENT,\n release: options.release,\n public_key,\n trace_id,\n }) ;\n\n client.emit('createDsc', dsc);\n\n return dsc;\n}\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nfunction getDynamicSamplingContextFromSpan(span) {\n const client = getClient();\n if (!client) {\n return {};\n }\n\n const dsc = getDynamicSamplingContextFromClient(spanToJSON(span).trace_id || '', client);\n\n const rootSpan = getRootSpan(span);\n\n // For core implementation, we freeze the DSC onto the span as a non-enumerable property\n const frozenDsc = (rootSpan )[FROZEN_DSC_FIELD];\n if (frozenDsc) {\n return frozenDsc;\n }\n\n // For OpenTelemetry, we freeze the DSC on the trace state\n const traceState = rootSpan.spanContext().traceState;\n const traceStateDsc = traceState && traceState.get('sentry.dsc');\n\n // If the span has a DSC, we want it to take precedence\n const dscOnTraceState = traceStateDsc && baggageHeaderToDynamicSamplingContext(traceStateDsc);\n\n if (dscOnTraceState) {\n return dscOnTraceState;\n }\n\n // Else, we generate it from the span\n const jsonSpan = spanToJSON(rootSpan);\n const attributes = jsonSpan.data || {};\n const maybeSampleRate = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE];\n\n if (maybeSampleRate != null) {\n dsc.sample_rate = `${maybeSampleRate}`;\n }\n\n // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n // after JSON conversion, txn.name becomes jsonSpan.description\n const name = jsonSpan.description;\n if (source !== 'url' && name) {\n dsc.transaction = name;\n }\n\n // How can we even land here with hasTracingEnabled() returning false?\n // Otel creates a Non-recording span in Tracing Without Performance mode when handling incoming requests\n // So we end up with an active span that is not sampled (neither positively nor negatively)\n if (hasTracingEnabled()) {\n dsc.sampled = String(spanIsSampled(rootSpan));\n }\n\n client.emit('createDsc', dsc, rootSpan);\n\n return dsc;\n}\n\n/**\n * Convert a Span to a baggage header.\n */\nfunction spanToBaggageHeader(span) {\n const dsc = getDynamicSamplingContextFromSpan(span);\n return dynamicSamplingContextToSentryBaggageHeader(dsc);\n}\n\nexport { freezeDscOnSpan, getDynamicSamplingContextFromClient, getDynamicSamplingContextFromSpan, spanToBaggageHeader };\n//# sourceMappingURL=dynamicSamplingContext.js.map\n","import { SyncPromise, logger, isThenable } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nfunction notifyEventProcessors(\n processors,\n event,\n hint,\n index = 0,\n) {\n return new SyncPromise((resolve, reject) => {\n const processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n const result = processor({ ...event }, hint) ;\n\n DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n if (isThenable(result)) {\n void result\n .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n .then(null, reject);\n } else {\n void notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n}\n\nexport { notifyEventProcessors };\n//# sourceMappingURL=eventProcessors.js.map\n","import { dropUndefinedKeys, arrayify } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext.js';\nimport { spanToTraceContext, getRootSpan, spanToJSON } from './spanUtils.js';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nfunction applyScopeDataToEvent(event, data) {\n const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n // Apply general data\n applyDataToEvent(event, data);\n\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (span) {\n applySpanToEvent(event, span);\n }\n\n applyFingerprintToEvent(event, fingerprint);\n applyBreadcrumbsToEvent(event, breadcrumbs);\n applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nfunction mergeScopeData(data, mergeData) {\n const {\n extra,\n tags,\n user,\n contexts,\n level,\n sdkProcessingMetadata,\n breadcrumbs,\n fingerprint,\n eventProcessors,\n attachments,\n propagationContext,\n transactionName,\n span,\n } = mergeData;\n\n mergeAndOverwriteScopeData(data, 'extra', extra);\n mergeAndOverwriteScopeData(data, 'tags', tags);\n mergeAndOverwriteScopeData(data, 'user', user);\n mergeAndOverwriteScopeData(data, 'contexts', contexts);\n mergeAndOverwriteScopeData(data, 'sdkProcessingMetadata', sdkProcessingMetadata);\n\n if (level) {\n data.level = level;\n }\n\n if (transactionName) {\n data.transactionName = transactionName;\n }\n\n if (span) {\n data.span = span;\n }\n\n if (breadcrumbs.length) {\n data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n }\n\n if (fingerprint.length) {\n data.fingerprint = [...data.fingerprint, ...fingerprint];\n }\n\n if (eventProcessors.length) {\n data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n }\n\n if (attachments.length) {\n data.attachments = [...data.attachments, ...attachments];\n }\n\n data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nfunction mergeAndOverwriteScopeData\n\n(data, prop, mergeVal) {\n if (mergeVal && Object.keys(mergeVal).length) {\n // Clone object\n data[prop] = { ...data[prop] };\n for (const key in mergeVal) {\n if (Object.prototype.hasOwnProperty.call(mergeVal, key)) {\n data[prop][key] = mergeVal[key];\n }\n }\n }\n}\n\nfunction applyDataToEvent(event, data) {\n const { extra, tags, user, contexts, level, transactionName } = data;\n\n const cleanedExtra = dropUndefinedKeys(extra);\n if (cleanedExtra && Object.keys(cleanedExtra).length) {\n event.extra = { ...cleanedExtra, ...event.extra };\n }\n\n const cleanedTags = dropUndefinedKeys(tags);\n if (cleanedTags && Object.keys(cleanedTags).length) {\n event.tags = { ...cleanedTags, ...event.tags };\n }\n\n const cleanedUser = dropUndefinedKeys(user);\n if (cleanedUser && Object.keys(cleanedUser).length) {\n event.user = { ...cleanedUser, ...event.user };\n }\n\n const cleanedContexts = dropUndefinedKeys(contexts);\n if (cleanedContexts && Object.keys(cleanedContexts).length) {\n event.contexts = { ...cleanedContexts, ...event.contexts };\n }\n\n if (level) {\n event.level = level;\n }\n\n // transaction events get their `transaction` from the root span name\n if (transactionName && event.type !== 'transaction') {\n event.transaction = transactionName;\n }\n}\n\nfunction applyBreadcrumbsToEvent(event, breadcrumbs) {\n const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event, sdkProcessingMetadata) {\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n ...sdkProcessingMetadata,\n };\n}\n\nfunction applySpanToEvent(event, span) {\n event.contexts = {\n trace: spanToTraceContext(span),\n ...event.contexts,\n };\n\n event.sdkProcessingMetadata = {\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n ...event.sdkProcessingMetadata,\n };\n\n const rootSpan = getRootSpan(span);\n const transactionName = spanToJSON(rootSpan).description;\n if (transactionName && !event.transaction && event.type === 'transaction') {\n event.transaction = transactionName;\n }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event, fingerprint) {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n // If we have something on the scope, then merge it with event\n if (fingerprint) {\n event.fingerprint = event.fingerprint.concat(fingerprint);\n }\n\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n}\n\nexport { applyScopeDataToEvent, mergeAndOverwriteScopeData, mergeScopeData };\n//# sourceMappingURL=applyScopeDataToEvent.js.map\n","import { uuid4, dateTimestampInSeconds, addExceptionMechanism, truncate, getFilenameToDebugIdMap, normalize } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getGlobalScope } from '../currentScopes.js';\nimport { notifyEventProcessors } from '../eventProcessors.js';\nimport { Scope } from '../scope.js';\nimport { mergeScopeData, applyScopeDataToEvent } from './applyScopeDataToEvent.js';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nfunction prepareEvent(\n options,\n event,\n hint,\n scope,\n client,\n isolationScope,\n) {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1000 } = options;\n const prepared = {\n ...event,\n event_id: event.event_id || hint.event_id || uuid4(),\n timestamp: event.timestamp || dateTimestampInSeconds(),\n };\n const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n applyClientOptions(prepared, options);\n applyIntegrationsMetadata(prepared, integrations);\n\n if (client) {\n client.emit('applyFrameMetadata', event);\n }\n\n // Only put debug IDs onto frames for error events.\n if (event.type === undefined) {\n applyDebugIds(prepared, options.stackParser);\n }\n\n // If we have scope given to us, use it as the base for further modifications.\n // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n const finalScope = getFinalScope(scope, hint.captureContext);\n\n if (hint.mechanism) {\n addExceptionMechanism(prepared, hint.mechanism);\n }\n\n const clientEventProcessors = client ? client.getEventProcessors() : [];\n\n // This should be the last thing called, since we want that\n // {@link Scope.addEventProcessor} gets the finished prepared event.\n // Merge scope data together\n const data = getGlobalScope().getScopeData();\n\n if (isolationScope) {\n const isolationData = isolationScope.getScopeData();\n mergeScopeData(data, isolationData);\n }\n\n if (finalScope) {\n const finalScopeData = finalScope.getScopeData();\n mergeScopeData(data, finalScopeData);\n }\n\n const attachments = [...(hint.attachments || []), ...data.attachments];\n if (attachments.length) {\n hint.attachments = attachments;\n }\n\n applyScopeDataToEvent(prepared, data);\n\n const eventProcessors = [\n ...clientEventProcessors,\n // Run scope event processors _after_ all other processors\n ...data.eventProcessors,\n ];\n\n const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n return result.then(evt => {\n if (evt) {\n // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n // any new data\n applyDebugMeta(evt);\n }\n\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n }\n return evt;\n });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event, options) {\n const { environment, release, dist, maxValueLength = 250 } = options;\n\n if (!('environment' in event)) {\n event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n }\n\n if (event.release === undefined && release !== undefined) {\n event.release = release;\n }\n\n if (event.dist === undefined && dist !== undefined) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = truncate(event.message, maxValueLength);\n }\n\n const exception = event.exception && event.exception.values && event.exception.values[0];\n if (exception && exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n\n const request = event.request;\n if (request && request.url) {\n request.url = truncate(request.url, maxValueLength);\n }\n}\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nfunction applyDebugIds(event, stackParser) {\n // Build a map of filename -> debug_id\n const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace.frames.forEach(frame => {\n if (frame.filename) {\n frame.debug_id = filenameDebugIdMap[frame.filename];\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nfunction applyDebugMeta(event) {\n // Extract debug IDs and filenames from the stack frames on the event.\n const filenameDebugIdMap = {};\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace.frames.forEach(frame => {\n if (frame.debug_id) {\n if (frame.abs_path) {\n filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n } else if (frame.filename) {\n filenameDebugIdMap[frame.filename] = frame.debug_id;\n }\n delete frame.debug_id;\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n\n if (Object.keys(filenameDebugIdMap).length === 0) {\n return;\n }\n\n // Fill debug_meta information\n event.debug_meta = event.debug_meta || {};\n event.debug_meta.images = event.debug_meta.images || [];\n const images = event.debug_meta.images;\n Object.entries(filenameDebugIdMap).forEach(([filename, debug_id]) => {\n images.push({\n type: 'sourcemap',\n code_file: filename,\n debug_id,\n });\n });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event, integrationNames) {\n if (integrationNames.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event, depth, maxBreadth) {\n if (!event) {\n return null;\n }\n\n const normalized = {\n ...event,\n ...(event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(b => ({\n ...b,\n ...(b.data && {\n data: normalize(b.data, depth, maxBreadth),\n }),\n })),\n }),\n ...(event.user && {\n user: normalize(event.user, depth, maxBreadth),\n }),\n ...(event.contexts && {\n contexts: normalize(event.contexts, depth, maxBreadth),\n }),\n ...(event.extra && {\n extra: normalize(event.extra, depth, maxBreadth),\n }),\n };\n\n // event.contexts.trace stores information about a Transaction. Similarly,\n // event.spans[] stores information about child Spans. Given that a\n // Transaction is conceptually a Span, normalization should apply to both\n // Transactions and Spans consistently.\n // For now the decision is to skip normalization of Transactions and Spans,\n // so this block overwrites the normalized event to add back the original\n // Transaction information prior to normalization.\n if (event.contexts && event.contexts.trace && normalized.contexts) {\n normalized.contexts.trace = event.contexts.trace;\n\n // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n if (event.contexts.trace.data) {\n normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n }\n }\n\n // event.spans[].data may contain circular/dangerous data so we need to normalize it\n if (event.spans) {\n normalized.spans = event.spans.map(span => {\n return {\n ...span,\n ...(span.data && {\n data: normalize(span.data, depth, maxBreadth),\n }),\n };\n });\n }\n\n return normalized;\n}\n\nfunction getFinalScope(\n scope,\n captureContext,\n) {\n if (!captureContext) {\n return scope;\n }\n\n const finalScope = scope ? scope.clone() : new Scope();\n finalScope.update(captureContext);\n return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nfunction parseEventHintOrCaptureContext(\n hint,\n) {\n if (!hint) {\n return undefined;\n }\n\n // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n if (hintIsScopeOrFunction(hint)) {\n return { captureContext: hint };\n }\n\n if (hintIsScopeContext(hint)) {\n return {\n captureContext: hint,\n };\n }\n\n return hint;\n}\n\nfunction hintIsScopeOrFunction(\n hint,\n) {\n return hint instanceof Scope || typeof hint === 'function';\n}\n\nconst captureContextKeys = [\n 'user',\n 'level',\n 'extra',\n 'contexts',\n 'tags',\n 'fingerprint',\n 'requestSession',\n 'propagationContext',\n] ;\n\nfunction hintIsScopeContext(hint) {\n return Object.keys(hint).some(key => captureContextKeys.includes(key ));\n}\n\nexport { applyDebugIds, applyDebugMeta, parseEventHintOrCaptureContext, prepareEvent };\n//# sourceMappingURL=prepareEvent.js.map\n","import { logger, uuid4, timestampInSeconds, isThenable, GLOBAL_OBJ } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { getCurrentScope, getIsolationScope, getClient, withIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { makeSession, updateSession, closeSession } from './session.js';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent.js';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nfunction captureException(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n exception,\n hint,\n) {\n return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nfunction captureMessage(message, captureContext) {\n // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n const level = typeof captureContext === 'string' ? captureContext : undefined;\n const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n return getCurrentScope().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nfunction captureEvent(event, hint) {\n return getCurrentScope().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setContext(name, context) {\n getIsolationScope().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nfunction setExtras(extras) {\n getIsolationScope().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nfunction setExtra(key, extra) {\n getIsolationScope().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nfunction setTags(tags) {\n getIsolationScope().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nfunction setTag(key, value) {\n getIsolationScope().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nfunction setUser(user) {\n getIsolationScope().setUser(user);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nfunction lastEventId() {\n return getIsolationScope().lastEventId();\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction captureCheckIn(checkIn, upsertMonitorConfig) {\n const scope = getCurrentScope();\n const client = getClient();\n if (!client) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n } else if (!client.captureCheckIn) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n } else {\n return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n }\n\n return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction withMonitor(\n monitorSlug,\n callback,\n upsertMonitorConfig,\n) {\n const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n const now = timestampInSeconds();\n\n function finishCheckIn(status) {\n captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n }\n\n return withIsolationScope(() => {\n let maybePromiseResult;\n try {\n maybePromiseResult = callback();\n } catch (e) {\n finishCheckIn('error');\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n Promise.resolve(maybePromiseResult).then(\n () => {\n finishCheckIn('ok');\n },\n e => {\n finishCheckIn('error');\n throw e;\n },\n );\n } else {\n finishCheckIn('ok');\n }\n\n return maybePromiseResult;\n });\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function flush(timeout) {\n const client = getClient();\n if (client) {\n return client.flush(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function close(timeout) {\n const client = getClient();\n if (client) {\n return client.close(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nfunction isInitialized() {\n return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nfunction isEnabled() {\n const client = getClient();\n return !!client && client.getOptions().enabled !== false && !!client.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nfunction addEventProcessor(callback) {\n getIsolationScope().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nfunction startSession(context) {\n const client = getClient();\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n release,\n environment,\n user: currentScope.getUser() || isolationScope.getUser(),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n // End existing session if there's one\n const currentSession = isolationScope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n\n endSession();\n\n // Afterwards we set the new session on the scope\n isolationScope.setSession(session);\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession(session);\n\n return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nfunction endSession() {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session) {\n closeSession(session);\n }\n _sendSessionUpdate();\n\n // the session is over; take it off of the scope\n isolationScope.setSession();\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate() {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n const client = getClient();\n // TODO (v8): Remove currentScope and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session && client) {\n client.captureSession(session);\n }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n * Defaults to `false`.\n */\nfunction captureSession(end = false) {\n // both send the update and pull the session from the scope\n if (end) {\n endSession();\n return;\n }\n\n // only send the update\n _sendSessionUpdate();\n}\n\nexport { addEventProcessor, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setContext, setExtra, setExtras, setTag, setTags, setUser, startSession, withMonitor };\n//# sourceMappingURL=exports.js.map\n"],"names":["DEBUG_BUILD","logger","States"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]} \ No newline at end of file +{"version":3,"file":"exports.DtgtFHVi.js","sources":["../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/is.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/string.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/version.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/worldwide.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/browser.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/debug-build.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/logger.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/object.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/stacktrace.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/time.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/memo.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/misc.js","../../../../../../node_modules/.pnpm/vite-plugin-node-polyfills@0.22.0_rollup@4.26.0_vite@5.4.11_@types+node@22.9.0_sass-embedded@1.80.7_sass@1.80.6_/node_modules/vite-plugin-node-polyfills/shims/global/dist/index.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/normalize.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/syncpromise.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/baggage.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/propagationContext.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.38.0/node_modules/@sentry/utils/build/esm/debug-ids.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/debug-build.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/carrier.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/session.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/scope.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/defaultScopes.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/asyncContext/index.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/currentScopes.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/metrics/metric-summary.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/semanticAttributes.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/utils/hasTracingEnabled.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/constants.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/eventProcessors.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/utils/prepareEvent.js","../../../../../../node_modules/.pnpm/@sentry+core@8.38.0/node_modules/@sentry/core/build/esm/exports.js"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isError(wat) {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n case '[object WebAssembly.Exception]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat, className) {\n return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isErrorEvent(wat) {\n return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMError(wat) {\n return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isDOMException(wat) {\n return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isString(wat) {\n return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isParameterizedString(wat) {\n return (\n typeof wat === 'object' &&\n wat !== null &&\n '__sentry_template_string__' in wat &&\n '__sentry_template_values__' in wat\n );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPrimitive(wat) {\n return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isPlainObject(wat) {\n return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isEvent(wat) {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isElement(wat) {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isRegExp(wat) {\n return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nfunction isThenable(wat) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isSyntheticEvent(wat) {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nfunction isInstanceOf(wat, base) {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\n\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nfunction isVueViewModel(wat) {\n // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n return !!(typeof wat === 'object' && wat !== null && ((wat ).__isVue || (wat )._isVue));\n}\n\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable, isVueViewModel };\n//# sourceMappingURL=is.js.map\n","import { isVueViewModel, isString, isRegExp } from './is.js';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nfunction truncate(str, max = 0) {\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line, colno) {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction safeJoin(input, delimiter) {\n if (!Array.isArray(input)) {\n return '';\n }\n\n const output = [];\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n try {\n // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n // console warnings. This happens when a Vue template is rendered with\n // an undeclared variable, which we try to stringify, ultimately causing\n // Vue to issue another warning which repeats indefinitely.\n // see: https://github.com/getsentry/sentry-javascript/pull/8981\n if (isVueViewModel(value)) {\n output.push('[VueViewModel]');\n } else {\n output.push(String(value));\n }\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nfunction isMatchingPattern(\n value,\n pattern,\n requireExactStringMatch = false,\n) {\n if (!isString(value)) {\n return false;\n }\n\n if (isRegExp(pattern)) {\n return pattern.test(value);\n }\n if (isString(pattern)) {\n return requireExactStringMatch ? value === pattern : value.includes(pattern);\n }\n\n return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nfunction stringMatchesSomePattern(\n testString,\n patterns = [],\n requireExactStringMatch = false,\n) {\n return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, truncate };\n//# sourceMappingURL=string.js.map\n","const SDK_VERSION = '8.38.0';\n\nexport { SDK_VERSION };\n//# sourceMappingURL=version.js.map\n","import { SDK_VERSION } from './version.js';\n\n/** Get's the global object for the current JavaScript runtime */\nconst GLOBAL_OBJ = globalThis ;\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__[]` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nfunction getGlobalSingleton(name, creator, obj) {\n const gbl = (obj || GLOBAL_OBJ) ;\n const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n const versionedCarrier = (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n return versionedCarrier[name] || (versionedCarrier[name] = creator());\n}\n\nexport { GLOBAL_OBJ, getGlobalSingleton };\n//# sourceMappingURL=worldwide.js.map\n","import { isString } from './is.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\nconst WINDOW = GLOBAL_OBJ ;\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction htmlTreeAsString(\n elem,\n options = {},\n) {\n if (!elem) {\n return '';\n }\n\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n let currentElem = elem ;\n const MAX_TRAVERSE_HEIGHT = 5;\n const out = [];\n let height = 0;\n let len = 0;\n const separator = ' > ';\n const sepLength = separator.length;\n let nextStr;\n const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds maxStringLength\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return '';\n }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el, keyAttrs) {\n const elem = el\n\n;\n\n const out = [];\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n // @ts-expect-error WINDOW has HTMLElement\n if (WINDOW.HTMLElement) {\n // If using the component name annotation plugin, this value may be available on the DOM node\n if (elem instanceof HTMLElement && elem.dataset) {\n if (elem.dataset['sentryComponent']) {\n return elem.dataset['sentryComponent'];\n }\n if (elem.dataset['sentryElement']) {\n return elem.dataset['sentryElement'];\n }\n }\n }\n\n out.push(elem.tagName.toLowerCase());\n\n // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n const keyAttrPairs =\n keyAttrs && keyAttrs.length\n ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n : null;\n\n if (keyAttrPairs && keyAttrPairs.length) {\n keyAttrPairs.forEach(keyAttrPair => {\n out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n });\n } else {\n if (elem.id) {\n out.push(`#${elem.id}`);\n }\n\n const className = elem.className;\n if (className && isString(className)) {\n const classes = className.split(/\\s+/);\n for (const c of classes) {\n out.push(`.${c}`);\n }\n }\n }\n const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n for (const k of allowedAttrs) {\n const attr = elem.getAttribute(k);\n if (attr) {\n out.push(`[${k}=\"${attr}\"]`);\n }\n }\n\n return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nfunction getLocationHref() {\n try {\n return WINDOW.document.location.href;\n } catch (oO) {\n return '';\n }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existence of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getDomElement(selector) {\n if (WINDOW.document && WINDOW.document.querySelector) {\n return WINDOW.document.querySelector(selector) ;\n }\n return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` or `data-sentry-element` attribute with `data-sentry-component` taking\n * precedence. This attribute is added at build-time by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nfunction getComponentName(elem) {\n // @ts-expect-error WINDOW has HTMLElement\n if (!WINDOW.HTMLElement) {\n return null;\n }\n\n let currentElem = elem ;\n const MAX_TRAVERSE_HEIGHT = 5;\n for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n if (!currentElem) {\n return null;\n }\n\n if (currentElem instanceof HTMLElement) {\n if (currentElem.dataset['sentryComponent']) {\n return currentElem.dataset['sentryComponent'];\n }\n if (currentElem.dataset['sentryElement']) {\n return currentElem.dataset['sentryElement'];\n }\n }\n\n currentElem = currentElem.parentNode;\n }\n\n return null;\n}\n\nexport { getComponentName, getDomElement, getLocationHref, htmlTreeAsString };\n//# sourceMappingURL=browser.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { getGlobalSingleton, GLOBAL_OBJ } from './worldwide.js';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nconst CONSOLE_LEVELS = [\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'log',\n 'assert',\n 'trace',\n] ;\n\n/** This may be mutated by the console instrumentation. */\nconst originalConsoleMethods\n\n = {};\n\n/** JSDoc */\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nfunction consoleSandbox(callback) {\n if (!('console' in GLOBAL_OBJ)) {\n return callback();\n }\n\n const console = GLOBAL_OBJ.console ;\n const wrappedFuncs = {};\n\n const wrappedLevels = Object.keys(originalConsoleMethods) ;\n\n // Restore all wrapped console methods\n wrappedLevels.forEach(level => {\n const originalConsoleMethod = originalConsoleMethods[level] ;\n wrappedFuncs[level] = console[level] ;\n console[level] = originalConsoleMethod;\n });\n\n try {\n return callback();\n } finally {\n // Revert restoration to wrapped state\n wrappedLevels.forEach(level => {\n console[level] = wrappedFuncs[level] ;\n });\n }\n}\n\nfunction makeLogger() {\n let enabled = false;\n const logger = {\n enable: () => {\n enabled = true;\n },\n disable: () => {\n enabled = false;\n },\n isEnabled: () => enabled,\n };\n\n if (DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(name => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n logger[name] = (...args) => {\n if (enabled) {\n consoleSandbox(() => {\n GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n });\n }\n };\n });\n } else {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = () => undefined;\n });\n }\n\n return logger ;\n}\n\n/**\n * This is a logger singleton which either logs things or no-ops if logging is not enabled.\n * The logger is a singleton on the carrier, to ensure that a consistent logger is used throughout the SDK.\n */\nconst logger = getGlobalSingleton('logger', makeLogger);\n\nexport { CONSOLE_LEVELS, consoleSandbox, logger, originalConsoleMethods };\n//# sourceMappingURL=logger.js.map\n","import { htmlTreeAsString } from './browser.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { isError, isEvent, isInstanceOf, isElement, isPlainObject, isPrimitive } from './is.js';\nimport { logger } from './logger.js';\nimport { truncate } from './string.js';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, )` or `origMethod.apply(this, [])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nfunction fill(source, name, replacementFactory) {\n if (!(name in source)) {\n return;\n }\n\n const original = source[name] ;\n const wrapped = replacementFactory(original) ;\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n markFunctionWrapped(wrapped, original);\n }\n\n source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nfunction addNonEnumerableProperty(obj, name, value) {\n try {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n } catch (o_O) {\n DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nfunction markFunctionWrapped(wrapped, original) {\n try {\n const proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nfunction getOriginalFunction(func) {\n return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nfunction urlEncode(object) {\n return Object.keys(object)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argument itself, when value is neither an Event nor\n * an Error.\n */\nfunction convertToPlainObject(\n value,\n)\n\n {\n if (isError(value)) {\n return {\n message: value.message,\n name: value.name,\n stack: value.stack,\n ...getOwnProperties(value),\n };\n } else if (isEvent(value)) {\n const newObj\n\n = {\n type: value.type,\n target: serializeEventTarget(value.target),\n currentTarget: serializeEventTarget(value.currentTarget),\n ...getOwnProperties(value),\n };\n\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n newObj.detail = value.detail;\n }\n\n return newObj;\n } else {\n return value;\n }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target) {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n } catch (_oO) {\n return '';\n }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj) {\n if (typeof obj === 'object' && obj !== null) {\n const extractedProps = {};\n for (const property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = (obj )[property];\n }\n }\n return extractedProps;\n } else {\n return {};\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nfunction extractExceptionKeysForMessage(exception, maxLength = 40) {\n const keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n\n const firstKey = keys[0];\n\n if (!firstKey) {\n return '[object has no keys]';\n }\n\n if (firstKey.length >= maxLength) {\n return truncate(firstKey, maxLength);\n }\n\n for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n const serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n\n return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nfunction dropUndefinedKeys(inputValue) {\n // This map keeps track of what already visited nodes map to.\n // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n // references as the input object.\n const memoizationMap = new Map();\n\n // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys(inputValue, memoizationMap) {\n if (isPojo(inputValue)) {\n // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n const returnValue = {};\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n for (const key of Object.getOwnPropertyNames(inputValue)) {\n if (typeof inputValue[key] !== 'undefined') {\n returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n }\n }\n\n return returnValue ;\n }\n\n if (Array.isArray(inputValue)) {\n // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal ;\n }\n\n const returnValue = [];\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n inputValue.forEach((item) => {\n returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n });\n\n return returnValue ;\n }\n\n return inputValue;\n}\n\nfunction isPojo(input) {\n if (!isPlainObject(input)) {\n return false;\n }\n\n try {\n const name = (Object.getPrototypeOf(input) ).constructor.name;\n return !name || name === 'Object';\n } catch (e) {\n return true;\n }\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nfunction objectify(wat) {\n let objectified;\n switch (true) {\n case wat === undefined || wat === null:\n objectified = new String(wat);\n break;\n\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n objectified = new (wat ).constructor(wat);\n break;\n\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify, urlEncode };\n//# sourceMappingURL=object.js.map\n","const STACKTRACE_FRAME_LIMIT = 50;\nconst UNKNOWN_FUNCTION = '?';\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nfunction createStackParser(...parsers) {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n return (stack, skipFirstLines = 0, framesToPop = 0) => {\n const frames = [];\n const lines = stack.split('\\n');\n\n for (let i = skipFirstLines; i < lines.length; i++) {\n const line = lines[i] ;\n // Ignore lines over 1kb as they are unlikely to be stack frames.\n // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n // input size. Huge strings can result in hangs/Denial of Service:\n // https://github.com/getsentry/sentry-javascript/issues/2286\n if (line.length > 1024) {\n continue;\n }\n\n // https://github.com/getsentry/sentry-javascript/issues/5459\n // Remove webpack (error: *) wrappers\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n // https://github.com/getsentry/sentry-javascript/issues/7813\n // Skip Error: lines\n if (cleanedLine.match(/\\S*Error: /)) {\n continue;\n }\n\n for (const parser of sortedParsers) {\n const frame = parser(cleanedLine);\n\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n\n if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) {\n break;\n }\n }\n\n return stripSentryFramesAndReverse(frames.slice(framesToPop));\n };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nfunction stackParserFromStackParserOptions(stackParser) {\n if (Array.isArray(stackParser)) {\n return createStackParser(...stackParser);\n }\n return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nfunction stripSentryFramesAndReverse(stack) {\n if (!stack.length) {\n return [];\n }\n\n const localStack = Array.from(stack);\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (/sentryWrapped/.test(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n }\n\n // Reversing in the middle of the procedure allows us to just pop the values off the stack\n localStack.reverse();\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n\n // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n // is produced within the hub itself, making it:\n //\n // Sentry.captureException()\n // getCurrentHub().captureException()\n //\n // instead of just the top `Sentry` call itself.\n // This forces us to possibly strip an additional frame in the exact same was as above.\n if (STRIP_FRAME_REGEXP.test(getLastStackFrame(localStack).function || '')) {\n localStack.pop();\n }\n }\n\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n ...frame,\n filename: frame.filename || getLastStackFrame(localStack).filename,\n function: frame.function || UNKNOWN_FUNCTION,\n }));\n}\n\nfunction getLastStackFrame(arr) {\n return arr[arr.length - 1] || {};\n}\n\nconst defaultFunctionName = '';\n\n/**\n * Safely extract function name from itself\n */\nfunction getFunctionName(fn) {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n\n/**\n * Get's stack frames from an event without needing to check for undefined properties.\n */\nfunction getFramesFromEvent(event) {\n const exception = event.exception;\n\n if (exception) {\n const frames = [];\n try {\n // @ts-expect-error Object could be undefined\n exception.values.forEach(value => {\n // @ts-expect-error Value could be undefined\n if (value.stacktrace.frames) {\n // @ts-expect-error Value could be undefined\n frames.push(...value.stacktrace.frames);\n }\n });\n return frames;\n } catch (_oO) {\n return undefined;\n }\n }\n return undefined;\n}\n\nexport { UNKNOWN_FUNCTION, createStackParser, getFramesFromEvent, getFunctionName, stackParserFromStackParserOptions, stripSentryFramesAndReverse };\n//# sourceMappingURL=stacktrace.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nfunction dateTimestampInSeconds() {\n return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc() {\n const { performance } = GLOBAL_OBJ ;\n if (!performance || !performance.now) {\n return dateTimestampInSeconds;\n }\n\n // Some browser and environments don't have a timeOrigin, so we fallback to\n // using Date.now() to compute the starting time.\n const approxStartingTimeOrigin = Date.now() - performance.now();\n const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n //\n // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n // correct for this.\n // See: https://github.com/getsentry/sentry-javascript/issues/2590\n // See: https://github.com/mdn/content/issues/4713\n // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n return () => {\n return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nconst timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nlet _browserPerformanceTimeOriginMode;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nconst browserPerformanceTimeOrigin = (() => {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n\n const { performance } = GLOBAL_OBJ ;\n if (!performance || !performance.now) {\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n const threshold = 3600 * 1000;\n const performanceNow = performance.now();\n const dateNow = Date.now();\n\n // if timeOrigin isn't available set delta to threshold so it isn't used\n const timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n const timeOriginIsReliable = timeOriginDelta < threshold;\n\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n // eslint-disable-next-line deprecation/deprecation\n const navigationStart = performance.timing && performance.timing.navigationStart;\n const hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n const navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n\nexport { _browserPerformanceTimeOriginMode, browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds };\n//# sourceMappingURL=time.js.map\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Helper to decycle json objects\n */\nfunction memoBuilder() {\n const hasWeakSet = typeof WeakSet === 'function';\n const inner = hasWeakSet ? new WeakSet() : [];\n function memoize(obj) {\n if (hasWeakSet) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < inner.length; i++) {\n const value = inner[i];\n if (value === obj) {\n return true;\n }\n }\n inner.push(obj);\n return false;\n }\n\n function unmemoize(obj) {\n if (hasWeakSet) {\n inner.delete(obj);\n } else {\n for (let i = 0; i < inner.length; i++) {\n if (inner[i] === obj) {\n inner.splice(i, 1);\n break;\n }\n }\n }\n }\n return [memoize, unmemoize];\n}\n\nexport { memoBuilder };\n//# sourceMappingURL=memo.js.map\n","import { addNonEnumerableProperty } from './object.js';\nimport { snipLine } from './string.js';\nimport { GLOBAL_OBJ } from './worldwide.js';\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nfunction uuid4() {\n const gbl = GLOBAL_OBJ ;\n const crypto = gbl.crypto || gbl.msCrypto;\n\n let getRandomByte = () => Math.random() * 16;\n try {\n if (crypto && crypto.randomUUID) {\n return crypto.randomUUID().replace(/-/g, '');\n }\n if (crypto && crypto.getRandomValues) {\n getRandomByte = () => {\n // crypto.getRandomValues might return undefined instead of the typed array\n // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n // However, `typedArray` is still filled in-place.\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n const typedArray = new Uint8Array(1);\n crypto.getRandomValues(typedArray);\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return typedArray[0];\n };\n }\n } catch (_) {\n // some runtimes can crash invoking crypto\n // https://github.com/getsentry/sentry-javascript/issues/8935\n }\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n return (([1e7] ) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n // eslint-disable-next-line no-bitwise\n ((c ) ^ ((getRandomByte() & 15) >> ((c ) / 4))).toString(16),\n );\n}\n\nfunction getFirstException(event) {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nfunction getEventDescription(event) {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n\n const firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || '';\n }\n return eventId || '';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nfunction addExceptionTypeValue(event, value, type) {\n const exception = (event.exception = event.exception || {});\n const values = (exception.values = exception.values || []);\n const firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nfunction addExceptionMechanism(event, newMechanism) {\n const firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n\n const defaultMechanism = { type: 'generic', handled: true };\n const currentMechanism = firstException.mechanism;\n firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n if (newMechanism && 'data' in newMechanism) {\n const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n firstException.mechanism.data = mergedData;\n }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\n\nfunction _parseInt(input) {\n return parseInt(input || '', 10);\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nfunction parseSemver(input) {\n const match = input.match(SEMVER_REGEXP) || [];\n const major = _parseInt(match[1]);\n const minor = _parseInt(match[2]);\n const patch = _parseInt(match[3]);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nfunction addContextToFrame(lines, frame, linesOfContext = 5) {\n // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n if (frame.lineno === undefined) {\n return;\n }\n\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line) => snipLine(line, 0));\n\n // We guard here to ensure this is not larger than the existing number of lines\n const lineIndex = Math.min(maxLines - 1, sourceLine);\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n frame.context_line = snipLine(lines[lineIndex], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nfunction checkOrSetAlreadyCaught(exception) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (exception && (exception ).__sentry_captured__) {\n return true;\n }\n\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception , '__sentry_captured__', true);\n } catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n\n return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nfunction arrayify(maybeArray) {\n return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, arrayify, checkOrSetAlreadyCaught, getEventDescription, parseSemver, uuid4 };\n//# sourceMappingURL=misc.js.map\n","const global = globalThis || void 0 || self;\n\nexport { global as default, global };\n//# sourceMappingURL=index.js.map\n","import { isVueViewModel, isSyntheticEvent } from './is.js';\nimport { memoBuilder } from './memo.js';\nimport { convertToPlainObject } from './object.js';\nimport { getFunctionName } from './stacktrace.js';\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normalized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction normalize(input, depth = 100, maxProperties = +Infinity) {\n try {\n // since we're at the outermost level, we don't provide a key\n return visit('', input, depth, maxProperties);\n } catch (err) {\n return { ERROR: `**non-serializable** (${err})` };\n }\n}\n\n/** JSDoc */\nfunction normalizeToSize(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object,\n // Default Node.js REPL depth\n depth = 3,\n // 100kB, as 200kB is max payload size, so half sounds reasonable\n maxSize = 100 * 1024,\n) {\n const normalized = normalize(object, depth);\n\n if (jsonSize(normalized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return normalized ;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n key,\n value,\n depth = +Infinity,\n maxProperties = +Infinity,\n memo = memoBuilder(),\n) {\n const [memoize, unmemoize] = memo;\n\n // Get the simple cases out of the way first\n if (\n value == null || // this matches null and undefined -> eqeq not eqeqeq\n ['boolean', 'string'].includes(typeof value) ||\n (typeof value === 'number' && Number.isFinite(value))\n ) {\n return value ;\n }\n\n const stringified = stringifyValue(key, value);\n\n // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n if (!stringified.startsWith('[object ')) {\n return stringified;\n }\n\n // From here on, we can assert that `value` is either an object or an array.\n\n // Do not normalize objects that we know have already been normalized. As a general rule, the\n // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n // have already been normalized.\n if ((value )['__sentry_skip_normalization__']) {\n return value ;\n }\n\n // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n // We keep a certain amount of depth.\n // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n const remainingDepth =\n typeof (value )['__sentry_override_normalization_depth__'] === 'number'\n ? ((value )['__sentry_override_normalization_depth__'] )\n : depth;\n\n // We're also done if we've reached the max depth\n if (remainingDepth === 0) {\n // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n return stringified.replace('object ', '');\n }\n\n // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n if (memoize(value)) {\n return '[Circular ~]';\n }\n\n // If the value has a `toJSON` method, we call it to extract more information\n const valueWithToJSON = value ;\n if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n try {\n const jsonValue = valueWithToJSON.toJSON();\n // We need to normalize the return value of `.toJSON()` in case it has circular references\n return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n } catch (err) {\n // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n }\n }\n\n // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n // property/entry, and keep track of the number of items we add to it.\n const normalized = (Array.isArray(value) ? [] : {}) ;\n let numAdded = 0;\n\n // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n // properties are non-enumerable and otherwise would get missed.\n const visitable = convertToPlainObject(value );\n\n for (const visitKey in visitable) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n continue;\n }\n\n if (numAdded >= maxProperties) {\n normalized[visitKey] = '[MaxProperties ~]';\n break;\n }\n\n // Recursively visit all the child nodes\n const visitValue = visitable[visitKey];\n normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n numAdded++;\n }\n\n // Once we've visited all the branches, remove the parent from memo storage\n unmemoize(value);\n\n // Return accumulated values\n return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n key,\n // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n // our internal use, it'll do\n value,\n) {\n try {\n if (key === 'domain' && value && typeof value === 'object' && (value )._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n // which won't throw if they are not present.\n\n if (typeof global !== 'undefined' && value === global) {\n return '[Global]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof window !== 'undefined' && value === window) {\n return '[Window]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof document !== 'undefined' && value === document) {\n return '[Document]';\n }\n\n if (isVueViewModel(value)) {\n return '[VueViewModel]';\n }\n\n // React's SyntheticEvent thingy\n if (isSyntheticEvent(value)) {\n return '[SyntheticEvent]';\n }\n\n if (typeof value === 'number' && !Number.isFinite(value)) {\n return `[${value}]`;\n }\n\n if (typeof value === 'function') {\n return `[Function: ${getFunctionName(value)}]`;\n }\n\n if (typeof value === 'symbol') {\n return `[${String(value)}]`;\n }\n\n // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n if (typeof value === 'bigint') {\n return `[BigInt: ${String(value)}]`;\n }\n\n // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n // we can make sure that only plain objects come out that way.\n const objName = getConstructorName(value);\n\n // Handle HTML Elements\n if (/^HTML(\\w*)Element$/.test(objName)) {\n return `[HTMLElement: ${objName}]`;\n }\n\n return `[object ${objName}]`;\n } catch (err) {\n return `**non-serializable** (${err})`;\n }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value) {\n const prototype = Object.getPrototypeOf(value);\n\n return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value) {\n // eslint-disable-next-line no-bitwise\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value) {\n return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nfunction normalizeUrlToBase(url, basePath) {\n const escapedBase = basePath\n // Backslash to forward\n .replace(/\\\\/g, '/')\n // Escape RegExp special characters\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n let newUrl = url;\n try {\n newUrl = decodeURI(url);\n } catch (_Oo) {\n // Sometime this breaks\n }\n return (\n newUrl\n .replace(/\\\\/g, '/')\n .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n );\n}\n\nexport { normalize, normalizeToSize, normalizeUrlToBase };\n//# sourceMappingURL=normalize.js.map\n","import { isThenable } from './is.js';\n\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/** SyncPromise internal states */\nvar States; (function (States) {\n /** Pending */\n const PENDING = 0; States[States[\"PENDING\"] = PENDING] = \"PENDING\";\n /** Resolved / OK */\n const RESOLVED = 1; States[States[\"RESOLVED\"] = RESOLVED] = \"RESOLVED\";\n /** Rejected / Error */\n const REJECTED = 2; States[States[\"REJECTED\"] = REJECTED] = \"REJECTED\";\n})(States || (States = {}));\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nfunction resolvedSyncPromise(value) {\n return new SyncPromise(resolve => {\n resolve(value);\n });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nfunction rejectedSyncPromise(reason) {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise {\n\n constructor(\n executor,\n ) {SyncPromise.prototype.__init.call(this);SyncPromise.prototype.__init2.call(this);SyncPromise.prototype.__init3.call(this);SyncPromise.prototype.__init4.call(this);\n this._state = States.PENDING;\n this._handlers = [];\n\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n\n /** JSDoc */\n then(\n onfulfilled,\n onrejected,\n ) {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n result => {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result );\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n reason => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n },\n ]);\n this._executeHandlers();\n });\n }\n\n /** JSDoc */\n catch(\n onrejected,\n ) {\n return this.then(val => val, onrejected);\n }\n\n /** JSDoc */\n finally(onfinally) {\n return new SyncPromise((resolve, reject) => {\n let val;\n let isRejected;\n\n return this.then(\n value => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n reason => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n },\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val );\n });\n });\n }\n\n /** JSDoc */\n __init() {this._resolve = (value) => {\n this._setResult(States.RESOLVED, value);\n };}\n\n /** JSDoc */\n __init2() {this._reject = (reason) => {\n this._setResult(States.REJECTED, reason);\n };}\n\n /** JSDoc */\n __init3() {this._setResult = (state, value) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value ).then(this._resolve, this._reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };}\n\n /** JSDoc */\n __init4() {this._executeHandlers = () => {\n if (this._state === States.PENDING) {\n return;\n }\n\n const cachedHandlers = this._handlers.slice();\n this._handlers = [];\n\n cachedHandlers.forEach(handler => {\n if (handler[0]) {\n return;\n }\n\n if (this._state === States.RESOLVED) {\n handler[1](this._value );\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n };}\n}\n\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise };\n//# sourceMappingURL=syncpromise.js.map\n","import { DEBUG_BUILD } from './debug-build.js';\nimport { isString } from './is.js';\nimport { logger } from './logger.js';\n\nconst BAGGAGE_HEADER_NAME = 'baggage';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX = 'sentry-';\n\nconst SENTRY_BAGGAGE_KEY_PREFIX_REGEX = /^sentry-/;\n\n/**\n * Max length of a serialized baggage string\n *\n * https://www.w3.org/TR/baggage/#limits\n */\nconst MAX_BAGGAGE_STRING_LENGTH = 8192;\n\n/**\n * Takes a baggage header and turns it into Dynamic Sampling Context, by extracting all the \"sentry-\" prefixed values\n * from it.\n *\n * @param baggageHeader A very bread definition of a baggage header as it might appear in various frameworks.\n * @returns The Dynamic Sampling Context that was found on `baggageHeader`, if there was any, `undefined` otherwise.\n */\nfunction baggageHeaderToDynamicSamplingContext(\n // Very liberal definition of what any incoming header might look like\n baggageHeader,\n) {\n const baggageObject = parseBaggageHeader(baggageHeader);\n\n if (!baggageObject) {\n return undefined;\n }\n\n // Read all \"sentry-\" prefixed values out of the baggage object and put it onto a dynamic sampling context object.\n const dynamicSamplingContext = Object.entries(baggageObject).reduce((acc, [key, value]) => {\n if (key.match(SENTRY_BAGGAGE_KEY_PREFIX_REGEX)) {\n const nonPrefixedKey = key.slice(SENTRY_BAGGAGE_KEY_PREFIX.length);\n acc[nonPrefixedKey] = value;\n }\n return acc;\n }, {});\n\n // Only return a dynamic sampling context object if there are keys in it.\n // A keyless object means there were no sentry values on the header, which means that there is no DSC.\n if (Object.keys(dynamicSamplingContext).length > 0) {\n return dynamicSamplingContext ;\n } else {\n return undefined;\n }\n}\n\n/**\n * Turns a Dynamic Sampling Object into a baggage header by prefixing all the keys on the object with \"sentry-\".\n *\n * @param dynamicSamplingContext The Dynamic Sampling Context to turn into a header. For convenience and compatibility\n * with the `getDynamicSamplingContext` method on the Transaction class ,this argument can also be `undefined`. If it is\n * `undefined` the function will return `undefined`.\n * @returns a baggage header, created from `dynamicSamplingContext`, or `undefined` either if `dynamicSamplingContext`\n * was `undefined`, or if `dynamicSamplingContext` didn't contain any values.\n */\nfunction dynamicSamplingContextToSentryBaggageHeader(\n // this also takes undefined for convenience and bundle size in other places\n dynamicSamplingContext,\n) {\n if (!dynamicSamplingContext) {\n return undefined;\n }\n\n // Prefix all DSC keys with \"sentry-\" and put them into a new object\n const sentryPrefixedDSC = Object.entries(dynamicSamplingContext).reduce(\n (acc, [dscKey, dscValue]) => {\n if (dscValue) {\n acc[`${SENTRY_BAGGAGE_KEY_PREFIX}${dscKey}`] = dscValue;\n }\n return acc;\n },\n {},\n );\n\n return objectToBaggageHeader(sentryPrefixedDSC);\n}\n\n/**\n * Take a baggage header and parse it into an object.\n */\nfunction parseBaggageHeader(\n baggageHeader,\n) {\n if (!baggageHeader || (!isString(baggageHeader) && !Array.isArray(baggageHeader))) {\n return undefined;\n }\n\n if (Array.isArray(baggageHeader)) {\n // Combine all baggage headers into one object containing the baggage values so we can later read the Sentry-DSC-values from it\n return baggageHeader.reduce((acc, curr) => {\n const currBaggageObject = baggageHeaderToObject(curr);\n Object.entries(currBaggageObject).forEach(([key, value]) => {\n acc[key] = value;\n });\n return acc;\n }, {});\n }\n\n return baggageHeaderToObject(baggageHeader);\n}\n\n/**\n * Will parse a baggage header, which is a simple key-value map, into a flat object.\n *\n * @param baggageHeader The baggage header to parse.\n * @returns a flat object containing all the key-value pairs from `baggageHeader`.\n */\nfunction baggageHeaderToObject(baggageHeader) {\n return baggageHeader\n .split(',')\n .map(baggageEntry => baggageEntry.split('=').map(keyOrValue => decodeURIComponent(keyOrValue.trim())))\n .reduce((acc, [key, value]) => {\n if (key && value) {\n acc[key] = value;\n }\n return acc;\n }, {});\n}\n\n/**\n * Turns a flat object (key-value pairs) into a baggage header, which is also just key-value pairs.\n *\n * @param object The object to turn into a baggage header.\n * @returns a baggage header string, or `undefined` if the object didn't have any values, since an empty baggage header\n * is not spec compliant.\n */\nfunction objectToBaggageHeader(object) {\n if (Object.keys(object).length === 0) {\n // An empty baggage header is not spec compliant: We return undefined.\n return undefined;\n }\n\n return Object.entries(object).reduce((baggageHeader, [objectKey, objectValue], currentIndex) => {\n const baggageEntry = `${encodeURIComponent(objectKey)}=${encodeURIComponent(objectValue)}`;\n const newBaggageHeader = currentIndex === 0 ? baggageEntry : `${baggageHeader},${baggageEntry}`;\n if (newBaggageHeader.length > MAX_BAGGAGE_STRING_LENGTH) {\n DEBUG_BUILD &&\n logger.warn(\n `Not adding key: ${objectKey} with val: ${objectValue} to baggage header due to exceeding baggage size limits.`,\n );\n return baggageHeader;\n } else {\n return newBaggageHeader;\n }\n }, '');\n}\n\nexport { BAGGAGE_HEADER_NAME, MAX_BAGGAGE_STRING_LENGTH, SENTRY_BAGGAGE_KEY_PREFIX, SENTRY_BAGGAGE_KEY_PREFIX_REGEX, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, parseBaggageHeader };\n//# sourceMappingURL=baggage.js.map\n","import { uuid4 } from './misc.js';\n\n/**\n * Returns a new minimal propagation context\n */\nfunction generatePropagationContext() {\n return {\n traceId: uuid4(),\n spanId: uuid4().substring(16),\n };\n}\n\nexport { generatePropagationContext };\n//# sourceMappingURL=propagationContext.js.map\n","import { GLOBAL_OBJ } from './worldwide.js';\n\nconst debugIdStackParserCache = new WeakMap();\n\n/**\n * Returns a map of filenames to debug identifiers.\n */\nfunction getFilenameToDebugIdMap(stackParser) {\n const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n if (!debugIdMap) {\n return {};\n }\n\n let debugIdStackFramesCache;\n const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n if (cachedDebugIdStackFrameCache) {\n debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n } else {\n debugIdStackFramesCache = new Map();\n debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n }\n\n // Build a map of filename -> debug_id.\n return Object.keys(debugIdMap).reduce((acc, debugIdStackTrace) => {\n let parsedStack;\n\n const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n if (cachedParsedStack) {\n parsedStack = cachedParsedStack;\n } else {\n parsedStack = stackParser(debugIdStackTrace);\n debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n }\n\n for (let i = parsedStack.length - 1; i >= 0; i--) {\n const stackFrame = parsedStack[i];\n const file = stackFrame && stackFrame.filename;\n\n if (stackFrame && file) {\n acc[file] = debugIdMap[debugIdStackTrace] ;\n break;\n }\n }\n return acc;\n }, {});\n}\n\n/**\n * Returns a list of debug images for the given resources.\n */\nfunction getDebugImagesForResources(\n stackParser,\n resource_paths,\n) {\n const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n const images = [];\n for (const path of resource_paths) {\n if (path && filenameDebugIdMap[path]) {\n images.push({\n type: 'sourcemap',\n code_file: path,\n debug_id: filenameDebugIdMap[path] ,\n });\n }\n }\n\n return images;\n}\n\nexport { getDebugImagesForResources, getFilenameToDebugIdMap };\n//# sourceMappingURL=debug-ids.js.map\n","/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nconst DEBUG_BUILD = (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__);\n\nexport { DEBUG_BUILD };\n//# sourceMappingURL=debug-build.js.map\n","import { GLOBAL_OBJ, SDK_VERSION } from '@sentry/utils';\n\n/**\n * An object that contains globally accessible properties and maintains a scope stack.\n * @hidden\n */\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nfunction getMainCarrier() {\n // This ensures a Sentry carrier exists\n getSentryCarrier(GLOBAL_OBJ);\n return GLOBAL_OBJ;\n}\n\n/** Will either get the existing sentry carrier, or create a new one. */\nfunction getSentryCarrier(carrier) {\n const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n\n // For now: First SDK that sets the .version property wins\n __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n\n // Intentionally populating and returning the version of \"this\" SDK instance\n // rather than what's set in .version so that \"this\" SDK always gets its carrier\n return (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n}\n\nexport { getMainCarrier, getSentryCarrier };\n//# sourceMappingURL=carrier.js.map\n","import { timestampInSeconds, uuid4, dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nfunction makeSession(context) {\n // Both timestamp and started are in seconds since the UNIX epoch.\n const startingTime = timestampInSeconds();\n\n const session = {\n sid: uuid4(),\n init: true,\n timestamp: startingTime,\n started: startingTime,\n duration: 0,\n status: 'ok',\n errors: 0,\n ignoreDuration: false,\n toJSON: () => sessionToJSON(session),\n };\n\n if (context) {\n updateSession(session, context);\n }\n\n return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nfunction updateSession(session, context = {}) {\n if (context.user) {\n if (!session.ipAddress && context.user.ip_address) {\n session.ipAddress = context.user.ip_address;\n }\n\n if (!session.did && !context.did) {\n session.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n session.timestamp = context.timestamp || timestampInSeconds();\n\n if (context.abnormal_mechanism) {\n session.abnormal_mechanism = context.abnormal_mechanism;\n }\n\n if (context.ignoreDuration) {\n session.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n session.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n session.init = context.init;\n }\n if (!session.did && context.did) {\n session.did = `${context.did}`;\n }\n if (typeof context.started === 'number') {\n session.started = context.started;\n }\n if (session.ignoreDuration) {\n session.duration = undefined;\n } else if (typeof context.duration === 'number') {\n session.duration = context.duration;\n } else {\n const duration = session.timestamp - session.started;\n session.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n session.release = context.release;\n }\n if (context.environment) {\n session.environment = context.environment;\n }\n if (!session.ipAddress && context.ipAddress) {\n session.ipAddress = context.ipAddress;\n }\n if (!session.userAgent && context.userAgent) {\n session.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n session.errors = context.errors;\n }\n if (context.status) {\n session.status = context.status;\n }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n * this function will keep the previously set status, unless it was `'ok'` in which case\n * it is changed to `'exited'`.\n */\nfunction closeSession(session, status) {\n let context = {};\n if (status) {\n context = { status };\n } else if (session.status === 'ok') {\n context = { status: 'exited' };\n }\n\n updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session) {\n return dropUndefinedKeys({\n sid: `${session.sid}`,\n init: session.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(session.started * 1000).toISOString(),\n timestamp: new Date(session.timestamp * 1000).toISOString(),\n status: session.status,\n errors: session.errors,\n did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n duration: session.duration,\n abnormal_mechanism: session.abnormal_mechanism,\n attrs: {\n release: session.release,\n environment: session.environment,\n ip_address: session.ipAddress,\n user_agent: session.userAgent,\n },\n });\n}\n\nexport { closeSession, makeSession, updateSession };\n//# sourceMappingURL=session.js.map\n","import { addNonEnumerableProperty } from '@sentry/utils';\n\nconst SCOPE_SPAN_FIELD = '_sentrySpan';\n\n/**\n * Set the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _setSpanForScope(scope, span) {\n if (span) {\n addNonEnumerableProperty(scope , SCOPE_SPAN_FIELD, span);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete (scope )[SCOPE_SPAN_FIELD];\n }\n}\n\n/**\n * Get the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nfunction _getSpanForScope(scope) {\n return scope[SCOPE_SPAN_FIELD];\n}\n\nexport { _getSpanForScope, _setSpanForScope };\n//# sourceMappingURL=spanOnScope.js.map\n","import { generatePropagationContext, isPlainObject, dateTimestampInSeconds, uuid4, logger } from '@sentry/utils';\nimport { updateSession } from './session.js';\nimport { _setSpanForScope, _getSpanForScope } from './utils/spanOnScope.js';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information.\n */\nclass ScopeClass {\n /** Flag if notifying is happening. */\n\n /** Callback for client to receive scope changes. */\n\n /** Callback list that will be called during event processing. */\n\n /** Array of breadcrumbs. */\n\n /** User */\n\n /** Tags */\n\n /** Extra */\n\n /** Contexts */\n\n /** Attachments */\n\n /** Propagation Context for distributed tracing */\n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n\n /** Fingerprint */\n\n /** Severity */\n\n /**\n * Transaction Name\n *\n * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects.\n * It's purpose is to assign a transaction to the scope that's added to non-transaction events.\n */\n\n /** Session */\n\n /** Request Mode Session Status */\n\n /** The client on this scope */\n\n /** Contains the last event id of a captured event. */\n\n // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n this._propagationContext = generatePropagationContext();\n }\n\n /**\n * @inheritDoc\n */\n clone() {\n const newScope = new ScopeClass();\n newScope._breadcrumbs = [...this._breadcrumbs];\n newScope._tags = { ...this._tags };\n newScope._extra = { ...this._extra };\n newScope._contexts = { ...this._contexts };\n newScope._user = this._user;\n newScope._level = this._level;\n newScope._session = this._session;\n newScope._transactionName = this._transactionName;\n newScope._fingerprint = this._fingerprint;\n newScope._eventProcessors = [...this._eventProcessors];\n newScope._requestSession = this._requestSession;\n newScope._attachments = [...this._attachments];\n newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n newScope._propagationContext = { ...this._propagationContext };\n newScope._client = this._client;\n newScope._lastEventId = this._lastEventId;\n\n _setSpanForScope(newScope, _getSpanForScope(this));\n\n return newScope;\n }\n\n /**\n * @inheritDoc\n */\n setClient(client) {\n this._client = client;\n }\n\n /**\n * @inheritDoc\n */\n setLastEventId(lastEventId) {\n this._lastEventId = lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n getClient() {\n return this._client ;\n }\n\n /**\n * @inheritDoc\n */\n lastEventId() {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n addScopeListener(callback) {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n addEventProcessor(callback) {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setUser(user) {\n // If null is passed we want to unset everything, but still define keys,\n // so that later down in the pipeline any existing values are cleared.\n this._user = user || {\n email: undefined,\n id: undefined,\n ip_address: undefined,\n username: undefined,\n };\n\n if (this._session) {\n updateSession(this._session, { user });\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getUser() {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n getRequestSession() {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n setRequestSession(requestSession) {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTags(tags) {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTag(key, value) {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtras(extras) {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setExtra(key, extra) {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setFingerprint(fingerprint) {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setLevel(level) {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setTransactionName(name) {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setContext(key, context) {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setSession(session) {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getSession() {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n update(captureContext) {\n if (!captureContext) {\n return this;\n }\n\n const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n const [scopeInstance, requestSession] =\n scopeToMerge instanceof Scope\n ? [scopeToMerge.getScopeData(), scopeToMerge.getRequestSession()]\n : isPlainObject(scopeToMerge)\n ? [captureContext , (captureContext ).requestSession]\n : [];\n\n const { tags, extra, user, contexts, level, fingerprint = [], propagationContext } = scopeInstance || {};\n\n this._tags = { ...this._tags, ...tags };\n this._extra = { ...this._extra, ...extra };\n this._contexts = { ...this._contexts, ...contexts };\n\n if (user && Object.keys(user).length) {\n this._user = user;\n }\n\n if (level) {\n this._level = level;\n }\n\n if (fingerprint.length) {\n this._fingerprint = fingerprint;\n }\n\n if (propagationContext) {\n this._propagationContext = propagationContext;\n }\n\n if (requestSession) {\n this._requestSession = requestSession;\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clear() {\n // client is not cleared here on purpose!\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._session = undefined;\n _setSpanForScope(this, undefined);\n this._attachments = [];\n this._propagationContext = generatePropagationContext();\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addBreadcrumb(breadcrumb, maxBreadcrumbs) {\n const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n const mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n\n const breadcrumbs = this._breadcrumbs;\n breadcrumbs.push(mergedBreadcrumb);\n this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getLastBreadcrumb() {\n return this._breadcrumbs[this._breadcrumbs.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n clearBreadcrumbs() {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n addAttachment(attachment) {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n clearAttachments() {\n this._attachments = [];\n return this;\n }\n\n /** @inheritDoc */\n getScopeData() {\n return {\n breadcrumbs: this._breadcrumbs,\n attachments: this._attachments,\n contexts: this._contexts,\n tags: this._tags,\n extra: this._extra,\n user: this._user,\n level: this._level,\n fingerprint: this._fingerprint || [],\n eventProcessors: this._eventProcessors,\n propagationContext: this._propagationContext,\n sdkProcessingMetadata: this._sdkProcessingMetadata,\n transactionName: this._transactionName,\n span: _getSpanForScope(this),\n };\n }\n\n /**\n * @inheritDoc\n */\n setSDKProcessingMetadata(newData) {\n this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n setPropagationContext(context) {\n this._propagationContext = context;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n getPropagationContext() {\n return this._propagationContext;\n }\n\n /**\n * @inheritDoc\n */\n captureException(exception, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture exception!');\n return eventId;\n }\n\n const syntheticException = new Error('Sentry syntheticException');\n\n this._client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureMessage(message, level, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture message!');\n return eventId;\n }\n\n const syntheticException = new Error(message);\n\n this._client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n captureEvent(event, hint) {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture event!');\n return eventId;\n }\n\n this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n return eventId;\n }\n\n /**\n * This will be called on every set call.\n */\n _notifyScopeListeners() {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n}\n\n// NOTE: By exporting this here as const & type, instead of doing `export class`,\n// We can get the correct class when importing from `@sentry/core`, but the original type (from `@sentry/types`)\n// This is helpful for interop, e.g. when doing `import type { Scope } from '@sentry/node';` (which re-exports this)\n\n/**\n * Holds additional event information.\n */\nconst Scope = ScopeClass;\n\n/**\n * Holds additional event information.\n */\n\nexport { Scope };\n//# sourceMappingURL=scope.js.map\n","import { getGlobalSingleton } from '@sentry/utils';\nimport { Scope } from './scope.js';\n\n/** Get the default current scope. */\nfunction getDefaultCurrentScope() {\n return getGlobalSingleton('defaultCurrentScope', () => new Scope());\n}\n\n/** Get the default isolation scope. */\nfunction getDefaultIsolationScope() {\n return getGlobalSingleton('defaultIsolationScope', () => new Scope());\n}\n\nexport { getDefaultCurrentScope, getDefaultIsolationScope };\n//# sourceMappingURL=defaultScopes.js.map\n","import { isThenable } from '@sentry/utils';\nimport { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes.js';\nimport { Scope } from '../scope.js';\nimport { getMainCarrier, getSentryCarrier } from '../carrier.js';\n\n/**\n * This is an object that holds a stack of scopes.\n */\nclass AsyncContextStack {\n\n constructor(scope, isolationScope) {\n let assignedScope;\n if (!scope) {\n assignedScope = new Scope();\n } else {\n assignedScope = scope;\n }\n\n let assignedIsolationScope;\n if (!isolationScope) {\n assignedIsolationScope = new Scope();\n } else {\n assignedIsolationScope = isolationScope;\n }\n\n // scope stack for domains or the process\n this._stack = [{ scope: assignedScope }];\n this._isolationScope = assignedIsolationScope;\n }\n\n /**\n * Fork a scope for the stack.\n */\n withScope(callback) {\n const scope = this._pushScope();\n\n let maybePromiseResult;\n try {\n maybePromiseResult = callback(scope);\n } catch (e) {\n this._popScope();\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n // @ts-expect-error - isThenable returns the wrong type\n return maybePromiseResult.then(\n res => {\n this._popScope();\n return res;\n },\n e => {\n this._popScope();\n throw e;\n },\n );\n }\n\n this._popScope();\n return maybePromiseResult;\n }\n\n /**\n * Get the client of the stack.\n */\n getClient() {\n return this.getStackTop().client ;\n }\n\n /**\n * Returns the scope of the top stack.\n */\n getScope() {\n return this.getStackTop().scope;\n }\n\n /**\n * Get the isolation scope for the stack.\n */\n getIsolationScope() {\n return this._isolationScope;\n }\n\n /**\n * Returns the topmost scope layer in the order domain > local > process.\n */\n getStackTop() {\n return this._stack[this._stack.length - 1] ;\n }\n\n /**\n * Push a scope to the stack.\n */\n _pushScope() {\n // We want to clone the content of prev scope\n const scope = this.getScope().clone();\n this._stack.push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * Pop a scope from the stack.\n */\n _popScope() {\n if (this._stack.length <= 1) return false;\n return !!this._stack.pop();\n }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack() {\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n\n return (sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()));\n}\n\nfunction withScope(callback) {\n return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope(scope, callback) {\n const stack = getAsyncContextStack() ;\n return stack.withScope(() => {\n stack.getStackTop().scope = scope;\n return callback(scope);\n });\n}\n\nfunction withIsolationScope(callback) {\n return getAsyncContextStack().withScope(() => {\n return callback(getAsyncContextStack().getIsolationScope());\n });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nfunction getStackAsyncContextStrategy() {\n return {\n withIsolationScope,\n withScope,\n withSetScope,\n withSetIsolationScope: (_isolationScope, callback) => {\n return withIsolationScope(callback);\n },\n getCurrentScope: () => getAsyncContextStack().getScope(),\n getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n };\n}\n\nexport { AsyncContextStack, getStackAsyncContextStrategy };\n//# sourceMappingURL=stackStrategy.js.map\n","import { getMainCarrier, getSentryCarrier } from '../carrier.js';\nimport { getStackAsyncContextStrategy } from './stackStrategy.js';\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nfunction setAsyncContextStrategy(strategy) {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n sentry.acs = strategy;\n}\n\n/**\n * Get the current async context strategy.\n * If none has been setup, the default will be used.\n */\nfunction getAsyncContextStrategy(carrier) {\n const sentry = getSentryCarrier(carrier);\n\n if (sentry.acs) {\n return sentry.acs;\n }\n\n // Otherwise, use the default one (stack)\n return getStackAsyncContextStrategy();\n}\n\nexport { getAsyncContextStrategy, setAsyncContextStrategy };\n//# sourceMappingURL=index.js.map\n","import { getGlobalSingleton } from '@sentry/utils';\nimport { getAsyncContextStrategy } from './asyncContext/index.js';\nimport { getMainCarrier } from './carrier.js';\nimport { Scope } from './scope.js';\n\n/**\n * Get the currently active scope.\n */\nfunction getCurrentScope() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getCurrentScope();\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current execution context.\n */\nfunction getIsolationScope() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getIsolationScope();\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nfunction getGlobalScope() {\n return getGlobalSingleton('globalScope', () => new Scope());\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n */\n\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nfunction withScope(\n ...rest\n) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [scope, callback] = rest;\n\n if (!scope) {\n return acs.withScope(callback);\n }\n\n return acs.withSetScope(scope, callback);\n }\n\n return acs.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n */\n\n/**\n * Either creates a new active isolation scope, or sets the given isolation scope as active scope in the given callback.\n */\nfunction withIsolationScope(\n ...rest\n\n) {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [isolationScope, callback] = rest;\n\n if (!isolationScope) {\n return acs.withIsolationScope(callback);\n }\n\n return acs.withSetIsolationScope(isolationScope, callback);\n }\n\n return acs.withIsolationScope(rest[0]);\n}\n\n/**\n * Get the currently active client.\n */\nfunction getClient() {\n return getCurrentScope().getClient();\n}\n\nexport { getClient, getCurrentScope, getGlobalScope, getIsolationScope, withIsolationScope, withScope };\n//# sourceMappingURL=currentScopes.js.map\n","import { dropUndefinedKeys } from '@sentry/utils';\n\n/**\n * key: bucketKey\n * value: [exportKey, MetricSummary]\n */\n\nconst METRICS_SPAN_FIELD = '_sentryMetrics';\n\n/**\n * Fetches the metric summary if it exists for the passed span\n */\nfunction getMetricSummaryJsonForSpan(span) {\n const storage = (span )[METRICS_SPAN_FIELD];\n\n if (!storage) {\n return undefined;\n }\n const output = {};\n\n for (const [, [exportKey, summary]] of storage) {\n const arr = output[exportKey] || (output[exportKey] = []);\n arr.push(dropUndefinedKeys(summary));\n }\n\n return output;\n}\n\n/**\n * Updates the metric summary on a span.\n */\nfunction updateMetricSummaryOnSpan(\n span,\n metricType,\n sanitizedName,\n value,\n unit,\n tags,\n bucketKey,\n) {\n const existingStorage = (span )[METRICS_SPAN_FIELD];\n const storage =\n existingStorage ||\n ((span )[METRICS_SPAN_FIELD] = new Map());\n\n const exportKey = `${metricType}:${sanitizedName}@${unit}`;\n const bucketItem = storage.get(bucketKey);\n\n if (bucketItem) {\n const [, summary] = bucketItem;\n storage.set(bucketKey, [\n exportKey,\n {\n min: Math.min(summary.min, value),\n max: Math.max(summary.max, value),\n count: (summary.count += 1),\n sum: (summary.sum += value),\n tags: summary.tags,\n },\n ]);\n } else {\n storage.set(bucketKey, [\n exportKey,\n {\n min: value,\n max: value,\n count: 1,\n sum: value,\n tags,\n },\n ]);\n }\n}\n\nexport { getMetricSummaryJsonForSpan, updateMetricSummaryOnSpan };\n//# sourceMappingURL=metric-summary.js.map\n","/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Use this attribute to represent the sample rate used for a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nconst SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/** The reason why an idle span finished. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = 'sentry.idle_span_finish_reason';\n\n/** The unit of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = 'sentry.measurement_unit';\n\n/** The value of a measurement, which may be stored as a TimedEvent. */\nconst SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = 'sentry.measurement_value';\n\n/**\n * The id of the profile that this span occurred in.\n */\nconst SEMANTIC_ATTRIBUTE_PROFILE_ID = 'sentry.profile_id';\n\nconst SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = 'sentry.exclusive_time';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_HIT = 'cache.hit';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_KEY = 'cache.key';\n\nconst SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = 'cache.item_size';\n\n/** TODO: Remove these once we update to latest semantic conventions */\nconst SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD = 'http.request.method';\nconst SEMANTIC_ATTRIBUTE_URL_FULL = 'url.full';\n\nexport { SEMANTIC_ATTRIBUTE_CACHE_HIT, SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE, SEMANTIC_ATTRIBUTE_CACHE_KEY, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_HTTP_REQUEST_METHOD, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE, SEMANTIC_ATTRIBUTE_URL_FULL };\n//# sourceMappingURL=semanticAttributes.js.map\n","const SPAN_STATUS_UNSET = 0;\nconst SPAN_STATUS_OK = 1;\nconst SPAN_STATUS_ERROR = 2;\n\n/**\n * Converts a HTTP status code into a sentry status with a message.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\n// https://develop.sentry.dev/sdk/event-payloads/span/\nfunction getSpanStatusFromHttpCode(httpStatus) {\n if (httpStatus < 400 && httpStatus >= 100) {\n return { code: SPAN_STATUS_OK };\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return { code: SPAN_STATUS_ERROR, message: 'unauthenticated' };\n case 403:\n return { code: SPAN_STATUS_ERROR, message: 'permission_denied' };\n case 404:\n return { code: SPAN_STATUS_ERROR, message: 'not_found' };\n case 409:\n return { code: SPAN_STATUS_ERROR, message: 'already_exists' };\n case 413:\n return { code: SPAN_STATUS_ERROR, message: 'failed_precondition' };\n case 429:\n return { code: SPAN_STATUS_ERROR, message: 'resource_exhausted' };\n case 499:\n return { code: SPAN_STATUS_ERROR, message: 'cancelled' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'invalid_argument' };\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return { code: SPAN_STATUS_ERROR, message: 'unimplemented' };\n case 503:\n return { code: SPAN_STATUS_ERROR, message: 'unavailable' };\n case 504:\n return { code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'internal_error' };\n }\n }\n\n return { code: SPAN_STATUS_ERROR, message: 'unknown_error' };\n}\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nfunction setHttpStatus(span, httpStatus) {\n span.setAttribute('http.response.status_code', httpStatus);\n\n const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n if (spanStatus.message !== 'unknown_error') {\n span.setStatus(spanStatus);\n }\n}\n\nexport { SPAN_STATUS_ERROR, SPAN_STATUS_OK, SPAN_STATUS_UNSET, getSpanStatusFromHttpCode, setHttpStatus };\n//# sourceMappingURL=spanstatus.js.map\n","import { dropUndefinedKeys, generateSentryTraceHeader, timestampInSeconds, addNonEnumerableProperty } from '@sentry/utils';\nimport { getAsyncContextStrategy } from '../asyncContext/index.js';\nimport { getMainCarrier } from '../carrier.js';\nimport { getCurrentScope } from '../currentScopes.js';\nimport { getMetricSummaryJsonForSpan, updateMetricSummaryOnSpan } from '../metrics/metric-summary.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../semanticAttributes.js';\nimport { SPAN_STATUS_UNSET, SPAN_STATUS_OK } from '../tracing/spanstatus.js';\nimport { _getSpanForScope } from './spanOnScope.js';\n\n// These are aligned with OpenTelemetry trace flags\nconst TRACE_FLAG_NONE = 0x0;\nconst TRACE_FLAG_SAMPLED = 0x1;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n * By default, this will only include trace_id, span_id & parent_span_id.\n * If `includeAllData` is true, it will also include data, op, status & origin.\n */\nfunction spanToTransactionTraceContext(span) {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { data, op, parent_span_id, status, origin } = spanToJSON(span);\n\n return dropUndefinedKeys({\n parent_span_id,\n span_id,\n trace_id,\n data,\n op,\n status,\n origin,\n });\n}\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in a non-transaction event.\n */\nfunction spanToTraceContext(span) {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { parent_span_id } = spanToJSON(span);\n\n return dropUndefinedKeys({ parent_span_id, span_id, trace_id });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nfunction spanToTraceHeader(span) {\n const { traceId, spanId } = span.spanContext();\n const sampled = spanIsSampled(span);\n return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input into a timestamp in seconds.\n */\nfunction spanTimeInputToSeconds(input) {\n if (typeof input === 'number') {\n return ensureTimestampInSeconds(input);\n }\n\n if (Array.isArray(input)) {\n // See {@link HrTime} for the array-based time format\n return input[0] + input[1] / 1e9;\n }\n\n if (input instanceof Date) {\n return ensureTimestampInSeconds(input.getTime());\n }\n\n return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp) {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n */\n// Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n// This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n// And `spanToJSON` needs the Span class from `span.ts` to check here.\nfunction spanToJSON(span) {\n if (spanIsSentrySpan(span)) {\n return span.getSpanJSON();\n }\n\n try {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n\n // Handle a span from @opentelemetry/sdk-base-trace's `Span` class\n if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n const { attributes, startTime, name, endTime, parentSpanId, status } = span;\n\n return dropUndefinedKeys({\n span_id,\n trace_id,\n data: attributes,\n description: name,\n parent_span_id: parentSpanId,\n start_timestamp: spanTimeInputToSeconds(startTime),\n // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n timestamp: spanTimeInputToSeconds(endTime) || undefined,\n status: getStatusMessage(status),\n op: attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n origin: attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] ,\n _metrics_summary: getMetricSummaryJsonForSpan(span),\n });\n }\n\n // Finally, at least we have `spanContext()`....\n return {\n span_id,\n trace_id,\n };\n } catch (e) {\n return {};\n }\n}\n\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span) {\n const castSpan = span ;\n return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\n\n/** Exported only for tests. */\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSentrySpan(span) {\n return typeof (span ).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nfunction spanIsSampled(span) {\n // We align our trace flags with the ones OpenTelemetry use\n // So we also check for sampled the same way they do.\n const { traceFlags } = span.spanContext();\n return traceFlags === TRACE_FLAG_SAMPLED;\n}\n\n/** Get the status message to use for a JSON representation of a span. */\nfunction getStatusMessage(status) {\n if (!status || status.code === SPAN_STATUS_UNSET) {\n return undefined;\n }\n\n if (status.code === SPAN_STATUS_OK) {\n return 'ok';\n }\n\n return status.message || 'unknown_error';\n}\n\nconst CHILD_SPANS_FIELD = '_sentryChildSpans';\nconst ROOT_SPAN_FIELD = '_sentryRootSpan';\n\n/**\n * Adds an opaque child span reference to a span.\n */\nfunction addChildSpanToSpan(span, childSpan) {\n // We store the root span reference on the child span\n // We need this for `getRootSpan()` to work\n const rootSpan = span[ROOT_SPAN_FIELD] || span;\n addNonEnumerableProperty(childSpan , ROOT_SPAN_FIELD, rootSpan);\n\n // We store a list of child spans on the parent span\n // We need this for `getSpanDescendants()` to work\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].add(childSpan);\n } else {\n addNonEnumerableProperty(span, CHILD_SPANS_FIELD, new Set([childSpan]));\n }\n}\n\n/** This is only used internally by Idle Spans. */\nfunction removeChildSpanFromSpan(span, childSpan) {\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].delete(childSpan);\n }\n}\n\n/**\n * Returns an array of the given span and all of its descendants.\n */\nfunction getSpanDescendants(span) {\n const resultSet = new Set();\n\n function addSpanChildren(span) {\n // This exit condition is required to not infinitely loop in case of a circular dependency.\n if (resultSet.has(span)) {\n return;\n // We want to ignore unsampled spans (e.g. non recording spans)\n } else if (spanIsSampled(span)) {\n resultSet.add(span);\n const childSpans = span[CHILD_SPANS_FIELD] ? Array.from(span[CHILD_SPANS_FIELD]) : [];\n for (const childSpan of childSpans) {\n addSpanChildren(childSpan);\n }\n }\n }\n\n addSpanChildren(span);\n\n return Array.from(resultSet);\n}\n\n/**\n * Returns the root span of a given span.\n */\nfunction getRootSpan(span) {\n return span[ROOT_SPAN_FIELD] || span;\n}\n\n/**\n * Returns the currently active span.\n */\nfunction getActiveSpan() {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getActiveSpan) {\n return acs.getActiveSpan();\n }\n\n return _getSpanForScope(getCurrentScope());\n}\n\n/**\n * Updates the metric summary on the currently active span\n */\nfunction updateMetricSummaryOnActiveSpan(\n metricType,\n sanitizedName,\n value,\n unit,\n tags,\n bucketKey,\n) {\n const span = getActiveSpan();\n if (span) {\n updateMetricSummaryOnSpan(span, metricType, sanitizedName, value, unit, tags, bucketKey);\n }\n}\n\nexport { TRACE_FLAG_NONE, TRACE_FLAG_SAMPLED, addChildSpanToSpan, getActiveSpan, getRootSpan, getSpanDescendants, getStatusMessage, removeChildSpanFromSpan, spanIsSampled, spanTimeInputToSeconds, spanToJSON, spanToTraceContext, spanToTraceHeader, spanToTransactionTraceContext, updateMetricSummaryOnActiveSpan };\n//# sourceMappingURL=spanUtils.js.map\n","import { getClient } from '../currentScopes.js';\n\n// Treeshakable guard to remove all code related to tracing\n\n/**\n * Determines if tracing is currently enabled.\n *\n * Tracing is enabled when at least one of `tracesSampleRate` and `tracesSampler` is defined in the SDK config.\n */\nfunction hasTracingEnabled(\n maybeOptions,\n) {\n if (typeof __SENTRY_TRACING__ === 'boolean' && !__SENTRY_TRACING__) {\n return false;\n }\n\n const client = getClient();\n const options = maybeOptions || (client && client.getOptions());\n // eslint-disable-next-line deprecation/deprecation\n return !!options && (options.enableTracing || 'tracesSampleRate' in options || 'tracesSampler' in options);\n}\n\nexport { hasTracingEnabled };\n//# sourceMappingURL=hasTracingEnabled.js.map\n","const DEFAULT_ENVIRONMENT = 'production';\n\nexport { DEFAULT_ENVIRONMENT };\n//# sourceMappingURL=constants.js.map\n","import { dropUndefinedKeys, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, addNonEnumerableProperty } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getClient } from '../currentScopes.js';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes.js';\nimport { hasTracingEnabled } from '../utils/hasTracingEnabled.js';\nimport { spanToJSON, getRootSpan, spanIsSampled } from '../utils/spanUtils.js';\n\n/**\n * If you change this value, also update the terser plugin config to\n * avoid minification of the object property!\n */\nconst FROZEN_DSC_FIELD = '_frozenDsc';\n\n/**\n * Freeze the given DSC on the given span.\n */\nfunction freezeDscOnSpan(span, dsc) {\n const spanWithMaybeDsc = span ;\n addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nfunction getDynamicSamplingContextFromClient(trace_id, client) {\n const options = client.getOptions();\n\n const { publicKey: public_key } = client.getDsn() || {};\n\n const dsc = dropUndefinedKeys({\n environment: options.environment || DEFAULT_ENVIRONMENT,\n release: options.release,\n public_key,\n trace_id,\n }) ;\n\n client.emit('createDsc', dsc);\n\n return dsc;\n}\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nfunction getDynamicSamplingContextFromSpan(span) {\n const client = getClient();\n if (!client) {\n return {};\n }\n\n const dsc = getDynamicSamplingContextFromClient(spanToJSON(span).trace_id || '', client);\n\n const rootSpan = getRootSpan(span);\n\n // For core implementation, we freeze the DSC onto the span as a non-enumerable property\n const frozenDsc = (rootSpan )[FROZEN_DSC_FIELD];\n if (frozenDsc) {\n return frozenDsc;\n }\n\n // For OpenTelemetry, we freeze the DSC on the trace state\n const traceState = rootSpan.spanContext().traceState;\n const traceStateDsc = traceState && traceState.get('sentry.dsc');\n\n // If the span has a DSC, we want it to take precedence\n const dscOnTraceState = traceStateDsc && baggageHeaderToDynamicSamplingContext(traceStateDsc);\n\n if (dscOnTraceState) {\n return dscOnTraceState;\n }\n\n // Else, we generate it from the span\n const jsonSpan = spanToJSON(rootSpan);\n const attributes = jsonSpan.data || {};\n const maybeSampleRate = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE];\n\n if (maybeSampleRate != null) {\n dsc.sample_rate = `${maybeSampleRate}`;\n }\n\n // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n // after JSON conversion, txn.name becomes jsonSpan.description\n const name = jsonSpan.description;\n if (source !== 'url' && name) {\n dsc.transaction = name;\n }\n\n // How can we even land here with hasTracingEnabled() returning false?\n // Otel creates a Non-recording span in Tracing Without Performance mode when handling incoming requests\n // So we end up with an active span that is not sampled (neither positively nor negatively)\n if (hasTracingEnabled()) {\n dsc.sampled = String(spanIsSampled(rootSpan));\n }\n\n client.emit('createDsc', dsc, rootSpan);\n\n return dsc;\n}\n\n/**\n * Convert a Span to a baggage header.\n */\nfunction spanToBaggageHeader(span) {\n const dsc = getDynamicSamplingContextFromSpan(span);\n return dynamicSamplingContextToSentryBaggageHeader(dsc);\n}\n\nexport { freezeDscOnSpan, getDynamicSamplingContextFromClient, getDynamicSamplingContextFromSpan, spanToBaggageHeader };\n//# sourceMappingURL=dynamicSamplingContext.js.map\n","import { SyncPromise, logger, isThenable } from '@sentry/utils';\nimport { DEBUG_BUILD } from './debug-build.js';\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nfunction notifyEventProcessors(\n processors,\n event,\n hint,\n index = 0,\n) {\n return new SyncPromise((resolve, reject) => {\n const processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n const result = processor({ ...event }, hint) ;\n\n DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n if (isThenable(result)) {\n void result\n .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n .then(null, reject);\n } else {\n void notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n}\n\nexport { notifyEventProcessors };\n//# sourceMappingURL=eventProcessors.js.map\n","import { dropUndefinedKeys, arrayify } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext.js';\nimport { spanToTraceContext, getRootSpan, spanToJSON } from './spanUtils.js';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nfunction applyScopeDataToEvent(event, data) {\n const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n // Apply general data\n applyDataToEvent(event, data);\n\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (span) {\n applySpanToEvent(event, span);\n }\n\n applyFingerprintToEvent(event, fingerprint);\n applyBreadcrumbsToEvent(event, breadcrumbs);\n applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nfunction mergeScopeData(data, mergeData) {\n const {\n extra,\n tags,\n user,\n contexts,\n level,\n sdkProcessingMetadata,\n breadcrumbs,\n fingerprint,\n eventProcessors,\n attachments,\n propagationContext,\n transactionName,\n span,\n } = mergeData;\n\n mergeAndOverwriteScopeData(data, 'extra', extra);\n mergeAndOverwriteScopeData(data, 'tags', tags);\n mergeAndOverwriteScopeData(data, 'user', user);\n mergeAndOverwriteScopeData(data, 'contexts', contexts);\n mergeAndOverwriteScopeData(data, 'sdkProcessingMetadata', sdkProcessingMetadata);\n\n if (level) {\n data.level = level;\n }\n\n if (transactionName) {\n data.transactionName = transactionName;\n }\n\n if (span) {\n data.span = span;\n }\n\n if (breadcrumbs.length) {\n data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n }\n\n if (fingerprint.length) {\n data.fingerprint = [...data.fingerprint, ...fingerprint];\n }\n\n if (eventProcessors.length) {\n data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n }\n\n if (attachments.length) {\n data.attachments = [...data.attachments, ...attachments];\n }\n\n data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nfunction mergeAndOverwriteScopeData\n\n(data, prop, mergeVal) {\n if (mergeVal && Object.keys(mergeVal).length) {\n // Clone object\n data[prop] = { ...data[prop] };\n for (const key in mergeVal) {\n if (Object.prototype.hasOwnProperty.call(mergeVal, key)) {\n data[prop][key] = mergeVal[key];\n }\n }\n }\n}\n\nfunction applyDataToEvent(event, data) {\n const { extra, tags, user, contexts, level, transactionName } = data;\n\n const cleanedExtra = dropUndefinedKeys(extra);\n if (cleanedExtra && Object.keys(cleanedExtra).length) {\n event.extra = { ...cleanedExtra, ...event.extra };\n }\n\n const cleanedTags = dropUndefinedKeys(tags);\n if (cleanedTags && Object.keys(cleanedTags).length) {\n event.tags = { ...cleanedTags, ...event.tags };\n }\n\n const cleanedUser = dropUndefinedKeys(user);\n if (cleanedUser && Object.keys(cleanedUser).length) {\n event.user = { ...cleanedUser, ...event.user };\n }\n\n const cleanedContexts = dropUndefinedKeys(contexts);\n if (cleanedContexts && Object.keys(cleanedContexts).length) {\n event.contexts = { ...cleanedContexts, ...event.contexts };\n }\n\n if (level) {\n event.level = level;\n }\n\n // transaction events get their `transaction` from the root span name\n if (transactionName && event.type !== 'transaction') {\n event.transaction = transactionName;\n }\n}\n\nfunction applyBreadcrumbsToEvent(event, breadcrumbs) {\n const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event, sdkProcessingMetadata) {\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n ...sdkProcessingMetadata,\n };\n}\n\nfunction applySpanToEvent(event, span) {\n event.contexts = {\n trace: spanToTraceContext(span),\n ...event.contexts,\n };\n\n event.sdkProcessingMetadata = {\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n ...event.sdkProcessingMetadata,\n };\n\n const rootSpan = getRootSpan(span);\n const transactionName = spanToJSON(rootSpan).description;\n if (transactionName && !event.transaction && event.type === 'transaction') {\n event.transaction = transactionName;\n }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event, fingerprint) {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n // If we have something on the scope, then merge it with event\n if (fingerprint) {\n event.fingerprint = event.fingerprint.concat(fingerprint);\n }\n\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n}\n\nexport { applyScopeDataToEvent, mergeAndOverwriteScopeData, mergeScopeData };\n//# sourceMappingURL=applyScopeDataToEvent.js.map\n","import { uuid4, dateTimestampInSeconds, addExceptionMechanism, truncate, getFilenameToDebugIdMap, normalize } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from '../constants.js';\nimport { getGlobalScope } from '../currentScopes.js';\nimport { notifyEventProcessors } from '../eventProcessors.js';\nimport { Scope } from '../scope.js';\nimport { mergeScopeData, applyScopeDataToEvent } from './applyScopeDataToEvent.js';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nfunction prepareEvent(\n options,\n event,\n hint,\n scope,\n client,\n isolationScope,\n) {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1000 } = options;\n const prepared = {\n ...event,\n event_id: event.event_id || hint.event_id || uuid4(),\n timestamp: event.timestamp || dateTimestampInSeconds(),\n };\n const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n applyClientOptions(prepared, options);\n applyIntegrationsMetadata(prepared, integrations);\n\n if (client) {\n client.emit('applyFrameMetadata', event);\n }\n\n // Only put debug IDs onto frames for error events.\n if (event.type === undefined) {\n applyDebugIds(prepared, options.stackParser);\n }\n\n // If we have scope given to us, use it as the base for further modifications.\n // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n const finalScope = getFinalScope(scope, hint.captureContext);\n\n if (hint.mechanism) {\n addExceptionMechanism(prepared, hint.mechanism);\n }\n\n const clientEventProcessors = client ? client.getEventProcessors() : [];\n\n // This should be the last thing called, since we want that\n // {@link Scope.addEventProcessor} gets the finished prepared event.\n // Merge scope data together\n const data = getGlobalScope().getScopeData();\n\n if (isolationScope) {\n const isolationData = isolationScope.getScopeData();\n mergeScopeData(data, isolationData);\n }\n\n if (finalScope) {\n const finalScopeData = finalScope.getScopeData();\n mergeScopeData(data, finalScopeData);\n }\n\n const attachments = [...(hint.attachments || []), ...data.attachments];\n if (attachments.length) {\n hint.attachments = attachments;\n }\n\n applyScopeDataToEvent(prepared, data);\n\n const eventProcessors = [\n ...clientEventProcessors,\n // Run scope event processors _after_ all other processors\n ...data.eventProcessors,\n ];\n\n const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n return result.then(evt => {\n if (evt) {\n // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n // any new data\n applyDebugMeta(evt);\n }\n\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n }\n return evt;\n });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event, options) {\n const { environment, release, dist, maxValueLength = 250 } = options;\n\n if (!('environment' in event)) {\n event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n }\n\n if (event.release === undefined && release !== undefined) {\n event.release = release;\n }\n\n if (event.dist === undefined && dist !== undefined) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = truncate(event.message, maxValueLength);\n }\n\n const exception = event.exception && event.exception.values && event.exception.values[0];\n if (exception && exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n\n const request = event.request;\n if (request && request.url) {\n request.url = truncate(request.url, maxValueLength);\n }\n}\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nfunction applyDebugIds(event, stackParser) {\n // Build a map of filename -> debug_id\n const filenameDebugIdMap = getFilenameToDebugIdMap(stackParser);\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace.frames.forEach(frame => {\n if (frame.filename) {\n frame.debug_id = filenameDebugIdMap[frame.filename];\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nfunction applyDebugMeta(event) {\n // Extract debug IDs and filenames from the stack frames on the event.\n const filenameDebugIdMap = {};\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception.values.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace.frames.forEach(frame => {\n if (frame.debug_id) {\n if (frame.abs_path) {\n filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n } else if (frame.filename) {\n filenameDebugIdMap[frame.filename] = frame.debug_id;\n }\n delete frame.debug_id;\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n\n if (Object.keys(filenameDebugIdMap).length === 0) {\n return;\n }\n\n // Fill debug_meta information\n event.debug_meta = event.debug_meta || {};\n event.debug_meta.images = event.debug_meta.images || [];\n const images = event.debug_meta.images;\n Object.entries(filenameDebugIdMap).forEach(([filename, debug_id]) => {\n images.push({\n type: 'sourcemap',\n code_file: filename,\n debug_id,\n });\n });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event, integrationNames) {\n if (integrationNames.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event, depth, maxBreadth) {\n if (!event) {\n return null;\n }\n\n const normalized = {\n ...event,\n ...(event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(b => ({\n ...b,\n ...(b.data && {\n data: normalize(b.data, depth, maxBreadth),\n }),\n })),\n }),\n ...(event.user && {\n user: normalize(event.user, depth, maxBreadth),\n }),\n ...(event.contexts && {\n contexts: normalize(event.contexts, depth, maxBreadth),\n }),\n ...(event.extra && {\n extra: normalize(event.extra, depth, maxBreadth),\n }),\n };\n\n // event.contexts.trace stores information about a Transaction. Similarly,\n // event.spans[] stores information about child Spans. Given that a\n // Transaction is conceptually a Span, normalization should apply to both\n // Transactions and Spans consistently.\n // For now the decision is to skip normalization of Transactions and Spans,\n // so this block overwrites the normalized event to add back the original\n // Transaction information prior to normalization.\n if (event.contexts && event.contexts.trace && normalized.contexts) {\n normalized.contexts.trace = event.contexts.trace;\n\n // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n if (event.contexts.trace.data) {\n normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n }\n }\n\n // event.spans[].data may contain circular/dangerous data so we need to normalize it\n if (event.spans) {\n normalized.spans = event.spans.map(span => {\n return {\n ...span,\n ...(span.data && {\n data: normalize(span.data, depth, maxBreadth),\n }),\n };\n });\n }\n\n return normalized;\n}\n\nfunction getFinalScope(\n scope,\n captureContext,\n) {\n if (!captureContext) {\n return scope;\n }\n\n const finalScope = scope ? scope.clone() : new Scope();\n finalScope.update(captureContext);\n return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nfunction parseEventHintOrCaptureContext(\n hint,\n) {\n if (!hint) {\n return undefined;\n }\n\n // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n if (hintIsScopeOrFunction(hint)) {\n return { captureContext: hint };\n }\n\n if (hintIsScopeContext(hint)) {\n return {\n captureContext: hint,\n };\n }\n\n return hint;\n}\n\nfunction hintIsScopeOrFunction(\n hint,\n) {\n return hint instanceof Scope || typeof hint === 'function';\n}\n\nconst captureContextKeys = [\n 'user',\n 'level',\n 'extra',\n 'contexts',\n 'tags',\n 'fingerprint',\n 'requestSession',\n 'propagationContext',\n] ;\n\nfunction hintIsScopeContext(hint) {\n return Object.keys(hint).some(key => captureContextKeys.includes(key ));\n}\n\nexport { applyDebugIds, applyDebugMeta, parseEventHintOrCaptureContext, prepareEvent };\n//# sourceMappingURL=prepareEvent.js.map\n","import { logger, uuid4, timestampInSeconds, isThenable, GLOBAL_OBJ } from '@sentry/utils';\nimport { DEFAULT_ENVIRONMENT } from './constants.js';\nimport { getCurrentScope, getIsolationScope, getClient, withIsolationScope } from './currentScopes.js';\nimport { DEBUG_BUILD } from './debug-build.js';\nimport { makeSession, updateSession, closeSession } from './session.js';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent.js';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nfunction captureException(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n exception,\n hint,\n) {\n return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nfunction captureMessage(message, captureContext) {\n // This is necessary to provide explicit scopes upgrade, without changing the original\n // arity of the `captureMessage(message, level)` method.\n const level = typeof captureContext === 'string' ? captureContext : undefined;\n const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n return getCurrentScope().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nfunction captureEvent(event, hint) {\n return getCurrentScope().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction setContext(name, context) {\n getIsolationScope().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nfunction setExtras(extras) {\n getIsolationScope().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nfunction setExtra(key, extra) {\n getIsolationScope().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nfunction setTags(tags) {\n getIsolationScope().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nfunction setTag(key, value) {\n getIsolationScope().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nfunction setUser(user) {\n getIsolationScope().setUser(user);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nfunction lastEventId() {\n return getIsolationScope().lastEventId();\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction captureCheckIn(checkIn, upsertMonitorConfig) {\n const scope = getCurrentScope();\n const client = getClient();\n if (!client) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n } else if (!client.captureCheckIn) {\n DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n } else {\n return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n }\n\n return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nfunction withMonitor(\n monitorSlug,\n callback,\n upsertMonitorConfig,\n) {\n const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n const now = timestampInSeconds();\n\n function finishCheckIn(status) {\n captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n }\n\n return withIsolationScope(() => {\n let maybePromiseResult;\n try {\n maybePromiseResult = callback();\n } catch (e) {\n finishCheckIn('error');\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n Promise.resolve(maybePromiseResult).then(\n () => {\n finishCheckIn('ok');\n },\n e => {\n finishCheckIn('error');\n throw e;\n },\n );\n } else {\n finishCheckIn('ok');\n }\n\n return maybePromiseResult;\n });\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function flush(timeout) {\n const client = getClient();\n if (client) {\n return client.flush(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nasync function close(timeout) {\n const client = getClient();\n if (client) {\n return client.close(timeout);\n }\n DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nfunction isInitialized() {\n return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nfunction isEnabled() {\n const client = getClient();\n return !!client && client.getOptions().enabled !== false && !!client.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nfunction addEventProcessor(callback) {\n getIsolationScope().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nfunction startSession(context) {\n const client = getClient();\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n release,\n environment,\n user: currentScope.getUser() || isolationScope.getUser(),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n // End existing session if there's one\n const currentSession = isolationScope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n\n endSession();\n\n // Afterwards we set the new session on the scope\n isolationScope.setSession(session);\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession(session);\n\n return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nfunction endSession() {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session) {\n closeSession(session);\n }\n _sendSessionUpdate();\n\n // the session is over; take it off of the scope\n isolationScope.setSession();\n\n // TODO (v8): Remove this and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate() {\n const isolationScope = getIsolationScope();\n const currentScope = getCurrentScope();\n const client = getClient();\n // TODO (v8): Remove currentScope and only use the isolation scope(?).\n // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n const session = currentScope.getSession() || isolationScope.getSession();\n if (session && client) {\n client.captureSession(session);\n }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n * Defaults to `false`.\n */\nfunction captureSession(end = false) {\n // both send the update and pull the session from the scope\n if (end) {\n endSession();\n return;\n }\n\n // only send the update\n _sendSessionUpdate();\n}\n\nexport { addEventProcessor, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setContext, setExtra, setExtras, setTag, setTags, setUser, startSession, withMonitor };\n//# sourceMappingURL=exports.js.map\n"],"names":["DEBUG_BUILD","logger","States"],"mappings":"AACA,MAAM,iBAAiB,OAAO,UAAU;AASxC,SAAS,QAAQ,KAAK;AACpB,UAAQ,eAAe,KAAK,GAAG,GAAC;AAAA,IAC9B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO,aAAa,KAAK,KAAK;AAAA,EACpC;AACA;AAQA,SAAS,UAAU,KAAK,WAAW;AACjC,SAAO,eAAe,KAAK,GAAG,MAAM,WAAW,SAAS;AAC1D;AASA,SAAS,aAAa,KAAK;AACzB,SAAO,UAAU,KAAK,YAAY;AACpC;AASA,SAAS,WAAW,KAAK;AACvB,SAAO,UAAU,KAAK,UAAU;AAClC;AASA,SAAS,eAAe,KAAK;AAC3B,SAAO,UAAU,KAAK,cAAc;AACtC;AASA,SAAS,SAAS,KAAK;AACrB,SAAO,UAAU,KAAK,QAAQ;AAChC;AASA,SAAS,sBAAsB,KAAK;AAClC,SACE,OAAO,QAAQ,YACf,QAAQ,QACR,gCAAgC,OAChC,gCAAgC;AAEpC;AASA,SAAS,YAAY,KAAK;AACxB,SAAO,QAAQ,QAAQ,sBAAsB,GAAG,KAAM,OAAO,QAAQ,YAAY,OAAO,QAAQ;AAClG;AASA,SAAS,cAAc,KAAK;AAC1B,SAAO,UAAU,KAAK,QAAQ;AAChC;AASA,SAAS,QAAQ,KAAK;AACpB,SAAO,OAAO,UAAU,eAAe,aAAa,KAAK,KAAK;AAChE;AASA,SAAS,UAAU,KAAK;AACtB,SAAO,OAAO,YAAY,eAAe,aAAa,KAAK,OAAO;AACpE;AAiBA,SAAS,WAAW,KAAK;AAEvB,SAAO,QAAQ,OAAO,IAAI,QAAQ,OAAO,IAAI,SAAS,UAAU;AAClE;AASA,SAAS,iBAAiB,KAAK;AAC7B,SAAO,cAAc,GAAG,KAAK,iBAAiB,OAAO,oBAAoB,OAAO,qBAAqB;AACvG;AAUA,SAAS,aAAa,KAAK,MAAM;AAC/B,MAAI;AACF,WAAO,eAAe;AAAA,EACvB,SAAQ,IAAI;AACX,WAAO;AAAA,EACX;AACA;AAQA,SAAS,eAAe,KAAK;AAE3B,SAAO,CAAC,EAAE,OAAO,QAAQ,YAAY,QAAQ,SAAU,IAAM,WAAY,IAAM;AACjF;ACvLA,SAAS,SAAS,KAAK,MAAM,GAAG;AAC9B,MAAI,OAAO,QAAQ,YAAY,QAAQ,GAAG;AACxC,WAAO;AAAA,EACX;AACE,SAAO,IAAI,UAAU,MAAM,MAAM,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;AACvD;AAoDA,SAAS,SAAS,OAAO,WAAW;AAClC,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,WAAO;AAAA,EACX;AAEE,QAAM,SAAS,CAAE;AAEjB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,QAAQ,MAAM,CAAC;AACrB,QAAI;AAMF,UAAI,eAAe,KAAK,GAAG;AACzB,eAAO,KAAK,gBAAgB;AAAA,MACpC,OAAa;AACL,eAAO,KAAK,OAAO,KAAK,CAAC;AAAA,MACjC;AAAA,IACK,SAAQ,GAAG;AACV,aAAO,KAAK,8BAA8B;AAAA,IAChD;AAAA,EACA;AAEE,SAAO,OAAO,KAAK,SAAS;AAC9B;AC5FK,MAAC,cAAc;ACGf,MAAC,aAAa;AAanB,SAAS,mBAAmB,MAAM,SAAS,KAAK;AAC9C,QAAM,MAAc;AACpB,QAAM,aAAc,IAAI,aAAa,IAAI,cAAc,CAAA;AACvD,QAAM,mBAAoB,WAAW,WAAW,IAAI,WAAW,WAAW,KAAK;AAC/E,SAAO,iBAAiB,IAAI,MAAM,iBAAiB,IAAI,IAAI;AAC7D;AClBA,MAAM,SAAS;AAEf,MAAM,4BAA4B;AAQlC,SAAS,iBACP,MACA,UAAU,CAAE,GACZ;AACA,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACX;AAME,MAAI;AACF,QAAI,cAAc;AAClB,UAAM,sBAAsB;AAC5B,UAAM,MAAM,CAAE;AACd,QAAI,SAAS;AACb,QAAI,MAAM;AACV,UAAM,YAAY;AAClB,UAAM,YAAY,UAAU;AAC5B,QAAI;AACJ,UAAM,WAAW,MAAM,QAAQ,OAAO,IAAI,UAAU,QAAQ;AAC5D,UAAM,kBAAmB,CAAC,MAAM,QAAQ,OAAO,KAAK,QAAQ,mBAAoB;AAEhF,WAAO,eAAe,WAAW,qBAAqB;AACpD,gBAAU,qBAAqB,aAAa,QAAQ;AAKpD,UAAI,YAAY,UAAW,SAAS,KAAK,MAAM,IAAI,SAAS,YAAY,QAAQ,UAAU,iBAAkB;AAC1G;AAAA,MACR;AAEM,UAAI,KAAK,OAAO;AAEhB,aAAO,QAAQ;AACf,oBAAc,YAAY;AAAA,IAChC;AAEI,WAAO,IAAI,UAAU,KAAK,SAAS;AAAA,EACpC,SAAQ,KAAK;AACZ,WAAO;AAAA,EACX;AACA;AAOA,SAAS,qBAAqB,IAAI,UAAU;AAC1C,QAAM,OAAO;AAIb,QAAM,MAAM,CAAE;AAEd,MAAI,CAAC,QAAQ,CAAC,KAAK,SAAS;AAC1B,WAAO;AAAA,EACX;AAGE,MAAI,OAAO,aAAa;AAEtB,QAAI,gBAAgB,eAAe,KAAK,SAAS;AAC/C,UAAI,KAAK,QAAQ,iBAAiB,GAAG;AACnC,eAAO,KAAK,QAAQ,iBAAiB;AAAA,MAC7C;AACM,UAAI,KAAK,QAAQ,eAAe,GAAG;AACjC,eAAO,KAAK,QAAQ,eAAe;AAAA,MAC3C;AAAA,IACA;AAAA,EACA;AAEE,MAAI,KAAK,KAAK,QAAQ,YAAW,CAAE;AAGnC,QAAM,eACJ,YAAY,SAAS,SACjB,SAAS,OAAO,aAAW,KAAK,aAAa,OAAO,CAAC,EAAE,IAAI,aAAW,CAAC,SAAS,KAAK,aAAa,OAAO,CAAC,CAAC,IAC3G;AAEN,MAAI,gBAAgB,aAAa,QAAQ;AACvC,iBAAa,QAAQ,iBAAe;AAClC,UAAI,KAAK,IAAI,YAAY,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,IAAI;AAAA,IACxD,CAAK;AAAA,EACL,OAAS;AACL,QAAI,KAAK,IAAI;AACX,UAAI,KAAK,IAAI,KAAK,EAAE,EAAE;AAAA,IAC5B;AAEI,UAAM,YAAY,KAAK;AACvB,QAAI,aAAa,SAAS,SAAS,GAAG;AACpC,YAAM,UAAU,UAAU,MAAM,KAAK;AACrC,iBAAW,KAAK,SAAS;AACvB,YAAI,KAAK,IAAI,CAAC,EAAE;AAAA,MACxB;AAAA,IACA;AAAA,EACA;AACE,QAAM,eAAe,CAAC,cAAc,QAAQ,QAAQ,SAAS,KAAK;AAClE,aAAW,KAAK,cAAc;AAC5B,UAAM,OAAO,KAAK,aAAa,CAAC;AAChC,QAAI,MAAM;AACR,UAAI,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI;AAAA,IACjC;AAAA,EACA;AAEE,SAAO,IAAI,KAAK,EAAE;AACpB;AAKA,SAAS,kBAAkB;AACzB,MAAI;AACF,WAAO,OAAO,SAAS,SAAS;AAAA,EACjC,SAAQ,IAAI;AACX,WAAO;AAAA,EACX;AACA;AAiCA,SAAS,iBAAiB,MAAM;AAE9B,MAAI,CAAC,OAAO,aAAa;AACvB,WAAO;AAAA,EACX;AAEE,MAAI,cAAc;AAClB,QAAM,sBAAsB;AAC5B,WAAS,IAAI,GAAG,IAAI,qBAAqB,KAAK;AAC5C,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACb;AAEI,QAAI,uBAAuB,aAAa;AACtC,UAAI,YAAY,QAAQ,iBAAiB,GAAG;AAC1C,eAAO,YAAY,QAAQ,iBAAiB;AAAA,MACpD;AACM,UAAI,YAAY,QAAQ,eAAe,GAAG;AACxC,eAAO,YAAY,QAAQ,eAAe;AAAA,MAClD;AAAA,IACA;AAEI,kBAAc,YAAY;AAAA,EAC9B;AAEE,SAAO;AACT;AC3LK,MAACA,gBAAe,OAAO,qBAAqB,eAAe;ACDhE,MAAM,SAAS;AAEV,MAAC,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGK,MAAC,yBAEH,CAAA;AAUH,SAAS,eAAe,UAAU;AAChC,MAAI,EAAE,aAAa,aAAa;AAC9B,WAAO,SAAU;AAAA,EACrB;AAEE,QAAM,UAAU,WAAW;AAC3B,QAAM,eAAe,CAAE;AAEvB,QAAM,gBAAgB,OAAO,KAAK,sBAAsB;AAGxD,gBAAc,QAAQ,WAAS;AAC7B,UAAM,wBAAwB,uBAAuB,KAAK;AAC1D,iBAAa,KAAK,IAAI,QAAQ,KAAK;AACnC,YAAQ,KAAK,IAAI;AAAA,EACrB,CAAG;AAED,MAAI;AACF,WAAO,SAAU;AAAA,EACrB,UAAY;AAER,kBAAc,QAAQ,WAAS;AAC7B,cAAQ,KAAK,IAAI,aAAa,KAAK;AAAA,IACzC,CAAK;AAAA,EACL;AACA;AAEA,SAAS,aAAa;AACpB,MAAI,UAAU;AACd,QAAMC,UAAS;AAAA,IACb,QAAQ,MAAM;AACZ,gBAAU;AAAA,IACX;AAAA,IACD,SAAS,MAAM;AACb,gBAAU;AAAA,IACX;AAAA,IACD,WAAW,MAAM;AAAA,EAClB;AAED,MAAID,eAAa;AACf,mBAAe,QAAQ,UAAQ;AAE7B,MAAAC,QAAO,IAAI,IAAI,IAAI,SAAS;AAC1B,YAAI,SAAS;AACX,yBAAe,MAAM;AACnB,uBAAW,QAAQ,IAAI,EAAE,GAAG,MAAM,IAAI,IAAI,MAAM,GAAG,IAAI;AAAA,UACnE,CAAW;AAAA,QACX;AAAA,MACO;AAAA,IACP,CAAK;AAAA,EACL,OAAS;AACL,mBAAe,QAAQ,UAAQ;AAC7B,MAAAA,QAAO,IAAI,IAAI,MAAM;AAAA,IAC3B,CAAK;AAAA,EACL;AAEE,SAAOA;AACT;AAMK,MAAC,SAAS,mBAAmB,UAAU,UAAU;AC3EtD,SAAS,KAAK,QAAQ,MAAM,oBAAoB;AAC9C,MAAI,EAAE,QAAQ,SAAS;AACrB;AAAA,EACJ;AAEE,QAAM,WAAW,OAAO,IAAI;AAC5B,QAAM,UAAU,mBAAmB,QAAQ;AAI3C,MAAI,OAAO,YAAY,YAAY;AACjC,wBAAoB,SAAS,QAAQ;AAAA,EACzC;AAEE,SAAO,IAAI,IAAI;AACjB;AASA,SAAS,yBAAyB,KAAK,MAAM,OAAO;AAClD,MAAI;AACF,WAAO,eAAe,KAAK,MAAM;AAAA;AAAA,MAE/B;AAAA,MACA,UAAU;AAAA,MACV,cAAc;AAAA,IACpB,CAAK;AAAA,EACF,SAAQ,KAAK;AACZD,qBAAe,OAAO,IAAI,0CAA0C,IAAI,eAAe,GAAG;AAAA,EAC9F;AACA;AASA,SAAS,oBAAoB,SAAS,UAAU;AAC9C,MAAI;AACF,UAAM,QAAQ,SAAS,aAAa,CAAE;AACtC,YAAQ,YAAY,SAAS,YAAY;AACzC,6BAAyB,SAAS,uBAAuB,QAAQ;AAAA,EACrE,SAAW,KAAK;AAAA,EAAE;AAClB;AASA,SAAS,oBAAoB,MAAM;AACjC,SAAO,KAAK;AACd;AAQA,SAAS,UAAU,QAAQ;AACzB,SAAO,OAAO,KAAK,MAAM,EACtB,IAAI,SAAO,GAAG,mBAAmB,GAAG,CAAC,IAAI,mBAAmB,OAAO,GAAG,CAAC,CAAC,EAAE,EAC1E,KAAK,GAAG;AACb;AAUA,SAAS,qBACP,OAGD;AACC,MAAI,QAAQ,KAAK,GAAG;AAClB,WAAO;AAAA,MACL,SAAS,MAAM;AAAA,MACf,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,GAAG,iBAAiB,KAAK;AAAA,IAC1B;AAAA,EACL,WAAa,QAAQ,KAAK,GAAG;AACzB,UAAM,SAEP;AAAA,MACG,MAAM,MAAM;AAAA,MACZ,QAAQ,qBAAqB,MAAM,MAAM;AAAA,MACzC,eAAe,qBAAqB,MAAM,aAAa;AAAA,MACvD,GAAG,iBAAiB,KAAK;AAAA,IAC1B;AAED,QAAI,OAAO,gBAAgB,eAAe,aAAa,OAAO,WAAW,GAAG;AAC1E,aAAO,SAAS,MAAM;AAAA,IAC5B;AAEI,WAAO;AAAA,EACX,OAAS;AACL,WAAO;AAAA,EACX;AACA;AAGA,SAAS,qBAAqB,QAAQ;AACpC,MAAI;AACF,WAAO,UAAU,MAAM,IAAI,iBAAiB,MAAM,IAAI,OAAO,UAAU,SAAS,KAAK,MAAM;AAAA,EAC5F,SAAQ,KAAK;AACZ,WAAO;AAAA,EACX;AACA;AAGA,SAAS,iBAAiB,KAAK;AAC7B,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,UAAM,iBAAiB,CAAE;AACzB,eAAW,YAAY,KAAK;AAC1B,UAAI,OAAO,UAAU,eAAe,KAAK,KAAK,QAAQ,GAAG;AACvD,uBAAe,QAAQ,IAAK,IAAM,QAAQ;AAAA,MAClD;AAAA,IACA;AACI,WAAO;AAAA,EACX,OAAS;AACL,WAAO,CAAE;AAAA,EACb;AACA;AAOA,SAAS,+BAA+B,WAAW,YAAY,IAAI;AACjE,QAAM,OAAO,OAAO,KAAK,qBAAqB,SAAS,CAAC;AACxD,OAAK,KAAM;AAEX,QAAM,WAAW,KAAK,CAAC;AAEvB,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACX;AAEE,MAAI,SAAS,UAAU,WAAW;AAChC,WAAO,SAAS,UAAU,SAAS;AAAA,EACvC;AAEE,WAAS,eAAe,KAAK,QAAQ,eAAe,GAAG,gBAAgB;AACrE,UAAM,aAAa,KAAK,MAAM,GAAG,YAAY,EAAE,KAAK,IAAI;AACxD,QAAI,WAAW,SAAS,WAAW;AACjC;AAAA,IACN;AACI,QAAI,iBAAiB,KAAK,QAAQ;AAChC,aAAO;AAAA,IACb;AACI,WAAO,SAAS,YAAY,SAAS;AAAA,EACzC;AAEE,SAAO;AACT;AAQA,SAAS,kBAAkB,YAAY;AAIrC,QAAM,iBAAiB,oBAAI,IAAK;AAGhC,SAAO,mBAAmB,YAAY,cAAc;AACtD;AAEA,SAAS,mBAAmB,YAAY,gBAAgB;AACtD,MAAI,OAAO,UAAU,GAAG;AAEtB,UAAM,UAAU,eAAe,IAAI,UAAU;AAC7C,QAAI,YAAY,QAAW;AACzB,aAAO;AAAA,IACb;AAEI,UAAM,cAAc,CAAE;AAEtB,mBAAe,IAAI,YAAY,WAAW;AAE1C,eAAW,OAAO,OAAO,oBAAoB,UAAU,GAAG;AACxD,UAAI,OAAO,WAAW,GAAG,MAAM,aAAa;AAC1C,oBAAY,GAAG,IAAI,mBAAmB,WAAW,GAAG,GAAG,cAAc;AAAA,MAC7E;AAAA,IACA;AAEI,WAAO;AAAA,EACX;AAEE,MAAI,MAAM,QAAQ,UAAU,GAAG;AAE7B,UAAM,UAAU,eAAe,IAAI,UAAU;AAC7C,QAAI,YAAY,QAAW;AACzB,aAAO;AAAA,IACb;AAEI,UAAM,cAAc,CAAE;AAEtB,mBAAe,IAAI,YAAY,WAAW;AAE1C,eAAW,QAAQ,CAAC,SAAS;AAC3B,kBAAY,KAAK,mBAAmB,MAAM,cAAc,CAAC;AAAA,IAC/D,CAAK;AAED,WAAO;AAAA,EACX;AAEE,SAAO;AACT;AAEA,SAAS,OAAO,OAAO;AACrB,MAAI,CAAC,cAAc,KAAK,GAAG;AACzB,WAAO;AAAA,EACX;AAEE,MAAI;AACF,UAAM,OAAQ,OAAO,eAAe,KAAK,EAAI,YAAY;AACzD,WAAO,CAAC,QAAQ,SAAS;AAAA,EAC1B,SAAQ,GAAG;AACV,WAAO;AAAA,EACX;AACA;AClQA,MAAM,yBAAyB;AAC1B,MAAC,mBAAmB;AAEzB,MAAM,uBAAuB;AAC7B,MAAM,qBAAqB;AAS3B,SAAS,qBAAqB,SAAS;AACrC,QAAM,gBAAgB,QAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,OAAK,EAAE,CAAC,CAAC;AAEvE,SAAO,CAAC,OAAO,iBAAiB,GAAG,cAAc,MAAM;AACrD,UAAM,SAAS,CAAE;AACjB,UAAM,QAAQ,MAAM,MAAM,IAAI;AAE9B,aAAS,IAAI,gBAAgB,IAAI,MAAM,QAAQ,KAAK;AAClD,YAAM,OAAO,MAAM,CAAC;AAKpB,UAAI,KAAK,SAAS,MAAM;AACtB;AAAA,MACR;AAIM,YAAM,cAAc,qBAAqB,KAAK,IAAI,IAAI,KAAK,QAAQ,sBAAsB,IAAI,IAAI;AAIjG,UAAI,YAAY,MAAM,YAAY,GAAG;AACnC;AAAA,MACR;AAEM,iBAAW,UAAU,eAAe;AAClC,cAAM,QAAQ,OAAO,WAAW;AAEhC,YAAI,OAAO;AACT,iBAAO,KAAK,KAAK;AACjB;AAAA,QACV;AAAA,MACA;AAEM,UAAI,OAAO,UAAU,yBAAyB,aAAa;AACzD;AAAA,MACR;AAAA,IACA;AAEI,WAAO,4BAA4B,OAAO,MAAM,WAAW,CAAC;AAAA,EAC7D;AACH;AAqBA,SAAS,4BAA4B,OAAO;AAC1C,MAAI,CAAC,MAAM,QAAQ;AACjB,WAAO,CAAE;AAAA,EACb;AAEE,QAAM,aAAa,MAAM,KAAK,KAAK;AAGnC,MAAI,gBAAgB,KAAK,kBAAkB,UAAU,EAAE,YAAY,EAAE,GAAG;AACtE,eAAW,IAAK;AAAA,EACpB;AAGE,aAAW,QAAS;AAGpB,MAAI,mBAAmB,KAAK,kBAAkB,UAAU,EAAE,YAAY,EAAE,GAAG;AACzE,eAAW,IAAK;AAUhB,QAAI,mBAAmB,KAAK,kBAAkB,UAAU,EAAE,YAAY,EAAE,GAAG;AACzE,iBAAW,IAAK;AAAA,IACtB;AAAA,EACA;AAEE,SAAO,WAAW,MAAM,GAAG,sBAAsB,EAAE,IAAI,YAAU;AAAA,IAC/D,GAAG;AAAA,IACH,UAAU,MAAM,YAAY,kBAAkB,UAAU,EAAE;AAAA,IAC1D,UAAU,MAAM,YAAY;AAAA,EAChC,EAAI;AACJ;AAEA,SAAS,kBAAkB,KAAK;AAC9B,SAAO,IAAI,IAAI,SAAS,CAAC,KAAK,CAAE;AAClC;AAEA,MAAM,sBAAsB;AAK5B,SAAS,gBAAgB,IAAI;AAC3B,MAAI;AACF,QAAI,CAAC,MAAM,OAAO,OAAO,YAAY;AACnC,aAAO;AAAA,IACb;AACI,WAAO,GAAG,QAAQ;AAAA,EACnB,SAAQ,GAAG;AAGV,WAAO;AAAA,EACX;AACA;AAKA,SAAS,mBAAmB,OAAO;AACjC,QAAM,YAAY,MAAM;AAExB,MAAI,WAAW;AACb,UAAM,SAAS,CAAE;AACjB,QAAI;AAEF,gBAAU,OAAO,QAAQ,WAAS;AAEhC,YAAI,MAAM,WAAW,QAAQ;AAE3B,iBAAO,KAAK,GAAG,MAAM,WAAW,MAAM;AAAA,QAChD;AAAA,MACA,CAAO;AACD,aAAO;AAAA,IACR,SAAQ,KAAK;AACZ,aAAO;AAAA,IACb;AAAA,EACA;AACE,SAAO;AACT;AC/JA,MAAM,mBAAmB;AAYzB,SAAS,yBAAyB;AAChC,SAAO,KAAK,IAAG,IAAK;AACtB;AAQA,SAAS,mCAAmC;AAC1C,QAAM,EAAE,YAAW,IAAK;AACxB,MAAI,CAAC,eAAe,CAAC,YAAY,KAAK;AACpC,WAAO;AAAA,EACX;AAIE,QAAM,2BAA2B,KAAK,IAAG,IAAK,YAAY,IAAK;AAC/D,QAAM,aAAa,YAAY,cAAc,SAAY,2BAA2B,YAAY;AAWhG,SAAO,MAAM;AACX,YAAQ,aAAa,YAAY,IAAK,KAAI;AAAA,EAC3C;AACH;AAWK,MAAC,qBAAqB,iCAAgC;AAAA,CAWrB,MAAM;AAK1C,QAAM,EAAE,YAAW,IAAK;AACxB,MAAI,CAAC,eAAe,CAAC,YAAY,KAAK;AAEpC,WAAO;AAAA,EACX;AAEE,QAAM,YAAY,OAAO;AACzB,QAAM,iBAAiB,YAAY,IAAK;AACxC,QAAM,UAAU,KAAK,IAAK;AAG1B,QAAM,kBAAkB,YAAY,aAChC,KAAK,IAAI,YAAY,aAAa,iBAAiB,OAAO,IAC1D;AACJ,QAAM,uBAAuB,kBAAkB;AAQ/C,QAAM,kBAAkB,YAAY,UAAU,YAAY,OAAO;AACjE,QAAM,qBAAqB,OAAO,oBAAoB;AAEtD,QAAM,uBAAuB,qBAAqB,KAAK,IAAI,kBAAkB,iBAAiB,OAAO,IAAI;AACzG,QAAM,4BAA4B,uBAAuB;AAEzD,MAAI,wBAAwB,2BAA2B;AAErD,QAAI,mBAAmB,sBAAsB;AAE3C,aAAO,YAAY;AAAA,IACzB,OAAW;AAEL,aAAO;AAAA,IACb;AAAA,EACA;AAIE,SAAO;AACT,GAAC;AC9GD,SAAS,cAAc;AACrB,QAAM,aAAa,OAAO,YAAY;AACtC,QAAM,QAAQ,aAAa,oBAAI,QAAS,IAAG,CAAE;AAC7C,WAAS,QAAQ,KAAK;AACpB,QAAI,YAAY;AACd,UAAI,MAAM,IAAI,GAAG,GAAG;AAClB,eAAO;AAAA,MACf;AACM,YAAM,IAAI,GAAG;AACb,aAAO;AAAA,IACb;AAEI,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,QAAQ,MAAM,CAAC;AACrB,UAAI,UAAU,KAAK;AACjB,eAAO;AAAA,MACf;AAAA,IACA;AACI,UAAM,KAAK,GAAG;AACd,WAAO;AAAA,EACX;AAEE,WAAS,UAAU,KAAK;AACtB,QAAI,YAAY;AACd,YAAM,OAAO,GAAG;AAAA,IACtB,OAAW;AACL,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAI,MAAM,CAAC,MAAM,KAAK;AACpB,gBAAM,OAAO,GAAG,CAAC;AACjB;AAAA,QACV;AAAA,MACA;AAAA,IACA;AAAA,EACA;AACE,SAAO,CAAC,SAAS,SAAS;AAC5B;AChCA,SAAS,QAAQ;AACf,QAAM,MAAM;AACZ,QAAM,SAAS,IAAI,UAAU,IAAI;AAEjC,MAAI,gBAAgB,MAAM,KAAK,OAAQ,IAAG;AAC1C,MAAI;AACF,QAAI,UAAU,OAAO,YAAY;AAC/B,aAAO,OAAO,WAAU,EAAG,QAAQ,MAAM,EAAE;AAAA,IACjD;AACI,QAAI,UAAU,OAAO,iBAAiB;AACpC,sBAAgB,MAAM;AAKpB,cAAM,aAAa,IAAI,WAAW,CAAC;AACnC,eAAO,gBAAgB,UAAU;AAEjC,eAAO,WAAW,CAAC;AAAA,MACpB;AAAA,IACP;AAAA,EACG,SAAQ,GAAG;AAAA,EAGd;AAIE,UAAS,yBAA4B,MAAM;AAAA,IAAQ;AAAA,IAAU;AAAA;AAAA,OAEzD,KAAQ,cAAa,IAAK,OAAS,IAAM,GAAK,SAAS,EAAE;AAAA;AAAA,EAC5D;AACH;AAEA,SAAS,kBAAkB,OAAO;AAChC,SAAO,MAAM,aAAa,MAAM,UAAU,SAAS,MAAM,UAAU,OAAO,CAAC,IAAI;AACjF;AAMA,SAAS,oBAAoB,OAAO;AAClC,QAAM,EAAE,SAAS,UAAU,QAAS,IAAG;AACvC,MAAI,SAAS;AACX,WAAO;AAAA,EACX;AAEE,QAAM,iBAAiB,kBAAkB,KAAK;AAC9C,MAAI,gBAAgB;AAClB,QAAI,eAAe,QAAQ,eAAe,OAAO;AAC/C,aAAO,GAAG,eAAe,IAAI,KAAK,eAAe,KAAK;AAAA,IAC5D;AACI,WAAO,eAAe,QAAQ,eAAe,SAAS,WAAW;AAAA,EACrE;AACE,SAAO,WAAW;AACpB;AASA,SAAS,sBAAsB,OAAO,OAAO,MAAM;AACjD,QAAM,YAAa,MAAM,YAAY,MAAM,aAAa,CAAA;AACxD,QAAM,SAAU,UAAU,SAAS,UAAU,UAAU,CAAA;AACvD,QAAM,iBAAkB,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK;AACjD,MAAI,CAAC,eAAe,OAAO;AACzB,mBAAe,QAAQ,SAAS;AAAA,EACpC;AACE,MAAI,CAAC,eAAe,MAAM;AACxB,mBAAe,OAAe;AAAA,EAClC;AACA;AASA,SAAS,sBAAsB,OAAO,cAAc;AAClD,QAAM,iBAAiB,kBAAkB,KAAK;AAC9C,MAAI,CAAC,gBAAgB;AACnB;AAAA,EACJ;AAEE,QAAM,mBAAmB,EAAE,MAAM,WAAW,SAAS,KAAM;AAC3D,QAAM,mBAAmB,eAAe;AACxC,iBAAe,YAAY,EAAE,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,aAAc;AAExF,MAAI,gBAAgB,UAAU,cAAc;AAC1C,UAAM,aAAa,EAAE,GAAI,oBAAoB,iBAAiB,MAAO,GAAG,aAAa,KAAM;AAC3F,mBAAe,UAAU,OAAO;AAAA,EACpC;AACA;AAoFA,SAAS,wBAAwB,WAAW;AAE1C,MAAI,aAAc,UAAY,qBAAqB;AACjD,WAAO;AAAA,EACX;AAEE,MAAI;AAGF,6BAAyB,WAAY,uBAAuB,IAAI;AAAA,EACjE,SAAQ,KAAK;AAAA,EAEhB;AAEE,SAAO;AACT;AAQA,SAAS,SAAS,YAAY;AAC5B,SAAO,MAAM,QAAQ,UAAU,IAAI,aAAa,CAAC,UAAU;AAC7D;ACxNA,MAAM,SAAS,cAAc,UAAU;ACyBvC,SAAS,UAAU,OAAO,QAAQ,KAAK,gBAAgB,UAAW;AAChE,MAAI;AAEF,WAAO,MAAM,IAAI,OAAO,OAAO,aAAa;AAAA,EAC7C,SAAQ,KAAK;AACZ,WAAO,EAAE,OAAO,yBAAyB,GAAG,IAAK;AAAA,EACrD;AACA;AAGA,SAAS,gBAEP,QAEA,QAAQ,GAER,UAAU,MAAM,MAChB;AACA,QAAM,aAAa,UAAU,QAAQ,KAAK;AAE1C,MAAI,SAAS,UAAU,IAAI,SAAS;AAClC,WAAO,gBAAgB,QAAQ,QAAQ,GAAG,OAAO;AAAA,EACrD;AAEE,SAAO;AACT;AAWA,SAAS,MACP,KACA,OACA,QAAQ,UACR,gBAAgB,UAChB,OAAO,YAAa,GACpB;AACA,QAAM,CAAC,SAAS,SAAS,IAAI;AAG7B,MACE,SAAS;AAAA,EACT,CAAC,WAAW,QAAQ,EAAE,SAAS,OAAO,KAAK,KAC1C,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,GACnD;AACA,WAAO;AAAA,EACX;AAEE,QAAM,cAAc,eAAe,KAAK,KAAK;AAI7C,MAAI,CAAC,YAAY,WAAW,UAAU,GAAG;AACvC,WAAO;AAAA,EACX;AAOE,MAAK,MAAQ,+BAA+B,GAAG;AAC7C,WAAO;AAAA,EACX;AAKE,QAAM,iBACJ,OAAQ,MAAQ,yCAAyC,MAAM,WACzD,MAAQ,yCAAyC,IACnD;AAGN,MAAI,mBAAmB,GAAG;AAExB,WAAO,YAAY,QAAQ,WAAW,EAAE;AAAA,EAC5C;AAGE,MAAI,QAAQ,KAAK,GAAG;AAClB,WAAO;AAAA,EACX;AAGE,QAAM,kBAAkB;AACxB,MAAI,mBAAmB,OAAO,gBAAgB,WAAW,YAAY;AACnE,QAAI;AACF,YAAM,YAAY,gBAAgB,OAAQ;AAE1C,aAAO,MAAM,IAAI,WAAW,iBAAiB,GAAG,eAAe,IAAI;AAAA,IACpE,SAAQ,KAAK;AAAA,IAElB;AAAA,EACA;AAKE,QAAM,aAAc,MAAM,QAAQ,KAAK,IAAI,CAAE,IAAG;AAChD,MAAI,WAAW;AAIf,QAAM,YAAY,qBAAqB,KAAO;AAE9C,aAAW,YAAY,WAAW;AAEhC,QAAI,CAAC,OAAO,UAAU,eAAe,KAAK,WAAW,QAAQ,GAAG;AAC9D;AAAA,IACN;AAEI,QAAI,YAAY,eAAe;AAC7B,iBAAW,QAAQ,IAAI;AACvB;AAAA,IACN;AAGI,UAAM,aAAa,UAAU,QAAQ;AACrC,eAAW,QAAQ,IAAI,MAAM,UAAU,YAAY,iBAAiB,GAAG,eAAe,IAAI;AAE1F;AAAA,EACJ;AAGE,YAAU,KAAK;AAGf,SAAO;AACT;AAYA,SAAS,eACP,KAGA,OACA;AACA,MAAI;AACF,QAAI,QAAQ,YAAY,SAAS,OAAO,UAAU,YAAa,MAAQ,SAAS;AAC9E,aAAO;AAAA,IACb;AAEI,QAAI,QAAQ,iBAAiB;AAC3B,aAAO;AAAA,IACb;AAKI,QAAI,OAAO,WAAW,eAAe,UAAU,QAAQ;AACrD,aAAO;AAAA,IACb;AAGI,QAAI,OAAO,WAAW,eAAe,UAAU,QAAQ;AACrD,aAAO;AAAA,IACb;AAGI,QAAI,OAAO,aAAa,eAAe,UAAU,UAAU;AACzD,aAAO;AAAA,IACb;AAEI,QAAI,eAAe,KAAK,GAAG;AACzB,aAAO;AAAA,IACb;AAGI,QAAI,iBAAiB,KAAK,GAAG;AAC3B,aAAO;AAAA,IACb;AAEI,QAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,GAAG;AACxD,aAAO,IAAI,KAAK;AAAA,IACtB;AAEI,QAAI,OAAO,UAAU,YAAY;AAC/B,aAAO,cAAc,gBAAgB,KAAK,CAAC;AAAA,IACjD;AAEI,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,IAAI,OAAO,KAAK,CAAC;AAAA,IAC9B;AAGI,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,YAAY,OAAO,KAAK,CAAC;AAAA,IACtC;AAMI,UAAM,UAAU,mBAAmB,KAAK;AAGxC,QAAI,qBAAqB,KAAK,OAAO,GAAG;AACtC,aAAO,iBAAiB,OAAO;AAAA,IACrC;AAEI,WAAO,WAAW,OAAO;AAAA,EAC1B,SAAQ,KAAK;AACZ,WAAO,yBAAyB,GAAG;AAAA,EACvC;AACA;AAGA,SAAS,mBAAmB,OAAO;AACjC,QAAM,YAAY,OAAO,eAAe,KAAK;AAE7C,SAAO,YAAY,UAAU,YAAY,OAAO;AAClD;AAGA,SAAS,WAAW,OAAO;AAEzB,SAAO,CAAC,CAAC,UAAU,KAAK,EAAE,MAAM,OAAO,EAAE;AAC3C;AAIA,SAAS,SAAS,OAAO;AACvB,SAAO,WAAW,KAAK,UAAU,KAAK,CAAC;AACzC;AClQA,IAAI;AAAA,CAAS,SAAUE,SAAQ;AAE7B,QAAM,UAAU;AAAG,EAAAA,QAAOA,QAAO,SAAS,IAAI,OAAO,IAAI;AAEzD,QAAM,WAAW;AAAG,EAAAA,QAAOA,QAAO,UAAU,IAAI,QAAQ,IAAI;AAE5D,QAAM,WAAW;AAAG,EAAAA,QAAOA,QAAO,UAAU,IAAI,QAAQ,IAAI;AAC9D,GAAG,WAAW,SAAS,CAAA,EAAG;AAU1B,SAAS,oBAAoB,OAAO;AAClC,SAAO,IAAI,YAAY,aAAW;AAChC,YAAQ,KAAK;AAAA,EACjB,CAAG;AACH;AAQA,SAAS,oBAAoB,QAAQ;AACnC,SAAO,IAAI,YAAY,CAAC,GAAG,WAAW;AACpC,WAAO,MAAM;AAAA,EACjB,CAAG;AACH;AAMA,MAAM,YAAY;AAAA,EAEf,YACC,UACA;AAAC,gBAAY,UAAU,OAAO,KAAK,IAAI;AAAE,gBAAY,UAAU,QAAQ,KAAK,IAAI;AAAE,gBAAY,UAAU,QAAQ,KAAK,IAAI;AAAE,gBAAY,UAAU,QAAQ,KAAK,IAAI;AAClK,SAAK,SAAS,OAAO;AACrB,SAAK,YAAY,CAAE;AAEnB,QAAI;AACF,eAAS,KAAK,UAAU,KAAK,OAAO;AAAA,IACrC,SAAQ,GAAG;AACV,WAAK,QAAQ,CAAC;AAAA,IACpB;AAAA,EACA;AAAA;AAAA,EAGG,KACC,aACA,YACA;AACA,WAAO,IAAI,YAAY,CAAC,SAAS,WAAW;AAC1C,WAAK,UAAU,KAAK;AAAA,QAClB;AAAA,QACA,YAAU;AACR,cAAI,CAAC,aAAa;AAGhB,oBAAQ,MAAQ;AAAA,UAC5B,OAAiB;AACL,gBAAI;AACF,sBAAQ,YAAY,MAAM,CAAC;AAAA,YAC5B,SAAQ,GAAG;AACV,qBAAO,CAAC;AAAA,YACtB;AAAA,UACA;AAAA,QACS;AAAA,QACD,YAAU;AACR,cAAI,CAAC,YAAY;AACf,mBAAO,MAAM;AAAA,UACzB,OAAiB;AACL,gBAAI;AACF,sBAAQ,WAAW,MAAM,CAAC;AAAA,YAC3B,SAAQ,GAAG;AACV,qBAAO,CAAC;AAAA,YACtB;AAAA,UACA;AAAA,QACS;AAAA,MACT,CAAO;AACD,WAAK,iBAAkB;AAAA,IAC7B,CAAK;AAAA,EACL;AAAA;AAAA,EAGG,MACC,YACA;AACA,WAAO,KAAK,KAAK,SAAO,KAAK,UAAU;AAAA,EAC3C;AAAA;AAAA,EAGG,QAAQ,WAAW;AAClB,WAAO,IAAI,YAAY,CAAC,SAAS,WAAW;AAC1C,UAAI;AACJ,UAAI;AAEJ,aAAO,KAAK;AAAA,QACV,WAAS;AACP,uBAAa;AACb,gBAAM;AACN,cAAI,WAAW;AACb,sBAAW;AAAA,UACvB;AAAA,QACS;AAAA,QACD,YAAU;AACR,uBAAa;AACb,gBAAM;AACN,cAAI,WAAW;AACb,sBAAW;AAAA,UACvB;AAAA,QACS;AAAA,MACF,EAAC,KAAK,MAAM;AACX,YAAI,YAAY;AACd,iBAAO,GAAG;AACV;AAAA,QACV;AAEQ,gBAAQ,GAAK;AAAA,MACrB,CAAO;AAAA,IACP,CAAK;AAAA,EACL;AAAA;AAAA,EAGI,SAAS;AAAC,SAAK,WAAW,CAAC,UAAU;AACrC,WAAK,WAAW,OAAO,UAAU,KAAK;AAAA,IAC1C;AAAA,EAAI;AAAA;AAAA,EAGA,UAAU;AAAC,SAAK,UAAU,CAAC,WAAW;AACtC,WAAK,WAAW,OAAO,UAAU,MAAM;AAAA,IAC3C;AAAA,EAAI;AAAA;AAAA,EAGA,UAAU;AAAC,SAAK,aAAa,CAAC,OAAO,UAAU;AAC/C,UAAI,KAAK,WAAW,OAAO,SAAS;AAClC;AAAA,MACN;AAEI,UAAI,WAAW,KAAK,GAAG;AACrB,aAAM,MAAQ,KAAK,KAAK,UAAU,KAAK,OAAO;AAC9C;AAAA,MACN;AAEI,WAAK,SAAS;AACd,WAAK,SAAS;AAEd,WAAK,iBAAkB;AAAA,IAC3B;AAAA,EAAI;AAAA;AAAA,EAGA,UAAU;AAAC,SAAK,mBAAmB,MAAM;AACzC,UAAI,KAAK,WAAW,OAAO,SAAS;AAClC;AAAA,MACN;AAEI,YAAM,iBAAiB,KAAK,UAAU,MAAO;AAC7C,WAAK,YAAY,CAAE;AAEnB,qBAAe,QAAQ,aAAW;AAChC,YAAI,QAAQ,CAAC,GAAG;AACd;AAAA,QACR;AAEM,YAAI,KAAK,WAAW,OAAO,UAAU;AACnC,kBAAQ,CAAC,EAAE,KAAK,MAAQ;AAAA,QAChC;AAEM,YAAI,KAAK,WAAW,OAAO,UAAU;AACnC,kBAAQ,CAAC,EAAE,KAAK,MAAM;AAAA,QAC9B;AAEM,gBAAQ,CAAC,IAAI;AAAA,MACnB,CAAK;AAAA,IACL;AAAA,EAAI;AACJ;ACtLA,MAAM,4BAA4B;AAElC,MAAM,kCAAkC;AAgBxC,SAAS,sCAEP,eACA;AACA,QAAM,gBAAgB,mBAAmB,aAAa;AAEtD,MAAI,CAAC,eAAe;AAClB,WAAO;AAAA,EACX;AAGE,QAAM,yBAAyB,OAAO,QAAQ,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACzF,QAAI,IAAI,MAAM,+BAA+B,GAAG;AAC9C,YAAM,iBAAiB,IAAI,MAAM,0BAA0B,MAAM;AACjE,UAAI,cAAc,IAAI;AAAA,IAC5B;AACI,WAAO;AAAA,EACR,GAAE,EAAE;AAIL,MAAI,OAAO,KAAK,sBAAsB,EAAE,SAAS,GAAG;AAClD,WAAO;AAAA,EACX,OAAS;AACL,WAAO;AAAA,EACX;AACA;AAoCA,SAAS,mBACP,eACA;AACA,MAAI,CAAC,iBAAkB,CAAC,SAAS,aAAa,KAAK,CAAC,MAAM,QAAQ,aAAa,GAAI;AACjF,WAAO;AAAA,EACX;AAEE,MAAI,MAAM,QAAQ,aAAa,GAAG;AAEhC,WAAO,cAAc,OAAO,CAAC,KAAK,SAAS;AACzC,YAAM,oBAAoB,sBAAsB,IAAI;AACpD,aAAO,QAAQ,iBAAiB,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC1D,YAAI,GAAG,IAAI;AAAA,MACnB,CAAO;AACD,aAAO;AAAA,IACR,GAAE,EAAE;AAAA,EACT;AAEE,SAAO,sBAAsB,aAAa;AAC5C;AAQA,SAAS,sBAAsB,eAAe;AAC5C,SAAO,cACJ,MAAM,GAAG,EACT,IAAI,kBAAgB,aAAa,MAAM,GAAG,EAAE,IAAI,gBAAc,mBAAmB,WAAW,KAAM,CAAA,CAAC,CAAC,EACpG,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AAC7B,QAAI,OAAO,OAAO;AAChB,UAAI,GAAG,IAAI;AAAA,IACnB;AACM,WAAO;AAAA,EACR,GAAE,EAAE;AACT;ACtHA,SAAS,6BAA6B;AACpC,SAAO;AAAA,IACL,SAAS,MAAO;AAAA,IAChB,QAAQ,MAAK,EAAG,UAAU,EAAE;AAAA,EAC7B;AACH;ACRA,MAAM,0BAA0B,oBAAI,QAAS;AAK7C,SAAS,wBAAwB,aAAa;AAC5C,QAAM,aAAa,WAAW;AAC9B,MAAI,CAAC,YAAY;AACf,WAAO,CAAE;AAAA,EACb;AAEE,MAAI;AACJ,QAAM,+BAA+B,wBAAwB,IAAI,WAAW;AAC5E,MAAI,8BAA8B;AAChC,8BAA0B;AAAA,EAC9B,OAAS;AACL,8BAA0B,oBAAI,IAAK;AACnC,4BAAwB,IAAI,aAAa,uBAAuB;AAAA,EACpE;AAGE,SAAO,OAAO,KAAK,UAAU,EAAE,OAAO,CAAC,KAAK,sBAAsB;AAChE,QAAI;AAEJ,UAAM,oBAAoB,wBAAwB,IAAI,iBAAiB;AACvE,QAAI,mBAAmB;AACrB,oBAAc;AAAA,IACpB,OAAW;AACL,oBAAc,YAAY,iBAAiB;AAC3C,8BAAwB,IAAI,mBAAmB,WAAW;AAAA,IAChE;AAEI,aAAS,IAAI,YAAY,SAAS,GAAG,KAAK,GAAG,KAAK;AAChD,YAAM,aAAa,YAAY,CAAC;AAChC,YAAM,OAAO,cAAc,WAAW;AAEtC,UAAI,cAAc,MAAM;AACtB,YAAI,IAAI,IAAI,WAAW,iBAAiB;AACxC;AAAA,MACR;AAAA,IACA;AACI,WAAO;AAAA,EACR,GAAE,EAAE;AACP;ACxCK,MAAC,cAAe,OAAO,qBAAqB,eAAe;ACShE,SAAS,iBAAiB;AAExB,mBAAiB,UAAU;AAC3B,SAAO;AACT;AAGA,SAAS,iBAAiB,SAAS;AACjC,QAAM,aAAc,QAAQ,aAAa,QAAQ,cAAc,CAAA;AAG/D,aAAW,UAAU,WAAW,WAAW;AAI3C,SAAQ,WAAW,WAAW,IAAI,WAAW,WAAW,KAAK,CAAE;AACjE;ACeA,SAAS,cAAc,SAAS,UAAU,IAAI;AAC5C,MAAI,QAAQ,MAAM;AAChB,QAAI,CAAC,QAAQ,aAAa,QAAQ,KAAK,YAAY;AACjD,cAAQ,YAAY,QAAQ,KAAK;AAAA,IACvC;AAEI,QAAI,CAAC,QAAQ,OAAO,CAAC,QAAQ,KAAK;AAChC,cAAQ,MAAM,QAAQ,KAAK,MAAM,QAAQ,KAAK,SAAS,QAAQ,KAAK;AAAA,IAC1E;AAAA,EACA;AAEE,UAAQ,YAAY,QAAQ,aAAa,mBAAoB;AAE7D,MAAI,QAAQ,oBAAoB;AAC9B,YAAQ,qBAAqB,QAAQ;AAAA,EACzC;AAEE,MAAI,QAAQ,gBAAgB;AAC1B,YAAQ,iBAAiB,QAAQ;AAAA,EACrC;AACE,MAAI,QAAQ,KAAK;AAEf,YAAQ,MAAM,QAAQ,IAAI,WAAW,KAAK,QAAQ,MAAM,MAAO;AAAA,EACnE;AACE,MAAI,QAAQ,SAAS,QAAW;AAC9B,YAAQ,OAAO,QAAQ;AAAA,EAC3B;AACE,MAAI,CAAC,QAAQ,OAAO,QAAQ,KAAK;AAC/B,YAAQ,MAAM,GAAG,QAAQ,GAAG;AAAA,EAChC;AACE,MAAI,OAAO,QAAQ,YAAY,UAAU;AACvC,YAAQ,UAAU,QAAQ;AAAA,EAC9B;AACE,MAAI,QAAQ,gBAAgB;AAC1B,YAAQ,WAAW;AAAA,EACpB,WAAU,OAAO,QAAQ,aAAa,UAAU;AAC/C,YAAQ,WAAW,QAAQ;AAAA,EAC/B,OAAS;AACL,UAAM,WAAW,QAAQ,YAAY,QAAQ;AAC7C,YAAQ,WAAW,YAAY,IAAI,WAAW;AAAA,EAClD;AACE,MAAI,QAAQ,SAAS;AACnB,YAAQ,UAAU,QAAQ;AAAA,EAC9B;AACE,MAAI,QAAQ,aAAa;AACvB,YAAQ,cAAc,QAAQ;AAAA,EAClC;AACE,MAAI,CAAC,QAAQ,aAAa,QAAQ,WAAW;AAC3C,YAAQ,YAAY,QAAQ;AAAA,EAChC;AACE,MAAI,CAAC,QAAQ,aAAa,QAAQ,WAAW;AAC3C,YAAQ,YAAY,QAAQ;AAAA,EAChC;AACE,MAAI,OAAO,QAAQ,WAAW,UAAU;AACtC,YAAQ,SAAS,QAAQ;AAAA,EAC7B;AACE,MAAI,QAAQ,QAAQ;AAClB,YAAQ,SAAS,QAAQ;AAAA,EAC7B;AACA;ACtGA,MAAM,mBAAmB;AAMzB,SAAS,iBAAiB,OAAO,MAAM;AACrC,MAAI,MAAM;AACR,6BAAyB,OAAQ,kBAAkB,IAAI;AAAA,EAC3D,OAAS;AAEL,WAAQ,MAAQ,gBAAgB;AAAA,EACpC;AACA;AAMA,SAAS,iBAAiB,OAAO;AAC/B,SAAO,MAAM,gBAAgB;AAC/B;AChBA,MAAM,0BAA0B;AAKhC,MAAM,WAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+Cf,cAAc;AACb,SAAK,sBAAsB;AAC3B,SAAK,kBAAkB,CAAE;AACzB,SAAK,mBAAmB,CAAE;AAC1B,SAAK,eAAe,CAAE;AACtB,SAAK,eAAe,CAAE;AACtB,SAAK,QAAQ,CAAE;AACf,SAAK,QAAQ,CAAE;AACf,SAAK,SAAS,CAAE;AAChB,SAAK,YAAY,CAAE;AACnB,SAAK,yBAAyB,CAAE;AAChC,SAAK,sBAAsB,2BAA4B;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKG,QAAQ;AACP,UAAM,WAAW,IAAI,WAAY;AACjC,aAAS,eAAe,CAAC,GAAG,KAAK,YAAY;AAC7C,aAAS,QAAQ,EAAE,GAAG,KAAK,MAAO;AAClC,aAAS,SAAS,EAAE,GAAG,KAAK,OAAQ;AACpC,aAAS,YAAY,EAAE,GAAG,KAAK,UAAW;AAC1C,aAAS,QAAQ,KAAK;AACtB,aAAS,SAAS,KAAK;AACvB,aAAS,WAAW,KAAK;AACzB,aAAS,mBAAmB,KAAK;AACjC,aAAS,eAAe,KAAK;AAC7B,aAAS,mBAAmB,CAAC,GAAG,KAAK,gBAAgB;AACrD,aAAS,kBAAkB,KAAK;AAChC,aAAS,eAAe,CAAC,GAAG,KAAK,YAAY;AAC7C,aAAS,yBAAyB,EAAE,GAAG,KAAK,uBAAwB;AACpE,aAAS,sBAAsB,EAAE,GAAG,KAAK,oBAAqB;AAC9D,aAAS,UAAU,KAAK;AACxB,aAAS,eAAe,KAAK;AAE7B,qBAAiB,UAAU,iBAAiB,IAAI,CAAC;AAEjD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,UAAU,QAAQ;AACjB,SAAK,UAAU;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKG,eAAe,aAAa;AAC3B,SAAK,eAAe;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKG,YAAY;AACX,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKG,cAAc;AACb,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKG,iBAAiB,UAAU;AAC1B,SAAK,gBAAgB,KAAK,QAAQ;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKG,kBAAkB,UAAU;AAC3B,SAAK,iBAAiB,KAAK,QAAQ;AACnC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,QAAQ,MAAM;AAGb,SAAK,QAAQ,QAAQ;AAAA,MACnB,OAAO;AAAA,MACP,IAAI;AAAA,MACJ,YAAY;AAAA,MACZ,UAAU;AAAA,IACX;AAED,QAAI,KAAK,UAAU;AACjB,oBAAc,KAAK,UAAU,EAAE,KAAI,CAAE;AAAA,IAC3C;AAEI,SAAK,sBAAuB;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,UAAU;AACT,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKG,oBAAoB;AACnB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKG,kBAAkB,gBAAgB;AACjC,SAAK,kBAAkB;AACvB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,QAAQ,MAAM;AACb,SAAK,QAAQ;AAAA,MACX,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACJ;AACD,SAAK,sBAAuB;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,OAAO,KAAK,OAAO;AAClB,SAAK,QAAQ,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,GAAG,MAAO;AAC5C,SAAK,sBAAuB;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,UAAU,QAAQ;AACjB,SAAK,SAAS;AAAA,MACZ,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACJ;AACD,SAAK,sBAAuB;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,SAAS,KAAK,OAAO;AACpB,SAAK,SAAS,EAAE,GAAG,KAAK,QAAQ,CAAC,GAAG,GAAG,MAAO;AAC9C,SAAK,sBAAuB;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,eAAe,aAAa;AAC3B,SAAK,eAAe;AACpB,SAAK,sBAAuB;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,SAAS,OAAO;AACf,SAAK,SAAS;AACd,SAAK,sBAAuB;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,mBAAmB,MAAM;AACxB,SAAK,mBAAmB;AACxB,SAAK,sBAAuB;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,WAAW,KAAK,SAAS;AACxB,QAAI,YAAY,MAAM;AAEpB,aAAO,KAAK,UAAU,GAAG;AAAA,IAC/B,OAAW;AACL,WAAK,UAAU,GAAG,IAAI;AAAA,IAC5B;AAEI,SAAK,sBAAuB;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,WAAW,SAAS;AACnB,QAAI,CAAC,SAAS;AACZ,aAAO,KAAK;AAAA,IAClB,OAAW;AACL,WAAK,WAAW;AAAA,IACtB;AACI,SAAK,sBAAuB;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,aAAa;AACZ,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKG,OAAO,gBAAgB;AACtB,QAAI,CAAC,gBAAgB;AACnB,aAAO;AAAA,IACb;AAEI,UAAM,eAAe,OAAO,mBAAmB,aAAa,eAAe,IAAI,IAAI;AAEnF,UAAM,CAAC,eAAe,cAAc,IAClC,wBAAwB,QACpB,CAAC,aAAa,gBAAgB,aAAa,kBAAmB,CAAA,IAC9D,cAAc,YAAY,IACxB,CAAC,gBAAkB,eAAiB,cAAc,IAClD,CAAE;AAEV,UAAM,EAAE,MAAM,OAAO,MAAM,UAAU,OAAO,cAAc,CAAE,GAAE,mBAAoB,IAAG,iBAAiB,CAAE;AAExG,SAAK,QAAQ,EAAE,GAAG,KAAK,OAAO,GAAG,KAAM;AACvC,SAAK,SAAS,EAAE,GAAG,KAAK,QAAQ,GAAG,MAAO;AAC1C,SAAK,YAAY,EAAE,GAAG,KAAK,WAAW,GAAG,SAAU;AAEnD,QAAI,QAAQ,OAAO,KAAK,IAAI,EAAE,QAAQ;AACpC,WAAK,QAAQ;AAAA,IACnB;AAEI,QAAI,OAAO;AACT,WAAK,SAAS;AAAA,IACpB;AAEI,QAAI,YAAY,QAAQ;AACtB,WAAK,eAAe;AAAA,IAC1B;AAEI,QAAI,oBAAoB;AACtB,WAAK,sBAAsB;AAAA,IACjC;AAEI,QAAI,gBAAgB;AAClB,WAAK,kBAAkB;AAAA,IAC7B;AAEI,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,QAAQ;AAEP,SAAK,eAAe,CAAE;AACtB,SAAK,QAAQ,CAAE;AACf,SAAK,SAAS,CAAE;AAChB,SAAK,QAAQ,CAAE;AACf,SAAK,YAAY,CAAE;AACnB,SAAK,SAAS;AACd,SAAK,mBAAmB;AACxB,SAAK,eAAe;AACpB,SAAK,kBAAkB;AACvB,SAAK,WAAW;AAChB,qBAAiB,MAAM,MAAS;AAChC,SAAK,eAAe,CAAE;AACtB,SAAK,sBAAsB,2BAA4B;AAEvD,SAAK,sBAAuB;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,cAAc,YAAY,gBAAgB;AACzC,UAAM,YAAY,OAAO,mBAAmB,WAAW,iBAAiB;AAGxE,QAAI,aAAa,GAAG;AAClB,aAAO;AAAA,IACb;AAEI,UAAM,mBAAmB;AAAA,MACvB,WAAW,uBAAwB;AAAA,MACnC,GAAG;AAAA,IACJ;AAED,UAAM,cAAc,KAAK;AACzB,gBAAY,KAAK,gBAAgB;AACjC,SAAK,eAAe,YAAY,SAAS,YAAY,YAAY,MAAM,CAAC,SAAS,IAAI;AAErF,SAAK,sBAAuB;AAE5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,oBAAoB;AACnB,WAAO,KAAK,aAAa,KAAK,aAAa,SAAS,CAAC;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKG,mBAAmB;AAClB,SAAK,eAAe,CAAE;AACtB,SAAK,sBAAuB;AAC5B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,cAAc,YAAY;AACzB,SAAK,aAAa,KAAK,UAAU;AACjC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,mBAAmB;AAClB,SAAK,eAAe,CAAE;AACtB,WAAO;AAAA,EACX;AAAA;AAAA,EAGG,eAAe;AACd,WAAO;AAAA,MACL,aAAa,KAAK;AAAA,MAClB,aAAa,KAAK;AAAA,MAClB,UAAU,KAAK;AAAA,MACf,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK,gBAAgB,CAAE;AAAA,MACpC,iBAAiB,KAAK;AAAA,MACtB,oBAAoB,KAAK;AAAA,MACzB,uBAAuB,KAAK;AAAA,MAC5B,iBAAiB,KAAK;AAAA,MACtB,MAAM,iBAAiB,IAAI;AAAA,IAC5B;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKG,yBAAyB,SAAS;AACjC,SAAK,yBAAyB,EAAE,GAAG,KAAK,wBAAwB,GAAG,QAAS;AAE5E,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,sBAAsB,SAAS;AAC9B,SAAK,sBAAsB;AAC3B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,wBAAwB;AACvB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKG,iBAAiB,WAAW,MAAM;AACjC,UAAM,UAAU,QAAQ,KAAK,WAAW,KAAK,WAAW,MAAO;AAE/D,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO,KAAK,6DAA6D;AACzE,aAAO;AAAA,IACb;AAEI,UAAM,qBAAqB,IAAI,MAAM,2BAA2B;AAEhE,SAAK,QAAQ;AAAA,MACX;AAAA,MACA;AAAA,QACE,mBAAmB;AAAA,QACnB;AAAA,QACA,GAAG;AAAA,QACH,UAAU;AAAA,MACX;AAAA,MACD;AAAA,IACD;AAED,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,eAAe,SAAS,OAAO,MAAM;AACpC,UAAM,UAAU,QAAQ,KAAK,WAAW,KAAK,WAAW,MAAO;AAE/D,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO,KAAK,2DAA2D;AACvE,aAAO;AAAA,IACb;AAEI,UAAM,qBAAqB,IAAI,MAAM,OAAO;AAE5C,SAAK,QAAQ;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,QACE,mBAAmB;AAAA,QACnB;AAAA,QACA,GAAG;AAAA,QACH,UAAU;AAAA,MACX;AAAA,MACD;AAAA,IACD;AAED,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,aAAa,OAAO,MAAM;AACzB,UAAM,UAAU,QAAQ,KAAK,WAAW,KAAK,WAAW,MAAO;AAE/D,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO,KAAK,yDAAyD;AACrE,aAAO;AAAA,IACb;AAEI,SAAK,QAAQ,aAAa,OAAO,EAAE,GAAG,MAAM,UAAU,QAAS,GAAE,IAAI;AAErE,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,wBAAwB;AAIvB,QAAI,CAAC,KAAK,qBAAqB;AAC7B,WAAK,sBAAsB;AAC3B,WAAK,gBAAgB,QAAQ,cAAY;AACvC,iBAAS,IAAI;AAAA,MACrB,CAAO;AACD,WAAK,sBAAsB;AAAA,IACjC;AAAA,EACA;AACA;AASA,MAAM,QAAQ;ACtiBd,SAAS,yBAAyB;AAChC,SAAO,mBAAmB,uBAAuB,MAAM,IAAI,MAAK,CAAE;AACpE;AAGA,SAAS,2BAA2B;AAClC,SAAO,mBAAmB,yBAAyB,MAAM,IAAI,MAAK,CAAE;AACtE;ACHA,MAAM,kBAAkB;AAAA,EAErB,YAAY,OAAO,gBAAgB;AAClC,QAAI;AACJ,QAAI,CAAC,OAAO;AACV,sBAAgB,IAAI,MAAO;AAAA,IACjC,OAAW;AACL,sBAAgB;AAAA,IACtB;AAEI,QAAI;AACJ,QAAI,CAAC,gBAAgB;AACnB,+BAAyB,IAAI,MAAO;AAAA,IAC1C,OAAW;AACL,+BAAyB;AAAA,IAC/B;AAGI,SAAK,SAAS,CAAC,EAAE,OAAO,cAAa,CAAE;AACvC,SAAK,kBAAkB;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKG,UAAU,UAAU;AACnB,UAAM,QAAQ,KAAK,WAAY;AAE/B,QAAI;AACJ,QAAI;AACF,2BAAqB,SAAS,KAAK;AAAA,IACpC,SAAQ,GAAG;AACV,WAAK,UAAW;AAChB,YAAM;AAAA,IACZ;AAEI,QAAI,WAAW,kBAAkB,GAAG;AAElC,aAAO,mBAAmB;AAAA,QACxB,SAAO;AACL,eAAK,UAAW;AAChB,iBAAO;AAAA,QACR;AAAA,QACD,OAAK;AACH,eAAK,UAAW;AAChB,gBAAM;AAAA,QACP;AAAA,MACF;AAAA,IACP;AAEI,SAAK,UAAW;AAChB,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,YAAY;AACX,WAAO,KAAK,YAAW,EAAG;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKG,WAAW;AACV,WAAO,KAAK,YAAW,EAAG;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKG,oBAAoB;AACnB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKG,cAAc;AACb,WAAO,KAAK,OAAO,KAAK,OAAO,SAAS,CAAC;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKG,aAAa;AAEZ,UAAM,QAAQ,KAAK,SAAQ,EAAG,MAAO;AACrC,SAAK,OAAO,KAAK;AAAA,MACf,QAAQ,KAAK,UAAW;AAAA,MACxB;AAAA,IACN,CAAK;AACD,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKG,YAAY;AACX,QAAI,KAAK,OAAO,UAAU,EAAG,QAAO;AACpC,WAAO,CAAC,CAAC,KAAK,OAAO,IAAK;AAAA,EAC9B;AACA;AAMA,SAAS,uBAAuB;AAC9B,QAAM,WAAW,eAAgB;AACjC,QAAM,SAAS,iBAAiB,QAAQ;AAExC,SAAQ,OAAO,QAAQ,OAAO,SAAS,IAAI,kBAAkB,0BAA0B,0BAA0B;AACnH;AAEA,SAAS,UAAU,UAAU;AAC3B,SAAO,qBAAoB,EAAG,UAAU,QAAQ;AAClD;AAEA,SAAS,aAAa,OAAO,UAAU;AACrC,QAAM,QAAQ,qBAAsB;AACpC,SAAO,MAAM,UAAU,MAAM;AAC3B,UAAM,cAAc,QAAQ;AAC5B,WAAO,SAAS,KAAK;AAAA,EACzB,CAAG;AACH;AAEA,SAAS,mBAAmB,UAAU;AACpC,SAAO,qBAAoB,EAAG,UAAU,MAAM;AAC5C,WAAO,SAAS,uBAAuB,mBAAmB;AAAA,EAC9D,CAAG;AACH;AAKA,SAAS,+BAA+B;AACtC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,uBAAuB,CAAC,iBAAiB,aAAa;AACpD,aAAO,mBAAmB,QAAQ;AAAA,IACnC;AAAA,IACD,iBAAiB,MAAM,qBAAsB,EAAC,SAAU;AAAA,IACxD,mBAAmB,MAAM,qBAAsB,EAAC,kBAAmB;AAAA,EACpE;AACH;ACxIA,SAAS,wBAAwB,SAAS;AACxC,QAAM,SAAS,iBAAiB,OAAO;AAEvC,MAAI,OAAO,KAAK;AACd,WAAO,OAAO;AAAA,EAClB;AAGE,SAAO,6BAA8B;AACvC;ACpBA,SAAS,kBAAkB;AACzB,QAAM,UAAU,eAAgB;AAChC,QAAM,MAAM,wBAAwB,OAAO;AAC3C,SAAO,IAAI,gBAAiB;AAC9B;AAMA,SAAS,oBAAoB;AAC3B,QAAM,UAAU,eAAgB;AAChC,QAAM,MAAM,wBAAwB,OAAO;AAC3C,SAAO,IAAI,kBAAmB;AAChC;AAMA,SAAS,iBAAiB;AACxB,SAAO,mBAAmB,eAAe,MAAM,IAAI,MAAK,CAAE;AAC5D;AAqEA,SAAS,YAAY;AACnB,SAAO,gBAAiB,EAAC,UAAW;AACtC;AC9FA,MAAM,qBAAqB;AAK3B,SAAS,4BAA4B,MAAM;AACzC,QAAM,UAAW,KAAO,kBAAkB;AAE1C,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACX;AACE,QAAM,SAAS,CAAE;AAEjB,aAAW,CAAA,EAAG,CAAC,WAAW,OAAO,CAAC,KAAK,SAAS;AAC9C,UAAM,MAAM,OAAO,SAAS,MAAM,OAAO,SAAS,IAAI;AACtD,QAAI,KAAK,kBAAkB,OAAO,CAAC;AAAA,EACvC;AAEE,SAAO;AACT;ACrBA,MAAM,mCAAmC;AAKzC,MAAM,wCAAwC;AAK9C,MAAM,+BAA+B;AAKrC,MAAM,mCAAmC;ACpBzC,MAAM,oBAAoB;AAC1B,MAAM,iBAAiB;ACUvB,MAAM,qBAAqB;AAyB3B,SAAS,mBAAmB,MAAM;AAChC,QAAM,EAAE,QAAQ,SAAS,SAAS,SAAU,IAAG,KAAK,YAAa;AACjE,QAAM,EAAE,eAAc,IAAK,WAAW,IAAI;AAE1C,SAAO,kBAAkB,EAAE,gBAAgB,SAAS,SAAQ,CAAE;AAChE;AAcA,SAAS,uBAAuB,OAAO;AACrC,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,yBAAyB,KAAK;AAAA,EACzC;AAEE,MAAI,MAAM,QAAQ,KAAK,GAAG;AAExB,WAAO,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI;AAAA,EACjC;AAEE,MAAI,iBAAiB,MAAM;AACzB,WAAO,yBAAyB,MAAM,SAAS;AAAA,EACnD;AAEE,SAAO,mBAAoB;AAC7B;AAKA,SAAS,yBAAyB,WAAW;AAC3C,QAAM,OAAO,YAAY;AACzB,SAAO,OAAO,YAAY,MAAO;AACnC;AAQA,SAAS,WAAW,MAAM;AACxB,MAAI,iBAAiB,IAAI,GAAG;AAC1B,WAAO,KAAK,YAAa;AAAA,EAC7B;AAEE,MAAI;AACF,UAAM,EAAE,QAAQ,SAAS,SAAS,SAAU,IAAG,KAAK,YAAa;AAGjE,QAAI,oCAAoC,IAAI,GAAG;AAC7C,YAAM,EAAE,YAAY,WAAW,MAAM,SAAS,cAAc,OAAM,IAAK;AAEvE,aAAO,kBAAkB;AAAA,QACvB;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,aAAa;AAAA,QACb,gBAAgB;AAAA,QAChB,iBAAiB,uBAAuB,SAAS;AAAA;AAAA,QAEjD,WAAW,uBAAuB,OAAO,KAAK;AAAA,QAC9C,QAAQ,iBAAiB,MAAM;AAAA,QAC/B,IAAI,WAAW,4BAA4B;AAAA,QAC3C,QAAQ,WAAW,gCAAgC;AAAA,QACnD,kBAAkB,4BAA4B,IAAI;AAAA,MAC1D,CAAO;AAAA,IACP;AAGI,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACD;AAAA,EACF,SAAQ,GAAG;AACV,WAAO,CAAE;AAAA,EACb;AACA;AAEA,SAAS,oCAAoC,MAAM;AACjD,QAAM,WAAW;AACjB,SAAO,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC,SAAS,aAAa,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,SAAS;AAC9G;AAQA,SAAS,iBAAiB,MAAM;AAC9B,SAAO,OAAQ,KAAO,gBAAgB;AACxC;AAQA,SAAS,cAAc,MAAM;AAG3B,QAAM,EAAE,WAAU,IAAK,KAAK,YAAa;AACzC,SAAO,eAAe;AACxB;AAGA,SAAS,iBAAiB,QAAQ;AAChC,MAAI,CAAC,UAAU,OAAO,SAAS,mBAAmB;AAChD,WAAO;AAAA,EACX;AAEE,MAAI,OAAO,SAAS,gBAAgB;AAClC,WAAO;AAAA,EACX;AAEE,SAAO,OAAO,WAAW;AAC3B;AAGA,MAAM,kBAAkB;AAuDxB,SAAS,YAAY,MAAM;AACzB,SAAO,KAAK,eAAe,KAAK;AAClC;ACtNA,SAAS,kBACP,cACA;AACA,MAAI,OAAO,uBAAuB,aAAa,CAAC,oBAAoB;AAClE,WAAO;AAAA,EACX;AAEE,QAAM,SAAS,UAAW;AAC1B,QAAM,UAA2B,UAAU,OAAO,WAAU;AAE5D,SAAO,CAAC,CAAC,YAAY,QAAQ,iBAAiB,sBAAsB,WAAW,mBAAmB;AACpG;ACpBA,MAAM,sBAAsB;ACW5B,MAAM,mBAAmB;AAezB,SAAS,oCAAoC,UAAU,QAAQ;AAC7D,QAAM,UAAU,OAAO,WAAY;AAEnC,QAAM,EAAE,WAAW,WAAU,IAAK,OAAO,OAAQ,KAAI,CAAE;AAEvD,QAAM,MAAM,kBAAkB;AAAA,IAC5B,aAAa,QAAQ,eAAe;AAAA,IACpC,SAAS,QAAQ;AAAA,IACjB;AAAA,IACA;AAAA,EACJ,CAAG;AAED,SAAO,KAAK,aAAa,GAAG;AAE5B,SAAO;AACT;AASA,SAAS,kCAAkC,MAAM;AAC/C,QAAM,SAAS,UAAW;AAC1B,MAAI,CAAC,QAAQ;AACX,WAAO,CAAE;AAAA,EACb;AAEE,QAAM,MAAM,oCAAoC,WAAW,IAAI,EAAE,YAAY,IAAI,MAAM;AAEvF,QAAM,WAAW,YAAY,IAAI;AAGjC,QAAM,YAAa,SAAW,gBAAgB;AAC9C,MAAI,WAAW;AACb,WAAO;AAAA,EACX;AAGE,QAAM,aAAa,SAAS,YAAW,EAAG;AAC1C,QAAM,gBAAgB,cAAc,WAAW,IAAI,YAAY;AAG/D,QAAM,kBAAkB,iBAAiB,sCAAsC,aAAa;AAE5F,MAAI,iBAAiB;AACnB,WAAO;AAAA,EACX;AAGE,QAAM,WAAW,WAAW,QAAQ;AACpC,QAAM,aAAa,SAAS,QAAQ,CAAE;AACtC,QAAM,kBAAkB,WAAW,qCAAqC;AAExE,MAAI,mBAAmB,MAAM;AAC3B,QAAI,cAAc,GAAG,eAAe;AAAA,EACxC;AAGE,QAAM,SAAS,WAAW,gCAAgC;AAG1D,QAAM,OAAO,SAAS;AACtB,MAAI,WAAW,SAAS,MAAM;AAC5B,QAAI,cAAc;AAAA,EACtB;AAKE,MAAI,kBAAiB,GAAI;AACvB,QAAI,UAAU,OAAO,cAAc,QAAQ,CAAC;AAAA,EAChD;AAEE,SAAO,KAAK,aAAa,KAAK,QAAQ;AAEtC,SAAO;AACT;ACnGA,SAAS,sBACP,YACA,OACA,MACA,QAAQ,GACR;AACA,SAAO,IAAI,YAAY,CAAC,SAAS,WAAW;AAC1C,UAAM,YAAY,WAAW,KAAK;AAClC,QAAI,UAAU,QAAQ,OAAO,cAAc,YAAY;AACrD,cAAQ,KAAK;AAAA,IACnB,OAAW;AACL,YAAM,SAAS,UAAU,EAAE,GAAG,MAAK,GAAI,IAAI;AAE3C,qBAAe,UAAU,MAAM,WAAW,QAAQ,OAAO,IAAI,oBAAoB,UAAU,EAAE,iBAAiB;AAE9G,UAAI,WAAW,MAAM,GAAG;AACtB,aAAK,OACF,KAAK,WAAS,sBAAsB,YAAY,OAAO,MAAM,QAAQ,CAAC,EAAE,KAAK,OAAO,CAAC,EACrF,KAAK,MAAM,MAAM;AAAA,MAC5B,OAAa;AACL,aAAK,sBAAsB,YAAY,QAAQ,MAAM,QAAQ,CAAC,EAC3D,KAAK,OAAO,EACZ,KAAK,MAAM,MAAM;AAAA,MAC5B;AAAA,IACA;AAAA,EACA,CAAG;AACH;ACzBA,SAAS,sBAAsB,OAAO,MAAM;AAC1C,QAAM,EAAE,aAAa,MAAM,aAAa,sBAAuB,IAAG;AAGlE,mBAAiB,OAAO,IAAI;AAK5B,MAAI,MAAM;AACR,qBAAiB,OAAO,IAAI;AAAA,EAChC;AAEE,0BAAwB,OAAO,WAAW;AAC1C,0BAAwB,OAAO,WAAW;AAC1C,0BAAwB,OAAO,qBAAqB;AACtD;AAGA,SAAS,eAAe,MAAM,WAAW;AACvC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAM;AAEJ,6BAA2B,MAAM,SAAS,KAAK;AAC/C,6BAA2B,MAAM,QAAQ,IAAI;AAC7C,6BAA2B,MAAM,QAAQ,IAAI;AAC7C,6BAA2B,MAAM,YAAY,QAAQ;AACrD,6BAA2B,MAAM,yBAAyB,qBAAqB;AAE/E,MAAI,OAAO;AACT,SAAK,QAAQ;AAAA,EACjB;AAEE,MAAI,iBAAiB;AACnB,SAAK,kBAAkB;AAAA,EAC3B;AAEE,MAAI,MAAM;AACR,SAAK,OAAO;AAAA,EAChB;AAEE,MAAI,YAAY,QAAQ;AACtB,SAAK,cAAc,CAAC,GAAG,KAAK,aAAa,GAAG,WAAW;AAAA,EAC3D;AAEE,MAAI,YAAY,QAAQ;AACtB,SAAK,cAAc,CAAC,GAAG,KAAK,aAAa,GAAG,WAAW;AAAA,EAC3D;AAEE,MAAI,gBAAgB,QAAQ;AAC1B,SAAK,kBAAkB,CAAC,GAAG,KAAK,iBAAiB,GAAG,eAAe;AAAA,EACvE;AAEE,MAAI,YAAY,QAAQ;AACtB,SAAK,cAAc,CAAC,GAAG,KAAK,aAAa,GAAG,WAAW;AAAA,EAC3D;AAEE,OAAK,qBAAqB,EAAE,GAAG,KAAK,oBAAoB,GAAG,mBAAoB;AACjF;AAMA,SAAS,2BAER,MAAM,MAAM,UAAU;AACrB,MAAI,YAAY,OAAO,KAAK,QAAQ,EAAE,QAAQ;AAE5C,SAAK,IAAI,IAAI,EAAE,GAAG,KAAK,IAAI,EAAG;AAC9B,eAAW,OAAO,UAAU;AAC1B,UAAI,OAAO,UAAU,eAAe,KAAK,UAAU,GAAG,GAAG;AACvD,aAAK,IAAI,EAAE,GAAG,IAAI,SAAS,GAAG;AAAA,MACtC;AAAA,IACA;AAAA,EACA;AACA;AAEA,SAAS,iBAAiB,OAAO,MAAM;AACrC,QAAM,EAAE,OAAO,MAAM,MAAM,UAAU,OAAO,gBAAe,IAAK;AAEhE,QAAM,eAAe,kBAAkB,KAAK;AAC5C,MAAI,gBAAgB,OAAO,KAAK,YAAY,EAAE,QAAQ;AACpD,UAAM,QAAQ,EAAE,GAAG,cAAc,GAAG,MAAM,MAAO;AAAA,EACrD;AAEE,QAAM,cAAc,kBAAkB,IAAI;AAC1C,MAAI,eAAe,OAAO,KAAK,WAAW,EAAE,QAAQ;AAClD,UAAM,OAAO,EAAE,GAAG,aAAa,GAAG,MAAM,KAAM;AAAA,EAClD;AAEE,QAAM,cAAc,kBAAkB,IAAI;AAC1C,MAAI,eAAe,OAAO,KAAK,WAAW,EAAE,QAAQ;AAClD,UAAM,OAAO,EAAE,GAAG,aAAa,GAAG,MAAM,KAAM;AAAA,EAClD;AAEE,QAAM,kBAAkB,kBAAkB,QAAQ;AAClD,MAAI,mBAAmB,OAAO,KAAK,eAAe,EAAE,QAAQ;AAC1D,UAAM,WAAW,EAAE,GAAG,iBAAiB,GAAG,MAAM,SAAU;AAAA,EAC9D;AAEE,MAAI,OAAO;AACT,UAAM,QAAQ;AAAA,EAClB;AAGE,MAAI,mBAAmB,MAAM,SAAS,eAAe;AACnD,UAAM,cAAc;AAAA,EACxB;AACA;AAEA,SAAS,wBAAwB,OAAO,aAAa;AACnD,QAAM,oBAAoB,CAAC,GAAI,MAAM,eAAe,CAAE,GAAG,GAAG,WAAW;AACvE,QAAM,cAAc,kBAAkB,SAAS,oBAAoB;AACrE;AAEA,SAAS,wBAAwB,OAAO,uBAAuB;AAC7D,QAAM,wBAAwB;AAAA,IAC5B,GAAG,MAAM;AAAA,IACT,GAAG;AAAA,EACJ;AACH;AAEA,SAAS,iBAAiB,OAAO,MAAM;AACrC,QAAM,WAAW;AAAA,IACf,OAAO,mBAAmB,IAAI;AAAA,IAC9B,GAAG,MAAM;AAAA,EACV;AAED,QAAM,wBAAwB;AAAA,IAC5B,wBAAwB,kCAAkC,IAAI;AAAA,IAC9D,GAAG,MAAM;AAAA,EACV;AAED,QAAM,WAAW,YAAY,IAAI;AACjC,QAAM,kBAAkB,WAAW,QAAQ,EAAE;AAC7C,MAAI,mBAAmB,CAAC,MAAM,eAAe,MAAM,SAAS,eAAe;AACzE,UAAM,cAAc;AAAA,EACxB;AACA;AAMA,SAAS,wBAAwB,OAAO,aAAa;AAEnD,QAAM,cAAc,MAAM,cAAc,SAAS,MAAM,WAAW,IAAI,CAAE;AAGxE,MAAI,aAAa;AACf,UAAM,cAAc,MAAM,YAAY,OAAO,WAAW;AAAA,EAC5D;AAGE,MAAI,MAAM,eAAe,CAAC,MAAM,YAAY,QAAQ;AAClD,WAAO,MAAM;AAAA,EACjB;AACA;ACtJA,SAAS,aACP,SACA,OACA,MACA,OACA,QACA,gBACA;AACA,QAAM,EAAE,iBAAiB,GAAG,sBAAsB,IAAM,IAAG;AAC3D,QAAM,WAAW;AAAA,IACf,GAAG;AAAA,IACH,UAAU,MAAM,YAAY,KAAK,YAAY,MAAO;AAAA,IACpD,WAAW,MAAM,aAAa,uBAAwB;AAAA,EACvD;AACD,QAAM,eAAe,KAAK,gBAAgB,QAAQ,aAAa,IAAI,OAAK,EAAE,IAAI;AAE9E,qBAAmB,UAAU,OAAO;AACpC,4BAA0B,UAAU,YAAY;AAEhD,MAAI,QAAQ;AACV,WAAO,KAAK,sBAAsB,KAAK;AAAA,EAC3C;AAGE,MAAI,MAAM,SAAS,QAAW;AAC5B,kBAAc,UAAU,QAAQ,WAAW;AAAA,EAC/C;AAIE,QAAM,aAAa,cAAc,OAAO,KAAK,cAAc;AAE3D,MAAI,KAAK,WAAW;AAClB,0BAAsB,UAAU,KAAK,SAAS;AAAA,EAClD;AAEE,QAAM,wBAAwB,SAAS,OAAO,mBAAoB,IAAG,CAAE;AAKvE,QAAM,OAAO,eAAgB,EAAC,aAAc;AAE5C,MAAI,gBAAgB;AAClB,UAAM,gBAAgB,eAAe,aAAc;AACnD,mBAAe,MAAM,aAAa;AAAA,EACtC;AAEE,MAAI,YAAY;AACd,UAAM,iBAAiB,WAAW,aAAc;AAChD,mBAAe,MAAM,cAAc;AAAA,EACvC;AAEE,QAAM,cAAc,CAAC,GAAI,KAAK,eAAe,CAAA,GAAK,GAAG,KAAK,WAAW;AACrE,MAAI,YAAY,QAAQ;AACtB,SAAK,cAAc;AAAA,EACvB;AAEE,wBAAsB,UAAU,IAAI;AAEpC,QAAM,kBAAkB;AAAA,IACtB,GAAG;AAAA;AAAA,IAEH,GAAG,KAAK;AAAA,EACT;AAED,QAAM,SAAS,sBAAsB,iBAAiB,UAAU,IAAI;AAEpE,SAAO,OAAO,KAAK,SAAO;AACxB,QAAI,KAAK;AAKP,qBAAe,GAAG;AAAA,IACxB;AAEI,QAAI,OAAO,mBAAmB,YAAY,iBAAiB,GAAG;AAC5D,aAAO,eAAe,KAAK,gBAAgB,mBAAmB;AAAA,IACpE;AACI,WAAO;AAAA,EACX,CAAG;AACH;AAQA,SAAS,mBAAmB,OAAO,SAAS;AAC1C,QAAM,EAAE,aAAa,SAAS,MAAM,iBAAiB,IAAG,IAAK;AAE7D,MAAI,EAAE,iBAAiB,QAAQ;AAC7B,UAAM,cAAc,iBAAiB,UAAU,cAAc;AAAA,EACjE;AAEE,MAAI,MAAM,YAAY,UAAa,YAAY,QAAW;AACxD,UAAM,UAAU;AAAA,EACpB;AAEE,MAAI,MAAM,SAAS,UAAa,SAAS,QAAW;AAClD,UAAM,OAAO;AAAA,EACjB;AAEE,MAAI,MAAM,SAAS;AACjB,UAAM,UAAU,SAAS,MAAM,SAAS,cAAc;AAAA,EAC1D;AAEE,QAAM,YAAY,MAAM,aAAa,MAAM,UAAU,UAAU,MAAM,UAAU,OAAO,CAAC;AACvF,MAAI,aAAa,UAAU,OAAO;AAChC,cAAU,QAAQ,SAAS,UAAU,OAAO,cAAc;AAAA,EAC9D;AAEE,QAAM,UAAU,MAAM;AACtB,MAAI,WAAW,QAAQ,KAAK;AAC1B,YAAQ,MAAM,SAAS,QAAQ,KAAK,cAAc;AAAA,EACtD;AACA;AAKA,SAAS,cAAc,OAAO,aAAa;AAEzC,QAAM,qBAAqB,wBAAwB,WAAW;AAE9D,MAAI;AAEF,UAAM,UAAU,OAAO,QAAQ,eAAa;AAE1C,gBAAU,WAAW,OAAO,QAAQ,WAAS;AAC3C,YAAI,MAAM,UAAU;AAClB,gBAAM,WAAW,mBAAmB,MAAM,QAAQ;AAAA,QAC5D;AAAA,MACA,CAAO;AAAA,IACP,CAAK;AAAA,EACF,SAAQ,GAAG;AAAA,EAEd;AACA;AAKA,SAAS,eAAe,OAAO;AAE7B,QAAM,qBAAqB,CAAE;AAC7B,MAAI;AAEF,UAAM,UAAU,OAAO,QAAQ,eAAa;AAE1C,gBAAU,WAAW,OAAO,QAAQ,WAAS;AAC3C,YAAI,MAAM,UAAU;AAClB,cAAI,MAAM,UAAU;AAClB,+BAAmB,MAAM,QAAQ,IAAI,MAAM;AAAA,UACvD,WAAqB,MAAM,UAAU;AACzB,+BAAmB,MAAM,QAAQ,IAAI,MAAM;AAAA,UACvD;AACU,iBAAO,MAAM;AAAA,QACvB;AAAA,MACA,CAAO;AAAA,IACP,CAAK;AAAA,EACF,SAAQ,GAAG;AAAA,EAEd;AAEE,MAAI,OAAO,KAAK,kBAAkB,EAAE,WAAW,GAAG;AAChD;AAAA,EACJ;AAGE,QAAM,aAAa,MAAM,cAAc,CAAE;AACzC,QAAM,WAAW,SAAS,MAAM,WAAW,UAAU,CAAE;AACvD,QAAM,SAAS,MAAM,WAAW;AAChC,SAAO,QAAQ,kBAAkB,EAAE,QAAQ,CAAC,CAAC,UAAU,QAAQ,MAAM;AACnE,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,WAAW;AAAA,MACX;AAAA,IACN,CAAK;AAAA,EACL,CAAG;AACH;AAMA,SAAS,0BAA0B,OAAO,kBAAkB;AAC1D,MAAI,iBAAiB,SAAS,GAAG;AAC/B,UAAM,MAAM,MAAM,OAAO,CAAE;AAC3B,UAAM,IAAI,eAAe,CAAC,GAAI,MAAM,IAAI,gBAAgB,CAAA,GAAK,GAAG,gBAAgB;AAAA,EACpF;AACA;AAYA,SAAS,eAAe,OAAO,OAAO,YAAY;AAChD,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACX;AAEE,QAAM,aAAa;AAAA,IACjB,GAAG;AAAA,IACH,GAAI,MAAM,eAAe;AAAA,MACvB,aAAa,MAAM,YAAY,IAAI,QAAM;AAAA,QACvC,GAAG;AAAA,QACH,GAAI,EAAE,QAAQ;AAAA,UACZ,MAAM,UAAU,EAAE,MAAM,OAAO,UAAU;AAAA,QACnD;AAAA,MACA,EAAQ;AAAA,IACR;AAAA,IACI,GAAI,MAAM,QAAQ;AAAA,MAChB,MAAM,UAAU,MAAM,MAAM,OAAO,UAAU;AAAA,IACnD;AAAA,IACI,GAAI,MAAM,YAAY;AAAA,MACpB,UAAU,UAAU,MAAM,UAAU,OAAO,UAAU;AAAA,IAC3D;AAAA,IACI,GAAI,MAAM,SAAS;AAAA,MACjB,OAAO,UAAU,MAAM,OAAO,OAAO,UAAU;AAAA,IACrD;AAAA,EACG;AASD,MAAI,MAAM,YAAY,MAAM,SAAS,SAAS,WAAW,UAAU;AACjE,eAAW,SAAS,QAAQ,MAAM,SAAS;AAG3C,QAAI,MAAM,SAAS,MAAM,MAAM;AAC7B,iBAAW,SAAS,MAAM,OAAO,UAAU,MAAM,SAAS,MAAM,MAAM,OAAO,UAAU;AAAA,IAC7F;AAAA,EACA;AAGE,MAAI,MAAM,OAAO;AACf,eAAW,QAAQ,MAAM,MAAM,IAAI,UAAQ;AACzC,aAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAI,KAAK,QAAQ;AAAA,UACf,MAAM,UAAU,KAAK,MAAM,OAAO,UAAU;AAAA,QACtD;AAAA,MACO;AAAA,IACP,CAAK;AAAA,EACL;AAEE,SAAO;AACT;AAEA,SAAS,cACP,OACA,gBACA;AACA,MAAI,CAAC,gBAAgB;AACnB,WAAO;AAAA,EACX;AAEE,QAAM,aAAa,QAAQ,MAAM,MAAO,IAAG,IAAI,MAAO;AACtD,aAAW,OAAO,cAAc;AAChC,SAAO;AACT;AAMA,SAAS,+BACP,MACA;AACW;AACT,WAAO;AAAA,EACX;AAcA;ACxTA,SAAS,iBAEP,WACA,MACA;AACA,SAAO,gBAAe,EAAG,iBAAiB,WAAW,+BAAmC,CAAC;AAC3F;AAwBA,SAAS,aAAa,OAAO,MAAM;AACjC,SAAO,gBAAiB,EAAC,aAAa,OAAO,IAAI;AACnD;","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/functions.php b/web/app/themes/haiku-atelier-2024/functions.php index aba36ffa..9485a4eb 100644 --- a/web/app/themes/haiku-atelier-2024/functions.php +++ b/web/app/themes/haiku-atelier-2024/functions.php @@ -4,7 +4,6 @@ declare(strict_types=1); use Carbon_Fields\Carbon_Fields; use HaikuAtelier\StarterSite; -use Idleberg\WordPress\ViteAssets\Assets; use Timber\Timber; // Récupère les dépendances Composer @@ -181,19 +180,3 @@ function charge_carbon_fields(): void { Carbon_Fields::boot(); } add_action("after_setup_theme", "charge_carbon_fields"); - -/** - * Vite - */ -$baseUrl = get_stylesheet_directory_uri(); -$manifest = get_template_directory() . "/assets/js/.vite/manifest.json"; -$viteAssets = new Assets(manifestFile: $manifest, basePath: $baseUrl, algorithm: "sha512"); -// print_r($viteAssets); -// $viteAssets->inject($entryPoint); - -add_filter("woocommerce_rest_products", "custom_response", 10, 3); -function custom_response($response, $user_data, $request) { - // Customize response data - $response->data["coupon"] = 3; - return $response; -} diff --git a/web/app/themes/haiku-atelier-2024/page-successful-order.php b/web/app/themes/haiku-atelier-2024/page-successful-order.php index a64286c2..d537f130 100644 --- a/web/app/themes/haiku-atelier-2024/page-successful-order.php +++ b/web/app/themes/haiku-atelier-2024/page-successful-order.php @@ -6,12 +6,18 @@ declare(strict_types=1); use Roots\WPConfig\Config; +use Stripe\Checkout\Session; +use Stripe\StripeClient; use Timber\Timber; +use Illuminate\Support\Arr; +use function Crell\fp\pipe; + +require_once __DIR__ . "/src/inc/TraitementInformations.php"; /** @var string */ $url_accueil = get_page_link(get_page_by_path("home")->ID); -/** @var string */ +/** @var string $session_id L'ID de la Session Stripe. */ $session_id = $_GET["session_id"]; // Redirige à l'Accueil si le paramètre d'ID de Session Stripe n'est pas présent @@ -21,23 +27,73 @@ if (!$session_id) { } // Instancie un Client Stripe -$client_stripe = new \Stripe\StripeClient(Config::get("STRIPE_API_SECRET")); +/** @var StripeClient $client_stripe Un Client Stripe pour récupérer les informations des Commande et Transaction .*/ +$client_stripe = new StripeClient(Config::get("STRIPE_API_SECRET")); try { + /** @var Session $session La Session Stripe pour la Commande. */ $session = $client_stripe->checkout->sessions->retrieve($session_id); + /** @var string $order_id L'ID de la Commande WooCommerce passée en métadonnée à la Session Stripe. */ $order_id = $session->metadata["order_id"]; + /** @var WC_Order|WC_Order_Refund|bool $commande La Commande WooCommerce liée à la Session Stripe, `false` si inexistante. */ $commande = wc_get_order("$order_id"); + if ($commande == false) { + throw new Error("La commande $order_id n'existe pas."); + } + + // Passe la Commande en état "Payé" + if ($commande->get_status() === "pending") { + $commande->payment_complete($session_id); + $commande->set_payment_method_title("Stripe - Carte bancaire"); + $commande->set_transaction_id($session_id); + } + // Contexte et modèles $contexte = Timber::context(); $modeles = ["succes-commande.twig"]; - echo "
";
-  print_r($session);
-  print_r($commande);
-  echo "
"; + /** @var WC_Order_Item[] $articles Les Articles de la Commande. */ + $articles = $commande->get_items(); - http_response_code(200); + $articles_formates = Arr::map( + array: $articles, + callback: function (WC_Order_Item $article) { + $donnees = $article->get_data(); + $est_variation = $article["variation_id"] !== null; + $id_produit = $est_variation ? $article["variation_id"] : $article["product_id"]; + $produit = wc_get_product($id_produit); + $titre_produit = $produit->get_title(); + $attributs_produit = recupere_et_formate_attributs_produit($produit->get_attributes()); + + return [ + "attributs" => $attributs_produit, + "id_produit" => $id_produit, + "image" => pipe($produit->get_image_id(), fn($id) => genere_balise_img_multiformats(id: $id, lazy: true)), + "permalien" => $produit->get_permalink(), + "prix" => $donnees["total"], + "quantite" => $article->get_quantity(), + "titre" => $titre_produit, + ]; + }, + ); + $contexte["articles"] = $articles_formates; + + // echo "
";
+  // print_r($articles_formates);
+  // echo "
"; + + // Charge les scripts et styles de la page + function charge_scripts_styles_page_succes_commande(): void { + wp_enqueue_style( + handle: "haiku-atelier-2024-styles-page-succes-commande", + src: get_template_directory_uri() . "/assets/css/pages/page-succes-commande.css", + deps: [], + ver: filemtime(get_template_directory() . "/assets/css/pages/page-succes-commande.css"), + media: "all", + ); + } + add_action("wp_enqueue_scripts", "charge_scripts_styles_page_succes_commande"); // Rendu Timber::render(filenames: $modeles, data: $contexte); diff --git a/web/app/themes/haiku-atelier-2024/src/inc/FonctionnalitesWooCommerce.php b/web/app/themes/haiku-atelier-2024/src/inc/FonctionnalitesWooCommerce.php index a9e32489..c84a1f4c 100644 --- a/web/app/themes/haiku-atelier-2024/src/inc/FonctionnalitesWooCommerce.php +++ b/web/app/themes/haiku-atelier-2024/src/inc/FonctionnalitesWooCommerce.php @@ -6,6 +6,7 @@ declare(strict_types=1); use function Crell\fp\pipe; + require_once "TraitementInformations.php"; /* Images du Produit */ diff --git a/web/app/themes/haiku-atelier-2024/src/inc/TraitementInformations.php b/web/app/themes/haiku-atelier-2024/src/inc/TraitementInformations.php index 93d8dc37..402a3a6a 100644 --- a/web/app/themes/haiku-atelier-2024/src/inc/TraitementInformations.php +++ b/web/app/themes/haiku-atelier-2024/src/inc/TraitementInformations.php @@ -22,13 +22,13 @@ function genere_balise_img_multiformats($id, $lazy = false) { } $url = wp_get_attachment_image_url($id); - $chemin = realpath(get_attached_file($id)); + $chemin = realpath(get_attached_file($id)) ? realpath(get_attached_file($id)) : ""; $alt = get_post_meta($id, "_wp_attachment_image_alt", true); - $dimensions = $chemin ? getimagesize($chemin) : []; + $dimensions = $chemin ? getimagesize($chemin) : ["", ""]; - $avif = realpath(pathinfo($chemin)["dirname"] . "/" . pathinfo($chemin)["filename"] . ".avif"); - $jxl = realpath(pathinfo($chemin)["dirname"] . "/" . pathinfo($chemin)["filename"] . ".jxl"); - $webp = realpath(pathinfo($chemin)["dirname"] . "/" . pathinfo($chemin)["filename"] . ".webp"); + $avif = $chemin ? realpath(pathinfo($chemin)["dirname"] . "/" . pathinfo($chemin)["filename"] . ".avif") : false; + $jxl = $chemin ? realpath(pathinfo($chemin)["dirname"] . "/" . pathinfo($chemin)["filename"] . ".jxl") : false; + $webp = $chemin ? realpath(pathinfo($chemin)["dirname"] . "/" . pathinfo($chemin)["filename"] . ".webp") : false; // Génère un tableau avec les différents formats valides $formats = pipe( @@ -49,7 +49,9 @@ function genere_balise_img_multiformats($id, $lazy = false) { // Construis les balises avec les formats valides $sources = ""; foreach ($formats as $format) { - $sources .= "\n"; + $height = $dimensions[0] ?? ""; + $width = $dimensions[1] ?? ""; + $sources .= "\n"; } $loading = $lazy ? "lazy" : "eager"; diff --git a/web/app/themes/haiku-atelier-2024/src/sass/pages/page-succes-commande.scss b/web/app/themes/haiku-atelier-2024/src/sass/pages/page-succes-commande.scss new file mode 100644 index 00000000..eb0b9630 --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/src/sass/pages/page-succes-commande.scss @@ -0,0 +1,134 @@ +// Styles pour la Page affichée après une Commande réussie + +#page-succes-commande { + // Dimensions + --page-hauteur-minimale: calc( + 100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--espace-xl) - 1px + ); + + // Marges + --page-marges-bloc-debut: var(--en-tete-hauteur); + + display: flex; + flex-flow: column nowrap; + margin-top: var(--page-marges-bloc-debut); + margin-bottom: var(--espace-xl); + border-bottom: 1px solid var(--couleur-noir); + + .contenu { + display: flex; + flex-flow: column nowrap; + place-items: center; + width: min(50rem, 100%); + min-height: var(--page-hauteur-minimale); + margin: auto; + font-weight: 500; + font-style: italic; + border: 1px solid var(--couleur-noir); + border-bottom: initial; + + &__en-tete { + width: 100%; + padding: var(--espace-m) var(--espace-xl); + color: var(--couleur-blanc); + background: var(--couleur-noir); + + h2 { + width: fit-content; + margin: auto; + text-transform: uppercase; + letter-spacing: var(--espacement-inter-lettres-etendu-l); + } + } + + &__rappel-commande { + display: flex; + flex-flow: column nowrap; + + &__produit { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr; + border-bottom: 1px solid var(--couleur-noir); + + // Illustration du Produit + &__illustratif { + padding: var(--espace-l); + border-right: 1px solid var(--couleur-noir); + + picture { + overflow: hidden; + } + + img { + aspect-ratio: 1; + height: auto; + transition: 0.2s scale; + + // Effet de zoom au survol + @media (hover: hover) { + &:hover { + scale: 1.1; + } + } + } + } + } + + // Détail d'un Produit + .detail-produit { + display: flex; + flex-flow: column nowrap; + place-content: center; + width: 100%; + padding: 0 var(--espace-xl); + font-style: italic; + + &__nom-prix { + display: flex; + flex-flow: row nowrap; + column-gap: var(--espace-xl); + justify-content: space-between; + font-size: var(--espace-l); + line-height: var(--hauteur-ligne-moitie); + margin-bottom: var(--espace-xs); + + span { + min-width: 4rem; + font-weight: 600; + text-align: right; + font-style: initial; + } + } + + &__description { + margin-bottom: var(--espace-l); + text-transform: lowercase; + line-height: var(--hauteur-ligne-moitie); + } + } + } + + &__textuel { + display: flex; + flex: 1; + flex-flow: column nowrap; + place-content: center; + max-width: 34rem; + height: 100%; + padding: var(--espace-xl); + font-style: normal; + + p + p { + margin-top: var(--espace-m); + } + } + } + + @media (width <= 50rem) { + .contenu { + border-right: initial; + border-left: initial; + } + } +} diff --git a/web/app/themes/haiku-atelier-2024/views/succes-commande.twig b/web/app/themes/haiku-atelier-2024/views/succes-commande.twig index 4e8476f2..8aad2d7d 100644 --- a/web/app/themes/haiku-atelier-2024/views/succes-commande.twig +++ b/web/app/themes/haiku-atelier-2024/views/succes-commande.twig @@ -1,15 +1,54 @@ {% extends "base.twig" %} {% block contenu %} -
+

Successful order!

+ {# Rappel de la Commande avec ses Articles #} +
+ {% for article in articles %} +
+ {# Illustration cliquable du Produit #} + + +
+

+ {{ article.titre }}. + {{ article.prix }}€ +

+ +

+ {# Affiche tous les attributs relevants pour la variation choisie #} + {% for attribut in article.attributs %} + {% if attribut.valeur %} + {{ attribut.nom }}: {{ attribut.valeur }}
+ {% endif %} + {% endfor %} + qty: {{ article.quantite }} +

+
+
+ {% endfor %} +
+

-

Thanks for your order, {{ session.name }}!

+ Thank you for your order, {{ session.name }}! +

+ +

+ You will receive an email conforming your order in a short while. +

+ +

+ If you have any questions, don't hesitate to contact us!