From 730299812d93645da675ef3f6878462cedd7882d Mon Sep 17 00:00:00 2001 From: gcch Date: Wed, 20 Nov 2024 07:59:09 +0100 Subject: [PATCH] 2024-11-20 --- composer.lock | 36 +-- cute.ts | 22 ++ package.json | 28 +- pnpm-lock.yaml | 161 +++++----- .../assets/css/pages/page-panier.css | 89 +----- .../assets/css/pages/page-panier.css.map | 2 +- .../assets/css/pages/page-panier.min.css | 2 +- .../assets/js/.vite/manifest.json | 151 +++++---- .../haiku-atelier-2024/assets/js/adresses.js | 2 +- .../assets/js/cart-add-item.js | 2 +- .../assets/js/cart-apply-coupon.js | 2 +- .../assets/js/cart-coupons.js | 2 +- .../assets/js/cart-remove-coupon.js | 2 +- .../assets/js/cart-remove-item.js | 2 +- .../assets/js/cart-update-customer.js | 2 +- .../assets/js/cart-update-item.js | 2 +- .../haiku-atelier-2024/assets/js/cart.js | 2 +- .../assets/js/codes-promo.js | 10 + .../assets/js/codes-promo.js.map | 1 + .../assets/js/couts-livraison.js | 2 +- .../haiku-atelier-2024/assets/js/dom.js | 88 +++--- .../haiku-atelier-2024/assets/js/dom.js.map | 2 +- .../haiku-atelier-2024/assets/js/dom2.js | 2 +- .../haiku-atelier-2024/assets/js/erreurs.js | 87 +---- .../assets/js/erreurs.js.map | 2 +- .../haiku-atelier-2024/assets/js/erreurs2.js | 99 +++++- .../assets/js/erreurs2.js.map | 2 +- .../haiku-atelier-2024/assets/js/erreurs3.js | 18 ++ .../assets/js/erreurs3.js.map | 1 + .../assets/js/exports.3IcOsN8u.js.map | 2 +- .../{index.DKC_Jv5v.js => index.DxUTT09Y.js} | 10 +- ....DKC_Jv5v.js.map => index.DxUTT09Y.js.map} | 2 +- .../haiku-atelier-2024/assets/js/messages.js | 8 +- .../assets/js/messages.js.map | 2 +- .../haiku-atelier-2024/assets/js/messages2.js | 2 +- .../haiku-atelier-2024/assets/js/orders2.js | 2 +- .../haiku-atelier-2024/assets/js/products.js | 2 +- .../haiku-atelier-2024/assets/js/products3.js | 2 +- .../haiku-atelier-2024/assets/js/reseau.js | 6 +- .../assets/js/reseau.js.map | 2 +- .../assets/js/scripts-bouton-panier.js | 6 +- .../assets/js/scripts-bouton-panier.js.map | 2 +- .../assets/js/scripts-menu-categories.js | 2 +- .../assets/js/scripts-menu-mobile.js | 4 +- .../assets/js/scripts-page-a-propos.js | 4 +- .../assets/js/scripts-page-accueil.js | 2 +- .../assets/js/scripts-page-boutique.js | 6 +- .../js/scripts-page-panier-code-promo.js | 216 ++++++++----- .../js/scripts-page-panier-code-promo.js.map | 2 +- .../assets/js/scripts-page-panier.js | 61 ++-- .../assets/js/scripts-page-panier.js.map | 2 +- .../assets/js/scripts-page-produit.js | 10 +- .../assets/js/scripts-page-produit.js.map | 2 +- .../haiku-atelier-2024/assets/js/utils.js | 2 +- .../assets/js/validation.js | 2 +- .../src/sass/layouts/_panneau-panier.scss | 12 +- .../src/scripts/constantes/dom.ts | 12 +- .../src/scripts/constantes/erreurs.ts | 1 + .../src/scripts/lib/erreurs/codes-promo.ts | 8 + .../src/scripts/lib/messages.ts | 25 ++ .../src/scripts/lib/types/reseau.d.ts | 4 + .../scripts/scripts-page-panier-code-promo.ts | 297 ++++++++++++------ .../src/scripts/scripts-page-panier.ts | 53 +--- .../parts/pages/panier/panneau-panier.twig | 7 +- 64 files changed, 912 insertions(+), 693 deletions(-) create mode 100644 cute.ts create mode 100644 web/app/themes/haiku-atelier-2024/assets/js/codes-promo.js create mode 100644 web/app/themes/haiku-atelier-2024/assets/js/codes-promo.js.map create mode 100644 web/app/themes/haiku-atelier-2024/assets/js/erreurs3.js create mode 100644 web/app/themes/haiku-atelier-2024/assets/js/erreurs3.js.map rename web/app/themes/haiku-atelier-2024/assets/js/{index.DKC_Jv5v.js => index.DxUTT09Y.js} (99%) rename web/app/themes/haiku-atelier-2024/assets/js/{index.DKC_Jv5v.js.map => index.DxUTT09Y.js.map} (99%) create mode 100644 web/app/themes/haiku-atelier-2024/src/scripts/constantes/erreurs.ts create mode 100644 web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs/codes-promo.ts create mode 100644 web/app/themes/haiku-atelier-2024/src/scripts/lib/types/reseau.d.ts diff --git a/composer.lock b/composer.lock index 77cca26d..51fe4d98 100644 --- a/composer.lock +++ b/composer.lock @@ -646,7 +646,7 @@ }, { "name": "illuminate/collections", - "version": "v11.32.0", + "version": "v11.33.2", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", @@ -701,7 +701,7 @@ }, { "name": "illuminate/conditionable", - "version": "v11.32.0", + "version": "v11.33.2", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", @@ -747,7 +747,7 @@ }, { "name": "illuminate/contracts", - "version": "v11.32.0", + "version": "v11.33.2", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", @@ -795,7 +795,7 @@ }, { "name": "illuminate/macroable", - "version": "v11.32.0", + "version": "v11.33.2", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", @@ -841,16 +841,16 @@ }, { "name": "illuminate/support", - "version": "v11.32.0", + "version": "v11.33.2", "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "213bc04ed2a75dac441e602df4568154c36a3670" + "reference": "3e248061e77b67cdf868411e68cf17de524e3d1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/213bc04ed2a75dac441e602df4568154c36a3670", - "reference": "213bc04ed2a75dac441e602df4568154c36a3670", + "url": "https://api.github.com/repos/illuminate/support/zipball/3e248061e77b67cdf868411e68cf17de524e3d1d", + "reference": "3e248061e77b67cdf868411e68cf17de524e3d1d", "shasum": "" }, "require": { @@ -913,7 +913,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-11-14T16:30:16+00:00" + "time": "2024-11-19T19:46:19+00:00" }, { "name": "laravel/helpers", @@ -3537,15 +3537,15 @@ }, { "name": "wpackagist-plugin/woocommerce", - "version": "9.4.1", + "version": "9.4.2", "source": { "type": "svn", "url": "https://plugins.svn.wordpress.org/woocommerce/", - "reference": "tags/9.4.1" + "reference": "tags/9.4.2" }, "dist": { "type": "zip", - "url": "https://downloads.wordpress.org/plugin/woocommerce.9.4.1.zip" + "url": "https://downloads.wordpress.org/plugin/woocommerce.9.4.2.zip" }, "require": { "composer/installers": "^1.0 || ^2.0" @@ -4762,12 +4762,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "d521fa951b3fc37146a2fe9aef1b06c0af78fd3f" + "reference": "b33a18b5d222c63472a4b41f6fa3e15e591c9595" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/d521fa951b3fc37146a2fe9aef1b06c0af78fd3f", - "reference": "d521fa951b3fc37146a2fe9aef1b06c0af78fd3f", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/b33a18b5d222c63472a4b41f6fa3e15e591c9595", + "reference": "b33a18b5d222c63472a4b41f6fa3e15e591c9595", "shasum": "" }, "conflict": { @@ -5287,7 +5287,7 @@ "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", "really-simple-plugins/complianz-gdpr": "<6.4.2", - "redaxo/source": "<=5.17.1", + "redaxo/source": "<5.18", "remdex/livehelperchat": "<4.29", "reportico-web/reportico": "<=8.1", "rhukster/dom-sanitizer": "<1.0.7", @@ -5354,7 +5354,7 @@ "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", "ssddanbrown/bookstack": "<24.05.1", "starcitizentools/citizen-skin": ">=2.6.3,<2.31", - "statamic/cms": "<4.46|>=5.3,<5.6.2", + "statamic/cms": "<=5.16", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<=2.1.64", "studiomitte/friendlycaptcha": "<0.1.4", @@ -5596,7 +5596,7 @@ "type": "tidelift" } ], - "time": "2024-11-19T00:20:23+00:00" + "time": "2024-11-19T21:04:39+00:00" }, { "name": "sebastian/diff", diff --git a/cute.ts b/cute.ts new file mode 100644 index 00000000..11829959 --- /dev/null +++ b/cute.ts @@ -0,0 +1,22 @@ +const etapes = [ + "┌(・ω・)┘", + "└(・ω・)┐", + "┌(;・ω・)┘", + "└(;・ω・)┐", + "┌(;・ω・;)┘", + "└(;・ω・;)┐", +]; +const assigneTexte = (texte: string): void => ELEMENTS.BOUTON_CODE_PROMO.textContent = texte; +let index = 0; +const z = {}; +const callback = () => { + if (!ELEMENTS.BOUTON_CODE_PROMO.hasAttribute(ATTRIBUT_CHARGEMENT)) { + ELEMENTS.BOUTON_CODE_PROMO.textContent = "Apply"; + clearInterval(z.interval); + } + + assigneTexte(etapes.at(index) ?? "Loading..."); + index = index + 1 === etapes.length - 1 ? 0 : index + 1; +}; +callback(); +z.interval = setInterval(callback, 500); diff --git a/package.json b/package.json index 13ac67cc..a8c7028f 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,10 @@ "packageManager": "pnpm@9.13.2", "main": "index.js", "keywords": [], - "scripts": { "knip": "knip", "test": "echo \"Error: no test specified\" && exit 1" }, + "scripts": { + "knip": "knip", + "test": "echo \"Error: no test specified\" && exit 1" + }, "dependencies": { "@mobily/ts-belt": "4.0.0-rc.5", "@sentry/browser": "8.39.0", @@ -26,16 +29,16 @@ "@sentry/types": "8.39.0", "@swc/cli": "0.5.1", "@types/eslint__js": "^8.42.3", - "@types/node": "^22.9.0", + "@types/node": "^22.9.1", "better-typescript-lib": "^2.9.0", "browserslist": "^4.24.2", "eslint": "^9.15.0", - "eslint-plugin-oxlint": "^0.11.1", - "eslint-plugin-perfectionist": "^4.0.2", + "eslint-plugin-oxlint": "^0.12.0", + "eslint-plugin-perfectionist": "^4.0.3", "fdir": "^6.4.2", "globals": "^15.12.0", "knip": "^5.37.1", - "oxlint": "^0.11.1", + "oxlint": "^0.12.0", "picomatch": "^4.0.2", "prettier": "^3.3.3", "prettier-plugin-pkg": "^0.18.1", @@ -53,7 +56,7 @@ "vite-plugin-manifest-sri": "^0.2.0", "vite-plugin-node-polyfills": "^0.22.0", "vite-plugin-valibot-env": "^0.8.7", - "vite-tsconfig-paths": "^5.1.2", + "vite-tsconfig-paths": "^5.1.3", "wp-types": "^4.67.0" }, "browserslist": [ @@ -66,8 +69,15 @@ "ios >0 and last 3 years" ], "knip": { - "entry": ["web/app/themes/haiku-atelier-2024/src/scripts/*.ts"], - "project": ["web/app/themes/haiku-atelier-2024/src/scripts/**/*.{js,ts,d.ts}"] + "entry": [ + "web/app/themes/haiku-atelier-2024/src/scripts/*.ts" + ], + "project": [ + "web/app/themes/haiku-atelier-2024/src/scripts/**/*.{js,ts,d.ts}" + ] }, - "trustedDependencies": ["@biomejs/biome", "@parcel/watcher"] + "trustedDependencies": [ + "@biomejs/biome", + "@parcel/watcher" + ] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c88b6dc1..d9e3dfea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -52,8 +52,8 @@ importers: specifier: ^8.42.3 version: 8.42.3 '@types/node': - specifier: ^22.9.0 - version: 22.9.0 + specifier: ^22.9.1 + version: 22.9.1 better-typescript-lib: specifier: ^2.9.0 version: 2.9.0(typescript@5.7.0-dev.20241105) @@ -64,11 +64,11 @@ importers: specifier: ^9.15.0 version: 9.15.0(jiti@2.4.0) eslint-plugin-oxlint: - specifier: ^0.11.1 - version: 0.11.1 + specifier: ^0.12.0 + version: 0.12.0 eslint-plugin-perfectionist: - specifier: ^4.0.2 - version: 4.0.2(eslint@9.15.0(jiti@2.4.0))(typescript@5.7.0-dev.20241105) + specifier: ^4.0.3 + version: 4.0.3(eslint@9.15.0(jiti@2.4.0))(typescript@5.7.0-dev.20241105) fdir: specifier: ^6.4.2 version: 6.4.2(picomatch@4.0.2) @@ -77,10 +77,10 @@ importers: version: 15.12.0 knip: specifier: ^5.37.1 - version: 5.37.1(@types/node@22.9.0)(typescript@5.7.0-dev.20241105) + version: 5.37.1(@types/node@22.9.1)(typescript@5.7.0-dev.20241105) oxlint: - specifier: ^0.11.1 - version: 0.11.1 + specifier: ^0.12.0 + version: 0.12.0 picomatch: specifier: ^4.0.2 version: 4.0.2 @@ -122,19 +122,19 @@ importers: version: 8.15.0(eslint@9.15.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-embedded@1.81.0)(sass@1.80.6) + version: 5.4.11(@types/node@22.9.1)(sass-embedded@1.81.0)(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.27.3)(vite@5.4.11(@types/node@22.9.0)(sass-embedded@1.81.0)(sass@1.80.6)) + version: 0.22.0(rollup@4.27.3)(vite@5.4.11(@types/node@22.9.1)(sass-embedded@1.81.0)(sass@1.80.6)) vite-plugin-valibot-env: specifier: ^0.8.7 - version: 0.8.7(valibot@1.0.0-beta.7(typescript@5.7.0-dev.20241105))(vite@5.4.11(@types/node@22.9.0)(sass-embedded@1.81.0)(sass@1.80.6)) + version: 0.8.7(valibot@1.0.0-beta.7(typescript@5.7.0-dev.20241105))(vite@5.4.11(@types/node@22.9.1)(sass-embedded@1.81.0)(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-embedded@1.81.0)(sass@1.80.6)) + specifier: ^5.1.3 + version: 5.1.3(typescript@5.7.0-dev.20241105)(vite@5.4.11(@types/node@22.9.1)(sass-embedded@1.81.0)(sass@1.80.6)) wp-types: specifier: ^4.67.0 version: 4.67.0 @@ -622,43 +622,43 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxlint/darwin-arm64@0.11.1': - resolution: {integrity: sha512-S+cHn49fT+qSJXhQ3Z4EG/5ENp2dAUbS2sMNkhgkLqlO8aYl0TR9R7omU3vpU/beu8ePnV+mdVlJYGjsPIMGtg==} + '@oxlint/darwin-arm64@0.12.0': + resolution: {integrity: sha512-UydkjcAImpmBn8JYaMPg0zJrwgWJMGvJagvCnyPfyiBRWAN83Kq+BDgJZgIq+2Te6kvlnoiHWNJKVJmpy0f0BA==} cpu: [arm64] os: [darwin] - '@oxlint/darwin-x64@0.11.1': - resolution: {integrity: sha512-LPuF0D8uu30KIVEeVuGwIPwHwJRQ1i1otwFFH7tRsNXPgMgZJ4VgriyH22i6RWwBtclJoCSBLtGK6gLZ0oZBvw==} + '@oxlint/darwin-x64@0.12.0': + resolution: {integrity: sha512-bxLyiAiHzXB56w7cf50YNPpZlK+PMxA8GgHutRSoNK/Z/BR/xsibNLs/9YNUnjHB+PF19+EbIRtJxoHjmbRr8g==} cpu: [x64] os: [darwin] - '@oxlint/linux-arm64-gnu@0.11.1': - resolution: {integrity: sha512-CYBE+GRIPs5e+raD2pdicuBn6Y6E1xAnyWQ/kHE4GEWDAQZY0Um2VYEUTGH2ObwJ3uXr6jeJ16HOKJvr0S8a8w==} + '@oxlint/linux-arm64-gnu@0.12.0': + resolution: {integrity: sha512-jVkmfoMjPKFDIZySmpykwrCmx5xhpLJdMpUAR8ycEkFRJFp5qKLWZd6cEjiMb7gxmWN6qcCvDVTF/zEs3aRpyQ==} cpu: [arm64] os: [linux] - '@oxlint/linux-arm64-musl@0.11.1': - resolution: {integrity: sha512-iYXF5N5Gv+lc2wt90kxXy/W0cn7IEWu3UPzewIjPGDH8ajDckvGzZx6pTGYJnTyMh7U6hUKwOBFPVLMWI7UwKQ==} + '@oxlint/linux-arm64-musl@0.12.0': + resolution: {integrity: sha512-8VdV1nKYDj7AFaw1a03Ih43/+pUS/hhMZbTFLRMpvlVp1cPtdB77c+bl/OdiJ/BwNTzLIzr/GrospwCoEJkQKg==} cpu: [arm64] os: [linux] - '@oxlint/linux-x64-gnu@0.11.1': - resolution: {integrity: sha512-D0tT8X0CsK/bpdkGdLSmsGftG3VndjyAUJuNGt56JYn0UfuPDkhQcLgUlkANHzNRXJ84tLQKhpf/MUDUHPB5cg==} + '@oxlint/linux-x64-gnu@0.12.0': + resolution: {integrity: sha512-MacAt8N4XU5DeoHcseXLom/z+B0seecCz8vGAH4ppF2EH49o7NbN7VvFsw2nZ2QNO/4vw+pdS1BHXLTr9lY6zQ==} cpu: [x64] os: [linux] - '@oxlint/linux-x64-musl@0.11.1': - resolution: {integrity: sha512-WekaLYk8WLT7Di8+nyPvtqs9OlMoO6KjFDMlqqLDWQTk9ffjn8e76PCRigF3w39jQ70qP3c8k8cNKNw5ROuFcg==} + '@oxlint/linux-x64-musl@0.12.0': + resolution: {integrity: sha512-/ZBDJ9wpUE6bB05nniQl29kD5vJUMg6n75LdHD8F6ThXfsHGI/n7Je3gzggnXokgf9UQpTUPWrWlfEuWVCBMag==} cpu: [x64] os: [linux] - '@oxlint/win32-arm64@0.11.1': - resolution: {integrity: sha512-/CN/bFtI33vB8uemOkZxlNRf6Q7CftP2pSO7a6Q2niG4NC99YRPj7ctXcPF0jGR0NQUhGZk7ajM4G/0MKcRdag==} + '@oxlint/win32-arm64@0.12.0': + resolution: {integrity: sha512-hY1ya9dv8VY8113YSSDfMs/989aFmoA2fIZco8uxTxIEVl9nGY6tDtpgKZqUIiGrrMbDO8BBb1G5jsekmfexbA==} cpu: [arm64] os: [win32] - '@oxlint/win32-x64@0.11.1': - resolution: {integrity: sha512-0hLl0z6adYTvLIOPC5uyo+EAwNITkzi4AY4xImykQW8H89GhiV9Xl8MPJeZQMWSz7ajI1I2+hRsvA0QAzeBsxA==} + '@oxlint/win32-x64@0.12.0': + resolution: {integrity: sha512-NHLJolo4sZk3nu/bPNuaJ+6p5DdHoRuZAjyuSO6CnLgpmZcYqx7LgngA/x2oB/bLgi4Hv9twjHjODc5Ce5o14g==} cpu: [x64] os: [win32] @@ -1028,8 +1028,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@22.9.0': - resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + '@types/node@22.9.1': + resolution: {integrity: sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==} '@typescript-eslint/eslint-plugin@8.15.0': resolution: {integrity: sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==} @@ -1504,11 +1504,11 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-plugin-oxlint@0.11.1: - resolution: {integrity: sha512-FcPCoFMipwg0a+tUCWhx/mJFW+RkZtFkvbFVwmMW172NyvjifdNaMWAduB8qRczFEHWAElHG/nB+3L8ylMC6mQ==} + eslint-plugin-oxlint@0.12.0: + resolution: {integrity: sha512-D/NhQrgjBbTb0pfCy0/upPzrhyy8OadHitYD317ZMru9RlpCfz5PkQQnb1qOSPWIu1+1MtRMs/aL4zN11M3TPQ==} - eslint-plugin-perfectionist@4.0.2: - resolution: {integrity: sha512-zWdgyg2SdHqhp/P9d9vKwo5qD9is28xMAGzBslHqkZz5mVIikjyz1qvuJ4yS7Wrsf4KlbGorORefb4Kbe7Puzg==} + eslint-plugin-perfectionist@4.0.3: + resolution: {integrity: sha512-CyafnreF6boy4lf1XaF72U8NbkwrfjU/mOf1y6doaDMS9zGXhUU1DSk+ZPf/rVwCf1PL1m+rhHqFs+IcB8kDmA==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: eslint: '>=8.0.0' @@ -2112,8 +2112,8 @@ packages: os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} - oxlint@0.11.1: - resolution: {integrity: sha512-yVTkBmSvn1mo69vxBdNASOGFd1oqWzpaIWPFPIXNAHxgrW7FjotKuJ71j/pqtZH/sVSRWTpQFdmBa3CIuBEILg==} + oxlint@0.12.0: + resolution: {integrity: sha512-M0vWq8KYtp4vpweRxcdCiVO8QFwzoRyp5bWTMrEL/0Z+GDKCMJltac7H3T3T09FIiktOZLvID733d7OcKk/caw==} engines: {node: '>=14.*'} hasBin: true @@ -2228,6 +2228,10 @@ packages: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} + postcss-selector-parser@7.0.0: + resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} + engines: {node: '>=4'} + postcss-sorting@8.0.2: resolution: {integrity: sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==} peerDependencies: @@ -2685,8 +2689,8 @@ packages: peerDependencies: stylelint: ^14.0.0 || ^15.0.0 || ^16.0.0 - stylelint-scss@6.9.0: - resolution: {integrity: sha512-oWOR+g6ccagfrENecImGmorWWjVyWpt2R8bmkhOW8FkNNPGStZPQMqb8QWMW4Lwu9TyPqmyjHkkAsy3weqsnNw==} + stylelint-scss@6.10.0: + resolution: {integrity: sha512-y03if6Qw9xBMoVaf7tzp5BbnYhYvudIKzURkhSHzcHG0bW0fAYvQpTUVJOe7DyhHaxeThBil4ObEMvGbV7+M+w==} engines: {node: '>=18.12.0'} peerDependencies: stylelint: ^16.0.2 @@ -2859,8 +2863,8 @@ packages: valibot: '>=0.30 <=0.42 || >=1.0.0-beta.0 <=1.0.0-beta.7' vite: '>=2 <=6.0.0-beta.10' - vite-tsconfig-paths@5.1.2: - resolution: {integrity: sha512-gEIbKfJzSEv0yR3XS2QEocKetONoWkbROj6hGx0FHM18qKUojhvcokQsxQx5nMkelZq2n37zbSGCJn+FSODSjA==} + vite-tsconfig-paths@5.1.3: + resolution: {integrity: sha512-0bz+PDlLpGfP2CigeSKL9NFTF1KtXkeHGZSSaGQSuPZH77GhoiQaA8IjYgOaynSuwlDTolSUEU0ErVvju3NURg==} peerDependencies: vite: '*' peerDependenciesMeta: @@ -3286,28 +3290,28 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@oxlint/darwin-arm64@0.11.1': + '@oxlint/darwin-arm64@0.12.0': optional: true - '@oxlint/darwin-x64@0.11.1': + '@oxlint/darwin-x64@0.12.0': optional: true - '@oxlint/linux-arm64-gnu@0.11.1': + '@oxlint/linux-arm64-gnu@0.12.0': optional: true - '@oxlint/linux-arm64-musl@0.11.1': + '@oxlint/linux-arm64-musl@0.12.0': optional: true - '@oxlint/linux-x64-gnu@0.11.1': + '@oxlint/linux-x64-gnu@0.12.0': optional: true - '@oxlint/linux-x64-musl@0.11.1': + '@oxlint/linux-x64-musl@0.12.0': optional: true - '@oxlint/win32-arm64@0.11.1': + '@oxlint/win32-arm64@0.12.0': optional: true - '@oxlint/win32-x64@0.11.1': + '@oxlint/win32-x64@0.12.0': optional: true '@parcel/watcher-android-arm64@2.5.0': @@ -3610,7 +3614,7 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/node@22.9.0': + '@types/node@22.9.1': dependencies: undici-types: 6.19.8 @@ -4216,11 +4220,11 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-plugin-oxlint@0.11.1: + eslint-plugin-oxlint@0.12.0: dependencies: jsonc-parser: 3.3.1 - eslint-plugin-perfectionist@4.0.2(eslint@9.15.0(jiti@2.4.0))(typescript@5.7.0-dev.20241105): + eslint-plugin-perfectionist@4.0.3(eslint@9.15.0(jiti@2.4.0))(typescript@5.7.0-dev.20241105): dependencies: '@typescript-eslint/types': 8.15.0 '@typescript-eslint/utils': 8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.7.0-dev.20241105) @@ -4642,11 +4646,11 @@ snapshots: kleur@4.1.5: {} - knip@5.37.1(@types/node@22.9.0)(typescript@5.7.0-dev.20241105): + knip@5.37.1(@types/node@22.9.1)(typescript@5.7.0-dev.20241105): dependencies: '@nodelib/fs.walk': 1.2.8 '@snyk/github-codeowners': 1.1.0 - '@types/node': 22.9.0 + '@types/node': 22.9.1 easy-table: 1.2.0 enhanced-resolve: 5.17.1 fast-glob: 3.3.2 @@ -4833,16 +4837,16 @@ snapshots: os-browserify@0.3.0: {} - oxlint@0.11.1: + oxlint@0.12.0: optionalDependencies: - '@oxlint/darwin-arm64': 0.11.1 - '@oxlint/darwin-x64': 0.11.1 - '@oxlint/linux-arm64-gnu': 0.11.1 - '@oxlint/linux-arm64-musl': 0.11.1 - '@oxlint/linux-x64-gnu': 0.11.1 - '@oxlint/linux-x64-musl': 0.11.1 - '@oxlint/win32-arm64': 0.11.1 - '@oxlint/win32-x64': 0.11.1 + '@oxlint/darwin-arm64': 0.12.0 + '@oxlint/darwin-x64': 0.12.0 + '@oxlint/linux-arm64-gnu': 0.12.0 + '@oxlint/linux-arm64-musl': 0.12.0 + '@oxlint/linux-x64-gnu': 0.12.0 + '@oxlint/linux-x64-musl': 0.12.0 + '@oxlint/win32-arm64': 0.12.0 + '@oxlint/win32-x64': 0.12.0 p-cancelable@3.0.0: {} @@ -4939,6 +4943,11 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss-selector-parser@7.0.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-sorting@8.0.2(postcss@8.4.49): dependencies: postcss: 8.4.49 @@ -5331,7 +5340,7 @@ snapshots: postcss-scss: 4.0.9(postcss@8.4.49) stylelint: 16.10.0(typescript@5.7.0-dev.20241105) stylelint-config-recommended: 14.0.1(stylelint@16.10.0(typescript@5.7.0-dev.20241105)) - stylelint-scss: 6.9.0(stylelint@16.10.0(typescript@5.7.0-dev.20241105)) + stylelint-scss: 6.10.0(stylelint@16.10.0(typescript@5.7.0-dev.20241105)) optionalDependencies: postcss: 8.4.49 @@ -5345,7 +5354,7 @@ snapshots: postcss: 8.4.49 postcss-scss: 4.0.9(postcss@8.4.49) stylelint: 16.10.0(typescript@5.7.0-dev.20241105) - stylelint-scss: 6.9.0(stylelint@16.10.0(typescript@5.7.0-dev.20241105)) + stylelint-scss: 6.10.0(stylelint@16.10.0(typescript@5.7.0-dev.20241105)) stylelint-config-standard-scss@13.1.0(postcss@8.4.49)(stylelint@16.10.0(typescript@5.7.0-dev.20241105)): dependencies: @@ -5374,7 +5383,7 @@ snapshots: dependencies: stylelint: 16.10.0(typescript@5.7.0-dev.20241105) - stylelint-scss@6.9.0(stylelint@16.10.0(typescript@5.7.0-dev.20241105)): + stylelint-scss@6.10.0(stylelint@16.10.0(typescript@5.7.0-dev.20241105)): dependencies: css-tree: 3.0.1 is-plain-object: 5.0.0 @@ -5382,7 +5391,7 @@ snapshots: mdn-data: 2.12.2 postcss-media-query-parser: 0.2.3 postcss-resolve-nested-selector: 0.1.6 - postcss-selector-parser: 6.1.2 + postcss-selector-parser: 7.0.0 postcss-value-parser: 4.2.0 stylelint: 16.10.0(typescript@5.7.0-dev.20241105) @@ -5563,39 +5572,39 @@ snapshots: vite-plugin-manifest-sri@0.2.0: {} - vite-plugin-node-polyfills@0.22.0(rollup@4.27.3)(vite@5.4.11(@types/node@22.9.0)(sass-embedded@1.81.0)(sass@1.80.6)): + vite-plugin-node-polyfills@0.22.0(rollup@4.27.3)(vite@5.4.11(@types/node@22.9.1)(sass-embedded@1.81.0)(sass@1.80.6)): dependencies: '@rollup/plugin-inject': 5.0.5(rollup@4.27.3) node-stdlib-browser: 1.2.1 - vite: 5.4.11(@types/node@22.9.0)(sass-embedded@1.81.0)(sass@1.80.6) + vite: 5.4.11(@types/node@22.9.1)(sass-embedded@1.81.0)(sass@1.80.6) transitivePeerDependencies: - rollup - vite-plugin-valibot-env@0.8.7(valibot@1.0.0-beta.7(typescript@5.7.0-dev.20241105))(vite@5.4.11(@types/node@22.9.0)(sass-embedded@1.81.0)(sass@1.80.6)): + vite-plugin-valibot-env@0.8.7(valibot@1.0.0-beta.7(typescript@5.7.0-dev.20241105))(vite@5.4.11(@types/node@22.9.1)(sass-embedded@1.81.0)(sass@1.80.6)): dependencies: kleur: 4.1.5 log-symbols: 7.0.0 valibot: 1.0.0-beta.7(typescript@5.7.0-dev.20241105) - vite: 5.4.11(@types/node@22.9.0)(sass-embedded@1.81.0)(sass@1.80.6) + vite: 5.4.11(@types/node@22.9.1)(sass-embedded@1.81.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.81.0)(sass@1.80.6)): + vite-tsconfig-paths@5.1.3(typescript@5.7.0-dev.20241105)(vite@5.4.11(@types/node@22.9.1)(sass-embedded@1.81.0)(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-embedded@1.81.0)(sass@1.80.6) + vite: 5.4.11(@types/node@22.9.1)(sass-embedded@1.81.0)(sass@1.80.6) transitivePeerDependencies: - supports-color - typescript - vite@5.4.11(@types/node@22.9.0)(sass-embedded@1.81.0)(sass@1.80.6): + vite@5.4.11(@types/node@22.9.1)(sass-embedded@1.81.0)(sass@1.80.6): dependencies: esbuild: 0.21.5 postcss: 8.4.49 rollup: 4.27.3 optionalDependencies: - '@types/node': 22.9.0 + '@types/node': 22.9.1 fsevents: 2.3.3 sass: 1.80.6 sass-embedded: 1.81.0 diff --git a/web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.css b/web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.css index 4d3484fa..4a46a3d0 100644 --- a/web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.css +++ b/web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.css @@ -1,38 +1,30 @@ @charset "UTF-8"; - #panneau-panier { border-right: 1px solid var(--couleur-noir); } - #panneau-panier > div { place-content: center; } - #panneau-panier .panneau__grille-produits { display: flex; flex-flow: column nowrap; } - #panneau-panier .panneau__grille-produits__produit { display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr; border-bottom: 1px solid var(--couleur-noir); } - #panneau-panier .panneau__grille-produits__produit__illustratif { border-right: 1px solid var(--couleur-noir); } - #panneau-panier .panneau__grille-produits__produit__illustratif picture { overflow: hidden; } - #panneau-panier .panneau__grille-produits__produit__illustratif img { aspect-ratio: 1; height: auto; } - #panneau-panier .panneau__grille-produits .detail-produit { display: flex; flex-flow: column nowrap; @@ -42,7 +34,6 @@ padding: 0 var(--espace-xl); font-style: italic; } - #panneau-panier .panneau__grille-produits .detail-produit__nom-prix { display: flex; flex-flow: row nowrap; @@ -51,37 +42,29 @@ font-size: var(--espace-l); line-height: var(--hauteur-ligne-moitie); } - #panneau-panier .panneau__grille-produits .detail-produit__nom-prix span { min-width: 4rem; font-weight: 600; font-style: initial; } - #panneau-panier .panneau__grille-produits .detail-produit__description { margin-bottom: var(--espace-l); text-transform: lowercase; } - #panneau-panier .panneau__grille-produits .detail-produit__actions { display: grid; grid-template-columns: 0.25fr auto 0.25fr; grid-template-rows: 1fr 1fr; font-weight: 500; font-style: initial; - /* Bouton d'addition de quantité */ - /* * 1. Cache les flèches d'augmentation/diminution sur Firefox. * 2. Cache les flèches d'augmentation/diminution sur Chrome/Edge/Safari. */ - /* Bouton de suppression de quantité */ - /* Bouton de suppression du Produit du Panier */ } - #panneau-panier .panneau__grille-produits .detail-produit__actions button:first-of-type { grid-column: 1; min-width: 3rem; @@ -89,8 +72,7 @@ border: 1px solid var(--couleur-noir); border-bottom: initial; } - -#panneau-panier .panneau__grille-produits .detail-produit__actions input[type="number"] { +#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number] { grid-column: 2; width: 100%; text-align: center; @@ -98,12 +80,10 @@ border: initial; border-top: 1px solid var(--couleur-noir); } - -#panneau-panier .panneau__grille-produits .detail-produit__actions input[type="number"]::-webkit-outer-spin-button, #panneau-panier .panneau__grille-produits .detail-produit__actions input[type="number"]::-webkit-inner-spin-button { +#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number]::-webkit-outer-spin-button, #panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number]::-webkit-inner-spin-button { margin: 0; /* 2 */ appearance: none; /* 2 */ } - #panneau-panier .panneau__grille-produits .detail-produit__actions button:nth-of-type(2) { grid-column: 3; min-width: 3rem; @@ -111,7 +91,6 @@ border: 1px solid var(--couleur-noir); border-bottom: initial; } - #panneau-panier .panneau__grille-produits .detail-produit__actions button:last-of-type { grid-column: span 3; grid-row: 2; @@ -119,19 +98,16 @@ text-transform: lowercase; border: 1px solid var(--couleur-noir); } - #panneau-panier .panneau__instructions-code-promo { width: 100%; padding: var(--espace-l) var(--espace-xl); text-align: center; border-bottom: 1px solid var(--couleur-noir); - /* * 1. Nécessaire pour ne pas qu'un espace vertical non souhaité apparaisse. * 2. Applique une marge entre les instructions et le code promo de notre choix. */ } - #panneau-panier .panneau__instructions-code-promo__instructions { resize: vertical; display: block; /* 1 */ @@ -144,52 +120,52 @@ background: initial; border: 1px solid transparent; } - #panneau-panier .panneau__instructions-code-promo__code-promo { display: flex; - flex-flow: row nowrap; + flex-flow: row wrap; width: fit-content; + place-content: center; margin: auto; + /* + * 1. Longueur minimale pour le Bouton n'ait pas à changer de taille quel que soit son texte + */ } - #panneau-panier .panneau__instructions-code-promo__code-promo input { width: 20rem; } - #panneau-panier .panneau__instructions-code-promo__code-promo button { padding: var(--espace-xs) var(--espace-xl); text-transform: lowercase; border: 1px solid var(--couleur-noir); border-left: initial; + min-width: 9rem; /* 1 */ +} +#panneau-panier .panneau__instructions-code-promo__code-promo__message { + margin-top: var(--espace-m); + flex-basis: 100%; } - #panneau-panier .panneau__sous-totaux { width: min(30rem, 100%); margin: auto; padding: var(--espace-l) var(--espace-xl); text-align: center; } - #panneau-panier .panneau__sous-totaux__ligne { display: flex; flex-flow: row nowrap; justify-content: space-between; font-style: italic; } - #panneau-panier .panneau__sous-totaux__ligne strong { text-align: right; text-transform: lowercase; } - #panneau-panier .panneau__sous-totaux__ligne#sous-total-livraison p:last-of-type { text-align: right; } - #panneau-panier .panneau__sous-totaux__ligne#sous-total-livraison p:last-of-type span { color: grey; } - #panneau-panier .panneau__sous-totaux__conditions-livraison { margin-top: var(--espace-l); font-size: 0.8rem; @@ -197,7 +173,6 @@ color: grey; letter-spacing: var(--espacement-inter-lettres-etendu-s); } - #panneau-panier .panneau__pied-de-page { align-content: center; padding: var(--espace-l) 0; @@ -209,7 +184,6 @@ letter-spacing: 2px; background: var(--couleur-noir); } - #panneau-panier .panneau__pied-de-page span { margin-left: var(--espace-l); font-style: initial; @@ -221,27 +195,22 @@ right: 0; height: fit-content; } - #panneau-informations-client > * { align-content: center; text-align: center; } - #panneau-informations-client .panneau__paypal-express { --hauteur-images-bouton: 18px; --hauteur-bouton: calc(var(--hauteur-images-bouton) * 2); --longueur-bouton: 250px; --espacement-inter-images: var(--espace-xs); - padding: var(--espace-xl); border-bottom: 1px solid var(--couleur-noir); } - #panneau-informations-client .panneau__paypal-express p { margin-bottom: var(--espace-s); font-style: italic; } - #panneau-informations-client .panneau__paypal-express button { display: flex; column-gap: var(--espacement-inter-images); @@ -252,20 +221,16 @@ margin: auto; background: var(--couleur-noir); } - #panneau-informations-client .panneau__paypal-express button img { height: var(--hauteur-images-bouton); background: inherit; } - #panneau-informations-client .panneau__paypal-express button img:first-of-type { margin-top: -1px; } - #panneau-informations-client .panneau__formulaires { padding: var(--espace-xl) 0; } - #panneau-informations-client .panneau__formulaires .panneau__formulaires__separation-adresses { position: relative; display: flex; @@ -278,11 +243,9 @@ font-size: 0.8rem; font-style: italic; } - #panneau-informations-client .panneau__formulaires .panneau__formulaires__separation-adresses label { text-transform: lowercase; } - #panneau-informations-client .panneau__formulaires .panneau__formulaires__paiement .formulaire__paiement__attente-renseignement-formulaires { align-content: center; width: 100%; @@ -292,20 +255,16 @@ color: grey; text-align: center; } - #panneau-informations-client .panneau__formulaires .panneau__formulaires__paiement .formulaire__paiement__attente-renseignement-formulaires p + p { margin-top: 1lh; } - #panneau-informations-client .formulaire { margin: auto; padding: 0 var(--espace-xl); } - #panneau-informations-client .formulaire + .formulaire { margin-top: var(--espace-xl); } - #panneau-informations-client .formulaire .formulaire__titre { margin-bottom: var(--espace-m); font-size: 1.25rem; @@ -313,13 +272,11 @@ font-style: italic; letter-spacing: 1px; } - #panneau-informations-client .formulaire .formulaire__champs { width: fit-content; margin: auto; text-align: left; } - #panneau-informations-client .formulaire .formulaire__champs .formulaire__champs__champ { display: flex; flex-flow: row nowrap; @@ -327,25 +284,20 @@ place-items: center; justify-content: space-between; } - #panneau-informations-client .formulaire .formulaire__champs .formulaire__champs__champ + .formulaire__champs__champ { margin-top: var(--espace-l); } - #panneau-informations-client .formulaire label { width: 7rem; font-weight: 400; text-transform: lowercase; } - #panneau-informations-client .formulaire label:has(+ :is(input:required, select:required)) { font-weight: 600; } - #panneau-informations-client .formulaire input { width: 15rem; } - #panneau-informations-client .panneau__pied-de-page { align-content: center; padding: var(--espace-l) 0; @@ -357,7 +309,6 @@ letter-spacing: 2px; background: var(--couleur-noir); } - #panneau-informations-client .panneau__pied-de-page button { font: inherit; color: inherit; @@ -371,24 +322,20 @@ #page-panier { /* Dimensions */ --menu-section-hauteur: var(--menu-categories-produits-hauteur); - /* Marges */ --menu-section-marges-bloc-debut: var(--en-tete-hauteur); /* 1 */ - position: relative; display: flex; flex-flow: row wrap; min-height: calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur)); margin-top: var(--menu-section-marges-bloc-debut); } - #page-panier .panneau { flex: 1 1 30rem; min-width: 30rem; border-top: 1px solid var(--couleur-noir); border-bottom: 1px solid var(--couleur-noir); } - #page-panier .panneau__en-tete { position: sticky; z-index: 2; @@ -401,7 +348,6 @@ text-align: center; background: var(--couleur-noir); } - #page-panier .panneau__en-tete h2 { font-weight: 450; font-style: italic; @@ -410,7 +356,6 @@ letter-spacing: 1px; background: var(--couleur-noir); } - #page-panier .panier-vide { display: none; flex-basis: 100%; @@ -418,21 +363,19 @@ min-height: calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur)); text-align: center; } - #page-panier .panier-vide p { font-size: 1.25rem; } - #page-panier .panier-vide a { display: inline-block; margin-top: var(--espace-m); font-size: initial; } - -#page-panier[data-contient-articles="false"] .panneau { +#page-panier[data-contient-articles=false] .panneau { display: none; } - -#page-panier[data-contient-articles="false"] .panier-vide { +#page-panier[data-contient-articles=false] .panier-vide { display: block; } + +/*# sourceMappingURL=page-panier.css.map */ diff --git a/web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.css.map b/web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.css.map index 27a11a8c..f4d79ebe 100644 --- a/web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.css.map +++ b/web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../../src/sass/layouts/_panneau-panier.scss","../../../src/sass/layouts/_panneau-informations-client.scss","../../../src/sass/pages/page-panier.scss"],"names":[],"mappings":";AAEA;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAIJ;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;AAEA;AASA;AAAA;AAAA;AAAA;AAkBA;AASA;;AAnCA;EACE;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAOR;EACE;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKA;EACE;;AAEA;EACE;;AAMR;EACE;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACtNN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIF;EAEE;EACA;EACA;EAGA;EAEA;EACA;;AAEA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAMN;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;;AAOV;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAIA;EACE;;AAKN;EACE;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AC1JN;AAAA;AAAA;AAAA;AAIA;AACE;EACA;AAEA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AAKF;EACE;;AAGF;EACE","file":"page-panier.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../../src/sass/layouts/_panneau-panier.scss","../../../src/sass/layouts/_panneau-informations-client.scss","../../../src/sass/pages/page-panier.scss"],"names":[],"mappings":";AAEA;EACE;;AAEA;EACE;;AAIF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAIJ;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;AAEA;AASA;AAAA;AAAA;AAAA;AAmBA;AASA;;AApCA;EACE;EACA;EACA;EACA;EACA;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;;AAOR;EACE;EACA;EACA;EACA;AAEA;AAAA;AAAA;AAAA;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;AAMA;AAAA;AAAA;;AAJA;EACE;;AAMF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKA;EACE;;AAEA;EACE;;AAMR;EACE;EACA;EACA;EACA;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACjON;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIF;EAEE;EACA;EACA;EAGA;EAEA;EACA;;AAEA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAMN;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;;AAOV;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAIA;EACE;;AAKN;EACE;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AC1JN;AAAA;AAAA;AAAA;AAIA;AACE;EACA;AAEA;EACA;EAEA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAKN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AAKF;EACE;;AAGF;EACE","file":"page-panier.css"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.min.css b/web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.min.css index 5f6e5c21..71d2e769 100644 --- a/web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.min.css +++ b/web/app/themes/haiku-atelier-2024/assets/css/pages/page-panier.min.css @@ -1 +1 @@ -#panneau-panier{border-right:1px solid var(--couleur-noir)}#panneau-panier>div{place-content:center}#panneau-panier .panneau__grille-produits{flex-flow:column;display:flex}#panneau-panier .panneau__grille-produits__produit{border-bottom:1px solid var(--couleur-noir);grid-template-rows:1fr;grid-template-columns:1fr 1fr;display:grid}#panneau-panier .panneau__grille-produits__produit__illustratif{border-right:1px solid var(--couleur-noir)}#panneau-panier .panneau__grille-produits__produit__illustratif picture{overflow:hidden}#panneau-panier .panneau__grille-produits__produit__illustratif img{aspect-ratio:1;height:auto}#panneau-panier .panneau__grille-produits .detail-produit{width:fit-content;padding:0 var(--espace-xl);flex-flow:column;place-content:center;margin:auto;font-style:italic;display:flex}#panneau-panier .panneau__grille-produits .detail-produit__nom-prix{column-gap:var(--espace-xl);font-size:var(--espace-l);line-height:var(--hauteur-ligne-moitie);flex-flow:row;justify-content:space-between;display:flex}#panneau-panier .panneau__grille-produits .detail-produit__nom-prix span{min-width:4rem;font-weight:600;font-style:initial}#panneau-panier .panneau__grille-produits .detail-produit__description{margin-bottom:var(--espace-l);text-transform:lowercase}#panneau-panier .panneau__grille-produits .detail-produit__actions{font-weight:500;font-style:initial;grid-template-rows:1fr 1fr;grid-template-columns:.25fr auto .25fr;display:grid}#panneau-panier .panneau__grille-produits .detail-produit__actions button:first-of-type{border:1px solid var(--couleur-noir);border-bottom:initial;grid-column:1;min-width:3rem;max-width:3rem}#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number]{text-align:center;appearance:textfield;border:initial;border-top:1px solid var(--couleur-noir);grid-column:2;width:100%}#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number]::-webkit-outer-spin-button,#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number]::-webkit-inner-spin-button{appearance:none;margin:0}#panneau-panier .panneau__grille-produits .detail-produit__actions button:nth-of-type(2){border:1px solid var(--couleur-noir);border-bottom:initial;grid-column:3;min-width:3rem;max-width:3rem}#panneau-panier .panneau__grille-produits .detail-produit__actions button:last-of-type{padding:var(--espace-xs);text-transform:lowercase;border:1px solid var(--couleur-noir);grid-area:2/span 3}#panneau-panier .panneau__instructions-code-promo{width:100%;padding:var(--espace-l)var(--espace-xl);text-align:center;border-bottom:1px solid var(--couleur-noir)}#panneau-panier .panneau__instructions-code-promo__instructions{resize:vertical;width:100%;margin:auto;margin-bottom:var(--espace-s);padding:var(--espace-s);background:initial;border:1px solid #0000;font-size:.8rem;font-weight:450;display:block}#panneau-panier .panneau__instructions-code-promo__code-promo{flex-flow:row;width:fit-content;margin:auto;display:flex}#panneau-panier .panneau__instructions-code-promo__code-promo input{width:20rem}#panneau-panier .panneau__instructions-code-promo__code-promo button{padding:var(--espace-xs)var(--espace-xl);text-transform:lowercase;border:1px solid var(--couleur-noir);border-left:initial}#panneau-panier .panneau__sous-totaux{width:min(30rem,100%);padding:var(--espace-l)var(--espace-xl);text-align:center;margin:auto}#panneau-panier .panneau__sous-totaux__ligne{flex-flow:row;justify-content:space-between;font-style:italic;display:flex}#panneau-panier .panneau__sous-totaux__ligne strong{text-align:right;text-transform:lowercase}#panneau-panier .panneau__sous-totaux__ligne#sous-total-livraison p:last-of-type{text-align:right}#panneau-panier .panneau__sous-totaux__ligne#sous-total-livraison p:last-of-type span{color:gray}#panneau-panier .panneau__sous-totaux__conditions-livraison{margin-top:var(--espace-l);color:gray;letter-spacing:var(--espacement-inter-lettres-etendu-s);font-size:.8rem;font-weight:450}#panneau-panier .panneau__pied-de-page{padding:var(--espace-l)0;color:var(--couleur-blanc);text-align:center;text-transform:uppercase;letter-spacing:2px;background:var(--couleur-noir);align-content:center;font-size:1.25rem;font-style:italic}#panneau-panier .panneau__pied-de-page span{margin-left:var(--espace-l);font-style:initial}#panneau-informations-client{top:var(--en-tete-hauteur);height:fit-content;position:sticky;right:0}#panneau-informations-client>*{text-align:center;align-content:center}#panneau-informations-client .panneau__paypal-express{--hauteur-images-bouton:18px;--hauteur-bouton:calc(var(--hauteur-images-bouton)*2);--longueur-bouton:250px;--espacement-inter-images:var(--espace-xs);padding:var(--espace-xl);border-bottom:1px solid var(--couleur-noir)}#panneau-informations-client .panneau__paypal-express p{margin-bottom:var(--espace-s);font-style:italic}#panneau-informations-client .panneau__paypal-express button{column-gap:var(--espacement-inter-images);width:var(--longueur-bouton);height:var(--hauteur-bouton);background:var(--couleur-noir);place-content:center;place-items:center;margin:auto;display:flex}#panneau-informations-client .panneau__paypal-express button img{height:var(--hauteur-images-bouton);background:inherit}#panneau-informations-client .panneau__paypal-express button img:first-of-type{margin-top:-1px}#panneau-informations-client .panneau__formulaires{padding:var(--espace-xl)0}#panneau-informations-client .panneau__formulaires .panneau__formulaires__separation-adresses{width:fit-content;margin:auto;margin-bottom:var(--espace-m);flex-flow:row;place-items:center;column-gap:1ch;font-size:.8rem;font-style:italic;display:flex;position:relative}#panneau-informations-client .panneau__formulaires .panneau__formulaires__separation-adresses label{text-transform:lowercase}#panneau-informations-client .panneau__formulaires .panneau__formulaires__paiement .formulaire__paiement__attente-renseignement-formulaires{color:gray;text-align:center;align-content:center;width:100%;padding:0;font-size:.8rem;font-weight:450}#panneau-informations-client .panneau__formulaires .panneau__formulaires__paiement .formulaire__paiement__attente-renseignement-formulaires p+p{margin-top:1lh}#panneau-informations-client .formulaire{padding:0 var(--espace-xl);margin:auto}#panneau-informations-client .formulaire+.formulaire{margin-top:var(--espace-xl)}#panneau-informations-client .formulaire .formulaire__titre{margin-bottom:var(--espace-m);letter-spacing:1px;font-size:1.25rem;font-style:italic;font-weight:600}#panneau-informations-client .formulaire .formulaire__champs{text-align:left;width:fit-content;margin:auto}#panneau-informations-client .formulaire .formulaire__champs .formulaire__champs__champ{column-gap:var(--espace-xl);flex-flow:row;justify-content:space-between;place-items:center;display:flex}#panneau-informations-client .formulaire .formulaire__champs .formulaire__champs__champ+.formulaire__champs__champ{margin-top:var(--espace-l)}#panneau-informations-client .formulaire label{text-transform:lowercase;width:7rem;font-weight:400}#panneau-informations-client .formulaire label:has(+:is(input:required,select:required)){font-weight:600}#panneau-informations-client .formulaire input{width:15rem}#panneau-informations-client .panneau__pied-de-page{padding:var(--espace-l)0;color:var(--couleur-blanc);text-align:center;text-transform:uppercase;letter-spacing:2px;background:var(--couleur-noir);align-content:center;font-size:1.25rem;font-style:italic}#panneau-informations-client .panneau__pied-de-page button{font:inherit;color:inherit;text-transform:inherit}#page-panier{--menu-section-hauteur:var(--menu-categories-produits-hauteur);--menu-section-marges-bloc-debut:var(--en-tete-hauteur);min-height:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur));margin-top:var(--menu-section-marges-bloc-debut);flex-flow:wrap;display:flex;position:relative}#page-panier .panneau{border-top:1px solid var(--couleur-noir);border-bottom:1px solid var(--couleur-noir);flex:30rem;min-width:30rem}#page-panier .panneau__en-tete{z-index:2;top:var(--menu-section-marges-bloc-debut);min-height:var(--menu-categories-produits-hauteur);max-height:var(--menu-categories-produits-hauteur);color:var(--couleur-gris);text-align:center;background:var(--couleur-noir);align-content:center;display:block;position:sticky}#page-panier .panneau__en-tete h2{color:var(--couleur-gris);text-transform:uppercase;letter-spacing:1px;background:var(--couleur-noir);font-style:italic;font-weight:450}#page-panier .panier-vide{min-height:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur));text-align:center;flex-basis:100%;align-content:center;display:none}#page-panier .panier-vide p{font-size:1.25rem}#page-panier .panier-vide a{margin-top:var(--espace-m);font-size:initial;display:inline-block}#page-panier[data-contient-articles=false] .panneau{display:none}#page-panier[data-contient-articles=false] .panier-vide{display:block} \ No newline at end of file +#panneau-panier{border-right:1px solid var(--couleur-noir)}#panneau-panier>div{place-content:center}#panneau-panier .panneau__grille-produits{flex-flow:column;display:flex}#panneau-panier .panneau__grille-produits__produit{border-bottom:1px solid var(--couleur-noir);grid-template-rows:1fr;grid-template-columns:1fr 1fr;display:grid}#panneau-panier .panneau__grille-produits__produit__illustratif{border-right:1px solid var(--couleur-noir)}#panneau-panier .panneau__grille-produits__produit__illustratif picture{overflow:hidden}#panneau-panier .panneau__grille-produits__produit__illustratif img{aspect-ratio:1;height:auto}#panneau-panier .panneau__grille-produits .detail-produit{width:fit-content;padding:0 var(--espace-xl);flex-flow:column;place-content:center;margin:auto;font-style:italic;display:flex}#panneau-panier .panneau__grille-produits .detail-produit__nom-prix{column-gap:var(--espace-xl);font-size:var(--espace-l);line-height:var(--hauteur-ligne-moitie);flex-flow:row;justify-content:space-between;display:flex}#panneau-panier .panneau__grille-produits .detail-produit__nom-prix span{min-width:4rem;font-weight:600;font-style:initial}#panneau-panier .panneau__grille-produits .detail-produit__description{margin-bottom:var(--espace-l);text-transform:lowercase}#panneau-panier .panneau__grille-produits .detail-produit__actions{font-weight:500;font-style:initial;grid-template-rows:1fr 1fr;grid-template-columns:.25fr auto .25fr;display:grid}#panneau-panier .panneau__grille-produits .detail-produit__actions button:first-of-type{border:1px solid var(--couleur-noir);border-bottom:initial;grid-column:1;min-width:3rem;max-width:3rem}#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number]{text-align:center;appearance:textfield;border:initial;border-top:1px solid var(--couleur-noir);grid-column:2;width:100%}#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number]::-webkit-outer-spin-button,#panneau-panier .panneau__grille-produits .detail-produit__actions input[type=number]::-webkit-inner-spin-button{appearance:none;margin:0}#panneau-panier .panneau__grille-produits .detail-produit__actions button:nth-of-type(2){border:1px solid var(--couleur-noir);border-bottom:initial;grid-column:3;min-width:3rem;max-width:3rem}#panneau-panier .panneau__grille-produits .detail-produit__actions button:last-of-type{padding:var(--espace-xs);text-transform:lowercase;border:1px solid var(--couleur-noir);grid-area:2/span 3}#panneau-panier .panneau__instructions-code-promo{width:100%;padding:var(--espace-l)var(--espace-xl);text-align:center;border-bottom:1px solid var(--couleur-noir)}#panneau-panier .panneau__instructions-code-promo__instructions{resize:vertical;width:100%;margin:auto;margin-bottom:var(--espace-s);padding:var(--espace-s);background:initial;border:1px solid #0000;font-size:.8rem;font-weight:450;display:block}#panneau-panier .panneau__instructions-code-promo__code-promo{flex-flow:wrap;place-content:center;width:fit-content;margin:auto;display:flex}#panneau-panier .panneau__instructions-code-promo__code-promo input{width:20rem}#panneau-panier .panneau__instructions-code-promo__code-promo button{padding:var(--espace-xs)var(--espace-xl);text-transform:lowercase;border:1px solid var(--couleur-noir);border-left:initial;min-width:9rem}#panneau-panier .panneau__instructions-code-promo__code-promo__message{margin-top:var(--espace-m);flex-basis:100%}#panneau-panier .panneau__sous-totaux{width:min(30rem,100%);padding:var(--espace-l)var(--espace-xl);text-align:center;margin:auto}#panneau-panier .panneau__sous-totaux__ligne{flex-flow:row;justify-content:space-between;font-style:italic;display:flex}#panneau-panier .panneau__sous-totaux__ligne strong{text-align:right;text-transform:lowercase}#panneau-panier .panneau__sous-totaux__ligne#sous-total-livraison p:last-of-type{text-align:right}#panneau-panier .panneau__sous-totaux__ligne#sous-total-livraison p:last-of-type span{color:gray}#panneau-panier .panneau__sous-totaux__conditions-livraison{margin-top:var(--espace-l);color:gray;letter-spacing:var(--espacement-inter-lettres-etendu-s);font-size:.8rem;font-weight:450}#panneau-panier .panneau__pied-de-page{padding:var(--espace-l)0;color:var(--couleur-blanc);text-align:center;text-transform:uppercase;letter-spacing:2px;background:var(--couleur-noir);align-content:center;font-size:1.25rem;font-style:italic}#panneau-panier .panneau__pied-de-page span{margin-left:var(--espace-l);font-style:initial}#panneau-informations-client{top:var(--en-tete-hauteur);height:fit-content;position:sticky;right:0}#panneau-informations-client>*{text-align:center;align-content:center}#panneau-informations-client .panneau__paypal-express{--hauteur-images-bouton:18px;--hauteur-bouton:calc(var(--hauteur-images-bouton)*2);--longueur-bouton:250px;--espacement-inter-images:var(--espace-xs);padding:var(--espace-xl);border-bottom:1px solid var(--couleur-noir)}#panneau-informations-client .panneau__paypal-express p{margin-bottom:var(--espace-s);font-style:italic}#panneau-informations-client .panneau__paypal-express button{column-gap:var(--espacement-inter-images);width:var(--longueur-bouton);height:var(--hauteur-bouton);background:var(--couleur-noir);place-content:center;place-items:center;margin:auto;display:flex}#panneau-informations-client .panneau__paypal-express button img{height:var(--hauteur-images-bouton);background:inherit}#panneau-informations-client .panneau__paypal-express button img:first-of-type{margin-top:-1px}#panneau-informations-client .panneau__formulaires{padding:var(--espace-xl)0}#panneau-informations-client .panneau__formulaires .panneau__formulaires__separation-adresses{width:fit-content;margin:auto;margin-bottom:var(--espace-m);flex-flow:row;place-items:center;column-gap:1ch;font-size:.8rem;font-style:italic;display:flex;position:relative}#panneau-informations-client .panneau__formulaires .panneau__formulaires__separation-adresses label{text-transform:lowercase}#panneau-informations-client .panneau__formulaires .panneau__formulaires__paiement .formulaire__paiement__attente-renseignement-formulaires{color:gray;text-align:center;align-content:center;width:100%;padding:0;font-size:.8rem;font-weight:450}#panneau-informations-client .panneau__formulaires .panneau__formulaires__paiement .formulaire__paiement__attente-renseignement-formulaires p+p{margin-top:1lh}#panneau-informations-client .formulaire{padding:0 var(--espace-xl);margin:auto}#panneau-informations-client .formulaire+.formulaire{margin-top:var(--espace-xl)}#panneau-informations-client .formulaire .formulaire__titre{margin-bottom:var(--espace-m);letter-spacing:1px;font-size:1.25rem;font-style:italic;font-weight:600}#panneau-informations-client .formulaire .formulaire__champs{text-align:left;width:fit-content;margin:auto}#panneau-informations-client .formulaire .formulaire__champs .formulaire__champs__champ{column-gap:var(--espace-xl);flex-flow:row;justify-content:space-between;place-items:center;display:flex}#panneau-informations-client .formulaire .formulaire__champs .formulaire__champs__champ+.formulaire__champs__champ{margin-top:var(--espace-l)}#panneau-informations-client .formulaire label{text-transform:lowercase;width:7rem;font-weight:400}#panneau-informations-client .formulaire label:has(+:is(input:required,select:required)){font-weight:600}#panneau-informations-client .formulaire input{width:15rem}#panneau-informations-client .panneau__pied-de-page{padding:var(--espace-l)0;color:var(--couleur-blanc);text-align:center;text-transform:uppercase;letter-spacing:2px;background:var(--couleur-noir);align-content:center;font-size:1.25rem;font-style:italic}#panneau-informations-client .panneau__pied-de-page button{font:inherit;color:inherit;text-transform:inherit}#page-panier{--menu-section-hauteur:var(--menu-categories-produits-hauteur);--menu-section-marges-bloc-debut:var(--en-tete-hauteur);min-height:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur));margin-top:var(--menu-section-marges-bloc-debut);flex-flow:wrap;display:flex;position:relative}#page-panier .panneau{border-top:1px solid var(--couleur-noir);border-bottom:1px solid var(--couleur-noir);flex:30rem;min-width:30rem}#page-panier .panneau__en-tete{z-index:2;top:var(--menu-section-marges-bloc-debut);min-height:var(--menu-categories-produits-hauteur);max-height:var(--menu-categories-produits-hauteur);color:var(--couleur-gris);text-align:center;background:var(--couleur-noir);align-content:center;display:block;position:sticky}#page-panier .panneau__en-tete h2{color:var(--couleur-gris);text-transform:uppercase;letter-spacing:1px;background:var(--couleur-noir);font-style:italic;font-weight:450}#page-panier .panier-vide{min-height:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur));text-align:center;flex-basis:100%;align-content:center;display:none}#page-panier .panier-vide p{font-size:1.25rem}#page-panier .panier-vide a{margin-top:var(--espace-m);font-size:initial;display:inline-block}#page-panier[data-contient-articles=false] .panneau{display:none}#page-panier[data-contient-articles=false] .panier-vide{display:block} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/.vite/manifest.json b/web/app/themes/haiku-atelier-2024/assets/js/.vite/manifest.json index c00e24d3..488df8b6 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/.vite/manifest.json +++ b/web/app/themes/haiku-atelier-2024/assets/js/.vite/manifest.json @@ -39,10 +39,10 @@ "name": "index", "integrity": "sha512-cxTw0sKKut2H95JwMgiKgEVLyZ0QswK/HydKTapcqcs3w6xHIHNUpYBLdRzEYdeRfHKUsA0kvPNBXBk/QeazjQ==" }, - "_index.DKC_Jv5v.js": { - "file": "index.DKC_Jv5v.js", + "_index.DxUTT09Y.js": { + "file": "index.DxUTT09Y.js", "name": "index", - "integrity": "sha512-FnNBV2ecIkPlV7wsbCaK1Hc8B4+HEgZvdZrMBVdKa7JAnwDm6gH9PpuM7z/KfTM6Ee+bDTJeyJnZbRpjOfvlLA==" + "integrity": "sha512-ktQDmsOsv0yimT9VIoz9bZriykTetX5qhLN5BMGkJXvqxj9Z1rKiZ1wbDVj3r6bWs4/S0PGPSJevtJyGx+vcow==" }, "_pipe.XPB0wEfw.js": { "file": "pipe.XPB0wEfw.js", @@ -68,7 +68,14 @@ "name": "dom", "src": "web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts", "isEntry": true, - "integrity": "sha512-xjjWPpOvFbqRaz8tTHQddCsAUitaALWYAqg54uc6zi1ZEMq3m4+DwuL6NtupZJj1yM52vGcALkzUaWIcmh2wqg==" + "integrity": "sha512-ldPkBLWjE77dp7raA0LauVQS11/w/N0RpOCtgmJu3PQfwEezQS4iVPnp10lZGduIClmliT7WPpbqrZchRTpITw==" + }, + "web/app/themes/haiku-atelier-2024/src/scripts/constantes/erreurs.ts": { + "file": "erreurs.js", + "name": "erreurs", + "src": "web/app/themes/haiku-atelier-2024/src/scripts/constantes/erreurs.ts", + "isEntry": true, + "integrity": "sha512-cXQkAzCU4YB9DhSISYUNfuR3eHjrl1TUQH2zyeCUL6FjuU7iLntlvYKMD1weSH4N9B0J+kd9Kf+aZQ8I7YgmWg==" }, "web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts": { "file": "messages3.js", @@ -114,17 +121,24 @@ "_Either.wHNxn7Os.js", "_exports.3IcOsN8u.js" ], - "integrity": "sha512-RVlTwrCnvAW250x/R9UG3yxyQ0p+fnLIe3HUZN8rIGnWpg0yd3YGpVSClQGPohi2YNPppWS74J3zWlmdRP7qiw==" + "integrity": "sha512-nNoNk0nD88HRS8LqyIx5kV9MOZBIbcHO4IaumhTh6T3p34OdBIJtM8QQVngu6X/jPdCbMFDj9uajXKAgMkE8bQ==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts": { - "file": "erreurs.js", + "file": "erreurs2.js", "name": "erreurs", "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts", "isEntry": true, "imports": [ "_exports.3IcOsN8u.js" ], - "integrity": "sha512-tiEWQ6pmEHs+n04C+vJHPXibpUZ+9ZA5iH4nQzN5jvgK6R058rm+q8dO8Lwem25Jh+cSo8np4/c76yVXI5zl/w==" + "integrity": "sha512-Ta/Bb2Do3/sj5Dpq5mLujPDpoZdgCiyvArjHPNRaJ359JvWcL6fczyLPYAJE4VCGGbKHneDhk/e5aHIzxHJscA==" + }, + "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs/codes-promo.ts": { + "file": "codes-promo.js", + "name": "codes-promo", + "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs/codes-promo.ts", + "isEntry": true, + "integrity": "sha512-mvZ1WtE7fS/BRIPVI1pBdQNkZ+oimmfdowcG0kdixTM/8UW+MrPuC/vMRgO3lWoBiYEPun/19vwaV656LRhijg==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/gardes.ts": { "file": "gardes.js", @@ -151,10 +165,12 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/messages.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/erreurs.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/lib/validation.ts", "_Either.wHNxn7Os.js", "_exports.3IcOsN8u.js", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart.ts", @@ -163,7 +179,7 @@ "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-coupons.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts" ], - "integrity": "sha512-94orRrPxJFN+qWNi1NyL15PG3iKx9mivWneHmduvAzPFzhJOl2UpJFX80rIGGOQKx76DvkrNs0r8Lz0S5E/lXA==" + "integrity": "sha512-eNfGzO+xLfiHFnNdNdE+zBcnvpPz/wE6vXX1rKbYVlFuf2gPC9kxCEwQnH+BijivLi/JkqkrtXv+m/92RShOrA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/nombres.ts": { "file": "nombres.js", @@ -179,14 +195,14 @@ "isEntry": true, "imports": [ "_index.CeK6pfoJ.js", - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/erreurs.ts", "_pipe.XPB0wEfw.js", "_exports.3IcOsN8u.js" ], - "integrity": "sha512-jamYkNXH2680XzDhjyTyaJhA5N6Qbgj9L5NPBpQ94nmQQKIWOnlhB5ECY3ulny2PX4fmgUVWZskYOgkx/DrbjA==" + "integrity": "sha512-F8X+ITTTDvOk6ZjYd3qIAYkZlcJ6ZgDpbSCPAJM6Q8kcxuz0OtGVREa+iOntaFU8fiLpPvx7aA4z6u0G0oFjoQ==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts": { "file": "adresses.js", @@ -194,9 +210,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js" + "_index.DxUTT09Y.js" ], - "integrity": "sha512-hp7nWc3CrWm2+zbU0mlAqbILcj5jeIp3bNBLiD1ZJCZkQYBttIyEA26+1m5s0smj4zPCYh7cnGoxqFd8/XeLRQ==" + "integrity": "sha512-H+aWaFlRjfS2cY3XWyOArYWnFBAV0weV9FMIEvTEFHiEeojtEkK++tJliJLQug2xOYPoMr6BwV3+TuRK+nSSng==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-add-item.ts": { "file": "cart-add-item.js", @@ -204,9 +220,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-add-item.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js" + "_index.DxUTT09Y.js" ], - "integrity": "sha512-mbHXCUexMdgzCAGOEVUQaIPaMQiI04HXWCQEx9L541qkkLJVKQGD4TWVRuHmetCyNuOJ4B3etIEHv9M3jqveXA==" + "integrity": "sha512-ym6kcAMCCgjH0vatLjbKnTQ2231MGzFV5eNBlxFoDflkKKxPe8xHvnjJbJSTNXFFFTQammafUY3iPqVQ7WdrxA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-apply-coupon.ts": { "file": "cart-apply-coupon.js", @@ -214,9 +230,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-apply-coupon.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js" + "_index.DxUTT09Y.js" ], - "integrity": "sha512-qUrpZo097VcnjC5rGxl7boGS7m8evPkHAnsYn1jHKzKVGBRLu+W5bdjXAGzIdaB7TmUBC+xxbANZx79F/xL+wQ==" + "integrity": "sha512-MPKrUdFgPDWEPG0o82PDqPKArhbB6OVTdmeEoSKYjM+PvNsoVM0OeY+pujz5nGkU/daHBd4HriBQqV/dvcW6ww==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-coupons.ts": { "file": "cart-coupons.js", @@ -224,9 +240,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-coupons.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js" + "_index.DxUTT09Y.js" ], - "integrity": "sha512-Xgd5HYn6SPOvNb1VVKEjVaSng7kwIQYrDQs288KrtXf4DTOVymIhvXl/o6diMCGsCuPVoh67cK9eFckdCbs/Dg==" + "integrity": "sha512-qdooRawTXSQsJWbwGQ5HHFzG39Cw7eFpUDgCqzQqWs8zhVQYvvunO1n4fwXWttekDr7VVChj6IzjUmv4JMdTdA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-remove-coupon.ts": { "file": "cart-remove-coupon.js", @@ -234,9 +250,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-remove-coupon.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js" + "_index.DxUTT09Y.js" ], - "integrity": "sha512-i4ks7+X0CnmjMd2CRT5ytUC4LBvu4lEHKzJkTqdeYnAG7mlFkdjbrifNU/UqvO6ZLA293f2/pNvV8XrXDp7erw==" + "integrity": "sha512-fuTTvmIWBTDpR47Wlc4bwacRjTqAa7PZpqHWBz+aAj1zTYnwIQdd/tujRGmDPx8GNiIOaz1w0jyhRyz8YZL82Q==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-remove-item.ts": { "file": "cart-remove-item.js", @@ -244,9 +260,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-remove-item.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js" + "_index.DxUTT09Y.js" ], - "integrity": "sha512-97h5QCYr2tffzqwnv+45xT8RViFIYVdtHeT/xdarjjYS6lSF6F8mjwo0o9szKwb1wXry5vvvLfzEzWphl+649w==" + "integrity": "sha512-KaWApeBMfdizR8XIwwdVlPigDiuSAkVntzfoVoPx2+L74qnIRlqVzC/h8wmR5iLtJiRHUf8onWKZWTy/YJi0GA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-update-customer.ts": { "file": "cart-update-customer.js", @@ -254,10 +270,10 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-update-customer.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts" ], - "integrity": "sha512-6YBAVIuC4+D6f2ro2U4nVUHk3hEIqs2+Z0MtGRzL3/1ZdM+oGqF5WyNYLU96qRAlSohmUzbhoONqpb+WVJVsbA==" + "integrity": "sha512-1vsGL4zPWg3ip4cdi+gB+QlHhjCAwn3ETg/rAGJrlDFOoNHLzkaC4Z4iJwVRMzlsISvKAHYuwQxFv1tSF26raA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-update-item.ts": { "file": "cart-update-item.js", @@ -265,9 +281,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-update-item.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js" + "_index.DxUTT09Y.js" ], - "integrity": "sha512-gjO4tVbq4MQ3PJpSDl11Uw9wFXN2dq580DH9Br8fZCJvTT15Liw4bewqcXjOlFMQSeyh2o5DfJTEpeNNFUbWcQ==" + "integrity": "sha512-enT7JXW/as+17/IgNE8HTIWumHyycCfOA1A2ViB2BX2+Sb5+yg941ATZCMF00/yIzgy/0po/HPITeEhUcTxCQA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart.ts": { "file": "cart.js", @@ -275,13 +291,13 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/cart.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-coupons.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts" ], - "integrity": "sha512-Vij49uAaSPn0pnPskrurveRYMvbODXDXfGCeRaW8A0hUJNPtopBdhMslppSpom3UoEOg8iRh4Pr0FUmUB7oThQ==" + "integrity": "sha512-nkAa5GpdXm5SEv5taFhiOdunn7bOKm61N1kVyEHzPGM4sa1irsAzExc5RMXEsEjim4ZA7RseBjo6pngFXFxpIg==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts": { "file": "couts-livraison.js", @@ -289,20 +305,20 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts" ], - "integrity": "sha512-YuWaVfcugmGKrrcrxarYURiOQuOvqG+woBDw79SAa/DkvoV9j8s26xkuHV0lPCSWGmJ+lIhP0r9DeMxVqq6oeQ==" + "integrity": "sha512-Wba/eKVlVqEczLMMk3dl0p9KUI7dhNomuSIqltE35s+m9svN/k+dMr49WEyFYlchuQLH6Om19wm0VmnLPvOZmg==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/erreurs.ts": { - "file": "erreurs2.js", + "file": "erreurs3.js", "name": "erreurs", "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/erreurs.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js" + "_index.DxUTT09Y.js" ], - "integrity": "sha512-kx+Bf9zzHdCwB0vxBE+/KLElyW0soM0ki0d3lT/b40LweGGJD5OyEF1fdc54RqLEvXT2/XDksDRUGdwKdLudrQ==" + "integrity": "sha512-/iSqgsgUyBySdgT4/xxOppkIw5kwUV6Ka0auhf2ZeSdqk6QETJm0bj5Ydt3wWdPyncFIlva3ousWwTkw5Sp7Mg==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/products.ts": { "file": "products3.js", @@ -310,10 +326,10 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/products.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/products.ts" ], - "integrity": "sha512-frGqySW9ausejkcUyAeJZNecXA5vq9/XfvDiYe8ccJb96v2kZdCQaHCdGVbYJPb0wOF/JdVUsNfTTeSu7U8DcA==" + "integrity": "sha512-Mr2P09suX7KY2cCzn+cqLdRLDHPDJC/RIsFFlB0VudZZoIE9unlsB3BjSvlzmKrBly5QP3jgnq2+7dKqSHlzMw==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/v3/orders.ts": { "file": "orders2.js", @@ -321,11 +337,11 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/v3/orders.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/orders.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts" ], - "integrity": "sha512-SqTZk6JurX847irpPtuz4+pFmu52sZ5PtytHR63XJ3foElbLgMdyorTU6P8jc0OELmL6qAsSNTpmWufkbJKqAA==" + "integrity": "sha512-moB98oUqT6LBlhauPLs5NaX25U/sAMuCRVbfu231Ld/mvdCW4xAd9MUd4l/wrHPckLGSDcU/1jlGPcilj5QmzQ==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/v3/products.ts": { "file": "products.js", @@ -333,10 +349,10 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/v3/products.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/products.ts" ], - "integrity": "sha512-nDODvHALLqwSzO0AKoZzYVKPg4BGO8VBwJGEMyEgjNO2NBDHrGD85/ptRVgWEZdYHcAHu2mGw10KXkcb+0QEnQ==" + "integrity": "sha512-/3pK99mes4gepaV1xY0662S9Wat4PYzOz/0433XYMmGmWzZHUhZ8lEWC2DH8ohCJv09LrvVGOPcFAvlM23KdxQ==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts": { "file": "messages2.js", @@ -344,7 +360,7 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart.ts", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/cart.ts", @@ -352,7 +368,7 @@ "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-coupons.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts" ], - "integrity": "sha512-Z1k+lR05ggnpPfMRz+rkIz/hgZaOSn4QEoMO0gn9PqfulMuAwc+Enbm+4tHey/kPnYVthqLVU9JD45T6WwFkgw==" + "integrity": "sha512-DRQfMEltCFFPp1xUw26z4CbypxMn//NWQEsKGc98p9UTSaoSNUy7rDWR7JJYM5mnZvglEu+jEzzrKXCrZvQB2w==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/types/api/v3/orders.ts": { "file": "orders.js", @@ -380,7 +396,7 @@ "_Either.wHNxn7Os.js", "_exports.3IcOsN8u.js" ], - "integrity": "sha512-x3y5f8DNLaNwFU4OIZWHmBHwTKsay8L54ocQdNS+YtIALQETdiLIU3DWBhcflJQagMHjs18d7GHMBAU91t6z+Q==" + "integrity": "sha512-lFwvitUqFysRtTgYXkj89gMr6p7ZYAbJcWYdOM8enxrgeI+P5TRMgHa1cGI/odo1eUoLMZAY/ETPefDB6F6jEA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/validation.ts": { "file": "validation.js", @@ -388,10 +404,10 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/validation.ts", "isEntry": true, "imports": [ - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "_Either.wHNxn7Os.js" ], - "integrity": "sha512-Dhmgzl/XrIuQ1eQdlXuLMdzZpBFlSVPMsGPJV24H4uetPrFJS5ifvqOCuL2vYT50sK8boIg2OSWzRSbDO2l/ZQ==" + "integrity": "sha512-U0Sy/QxwPcY4OUTn9k7ece4cny1Ll3yog6ruooDxnpcirIJAhl2GbEanmqCF1blDxuoTtm9rKS6bGpGsIPprEg==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-panier.ts": { "file": "scripts-bouton-panier.js", @@ -408,15 +424,17 @@ "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts", "_exports.3IcOsN8u.js", "_Either.wHNxn7Os.js", - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", + "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/erreurs.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart.ts", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/cart.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-coupons.ts", - "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts" + "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/lib/validation.ts" ], - "integrity": "sha512-mHc6AtX1ym8HmptAgpbetiNRV1BLrBYZaz5ERTFv38/uFGTgaF6eR3I+51YLVSL84di4HeU/JmhYgUPmzIXRdg==" + "integrity": "sha512-owPlbtZQELd8iFvAjd99yep2RtfOCDCUR6rLSY3iqiO4Jroo0EODLGeKKCemJB/yC2TmNio/oPRg4/v4GqKNZA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-menu-categories.ts": { "file": "scripts-menu-categories.js", @@ -433,7 +451,7 @@ "_pipe.XPB0wEfw.js", "_Either.wHNxn7Os.js" ], - "integrity": "sha512-j3ILSBME932tOctTi7Zh/O0nNcWVK6CZXnP0cDwVutrUSuIgQZUedocLvyZoqhqEZDE3bDylXvbOdmL97ovovw==" + "integrity": "sha512-psMOuhAkU7+jxe9h1Aj21zDO6K3lAhY6syq7TswuJ1a4vHtk81NtFnL6g7u02xM7b+4NZ908PZKhrqu6UlU9/Q==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-menu-mobile.ts": { "file": "scripts-menu-mobile.js", @@ -449,7 +467,7 @@ "_pipe.XPB0wEfw.js", "_Either.wHNxn7Os.js" ], - "integrity": "sha512-ug1m3ReK/rEWNlcqtQSpt4mUMSkEFt9vqH+TDliSml0CQNHdyFx5k5/+B9gwpBCu7aJi0WLxExOzO1JnnKhb3Q==" + "integrity": "sha512-jfXGu7m6fl9WAyW+/q7jIvIzt0BAHzr6/3jdUnmpjl4fk6BBreYq4dCdAYBkdor0SYiojl9CP7K4UAjviu8Fow==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-a-propos.ts": { "file": "scripts-page-a-propos.js", @@ -466,7 +484,7 @@ "_exports.3IcOsN8u.js", "_Either.wHNxn7Os.js" ], - "integrity": "sha512-i8fpg/m7dfAfi1JtF5Dg+JqmW7Me3NkOtlhjVyQnatzYO+KAmbifg/6hLnJmPlKnNoDcpLzWWurmp+LUUayt5w==" + "integrity": "sha512-zgCzDeT+sbnhtQa6JjC+5mfYJJFc5jaY7eHYW7aXBkzVxfit6zkxVH+tjLFE5W4agDvvB9x+h/72vW+EWp3uWg==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-accueil.ts": { "file": "scripts-page-accueil.js", @@ -483,7 +501,7 @@ "_pipe.XPB0wEfw.js", "_Either.wHNxn7Os.js" ], - "integrity": "sha512-h+g7IEbO5YmdMbcfG4JK+FISSSVIy0VQJRL8JQXY/kyy76KIYosJOMmWbi+Xf9wIFJmkQdS8/eUIbwmfztYqOA==" + "integrity": "sha512-XYeWeT8w4HlKIc9z3CvH16ZZ2lb5kHlxO2e0pSTL5hiyOF5JT21aQMO0OaA1izcpulUIjT+cMorXIK3/hHs2/w==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-boutique.ts": { "file": "scripts-page-boutique.js", @@ -492,7 +510,7 @@ "isEntry": true, "imports": [ "_index.CeK6pfoJ.js", - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/dom.ts", @@ -510,7 +528,7 @@ "web/app/themes/haiku-atelier-2024/src/scripts/constantes/products.ts", "_belt_Option-91f3b350.cBye8bLJ.js" ], - "integrity": "sha512-uNYyKGhjHeqYncjAyE+T/e7QBoQ/f9UvdSiQDykcwh166q7omicesrkD2sIlLz/N439aSMU26A09bm+GRe6elg==" + "integrity": "sha512-tn2cf3wz6jENK1aJWUlAx2ExPnKYCf5zXmDw4DJyshzRgdj0Polb9K7SwYh3Uqf2Ek8rh74MQKX2q7zPFbWA9A==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier-code-promo.ts": { "file": "scripts-page-panier-code-promo.js", @@ -519,12 +537,15 @@ "isEntry": true, "imports": [ "_index.CeK6pfoJ.js", - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/constantes/erreurs.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/dom.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs/codes-promo.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/gardes.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/lib/messages.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-apply-coupon.ts", @@ -535,13 +556,15 @@ "_pipe.XPB0wEfw.js", "_Either.wHNxn7Os.js", "_exports.3IcOsN8u.js", + "web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/erreurs.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/cart.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-coupons.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts" ], - "integrity": "sha512-22TkRIZOEsST92UYKs46BLpB7h9wrAHlaPGzlEtapPuHZRDzN5KDgh/iWTC9Wy16m/4MMTCJ42UNZD3cGIpgOg==" + "integrity": "sha512-Dcq5CmQJWGUY0FPDHu4fI5COKoVMxA0I0zUpOpPIS6IQ8HXCvzQjH+18wNzCpbqNB/L0mrILXsSVmLmpeLGEWw==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts": { "file": "scripts-page-panier.js", @@ -550,7 +573,7 @@ "isEntry": true, "imports": [ "_index.CeK6pfoJ.js", - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/api.ts", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts", @@ -572,18 +595,20 @@ "_index-0eef19ec.DoJSf22Z.js", "_Either.wHNxn7Os.js", "_exports.3IcOsN8u.js", - "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/erreurs.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/cart.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-coupons.ts", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/orders.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/constantes/erreurs.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs/codes-promo.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-apply-coupon.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-remove-coupon.ts", "_MaybeAsync.AE1jnxuc.js", "_belt_Option-91f3b350.cBye8bLJ.js" ], - "integrity": "sha512-pjdI16uzECwZBDM0wQrEmMY5cAcToOu2qjDsct0nuz5TqNsP8VqtQ36TqPKJ7ADy+LKVyaajCqpUr4KaErg2Dg==" + "integrity": "sha512-nv6WicLF3qhp2tyjzl7Ns5Yyfon9onWi/u5nxsvBRT6oEpdb9h5rXxDx3ydC6OsMR9n/B1wdXsuxxHTmECqX/w==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts": { "file": "scripts-page-produit.js", @@ -599,24 +624,24 @@ "web/app/themes/haiku-atelier-2024/src/scripts/lib/gardes.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/messages.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts", - "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-add-item.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/utils.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/validation.ts", "_pipe.XPB0wEfw.js", "_index-0eef19ec.DoJSf22Z.js", "_Either.wHNxn7Os.js", "_exports.3IcOsN8u.js", - "_index.DKC_Jv5v.js", + "_index.DxUTT09Y.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts", - "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/erreurs.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/cart.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-coupons.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts", "_belt_Option-91f3b350.cBye8bLJ.js" ], - "integrity": "sha512-AfazFsXwZx7Jw4OFVOqn67aMHb33rZaKnWzJWhXb065QNCmsGpBpTpXIN+MceSmx/b/6uKsieqH6PwFKyIk9jw==" + "integrity": "sha512-lUQ7gg9r4XVBz+5ivZvD+nP+ncAJ4I78VpiJJE3NSWecpGYoyN/2/LvWzQr8maRyf7Ox4+aJRrbHIaQZVul/fQ==" } } \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/adresses.js b/web/app/themes/haiku-atelier-2024/assets/js/adresses.js index 41da7817..63ddda3d 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/adresses.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/adresses.js @@ -1,4 +1,4 @@ -import { o as object, s as string } from "./index.DKC_Jv5v.js"; +import { o as object, s as string } from "./index.DxUTT09Y.js"; const WCStoreBillingAddressSchema = object({ address_1: string(), address_2: string(), diff --git a/web/app/themes/haiku-atelier-2024/assets/js/cart-add-item.js b/web/app/themes/haiku-atelier-2024/assets/js/cart-add-item.js index 04ac7bbe..4d5d31e2 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/cart-add-item.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/cart-add-item.js @@ -1,4 +1,4 @@ -import { o as object, c as optional, n as number, b as array, s as string } from "./index.DKC_Jv5v.js"; +import { o as object, c as optional, n as number, b as array, s as string } from "./index.DxUTT09Y.js"; const WCStoreCartAddItemArgsItemsSchema = object({ /** Variation attribute name. */ attribute: string(), diff --git a/web/app/themes/haiku-atelier-2024/assets/js/cart-apply-coupon.js b/web/app/themes/haiku-atelier-2024/assets/js/cart-apply-coupon.js index 01f39ef6..20e91c00 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/cart-apply-coupon.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/cart-apply-coupon.js @@ -1,4 +1,4 @@ -import { o as object, c as optional, s as string } from "./index.DKC_Jv5v.js"; +import { o as object, c as optional, s as string } from "./index.DxUTT09Y.js"; const WCStoreCartApplyCouponArgsSchema = object({ /** Unique identifier for the coupon within the basket */ code: optional(string()) diff --git a/web/app/themes/haiku-atelier-2024/assets/js/cart-coupons.js b/web/app/themes/haiku-atelier-2024/assets/js/cart-coupons.js index b210a4c4..95a39276 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/cart-coupons.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/cart-coupons.js @@ -1,4 +1,4 @@ -import { o as object, s as string, a as pipe, i as integer, n as number } from "./index.DKC_Jv5v.js"; +import { o as object, s as string, a as pipe, j as integer, n as number } from "./index.DxUTT09Y.js"; const WCStoreCartCouponsSchema = object({ /** The coupon's unique code. */ code: string(), diff --git a/web/app/themes/haiku-atelier-2024/assets/js/cart-remove-coupon.js b/web/app/themes/haiku-atelier-2024/assets/js/cart-remove-coupon.js index 64f991a6..b686ee8e 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/cart-remove-coupon.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/cart-remove-coupon.js @@ -1,4 +1,4 @@ -import { o as object, c as optional, s as string } from "./index.DKC_Jv5v.js"; +import { o as object, c as optional, s as string } from "./index.DxUTT09Y.js"; const WCStoreCartRemoveCouponArgsSchema = object({ /** Unique identifier for the coupon within the basket */ code: optional(string()) diff --git a/web/app/themes/haiku-atelier-2024/assets/js/cart-remove-item.js b/web/app/themes/haiku-atelier-2024/assets/js/cart-remove-item.js index 3de635ee..bded117e 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/cart-remove-item.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/cart-remove-item.js @@ -1,4 +1,4 @@ -import { o as object, s as string } from "./index.DKC_Jv5v.js"; +import { o as object, s as string } from "./index.DxUTT09Y.js"; const WCStoreCartRemoveItemArgsSchema = object({ /** Unique identifier (key) for the basket item. */ key: string() diff --git a/web/app/themes/haiku-atelier-2024/assets/js/cart-update-customer.js b/web/app/themes/haiku-atelier-2024/assets/js/cart-update-customer.js index 318cb211..8049558d 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/cart-update-customer.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/cart-update-customer.js @@ -1,4 +1,4 @@ -import { o as object, c as optional } from "./index.DKC_Jv5v.js"; +import { o as object, c as optional } from "./index.DxUTT09Y.js"; import { W as WCStoreBillingAddressSchema, a as WCStoreShippingAddressSchema } from "./adresses.js"; const WCStoreCartUpdateCustomerArgsSchema = object({ billing_address: optional(WCStoreBillingAddressSchema), diff --git a/web/app/themes/haiku-atelier-2024/assets/js/cart-update-item.js b/web/app/themes/haiku-atelier-2024/assets/js/cart-update-item.js index 188e71f8..650d5e85 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/cart-update-item.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/cart-update-item.js @@ -1,4 +1,4 @@ -import { o as object, s as string, a as pipe, m as minValue, n as number } from "./index.DKC_Jv5v.js"; +import { o as object, s as string, a as pipe, m as minValue, n as number } from "./index.DxUTT09Y.js"; const WCStoreCartUpdateItemArgsSchema = object({ /** Unique identifier (key) for the basket item to update. */ key: string(), diff --git a/web/app/themes/haiku-atelier-2024/assets/js/cart.js b/web/app/themes/haiku-atelier-2024/assets/js/cart.js index 7ffdc1ad..0ae60fbc 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/cart.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/cart.js @@ -1,4 +1,4 @@ -import { o as object, d as boolean, e as enum_, s as string, u as unknown, n as number, b as array, f as union, a as pipe, g as null_, h as url, i as integer } from "./index.DKC_Jv5v.js"; +import { o as object, d as boolean, e as enum_, s as string, u as unknown, n as number, b as array, f as union, a as pipe, g as null_, h as url, j as integer } from "./index.DxUTT09Y.js"; import { C as CATALOG_VISIBILITIES } from "./cart2.js"; import { W as WCStoreBillingAddressSchema, a as WCStoreShippingAddressSchema } from "./adresses.js"; import { W as WCStoreCartCouponsSchema } from "./cart-coupons.js"; diff --git a/web/app/themes/haiku-atelier-2024/assets/js/codes-promo.js b/web/app/themes/haiku-atelier-2024/assets/js/codes-promo.js new file mode 100644 index 00000000..b9412a43 --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/js/codes-promo.js @@ -0,0 +1,10 @@ +class ErreurCodePromoInvalide extends Error { + constructor(message) { + super(`Code promo « ${message} » invalide.`); + this.name = "ErreurCodePromoInvalide"; + } +} +export { + ErreurCodePromoInvalide as E +}; +//# sourceMappingURL=codes-promo.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/codes-promo.js.map b/web/app/themes/haiku-atelier-2024/assets/js/codes-promo.js.map new file mode 100644 index 00000000..12df0b6d --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/js/codes-promo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"codes-promo.js","sources":["../../src/scripts/lib/erreurs/codes-promo.ts"],"sourcesContent":["/** Types d'Erreurs liés aux codes promos */\n\nexport class ErreurCodePromoInvalide extends Error {\n constructor(message: string) {\n super(`Code promo « ${message} » invalide.`);\n this.name = \"ErreurCodePromoInvalide\";\n }\n}\n"],"names":[],"mappings":"AAEO,MAAM,gCAAgC,MAAM;AAAA,EACjD,YAAY,SAAiB;AACrB,UAAA,gBAAgB,OAAO,cAAc;AAC3C,SAAK,OAAO;AAAA,EAAA;AAEhB;"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/couts-livraison.js b/web/app/themes/haiku-atelier-2024/assets/js/couts-livraison.js index 51f4319a..16f85509 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/couts-livraison.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/couts-livraison.js @@ -1,4 +1,4 @@ -import { o as object, j as omit, b as array, s as string, n as number, u as unknown, d as boolean } from "./index.DKC_Jv5v.js"; +import { o as object, k as omit, b as array, s as string, n as number, u as unknown, d as boolean } from "./index.DxUTT09Y.js"; import { a as WCStoreShippingAddressSchema } from "./adresses.js"; const WCStoreShippingRateItemSchema = object({ key: string(), diff --git a/web/app/themes/haiku-atelier-2024/assets/js/dom.js b/web/app/themes/haiku-atelier-2024/assets/js/dom.js index 927ad3a5..3acc4e54 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/dom.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/dom.js @@ -2,17 +2,18 @@ const ATTRIBUT_ARIA_HIDDEN = "aria-hidden"; const ATTRIBUT_ARIA_SELECTED = "aria-selected"; const ATTRIBUT_CACHE = "data-cache"; const ATTRIBUT_CLE_PANIER = "data-cle-panier"; +const ATTRIBUT_CODE_PROMO_PRESENT = "data-code-promo-present"; const ATTRIBUT_CONTIENT_ARTICLES = "data-contient-articles"; const ATTRIBUT_DESACTIVE = "disabled"; +const ATTRIBUT_ENSEMBLE_EPINGLE_BOITE_ACTIF = "data-ensemble-epingle-boite-actif"; const ATTRIBUT_HIDDEN = "hidden"; -const ATTRIBUT_MENU_MOBILE_ACTIVE = "data-menu-mobile-active"; -const ATTRIBUT_PAGE = "data-page"; const ATTRIBUT_ID_CATEGORIE_PRODUITS = "data-id-categorie-produits"; const ATTRIBUT_ID_ENSEMBLE_EPINGLE_BOITE = "data-id-ensemble-epingle-boite"; -const ATTRIBUT_ENSEMBLE_EPINGLE_BOITE_ACTIF = "data-ensemble-epingle-boite-actif"; const ATTRIBUT_INDEX_IMAGE_ACTIVE = "data-index-image-active"; +const ATTRIBUT_MENU_MOBILE_ACTIVE = "data-menu-mobile-active"; +const ATTRIBUT_PAGE = "data-page"; const ATTRIBUT_PRIX = "data-prix"; -const ATTRIBUT_CODE_PROMO_PRESENT = "data-code-promo-present"; +const ATTRIBUT_CHARGEMENT = "data-chargement"; const SELECTEUR_BOUTON_MENU_MOBILE = "#bouton-menu-mobile"; const SELECTEUR_BOUTON_PANIER = ".compte-panier a[rel='cart']"; const SELECTEUR_MENU_MOBILE = "#menu-mobile"; @@ -43,6 +44,7 @@ const SELECTEUR_INSTRUCTIONS_CLIENT = "#panneau-panier #instructions-client"; const SELECTEUR_ENSEMBLE_CODE_PROMO = "#panneau-panier #ensemble-code-promo"; const SELECTEUR_CHAMP_CODE_PROMO = "#panneau-panier #champ-code-promo"; const SELECTEUR_BOUTON_CODE_PROMO = "#panneau-panier #bouton-code-promo"; +const SELECTEUR_MESSAGE_CODE_PROMO = "#panneau-panier .panneau__instructions-code-promo__code-promo__message"; const SELECTEUR_CONTENEUR_STORYTELLING = ".storytelling"; const SELECTEUR_IMAGES_STORYTELLING = ".storytelling__image"; const SELECTEUR_GRILLE_PRODUITS = "#page-boutique .grille-produits"; @@ -61,42 +63,44 @@ const SELECTEUR_IMAGE_COLONNE_GAUCHE = ".colonne-gauche img"; const SELECTEUR_IMAGES_COLONNE_DROITE = ".colonne-droite img"; const SELECTEUR_PRIX_PRODUIT = ".selecteur-produit__prix"; export { - ATTRIBUT_MENU_MOBILE_ACTIVE as $, + SELECTEUR_BOUTON_MENU_MOBILE as $, ATTRIBUT_CONTIENT_ARTICLES as A, - SELECTEUR_BOUTON_CODE_PROMO as B, - ATTRIBUT_CLE_PANIER as C, - SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE as D, - SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER as E, - SELECTEUR_BOUTON_ADDITION_QUANTITE as F, - SELECTEUR_BOUTON_SUPPRESSION_PANIER as G, - SELECTEUR_PRIX_LIGNE_PANIER as H, - ATTRIBUT_DESACTIVE as I, - ATTRIBUT_CODE_PROMO_PRESENT as J, - SELECTEUR_BOUTON_AJOUT_PANIER as K, - SELECTEUR_SELECTEUR_QUANTITE as L, - SELECTEUR_LIENS_ONGLETS as M, - SELECTEUR_SECTIONS_CONTENUS as N, - SELECTEUR_PRIX_PRODUIT as O, - SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT as P, - SELECTEUR_FLECHE_DEFILEMENT_GAUCHE as Q, - SELECTEUR_FLECHE_DEFILEMENT_DROITE as R, + SELECTEUR_BOUTON_SUPPRESSION_PANIER as B, + SELECTEUR_PRIX_LIGNE_PANIER as C, + ATTRIBUT_DESACTIVE as D, + SELECTEUR_BOUTON_CODE_PROMO as E, + SELECTEUR_CHAMP_CODE_PROMO as F, + SELECTEUR_ENSEMBLE_CODE_PROMO as G, + SELECTEUR_MESSAGE_CODE_PROMO as H, + SELECTEUR_TOTAL_REDUCTION as I, + SELECTEUR_TOTAL_REDUCTION_VALEUR as J, + ATTRIBUT_CHARGEMENT as K, + ATTRIBUT_CODE_PROMO_PRESENT as L, + SELECTEUR_BOUTON_AJOUT_PANIER as M, + SELECTEUR_SELECTEUR_QUANTITE as N, + SELECTEUR_LIENS_ONGLETS as O, + SELECTEUR_SECTIONS_CONTENUS as P, + SELECTEUR_PRIX_PRODUIT as Q, + SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT as R, SELECTEUR_BOUTON_PANIER as S, - SELECTEUR_PHOTOS_PRODUIT as T, - SELECTEUR_IMAGE_COLONNE_GAUCHE as U, - SELECTEUR_IMAGES_COLONNE_DROITE as V, - ATTRIBUT_INDEX_IMAGE_ACTIVE as W, - ATTRIBUT_ARIA_SELECTED as X, - ATTRIBUT_PRIX as Y, - SELECTEUR_BOUTON_MENU_MOBILE as Z, - SELECTEUR_MENU_MOBILE as _, + SELECTEUR_FLECHE_DEFILEMENT_GAUCHE as T, + SELECTEUR_FLECHE_DEFILEMENT_DROITE as U, + SELECTEUR_PHOTOS_PRODUIT as V, + SELECTEUR_IMAGE_COLONNE_GAUCHE as W, + SELECTEUR_IMAGES_COLONNE_DROITE as X, + ATTRIBUT_INDEX_IMAGE_ACTIVE as Y, + ATTRIBUT_ARIA_SELECTED as Z, + ATTRIBUT_PRIX as _, SELECTEUR_MENU_CATEGORIES_PRODUITS as a, - ATTRIBUT_ID_ENSEMBLE_EPINGLE_BOITE as a0, - ATTRIBUT_ENSEMBLE_EPINGLE_BOITE_ACTIF as a1, - CLASS_BOUTON_FERMETURE_BOITE_TEXTE as a2, - CLASS_EPINGLE as a3, - SELECTEUR_CONTENEUR_STORYTELLING_A_PROPOS as a4, - SELECTEUR_EPINGLE as a5, - SELECTEUR_BOITE_TEXTE as a6, + SELECTEUR_MENU_MOBILE as a0, + ATTRIBUT_MENU_MOBILE_ACTIVE as a1, + ATTRIBUT_ID_ENSEMBLE_EPINGLE_BOITE as a2, + ATTRIBUT_ENSEMBLE_EPINGLE_BOITE_ACTIF as a3, + CLASS_BOUTON_FERMETURE_BOITE_TEXTE as a4, + CLASS_EPINGLE as a5, + SELECTEUR_CONTENEUR_STORYTELLING_A_PROPOS as a6, + SELECTEUR_EPINGLE as a7, + SELECTEUR_BOITE_TEXTE as a8, SELECTEUR_ENTREE_MENU_CATEGORIES_PRODUITS as b, SELECTEUR_CONTENEUR_STORYTELLING as c, SELECTEUR_IMAGES_STORYTELLING as d, @@ -117,10 +121,10 @@ export { SELECTEUR_FORMULAIRE_PANIER as s, SELECTEUR_FORMULAIRE_FACTURATION as t, SELECTEUR_BOUTON_ACTIONS_FORMULAIRE as u, - SELECTEUR_TOTAL_REDUCTION as v, - SELECTEUR_TOTAL_REDUCTION_VALEUR as w, - SELECTEUR_INSTRUCTIONS_CLIENT as x, - SELECTEUR_ENSEMBLE_CODE_PROMO as y, - SELECTEUR_CHAMP_CODE_PROMO as z + SELECTEUR_INSTRUCTIONS_CLIENT as v, + ATTRIBUT_CLE_PANIER as w, + SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE as x, + SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER as y, + SELECTEUR_BOUTON_ADDITION_QUANTITE as z }; //# sourceMappingURL=dom.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/dom.js.map b/web/app/themes/haiku-atelier-2024/assets/js/dom.js.map index d20f79c1..7ad00680 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/dom.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/dom.js.map @@ -1 +1 @@ -{"version":3,"file":"dom.js","sources":["../../src/scripts/constantes/dom.ts"],"sourcesContent":["/** Constantes de valeurs pour la manipulation du DOM : sélecteurs et attributs. */\n\nexport const ATTRIBUT_ARIA_HIDDEN = \"aria-hidden\";\nexport const ATTRIBUT_ARIA_SELECTED = \"aria-selected\";\nexport const ATTRIBUT_CACHE = \"data-cache\";\nexport const ATTRIBUT_CLE_PANIER = \"data-cle-panier\";\nexport const ATTRIBUT_CONTIENT_ARTICLES = \"data-contient-articles\";\nexport const ATTRIBUT_DESACTIVE = \"disabled\";\nexport const ATTRIBUT_HIDDEN = \"hidden\";\nexport const ATTRIBUT_INDEX = \"data-index\";\nexport const ATTRIBUT_MENU_MOBILE_ACTIVE = \"data-menu-mobile-active\";\nexport const ATTRIBUT_PAGE = \"data-page\";\nexport const ATTRIBUT_ID_CATEGORIE_PRODUITS = \"data-id-categorie-produits\";\nexport const ATTRIBUT_ID_ENSEMBLE_EPINGLE_BOITE = \"data-id-ensemble-epingle-boite\";\nexport const ATTRIBUT_ENSEMBLE_EPINGLE_BOITE_ACTIF = \"data-ensemble-epingle-boite-actif\";\nexport const ATTRIBUT_INDEX_IMAGE_ACTIVE = \"data-index-image-active\";\nexport const ATTRIBUT_PRIX = \"data-prix\";\nexport const ATTRIBUT_CODE_PROMO_PRESENT = \"data-code-promo-present\";\n\n// En-tête\nexport const SELECTEUR_BOUTON_MENU_MOBILE = \"#bouton-menu-mobile\";\nexport const SELECTEUR_BOUTON_PANIER = \".compte-panier a[rel='cart']\";\nexport const SELECTEUR_MENU_MOBILE = \"#menu-mobile\";\nexport const SELECTEUR_MENU_CATEGORIES_PRODUITS = \"#menu-categories-produits\";\nexport const SELECTEUR_ENTREE_MENU_CATEGORIES_PRODUITS = \"#menu-categories-produits ul li a\";\nexport const SELECTEUR_FLECHE_GAUCHE_CATEGORIES_PRODUITS = \"#fleche-defilement-categories-produits-gauche\";\nexport const SELECTEUR_FLECHE_DROITE_CATEGORIES_PRODUITS = \"#fleche-defilement-categories-produits-droite\";\n\n// ???\nexport const SELECTEUR_CONTENEUR_PANIER = \"#page-panier\";\nexport const SELECTEUR_SELECTEUR_QUANTITE = \"#selecteur-variation\";\nexport const SELECTEUR_BOUTON_AJOUT_PANIER = \"#bouton-ajout-panier\";\nexport const SELECTEUR_LIENS_ONGLETS = \"a[role='tab']\";\nexport const SELECTEUR_SECTIONS_CONTENUS = \"section[role='tabpanel']\";\n\n// Panier\nexport const SELECTEUR_ENTREES_PANIER = \"article\";\nexport const SELECTEUR_BOUTON_SUPPRESSION_PANIER = \"button.detail-produit__actions__suppression\";\nexport const SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE = \"button.detail-produit__actions__soustraction\";\nexport const SELECTEUR_BOUTON_ADDITION_QUANTITE = \"button.detail-produit__actions__addition\";\nexport const SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER = \"input\";\nexport const SELECTEUR_PRIX_LIGNE_PANIER = \".detail-produit__nom-prix span\";\nexport const SELECTEUR_SOUS_TOTAL_PRODUITS = \"#panneau-panier #sous-total-produits strong\";\nexport const SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT = \"#panneau-panier #sous-total-livraison strong\";\nexport const SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE = \"#panneau-panier #sous-total-livraison span\";\nexport const SELECTEUR_TOTAL_REDUCTION = \"#panneau-panier #sous-total-reduction\";\nexport const SELECTEUR_TOTAL_REDUCTION_VALEUR = \"#panneau-panier #sous-total-reduction strong\";\nexport const SELECTEUR_TOTAL_PANIER = \"#panneau-panier .panneau__pied-de-page p span\";\nexport const SELECTEUR_BOUTON_SEPARATION_ADRESSES = \"#separation-adresses\";\nexport const SELECTEUR_FORMULAIRE_PANIER = \"#panneau-informations-client form\";\nexport const SELECTEUR_FORMULAIRE_LIVRAISON = \"#panneau-informations-client .panneau__formulaires__livraison\";\nexport const SELECTEUR_FORMULAIRE_FACTURATION = \"#panneau-informations-client .panneau__formulaires__facturation\";\nexport const SELECTEUR_BOUTON_ACTIONS_FORMULAIRE = \"#panneau-informations-client .panneau__pied-de-page button\";\nexport const SELECTEUR_INSTRUCTIONS_CLIENT = \"#panneau-panier #instructions-client\";\nexport const SELECTEUR_ENSEMBLE_CODE_PROMO = \"#panneau-panier #ensemble-code-promo\";\nexport const SELECTEUR_CHAMP_CODE_PROMO = \"#panneau-panier #champ-code-promo\";\nexport const SELECTEUR_BOUTON_CODE_PROMO = \"#panneau-panier #bouton-code-promo\";\n\n// Accueil\nexport const SELECTEUR_CONTENEUR_STORYTELLING = \".storytelling\";\nexport const SELECTEUR_IMAGES_STORYTELLING = \".storytelling__image\";\n\n// Boutique\nexport const SELECTEUR_GRILLE_PRODUITS = \"#page-boutique .grille-produits\";\nexport const SELECTEUR_BOUTON_PLUS_PRODUITS = \"#page-boutique #bouton-plus-de-produits\";\n\n// À propos\nexport const SELECTEUR_CONTENEUR_STORYTELLING_A_PROPOS = \".storytelling__conteneur\";\nexport const CLASS_EPINGLE = \"epingle\";\nexport const SELECTEUR_EPINGLE = `.${CLASS_EPINGLE}`;\nexport const CLASS_BOITE_TEXTE = \"boite-texte\";\nexport const SELECTEUR_BOITE_TEXTE = `.${CLASS_BOITE_TEXTE}`;\nexport const CLASS_BOUTON_FERMETURE_BOITE_TEXTE = \"boite-texte__bouton-fermeture\";\nexport const SELECTEUR_BOUTON_FERMETURE_BOITE_TEXTE = `.${CLASS_BOUTON_FERMETURE_BOITE_TEXTE}`;\n\n// Produit\nexport const SELECTEUR_PHOTOS_PRODUIT = \".photos-produit\";\nexport const SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT = \".fleches-defilement\";\nexport const SELECTEUR_FLECHE_DEFILEMENT_GAUCHE = \".fleches-defilement__bouton:first-of-type\";\nexport const SELECTEUR_FLECHE_DEFILEMENT_DROITE = \".fleches-defilement__bouton:last-of-type\";\nexport const SELECTEUR_IMAGE_COLONNE_GAUCHE = \".colonne-gauche img\";\nexport const SELECTEUR_IMAGES_COLONNE_DROITE = \".colonne-droite img\";\nexport const SELECTEUR_PRIX_PRODUIT = \".selecteur-produit__prix\";\n"],"names":[],"mappings":"AAEO,MAAM,uBAAuB;AAC7B,MAAM,yBAAyB;AAC/B,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,qBAAqB;AAC3B,MAAM,kBAAkB;AAExB,MAAM,8BAA8B;AACpC,MAAM,gBAAgB;AACtB,MAAM,iCAAiC;AACvC,MAAM,qCAAqC;AAC3C,MAAM,wCAAwC;AAC9C,MAAM,8BAA8B;AACpC,MAAM,gBAAgB;AACtB,MAAM,8BAA8B;AAGpC,MAAM,+BAA+B;AACrC,MAAM,0BAA0B;AAChC,MAAM,wBAAwB;AAC9B,MAAM,qCAAqC;AAC3C,MAAM,4CAA4C;AAKlD,MAAM,6BAA6B;AACnC,MAAM,+BAA+B;AACrC,MAAM,gCAAgC;AACtC,MAAM,0BAA0B;AAChC,MAAM,8BAA8B;AAGpC,MAAM,2BAA2B;AACjC,MAAM,sCAAsC;AAC5C,MAAM,yCAAyC;AAC/C,MAAM,qCAAqC;AAC3C,MAAM,wCAAwC;AAC9C,MAAM,8BAA8B;AACpC,MAAM,gCAAgC;AACtC,MAAM,sCAAsC;AAC5C,MAAM,6CAA6C;AACnD,MAAM,4BAA4B;AAClC,MAAM,mCAAmC;AACzC,MAAM,yBAAyB;AAC/B,MAAM,uCAAuC;AAC7C,MAAM,8BAA8B;AAEpC,MAAM,mCAAmC;AACzC,MAAM,sCAAsC;AAC5C,MAAM,gCAAgC;AACtC,MAAM,gCAAgC;AACtC,MAAM,6BAA6B;AACnC,MAAM,8BAA8B;AAGpC,MAAM,mCAAmC;AACzC,MAAM,gCAAgC;AAGtC,MAAM,4BAA4B;AAClC,MAAM,iCAAiC;AAGvC,MAAM,4CAA4C;AAClD,MAAM,gBAAgB;AAChB,MAAA,oBAAoB,IAAI,aAAa;AAC3C,MAAM,oBAAoB;AACpB,MAAA,wBAAwB,IAAI,iBAAiB;AACnD,MAAM,qCAAqC;AAI3C,MAAM,2BAA2B;AACjC,MAAM,yCAAyC;AAC/C,MAAM,qCAAqC;AAC3C,MAAM,qCAAqC;AAC3C,MAAM,iCAAiC;AACvC,MAAM,kCAAkC;AACxC,MAAM,yBAAyB;"} \ No newline at end of file +{"version":3,"file":"dom.js","sources":["../../src/scripts/constantes/dom.ts"],"sourcesContent":["/** Constantes de valeurs pour la manipulation du DOM : sélecteurs et attributs. */\n\nexport const ATTRIBUT_ARIA_HIDDEN = \"aria-hidden\";\nexport const ATTRIBUT_ARIA_SELECTED = \"aria-selected\";\nexport const ATTRIBUT_CACHE = \"data-cache\";\nexport const ATTRIBUT_CLE_PANIER = \"data-cle-panier\";\nexport const ATTRIBUT_CODE_PROMO_PRESENT = \"data-code-promo-present\";\nexport const ATTRIBUT_CONTIENT_ARTICLES = \"data-contient-articles\";\nexport const ATTRIBUT_DESACTIVE = \"disabled\";\nexport const ATTRIBUT_ENSEMBLE_EPINGLE_BOITE_ACTIF = \"data-ensemble-epingle-boite-actif\";\nexport const ATTRIBUT_HIDDEN = \"hidden\";\nexport const ATTRIBUT_ID_CATEGORIE_PRODUITS = \"data-id-categorie-produits\";\nexport const ATTRIBUT_ID_ENSEMBLE_EPINGLE_BOITE = \"data-id-ensemble-epingle-boite\";\nexport const ATTRIBUT_INDEX = \"data-index\";\nexport const ATTRIBUT_INDEX_IMAGE_ACTIVE = \"data-index-image-active\";\nexport const ATTRIBUT_MENU_MOBILE_ACTIVE = \"data-menu-mobile-active\";\nexport const ATTRIBUT_PAGE = \"data-page\";\nexport const ATTRIBUT_PRIX = \"data-prix\";\nexport const ATTRIBUT_CHARGEMENT = \"data-chargement\";\n\n// En-tête\nexport const SELECTEUR_BOUTON_MENU_MOBILE = \"#bouton-menu-mobile\";\nexport const SELECTEUR_BOUTON_PANIER = \".compte-panier a[rel='cart']\";\nexport const SELECTEUR_MENU_MOBILE = \"#menu-mobile\";\nexport const SELECTEUR_MENU_CATEGORIES_PRODUITS = \"#menu-categories-produits\";\nexport const SELECTEUR_ENTREE_MENU_CATEGORIES_PRODUITS = \"#menu-categories-produits ul li a\";\nexport const SELECTEUR_FLECHE_GAUCHE_CATEGORIES_PRODUITS = \"#fleche-defilement-categories-produits-gauche\";\nexport const SELECTEUR_FLECHE_DROITE_CATEGORIES_PRODUITS = \"#fleche-defilement-categories-produits-droite\";\n\n// ???\nexport const SELECTEUR_CONTENEUR_PANIER = \"#page-panier\";\nexport const SELECTEUR_SELECTEUR_QUANTITE = \"#selecteur-variation\";\nexport const SELECTEUR_BOUTON_AJOUT_PANIER = \"#bouton-ajout-panier\";\nexport const SELECTEUR_LIENS_ONGLETS = \"a[role='tab']\";\nexport const SELECTEUR_SECTIONS_CONTENUS = \"section[role='tabpanel']\";\n\n// Panier\nexport const SELECTEUR_ENTREES_PANIER = \"article\";\nexport const SELECTEUR_BOUTON_SUPPRESSION_PANIER = \"button.detail-produit__actions__suppression\";\nexport const SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE = \"button.detail-produit__actions__soustraction\";\nexport const SELECTEUR_BOUTON_ADDITION_QUANTITE = \"button.detail-produit__actions__addition\";\nexport const SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER = \"input\";\nexport const SELECTEUR_PRIX_LIGNE_PANIER = \".detail-produit__nom-prix span\";\nexport const SELECTEUR_SOUS_TOTAL_PRODUITS = \"#panneau-panier #sous-total-produits strong\";\nexport const SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT = \"#panneau-panier #sous-total-livraison strong\";\nexport const SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE = \"#panneau-panier #sous-total-livraison span\";\nexport const SELECTEUR_TOTAL_REDUCTION = \"#panneau-panier #sous-total-reduction\";\nexport const SELECTEUR_TOTAL_REDUCTION_VALEUR = \"#panneau-panier #sous-total-reduction strong\";\nexport const SELECTEUR_TOTAL_PANIER = \"#panneau-panier .panneau__pied-de-page p span\";\nexport const SELECTEUR_BOUTON_SEPARATION_ADRESSES = \"#separation-adresses\";\nexport const SELECTEUR_FORMULAIRE_PANIER = \"#panneau-informations-client form\";\nexport const SELECTEUR_FORMULAIRE_LIVRAISON = \"#panneau-informations-client .panneau__formulaires__livraison\";\nexport const SELECTEUR_FORMULAIRE_FACTURATION = \"#panneau-informations-client .panneau__formulaires__facturation\";\nexport const SELECTEUR_BOUTON_ACTIONS_FORMULAIRE = \"#panneau-informations-client .panneau__pied-de-page button\";\nexport const SELECTEUR_INSTRUCTIONS_CLIENT = \"#panneau-panier #instructions-client\";\nexport const SELECTEUR_ENSEMBLE_CODE_PROMO = \"#panneau-panier #ensemble-code-promo\";\nexport const SELECTEUR_CHAMP_CODE_PROMO = \"#panneau-panier #champ-code-promo\";\nexport const SELECTEUR_BOUTON_CODE_PROMO = \"#panneau-panier #bouton-code-promo\";\nexport const SELECTEUR_MESSAGE_CODE_PROMO = \"#panneau-panier .panneau__instructions-code-promo__code-promo__message\";\n\n// Accueil\nexport const SELECTEUR_CONTENEUR_STORYTELLING = \".storytelling\";\nexport const SELECTEUR_IMAGES_STORYTELLING = \".storytelling__image\";\n\n// Boutique\nexport const SELECTEUR_GRILLE_PRODUITS = \"#page-boutique .grille-produits\";\nexport const SELECTEUR_BOUTON_PLUS_PRODUITS = \"#page-boutique #bouton-plus-de-produits\";\n\n// À propos\nexport const SELECTEUR_CONTENEUR_STORYTELLING_A_PROPOS = \".storytelling__conteneur\";\nexport const CLASS_EPINGLE = \"epingle\";\nexport const SELECTEUR_EPINGLE = `.${CLASS_EPINGLE}`;\nexport const CLASS_BOITE_TEXTE = \"boite-texte\";\nexport const SELECTEUR_BOITE_TEXTE = `.${CLASS_BOITE_TEXTE}`;\nexport const CLASS_BOUTON_FERMETURE_BOITE_TEXTE = \"boite-texte__bouton-fermeture\";\nexport const SELECTEUR_BOUTON_FERMETURE_BOITE_TEXTE = `.${CLASS_BOUTON_FERMETURE_BOITE_TEXTE}`;\n\n// Produit\nexport const SELECTEUR_PHOTOS_PRODUIT = \".photos-produit\";\nexport const SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT = \".fleches-defilement\";\nexport const SELECTEUR_FLECHE_DEFILEMENT_GAUCHE = \".fleches-defilement__bouton:first-of-type\";\nexport const SELECTEUR_FLECHE_DEFILEMENT_DROITE = \".fleches-defilement__bouton:last-of-type\";\nexport const SELECTEUR_IMAGE_COLONNE_GAUCHE = \".colonne-gauche img\";\nexport const SELECTEUR_IMAGES_COLONNE_DROITE = \".colonne-droite img\";\nexport const SELECTEUR_PRIX_PRODUIT = \".selecteur-produit__prix\";\n"],"names":[],"mappings":"AAEO,MAAM,uBAAuB;AAC7B,MAAM,yBAAyB;AAC/B,MAAM,iBAAiB;AACvB,MAAM,sBAAsB;AAC5B,MAAM,8BAA8B;AACpC,MAAM,6BAA6B;AACnC,MAAM,qBAAqB;AAC3B,MAAM,wCAAwC;AAC9C,MAAM,kBAAkB;AACxB,MAAM,iCAAiC;AACvC,MAAM,qCAAqC;AAE3C,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AACpC,MAAM,gBAAgB;AACtB,MAAM,gBAAgB;AACtB,MAAM,sBAAsB;AAG5B,MAAM,+BAA+B;AACrC,MAAM,0BAA0B;AAChC,MAAM,wBAAwB;AAC9B,MAAM,qCAAqC;AAC3C,MAAM,4CAA4C;AAKlD,MAAM,6BAA6B;AACnC,MAAM,+BAA+B;AACrC,MAAM,gCAAgC;AACtC,MAAM,0BAA0B;AAChC,MAAM,8BAA8B;AAGpC,MAAM,2BAA2B;AACjC,MAAM,sCAAsC;AAC5C,MAAM,yCAAyC;AAC/C,MAAM,qCAAqC;AAC3C,MAAM,wCAAwC;AAC9C,MAAM,8BAA8B;AACpC,MAAM,gCAAgC;AACtC,MAAM,sCAAsC;AAC5C,MAAM,6CAA6C;AACnD,MAAM,4BAA4B;AAClC,MAAM,mCAAmC;AACzC,MAAM,yBAAyB;AAC/B,MAAM,uCAAuC;AAC7C,MAAM,8BAA8B;AAEpC,MAAM,mCAAmC;AACzC,MAAM,sCAAsC;AAC5C,MAAM,gCAAgC;AACtC,MAAM,gCAAgC;AACtC,MAAM,6BAA6B;AACnC,MAAM,8BAA8B;AACpC,MAAM,+BAA+B;AAGrC,MAAM,mCAAmC;AACzC,MAAM,gCAAgC;AAGtC,MAAM,4BAA4B;AAClC,MAAM,iCAAiC;AAGvC,MAAM,4CAA4C;AAClD,MAAM,gBAAgB;AAChB,MAAA,oBAAoB,IAAI,aAAa;AAC3C,MAAM,oBAAoB;AACpB,MAAA,wBAAwB,IAAI,iBAAiB;AACnD,MAAM,qCAAqC;AAI3C,MAAM,2BAA2B;AACjC,MAAM,yCAAyC;AAC/C,MAAM,qCAAqC;AAC3C,MAAM,qCAAqC;AAC3C,MAAM,iCAAiC;AACvC,MAAM,kCAAkC;AACxC,MAAM,yBAAyB;"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/dom2.js b/web/app/themes/haiku-atelier-2024/assets/js/dom2.js index ed5f8508..374851b7 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/dom2.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/dom2.js @@ -1,4 +1,4 @@ -import { e as creeSyntaxError, f as reporteEtLeveErreur, g as ErreurEntreeInexistante, h as ERREUR_SYNTAXE_INVALIDE, i as ERREUR_SELECTEUR_INEXISTANT } from "./erreurs.js"; +import { e as creeSyntaxError, f as reporteEtLeveErreur, g as ErreurEntreeInexistante, h as ERREUR_SYNTAXE_INVALIDE, i as ERREUR_SELECTEUR_INEXISTANT } from "./erreurs2.js"; import { p as pipe } from "./pipe.XPB0wEfw.js"; import { E as Either, r as right, l as left, M as Maybe } from "./Either.wHNxn7Os.js"; import "./exports.3IcOsN8u.js"; diff --git a/web/app/themes/haiku-atelier-2024/assets/js/erreurs.js b/web/app/themes/haiku-atelier-2024/assets/js/erreurs.js index 1df43369..9f31449e 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/erreurs.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/erreurs.js @@ -1,88 +1,5 @@ -import { c as captureException } from "./exports.3IcOsN8u.js"; -const ERREUR_SYNTAXE_INVALIDE = (selecteur) => `Le selecteur "${selecteur}" est invalide`; -const ERREUR_SELECTEUR_INEXISTANT = (selecteur) => `La requête "${selecteur}" n'a retourné aucun Élément.`; -const creeSyntaxError = (message) => new SyntaxError(message); -class BadRequestError extends Error { - constructor(message = "400 BadRequestError") { - super(message); - this.name = "BadRequestError"; - } -} -class UnauthorizedError extends Error { - constructor(message = "401 UnauthorizedError") { - super(message); - this.name = "UnauthorizedError"; - } -} -class NotFoundError extends Error { - constructor(message = "404 NotFoundError") { - super(message); - this.name = "NotFoundError"; - } -} -class ServerError extends Error { - constructor(message = "500 ServerError") { - super(message); - this.name = "ServerError"; - } -} -class UnknownError extends Error { - constructor(message) { - super(JSON.stringify(message)); - this.name = "UnknownError"; - } -} -class CleNonTrouveError extends Error { - constructor(message) { - super(JSON.stringify(message)); - this.name = "CleNonTrouveError"; - } -} -class NonExistingKeyError extends Error { - constructor(message) { - super(JSON.stringify(message)); - this.name = "NonExistingKeyError"; - } -} -const ErreurInconnue = (erreur) => new UnknownError(erreur); -const ErreurEntreeInexistante = (message) => new NonExistingKeyError(message); -const leveErreur = (erreur) => { - throw erreur; -}; -const leveBadRequestError = (erreur) => { - throw new BadRequestError(`(${erreur.code}) ${erreur.message}`); -}; -const leveUnauthorizedError = (erreur) => { - throw new UnauthorizedError(`(${erreur.code}) ${erreur.message}`); -}; -const leveNotFoundError = (erreur) => { - throw new NotFoundError(`(${erreur.code}) ${erreur.message}`); -}; -const leveServerError = (message) => { - throw new ServerError(message); -}; -const reporteErreur = (erreur) => { - console.error(erreur); - return captureException(erreur); -}; -const reporteEtLeveErreur = (erreur) => { - reporteErreur(erreur); - throw erreur; -}; +const ERREUR_CODE_PROMO_INVALIDE = "woocommerce_rest_cart_coupon_error"; export { - CleNonTrouveError as C, - ErreurInconnue as E, - ServerError as S, - leveErreur as a, - leveBadRequestError as b, - leveUnauthorizedError as c, - leveNotFoundError as d, - creeSyntaxError as e, - reporteEtLeveErreur as f, - ErreurEntreeInexistante as g, - ERREUR_SYNTAXE_INVALIDE as h, - ERREUR_SELECTEUR_INEXISTANT as i, - leveServerError as l, - reporteErreur as r + ERREUR_CODE_PROMO_INVALIDE as E }; //# sourceMappingURL=erreurs.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/erreurs.js.map b/web/app/themes/haiku-atelier-2024/assets/js/erreurs.js.map index 51b1ad55..8bd57fac 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/erreurs.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/erreurs.js.map @@ -1 +1 @@ -{"version":3,"file":"erreurs.js","sources":["../../src/scripts/lib/erreurs.ts"],"sourcesContent":["/**\n * Fonctions pour la création d'Erreurs.\n */\n\nimport { captureException } from \"@sentry/browser\";\n\nimport type { WCErrorBody } from \"./types/api/erreurs\";\n\n/* Messages d'erreur */\nexport const ERREUR_SYNTAXE_INVALIDE = (selecteur: string): string => `Le selecteur \"${selecteur}\" est invalide`;\nexport const ERREUR_SELECTEUR_INEXISTANT = (selecteur: string): string =>\n `La requête \"${selecteur}\" n'a retourné aucun Élément.`;\n\n/* Création d'erreurs */\nexport const creeSyntaxError = (message: string): SyntaxError => new SyntaxError(message);\n\n/* Types d'erreurs */\nexport class BadRequestError extends Error {\n constructor(message = \"400 BadRequestError\") {\n super(message);\n this.name = \"BadRequestError\";\n }\n}\nexport class UnauthorizedError extends Error {\n constructor(message = \"401 UnauthorizedError\") {\n super(message);\n this.name = \"UnauthorizedError\";\n }\n}\nexport class NotFoundError extends Error {\n constructor(message = \"404 NotFoundError\") {\n super(message);\n this.name = \"NotFoundError\";\n }\n}\nexport class ServerError extends Error {\n constructor(message = \"500 ServerError\") {\n super(message);\n this.name = \"ServerError\";\n }\n}\nexport class UnknownError extends Error {\n constructor(message: unknown) {\n super(JSON.stringify(message));\n this.name = \"UnknownError\";\n }\n}\nexport class DOMElementAbsentError extends Error {\n constructor(message: unknown) {\n super(JSON.stringify(message));\n this.name = \"DOMElementAbsentError\";\n }\n}\nexport class CleNonTrouveError extends Error {\n constructor(message: unknown) {\n super(JSON.stringify(message));\n this.name = \"CleNonTrouveError\";\n }\n}\nexport class NonExistingKeyError extends Error {\n constructor(message: unknown) {\n super(JSON.stringify(message));\n this.name = \"NonExistingKeyError\";\n }\n}\n\n/* Fonction utilitaire pour créer ou lever des Erreurs */\nexport const Erreur = (message: string): Error => new Error(message);\nexport const ErreurInconnue = (erreur: unknown): UnknownError => new UnknownError(erreur);\nexport const ErreurEntreeInexistante = (message: string): NonExistingKeyError => new NonExistingKeyError(message);\n\nexport const leveErreur = (erreur: E): never => {\n throw erreur;\n};\nexport const leveBadRequestError = (erreur: WCErrorBody): never => {\n throw new BadRequestError(`(${erreur.code}) ${erreur.message}`);\n};\nexport const leveUnauthorizedError = (erreur: WCErrorBody): never => {\n throw new UnauthorizedError(`(${erreur.code}) ${erreur.message}`);\n};\nexport const leveNotFoundError = (erreur: WCErrorBody): never => {\n throw new NotFoundError(`(${erreur.code}) ${erreur.message}`);\n};\nexport const leveServerError = (message: string): never => {\n throw new ServerError(message);\n};\nexport const leveUnknownError = (erreur: unknown): never => {\n throw new UnknownError(erreur);\n};\nexport const leveNonExistingKeyError = (message: string): never => {\n throw new NonExistingKeyError(message);\n};\n\n/**\n * Reporte une Erreur, sous forme d'erreur console et au service GlitchTip.\n *\n * @param erreur\n * @returns L'ID Sentry de l'évènement capturé.\n */\nexport const reporteErreur = (erreur: E): string => {\n console.error(erreur);\n return captureException(erreur);\n};\n\n/**\n * Reporte une Erreur, sous forme d'erreur console et au service GlitchTip, puis la lève sous forme\n * d'Exception.\n *\n * @param erreur\n * @returns never Lève une Erreur et ne retourne donc rien.\n */\nexport const reporteEtLeveErreur = (erreur: E): never => {\n reporteErreur(erreur);\n throw erreur;\n};\n"],"names":[],"mappings":";AASO,MAAM,0BAA0B,CAAC,cAA8B,iBAAiB,SAAS;AACzF,MAAM,8BAA8B,CAAC,cAC1C,eAAe,SAAS;AAGnB,MAAM,kBAAkB,CAAC,YAAiC,IAAI,YAAY,OAAO;AAGjF,MAAM,wBAAwB,MAAM;AAAA,EACzC,YAAY,UAAU,uBAAuB;AAC3C,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAAA;AAEhB;AACO,MAAM,0BAA0B,MAAM;AAAA,EAC3C,YAAY,UAAU,yBAAyB;AAC7C,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAAA;AAEhB;AACO,MAAM,sBAAsB,MAAM;AAAA,EACvC,YAAY,UAAU,qBAAqB;AACzC,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAAA;AAEhB;AACO,MAAM,oBAAoB,MAAM;AAAA,EACrC,YAAY,UAAU,mBAAmB;AACvC,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAAA;AAEhB;AACO,MAAM,qBAAqB,MAAM;AAAA,EACtC,YAAY,SAAkB;AACtB,UAAA,KAAK,UAAU,OAAO,CAAC;AAC7B,SAAK,OAAO;AAAA,EAAA;AAEhB;AAOO,MAAM,0BAA0B,MAAM;AAAA,EAC3C,YAAY,SAAkB;AACtB,UAAA,KAAK,UAAU,OAAO,CAAC;AAC7B,SAAK,OAAO;AAAA,EAAA;AAEhB;AACO,MAAM,4BAA4B,MAAM;AAAA,EAC7C,YAAY,SAAkB;AACtB,UAAA,KAAK,UAAU,OAAO,CAAC;AAC7B,SAAK,OAAO;AAAA,EAAA;AAEhB;AAIO,MAAM,iBAAiB,CAAC,WAAkC,IAAI,aAAa,MAAM;AACjF,MAAM,0BAA0B,CAAC,YAAyC,IAAI,oBAAoB,OAAO;AAEnG,MAAA,aAAa,CAA0B,WAAqB;AACjE,QAAA;AACR;AACa,MAAA,sBAAsB,CAAC,WAA+B;AAC3D,QAAA,IAAI,gBAAgB,IAAI,OAAO,IAAI,KAAK,OAAO,OAAO,EAAE;AAChE;AACa,MAAA,wBAAwB,CAAC,WAA+B;AAC7D,QAAA,IAAI,kBAAkB,IAAI,OAAO,IAAI,KAAK,OAAO,OAAO,EAAE;AAClE;AACa,MAAA,oBAAoB,CAAC,WAA+B;AACzD,QAAA,IAAI,cAAc,IAAI,OAAO,IAAI,KAAK,OAAO,OAAO,EAAE;AAC9D;AACa,MAAA,kBAAkB,CAAC,YAA2B;AACnD,QAAA,IAAI,YAAY,OAAO;AAC/B;AAca,MAAA,gBAAgB,CAAkB,WAAsB;AACnE,UAAQ,MAAM,MAAM;AACpB,SAAO,iBAAiB,MAAM;AAChC;AASa,MAAA,sBAAsB,CAAkB,WAAqB;AACxE,gBAAiB,MAAM;AACjB,QAAA;AACR;"} \ No newline at end of file +{"version":3,"file":"erreurs.js","sources":["../../src/scripts/constantes/erreurs.ts"],"sourcesContent":["export const ERREUR_CODE_PROMO_INVALIDE = \"woocommerce_rest_cart_coupon_error\";\n"],"names":[],"mappings":"AAAO,MAAM,6BAA6B;"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/erreurs2.js b/web/app/themes/haiku-atelier-2024/assets/js/erreurs2.js index b8ab58c9..34d614ce 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/erreurs2.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/erreurs2.js @@ -1,17 +1,88 @@ -import { l as is, o as object, n as number, s as string } from "./index.DKC_Jv5v.js"; -const WCErrorBodySchema = object({ - code: string(), - data: object({ - status: number() - }), - message: string() -}); -const WCErrorSchema = object({ - body: WCErrorBodySchema, - status: number() -}); -const estWCError = (donnees) => is(WCErrorSchema, donnees); +import { c as captureException } from "./exports.3IcOsN8u.js"; +const ERREUR_SYNTAXE_INVALIDE = (selecteur) => `Le selecteur "${selecteur}" est invalide`; +const ERREUR_SELECTEUR_INEXISTANT = (selecteur) => `La requête "${selecteur}" n'a retourné aucun Élément.`; +const creeSyntaxError = (message) => new SyntaxError(message); +class BadRequestError extends Error { + constructor(message = "400 BadRequestError") { + super(message); + this.name = "BadRequestError"; + } +} +class CleNonTrouveError extends Error { + constructor(message) { + super(JSON.stringify(message)); + this.name = "CleNonTrouveError"; + } +} +class NonExistingKeyError extends Error { + constructor(message) { + super(JSON.stringify(message)); + this.name = "NonExistingKeyError"; + } +} +class NotFoundError extends Error { + constructor(message = "404 NotFoundError") { + super(message); + this.name = "NotFoundError"; + } +} +class ServerError extends Error { + constructor(message = "500 ServerError") { + super(message); + this.name = "ServerError"; + } +} +class UnauthorizedError extends Error { + constructor(message = "401 UnauthorizedError") { + super(message); + this.name = "UnauthorizedError"; + } +} +class UnknownError extends Error { + constructor(message) { + super(JSON.stringify(message)); + this.name = "UnknownError"; + } +} +const ErreurInconnue = (erreur) => new UnknownError(erreur); +const ErreurEntreeInexistante = (message) => new NonExistingKeyError(message); +const leveErreur = (erreur) => { + throw erreur; +}; +const leveBadRequestError = (erreur) => { + throw new BadRequestError(`(${erreur.code}) ${erreur.message}`); +}; +const leveUnauthorizedError = (erreur) => { + throw new UnauthorizedError(`(${erreur.code}) ${erreur.message}`); +}; +const leveNotFoundError = (erreur) => { + throw new NotFoundError(`(${erreur.code}) ${erreur.message}`); +}; +const leveServerError = (message) => { + throw new ServerError(message); +}; +const reporteErreur = (erreur) => { + console.error(erreur); + return captureException(erreur); +}; +const reporteEtLeveErreur = (erreur) => { + reporteErreur(erreur); + throw erreur; +}; export { - estWCError as e + CleNonTrouveError as C, + ErreurInconnue as E, + ServerError as S, + leveErreur as a, + leveBadRequestError as b, + leveUnauthorizedError as c, + leveNotFoundError as d, + creeSyntaxError as e, + reporteEtLeveErreur as f, + ErreurEntreeInexistante as g, + ERREUR_SYNTAXE_INVALIDE as h, + ERREUR_SELECTEUR_INEXISTANT as i, + leveServerError as l, + reporteErreur as r }; //# sourceMappingURL=erreurs2.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/erreurs2.js.map b/web/app/themes/haiku-atelier-2024/assets/js/erreurs2.js.map index 8beff987..65383175 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/erreurs2.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/erreurs2.js.map @@ -1 +1 @@ -{"version":3,"file":"erreurs2.js","sources":["../../src/scripts/lib/schemas/api/erreurs.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCError } from \"../../types/api/erreurs\";\n\nexport const WCErrorBodySchema = v.object({\n code: v.string(),\n data: v.object({\n status: v.number(),\n }),\n message: v.string(),\n});\n\nexport const WCErrorSchema = v.object({\n body: WCErrorBodySchema,\n status: v.number(),\n});\n\nexport const estWCError = (donnees: unknown): donnees is WCError => v.is(WCErrorSchema, donnees);\n"],"names":["v.object","v.string","v.number","v.is"],"mappings":";AAIa,MAAA,oBAAoBA,OAAS;AAAA,EACxC,MAAMC,OAAS;AAAA,EACf,MAAMD,OAAS;AAAA,IACb,QAAQE,OAAS;AAAA,EAAA,CAClB;AAAA,EACD,SAASD,OAAS;AACpB,CAAC;AAEY,MAAA,gBAAgBD,OAAS;AAAA,EACpC,MAAM;AAAA,EACN,QAAQE,OAAS;AACnB,CAAC;AAEM,MAAM,aAAa,CAAC,YAAyCC,GAAK,eAAe,OAAO;"} \ No newline at end of file +{"version":3,"file":"erreurs2.js","sources":["../../src/scripts/lib/erreurs.ts"],"sourcesContent":["/**\n * Fonctions pour la création d'Erreurs.\n */\n\nimport { captureException } from \"@sentry/browser\";\n\nimport type { WCErrorBody } from \"./types/api/erreurs\";\n\n/* Messages d'erreur */\nexport const ERREUR_SYNTAXE_INVALIDE = (selecteur: string): string => `Le selecteur \"${selecteur}\" est invalide`;\nexport const ERREUR_SELECTEUR_INEXISTANT = (selecteur: string): string =>\n `La requête \"${selecteur}\" n'a retourné aucun Élément.`;\n\n/* Création d'erreurs */\nexport const creeSyntaxError = (message: string): SyntaxError => new SyntaxError(message);\n\n/* Types d'erreurs */\nexport class BadRequestError extends Error {\n constructor(message = \"400 BadRequestError\") {\n super(message);\n this.name = \"BadRequestError\";\n }\n}\nexport class CleNonTrouveError extends Error {\n constructor(message: unknown) {\n super(JSON.stringify(message));\n this.name = \"CleNonTrouveError\";\n }\n}\nexport class DOMElementAbsentError extends Error {\n constructor(message: unknown) {\n super(JSON.stringify(message));\n this.name = \"DOMElementAbsentError\";\n }\n}\nexport class NonExistingKeyError extends Error {\n constructor(message: unknown) {\n super(JSON.stringify(message));\n this.name = \"NonExistingKeyError\";\n }\n}\nexport class NotFoundError extends Error {\n constructor(message = \"404 NotFoundError\") {\n super(message);\n this.name = \"NotFoundError\";\n }\n}\nexport class ServerError extends Error {\n constructor(message = \"500 ServerError\") {\n super(message);\n this.name = \"ServerError\";\n }\n}\nexport class UnauthorizedError extends Error {\n constructor(message = \"401 UnauthorizedError\") {\n super(message);\n this.name = \"UnauthorizedError\";\n }\n}\nexport class UnknownError extends Error {\n constructor(message: unknown) {\n super(JSON.stringify(message));\n this.name = \"UnknownError\";\n }\n}\n\n/* Fonction utilitaire pour créer ou lever des Erreurs */\nexport const Erreur = (message: string): Error => new Error(message);\nexport const ErreurInconnue = (erreur: unknown): UnknownError => new UnknownError(erreur);\nexport const ErreurEntreeInexistante = (message: string): NonExistingKeyError => new NonExistingKeyError(message);\n\nexport const leveErreur = (erreur: E): never => {\n throw erreur;\n};\nexport const leveBadRequestError = (erreur: WCErrorBody): never => {\n throw new BadRequestError(`(${erreur.code}) ${erreur.message}`);\n};\nexport const leveUnauthorizedError = (erreur: WCErrorBody): never => {\n throw new UnauthorizedError(`(${erreur.code}) ${erreur.message}`);\n};\nexport const leveNotFoundError = (erreur: WCErrorBody): never => {\n throw new NotFoundError(`(${erreur.code}) ${erreur.message}`);\n};\nexport const leveServerError = (message: string): never => {\n throw new ServerError(message);\n};\nexport const leveUnknownError = (erreur: unknown): never => {\n throw new UnknownError(erreur);\n};\nexport const leveNonExistingKeyError = (message: string): never => {\n throw new NonExistingKeyError(message);\n};\n\n/**\n * Reporte une Erreur, sous forme d'erreur console et au service GlitchTip.\n *\n * @param erreur\n * @returns L'ID Sentry de l'évènement capturé.\n */\nexport const reporteErreur = (erreur: E): string => {\n console.error(erreur);\n return captureException(erreur);\n};\n\n/**\n * Reporte une Erreur, sous forme d'erreur console et au service GlitchTip, puis la lève sous forme\n * d'Exception.\n *\n * @param erreur\n * @returns never Lève une Erreur et ne retourne donc rien.\n */\nexport const reporteEtLeveErreur = (erreur: E): never => {\n reporteErreur(erreur);\n throw erreur;\n};\n"],"names":[],"mappings":";AASO,MAAM,0BAA0B,CAAC,cAA8B,iBAAiB,SAAS;AACzF,MAAM,8BAA8B,CAAC,cAC1C,eAAe,SAAS;AAGnB,MAAM,kBAAkB,CAAC,YAAiC,IAAI,YAAY,OAAO;AAGjF,MAAM,wBAAwB,MAAM;AAAA,EACzC,YAAY,UAAU,uBAAuB;AAC3C,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAAA;AAEhB;AACO,MAAM,0BAA0B,MAAM;AAAA,EAC3C,YAAY,SAAkB;AACtB,UAAA,KAAK,UAAU,OAAO,CAAC;AAC7B,SAAK,OAAO;AAAA,EAAA;AAEhB;AAOO,MAAM,4BAA4B,MAAM;AAAA,EAC7C,YAAY,SAAkB;AACtB,UAAA,KAAK,UAAU,OAAO,CAAC;AAC7B,SAAK,OAAO;AAAA,EAAA;AAEhB;AACO,MAAM,sBAAsB,MAAM;AAAA,EACvC,YAAY,UAAU,qBAAqB;AACzC,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAAA;AAEhB;AACO,MAAM,oBAAoB,MAAM;AAAA,EACrC,YAAY,UAAU,mBAAmB;AACvC,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAAA;AAEhB;AACO,MAAM,0BAA0B,MAAM;AAAA,EAC3C,YAAY,UAAU,yBAAyB;AAC7C,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EAAA;AAEhB;AACO,MAAM,qBAAqB,MAAM;AAAA,EACtC,YAAY,SAAkB;AACtB,UAAA,KAAK,UAAU,OAAO,CAAC;AAC7B,SAAK,OAAO;AAAA,EAAA;AAEhB;AAIO,MAAM,iBAAiB,CAAC,WAAkC,IAAI,aAAa,MAAM;AACjF,MAAM,0BAA0B,CAAC,YAAyC,IAAI,oBAAoB,OAAO;AAEnG,MAAA,aAAa,CAA0B,WAAqB;AACjE,QAAA;AACR;AACa,MAAA,sBAAsB,CAAC,WAA+B;AAC3D,QAAA,IAAI,gBAAgB,IAAI,OAAO,IAAI,KAAK,OAAO,OAAO,EAAE;AAChE;AACa,MAAA,wBAAwB,CAAC,WAA+B;AAC7D,QAAA,IAAI,kBAAkB,IAAI,OAAO,IAAI,KAAK,OAAO,OAAO,EAAE;AAClE;AACa,MAAA,oBAAoB,CAAC,WAA+B;AACzD,QAAA,IAAI,cAAc,IAAI,OAAO,IAAI,KAAK,OAAO,OAAO,EAAE;AAC9D;AACa,MAAA,kBAAkB,CAAC,YAA2B;AACnD,QAAA,IAAI,YAAY,OAAO;AAC/B;AAca,MAAA,gBAAgB,CAAkB,WAAsB;AACnE,UAAQ,MAAM,MAAM;AACpB,SAAO,iBAAiB,MAAM;AAChC;AASa,MAAA,sBAAsB,CAAkB,WAAqB;AACxE,gBAAiB,MAAM;AACjB,QAAA;AACR;"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/erreurs3.js b/web/app/themes/haiku-atelier-2024/assets/js/erreurs3.js new file mode 100644 index 00000000..d7fce408 --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/js/erreurs3.js @@ -0,0 +1,18 @@ +import { o as object, n as number, i as is, s as string } from "./index.DxUTT09Y.js"; +const WCErrorBodySchema = object({ + code: string(), + data: object({ + status: number() + }), + message: string() +}); +const WCErrorSchema = object({ + body: WCErrorBodySchema, + status: number() +}); +const estWCError = (donnees) => is(WCErrorSchema, donnees); +export { + WCErrorSchema as W, + estWCError as e +}; +//# sourceMappingURL=erreurs3.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/erreurs3.js.map b/web/app/themes/haiku-atelier-2024/assets/js/erreurs3.js.map new file mode 100644 index 00000000..4a37cf0e --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/js/erreurs3.js.map @@ -0,0 +1 @@ +{"version":3,"file":"erreurs3.js","sources":["../../src/scripts/lib/schemas/api/erreurs.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport type { WCError } from \"../../types/api/erreurs\";\n\nexport const WCErrorBodySchema = v.object({\n code: v.string(),\n data: v.object({\n status: v.number(),\n }),\n message: v.string(),\n});\n\nexport const WCErrorSchema = v.object({\n body: WCErrorBodySchema,\n status: v.number(),\n});\n\nexport const estWCError = (donnees: unknown): donnees is WCError => v.is(WCErrorSchema, donnees);\n"],"names":["v.object","v.string","v.number","v.is"],"mappings":";AAIa,MAAA,oBAAoBA,OAAS;AAAA,EACxC,MAAMC,OAAS;AAAA,EACf,MAAMD,OAAS;AAAA,IACb,QAAQE,OAAS;AAAA,EAAA,CAClB;AAAA,EACD,SAASD,OAAS;AACpB,CAAC;AAEY,MAAA,gBAAgBD,OAAS;AAAA,EACpC,MAAM;AAAA,EACN,QAAQE,OAAS;AACnB,CAAC;AAEM,MAAM,aAAa,CAAC,YAAyCC,GAAK,eAAe,OAAO;"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/exports.3IcOsN8u.js.map b/web/app/themes/haiku-atelier-2024/assets/js/exports.3IcOsN8u.js.map index 663cd486..d599db27 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/exports.3IcOsN8u.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/exports.3IcOsN8u.js.map @@ -1 +1 @@ -{"version":3,"file":"exports.3IcOsN8u.js","sources":["../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/is.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/string.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/version.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/worldwide.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/browser.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/debug-build.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/logger.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/object.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/stacktrace.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/time.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/memo.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/misc.js","../../../../../../node_modules/.pnpm/vite-plugin-node-polyfills@0.22.0_rollup@4.27.3_vite@5.4.11_@types+node@22.9.0_sass-embedded@1.81.0_sass@1.80.6_/node_modules/vite-plugin-node-polyfills/shims/global/dist/index.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/normalize.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/syncpromise.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/baggage.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/propagationContext.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/debug-ids.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/debug-build.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/carrier.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/session.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/scope.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/defaultScopes.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/asyncContext/index.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/currentScopes.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/metrics/metric-summary.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/semanticAttributes.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/utils/hasTracingEnabled.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/constants.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/eventProcessors.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/utils/prepareEvent.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.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","// This is a magic string replaced by rollup\n\nconst SDK_VERSION = \"8.39.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;AC1FK,MAAC,cAAc;ACCf,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 +{"version":3,"file":"exports.3IcOsN8u.js","sources":["../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/is.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/string.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/version.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/worldwide.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/browser.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/debug-build.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/logger.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/object.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/stacktrace.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/time.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/memo.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/misc.js","../../../../../../node_modules/.pnpm/vite-plugin-node-polyfills@0.22.0_rollup@4.27.3_vite@5.4.11_@types+node@22.9.1_sass-embedded@1.81.0_sass@1.80.6_/node_modules/vite-plugin-node-polyfills/shims/global/dist/index.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/normalize.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/syncpromise.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/baggage.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/propagationContext.js","../../../../../../node_modules/.pnpm/@sentry+utils@8.39.0/node_modules/@sentry/utils/build/esm/debug-ids.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/debug-build.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/carrier.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/session.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/utils/spanOnScope.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/scope.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/defaultScopes.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/asyncContext/stackStrategy.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/asyncContext/index.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/currentScopes.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/metrics/metric-summary.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/semanticAttributes.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/tracing/spanstatus.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/utils/spanUtils.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/utils/hasTracingEnabled.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/constants.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/tracing/dynamicSamplingContext.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/eventProcessors.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/utils/applyScopeDataToEvent.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.0/node_modules/@sentry/core/build/esm/utils/prepareEvent.js","../../../../../../node_modules/.pnpm/@sentry+core@8.39.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","// This is a magic string replaced by rollup\n\nconst SDK_VERSION = \"8.39.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 diff --git a/web/app/themes/haiku-atelier-2024/assets/js/index.DKC_Jv5v.js b/web/app/themes/haiku-atelier-2024/assets/js/index.DxUTT09Y.js similarity index 99% rename from web/app/themes/haiku-atelier-2024/assets/js/index.DKC_Jv5v.js rename to web/app/themes/haiku-atelier-2024/assets/js/index.DxUTT09Y.js index e9977fab..6c227e6c 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/index.DKC_Jv5v.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/index.DxUTT09Y.js @@ -606,10 +606,10 @@ export { union as f, null_ as g, url as h, - integer as i, - omit as j, - maxValue as k, - is as l, + is as i, + integer as j, + omit as k, + maxValue as l, minValue as m, number as n, object as o, @@ -618,4 +618,4 @@ export { unknown as u, value as v }; -//# sourceMappingURL=index.DKC_Jv5v.js.map +//# sourceMappingURL=index.DxUTT09Y.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/index.DKC_Jv5v.js.map b/web/app/themes/haiku-atelier-2024/assets/js/index.DxUTT09Y.js.map similarity index 99% rename from web/app/themes/haiku-atelier-2024/assets/js/index.DKC_Jv5v.js.map rename to web/app/themes/haiku-atelier-2024/assets/js/index.DxUTT09Y.js.map index 061cd8be..18771316 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/index.DKC_Jv5v.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/index.DxUTT09Y.js.map @@ -1 +1 @@ -{"version":3,"file":"index.DKC_Jv5v.js","sources":["../../../../../../node_modules/.pnpm/valibot@1.0.0-beta.7_typescript@5.7.0-dev.20241105/node_modules/valibot/dist/index.js"],"sourcesContent":["// src/storages/globalConfig/globalConfig.ts\nvar store;\nfunction setGlobalConfig(config2) {\n store = { ...store, ...config2 };\n}\nfunction getGlobalConfig(config2) {\n return {\n lang: config2?.lang ?? store?.lang,\n message: config2?.message,\n abortEarly: config2?.abortEarly ?? store?.abortEarly,\n abortPipeEarly: config2?.abortPipeEarly ?? store?.abortPipeEarly\n };\n}\nfunction deleteGlobalConfig() {\n store = void 0;\n}\n\n// src/storages/globalMessage/globalMessage.ts\nvar store2;\nfunction setGlobalMessage(message, lang) {\n if (!store2) store2 = /* @__PURE__ */ new Map();\n store2.set(lang, message);\n}\nfunction getGlobalMessage(lang) {\n return store2?.get(lang);\n}\nfunction deleteGlobalMessage(lang) {\n store2?.delete(lang);\n}\n\n// src/storages/schemaMessage/schemaMessage.ts\nvar store3;\nfunction setSchemaMessage(message, lang) {\n if (!store3) store3 = /* @__PURE__ */ new Map();\n store3.set(lang, message);\n}\nfunction getSchemaMessage(lang) {\n return store3?.get(lang);\n}\nfunction deleteSchemaMessage(lang) {\n store3?.delete(lang);\n}\n\n// src/storages/specificMessage/specificMessage.ts\nvar store4;\nfunction setSpecificMessage(reference, message, lang) {\n if (!store4) store4 = /* @__PURE__ */ new Map();\n if (!store4.get(reference)) store4.set(reference, /* @__PURE__ */ new Map());\n store4.get(reference).set(lang, message);\n}\nfunction getSpecificMessage(reference, lang) {\n return store4?.get(reference)?.get(lang);\n}\nfunction deleteSpecificMessage(reference, lang) {\n store4?.get(reference)?.delete(lang);\n}\n\n// src/utils/_stringify/_stringify.ts\nfunction _stringify(input) {\n const type = typeof input;\n if (type === \"string\") {\n return `\"${input}\"`;\n }\n if (type === \"number\" || type === \"bigint\" || type === \"boolean\") {\n return `${input}`;\n }\n if (type === \"object\" || type === \"function\") {\n return (input && Object.getPrototypeOf(input)?.constructor?.name) ?? \"null\";\n }\n return type;\n}\n\n// src/utils/_addIssue/_addIssue.ts\nfunction _addIssue(context, label, dataset, config2, other) {\n const input = other && \"input\" in other ? other.input : dataset.value;\n const expected = other?.expected ?? context.expects ?? null;\n const received = other?.received ?? _stringify(input);\n const issue = {\n kind: context.kind,\n type: context.type,\n input,\n expected,\n received,\n message: `Invalid ${label}: ${expected ? `Expected ${expected} but r` : \"R\"}eceived ${received}`,\n requirement: context.requirement,\n path: other?.path,\n issues: other?.issues,\n lang: config2.lang,\n abortEarly: config2.abortEarly,\n abortPipeEarly: config2.abortPipeEarly\n };\n const isSchema = context.kind === \"schema\";\n const message = other?.message ?? context.message ?? getSpecificMessage(context.reference, issue.lang) ?? (isSchema ? getSchemaMessage(issue.lang) : null) ?? config2.message ?? getGlobalMessage(issue.lang);\n if (message) {\n issue.message = typeof message === \"function\" ? (\n // @ts-expect-error\n message(issue)\n ) : message;\n }\n if (isSchema) {\n dataset.typed = false;\n }\n if (dataset.issues) {\n dataset.issues.push(issue);\n } else {\n dataset.issues = [issue];\n }\n}\n\n// src/utils/_getByteCount/_getByteCount.ts\nvar textEncoder;\nfunction _getByteCount(input) {\n if (!textEncoder) {\n textEncoder = new TextEncoder();\n }\n return textEncoder.encode(input).length;\n}\n\n// src/utils/_getGraphemeCount/_getGraphemeCount.ts\nvar segmenter;\nfunction _getGraphemeCount(input) {\n if (!segmenter) {\n segmenter = new Intl.Segmenter();\n }\n const segments = segmenter.segment(input);\n let count = 0;\n for (const _ of segments) {\n count++;\n }\n return count;\n}\n\n// src/utils/_getStandardProps/_getStandardProps.ts\nfunction _getStandardProps(context) {\n return {\n version: 1,\n vendor: \"valibot\",\n validate(value2) {\n return context[\"~run\"]({ value: value2 }, getGlobalConfig());\n }\n };\n}\n\n// src/utils/_getWordCount/_getWordCount.ts\nvar store5;\nfunction _getWordCount(locales, input) {\n if (!store5) {\n store5 = /* @__PURE__ */ new Map();\n }\n if (!store5.get(locales)) {\n store5.set(locales, new Intl.Segmenter(locales, { granularity: \"word\" }));\n }\n const segments = store5.get(locales).segment(input);\n let count = 0;\n for (const segment of segments) {\n if (segment.isWordLike) {\n count++;\n }\n }\n return count;\n}\n\n// src/utils/_isLuhnAlgo/_isLuhnAlgo.ts\nvar NON_DIGIT_REGEX = /\\D/gu;\nfunction _isLuhnAlgo(input) {\n const number2 = input.replace(NON_DIGIT_REGEX, \"\");\n let length2 = number2.length;\n let bit = 1;\n let sum = 0;\n while (length2) {\n const value2 = +number2[--length2];\n bit ^= 1;\n sum += bit ? [0, 2, 4, 6, 8, 1, 3, 5, 7, 9][value2] : value2;\n }\n return sum % 10 === 0;\n}\n\n// src/utils/_isValidObjectKey/_isValidObjectKey.ts\nfunction _isValidObjectKey(object2, key) {\n return Object.hasOwn(object2, key) && key !== \"__proto__\" && key !== \"prototype\" && key !== \"constructor\";\n}\n\n// src/utils/_joinExpects/_joinExpects.ts\nfunction _joinExpects(values, separator) {\n const list = [...new Set(values)];\n if (list.length > 1) {\n return `(${list.join(` ${separator} `)})`;\n }\n return list[0] ?? \"never\";\n}\n\n// src/utils/entriesFromList/entriesFromList.ts\nfunction entriesFromList(list, schema) {\n const entries = {};\n for (const key of list) {\n entries[key] = schema;\n }\n return entries;\n}\n\n// src/utils/getDotPath/getDotPath.ts\nfunction getDotPath(issue) {\n if (issue.path) {\n let key = \"\";\n for (const item of issue.path) {\n if (typeof item.key === \"string\" || typeof item.key === \"number\") {\n if (key) {\n key += `.${item.key}`;\n } else {\n key += item.key;\n }\n } else {\n return null;\n }\n }\n return key;\n }\n return null;\n}\n\n// src/utils/isOfKind/isOfKind.ts\nfunction isOfKind(kind, object2) {\n return object2.kind === kind;\n}\n\n// src/utils/isOfType/isOfType.ts\nfunction isOfType(type, object2) {\n return object2.type === type;\n}\n\n// src/utils/isValiError/isValiError.ts\nfunction isValiError(error) {\n return error instanceof ValiError;\n}\n\n// src/utils/ValiError/ValiError.ts\nvar ValiError = class extends Error {\n /**\n * The error issues.\n */\n issues;\n /**\n * Creates a Valibot error with useful information.\n *\n * @param issues The error issues.\n */\n constructor(issues) {\n super(issues[0].message);\n this.name = \"ValiError\";\n this.issues = issues;\n }\n};\n\n// src/actions/args/args.ts\nfunction args(schema) {\n return {\n kind: \"transformation\",\n type: \"args\",\n reference: args,\n async: false,\n schema,\n \"~run\"(dataset, config2) {\n const func = dataset.value;\n dataset.value = (...args_) => {\n const argsDataset = this.schema[\"~run\"]({ value: args_ }, config2);\n if (argsDataset.issues) {\n throw new ValiError(argsDataset.issues);\n }\n return func(...argsDataset.value);\n };\n return dataset;\n }\n };\n}\n\n// src/actions/args/argsAsync.ts\nfunction argsAsync(schema) {\n return {\n kind: \"transformation\",\n type: \"args\",\n reference: argsAsync,\n async: false,\n schema,\n \"~run\"(dataset, config2) {\n const func = dataset.value;\n dataset.value = async (...args2) => {\n const argsDataset = await schema[\"~run\"]({ value: args2 }, config2);\n if (argsDataset.issues) {\n throw new ValiError(argsDataset.issues);\n }\n return func(...argsDataset.value);\n };\n return dataset;\n }\n };\n}\n\n// src/actions/await/awaitAsync.ts\nfunction awaitAsync() {\n return {\n kind: \"transformation\",\n type: \"await\",\n reference: awaitAsync,\n async: true,\n async \"~run\"(dataset) {\n dataset.value = await dataset.value;\n return dataset;\n }\n };\n}\n\n// src/regex.ts\nvar BASE64_REGEX = /^(?:[\\da-z+/]{4})*(?:[\\da-z+/]{2}==|[\\da-z+/]{3}=)?$/iu;\nvar BIC_REGEX = /^[A-Z]{6}(?!00)[\\dA-Z]{2}(?:[\\dA-Z]{3})?$/u;\nvar CUID2_REGEX = /^[a-z][\\da-z]*$/u;\nvar DECIMAL_REGEX = /^[+-]?\\d+(?:\\.\\d+)?$/u;\nvar DIGITS_REGEX = /^\\d+$/u;\nvar EMAIL_REGEX = /^[\\w+-]+(?:\\.[\\w+-]+)*@[\\da-z]+(?:[.-][\\da-z]+)*\\.[a-z]{2,}$/iu;\nvar EMOJI_REGEX = (\n // eslint-disable-next-line redos-detector/no-unsafe-regex, regexp/no-dupe-disjunctions -- false positives\n /^(?:[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}))*)+$/u\n);\nvar HEXADECIMAL_REGEX = /^(?:0[hx])?[\\da-f]+$/iu;\nvar HEX_COLOR_REGEX = /^#(?:[\\da-f]{3,4}|[\\da-f]{6}|[\\da-f]{8})$/iu;\nvar IMEI_REGEX = /^\\d{15}$|^\\d{2}-\\d{6}-\\d{6}-\\d$/u;\nvar IPV4_REGEX = (\n // eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive\n /^(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])(?:\\.(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])){3}$/u\n);\nvar IPV6_REGEX = /^(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:|(?:[\\da-f]{1,4}:){1,6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,5}(?::[\\da-f]{1,4}){1,2}|(?:[\\da-f]{1,4}:){1,4}(?::[\\da-f]{1,4}){1,3}|(?:[\\da-f]{1,4}:){1,3}(?::[\\da-f]{1,4}){1,4}|(?:[\\da-f]{1,4}:){1,2}(?::[\\da-f]{1,4}){1,5}|[\\da-f]{1,4}:(?::[\\da-f]{1,4}){1,6}|:(?:(?::[\\da-f]{1,4}){1,7}|:)|fe80:(?::[\\da-f]{0,4}){0,4}%[\\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)|(?:[\\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d))$/iu;\nvar IP_REGEX = /^(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])(?:\\.(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])){3}$|^(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:|(?:[\\da-f]{1,4}:){1,6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,5}(?::[\\da-f]{1,4}){1,2}|(?:[\\da-f]{1,4}:){1,4}(?::[\\da-f]{1,4}){1,3}|(?:[\\da-f]{1,4}:){1,3}(?::[\\da-f]{1,4}){1,4}|(?:[\\da-f]{1,4}:){1,2}(?::[\\da-f]{1,4}){1,5}|[\\da-f]{1,4}:(?::[\\da-f]{1,4}){1,6}|:(?:(?::[\\da-f]{1,4}){1,7}|:)|fe80:(?::[\\da-f]{0,4}){0,4}%[\\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)|(?:[\\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d))$/iu;\nvar ISO_DATE_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])$/u;\nvar ISO_DATE_TIME_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])T(?:0\\d|1\\d|2[0-3]):[0-5]\\d$/u;\nvar ISO_TIME_REGEX = /^(?:0\\d|1\\d|2[0-3]):[0-5]\\d$/u;\nvar ISO_TIME_SECOND_REGEX = /^(?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}$/u;\nvar ISO_TIMESTAMP_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])T(?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}(?:\\.\\d{1,9})?(?:Z|[+-](?:0\\d|1\\d|2[0-3])(?::?[0-5]\\d)?)$/u;\nvar ISO_WEEK_REGEX = /^\\d{4}-W(?:0[1-9]|[1-4]\\d|5[0-3])$/u;\nvar MAC48_REGEX = /^(?:[\\da-f]{2}:){5}[\\da-f]{2}$|^(?:[\\da-f]{2}-){5}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){2}[\\da-f]{4}$/iu;\nvar MAC64_REGEX = /^(?:[\\da-f]{2}:){7}[\\da-f]{2}$|^(?:[\\da-f]{2}-){7}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){3}[\\da-f]{4}$|^(?:[\\da-f]{4}:){3}[\\da-f]{4}$/iu;\nvar MAC_REGEX = /^(?:[\\da-f]{2}:){5}[\\da-f]{2}$|^(?:[\\da-f]{2}-){5}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){2}[\\da-f]{4}$|^(?:[\\da-f]{2}:){7}[\\da-f]{2}$|^(?:[\\da-f]{2}-){7}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){3}[\\da-f]{4}$|^(?:[\\da-f]{4}:){3}[\\da-f]{4}$/iu;\nvar NANO_ID_REGEX = /^[\\w-]+$/u;\nvar OCTAL_REGEX = /^(?:0o)?[0-7]+$/iu;\nvar ULID_REGEX = /^[\\da-hjkmnp-tv-z]{26}$/iu;\nvar UUID_REGEX = /^[\\da-f]{8}(?:-[\\da-f]{4}){3}-[\\da-f]{12}$/iu;\n\n// src/actions/base64/base64.ts\nfunction base64(message) {\n return {\n kind: \"validation\",\n type: \"base64\",\n reference: base64,\n async: false,\n expects: null,\n requirement: BASE64_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"Base64\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/bic/bic.ts\nfunction bic(message) {\n return {\n kind: \"validation\",\n type: \"bic\",\n reference: bic,\n async: false,\n expects: null,\n requirement: BIC_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"BIC\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/brand/brand.ts\nfunction brand(name) {\n return {\n kind: \"transformation\",\n type: \"brand\",\n reference: brand,\n async: false,\n name,\n \"~run\"(dataset) {\n return dataset;\n }\n };\n}\n\n// src/actions/bytes/bytes.ts\nfunction bytes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"bytes\",\n reference: bytes,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const length2 = _getByteCount(dataset.value);\n if (length2 !== this.requirement) {\n _addIssue(this, \"bytes\", dataset, config2, {\n received: `${length2}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/check/check.ts\nfunction check(requirement, message) {\n return {\n kind: \"validation\",\n type: \"check\",\n reference: check,\n async: false,\n expects: null,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"input\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/check/checkAsync.ts\nfunction checkAsync(requirement, message) {\n return {\n kind: \"validation\",\n type: \"check\",\n reference: checkAsync,\n async: true,\n expects: null,\n requirement,\n message,\n async \"~run\"(dataset, config2) {\n if (dataset.typed && !await this.requirement(dataset.value)) {\n _addIssue(this, \"input\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/checkItems/checkItems.ts\nfunction checkItems(requirement, message) {\n return {\n kind: \"validation\",\n type: \"check_items\",\n reference: checkItems,\n async: false,\n expects: null,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n for (let index = 0; index < dataset.value.length; index++) {\n const item = dataset.value[index];\n if (!this.requirement(item, index, dataset.value)) {\n _addIssue(this, \"item\", dataset, config2, {\n input: item,\n path: [\n {\n type: \"array\",\n origin: \"value\",\n input: dataset.value,\n key: index,\n value: item\n }\n ]\n });\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/checkItems/checkItemsAsync.ts\nfunction checkItemsAsync(requirement, message) {\n return {\n kind: \"validation\",\n type: \"check_items\",\n reference: checkItemsAsync,\n async: true,\n expects: null,\n requirement,\n message,\n async \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const requirementResults = await Promise.all(\n dataset.value.map(this.requirement)\n );\n for (let index = 0; index < dataset.value.length; index++) {\n if (!requirementResults[index]) {\n const item = dataset.value[index];\n _addIssue(this, \"item\", dataset, config2, {\n input: item,\n path: [\n {\n type: \"array\",\n origin: \"value\",\n input: dataset.value,\n key: index,\n value: item\n }\n ]\n });\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/creditCard/creditCard.ts\nvar CREDIT_CARD_REGEX = /^(?:\\d{14,19}|\\d{4}(?: \\d{3,6}){2,4}|\\d{4}(?:-\\d{3,6}){2,4})$/u;\nvar SANITIZE_REGEX = /[- ]/gu;\nvar PROVIDER_REGEX_LIST = [\n // American Express\n /^3[47]\\d{13}$/u,\n // Diners Club\n /^3(?:0[0-5]|[68]\\d)\\d{11,13}$/u,\n // Discover\n /^6(?:011|5\\d{2})\\d{12,15}$/u,\n // JCB\n /^(?:2131|1800|35\\d{3})\\d{11}$/u,\n // Mastercard\n /^5[1-5]\\d{2}|(?:222\\d|22[3-9]\\d|2[3-6]\\d{2}|27[01]\\d|2720)\\d{12}$/u,\n // UnionPay\n /^(?:6[27]\\d{14,17}|81\\d{14,17})$/u,\n // Visa\n /^4\\d{12}(?:\\d{3,6})?$/u\n];\nfunction creditCard(message) {\n return {\n kind: \"validation\",\n type: \"credit_card\",\n reference: creditCard,\n async: false,\n expects: null,\n requirement(input) {\n let sanitized;\n return CREDIT_CARD_REGEX.test(input) && // Remove any hyphens and blanks\n (sanitized = input.replace(SANITIZE_REGEX, \"\")) && // Check if it matches a provider\n PROVIDER_REGEX_LIST.some((regex2) => regex2.test(sanitized)) && // Check if passes luhn algorithm\n _isLuhnAlgo(sanitized);\n },\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"credit card\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/cuid2/cuid2.ts\nfunction cuid2(message) {\n return {\n kind: \"validation\",\n type: \"cuid2\",\n reference: cuid2,\n async: false,\n expects: null,\n requirement: CUID2_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"Cuid2\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/decimal/decimal.ts\nfunction decimal(message) {\n return {\n kind: \"validation\",\n type: \"decimal\",\n reference: decimal,\n async: false,\n expects: null,\n requirement: DECIMAL_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"decimal\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/description/description.ts\nfunction description(description_) {\n return {\n kind: \"metadata\",\n type: \"description\",\n reference: description,\n description: description_\n };\n}\n\n// src/actions/digits/digits.ts\nfunction digits(message) {\n return {\n kind: \"validation\",\n type: \"digits\",\n reference: digits,\n async: false,\n expects: null,\n requirement: DIGITS_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"digits\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/email/email.ts\nfunction email(message) {\n return {\n kind: \"validation\",\n type: \"email\",\n reference: email,\n expects: null,\n async: false,\n requirement: EMAIL_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"email\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/emoji/emoji.ts\nfunction emoji(message) {\n return {\n kind: \"validation\",\n type: \"emoji\",\n reference: emoji,\n async: false,\n expects: null,\n requirement: EMOJI_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"emoji\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/empty/empty.ts\nfunction empty(message) {\n return {\n kind: \"validation\",\n type: \"empty\",\n reference: empty,\n async: false,\n expects: \"0\",\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.length > 0) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/endsWith/endsWith.ts\nfunction endsWith(requirement, message) {\n return {\n kind: \"validation\",\n type: \"ends_with\",\n reference: endsWith,\n async: false,\n expects: `\"${requirement}\"`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !dataset.value.endsWith(this.requirement)) {\n _addIssue(this, \"end\", dataset, config2, {\n received: `\"${dataset.value.slice(-this.requirement.length)}\"`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/everyItem/everyItem.ts\nfunction everyItem(requirement, message) {\n return {\n kind: \"validation\",\n type: \"every_item\",\n reference: everyItem,\n async: false,\n expects: null,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !dataset.value.every(this.requirement)) {\n _addIssue(this, \"item\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/excludes/excludes.ts\nfunction excludes(requirement, message) {\n const received = _stringify(requirement);\n return {\n kind: \"validation\",\n type: \"excludes\",\n reference: excludes,\n async: false,\n expects: `!${received}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.includes(this.requirement)) {\n _addIssue(this, \"content\", dataset, config2, { received });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/filterItems/filterItems.ts\nfunction filterItems(operation) {\n return {\n kind: \"transformation\",\n type: \"filter_items\",\n reference: filterItems,\n async: false,\n operation,\n \"~run\"(dataset) {\n dataset.value = dataset.value.filter(this.operation);\n return dataset;\n }\n };\n}\n\n// src/actions/findItem/findItem.ts\nfunction findItem(operation) {\n return {\n kind: \"transformation\",\n type: \"find_item\",\n reference: findItem,\n async: false,\n operation,\n \"~run\"(dataset) {\n dataset.value = dataset.value.find(this.operation);\n return dataset;\n }\n };\n}\n\n// src/actions/finite/finite.ts\nfunction finite(message) {\n return {\n kind: \"validation\",\n type: \"finite\",\n reference: finite,\n async: false,\n expects: null,\n requirement: Number.isFinite,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"finite\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/graphemes/graphemes.ts\nfunction graphemes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"graphemes\",\n reference: graphemes,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getGraphemeCount(dataset.value);\n if (count !== this.requirement) {\n _addIssue(this, \"graphemes\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/hash/hash.ts\nvar HASH_LENGTHS = {\n md4: 32,\n md5: 32,\n sha1: 40,\n sha256: 64,\n sha384: 96,\n sha512: 128,\n ripemd128: 32,\n ripemd160: 40,\n tiger128: 32,\n tiger160: 40,\n tiger192: 48,\n crc32: 8,\n crc32b: 8,\n adler32: 8\n};\nfunction hash(types, message) {\n return {\n kind: \"validation\",\n type: \"hash\",\n reference: hash,\n expects: null,\n async: false,\n requirement: RegExp(\n types.map((type) => `^[a-f0-9]{${HASH_LENGTHS[type]}}$`).join(\"|\"),\n \"iu\"\n ),\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"hash\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/hexadecimal/hexadecimal.ts\nfunction hexadecimal(message) {\n return {\n kind: \"validation\",\n type: \"hexadecimal\",\n reference: hexadecimal,\n async: false,\n expects: null,\n requirement: HEXADECIMAL_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"hexadecimal\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/hexColor/hexColor.ts\nfunction hexColor(message) {\n return {\n kind: \"validation\",\n type: \"hex_color\",\n reference: hexColor,\n async: false,\n expects: null,\n requirement: HEX_COLOR_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"hex color\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/imei/imei.ts\nfunction imei(message) {\n return {\n kind: \"validation\",\n type: \"imei\",\n reference: imei,\n async: false,\n expects: null,\n requirement(input) {\n return IMEI_REGEX.test(input) && _isLuhnAlgo(input);\n },\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"IMEI\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/includes/includes.ts\nfunction includes(requirement, message) {\n const expects = _stringify(requirement);\n return {\n kind: \"validation\",\n type: \"includes\",\n reference: includes,\n async: false,\n expects,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !dataset.value.includes(this.requirement)) {\n _addIssue(this, \"content\", dataset, config2, {\n received: `!${expects}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/integer/integer.ts\nfunction integer(message) {\n return {\n kind: \"validation\",\n type: \"integer\",\n reference: integer,\n async: false,\n expects: null,\n requirement: Number.isInteger,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"integer\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/ip/ip.ts\nfunction ip(message) {\n return {\n kind: \"validation\",\n type: \"ip\",\n reference: ip,\n async: false,\n expects: null,\n requirement: IP_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"IP\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/ipv4/ipv4.ts\nfunction ipv4(message) {\n return {\n kind: \"validation\",\n type: \"ipv4\",\n reference: ipv4,\n async: false,\n expects: null,\n requirement: IPV4_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"IPv4\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/ipv6/ipv6.ts\nfunction ipv6(message) {\n return {\n kind: \"validation\",\n type: \"ipv6\",\n reference: ipv6,\n async: false,\n expects: null,\n requirement: IPV6_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"IPv6\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoDate/isoDate.ts\nfunction isoDate(message) {\n return {\n kind: \"validation\",\n type: \"iso_date\",\n reference: isoDate,\n async: false,\n expects: null,\n requirement: ISO_DATE_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"date\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoDateTime/isoDateTime.ts\nfunction isoDateTime(message) {\n return {\n kind: \"validation\",\n type: \"iso_date_time\",\n reference: isoDateTime,\n async: false,\n expects: null,\n requirement: ISO_DATE_TIME_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"date-time\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoTime/isoTime.ts\nfunction isoTime(message) {\n return {\n kind: \"validation\",\n type: \"iso_time\",\n reference: isoTime,\n async: false,\n expects: null,\n requirement: ISO_TIME_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"time\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoTimeSecond/isoTimeSecond.ts\nfunction isoTimeSecond(message) {\n return {\n kind: \"validation\",\n type: \"iso_time_second\",\n reference: isoTimeSecond,\n async: false,\n expects: null,\n requirement: ISO_TIME_SECOND_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"time-second\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoTimestamp/isoTimestamp.ts\nfunction isoTimestamp(message) {\n return {\n kind: \"validation\",\n type: \"iso_timestamp\",\n reference: isoTimestamp,\n async: false,\n expects: null,\n requirement: ISO_TIMESTAMP_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"timestamp\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoWeek/isoWeek.ts\nfunction isoWeek(message) {\n return {\n kind: \"validation\",\n type: \"iso_week\",\n reference: isoWeek,\n async: false,\n expects: null,\n requirement: ISO_WEEK_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"week\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/length/length.ts\nfunction length(requirement, message) {\n return {\n kind: \"validation\",\n type: \"length\",\n reference: length,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.length !== this.requirement) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mac/mac.ts\nfunction mac(message) {\n return {\n kind: \"validation\",\n type: \"mac\",\n reference: mac,\n async: false,\n expects: null,\n requirement: MAC_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"MAC\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mac48/mac48.ts\nfunction mac48(message) {\n return {\n kind: \"validation\",\n type: \"mac48\",\n reference: mac48,\n async: false,\n expects: null,\n requirement: MAC48_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"48-bit MAC\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mac64/mac64.ts\nfunction mac64(message) {\n return {\n kind: \"validation\",\n type: \"mac64\",\n reference: mac64,\n async: false,\n expects: null,\n requirement: MAC64_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"64-bit MAC\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mapItems/mapItems.ts\nfunction mapItems(operation) {\n return {\n kind: \"transformation\",\n type: \"map_items\",\n reference: mapItems,\n async: false,\n operation,\n \"~run\"(dataset) {\n dataset.value = dataset.value.map(this.operation);\n return dataset;\n }\n };\n}\n\n// src/actions/maxBytes/maxBytes.ts\nfunction maxBytes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_bytes\",\n reference: maxBytes,\n async: false,\n expects: `<=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const length2 = _getByteCount(dataset.value);\n if (length2 > this.requirement) {\n _addIssue(this, \"bytes\", dataset, config2, {\n received: `${length2}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxGraphemes/maxGraphemes.ts\nfunction maxGraphemes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_graphemes\",\n reference: maxGraphemes,\n async: false,\n expects: `<=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getGraphemeCount(dataset.value);\n if (count > this.requirement) {\n _addIssue(this, \"graphemes\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxLength/maxLength.ts\nfunction maxLength(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_length\",\n reference: maxLength,\n async: false,\n expects: `<=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.length > this.requirement) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxSize/maxSize.ts\nfunction maxSize(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_size\",\n reference: maxSize,\n async: false,\n expects: `<=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.size > this.requirement) {\n _addIssue(this, \"size\", dataset, config2, {\n received: `${dataset.value.size}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxValue/maxValue.ts\nfunction maxValue(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_value\",\n reference: maxValue,\n async: false,\n expects: `<=${requirement instanceof Date ? requirement.toJSON() : _stringify(requirement)}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !(dataset.value <= this.requirement)) {\n _addIssue(this, \"value\", dataset, config2, {\n received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxWords/maxWords.ts\nfunction maxWords(locales, requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_words\",\n reference: maxWords,\n async: false,\n expects: `<=${requirement}`,\n locales,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getWordCount(this.locales, dataset.value);\n if (count > this.requirement) {\n _addIssue(this, \"words\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/metadata/metadata.ts\nfunction metadata(metadata_) {\n return {\n kind: \"metadata\",\n type: \"metadata\",\n reference: metadata,\n metadata: metadata_\n };\n}\n\n// src/actions/mimeType/mimeType.ts\nfunction mimeType(requirement, message) {\n return {\n kind: \"validation\",\n type: \"mime_type\",\n reference: mimeType,\n async: false,\n expects: _joinExpects(\n requirement.map((option) => `\"${option}\"`),\n \"|\"\n ),\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.includes(dataset.value.type)) {\n _addIssue(this, \"MIME type\", dataset, config2, {\n received: `\"${dataset.value.type}\"`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minBytes/minBytes.ts\nfunction minBytes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_bytes\",\n reference: minBytes,\n async: false,\n expects: `>=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const length2 = _getByteCount(dataset.value);\n if (length2 < this.requirement) {\n _addIssue(this, \"bytes\", dataset, config2, {\n received: `${length2}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minGraphemes/minGraphemes.ts\nfunction minGraphemes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_graphemes\",\n reference: minGraphemes,\n async: false,\n expects: `>=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getGraphemeCount(dataset.value);\n if (count < this.requirement) {\n _addIssue(this, \"graphemes\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minLength/minLength.ts\nfunction minLength(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_length\",\n reference: minLength,\n async: false,\n expects: `>=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.length < this.requirement) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minSize/minSize.ts\nfunction minSize(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_size\",\n reference: minSize,\n async: false,\n expects: `>=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.size < this.requirement) {\n _addIssue(this, \"size\", dataset, config2, {\n received: `${dataset.value.size}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minValue/minValue.ts\nfunction minValue(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_value\",\n reference: minValue,\n async: false,\n expects: `>=${requirement instanceof Date ? requirement.toJSON() : _stringify(requirement)}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !(dataset.value >= this.requirement)) {\n _addIssue(this, \"value\", dataset, config2, {\n received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minWords/minWords.ts\nfunction minWords(locales, requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_words\",\n reference: minWords,\n async: false,\n expects: `>=${requirement}`,\n locales,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getWordCount(this.locales, dataset.value);\n if (count < this.requirement) {\n _addIssue(this, \"words\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/multipleOf/multipleOf.ts\nfunction multipleOf(requirement, message) {\n return {\n kind: \"validation\",\n type: \"multiple_of\",\n reference: multipleOf,\n async: false,\n expects: `%${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value % this.requirement !== 0) {\n _addIssue(this, \"multiple\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/nanoid/nanoid.ts\nfunction nanoid(message) {\n return {\n kind: \"validation\",\n type: \"nanoid\",\n reference: nanoid,\n async: false,\n expects: null,\n requirement: NANO_ID_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"Nano ID\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/nonEmpty/nonEmpty.ts\nfunction nonEmpty(message) {\n return {\n kind: \"validation\",\n type: \"non_empty\",\n reference: nonEmpty,\n async: false,\n expects: \"!0\",\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.length === 0) {\n _addIssue(this, \"length\", dataset, config2, {\n received: \"0\"\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/normalize/normalize.ts\nfunction normalize(form) {\n return {\n kind: \"transformation\",\n type: \"normalize\",\n reference: normalize,\n async: false,\n form,\n \"~run\"(dataset) {\n dataset.value = dataset.value.normalize(this.form);\n return dataset;\n }\n };\n}\n\n// src/actions/notBytes/notBytes.ts\nfunction notBytes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_bytes\",\n reference: notBytes,\n async: false,\n expects: `!${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const length2 = _getByteCount(dataset.value);\n if (length2 === this.requirement) {\n _addIssue(this, \"bytes\", dataset, config2, {\n received: `${length2}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notGraphemes/notGraphemes.ts\nfunction notGraphemes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_graphemes\",\n reference: notGraphemes,\n async: false,\n expects: `!${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getGraphemeCount(dataset.value);\n if (count === this.requirement) {\n _addIssue(this, \"graphemes\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notLength/notLength.ts\nfunction notLength(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_length\",\n reference: notLength,\n async: false,\n expects: `!${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.length === this.requirement) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notSize/notSize.ts\nfunction notSize(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_size\",\n reference: notSize,\n async: false,\n expects: `!${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.size === this.requirement) {\n _addIssue(this, \"size\", dataset, config2, {\n received: `${dataset.value.size}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notValue/notValue.ts\nfunction notValue(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_value\",\n reference: notValue,\n async: false,\n expects: requirement instanceof Date ? `!${requirement.toJSON()}` : `!${_stringify(requirement)}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && this.requirement <= dataset.value && this.requirement >= dataset.value) {\n _addIssue(this, \"value\", dataset, config2, {\n received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notWords/notWords.ts\nfunction notWords(locales, requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_words\",\n reference: notWords,\n async: false,\n expects: `!${requirement}`,\n locales,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getWordCount(this.locales, dataset.value);\n if (count === this.requirement) {\n _addIssue(this, \"words\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/octal/octal.ts\nfunction octal(message) {\n return {\n kind: \"validation\",\n type: \"octal\",\n reference: octal,\n async: false,\n expects: null,\n requirement: OCTAL_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"octal\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/partialCheck/utils/_isPartiallyTyped/_isPartiallyTyped.ts\nfunction _isPartiallyTyped(dataset, pathList) {\n if (dataset.issues) {\n for (const path of pathList) {\n for (const issue of dataset.issues) {\n let typed = false;\n const bound = Math.min(path.length, issue.path?.length ?? 0);\n for (let index = 0; index < bound; index++) {\n if (path[index] !== issue.path[index].key) {\n typed = true;\n break;\n }\n }\n if (!typed) {\n return false;\n }\n }\n }\n }\n return true;\n}\n\n// src/actions/partialCheck/partialCheck.ts\nfunction partialCheck(pathList, requirement, message) {\n return {\n kind: \"validation\",\n type: \"partial_check\",\n reference: partialCheck,\n async: false,\n expects: null,\n pathList,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (_isPartiallyTyped(dataset, pathList) && // @ts-expect-error\n !this.requirement(dataset.value)) {\n _addIssue(this, \"input\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/partialCheck/partialCheckAsync.ts\nfunction partialCheckAsync(pathList, requirement, message) {\n return {\n kind: \"validation\",\n type: \"partial_check\",\n reference: partialCheckAsync,\n async: true,\n expects: null,\n pathList,\n requirement,\n message,\n async \"~run\"(dataset, config2) {\n if (_isPartiallyTyped(dataset, pathList) && // @ts-expect-error\n !await this.requirement(dataset.value)) {\n _addIssue(this, \"input\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/rawCheck/rawCheck.ts\nfunction rawCheck(action) {\n return {\n kind: \"validation\",\n type: \"raw_check\",\n reference: rawCheck,\n async: false,\n expects: null,\n \"~run\"(dataset, config2) {\n action({\n dataset,\n config: config2,\n addIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config2, info)\n });\n return dataset;\n }\n };\n}\n\n// src/actions/rawCheck/rawCheckAsync.ts\nfunction rawCheckAsync(action) {\n return {\n kind: \"validation\",\n type: \"raw_check\",\n reference: rawCheckAsync,\n async: true,\n expects: null,\n async \"~run\"(dataset, config2) {\n await action({\n dataset,\n config: config2,\n addIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config2, info)\n });\n return dataset;\n }\n };\n}\n\n// src/actions/rawTransform/rawTransform.ts\nfunction rawTransform(action) {\n return {\n kind: \"transformation\",\n type: \"raw_transform\",\n reference: rawTransform,\n async: false,\n \"~run\"(dataset, config2) {\n const output = action({\n dataset,\n config: config2,\n addIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config2, info),\n NEVER: null\n });\n if (dataset.issues) {\n dataset.typed = false;\n } else {\n dataset.value = output;\n }\n return dataset;\n }\n };\n}\n\n// src/actions/rawTransform/rawTransformAsync.ts\nfunction rawTransformAsync(action) {\n return {\n kind: \"transformation\",\n type: \"raw_transform\",\n reference: rawTransformAsync,\n async: true,\n async \"~run\"(dataset, config2) {\n const output = await action({\n dataset,\n config: config2,\n addIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config2, info),\n NEVER: null\n });\n if (dataset.issues) {\n dataset.typed = false;\n } else {\n dataset.value = output;\n }\n return dataset;\n }\n };\n}\n\n// src/actions/readonly/readonly.ts\nfunction readonly() {\n return {\n kind: \"transformation\",\n type: \"readonly\",\n reference: readonly,\n async: false,\n \"~run\"(dataset) {\n return dataset;\n }\n };\n}\n\n// src/actions/reduceItems/reduceItems.ts\nfunction reduceItems(operation, initial) {\n return {\n kind: \"transformation\",\n type: \"reduce_items\",\n reference: reduceItems,\n async: false,\n operation,\n initial,\n \"~run\"(dataset) {\n dataset.value = dataset.value.reduce(this.operation, this.initial);\n return dataset;\n }\n };\n}\n\n// src/actions/regex/regex.ts\nfunction regex(requirement, message) {\n return {\n kind: \"validation\",\n type: \"regex\",\n reference: regex,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"format\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/returns/returns.ts\nfunction returns(schema) {\n return {\n kind: \"transformation\",\n type: \"returns\",\n reference: returns,\n async: false,\n schema,\n \"~run\"(dataset, config2) {\n const func = dataset.value;\n dataset.value = (...args_) => {\n const returnsDataset = this.schema[\"~run\"](\n { value: func(...args_) },\n config2\n );\n if (returnsDataset.issues) {\n throw new ValiError(returnsDataset.issues);\n }\n return returnsDataset.value;\n };\n return dataset;\n }\n };\n}\n\n// src/actions/returns/returnsAsync.ts\nfunction returnsAsync(schema) {\n return {\n kind: \"transformation\",\n type: \"returns\",\n reference: returnsAsync,\n async: false,\n schema,\n \"~run\"(dataset, config2) {\n const func = dataset.value;\n dataset.value = async (...args_) => {\n const returnsDataset = await this.schema[\"~run\"](\n { value: await func(...args_) },\n config2\n );\n if (returnsDataset.issues) {\n throw new ValiError(returnsDataset.issues);\n }\n return returnsDataset.value;\n };\n return dataset;\n }\n };\n}\n\n// src/actions/safeInteger/safeInteger.ts\nfunction safeInteger(message) {\n return {\n kind: \"validation\",\n type: \"safe_integer\",\n reference: safeInteger,\n async: false,\n expects: null,\n requirement: Number.isSafeInteger,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"safe integer\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/size/size.ts\nfunction size(requirement, message) {\n return {\n kind: \"validation\",\n type: \"size\",\n reference: size,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.size !== this.requirement) {\n _addIssue(this, \"size\", dataset, config2, {\n received: `${dataset.value.size}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/someItem/someItem.ts\nfunction someItem(requirement, message) {\n return {\n kind: \"validation\",\n type: \"some_item\",\n reference: someItem,\n async: false,\n expects: null,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !dataset.value.some(this.requirement)) {\n _addIssue(this, \"item\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/sortItems/sortItems.ts\nfunction sortItems(operation) {\n return {\n kind: \"transformation\",\n type: \"sort_items\",\n reference: sortItems,\n async: false,\n operation,\n \"~run\"(dataset) {\n dataset.value = dataset.value.sort(this.operation);\n return dataset;\n }\n };\n}\n\n// src/actions/startsWith/startsWith.ts\nfunction startsWith(requirement, message) {\n return {\n kind: \"validation\",\n type: \"starts_with\",\n reference: startsWith,\n async: false,\n expects: `\"${requirement}\"`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !dataset.value.startsWith(this.requirement)) {\n _addIssue(this, \"start\", dataset, config2, {\n received: `\"${dataset.value.slice(0, this.requirement.length)}\"`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/title/title.ts\nfunction title(title_) {\n return {\n kind: \"metadata\",\n type: \"title\",\n reference: title,\n title: title_\n };\n}\n\n// src/actions/toLowerCase/toLowerCase.ts\nfunction toLowerCase() {\n return {\n kind: \"transformation\",\n type: \"to_lower_case\",\n reference: toLowerCase,\n async: false,\n \"~run\"(dataset) {\n dataset.value = dataset.value.toLowerCase();\n return dataset;\n }\n };\n}\n\n// src/actions/toMaxValue/toMaxValue.ts\nfunction toMaxValue(requirement) {\n return {\n kind: \"transformation\",\n type: \"to_max_value\",\n reference: toMaxValue,\n async: false,\n requirement,\n \"~run\"(dataset) {\n dataset.value = dataset.value > this.requirement ? this.requirement : dataset.value;\n return dataset;\n }\n };\n}\n\n// src/actions/toMinValue/toMinValue.ts\nfunction toMinValue(requirement) {\n return {\n kind: \"transformation\",\n type: \"to_min_value\",\n reference: toMinValue,\n async: false,\n requirement,\n \"~run\"(dataset) {\n dataset.value = dataset.value < this.requirement ? this.requirement : dataset.value;\n return dataset;\n }\n };\n}\n\n// src/actions/toUpperCase/toUpperCase.ts\nfunction toUpperCase() {\n return {\n kind: \"transformation\",\n type: \"to_upper_case\",\n reference: toUpperCase,\n async: false,\n \"~run\"(dataset) {\n dataset.value = dataset.value.toUpperCase();\n return dataset;\n }\n };\n}\n\n// src/actions/transform/transform.ts\nfunction transform(operation) {\n return {\n kind: \"transformation\",\n type: \"transform\",\n reference: transform,\n async: false,\n operation,\n \"~run\"(dataset) {\n dataset.value = this.operation(dataset.value);\n return dataset;\n }\n };\n}\n\n// src/actions/transform/transformAsync.ts\nfunction transformAsync(operation) {\n return {\n kind: \"transformation\",\n type: \"transform\",\n reference: transformAsync,\n async: true,\n operation,\n async \"~run\"(dataset) {\n dataset.value = await this.operation(dataset.value);\n return dataset;\n }\n };\n}\n\n// src/actions/trim/trim.ts\nfunction trim() {\n return {\n kind: \"transformation\",\n type: \"trim\",\n reference: trim,\n async: false,\n \"~run\"(dataset) {\n dataset.value = dataset.value.trim();\n return dataset;\n }\n };\n}\n\n// src/actions/trimEnd/trimEnd.ts\nfunction trimEnd() {\n return {\n kind: \"transformation\",\n type: \"trim_end\",\n reference: trimEnd,\n async: false,\n \"~run\"(dataset) {\n dataset.value = dataset.value.trimEnd();\n return dataset;\n }\n };\n}\n\n// src/actions/trimStart/trimStart.ts\nfunction trimStart() {\n return {\n kind: \"transformation\",\n type: \"trim_start\",\n reference: trimStart,\n async: false,\n \"~run\"(dataset) {\n dataset.value = dataset.value.trimStart();\n return dataset;\n }\n };\n}\n\n// src/actions/ulid/ulid.ts\nfunction ulid(message) {\n return {\n kind: \"validation\",\n type: \"ulid\",\n reference: ulid,\n async: false,\n expects: null,\n requirement: ULID_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"ULID\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/url/url.ts\nfunction url(message) {\n return {\n kind: \"validation\",\n type: \"url\",\n reference: url,\n async: false,\n expects: null,\n requirement(input) {\n try {\n new URL(input);\n return true;\n } catch {\n return false;\n }\n },\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"URL\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/uuid/uuid.ts\nfunction uuid(message) {\n return {\n kind: \"validation\",\n type: \"uuid\",\n reference: uuid,\n async: false,\n expects: null,\n requirement: UUID_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"UUID\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/value/value.ts\nfunction value(requirement, message) {\n return {\n kind: \"validation\",\n type: \"value\",\n reference: value,\n async: false,\n expects: requirement instanceof Date ? requirement.toJSON() : _stringify(requirement),\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !(this.requirement <= dataset.value && this.requirement >= dataset.value)) {\n _addIssue(this, \"value\", dataset, config2, {\n received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/words/words.ts\nfunction words(locales, requirement, message) {\n return {\n kind: \"validation\",\n type: \"words\",\n reference: words,\n async: false,\n expects: `${requirement}`,\n locales,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getWordCount(this.locales, dataset.value);\n if (count !== this.requirement) {\n _addIssue(this, \"words\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/assert/assert.ts\nfunction assert(schema, input) {\n const issues = schema[\"~run\"]({ value: input }, { abortEarly: true }).issues;\n if (issues) {\n throw new ValiError(issues);\n }\n}\n\n// src/methods/config/config.ts\nfunction config(schema, config2) {\n return {\n ...schema,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config_) {\n return schema[\"~run\"](dataset, { ...config_, ...config2 });\n }\n };\n}\n\n// src/methods/getFallback/getFallback.ts\nfunction getFallback(schema, dataset, config2) {\n return typeof schema.fallback === \"function\" ? (\n // @ts-expect-error\n schema.fallback(dataset, config2)\n ) : (\n // @ts-expect-error\n schema.fallback\n );\n}\n\n// src/methods/fallback/fallback.ts\nfunction fallback(schema, fallback2) {\n return {\n ...schema,\n fallback: fallback2,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const outputDataset = schema[\"~run\"](dataset, config2);\n return outputDataset.issues ? { typed: true, value: getFallback(this, outputDataset, config2) } : outputDataset;\n }\n };\n}\n\n// src/methods/fallback/fallbackAsync.ts\nfunction fallbackAsync(schema, fallback2) {\n return {\n ...schema,\n fallback: fallback2,\n async: true,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const outputDataset = await schema[\"~run\"](dataset, config2);\n return outputDataset.issues ? {\n typed: true,\n value: await getFallback(this, outputDataset, config2)\n } : outputDataset;\n }\n };\n}\n\n// src/methods/flatten/flatten.ts\nfunction flatten(issues) {\n const flatErrors = {};\n for (const issue of issues) {\n if (issue.path) {\n const dotPath = getDotPath(issue);\n if (dotPath) {\n if (!flatErrors.nested) {\n flatErrors.nested = {};\n }\n if (flatErrors.nested[dotPath]) {\n flatErrors.nested[dotPath].push(issue.message);\n } else {\n flatErrors.nested[dotPath] = [issue.message];\n }\n } else {\n if (flatErrors.other) {\n flatErrors.other.push(issue.message);\n } else {\n flatErrors.other = [issue.message];\n }\n }\n } else {\n if (flatErrors.root) {\n flatErrors.root.push(issue.message);\n } else {\n flatErrors.root = [issue.message];\n }\n }\n }\n return flatErrors;\n}\n\n// src/methods/forward/forward.ts\nfunction forward(action, pathKeys) {\n return {\n ...action,\n \"~run\"(dataset, config2) {\n const prevIssues = dataset.issues && [...dataset.issues];\n dataset = action[\"~run\"](dataset, config2);\n if (dataset.issues) {\n for (const issue of dataset.issues) {\n if (!prevIssues?.includes(issue)) {\n let pathInput = dataset.value;\n for (const key of pathKeys) {\n const pathValue = pathInput[key];\n const pathItem = {\n type: \"unknown\",\n origin: \"value\",\n input: pathInput,\n key,\n value: pathValue\n };\n if (issue.path) {\n issue.path.push(pathItem);\n } else {\n issue.path = [pathItem];\n }\n if (!pathValue) {\n break;\n }\n pathInput = pathValue;\n }\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/forward/forwardAsync.ts\nfunction forwardAsync(action, pathKeys) {\n return {\n ...action,\n async: true,\n async \"~run\"(dataset, config2) {\n const prevIssues = dataset.issues && [...dataset.issues];\n dataset = await action[\"~run\"](dataset, config2);\n if (dataset.issues) {\n for (const issue of dataset.issues) {\n if (!prevIssues?.includes(issue)) {\n let pathInput = dataset.value;\n for (const key of pathKeys) {\n const pathValue = pathInput[key];\n const pathItem = {\n type: \"unknown\",\n origin: \"value\",\n input: pathInput,\n key,\n value: pathValue\n };\n if (issue.path) {\n issue.path.push(pathItem);\n } else {\n issue.path = [pathItem];\n }\n if (!pathValue) {\n break;\n }\n pathInput = pathValue;\n }\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/getDefault/getDefault.ts\nfunction getDefault(schema, dataset, config2) {\n return typeof schema.default === \"function\" ? (\n // @ts-expect-error\n schema.default(dataset, config2)\n ) : (\n // @ts-expect-error\n schema.default\n );\n}\n\n// src/methods/getDefaults/getDefaults.ts\nfunction getDefaults(schema) {\n if (\"entries\" in schema) {\n const object2 = {};\n for (const key in schema.entries) {\n object2[key] = getDefaults(schema.entries[key]);\n }\n return object2;\n }\n if (\"items\" in schema) {\n return schema.items.map(getDefaults);\n }\n return getDefault(schema);\n}\n\n// src/methods/getDefaults/getDefaultsAsync.ts\nasync function getDefaultsAsync(schema) {\n if (\"entries\" in schema) {\n return Object.fromEntries(\n await Promise.all(\n Object.entries(schema.entries).map(async ([key, value2]) => [\n key,\n await getDefaultsAsync(value2)\n ])\n )\n );\n }\n if (\"items\" in schema) {\n return Promise.all(schema.items.map(getDefaultsAsync));\n }\n return getDefault(schema);\n}\n\n// src/methods/getFallbacks/getFallbacks.ts\nfunction getFallbacks(schema) {\n if (\"entries\" in schema) {\n const object2 = {};\n for (const key in schema.entries) {\n object2[key] = getFallbacks(schema.entries[key]);\n }\n return object2;\n }\n if (\"items\" in schema) {\n return schema.items.map(getFallbacks);\n }\n return getFallback(schema);\n}\n\n// src/methods/getFallbacks/getFallbacksAsync.ts\nasync function getFallbacksAsync(schema) {\n if (\"entries\" in schema) {\n return Object.fromEntries(\n await Promise.all(\n Object.entries(schema.entries).map(async ([key, value2]) => [\n key,\n await getFallbacksAsync(value2)\n ])\n )\n );\n }\n if (\"items\" in schema) {\n return Promise.all(schema.items.map(getFallbacksAsync));\n }\n return getFallback(schema);\n}\n\n// src/methods/is/is.ts\nfunction is(schema, input) {\n return !schema[\"~run\"]({ value: input }, { abortEarly: true }).issues;\n}\n\n// src/schemas/any/any.ts\nfunction any() {\n return {\n kind: \"schema\",\n type: \"any\",\n reference: any,\n expects: \"any\",\n async: false,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset) {\n dataset.typed = true;\n return dataset;\n }\n };\n}\n\n// src/schemas/array/array.ts\nfunction array(item, message) {\n return {\n kind: \"schema\",\n type: \"array\",\n reference: array,\n expects: \"Array\",\n async: false,\n item,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < input.length; key++) {\n const value2 = input[key];\n const itemDataset = this.item[\"~run\"]({ value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/array/arrayAsync.ts\nfunction arrayAsync(item, message) {\n return {\n kind: \"schema\",\n type: \"array\",\n reference: arrayAsync,\n expects: \"Array\",\n async: true,\n item,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const itemDatasets = await Promise.all(\n input.map((value2) => this.item[\"~run\"]({ value: value2 }, config2))\n );\n for (let key = 0; key < itemDatasets.length; key++) {\n const itemDataset = itemDatasets[key];\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: input[key]\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/bigint/bigint.ts\nfunction bigint(message) {\n return {\n kind: \"schema\",\n type: \"bigint\",\n reference: bigint,\n expects: \"bigint\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (typeof dataset.value === \"bigint\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/blob/blob.ts\nfunction blob(message) {\n return {\n kind: \"schema\",\n type: \"blob\",\n reference: blob,\n expects: \"Blob\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value instanceof Blob) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/boolean/boolean.ts\nfunction boolean(message) {\n return {\n kind: \"schema\",\n type: \"boolean\",\n reference: boolean,\n expects: \"boolean\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (typeof dataset.value === \"boolean\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/custom/custom.ts\nfunction custom(check2, message) {\n return {\n kind: \"schema\",\n type: \"custom\",\n reference: custom,\n expects: \"unknown\",\n async: false,\n check: check2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (this.check(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/custom/customAsync.ts\nfunction customAsync(check2, message) {\n return {\n kind: \"schema\",\n type: \"custom\",\n reference: customAsync,\n expects: \"unknown\",\n async: true,\n check: check2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (await this.check(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/date/date.ts\nfunction date(message) {\n return {\n kind: \"schema\",\n type: \"date\",\n reference: date,\n expects: \"Date\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value instanceof Date) {\n if (!isNaN(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2, {\n received: '\"Invalid Date\"'\n });\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/enum/enum.ts\nfunction enum_(enum__, message) {\n const options = Object.entries(enum__).filter(([key]) => isNaN(+key)).map(([, value2]) => value2);\n return {\n kind: \"schema\",\n type: \"enum\",\n reference: enum_,\n expects: _joinExpects(options.map(_stringify), \"|\"),\n async: false,\n enum: enum__,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (this.options.includes(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/file/file.ts\nfunction file(message) {\n return {\n kind: \"schema\",\n type: \"file\",\n reference: file,\n expects: \"File\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value instanceof File) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/function/function.ts\nfunction function_(message) {\n return {\n kind: \"schema\",\n type: \"function\",\n reference: function_,\n expects: \"Function\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (typeof dataset.value === \"function\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/instance/instance.ts\nfunction instance(class_, message) {\n return {\n kind: \"schema\",\n type: \"instance\",\n reference: instance,\n expects: class_.name,\n async: false,\n class: class_,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value instanceof this.class) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/intersect/utils/_merge/_merge.ts\nfunction _merge(value1, value2) {\n if (typeof value1 === typeof value2) {\n if (value1 === value2 || value1 instanceof Date && value2 instanceof Date && +value1 === +value2) {\n return { value: value1 };\n }\n if (value1 && value2 && value1.constructor === Object && value2.constructor === Object) {\n for (const key in value2) {\n if (key in value1) {\n const dataset = _merge(value1[key], value2[key]);\n if (dataset.issue) {\n return dataset;\n }\n value1[key] = dataset.value;\n } else {\n value1[key] = value2[key];\n }\n }\n return { value: value1 };\n }\n if (Array.isArray(value1) && Array.isArray(value2)) {\n if (value1.length === value2.length) {\n for (let index = 0; index < value1.length; index++) {\n const dataset = _merge(value1[index], value2[index]);\n if (dataset.issue) {\n return dataset;\n }\n value1[index] = dataset.value;\n }\n return { value: value1 };\n }\n }\n }\n return { issue: true };\n}\n\n// src/schemas/intersect/intersect.ts\nfunction intersect(options, message) {\n return {\n kind: \"schema\",\n type: \"intersect\",\n reference: intersect,\n expects: _joinExpects(\n options.map((option) => option.expects),\n \"&\"\n ),\n async: false,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (this.options.length) {\n const input = dataset.value;\n let outputs;\n dataset.typed = true;\n for (const schema of this.options) {\n const optionDataset = schema[\"~run\"]({ value: input }, config2);\n if (optionDataset.issues) {\n if (dataset.issues) {\n dataset.issues.push(...optionDataset.issues);\n } else {\n dataset.issues = optionDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!optionDataset.typed) {\n dataset.typed = false;\n }\n if (dataset.typed) {\n if (outputs) {\n outputs.push(optionDataset.value);\n } else {\n outputs = [optionDataset.value];\n }\n }\n }\n if (dataset.typed) {\n dataset.value = outputs[0];\n for (let index = 1; index < outputs.length; index++) {\n const mergeDataset = _merge(dataset.value, outputs[index]);\n if (mergeDataset.issue) {\n _addIssue(this, \"type\", dataset, config2, {\n received: \"unknown\"\n });\n break;\n }\n dataset.value = mergeDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/intersect/intersectAsync.ts\nfunction intersectAsync(options, message) {\n return {\n kind: \"schema\",\n type: \"intersect\",\n reference: intersectAsync,\n expects: _joinExpects(\n options.map((option) => option.expects),\n \"&\"\n ),\n async: true,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (this.options.length) {\n const input = dataset.value;\n let outputs;\n dataset.typed = true;\n const optionDatasets = await Promise.all(\n this.options.map((schema) => schema[\"~run\"]({ value: input }, config2))\n );\n for (const optionDataset of optionDatasets) {\n if (optionDataset.issues) {\n if (dataset.issues) {\n dataset.issues.push(...optionDataset.issues);\n } else {\n dataset.issues = optionDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!optionDataset.typed) {\n dataset.typed = false;\n }\n if (dataset.typed) {\n if (outputs) {\n outputs.push(optionDataset.value);\n } else {\n outputs = [optionDataset.value];\n }\n }\n }\n if (dataset.typed) {\n dataset.value = outputs[0];\n for (let index = 1; index < outputs.length; index++) {\n const mergeDataset = _merge(dataset.value, outputs[index]);\n if (mergeDataset.issue) {\n _addIssue(this, \"type\", dataset, config2, {\n received: \"unknown\"\n });\n break;\n }\n dataset.value = mergeDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/lazy/lazy.ts\nfunction lazy(getter) {\n return {\n kind: \"schema\",\n type: \"lazy\",\n reference: lazy,\n expects: \"unknown\",\n async: false,\n getter,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n return this.getter(dataset.value)[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/lazy/lazyAsync.ts\nfunction lazyAsync(getter) {\n return {\n kind: \"schema\",\n type: \"lazy\",\n reference: lazyAsync,\n expects: \"unknown\",\n async: true,\n getter,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n return (await this.getter(dataset.value))[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/literal/literal.ts\nfunction literal(literal_, message) {\n return {\n kind: \"schema\",\n type: \"literal\",\n reference: literal,\n expects: _stringify(literal_),\n async: false,\n literal: literal_,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === this.literal) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/looseObject/looseObject.ts\nfunction looseObject(entries, message) {\n return {\n kind: \"schema\",\n type: \"loose_object\",\n reference: looseObject,\n expects: \"Object\",\n async: false,\n entries,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const key in this.entries) {\n const value2 = input[key];\n const valueDataset = this.entries[key][\"~run\"]({ value: value2 }, config2);\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (_isValidObjectKey(input, key) && !(key in this.entries)) {\n dataset.value[key] = input[key];\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/looseObject/looseObjectAsync.ts\nfunction looseObjectAsync(entries, message) {\n return {\n kind: \"schema\",\n type: \"loose_object\",\n reference: looseObjectAsync,\n expects: \"Object\",\n async: true,\n entries,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const valueDatasets = await Promise.all(\n Object.entries(this.entries).map(async ([key, schema]) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await schema[\"~run\"]({ value: value2 }, config2)\n ];\n })\n );\n for (const [key, value2, valueDataset] of valueDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (_isValidObjectKey(input, key) && !(key in this.entries)) {\n dataset.value[key] = input[key];\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/looseTuple/looseTuple.ts\nfunction looseTuple(items, message) {\n return {\n kind: \"schema\",\n type: \"loose_tuple\",\n reference: looseTuple,\n expects: \"Array\",\n async: false,\n items,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < this.items.length; key++) {\n const value2 = input[key];\n const itemDataset = this.items[key][\"~run\"]({ value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (let key = this.items.length; key < input.length; key++) {\n dataset.value.push(input[key]);\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/looseTuple/looseTupleAsync.ts\nfunction looseTupleAsync(items, message) {\n return {\n kind: \"schema\",\n type: \"loose_tuple\",\n reference: looseTupleAsync,\n expects: \"Array\",\n async: true,\n items,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const itemDatasets = await Promise.all(\n this.items.map(async (item, key) => {\n const value2 = input[key];\n return [key, value2, await item[\"~run\"]({ value: value2 }, config2)];\n })\n );\n for (const [key, value2, itemDataset] of itemDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (let key = this.items.length; key < input.length; key++) {\n dataset.value.push(input[key]);\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/map/map.ts\nfunction map(key, value2, message) {\n return {\n kind: \"schema\",\n type: \"map\",\n reference: map,\n expects: \"Map\",\n async: false,\n key,\n value: value2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input instanceof Map) {\n dataset.typed = true;\n dataset.value = /* @__PURE__ */ new Map();\n for (const [inputKey, inputValue] of input) {\n const keyDataset = this.key[\"~run\"]({ value: inputKey }, config2);\n if (keyDataset.issues) {\n const pathItem = {\n type: \"map\",\n origin: \"key\",\n input,\n key: inputKey,\n value: inputValue\n };\n for (const issue of keyDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = keyDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n const valueDataset = this.value[\"~run\"](\n { value: inputValue },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"map\",\n origin: \"value\",\n input,\n key: inputKey,\n value: inputValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!keyDataset.typed || !valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.set(keyDataset.value, valueDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/map/mapAsync.ts\nfunction mapAsync(key, value2, message) {\n return {\n kind: \"schema\",\n type: \"map\",\n reference: mapAsync,\n expects: \"Map\",\n async: true,\n key,\n value: value2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input instanceof Map) {\n dataset.typed = true;\n dataset.value = /* @__PURE__ */ new Map();\n const datasets = await Promise.all(\n [...input].map(\n ([inputKey, inputValue]) => Promise.all([\n inputKey,\n inputValue,\n this.key[\"~run\"]({ value: inputKey }, config2),\n this.value[\"~run\"]({ value: inputValue }, config2)\n ])\n )\n );\n for (const [\n inputKey,\n inputValue,\n keyDataset,\n valueDataset\n ] of datasets) {\n if (keyDataset.issues) {\n const pathItem = {\n type: \"map\",\n origin: \"key\",\n input,\n key: inputKey,\n value: inputValue\n };\n for (const issue of keyDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = keyDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (valueDataset.issues) {\n const pathItem = {\n type: \"map\",\n origin: \"value\",\n input,\n key: inputKey,\n value: inputValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!keyDataset.typed || !valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.set(keyDataset.value, valueDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nan/nan.ts\nfunction nan(message) {\n return {\n kind: \"schema\",\n type: \"nan\",\n reference: nan,\n expects: \"NaN\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (Number.isNaN(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/never/never.ts\nfunction never(message) {\n return {\n kind: \"schema\",\n type: \"never\",\n reference: never,\n expects: \"never\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n _addIssue(this, \"type\", dataset, config2);\n return dataset;\n }\n };\n}\n\n// src/schemas/nonNullable/nonNullable.ts\nfunction nonNullable(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_nullable\",\n reference: nonNullable,\n expects: \"!null\",\n async: false,\n wrapped,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value !== null) {\n dataset = this.wrapped[\"~run\"](dataset, config2);\n }\n if (dataset.value === null) {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nonNullable/nonNullableAsync.ts\nfunction nonNullableAsync(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_nullable\",\n reference: nonNullableAsync,\n expects: \"!null\",\n async: true,\n wrapped,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (dataset.value !== null) {\n dataset = await this.wrapped[\"~run\"](dataset, config2);\n }\n if (dataset.value === null) {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nonNullish/nonNullish.ts\nfunction nonNullish(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_nullish\",\n reference: nonNullish,\n expects: \"(!null & !undefined)\",\n async: false,\n wrapped,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (!(dataset.value === null || dataset.value === void 0)) {\n dataset = this.wrapped[\"~run\"](dataset, config2);\n }\n if (dataset.value === null || dataset.value === void 0) {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nonNullish/nonNullishAsync.ts\nfunction nonNullishAsync(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_nullish\",\n reference: nonNullishAsync,\n expects: \"(!null & !undefined)\",\n async: true,\n wrapped,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (!(dataset.value === null || dataset.value === void 0)) {\n dataset = await this.wrapped[\"~run\"](dataset, config2);\n }\n if (dataset.value === null || dataset.value === void 0) {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nonOptional/nonOptional.ts\nfunction nonOptional(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_optional\",\n reference: nonOptional,\n expects: \"!undefined\",\n async: false,\n wrapped,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value !== void 0) {\n dataset = this.wrapped[\"~run\"](dataset, config2);\n }\n if (dataset.value === void 0) {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nonOptional/nonOptionalAsync.ts\nfunction nonOptionalAsync(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_optional\",\n reference: nonOptionalAsync,\n expects: \"!undefined\",\n async: true,\n wrapped,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (dataset.value !== void 0) {\n dataset = await this.wrapped[\"~run\"](dataset, config2);\n }\n if (dataset.value === void 0) {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/null/null.ts\nfunction null_(message) {\n return {\n kind: \"schema\",\n type: \"null\",\n reference: null_,\n expects: \"null\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === null) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nullable/nullable.ts\nfunction nullable(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"nullable\",\n reference: nullable,\n expects: `(${wrapped.expects} | null)`,\n async: false,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === null) {\n if (this.default !== void 0) {\n dataset.value = getDefault(this, dataset, config2);\n }\n if (dataset.value === null) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/nullable/nullableAsync.ts\nfunction nullableAsync(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"nullable\",\n reference: nullableAsync,\n expects: `(${wrapped.expects} | null)`,\n async: true,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (dataset.value === null) {\n if (this.default !== void 0) {\n dataset.value = await getDefault(this, dataset, config2);\n }\n if (dataset.value === null) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/nullish/nullish.ts\nfunction nullish(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"nullish\",\n reference: nullish,\n expects: `(${wrapped.expects} | null | undefined)`,\n async: false,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === null || dataset.value === void 0) {\n if (this.default !== void 0) {\n dataset.value = getDefault(this, dataset, config2);\n }\n if (dataset.value === null || dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/nullish/nullishAsync.ts\nfunction nullishAsync(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"nullish\",\n reference: nullishAsync,\n expects: `(${wrapped.expects} | null | undefined)`,\n async: true,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (dataset.value === null || dataset.value === void 0) {\n if (this.default !== void 0) {\n dataset.value = await getDefault(this, dataset, config2);\n }\n if (dataset.value === null || dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/number/number.ts\nfunction number(message) {\n return {\n kind: \"schema\",\n type: \"number\",\n reference: number,\n expects: \"number\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (typeof dataset.value === \"number\" && !isNaN(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/object/object.ts\nfunction object(entries, message) {\n return {\n kind: \"schema\",\n type: \"object\",\n reference: object,\n expects: \"Object\",\n async: false,\n entries,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const key in this.entries) {\n const value2 = input[key];\n const valueDataset = this.entries[key][\"~run\"]({ value: value2 }, config2);\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/object/objectAsync.ts\nfunction objectAsync(entries, message) {\n return {\n kind: \"schema\",\n type: \"object\",\n reference: objectAsync,\n expects: \"Object\",\n async: true,\n entries,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const valueDatasets = await Promise.all(\n Object.entries(this.entries).map(async ([key, schema]) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await schema[\"~run\"]({ value: value2 }, config2)\n ];\n })\n );\n for (const [key, value2, valueDataset] of valueDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/objectWithRest/objectWithRest.ts\nfunction objectWithRest(entries, rest, message) {\n return {\n kind: \"schema\",\n type: \"object_with_rest\",\n reference: objectWithRest,\n expects: \"Object\",\n async: false,\n entries,\n rest,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const key in this.entries) {\n const value2 = input[key];\n const valueDataset = this.entries[key][\"~run\"]({ value: value2 }, config2);\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (_isValidObjectKey(input, key) && !(key in this.entries)) {\n const value2 = input[key];\n const valueDataset = this.rest[\"~run\"]({ value: value2 }, config2);\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value[key] = valueDataset.value;\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/objectWithRest/objectWithRestAsync.ts\nfunction objectWithRestAsync(entries, rest, message) {\n return {\n kind: \"schema\",\n type: \"object_with_rest\",\n reference: objectWithRestAsync,\n expects: \"Object\",\n async: true,\n entries,\n rest,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const [normalDatasets, restDatasets] = await Promise.all([\n // Parse schema of each normal entry\n // Hint: We do not distinguish between missing and `undefined` entries.\n // The reason for this decision is that it reduces the bundle size, and\n // we also expect that most users will expect this behavior.\n Promise.all(\n Object.entries(this.entries).map(async ([key, schema]) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await schema[\"~run\"]({ value: value2 }, config2)\n ];\n })\n ),\n // Parse other entries with rest schema\n // Hint: We exclude specific keys for security reasons\n Promise.all(\n Object.entries(input).filter(\n ([key]) => _isValidObjectKey(input, key) && !(key in this.entries)\n ).map(\n async ([key, value2]) => [\n key,\n value2,\n await this.rest[\"~run\"]({ value: value2 }, config2)\n ]\n )\n )\n ]);\n for (const [key, value2, valueDataset] of normalDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const [key, value2, valueDataset] of restDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value[key] = valueDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/optional/optional.ts\nfunction optional(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"optional\",\n reference: optional,\n expects: `(${wrapped.expects} | undefined)`,\n async: false,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === void 0) {\n if (this.default !== void 0) {\n dataset.value = getDefault(this, dataset, config2);\n }\n if (dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/optional/optionalAsync.ts\nfunction optionalAsync(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"optional\",\n reference: optionalAsync,\n expects: `(${wrapped.expects} | undefined)`,\n async: true,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (dataset.value === void 0) {\n if (this.default !== void 0) {\n dataset.value = await getDefault(this, dataset, config2);\n }\n if (dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/picklist/picklist.ts\nfunction picklist(options, message) {\n return {\n kind: \"schema\",\n type: \"picklist\",\n reference: picklist,\n expects: _joinExpects(options.map(_stringify), \"|\"),\n async: false,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (this.options.includes(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/promise/promise.ts\nfunction promise(message) {\n return {\n kind: \"schema\",\n type: \"promise\",\n reference: promise,\n expects: \"Promise\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value instanceof Promise) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/record/record.ts\nfunction record(key, value2, message) {\n return {\n kind: \"schema\",\n type: \"record\",\n reference: record,\n expects: \"Object\",\n async: false,\n key,\n value: value2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const entryKey in input) {\n if (_isValidObjectKey(input, entryKey)) {\n const entryValue = input[entryKey];\n const keyDataset = this.key[\"~run\"]({ value: entryKey }, config2);\n if (keyDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"key\",\n input,\n key: entryKey,\n value: entryValue\n };\n for (const issue of keyDataset.issues) {\n issue.path = [pathItem];\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = keyDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n const valueDataset = this.value[\"~run\"](\n { value: entryValue },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key: entryKey,\n value: entryValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!keyDataset.typed || !valueDataset.typed) {\n dataset.typed = false;\n }\n if (keyDataset.typed) {\n dataset.value[keyDataset.value] = valueDataset.value;\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/record/recordAsync.ts\nfunction recordAsync(key, value2, message) {\n return {\n kind: \"schema\",\n type: \"record\",\n reference: recordAsync,\n expects: \"Object\",\n async: true,\n key,\n value: value2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const datasets = await Promise.all(\n Object.entries(input).filter(([key2]) => _isValidObjectKey(input, key2)).map(\n ([entryKey, entryValue]) => Promise.all([\n entryKey,\n entryValue,\n this.key[\"~run\"]({ value: entryKey }, config2),\n this.value[\"~run\"]({ value: entryValue }, config2)\n ])\n )\n );\n for (const [\n entryKey,\n entryValue,\n keyDataset,\n valueDataset\n ] of datasets) {\n if (keyDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"key\",\n input,\n key: entryKey,\n value: entryValue\n };\n for (const issue of keyDataset.issues) {\n issue.path = [pathItem];\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = keyDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key: entryKey,\n value: entryValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!keyDataset.typed || !valueDataset.typed) {\n dataset.typed = false;\n }\n if (keyDataset.typed) {\n dataset.value[keyDataset.value] = valueDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/set/set.ts\nfunction set(value2, message) {\n return {\n kind: \"schema\",\n type: \"set\",\n reference: set,\n expects: \"Set\",\n async: false,\n value: value2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input instanceof Set) {\n dataset.typed = true;\n dataset.value = /* @__PURE__ */ new Set();\n for (const inputValue of input) {\n const valueDataset = this.value[\"~run\"](\n { value: inputValue },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"set\",\n origin: \"value\",\n input,\n key: null,\n value: inputValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.add(valueDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/set/setAsync.ts\nfunction setAsync(value2, message) {\n return {\n kind: \"schema\",\n type: \"set\",\n reference: setAsync,\n expects: \"Set\",\n async: true,\n value: value2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input instanceof Set) {\n dataset.typed = true;\n dataset.value = /* @__PURE__ */ new Set();\n const valueDatasets = await Promise.all(\n [...input].map(\n async (inputValue) => [\n inputValue,\n await this.value[\"~run\"]({ value: inputValue }, config2)\n ]\n )\n );\n for (const [inputValue, valueDataset] of valueDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"set\",\n origin: \"value\",\n input,\n key: null,\n value: inputValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.add(valueDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/strictObject/strictObject.ts\nfunction strictObject(entries, message) {\n return {\n kind: \"schema\",\n type: \"strict_object\",\n reference: strictObject,\n expects: \"Object\",\n async: false,\n entries,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const key in this.entries) {\n const value2 = input[key];\n const valueDataset = this.entries[key][\"~run\"]({ value: value2 }, config2);\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (!(key in this.entries)) {\n const value2 = input[key];\n _addIssue(this, \"type\", dataset, config2, {\n input: value2,\n expected: \"never\",\n path: [\n {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n }\n ]\n });\n break;\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/strictObject/strictObjectAsync.ts\nfunction strictObjectAsync(entries, message) {\n return {\n kind: \"schema\",\n type: \"strict_object\",\n reference: strictObjectAsync,\n expects: \"Object\",\n async: true,\n entries,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const valueDatasets = await Promise.all(\n Object.entries(this.entries).map(async ([key, schema]) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await schema[\"~run\"]({ value: value2 }, config2)\n ];\n })\n );\n for (const [key, value2, valueDataset] of valueDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (!(key in this.entries)) {\n const value2 = input[key];\n _addIssue(this, \"type\", dataset, config2, {\n input: value2,\n expected: \"never\",\n path: [\n {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n }\n ]\n });\n break;\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/strictTuple/strictTuple.ts\nfunction strictTuple(items, message) {\n return {\n kind: \"schema\",\n type: \"strict_tuple\",\n reference: strictTuple,\n expects: \"Array\",\n async: false,\n items,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < this.items.length; key++) {\n const value2 = input[key];\n const itemDataset = this.items[key][\"~run\"]({ value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!(dataset.issues && config2.abortEarly) && this.items.length < input.length) {\n const value2 = input[items.length];\n _addIssue(this, \"type\", dataset, config2, {\n input: value2,\n expected: \"never\",\n path: [\n {\n type: \"array\",\n origin: \"value\",\n input,\n key: this.items.length,\n value: value2\n }\n ]\n });\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/strictTuple/strictTupleAsync.ts\nfunction strictTupleAsync(items, message) {\n return {\n kind: \"schema\",\n type: \"strict_tuple\",\n reference: strictTupleAsync,\n expects: \"Array\",\n async: true,\n items,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const itemDatasets = await Promise.all(\n this.items.map(async (item, key) => {\n const value2 = input[key];\n return [key, value2, await item[\"~run\"]({ value: value2 }, config2)];\n })\n );\n for (const [key, value2, itemDataset] of itemDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!(dataset.issues && config2.abortEarly) && this.items.length < input.length) {\n const value2 = input[items.length];\n _addIssue(this, \"type\", dataset, config2, {\n input: value2,\n expected: \"never\",\n path: [\n {\n type: \"array\",\n origin: \"value\",\n input,\n key: this.items.length,\n value: value2\n }\n ]\n });\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/string/string.ts\nfunction string(message) {\n return {\n kind: \"schema\",\n type: \"string\",\n reference: string,\n expects: \"string\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (typeof dataset.value === \"string\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/symbol/symbol.ts\nfunction symbol(message) {\n return {\n kind: \"schema\",\n type: \"symbol\",\n reference: symbol,\n expects: \"symbol\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (typeof dataset.value === \"symbol\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/tuple/tuple.ts\nfunction tuple(items, message) {\n return {\n kind: \"schema\",\n type: \"tuple\",\n reference: tuple,\n expects: \"Array\",\n async: false,\n items,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < this.items.length; key++) {\n const value2 = input[key];\n const itemDataset = this.items[key][\"~run\"]({ value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/tuple/tupleAsync.ts\nfunction tupleAsync(items, message) {\n return {\n kind: \"schema\",\n type: \"tuple\",\n reference: tupleAsync,\n expects: \"Array\",\n async: true,\n items,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const itemDatasets = await Promise.all(\n this.items.map(async (item, key) => {\n const value2 = input[key];\n return [key, value2, await item[\"~run\"]({ value: value2 }, config2)];\n })\n );\n for (const [key, value2, itemDataset] of itemDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/tupleWithRest/tupleWithRest.ts\nfunction tupleWithRest(items, rest, message) {\n return {\n kind: \"schema\",\n type: \"tuple_with_rest\",\n reference: tupleWithRest,\n expects: \"Array\",\n async: false,\n items,\n rest,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < this.items.length; key++) {\n const value2 = input[key];\n const itemDataset = this.items[key][\"~run\"]({ value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (let key = this.items.length; key < input.length; key++) {\n const value2 = input[key];\n const itemDataset = this.rest[\"~run\"]({ value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/tupleWithRest/tupleWithRestAsync.ts\nfunction tupleWithRestAsync(items, rest, message) {\n return {\n kind: \"schema\",\n type: \"tuple_with_rest\",\n reference: tupleWithRestAsync,\n expects: \"Array\",\n async: true,\n items,\n rest,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const [normalDatasets, restDatasets] = await Promise.all([\n // Parse schema of each normal item\n Promise.all(\n this.items.map(async (item, key) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await item[\"~run\"]({ value: value2 }, config2)\n ];\n })\n ),\n // Parse other items with rest schema\n Promise.all(\n input.slice(this.items.length).map(async (value2, key) => {\n return [\n key + this.items.length,\n value2,\n await this.rest[\"~run\"]({ value: value2 }, config2)\n ];\n })\n )\n ]);\n for (const [key, value2, itemDataset] of normalDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const [key, value2, itemDataset] of restDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/undefined/undefined.ts\nfunction undefined_(message) {\n return {\n kind: \"schema\",\n type: \"undefined\",\n reference: undefined_,\n expects: \"undefined\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === void 0) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/undefinedable/undefinedable.ts\nfunction undefinedable(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"undefinedable\",\n reference: undefinedable,\n expects: `(${wrapped.expects} | undefined)`,\n async: false,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === void 0) {\n if (this.default !== void 0) {\n dataset.value = getDefault(this, dataset, config2);\n }\n if (dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/undefinedable/undefinedableAsync.ts\nfunction undefinedableAsync(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"undefinedable\",\n reference: undefinedableAsync,\n expects: `(${wrapped.expects} | undefined)`,\n async: true,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (dataset.value === void 0) {\n if (this.default !== void 0) {\n dataset.value = await getDefault(this, dataset, config2);\n }\n if (dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/union/utils/_subIssues/_subIssues.ts\nfunction _subIssues(datasets) {\n let issues;\n if (datasets) {\n for (const dataset of datasets) {\n if (issues) {\n issues.push(...dataset.issues);\n } else {\n issues = dataset.issues;\n }\n }\n }\n return issues;\n}\n\n// src/schemas/union/union.ts\nfunction union(options, message) {\n return {\n kind: \"schema\",\n type: \"union\",\n reference: union,\n expects: _joinExpects(\n options.map((option) => option.expects),\n \"|\"\n ),\n async: false,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n let validDataset;\n let typedDatasets;\n let untypedDatasets;\n for (const schema of this.options) {\n const optionDataset = schema[\"~run\"]({ value: dataset.value }, config2);\n if (optionDataset.typed) {\n if (optionDataset.issues) {\n if (typedDatasets) {\n typedDatasets.push(optionDataset);\n } else {\n typedDatasets = [optionDataset];\n }\n } else {\n validDataset = optionDataset;\n break;\n }\n } else {\n if (untypedDatasets) {\n untypedDatasets.push(optionDataset);\n } else {\n untypedDatasets = [optionDataset];\n }\n }\n }\n if (validDataset) {\n return validDataset;\n }\n if (typedDatasets) {\n if (typedDatasets.length === 1) {\n return typedDatasets[0];\n }\n _addIssue(this, \"type\", dataset, config2, {\n issues: _subIssues(typedDatasets)\n });\n dataset.typed = true;\n } else if (untypedDatasets?.length === 1) {\n return untypedDatasets[0];\n } else {\n _addIssue(this, \"type\", dataset, config2, {\n issues: _subIssues(untypedDatasets)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/union/unionAsync.ts\nfunction unionAsync(options, message) {\n return {\n kind: \"schema\",\n type: \"union\",\n reference: unionAsync,\n expects: _joinExpects(\n options.map((option) => option.expects),\n \"|\"\n ),\n async: true,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n let validDataset;\n let typedDatasets;\n let untypedDatasets;\n for (const schema of this.options) {\n const optionDataset = await schema[\"~run\"](\n { value: dataset.value },\n config2\n );\n if (optionDataset.typed) {\n if (optionDataset.issues) {\n if (typedDatasets) {\n typedDatasets.push(optionDataset);\n } else {\n typedDatasets = [optionDataset];\n }\n } else {\n validDataset = optionDataset;\n break;\n }\n } else {\n if (untypedDatasets) {\n untypedDatasets.push(optionDataset);\n } else {\n untypedDatasets = [optionDataset];\n }\n }\n }\n if (validDataset) {\n return validDataset;\n }\n if (typedDatasets) {\n if (typedDatasets.length === 1) {\n return typedDatasets[0];\n }\n _addIssue(this, \"type\", dataset, config2, {\n issues: _subIssues(typedDatasets)\n });\n dataset.typed = true;\n } else if (untypedDatasets?.length === 1) {\n return untypedDatasets[0];\n } else {\n _addIssue(this, \"type\", dataset, config2, {\n issues: _subIssues(untypedDatasets)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/unknown/unknown.ts\nfunction unknown() {\n return {\n kind: \"schema\",\n type: \"unknown\",\n reference: unknown,\n expects: \"unknown\",\n async: false,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset) {\n dataset.typed = true;\n return dataset;\n }\n };\n}\n\n// src/schemas/variant/variant.ts\nfunction variant(key, options, message) {\n return {\n kind: \"schema\",\n type: \"variant\",\n reference: variant,\n expects: \"Object\",\n async: false,\n key,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n let outputDataset;\n let maxDiscriminatorPriority = 0;\n let invalidDiscriminatorKey = this.key;\n let expectedDiscriminators = [];\n const parseOptions = (variant2, allKeys) => {\n for (const schema of variant2.options) {\n if (schema.type === \"variant\") {\n parseOptions(schema, new Set(allKeys).add(schema.key));\n } else {\n let keysAreValid = true;\n let currentPriority = 0;\n for (const currentKey of allKeys) {\n if (schema.entries[currentKey][\"~run\"](\n // @ts-expect-error\n { typed: false, value: input[currentKey] },\n config2\n ).issues) {\n keysAreValid = false;\n if (invalidDiscriminatorKey !== currentKey && (maxDiscriminatorPriority < currentPriority || maxDiscriminatorPriority === currentPriority && currentKey in input && !(invalidDiscriminatorKey in input))) {\n maxDiscriminatorPriority = currentPriority;\n invalidDiscriminatorKey = currentKey;\n expectedDiscriminators = [];\n }\n if (invalidDiscriminatorKey === currentKey) {\n expectedDiscriminators.push(\n schema.entries[currentKey].expects\n );\n }\n break;\n }\n currentPriority++;\n }\n if (keysAreValid) {\n const optionDataset = schema[\"~run\"]({ value: input }, config2);\n if (!outputDataset || !outputDataset.typed && optionDataset.typed) {\n outputDataset = optionDataset;\n }\n }\n }\n if (outputDataset && !outputDataset.issues) {\n break;\n }\n }\n };\n parseOptions(this, /* @__PURE__ */ new Set([this.key]));\n if (outputDataset) {\n return outputDataset;\n }\n _addIssue(this, \"type\", dataset, config2, {\n // @ts-expect-error\n input: input[invalidDiscriminatorKey],\n expected: _joinExpects(expectedDiscriminators, \"|\"),\n path: [\n {\n type: \"object\",\n origin: \"value\",\n input,\n key: invalidDiscriminatorKey,\n // @ts-expect-error\n value: input[invalidDiscriminatorKey]\n }\n ]\n });\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/variant/variantAsync.ts\nfunction variantAsync(key, options, message) {\n return {\n kind: \"schema\",\n type: \"variant\",\n reference: variantAsync,\n expects: \"Object\",\n async: true,\n key,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n let outputDataset;\n let maxDiscriminatorPriority = 0;\n let invalidDiscriminatorKey = this.key;\n let expectedDiscriminators = [];\n const parseOptions = async (variant2, allKeys) => {\n for (const schema of variant2.options) {\n if (schema.type === \"variant\") {\n await parseOptions(schema, new Set(allKeys).add(schema.key));\n } else {\n let keysAreValid = true;\n let currentPriority = 0;\n for (const currentKey of allKeys) {\n if ((await schema.entries[currentKey][\"~run\"](\n // @ts-expect-error\n { typed: false, value: input[currentKey] },\n config2\n )).issues) {\n keysAreValid = false;\n if (invalidDiscriminatorKey !== currentKey && (maxDiscriminatorPriority < currentPriority || maxDiscriminatorPriority === currentPriority && currentKey in input && !(invalidDiscriminatorKey in input))) {\n maxDiscriminatorPriority = currentPriority;\n invalidDiscriminatorKey = currentKey;\n expectedDiscriminators = [];\n }\n if (invalidDiscriminatorKey === currentKey) {\n expectedDiscriminators.push(\n schema.entries[currentKey].expects\n );\n }\n break;\n }\n currentPriority++;\n }\n if (keysAreValid) {\n const optionDataset = await schema[\"~run\"](\n { value: input },\n config2\n );\n if (!outputDataset || !outputDataset.typed && optionDataset.typed) {\n outputDataset = optionDataset;\n }\n }\n }\n if (outputDataset && !outputDataset.issues) {\n break;\n }\n }\n };\n await parseOptions(this, /* @__PURE__ */ new Set([this.key]));\n if (outputDataset) {\n return outputDataset;\n }\n _addIssue(this, \"type\", dataset, config2, {\n // @ts-expect-error\n input: input[invalidDiscriminatorKey],\n expected: _joinExpects(expectedDiscriminators, \"|\"),\n path: [\n {\n type: \"object\",\n origin: \"value\",\n input,\n key: invalidDiscriminatorKey,\n // @ts-expect-error\n value: input[invalidDiscriminatorKey]\n }\n ]\n });\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/void/void.ts\nfunction void_(message) {\n return {\n kind: \"schema\",\n type: \"void\",\n reference: void_,\n expects: \"void\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === void 0) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/methods/keyof/keyof.ts\nfunction keyof(schema, message) {\n return picklist(Object.keys(schema.entries), message);\n}\n\n// src/methods/omit/omit.ts\nfunction omit(schema, keys) {\n const entries = {\n ...schema.entries\n };\n for (const key of keys) {\n delete entries[key];\n }\n return {\n ...schema,\n entries,\n get \"~standard\"() {\n return _getStandardProps(this);\n }\n };\n}\n\n// src/methods/parse/parse.ts\nfunction parse(schema, input, config2) {\n const dataset = schema[\"~run\"]({ value: input }, getGlobalConfig(config2));\n if (dataset.issues) {\n throw new ValiError(dataset.issues);\n }\n return dataset.value;\n}\n\n// src/methods/parse/parseAsync.ts\nasync function parseAsync(schema, input, config2) {\n const dataset = await schema[\"~run\"](\n { value: input },\n getGlobalConfig(config2)\n );\n if (dataset.issues) {\n throw new ValiError(dataset.issues);\n }\n return dataset.value;\n}\n\n// src/methods/parser/parser.ts\nfunction parser(schema, config2) {\n const func = (input) => parse(schema, input, config2);\n func.schema = schema;\n func.config = config2;\n return func;\n}\n\n// src/methods/parser/parserAsync.ts\nfunction parserAsync(schema, config2) {\n const func = (input) => parseAsync(schema, input, config2);\n func.schema = schema;\n func.config = config2;\n return func;\n}\n\n// src/methods/partial/partial.ts\nfunction partial(schema, keys) {\n const entries = {};\n for (const key in schema.entries) {\n entries[key] = !keys || keys.includes(key) ? optional(schema.entries[key]) : schema.entries[key];\n }\n return {\n ...schema,\n entries,\n get \"~standard\"() {\n return _getStandardProps(this);\n }\n };\n}\n\n// src/methods/partial/partialAsync.ts\nfunction partialAsync(schema, keys) {\n const entries = {};\n for (const key in schema.entries) {\n entries[key] = !keys || keys.includes(key) ? optionalAsync(schema.entries[key]) : schema.entries[key];\n }\n return {\n ...schema,\n entries,\n get \"~standard\"() {\n return _getStandardProps(this);\n }\n };\n}\n\n// src/methods/pick/pick.ts\nfunction pick(schema, keys) {\n const entries = {};\n for (const key of keys) {\n entries[key] = schema.entries[key];\n }\n return {\n ...schema,\n entries,\n get \"~standard\"() {\n return _getStandardProps(this);\n }\n };\n}\n\n// src/methods/pipe/pipe.ts\nfunction pipe(...pipe2) {\n return {\n ...pipe2[0],\n pipe: pipe2,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n for (const item of pipe2) {\n if (item.kind !== \"metadata\") {\n if (dataset.issues && (item.kind === \"schema\" || item.kind === \"transformation\")) {\n dataset.typed = false;\n break;\n }\n if (!dataset.issues || !config2.abortEarly && !config2.abortPipeEarly) {\n dataset = item[\"~run\"](dataset, config2);\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/pipe/pipeAsync.ts\nfunction pipeAsync(...pipe2) {\n return {\n ...pipe2[0],\n pipe: pipe2,\n async: true,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n for (const item of pipe2) {\n if (item.kind !== \"metadata\") {\n if (dataset.issues && (item.kind === \"schema\" || item.kind === \"transformation\")) {\n dataset.typed = false;\n break;\n }\n if (!dataset.issues || !config2.abortEarly && !config2.abortPipeEarly) {\n dataset = await item[\"~run\"](dataset, config2);\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/required/required.ts\nfunction required(schema, arg2, arg3) {\n const keys = Array.isArray(arg2) ? arg2 : void 0;\n const message = Array.isArray(arg2) ? arg3 : arg2;\n const entries = {};\n for (const key in schema.entries) {\n entries[key] = !keys || keys.includes(key) ? nonOptional(schema.entries[key], message) : schema.entries[key];\n }\n return {\n ...schema,\n entries,\n get \"~standard\"() {\n return _getStandardProps(this);\n }\n };\n}\n\n// src/methods/required/requiredAsync.ts\nfunction requiredAsync(schema, arg2, arg3) {\n const keys = Array.isArray(arg2) ? arg2 : void 0;\n const message = Array.isArray(arg2) ? arg3 : arg2;\n const entries = {};\n for (const key in schema.entries) {\n entries[key] = !keys || keys.includes(key) ? nonOptionalAsync(schema.entries[key], message) : schema.entries[key];\n }\n return {\n ...schema,\n entries,\n get \"~standard\"() {\n return _getStandardProps(this);\n }\n };\n}\n\n// src/methods/safeParse/safeParse.ts\nfunction safeParse(schema, input, config2) {\n const dataset = schema[\"~run\"]({ value: input }, getGlobalConfig(config2));\n return {\n typed: dataset.typed,\n success: !dataset.issues,\n output: dataset.value,\n issues: dataset.issues\n };\n}\n\n// src/methods/safeParse/safeParseAsync.ts\nasync function safeParseAsync(schema, input, config2) {\n const dataset = await schema[\"~run\"](\n { value: input },\n getGlobalConfig(config2)\n );\n return {\n typed: dataset.typed,\n success: !dataset.issues,\n output: dataset.value,\n issues: dataset.issues\n };\n}\n\n// src/methods/safeParser/safeParser.ts\nfunction safeParser(schema, config2) {\n const func = (input) => safeParse(schema, input, config2);\n func.schema = schema;\n func.config = config2;\n return func;\n}\n\n// src/methods/safeParser/safeParserAsync.ts\nfunction safeParserAsync(schema, config2) {\n const func = (input) => safeParseAsync(schema, input, config2);\n func.schema = schema;\n func.config = config2;\n return func;\n}\n\n// src/methods/unwrap/unwrap.ts\nfunction unwrap(schema) {\n return schema.wrapped;\n}\nexport {\n BASE64_REGEX,\n BIC_REGEX,\n CUID2_REGEX,\n DECIMAL_REGEX,\n DIGITS_REGEX,\n EMAIL_REGEX,\n EMOJI_REGEX,\n HEXADECIMAL_REGEX,\n HEX_COLOR_REGEX,\n IMEI_REGEX,\n IPV4_REGEX,\n IPV6_REGEX,\n IP_REGEX,\n ISO_DATE_REGEX,\n ISO_DATE_TIME_REGEX,\n ISO_TIMESTAMP_REGEX,\n ISO_TIME_REGEX,\n ISO_TIME_SECOND_REGEX,\n ISO_WEEK_REGEX,\n MAC48_REGEX,\n MAC64_REGEX,\n MAC_REGEX,\n NANO_ID_REGEX,\n OCTAL_REGEX,\n ULID_REGEX,\n UUID_REGEX,\n ValiError,\n _addIssue,\n _getByteCount,\n _getGraphemeCount,\n _getStandardProps,\n _getWordCount,\n _isLuhnAlgo,\n _isValidObjectKey,\n _joinExpects,\n _stringify,\n any,\n args,\n argsAsync,\n array,\n arrayAsync,\n assert,\n awaitAsync,\n base64,\n bic,\n bigint,\n blob,\n boolean,\n brand,\n bytes,\n check,\n checkAsync,\n checkItems,\n checkItemsAsync,\n config,\n creditCard,\n cuid2,\n custom,\n customAsync,\n date,\n decimal,\n deleteGlobalConfig,\n deleteGlobalMessage,\n deleteSchemaMessage,\n deleteSpecificMessage,\n description,\n digits,\n email,\n emoji,\n empty,\n endsWith,\n entriesFromList,\n enum_ as enum,\n enum_,\n everyItem,\n excludes,\n fallback,\n fallbackAsync,\n file,\n filterItems,\n findItem,\n finite,\n flatten,\n forward,\n forwardAsync,\n function_ as function,\n function_,\n getDefault,\n getDefaults,\n getDefaultsAsync,\n getDotPath,\n getFallback,\n getFallbacks,\n getFallbacksAsync,\n getGlobalConfig,\n getGlobalMessage,\n getSchemaMessage,\n getSpecificMessage,\n graphemes,\n hash,\n hexColor,\n hexadecimal,\n imei,\n includes,\n instance,\n integer,\n intersect,\n intersectAsync,\n ip,\n ipv4,\n ipv6,\n is,\n isOfKind,\n isOfType,\n isValiError,\n isoDate,\n isoDateTime,\n isoTime,\n isoTimeSecond,\n isoTimestamp,\n isoWeek,\n keyof,\n lazy,\n lazyAsync,\n length,\n literal,\n looseObject,\n looseObjectAsync,\n looseTuple,\n looseTupleAsync,\n mac,\n mac48,\n mac64,\n map,\n mapAsync,\n mapItems,\n maxBytes,\n maxGraphemes,\n maxLength,\n maxSize,\n maxValue,\n maxWords,\n metadata,\n mimeType,\n minBytes,\n minGraphemes,\n minLength,\n minSize,\n minValue,\n minWords,\n multipleOf,\n nan,\n nanoid,\n never,\n nonEmpty,\n nonNullable,\n nonNullableAsync,\n nonNullish,\n nonNullishAsync,\n nonOptional,\n nonOptionalAsync,\n normalize,\n notBytes,\n notGraphemes,\n notLength,\n notSize,\n notValue,\n notWords,\n null_ as null,\n null_,\n nullable,\n nullableAsync,\n nullish,\n nullishAsync,\n number,\n object,\n objectAsync,\n objectWithRest,\n objectWithRestAsync,\n octal,\n omit,\n optional,\n optionalAsync,\n parse,\n parseAsync,\n parser,\n parserAsync,\n partial,\n partialAsync,\n partialCheck,\n partialCheckAsync,\n pick,\n picklist,\n pipe,\n pipeAsync,\n promise,\n rawCheck,\n rawCheckAsync,\n rawTransform,\n rawTransformAsync,\n readonly,\n record,\n recordAsync,\n reduceItems,\n regex,\n required,\n requiredAsync,\n returns,\n returnsAsync,\n safeInteger,\n safeParse,\n safeParseAsync,\n safeParser,\n safeParserAsync,\n set,\n setAsync,\n setGlobalConfig,\n setGlobalMessage,\n setSchemaMessage,\n setSpecificMessage,\n size,\n someItem,\n sortItems,\n startsWith,\n strictObject,\n strictObjectAsync,\n strictTuple,\n strictTupleAsync,\n string,\n symbol,\n title,\n toLowerCase,\n toMaxValue,\n toMinValue,\n toUpperCase,\n transform,\n transformAsync,\n trim,\n trimEnd,\n trimStart,\n tuple,\n tupleAsync,\n tupleWithRest,\n tupleWithRestAsync,\n ulid,\n undefined_ as undefined,\n undefined_,\n undefinedable,\n undefinedableAsync,\n union,\n unionAsync,\n unknown,\n unwrap,\n url,\n uuid,\n value,\n variant,\n variantAsync,\n void_ as void,\n void_,\n words\n};\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"index.DxUTT09Y.js","sources":["../../../../../../node_modules/.pnpm/valibot@1.0.0-beta.7_typescript@5.7.0-dev.20241105/node_modules/valibot/dist/index.js"],"sourcesContent":["// src/storages/globalConfig/globalConfig.ts\nvar store;\nfunction setGlobalConfig(config2) {\n store = { ...store, ...config2 };\n}\nfunction getGlobalConfig(config2) {\n return {\n lang: config2?.lang ?? store?.lang,\n message: config2?.message,\n abortEarly: config2?.abortEarly ?? store?.abortEarly,\n abortPipeEarly: config2?.abortPipeEarly ?? store?.abortPipeEarly\n };\n}\nfunction deleteGlobalConfig() {\n store = void 0;\n}\n\n// src/storages/globalMessage/globalMessage.ts\nvar store2;\nfunction setGlobalMessage(message, lang) {\n if (!store2) store2 = /* @__PURE__ */ new Map();\n store2.set(lang, message);\n}\nfunction getGlobalMessage(lang) {\n return store2?.get(lang);\n}\nfunction deleteGlobalMessage(lang) {\n store2?.delete(lang);\n}\n\n// src/storages/schemaMessage/schemaMessage.ts\nvar store3;\nfunction setSchemaMessage(message, lang) {\n if (!store3) store3 = /* @__PURE__ */ new Map();\n store3.set(lang, message);\n}\nfunction getSchemaMessage(lang) {\n return store3?.get(lang);\n}\nfunction deleteSchemaMessage(lang) {\n store3?.delete(lang);\n}\n\n// src/storages/specificMessage/specificMessage.ts\nvar store4;\nfunction setSpecificMessage(reference, message, lang) {\n if (!store4) store4 = /* @__PURE__ */ new Map();\n if (!store4.get(reference)) store4.set(reference, /* @__PURE__ */ new Map());\n store4.get(reference).set(lang, message);\n}\nfunction getSpecificMessage(reference, lang) {\n return store4?.get(reference)?.get(lang);\n}\nfunction deleteSpecificMessage(reference, lang) {\n store4?.get(reference)?.delete(lang);\n}\n\n// src/utils/_stringify/_stringify.ts\nfunction _stringify(input) {\n const type = typeof input;\n if (type === \"string\") {\n return `\"${input}\"`;\n }\n if (type === \"number\" || type === \"bigint\" || type === \"boolean\") {\n return `${input}`;\n }\n if (type === \"object\" || type === \"function\") {\n return (input && Object.getPrototypeOf(input)?.constructor?.name) ?? \"null\";\n }\n return type;\n}\n\n// src/utils/_addIssue/_addIssue.ts\nfunction _addIssue(context, label, dataset, config2, other) {\n const input = other && \"input\" in other ? other.input : dataset.value;\n const expected = other?.expected ?? context.expects ?? null;\n const received = other?.received ?? _stringify(input);\n const issue = {\n kind: context.kind,\n type: context.type,\n input,\n expected,\n received,\n message: `Invalid ${label}: ${expected ? `Expected ${expected} but r` : \"R\"}eceived ${received}`,\n requirement: context.requirement,\n path: other?.path,\n issues: other?.issues,\n lang: config2.lang,\n abortEarly: config2.abortEarly,\n abortPipeEarly: config2.abortPipeEarly\n };\n const isSchema = context.kind === \"schema\";\n const message = other?.message ?? context.message ?? getSpecificMessage(context.reference, issue.lang) ?? (isSchema ? getSchemaMessage(issue.lang) : null) ?? config2.message ?? getGlobalMessage(issue.lang);\n if (message) {\n issue.message = typeof message === \"function\" ? (\n // @ts-expect-error\n message(issue)\n ) : message;\n }\n if (isSchema) {\n dataset.typed = false;\n }\n if (dataset.issues) {\n dataset.issues.push(issue);\n } else {\n dataset.issues = [issue];\n }\n}\n\n// src/utils/_getByteCount/_getByteCount.ts\nvar textEncoder;\nfunction _getByteCount(input) {\n if (!textEncoder) {\n textEncoder = new TextEncoder();\n }\n return textEncoder.encode(input).length;\n}\n\n// src/utils/_getGraphemeCount/_getGraphemeCount.ts\nvar segmenter;\nfunction _getGraphemeCount(input) {\n if (!segmenter) {\n segmenter = new Intl.Segmenter();\n }\n const segments = segmenter.segment(input);\n let count = 0;\n for (const _ of segments) {\n count++;\n }\n return count;\n}\n\n// src/utils/_getStandardProps/_getStandardProps.ts\nfunction _getStandardProps(context) {\n return {\n version: 1,\n vendor: \"valibot\",\n validate(value2) {\n return context[\"~run\"]({ value: value2 }, getGlobalConfig());\n }\n };\n}\n\n// src/utils/_getWordCount/_getWordCount.ts\nvar store5;\nfunction _getWordCount(locales, input) {\n if (!store5) {\n store5 = /* @__PURE__ */ new Map();\n }\n if (!store5.get(locales)) {\n store5.set(locales, new Intl.Segmenter(locales, { granularity: \"word\" }));\n }\n const segments = store5.get(locales).segment(input);\n let count = 0;\n for (const segment of segments) {\n if (segment.isWordLike) {\n count++;\n }\n }\n return count;\n}\n\n// src/utils/_isLuhnAlgo/_isLuhnAlgo.ts\nvar NON_DIGIT_REGEX = /\\D/gu;\nfunction _isLuhnAlgo(input) {\n const number2 = input.replace(NON_DIGIT_REGEX, \"\");\n let length2 = number2.length;\n let bit = 1;\n let sum = 0;\n while (length2) {\n const value2 = +number2[--length2];\n bit ^= 1;\n sum += bit ? [0, 2, 4, 6, 8, 1, 3, 5, 7, 9][value2] : value2;\n }\n return sum % 10 === 0;\n}\n\n// src/utils/_isValidObjectKey/_isValidObjectKey.ts\nfunction _isValidObjectKey(object2, key) {\n return Object.hasOwn(object2, key) && key !== \"__proto__\" && key !== \"prototype\" && key !== \"constructor\";\n}\n\n// src/utils/_joinExpects/_joinExpects.ts\nfunction _joinExpects(values, separator) {\n const list = [...new Set(values)];\n if (list.length > 1) {\n return `(${list.join(` ${separator} `)})`;\n }\n return list[0] ?? \"never\";\n}\n\n// src/utils/entriesFromList/entriesFromList.ts\nfunction entriesFromList(list, schema) {\n const entries = {};\n for (const key of list) {\n entries[key] = schema;\n }\n return entries;\n}\n\n// src/utils/getDotPath/getDotPath.ts\nfunction getDotPath(issue) {\n if (issue.path) {\n let key = \"\";\n for (const item of issue.path) {\n if (typeof item.key === \"string\" || typeof item.key === \"number\") {\n if (key) {\n key += `.${item.key}`;\n } else {\n key += item.key;\n }\n } else {\n return null;\n }\n }\n return key;\n }\n return null;\n}\n\n// src/utils/isOfKind/isOfKind.ts\nfunction isOfKind(kind, object2) {\n return object2.kind === kind;\n}\n\n// src/utils/isOfType/isOfType.ts\nfunction isOfType(type, object2) {\n return object2.type === type;\n}\n\n// src/utils/isValiError/isValiError.ts\nfunction isValiError(error) {\n return error instanceof ValiError;\n}\n\n// src/utils/ValiError/ValiError.ts\nvar ValiError = class extends Error {\n /**\n * The error issues.\n */\n issues;\n /**\n * Creates a Valibot error with useful information.\n *\n * @param issues The error issues.\n */\n constructor(issues) {\n super(issues[0].message);\n this.name = \"ValiError\";\n this.issues = issues;\n }\n};\n\n// src/actions/args/args.ts\nfunction args(schema) {\n return {\n kind: \"transformation\",\n type: \"args\",\n reference: args,\n async: false,\n schema,\n \"~run\"(dataset, config2) {\n const func = dataset.value;\n dataset.value = (...args_) => {\n const argsDataset = this.schema[\"~run\"]({ value: args_ }, config2);\n if (argsDataset.issues) {\n throw new ValiError(argsDataset.issues);\n }\n return func(...argsDataset.value);\n };\n return dataset;\n }\n };\n}\n\n// src/actions/args/argsAsync.ts\nfunction argsAsync(schema) {\n return {\n kind: \"transformation\",\n type: \"args\",\n reference: argsAsync,\n async: false,\n schema,\n \"~run\"(dataset, config2) {\n const func = dataset.value;\n dataset.value = async (...args2) => {\n const argsDataset = await schema[\"~run\"]({ value: args2 }, config2);\n if (argsDataset.issues) {\n throw new ValiError(argsDataset.issues);\n }\n return func(...argsDataset.value);\n };\n return dataset;\n }\n };\n}\n\n// src/actions/await/awaitAsync.ts\nfunction awaitAsync() {\n return {\n kind: \"transformation\",\n type: \"await\",\n reference: awaitAsync,\n async: true,\n async \"~run\"(dataset) {\n dataset.value = await dataset.value;\n return dataset;\n }\n };\n}\n\n// src/regex.ts\nvar BASE64_REGEX = /^(?:[\\da-z+/]{4})*(?:[\\da-z+/]{2}==|[\\da-z+/]{3}=)?$/iu;\nvar BIC_REGEX = /^[A-Z]{6}(?!00)[\\dA-Z]{2}(?:[\\dA-Z]{3})?$/u;\nvar CUID2_REGEX = /^[a-z][\\da-z]*$/u;\nvar DECIMAL_REGEX = /^[+-]?\\d+(?:\\.\\d+)?$/u;\nvar DIGITS_REGEX = /^\\d+$/u;\nvar EMAIL_REGEX = /^[\\w+-]+(?:\\.[\\w+-]+)*@[\\da-z]+(?:[.-][\\da-z]+)*\\.[a-z]{2,}$/iu;\nvar EMOJI_REGEX = (\n // eslint-disable-next-line redos-detector/no-unsafe-regex, regexp/no-dupe-disjunctions -- false positives\n /^(?:[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}))*)+$/u\n);\nvar HEXADECIMAL_REGEX = /^(?:0[hx])?[\\da-f]+$/iu;\nvar HEX_COLOR_REGEX = /^#(?:[\\da-f]{3,4}|[\\da-f]{6}|[\\da-f]{8})$/iu;\nvar IMEI_REGEX = /^\\d{15}$|^\\d{2}-\\d{6}-\\d{6}-\\d$/u;\nvar IPV4_REGEX = (\n // eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive\n /^(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])(?:\\.(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])){3}$/u\n);\nvar IPV6_REGEX = /^(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:|(?:[\\da-f]{1,4}:){1,6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,5}(?::[\\da-f]{1,4}){1,2}|(?:[\\da-f]{1,4}:){1,4}(?::[\\da-f]{1,4}){1,3}|(?:[\\da-f]{1,4}:){1,3}(?::[\\da-f]{1,4}){1,4}|(?:[\\da-f]{1,4}:){1,2}(?::[\\da-f]{1,4}){1,5}|[\\da-f]{1,4}:(?::[\\da-f]{1,4}){1,6}|:(?:(?::[\\da-f]{1,4}){1,7}|:)|fe80:(?::[\\da-f]{0,4}){0,4}%[\\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)|(?:[\\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d))$/iu;\nvar IP_REGEX = /^(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])(?:\\.(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])){3}$|^(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:|(?:[\\da-f]{1,4}:){1,6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,5}(?::[\\da-f]{1,4}){1,2}|(?:[\\da-f]{1,4}:){1,4}(?::[\\da-f]{1,4}){1,3}|(?:[\\da-f]{1,4}:){1,3}(?::[\\da-f]{1,4}){1,4}|(?:[\\da-f]{1,4}:){1,2}(?::[\\da-f]{1,4}){1,5}|[\\da-f]{1,4}:(?::[\\da-f]{1,4}){1,6}|:(?:(?::[\\da-f]{1,4}){1,7}|:)|fe80:(?::[\\da-f]{0,4}){0,4}%[\\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)|(?:[\\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d))$/iu;\nvar ISO_DATE_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])$/u;\nvar ISO_DATE_TIME_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])T(?:0\\d|1\\d|2[0-3]):[0-5]\\d$/u;\nvar ISO_TIME_REGEX = /^(?:0\\d|1\\d|2[0-3]):[0-5]\\d$/u;\nvar ISO_TIME_SECOND_REGEX = /^(?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}$/u;\nvar ISO_TIMESTAMP_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])T(?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}(?:\\.\\d{1,9})?(?:Z|[+-](?:0\\d|1\\d|2[0-3])(?::?[0-5]\\d)?)$/u;\nvar ISO_WEEK_REGEX = /^\\d{4}-W(?:0[1-9]|[1-4]\\d|5[0-3])$/u;\nvar MAC48_REGEX = /^(?:[\\da-f]{2}:){5}[\\da-f]{2}$|^(?:[\\da-f]{2}-){5}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){2}[\\da-f]{4}$/iu;\nvar MAC64_REGEX = /^(?:[\\da-f]{2}:){7}[\\da-f]{2}$|^(?:[\\da-f]{2}-){7}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){3}[\\da-f]{4}$|^(?:[\\da-f]{4}:){3}[\\da-f]{4}$/iu;\nvar MAC_REGEX = /^(?:[\\da-f]{2}:){5}[\\da-f]{2}$|^(?:[\\da-f]{2}-){5}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){2}[\\da-f]{4}$|^(?:[\\da-f]{2}:){7}[\\da-f]{2}$|^(?:[\\da-f]{2}-){7}[\\da-f]{2}$|^(?:[\\da-f]{4}\\.){3}[\\da-f]{4}$|^(?:[\\da-f]{4}:){3}[\\da-f]{4}$/iu;\nvar NANO_ID_REGEX = /^[\\w-]+$/u;\nvar OCTAL_REGEX = /^(?:0o)?[0-7]+$/iu;\nvar ULID_REGEX = /^[\\da-hjkmnp-tv-z]{26}$/iu;\nvar UUID_REGEX = /^[\\da-f]{8}(?:-[\\da-f]{4}){3}-[\\da-f]{12}$/iu;\n\n// src/actions/base64/base64.ts\nfunction base64(message) {\n return {\n kind: \"validation\",\n type: \"base64\",\n reference: base64,\n async: false,\n expects: null,\n requirement: BASE64_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"Base64\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/bic/bic.ts\nfunction bic(message) {\n return {\n kind: \"validation\",\n type: \"bic\",\n reference: bic,\n async: false,\n expects: null,\n requirement: BIC_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"BIC\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/brand/brand.ts\nfunction brand(name) {\n return {\n kind: \"transformation\",\n type: \"brand\",\n reference: brand,\n async: false,\n name,\n \"~run\"(dataset) {\n return dataset;\n }\n };\n}\n\n// src/actions/bytes/bytes.ts\nfunction bytes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"bytes\",\n reference: bytes,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const length2 = _getByteCount(dataset.value);\n if (length2 !== this.requirement) {\n _addIssue(this, \"bytes\", dataset, config2, {\n received: `${length2}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/check/check.ts\nfunction check(requirement, message) {\n return {\n kind: \"validation\",\n type: \"check\",\n reference: check,\n async: false,\n expects: null,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"input\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/check/checkAsync.ts\nfunction checkAsync(requirement, message) {\n return {\n kind: \"validation\",\n type: \"check\",\n reference: checkAsync,\n async: true,\n expects: null,\n requirement,\n message,\n async \"~run\"(dataset, config2) {\n if (dataset.typed && !await this.requirement(dataset.value)) {\n _addIssue(this, \"input\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/checkItems/checkItems.ts\nfunction checkItems(requirement, message) {\n return {\n kind: \"validation\",\n type: \"check_items\",\n reference: checkItems,\n async: false,\n expects: null,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n for (let index = 0; index < dataset.value.length; index++) {\n const item = dataset.value[index];\n if (!this.requirement(item, index, dataset.value)) {\n _addIssue(this, \"item\", dataset, config2, {\n input: item,\n path: [\n {\n type: \"array\",\n origin: \"value\",\n input: dataset.value,\n key: index,\n value: item\n }\n ]\n });\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/checkItems/checkItemsAsync.ts\nfunction checkItemsAsync(requirement, message) {\n return {\n kind: \"validation\",\n type: \"check_items\",\n reference: checkItemsAsync,\n async: true,\n expects: null,\n requirement,\n message,\n async \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const requirementResults = await Promise.all(\n dataset.value.map(this.requirement)\n );\n for (let index = 0; index < dataset.value.length; index++) {\n if (!requirementResults[index]) {\n const item = dataset.value[index];\n _addIssue(this, \"item\", dataset, config2, {\n input: item,\n path: [\n {\n type: \"array\",\n origin: \"value\",\n input: dataset.value,\n key: index,\n value: item\n }\n ]\n });\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/creditCard/creditCard.ts\nvar CREDIT_CARD_REGEX = /^(?:\\d{14,19}|\\d{4}(?: \\d{3,6}){2,4}|\\d{4}(?:-\\d{3,6}){2,4})$/u;\nvar SANITIZE_REGEX = /[- ]/gu;\nvar PROVIDER_REGEX_LIST = [\n // American Express\n /^3[47]\\d{13}$/u,\n // Diners Club\n /^3(?:0[0-5]|[68]\\d)\\d{11,13}$/u,\n // Discover\n /^6(?:011|5\\d{2})\\d{12,15}$/u,\n // JCB\n /^(?:2131|1800|35\\d{3})\\d{11}$/u,\n // Mastercard\n /^5[1-5]\\d{2}|(?:222\\d|22[3-9]\\d|2[3-6]\\d{2}|27[01]\\d|2720)\\d{12}$/u,\n // UnionPay\n /^(?:6[27]\\d{14,17}|81\\d{14,17})$/u,\n // Visa\n /^4\\d{12}(?:\\d{3,6})?$/u\n];\nfunction creditCard(message) {\n return {\n kind: \"validation\",\n type: \"credit_card\",\n reference: creditCard,\n async: false,\n expects: null,\n requirement(input) {\n let sanitized;\n return CREDIT_CARD_REGEX.test(input) && // Remove any hyphens and blanks\n (sanitized = input.replace(SANITIZE_REGEX, \"\")) && // Check if it matches a provider\n PROVIDER_REGEX_LIST.some((regex2) => regex2.test(sanitized)) && // Check if passes luhn algorithm\n _isLuhnAlgo(sanitized);\n },\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"credit card\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/cuid2/cuid2.ts\nfunction cuid2(message) {\n return {\n kind: \"validation\",\n type: \"cuid2\",\n reference: cuid2,\n async: false,\n expects: null,\n requirement: CUID2_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"Cuid2\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/decimal/decimal.ts\nfunction decimal(message) {\n return {\n kind: \"validation\",\n type: \"decimal\",\n reference: decimal,\n async: false,\n expects: null,\n requirement: DECIMAL_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"decimal\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/description/description.ts\nfunction description(description_) {\n return {\n kind: \"metadata\",\n type: \"description\",\n reference: description,\n description: description_\n };\n}\n\n// src/actions/digits/digits.ts\nfunction digits(message) {\n return {\n kind: \"validation\",\n type: \"digits\",\n reference: digits,\n async: false,\n expects: null,\n requirement: DIGITS_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"digits\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/email/email.ts\nfunction email(message) {\n return {\n kind: \"validation\",\n type: \"email\",\n reference: email,\n expects: null,\n async: false,\n requirement: EMAIL_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"email\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/emoji/emoji.ts\nfunction emoji(message) {\n return {\n kind: \"validation\",\n type: \"emoji\",\n reference: emoji,\n async: false,\n expects: null,\n requirement: EMOJI_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"emoji\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/empty/empty.ts\nfunction empty(message) {\n return {\n kind: \"validation\",\n type: \"empty\",\n reference: empty,\n async: false,\n expects: \"0\",\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.length > 0) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/endsWith/endsWith.ts\nfunction endsWith(requirement, message) {\n return {\n kind: \"validation\",\n type: \"ends_with\",\n reference: endsWith,\n async: false,\n expects: `\"${requirement}\"`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !dataset.value.endsWith(this.requirement)) {\n _addIssue(this, \"end\", dataset, config2, {\n received: `\"${dataset.value.slice(-this.requirement.length)}\"`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/everyItem/everyItem.ts\nfunction everyItem(requirement, message) {\n return {\n kind: \"validation\",\n type: \"every_item\",\n reference: everyItem,\n async: false,\n expects: null,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !dataset.value.every(this.requirement)) {\n _addIssue(this, \"item\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/excludes/excludes.ts\nfunction excludes(requirement, message) {\n const received = _stringify(requirement);\n return {\n kind: \"validation\",\n type: \"excludes\",\n reference: excludes,\n async: false,\n expects: `!${received}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.includes(this.requirement)) {\n _addIssue(this, \"content\", dataset, config2, { received });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/filterItems/filterItems.ts\nfunction filterItems(operation) {\n return {\n kind: \"transformation\",\n type: \"filter_items\",\n reference: filterItems,\n async: false,\n operation,\n \"~run\"(dataset) {\n dataset.value = dataset.value.filter(this.operation);\n return dataset;\n }\n };\n}\n\n// src/actions/findItem/findItem.ts\nfunction findItem(operation) {\n return {\n kind: \"transformation\",\n type: \"find_item\",\n reference: findItem,\n async: false,\n operation,\n \"~run\"(dataset) {\n dataset.value = dataset.value.find(this.operation);\n return dataset;\n }\n };\n}\n\n// src/actions/finite/finite.ts\nfunction finite(message) {\n return {\n kind: \"validation\",\n type: \"finite\",\n reference: finite,\n async: false,\n expects: null,\n requirement: Number.isFinite,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"finite\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/graphemes/graphemes.ts\nfunction graphemes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"graphemes\",\n reference: graphemes,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getGraphemeCount(dataset.value);\n if (count !== this.requirement) {\n _addIssue(this, \"graphemes\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/hash/hash.ts\nvar HASH_LENGTHS = {\n md4: 32,\n md5: 32,\n sha1: 40,\n sha256: 64,\n sha384: 96,\n sha512: 128,\n ripemd128: 32,\n ripemd160: 40,\n tiger128: 32,\n tiger160: 40,\n tiger192: 48,\n crc32: 8,\n crc32b: 8,\n adler32: 8\n};\nfunction hash(types, message) {\n return {\n kind: \"validation\",\n type: \"hash\",\n reference: hash,\n expects: null,\n async: false,\n requirement: RegExp(\n types.map((type) => `^[a-f0-9]{${HASH_LENGTHS[type]}}$`).join(\"|\"),\n \"iu\"\n ),\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"hash\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/hexadecimal/hexadecimal.ts\nfunction hexadecimal(message) {\n return {\n kind: \"validation\",\n type: \"hexadecimal\",\n reference: hexadecimal,\n async: false,\n expects: null,\n requirement: HEXADECIMAL_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"hexadecimal\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/hexColor/hexColor.ts\nfunction hexColor(message) {\n return {\n kind: \"validation\",\n type: \"hex_color\",\n reference: hexColor,\n async: false,\n expects: null,\n requirement: HEX_COLOR_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"hex color\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/imei/imei.ts\nfunction imei(message) {\n return {\n kind: \"validation\",\n type: \"imei\",\n reference: imei,\n async: false,\n expects: null,\n requirement(input) {\n return IMEI_REGEX.test(input) && _isLuhnAlgo(input);\n },\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"IMEI\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/includes/includes.ts\nfunction includes(requirement, message) {\n const expects = _stringify(requirement);\n return {\n kind: \"validation\",\n type: \"includes\",\n reference: includes,\n async: false,\n expects,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !dataset.value.includes(this.requirement)) {\n _addIssue(this, \"content\", dataset, config2, {\n received: `!${expects}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/integer/integer.ts\nfunction integer(message) {\n return {\n kind: \"validation\",\n type: \"integer\",\n reference: integer,\n async: false,\n expects: null,\n requirement: Number.isInteger,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"integer\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/ip/ip.ts\nfunction ip(message) {\n return {\n kind: \"validation\",\n type: \"ip\",\n reference: ip,\n async: false,\n expects: null,\n requirement: IP_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"IP\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/ipv4/ipv4.ts\nfunction ipv4(message) {\n return {\n kind: \"validation\",\n type: \"ipv4\",\n reference: ipv4,\n async: false,\n expects: null,\n requirement: IPV4_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"IPv4\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/ipv6/ipv6.ts\nfunction ipv6(message) {\n return {\n kind: \"validation\",\n type: \"ipv6\",\n reference: ipv6,\n async: false,\n expects: null,\n requirement: IPV6_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"IPv6\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoDate/isoDate.ts\nfunction isoDate(message) {\n return {\n kind: \"validation\",\n type: \"iso_date\",\n reference: isoDate,\n async: false,\n expects: null,\n requirement: ISO_DATE_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"date\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoDateTime/isoDateTime.ts\nfunction isoDateTime(message) {\n return {\n kind: \"validation\",\n type: \"iso_date_time\",\n reference: isoDateTime,\n async: false,\n expects: null,\n requirement: ISO_DATE_TIME_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"date-time\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoTime/isoTime.ts\nfunction isoTime(message) {\n return {\n kind: \"validation\",\n type: \"iso_time\",\n reference: isoTime,\n async: false,\n expects: null,\n requirement: ISO_TIME_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"time\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoTimeSecond/isoTimeSecond.ts\nfunction isoTimeSecond(message) {\n return {\n kind: \"validation\",\n type: \"iso_time_second\",\n reference: isoTimeSecond,\n async: false,\n expects: null,\n requirement: ISO_TIME_SECOND_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"time-second\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoTimestamp/isoTimestamp.ts\nfunction isoTimestamp(message) {\n return {\n kind: \"validation\",\n type: \"iso_timestamp\",\n reference: isoTimestamp,\n async: false,\n expects: null,\n requirement: ISO_TIMESTAMP_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"timestamp\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/isoWeek/isoWeek.ts\nfunction isoWeek(message) {\n return {\n kind: \"validation\",\n type: \"iso_week\",\n reference: isoWeek,\n async: false,\n expects: null,\n requirement: ISO_WEEK_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"week\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/length/length.ts\nfunction length(requirement, message) {\n return {\n kind: \"validation\",\n type: \"length\",\n reference: length,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.length !== this.requirement) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mac/mac.ts\nfunction mac(message) {\n return {\n kind: \"validation\",\n type: \"mac\",\n reference: mac,\n async: false,\n expects: null,\n requirement: MAC_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"MAC\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mac48/mac48.ts\nfunction mac48(message) {\n return {\n kind: \"validation\",\n type: \"mac48\",\n reference: mac48,\n async: false,\n expects: null,\n requirement: MAC48_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"48-bit MAC\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mac64/mac64.ts\nfunction mac64(message) {\n return {\n kind: \"validation\",\n type: \"mac64\",\n reference: mac64,\n async: false,\n expects: null,\n requirement: MAC64_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"64-bit MAC\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/mapItems/mapItems.ts\nfunction mapItems(operation) {\n return {\n kind: \"transformation\",\n type: \"map_items\",\n reference: mapItems,\n async: false,\n operation,\n \"~run\"(dataset) {\n dataset.value = dataset.value.map(this.operation);\n return dataset;\n }\n };\n}\n\n// src/actions/maxBytes/maxBytes.ts\nfunction maxBytes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_bytes\",\n reference: maxBytes,\n async: false,\n expects: `<=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const length2 = _getByteCount(dataset.value);\n if (length2 > this.requirement) {\n _addIssue(this, \"bytes\", dataset, config2, {\n received: `${length2}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxGraphemes/maxGraphemes.ts\nfunction maxGraphemes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_graphemes\",\n reference: maxGraphemes,\n async: false,\n expects: `<=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getGraphemeCount(dataset.value);\n if (count > this.requirement) {\n _addIssue(this, \"graphemes\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxLength/maxLength.ts\nfunction maxLength(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_length\",\n reference: maxLength,\n async: false,\n expects: `<=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.length > this.requirement) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxSize/maxSize.ts\nfunction maxSize(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_size\",\n reference: maxSize,\n async: false,\n expects: `<=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.size > this.requirement) {\n _addIssue(this, \"size\", dataset, config2, {\n received: `${dataset.value.size}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxValue/maxValue.ts\nfunction maxValue(requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_value\",\n reference: maxValue,\n async: false,\n expects: `<=${requirement instanceof Date ? requirement.toJSON() : _stringify(requirement)}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !(dataset.value <= this.requirement)) {\n _addIssue(this, \"value\", dataset, config2, {\n received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/maxWords/maxWords.ts\nfunction maxWords(locales, requirement, message) {\n return {\n kind: \"validation\",\n type: \"max_words\",\n reference: maxWords,\n async: false,\n expects: `<=${requirement}`,\n locales,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getWordCount(this.locales, dataset.value);\n if (count > this.requirement) {\n _addIssue(this, \"words\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/metadata/metadata.ts\nfunction metadata(metadata_) {\n return {\n kind: \"metadata\",\n type: \"metadata\",\n reference: metadata,\n metadata: metadata_\n };\n}\n\n// src/actions/mimeType/mimeType.ts\nfunction mimeType(requirement, message) {\n return {\n kind: \"validation\",\n type: \"mime_type\",\n reference: mimeType,\n async: false,\n expects: _joinExpects(\n requirement.map((option) => `\"${option}\"`),\n \"|\"\n ),\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.includes(dataset.value.type)) {\n _addIssue(this, \"MIME type\", dataset, config2, {\n received: `\"${dataset.value.type}\"`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minBytes/minBytes.ts\nfunction minBytes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_bytes\",\n reference: minBytes,\n async: false,\n expects: `>=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const length2 = _getByteCount(dataset.value);\n if (length2 < this.requirement) {\n _addIssue(this, \"bytes\", dataset, config2, {\n received: `${length2}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minGraphemes/minGraphemes.ts\nfunction minGraphemes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_graphemes\",\n reference: minGraphemes,\n async: false,\n expects: `>=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getGraphemeCount(dataset.value);\n if (count < this.requirement) {\n _addIssue(this, \"graphemes\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minLength/minLength.ts\nfunction minLength(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_length\",\n reference: minLength,\n async: false,\n expects: `>=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.length < this.requirement) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minSize/minSize.ts\nfunction minSize(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_size\",\n reference: minSize,\n async: false,\n expects: `>=${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.size < this.requirement) {\n _addIssue(this, \"size\", dataset, config2, {\n received: `${dataset.value.size}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minValue/minValue.ts\nfunction minValue(requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_value\",\n reference: minValue,\n async: false,\n expects: `>=${requirement instanceof Date ? requirement.toJSON() : _stringify(requirement)}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !(dataset.value >= this.requirement)) {\n _addIssue(this, \"value\", dataset, config2, {\n received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/minWords/minWords.ts\nfunction minWords(locales, requirement, message) {\n return {\n kind: \"validation\",\n type: \"min_words\",\n reference: minWords,\n async: false,\n expects: `>=${requirement}`,\n locales,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getWordCount(this.locales, dataset.value);\n if (count < this.requirement) {\n _addIssue(this, \"words\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/multipleOf/multipleOf.ts\nfunction multipleOf(requirement, message) {\n return {\n kind: \"validation\",\n type: \"multiple_of\",\n reference: multipleOf,\n async: false,\n expects: `%${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value % this.requirement !== 0) {\n _addIssue(this, \"multiple\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/nanoid/nanoid.ts\nfunction nanoid(message) {\n return {\n kind: \"validation\",\n type: \"nanoid\",\n reference: nanoid,\n async: false,\n expects: null,\n requirement: NANO_ID_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"Nano ID\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/nonEmpty/nonEmpty.ts\nfunction nonEmpty(message) {\n return {\n kind: \"validation\",\n type: \"non_empty\",\n reference: nonEmpty,\n async: false,\n expects: \"!0\",\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.length === 0) {\n _addIssue(this, \"length\", dataset, config2, {\n received: \"0\"\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/normalize/normalize.ts\nfunction normalize(form) {\n return {\n kind: \"transformation\",\n type: \"normalize\",\n reference: normalize,\n async: false,\n form,\n \"~run\"(dataset) {\n dataset.value = dataset.value.normalize(this.form);\n return dataset;\n }\n };\n}\n\n// src/actions/notBytes/notBytes.ts\nfunction notBytes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_bytes\",\n reference: notBytes,\n async: false,\n expects: `!${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const length2 = _getByteCount(dataset.value);\n if (length2 === this.requirement) {\n _addIssue(this, \"bytes\", dataset, config2, {\n received: `${length2}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notGraphemes/notGraphemes.ts\nfunction notGraphemes(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_graphemes\",\n reference: notGraphemes,\n async: false,\n expects: `!${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getGraphemeCount(dataset.value);\n if (count === this.requirement) {\n _addIssue(this, \"graphemes\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notLength/notLength.ts\nfunction notLength(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_length\",\n reference: notLength,\n async: false,\n expects: `!${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.length === this.requirement) {\n _addIssue(this, \"length\", dataset, config2, {\n received: `${dataset.value.length}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notSize/notSize.ts\nfunction notSize(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_size\",\n reference: notSize,\n async: false,\n expects: `!${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.size === this.requirement) {\n _addIssue(this, \"size\", dataset, config2, {\n received: `${dataset.value.size}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notValue/notValue.ts\nfunction notValue(requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_value\",\n reference: notValue,\n async: false,\n expects: requirement instanceof Date ? `!${requirement.toJSON()}` : `!${_stringify(requirement)}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && this.requirement <= dataset.value && this.requirement >= dataset.value) {\n _addIssue(this, \"value\", dataset, config2, {\n received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/notWords/notWords.ts\nfunction notWords(locales, requirement, message) {\n return {\n kind: \"validation\",\n type: \"not_words\",\n reference: notWords,\n async: false,\n expects: `!${requirement}`,\n locales,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getWordCount(this.locales, dataset.value);\n if (count === this.requirement) {\n _addIssue(this, \"words\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/actions/octal/octal.ts\nfunction octal(message) {\n return {\n kind: \"validation\",\n type: \"octal\",\n reference: octal,\n async: false,\n expects: null,\n requirement: OCTAL_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"octal\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/partialCheck/utils/_isPartiallyTyped/_isPartiallyTyped.ts\nfunction _isPartiallyTyped(dataset, pathList) {\n if (dataset.issues) {\n for (const path of pathList) {\n for (const issue of dataset.issues) {\n let typed = false;\n const bound = Math.min(path.length, issue.path?.length ?? 0);\n for (let index = 0; index < bound; index++) {\n if (path[index] !== issue.path[index].key) {\n typed = true;\n break;\n }\n }\n if (!typed) {\n return false;\n }\n }\n }\n }\n return true;\n}\n\n// src/actions/partialCheck/partialCheck.ts\nfunction partialCheck(pathList, requirement, message) {\n return {\n kind: \"validation\",\n type: \"partial_check\",\n reference: partialCheck,\n async: false,\n expects: null,\n pathList,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (_isPartiallyTyped(dataset, pathList) && // @ts-expect-error\n !this.requirement(dataset.value)) {\n _addIssue(this, \"input\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/partialCheck/partialCheckAsync.ts\nfunction partialCheckAsync(pathList, requirement, message) {\n return {\n kind: \"validation\",\n type: \"partial_check\",\n reference: partialCheckAsync,\n async: true,\n expects: null,\n pathList,\n requirement,\n message,\n async \"~run\"(dataset, config2) {\n if (_isPartiallyTyped(dataset, pathList) && // @ts-expect-error\n !await this.requirement(dataset.value)) {\n _addIssue(this, \"input\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/rawCheck/rawCheck.ts\nfunction rawCheck(action) {\n return {\n kind: \"validation\",\n type: \"raw_check\",\n reference: rawCheck,\n async: false,\n expects: null,\n \"~run\"(dataset, config2) {\n action({\n dataset,\n config: config2,\n addIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config2, info)\n });\n return dataset;\n }\n };\n}\n\n// src/actions/rawCheck/rawCheckAsync.ts\nfunction rawCheckAsync(action) {\n return {\n kind: \"validation\",\n type: \"raw_check\",\n reference: rawCheckAsync,\n async: true,\n expects: null,\n async \"~run\"(dataset, config2) {\n await action({\n dataset,\n config: config2,\n addIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config2, info)\n });\n return dataset;\n }\n };\n}\n\n// src/actions/rawTransform/rawTransform.ts\nfunction rawTransform(action) {\n return {\n kind: \"transformation\",\n type: \"raw_transform\",\n reference: rawTransform,\n async: false,\n \"~run\"(dataset, config2) {\n const output = action({\n dataset,\n config: config2,\n addIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config2, info),\n NEVER: null\n });\n if (dataset.issues) {\n dataset.typed = false;\n } else {\n dataset.value = output;\n }\n return dataset;\n }\n };\n}\n\n// src/actions/rawTransform/rawTransformAsync.ts\nfunction rawTransformAsync(action) {\n return {\n kind: \"transformation\",\n type: \"raw_transform\",\n reference: rawTransformAsync,\n async: true,\n async \"~run\"(dataset, config2) {\n const output = await action({\n dataset,\n config: config2,\n addIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config2, info),\n NEVER: null\n });\n if (dataset.issues) {\n dataset.typed = false;\n } else {\n dataset.value = output;\n }\n return dataset;\n }\n };\n}\n\n// src/actions/readonly/readonly.ts\nfunction readonly() {\n return {\n kind: \"transformation\",\n type: \"readonly\",\n reference: readonly,\n async: false,\n \"~run\"(dataset) {\n return dataset;\n }\n };\n}\n\n// src/actions/reduceItems/reduceItems.ts\nfunction reduceItems(operation, initial) {\n return {\n kind: \"transformation\",\n type: \"reduce_items\",\n reference: reduceItems,\n async: false,\n operation,\n initial,\n \"~run\"(dataset) {\n dataset.value = dataset.value.reduce(this.operation, this.initial);\n return dataset;\n }\n };\n}\n\n// src/actions/regex/regex.ts\nfunction regex(requirement, message) {\n return {\n kind: \"validation\",\n type: \"regex\",\n reference: regex,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"format\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/returns/returns.ts\nfunction returns(schema) {\n return {\n kind: \"transformation\",\n type: \"returns\",\n reference: returns,\n async: false,\n schema,\n \"~run\"(dataset, config2) {\n const func = dataset.value;\n dataset.value = (...args_) => {\n const returnsDataset = this.schema[\"~run\"](\n { value: func(...args_) },\n config2\n );\n if (returnsDataset.issues) {\n throw new ValiError(returnsDataset.issues);\n }\n return returnsDataset.value;\n };\n return dataset;\n }\n };\n}\n\n// src/actions/returns/returnsAsync.ts\nfunction returnsAsync(schema) {\n return {\n kind: \"transformation\",\n type: \"returns\",\n reference: returnsAsync,\n async: false,\n schema,\n \"~run\"(dataset, config2) {\n const func = dataset.value;\n dataset.value = async (...args_) => {\n const returnsDataset = await this.schema[\"~run\"](\n { value: await func(...args_) },\n config2\n );\n if (returnsDataset.issues) {\n throw new ValiError(returnsDataset.issues);\n }\n return returnsDataset.value;\n };\n return dataset;\n }\n };\n}\n\n// src/actions/safeInteger/safeInteger.ts\nfunction safeInteger(message) {\n return {\n kind: \"validation\",\n type: \"safe_integer\",\n reference: safeInteger,\n async: false,\n expects: null,\n requirement: Number.isSafeInteger,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"safe integer\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/size/size.ts\nfunction size(requirement, message) {\n return {\n kind: \"validation\",\n type: \"size\",\n reference: size,\n async: false,\n expects: `${requirement}`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && dataset.value.size !== this.requirement) {\n _addIssue(this, \"size\", dataset, config2, {\n received: `${dataset.value.size}`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/someItem/someItem.ts\nfunction someItem(requirement, message) {\n return {\n kind: \"validation\",\n type: \"some_item\",\n reference: someItem,\n async: false,\n expects: null,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !dataset.value.some(this.requirement)) {\n _addIssue(this, \"item\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/sortItems/sortItems.ts\nfunction sortItems(operation) {\n return {\n kind: \"transformation\",\n type: \"sort_items\",\n reference: sortItems,\n async: false,\n operation,\n \"~run\"(dataset) {\n dataset.value = dataset.value.sort(this.operation);\n return dataset;\n }\n };\n}\n\n// src/actions/startsWith/startsWith.ts\nfunction startsWith(requirement, message) {\n return {\n kind: \"validation\",\n type: \"starts_with\",\n reference: startsWith,\n async: false,\n expects: `\"${requirement}\"`,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !dataset.value.startsWith(this.requirement)) {\n _addIssue(this, \"start\", dataset, config2, {\n received: `\"${dataset.value.slice(0, this.requirement.length)}\"`\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/title/title.ts\nfunction title(title_) {\n return {\n kind: \"metadata\",\n type: \"title\",\n reference: title,\n title: title_\n };\n}\n\n// src/actions/toLowerCase/toLowerCase.ts\nfunction toLowerCase() {\n return {\n kind: \"transformation\",\n type: \"to_lower_case\",\n reference: toLowerCase,\n async: false,\n \"~run\"(dataset) {\n dataset.value = dataset.value.toLowerCase();\n return dataset;\n }\n };\n}\n\n// src/actions/toMaxValue/toMaxValue.ts\nfunction toMaxValue(requirement) {\n return {\n kind: \"transformation\",\n type: \"to_max_value\",\n reference: toMaxValue,\n async: false,\n requirement,\n \"~run\"(dataset) {\n dataset.value = dataset.value > this.requirement ? this.requirement : dataset.value;\n return dataset;\n }\n };\n}\n\n// src/actions/toMinValue/toMinValue.ts\nfunction toMinValue(requirement) {\n return {\n kind: \"transformation\",\n type: \"to_min_value\",\n reference: toMinValue,\n async: false,\n requirement,\n \"~run\"(dataset) {\n dataset.value = dataset.value < this.requirement ? this.requirement : dataset.value;\n return dataset;\n }\n };\n}\n\n// src/actions/toUpperCase/toUpperCase.ts\nfunction toUpperCase() {\n return {\n kind: \"transformation\",\n type: \"to_upper_case\",\n reference: toUpperCase,\n async: false,\n \"~run\"(dataset) {\n dataset.value = dataset.value.toUpperCase();\n return dataset;\n }\n };\n}\n\n// src/actions/transform/transform.ts\nfunction transform(operation) {\n return {\n kind: \"transformation\",\n type: \"transform\",\n reference: transform,\n async: false,\n operation,\n \"~run\"(dataset) {\n dataset.value = this.operation(dataset.value);\n return dataset;\n }\n };\n}\n\n// src/actions/transform/transformAsync.ts\nfunction transformAsync(operation) {\n return {\n kind: \"transformation\",\n type: \"transform\",\n reference: transformAsync,\n async: true,\n operation,\n async \"~run\"(dataset) {\n dataset.value = await this.operation(dataset.value);\n return dataset;\n }\n };\n}\n\n// src/actions/trim/trim.ts\nfunction trim() {\n return {\n kind: \"transformation\",\n type: \"trim\",\n reference: trim,\n async: false,\n \"~run\"(dataset) {\n dataset.value = dataset.value.trim();\n return dataset;\n }\n };\n}\n\n// src/actions/trimEnd/trimEnd.ts\nfunction trimEnd() {\n return {\n kind: \"transformation\",\n type: \"trim_end\",\n reference: trimEnd,\n async: false,\n \"~run\"(dataset) {\n dataset.value = dataset.value.trimEnd();\n return dataset;\n }\n };\n}\n\n// src/actions/trimStart/trimStart.ts\nfunction trimStart() {\n return {\n kind: \"transformation\",\n type: \"trim_start\",\n reference: trimStart,\n async: false,\n \"~run\"(dataset) {\n dataset.value = dataset.value.trimStart();\n return dataset;\n }\n };\n}\n\n// src/actions/ulid/ulid.ts\nfunction ulid(message) {\n return {\n kind: \"validation\",\n type: \"ulid\",\n reference: ulid,\n async: false,\n expects: null,\n requirement: ULID_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"ULID\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/url/url.ts\nfunction url(message) {\n return {\n kind: \"validation\",\n type: \"url\",\n reference: url,\n async: false,\n expects: null,\n requirement(input) {\n try {\n new URL(input);\n return true;\n } catch {\n return false;\n }\n },\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement(dataset.value)) {\n _addIssue(this, \"URL\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/uuid/uuid.ts\nfunction uuid(message) {\n return {\n kind: \"validation\",\n type: \"uuid\",\n reference: uuid,\n async: false,\n expects: null,\n requirement: UUID_REGEX,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !this.requirement.test(dataset.value)) {\n _addIssue(this, \"UUID\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/actions/value/value.ts\nfunction value(requirement, message) {\n return {\n kind: \"validation\",\n type: \"value\",\n reference: value,\n async: false,\n expects: requirement instanceof Date ? requirement.toJSON() : _stringify(requirement),\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed && !(this.requirement <= dataset.value && this.requirement >= dataset.value)) {\n _addIssue(this, \"value\", dataset, config2, {\n received: dataset.value instanceof Date ? dataset.value.toJSON() : _stringify(dataset.value)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/actions/words/words.ts\nfunction words(locales, requirement, message) {\n return {\n kind: \"validation\",\n type: \"words\",\n reference: words,\n async: false,\n expects: `${requirement}`,\n locales,\n requirement,\n message,\n \"~run\"(dataset, config2) {\n if (dataset.typed) {\n const count = _getWordCount(this.locales, dataset.value);\n if (count !== this.requirement) {\n _addIssue(this, \"words\", dataset, config2, {\n received: `${count}`\n });\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/assert/assert.ts\nfunction assert(schema, input) {\n const issues = schema[\"~run\"]({ value: input }, { abortEarly: true }).issues;\n if (issues) {\n throw new ValiError(issues);\n }\n}\n\n// src/methods/config/config.ts\nfunction config(schema, config2) {\n return {\n ...schema,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config_) {\n return schema[\"~run\"](dataset, { ...config_, ...config2 });\n }\n };\n}\n\n// src/methods/getFallback/getFallback.ts\nfunction getFallback(schema, dataset, config2) {\n return typeof schema.fallback === \"function\" ? (\n // @ts-expect-error\n schema.fallback(dataset, config2)\n ) : (\n // @ts-expect-error\n schema.fallback\n );\n}\n\n// src/methods/fallback/fallback.ts\nfunction fallback(schema, fallback2) {\n return {\n ...schema,\n fallback: fallback2,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const outputDataset = schema[\"~run\"](dataset, config2);\n return outputDataset.issues ? { typed: true, value: getFallback(this, outputDataset, config2) } : outputDataset;\n }\n };\n}\n\n// src/methods/fallback/fallbackAsync.ts\nfunction fallbackAsync(schema, fallback2) {\n return {\n ...schema,\n fallback: fallback2,\n async: true,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const outputDataset = await schema[\"~run\"](dataset, config2);\n return outputDataset.issues ? {\n typed: true,\n value: await getFallback(this, outputDataset, config2)\n } : outputDataset;\n }\n };\n}\n\n// src/methods/flatten/flatten.ts\nfunction flatten(issues) {\n const flatErrors = {};\n for (const issue of issues) {\n if (issue.path) {\n const dotPath = getDotPath(issue);\n if (dotPath) {\n if (!flatErrors.nested) {\n flatErrors.nested = {};\n }\n if (flatErrors.nested[dotPath]) {\n flatErrors.nested[dotPath].push(issue.message);\n } else {\n flatErrors.nested[dotPath] = [issue.message];\n }\n } else {\n if (flatErrors.other) {\n flatErrors.other.push(issue.message);\n } else {\n flatErrors.other = [issue.message];\n }\n }\n } else {\n if (flatErrors.root) {\n flatErrors.root.push(issue.message);\n } else {\n flatErrors.root = [issue.message];\n }\n }\n }\n return flatErrors;\n}\n\n// src/methods/forward/forward.ts\nfunction forward(action, pathKeys) {\n return {\n ...action,\n \"~run\"(dataset, config2) {\n const prevIssues = dataset.issues && [...dataset.issues];\n dataset = action[\"~run\"](dataset, config2);\n if (dataset.issues) {\n for (const issue of dataset.issues) {\n if (!prevIssues?.includes(issue)) {\n let pathInput = dataset.value;\n for (const key of pathKeys) {\n const pathValue = pathInput[key];\n const pathItem = {\n type: \"unknown\",\n origin: \"value\",\n input: pathInput,\n key,\n value: pathValue\n };\n if (issue.path) {\n issue.path.push(pathItem);\n } else {\n issue.path = [pathItem];\n }\n if (!pathValue) {\n break;\n }\n pathInput = pathValue;\n }\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/forward/forwardAsync.ts\nfunction forwardAsync(action, pathKeys) {\n return {\n ...action,\n async: true,\n async \"~run\"(dataset, config2) {\n const prevIssues = dataset.issues && [...dataset.issues];\n dataset = await action[\"~run\"](dataset, config2);\n if (dataset.issues) {\n for (const issue of dataset.issues) {\n if (!prevIssues?.includes(issue)) {\n let pathInput = dataset.value;\n for (const key of pathKeys) {\n const pathValue = pathInput[key];\n const pathItem = {\n type: \"unknown\",\n origin: \"value\",\n input: pathInput,\n key,\n value: pathValue\n };\n if (issue.path) {\n issue.path.push(pathItem);\n } else {\n issue.path = [pathItem];\n }\n if (!pathValue) {\n break;\n }\n pathInput = pathValue;\n }\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/getDefault/getDefault.ts\nfunction getDefault(schema, dataset, config2) {\n return typeof schema.default === \"function\" ? (\n // @ts-expect-error\n schema.default(dataset, config2)\n ) : (\n // @ts-expect-error\n schema.default\n );\n}\n\n// src/methods/getDefaults/getDefaults.ts\nfunction getDefaults(schema) {\n if (\"entries\" in schema) {\n const object2 = {};\n for (const key in schema.entries) {\n object2[key] = getDefaults(schema.entries[key]);\n }\n return object2;\n }\n if (\"items\" in schema) {\n return schema.items.map(getDefaults);\n }\n return getDefault(schema);\n}\n\n// src/methods/getDefaults/getDefaultsAsync.ts\nasync function getDefaultsAsync(schema) {\n if (\"entries\" in schema) {\n return Object.fromEntries(\n await Promise.all(\n Object.entries(schema.entries).map(async ([key, value2]) => [\n key,\n await getDefaultsAsync(value2)\n ])\n )\n );\n }\n if (\"items\" in schema) {\n return Promise.all(schema.items.map(getDefaultsAsync));\n }\n return getDefault(schema);\n}\n\n// src/methods/getFallbacks/getFallbacks.ts\nfunction getFallbacks(schema) {\n if (\"entries\" in schema) {\n const object2 = {};\n for (const key in schema.entries) {\n object2[key] = getFallbacks(schema.entries[key]);\n }\n return object2;\n }\n if (\"items\" in schema) {\n return schema.items.map(getFallbacks);\n }\n return getFallback(schema);\n}\n\n// src/methods/getFallbacks/getFallbacksAsync.ts\nasync function getFallbacksAsync(schema) {\n if (\"entries\" in schema) {\n return Object.fromEntries(\n await Promise.all(\n Object.entries(schema.entries).map(async ([key, value2]) => [\n key,\n await getFallbacksAsync(value2)\n ])\n )\n );\n }\n if (\"items\" in schema) {\n return Promise.all(schema.items.map(getFallbacksAsync));\n }\n return getFallback(schema);\n}\n\n// src/methods/is/is.ts\nfunction is(schema, input) {\n return !schema[\"~run\"]({ value: input }, { abortEarly: true }).issues;\n}\n\n// src/schemas/any/any.ts\nfunction any() {\n return {\n kind: \"schema\",\n type: \"any\",\n reference: any,\n expects: \"any\",\n async: false,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset) {\n dataset.typed = true;\n return dataset;\n }\n };\n}\n\n// src/schemas/array/array.ts\nfunction array(item, message) {\n return {\n kind: \"schema\",\n type: \"array\",\n reference: array,\n expects: \"Array\",\n async: false,\n item,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < input.length; key++) {\n const value2 = input[key];\n const itemDataset = this.item[\"~run\"]({ value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/array/arrayAsync.ts\nfunction arrayAsync(item, message) {\n return {\n kind: \"schema\",\n type: \"array\",\n reference: arrayAsync,\n expects: \"Array\",\n async: true,\n item,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const itemDatasets = await Promise.all(\n input.map((value2) => this.item[\"~run\"]({ value: value2 }, config2))\n );\n for (let key = 0; key < itemDatasets.length; key++) {\n const itemDataset = itemDatasets[key];\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: input[key]\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/bigint/bigint.ts\nfunction bigint(message) {\n return {\n kind: \"schema\",\n type: \"bigint\",\n reference: bigint,\n expects: \"bigint\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (typeof dataset.value === \"bigint\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/blob/blob.ts\nfunction blob(message) {\n return {\n kind: \"schema\",\n type: \"blob\",\n reference: blob,\n expects: \"Blob\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value instanceof Blob) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/boolean/boolean.ts\nfunction boolean(message) {\n return {\n kind: \"schema\",\n type: \"boolean\",\n reference: boolean,\n expects: \"boolean\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (typeof dataset.value === \"boolean\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/custom/custom.ts\nfunction custom(check2, message) {\n return {\n kind: \"schema\",\n type: \"custom\",\n reference: custom,\n expects: \"unknown\",\n async: false,\n check: check2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (this.check(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/custom/customAsync.ts\nfunction customAsync(check2, message) {\n return {\n kind: \"schema\",\n type: \"custom\",\n reference: customAsync,\n expects: \"unknown\",\n async: true,\n check: check2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (await this.check(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/date/date.ts\nfunction date(message) {\n return {\n kind: \"schema\",\n type: \"date\",\n reference: date,\n expects: \"Date\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value instanceof Date) {\n if (!isNaN(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2, {\n received: '\"Invalid Date\"'\n });\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/enum/enum.ts\nfunction enum_(enum__, message) {\n const options = Object.entries(enum__).filter(([key]) => isNaN(+key)).map(([, value2]) => value2);\n return {\n kind: \"schema\",\n type: \"enum\",\n reference: enum_,\n expects: _joinExpects(options.map(_stringify), \"|\"),\n async: false,\n enum: enum__,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (this.options.includes(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/file/file.ts\nfunction file(message) {\n return {\n kind: \"schema\",\n type: \"file\",\n reference: file,\n expects: \"File\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value instanceof File) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/function/function.ts\nfunction function_(message) {\n return {\n kind: \"schema\",\n type: \"function\",\n reference: function_,\n expects: \"Function\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (typeof dataset.value === \"function\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/instance/instance.ts\nfunction instance(class_, message) {\n return {\n kind: \"schema\",\n type: \"instance\",\n reference: instance,\n expects: class_.name,\n async: false,\n class: class_,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value instanceof this.class) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/intersect/utils/_merge/_merge.ts\nfunction _merge(value1, value2) {\n if (typeof value1 === typeof value2) {\n if (value1 === value2 || value1 instanceof Date && value2 instanceof Date && +value1 === +value2) {\n return { value: value1 };\n }\n if (value1 && value2 && value1.constructor === Object && value2.constructor === Object) {\n for (const key in value2) {\n if (key in value1) {\n const dataset = _merge(value1[key], value2[key]);\n if (dataset.issue) {\n return dataset;\n }\n value1[key] = dataset.value;\n } else {\n value1[key] = value2[key];\n }\n }\n return { value: value1 };\n }\n if (Array.isArray(value1) && Array.isArray(value2)) {\n if (value1.length === value2.length) {\n for (let index = 0; index < value1.length; index++) {\n const dataset = _merge(value1[index], value2[index]);\n if (dataset.issue) {\n return dataset;\n }\n value1[index] = dataset.value;\n }\n return { value: value1 };\n }\n }\n }\n return { issue: true };\n}\n\n// src/schemas/intersect/intersect.ts\nfunction intersect(options, message) {\n return {\n kind: \"schema\",\n type: \"intersect\",\n reference: intersect,\n expects: _joinExpects(\n options.map((option) => option.expects),\n \"&\"\n ),\n async: false,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (this.options.length) {\n const input = dataset.value;\n let outputs;\n dataset.typed = true;\n for (const schema of this.options) {\n const optionDataset = schema[\"~run\"]({ value: input }, config2);\n if (optionDataset.issues) {\n if (dataset.issues) {\n dataset.issues.push(...optionDataset.issues);\n } else {\n dataset.issues = optionDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!optionDataset.typed) {\n dataset.typed = false;\n }\n if (dataset.typed) {\n if (outputs) {\n outputs.push(optionDataset.value);\n } else {\n outputs = [optionDataset.value];\n }\n }\n }\n if (dataset.typed) {\n dataset.value = outputs[0];\n for (let index = 1; index < outputs.length; index++) {\n const mergeDataset = _merge(dataset.value, outputs[index]);\n if (mergeDataset.issue) {\n _addIssue(this, \"type\", dataset, config2, {\n received: \"unknown\"\n });\n break;\n }\n dataset.value = mergeDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/intersect/intersectAsync.ts\nfunction intersectAsync(options, message) {\n return {\n kind: \"schema\",\n type: \"intersect\",\n reference: intersectAsync,\n expects: _joinExpects(\n options.map((option) => option.expects),\n \"&\"\n ),\n async: true,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (this.options.length) {\n const input = dataset.value;\n let outputs;\n dataset.typed = true;\n const optionDatasets = await Promise.all(\n this.options.map((schema) => schema[\"~run\"]({ value: input }, config2))\n );\n for (const optionDataset of optionDatasets) {\n if (optionDataset.issues) {\n if (dataset.issues) {\n dataset.issues.push(...optionDataset.issues);\n } else {\n dataset.issues = optionDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!optionDataset.typed) {\n dataset.typed = false;\n }\n if (dataset.typed) {\n if (outputs) {\n outputs.push(optionDataset.value);\n } else {\n outputs = [optionDataset.value];\n }\n }\n }\n if (dataset.typed) {\n dataset.value = outputs[0];\n for (let index = 1; index < outputs.length; index++) {\n const mergeDataset = _merge(dataset.value, outputs[index]);\n if (mergeDataset.issue) {\n _addIssue(this, \"type\", dataset, config2, {\n received: \"unknown\"\n });\n break;\n }\n dataset.value = mergeDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/lazy/lazy.ts\nfunction lazy(getter) {\n return {\n kind: \"schema\",\n type: \"lazy\",\n reference: lazy,\n expects: \"unknown\",\n async: false,\n getter,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n return this.getter(dataset.value)[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/lazy/lazyAsync.ts\nfunction lazyAsync(getter) {\n return {\n kind: \"schema\",\n type: \"lazy\",\n reference: lazyAsync,\n expects: \"unknown\",\n async: true,\n getter,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n return (await this.getter(dataset.value))[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/literal/literal.ts\nfunction literal(literal_, message) {\n return {\n kind: \"schema\",\n type: \"literal\",\n reference: literal,\n expects: _stringify(literal_),\n async: false,\n literal: literal_,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === this.literal) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/looseObject/looseObject.ts\nfunction looseObject(entries, message) {\n return {\n kind: \"schema\",\n type: \"loose_object\",\n reference: looseObject,\n expects: \"Object\",\n async: false,\n entries,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const key in this.entries) {\n const value2 = input[key];\n const valueDataset = this.entries[key][\"~run\"]({ value: value2 }, config2);\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (_isValidObjectKey(input, key) && !(key in this.entries)) {\n dataset.value[key] = input[key];\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/looseObject/looseObjectAsync.ts\nfunction looseObjectAsync(entries, message) {\n return {\n kind: \"schema\",\n type: \"loose_object\",\n reference: looseObjectAsync,\n expects: \"Object\",\n async: true,\n entries,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const valueDatasets = await Promise.all(\n Object.entries(this.entries).map(async ([key, schema]) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await schema[\"~run\"]({ value: value2 }, config2)\n ];\n })\n );\n for (const [key, value2, valueDataset] of valueDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (_isValidObjectKey(input, key) && !(key in this.entries)) {\n dataset.value[key] = input[key];\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/looseTuple/looseTuple.ts\nfunction looseTuple(items, message) {\n return {\n kind: \"schema\",\n type: \"loose_tuple\",\n reference: looseTuple,\n expects: \"Array\",\n async: false,\n items,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < this.items.length; key++) {\n const value2 = input[key];\n const itemDataset = this.items[key][\"~run\"]({ value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (let key = this.items.length; key < input.length; key++) {\n dataset.value.push(input[key]);\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/looseTuple/looseTupleAsync.ts\nfunction looseTupleAsync(items, message) {\n return {\n kind: \"schema\",\n type: \"loose_tuple\",\n reference: looseTupleAsync,\n expects: \"Array\",\n async: true,\n items,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const itemDatasets = await Promise.all(\n this.items.map(async (item, key) => {\n const value2 = input[key];\n return [key, value2, await item[\"~run\"]({ value: value2 }, config2)];\n })\n );\n for (const [key, value2, itemDataset] of itemDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (let key = this.items.length; key < input.length; key++) {\n dataset.value.push(input[key]);\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/map/map.ts\nfunction map(key, value2, message) {\n return {\n kind: \"schema\",\n type: \"map\",\n reference: map,\n expects: \"Map\",\n async: false,\n key,\n value: value2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input instanceof Map) {\n dataset.typed = true;\n dataset.value = /* @__PURE__ */ new Map();\n for (const [inputKey, inputValue] of input) {\n const keyDataset = this.key[\"~run\"]({ value: inputKey }, config2);\n if (keyDataset.issues) {\n const pathItem = {\n type: \"map\",\n origin: \"key\",\n input,\n key: inputKey,\n value: inputValue\n };\n for (const issue of keyDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = keyDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n const valueDataset = this.value[\"~run\"](\n { value: inputValue },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"map\",\n origin: \"value\",\n input,\n key: inputKey,\n value: inputValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!keyDataset.typed || !valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.set(keyDataset.value, valueDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/map/mapAsync.ts\nfunction mapAsync(key, value2, message) {\n return {\n kind: \"schema\",\n type: \"map\",\n reference: mapAsync,\n expects: \"Map\",\n async: true,\n key,\n value: value2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input instanceof Map) {\n dataset.typed = true;\n dataset.value = /* @__PURE__ */ new Map();\n const datasets = await Promise.all(\n [...input].map(\n ([inputKey, inputValue]) => Promise.all([\n inputKey,\n inputValue,\n this.key[\"~run\"]({ value: inputKey }, config2),\n this.value[\"~run\"]({ value: inputValue }, config2)\n ])\n )\n );\n for (const [\n inputKey,\n inputValue,\n keyDataset,\n valueDataset\n ] of datasets) {\n if (keyDataset.issues) {\n const pathItem = {\n type: \"map\",\n origin: \"key\",\n input,\n key: inputKey,\n value: inputValue\n };\n for (const issue of keyDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = keyDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (valueDataset.issues) {\n const pathItem = {\n type: \"map\",\n origin: \"value\",\n input,\n key: inputKey,\n value: inputValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!keyDataset.typed || !valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.set(keyDataset.value, valueDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nan/nan.ts\nfunction nan(message) {\n return {\n kind: \"schema\",\n type: \"nan\",\n reference: nan,\n expects: \"NaN\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (Number.isNaN(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/never/never.ts\nfunction never(message) {\n return {\n kind: \"schema\",\n type: \"never\",\n reference: never,\n expects: \"never\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n _addIssue(this, \"type\", dataset, config2);\n return dataset;\n }\n };\n}\n\n// src/schemas/nonNullable/nonNullable.ts\nfunction nonNullable(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_nullable\",\n reference: nonNullable,\n expects: \"!null\",\n async: false,\n wrapped,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value !== null) {\n dataset = this.wrapped[\"~run\"](dataset, config2);\n }\n if (dataset.value === null) {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nonNullable/nonNullableAsync.ts\nfunction nonNullableAsync(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_nullable\",\n reference: nonNullableAsync,\n expects: \"!null\",\n async: true,\n wrapped,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (dataset.value !== null) {\n dataset = await this.wrapped[\"~run\"](dataset, config2);\n }\n if (dataset.value === null) {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nonNullish/nonNullish.ts\nfunction nonNullish(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_nullish\",\n reference: nonNullish,\n expects: \"(!null & !undefined)\",\n async: false,\n wrapped,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (!(dataset.value === null || dataset.value === void 0)) {\n dataset = this.wrapped[\"~run\"](dataset, config2);\n }\n if (dataset.value === null || dataset.value === void 0) {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nonNullish/nonNullishAsync.ts\nfunction nonNullishAsync(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_nullish\",\n reference: nonNullishAsync,\n expects: \"(!null & !undefined)\",\n async: true,\n wrapped,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (!(dataset.value === null || dataset.value === void 0)) {\n dataset = await this.wrapped[\"~run\"](dataset, config2);\n }\n if (dataset.value === null || dataset.value === void 0) {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nonOptional/nonOptional.ts\nfunction nonOptional(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_optional\",\n reference: nonOptional,\n expects: \"!undefined\",\n async: false,\n wrapped,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value !== void 0) {\n dataset = this.wrapped[\"~run\"](dataset, config2);\n }\n if (dataset.value === void 0) {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nonOptional/nonOptionalAsync.ts\nfunction nonOptionalAsync(wrapped, message) {\n return {\n kind: \"schema\",\n type: \"non_optional\",\n reference: nonOptionalAsync,\n expects: \"!undefined\",\n async: true,\n wrapped,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (dataset.value !== void 0) {\n dataset = await this.wrapped[\"~run\"](dataset, config2);\n }\n if (dataset.value === void 0) {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/null/null.ts\nfunction null_(message) {\n return {\n kind: \"schema\",\n type: \"null\",\n reference: null_,\n expects: \"null\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === null) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/nullable/nullable.ts\nfunction nullable(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"nullable\",\n reference: nullable,\n expects: `(${wrapped.expects} | null)`,\n async: false,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === null) {\n if (this.default !== void 0) {\n dataset.value = getDefault(this, dataset, config2);\n }\n if (dataset.value === null) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/nullable/nullableAsync.ts\nfunction nullableAsync(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"nullable\",\n reference: nullableAsync,\n expects: `(${wrapped.expects} | null)`,\n async: true,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (dataset.value === null) {\n if (this.default !== void 0) {\n dataset.value = await getDefault(this, dataset, config2);\n }\n if (dataset.value === null) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/nullish/nullish.ts\nfunction nullish(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"nullish\",\n reference: nullish,\n expects: `(${wrapped.expects} | null | undefined)`,\n async: false,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === null || dataset.value === void 0) {\n if (this.default !== void 0) {\n dataset.value = getDefault(this, dataset, config2);\n }\n if (dataset.value === null || dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/nullish/nullishAsync.ts\nfunction nullishAsync(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"nullish\",\n reference: nullishAsync,\n expects: `(${wrapped.expects} | null | undefined)`,\n async: true,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (dataset.value === null || dataset.value === void 0) {\n if (this.default !== void 0) {\n dataset.value = await getDefault(this, dataset, config2);\n }\n if (dataset.value === null || dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/number/number.ts\nfunction number(message) {\n return {\n kind: \"schema\",\n type: \"number\",\n reference: number,\n expects: \"number\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (typeof dataset.value === \"number\" && !isNaN(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/object/object.ts\nfunction object(entries, message) {\n return {\n kind: \"schema\",\n type: \"object\",\n reference: object,\n expects: \"Object\",\n async: false,\n entries,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const key in this.entries) {\n const value2 = input[key];\n const valueDataset = this.entries[key][\"~run\"]({ value: value2 }, config2);\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/object/objectAsync.ts\nfunction objectAsync(entries, message) {\n return {\n kind: \"schema\",\n type: \"object\",\n reference: objectAsync,\n expects: \"Object\",\n async: true,\n entries,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const valueDatasets = await Promise.all(\n Object.entries(this.entries).map(async ([key, schema]) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await schema[\"~run\"]({ value: value2 }, config2)\n ];\n })\n );\n for (const [key, value2, valueDataset] of valueDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/objectWithRest/objectWithRest.ts\nfunction objectWithRest(entries, rest, message) {\n return {\n kind: \"schema\",\n type: \"object_with_rest\",\n reference: objectWithRest,\n expects: \"Object\",\n async: false,\n entries,\n rest,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const key in this.entries) {\n const value2 = input[key];\n const valueDataset = this.entries[key][\"~run\"]({ value: value2 }, config2);\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (_isValidObjectKey(input, key) && !(key in this.entries)) {\n const value2 = input[key];\n const valueDataset = this.rest[\"~run\"]({ value: value2 }, config2);\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value[key] = valueDataset.value;\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/objectWithRest/objectWithRestAsync.ts\nfunction objectWithRestAsync(entries, rest, message) {\n return {\n kind: \"schema\",\n type: \"object_with_rest\",\n reference: objectWithRestAsync,\n expects: \"Object\",\n async: true,\n entries,\n rest,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const [normalDatasets, restDatasets] = await Promise.all([\n // Parse schema of each normal entry\n // Hint: We do not distinguish between missing and `undefined` entries.\n // The reason for this decision is that it reduces the bundle size, and\n // we also expect that most users will expect this behavior.\n Promise.all(\n Object.entries(this.entries).map(async ([key, schema]) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await schema[\"~run\"]({ value: value2 }, config2)\n ];\n })\n ),\n // Parse other entries with rest schema\n // Hint: We exclude specific keys for security reasons\n Promise.all(\n Object.entries(input).filter(\n ([key]) => _isValidObjectKey(input, key) && !(key in this.entries)\n ).map(\n async ([key, value2]) => [\n key,\n value2,\n await this.rest[\"~run\"]({ value: value2 }, config2)\n ]\n )\n )\n ]);\n for (const [key, value2, valueDataset] of normalDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const [key, value2, valueDataset] of restDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value[key] = valueDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/optional/optional.ts\nfunction optional(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"optional\",\n reference: optional,\n expects: `(${wrapped.expects} | undefined)`,\n async: false,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === void 0) {\n if (this.default !== void 0) {\n dataset.value = getDefault(this, dataset, config2);\n }\n if (dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/optional/optionalAsync.ts\nfunction optionalAsync(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"optional\",\n reference: optionalAsync,\n expects: `(${wrapped.expects} | undefined)`,\n async: true,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (dataset.value === void 0) {\n if (this.default !== void 0) {\n dataset.value = await getDefault(this, dataset, config2);\n }\n if (dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/picklist/picklist.ts\nfunction picklist(options, message) {\n return {\n kind: \"schema\",\n type: \"picklist\",\n reference: picklist,\n expects: _joinExpects(options.map(_stringify), \"|\"),\n async: false,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (this.options.includes(dataset.value)) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/promise/promise.ts\nfunction promise(message) {\n return {\n kind: \"schema\",\n type: \"promise\",\n reference: promise,\n expects: \"Promise\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value instanceof Promise) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/record/record.ts\nfunction record(key, value2, message) {\n return {\n kind: \"schema\",\n type: \"record\",\n reference: record,\n expects: \"Object\",\n async: false,\n key,\n value: value2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const entryKey in input) {\n if (_isValidObjectKey(input, entryKey)) {\n const entryValue = input[entryKey];\n const keyDataset = this.key[\"~run\"]({ value: entryKey }, config2);\n if (keyDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"key\",\n input,\n key: entryKey,\n value: entryValue\n };\n for (const issue of keyDataset.issues) {\n issue.path = [pathItem];\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = keyDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n const valueDataset = this.value[\"~run\"](\n { value: entryValue },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key: entryKey,\n value: entryValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!keyDataset.typed || !valueDataset.typed) {\n dataset.typed = false;\n }\n if (keyDataset.typed) {\n dataset.value[keyDataset.value] = valueDataset.value;\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/record/recordAsync.ts\nfunction recordAsync(key, value2, message) {\n return {\n kind: \"schema\",\n type: \"record\",\n reference: recordAsync,\n expects: \"Object\",\n async: true,\n key,\n value: value2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const datasets = await Promise.all(\n Object.entries(input).filter(([key2]) => _isValidObjectKey(input, key2)).map(\n ([entryKey, entryValue]) => Promise.all([\n entryKey,\n entryValue,\n this.key[\"~run\"]({ value: entryKey }, config2),\n this.value[\"~run\"]({ value: entryValue }, config2)\n ])\n )\n );\n for (const [\n entryKey,\n entryValue,\n keyDataset,\n valueDataset\n ] of datasets) {\n if (keyDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"key\",\n input,\n key: entryKey,\n value: entryValue\n };\n for (const issue of keyDataset.issues) {\n issue.path = [pathItem];\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = keyDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key: entryKey,\n value: entryValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!keyDataset.typed || !valueDataset.typed) {\n dataset.typed = false;\n }\n if (keyDataset.typed) {\n dataset.value[keyDataset.value] = valueDataset.value;\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/set/set.ts\nfunction set(value2, message) {\n return {\n kind: \"schema\",\n type: \"set\",\n reference: set,\n expects: \"Set\",\n async: false,\n value: value2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input instanceof Set) {\n dataset.typed = true;\n dataset.value = /* @__PURE__ */ new Set();\n for (const inputValue of input) {\n const valueDataset = this.value[\"~run\"](\n { value: inputValue },\n config2\n );\n if (valueDataset.issues) {\n const pathItem = {\n type: \"set\",\n origin: \"value\",\n input,\n key: null,\n value: inputValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.add(valueDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/set/setAsync.ts\nfunction setAsync(value2, message) {\n return {\n kind: \"schema\",\n type: \"set\",\n reference: setAsync,\n expects: \"Set\",\n async: true,\n value: value2,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input instanceof Set) {\n dataset.typed = true;\n dataset.value = /* @__PURE__ */ new Set();\n const valueDatasets = await Promise.all(\n [...input].map(\n async (inputValue) => [\n inputValue,\n await this.value[\"~run\"]({ value: inputValue }, config2)\n ]\n )\n );\n for (const [inputValue, valueDataset] of valueDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"set\",\n origin: \"value\",\n input,\n key: null,\n value: inputValue\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.add(valueDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/strictObject/strictObject.ts\nfunction strictObject(entries, message) {\n return {\n kind: \"schema\",\n type: \"strict_object\",\n reference: strictObject,\n expects: \"Object\",\n async: false,\n entries,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n for (const key in this.entries) {\n const value2 = input[key];\n const valueDataset = this.entries[key][\"~run\"]({ value: value2 }, config2);\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (!(key in this.entries)) {\n const value2 = input[key];\n _addIssue(this, \"type\", dataset, config2, {\n input: value2,\n expected: \"never\",\n path: [\n {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n }\n ]\n });\n break;\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/strictObject/strictObjectAsync.ts\nfunction strictObjectAsync(entries, message) {\n return {\n kind: \"schema\",\n type: \"strict_object\",\n reference: strictObjectAsync,\n expects: \"Object\",\n async: true,\n entries,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n dataset.typed = true;\n dataset.value = {};\n const valueDatasets = await Promise.all(\n Object.entries(this.entries).map(async ([key, schema]) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await schema[\"~run\"]({ value: value2 }, config2)\n ];\n })\n );\n for (const [key, value2, valueDataset] of valueDatasets) {\n if (valueDataset.issues) {\n const pathItem = {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of valueDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = valueDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!valueDataset.typed) {\n dataset.typed = false;\n }\n if (valueDataset.value !== void 0 || key in input) {\n dataset.value[key] = valueDataset.value;\n }\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const key in input) {\n if (!(key in this.entries)) {\n const value2 = input[key];\n _addIssue(this, \"type\", dataset, config2, {\n input: value2,\n expected: \"never\",\n path: [\n {\n type: \"object\",\n origin: \"value\",\n input,\n key,\n value: value2\n }\n ]\n });\n break;\n }\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/strictTuple/strictTuple.ts\nfunction strictTuple(items, message) {\n return {\n kind: \"schema\",\n type: \"strict_tuple\",\n reference: strictTuple,\n expects: \"Array\",\n async: false,\n items,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < this.items.length; key++) {\n const value2 = input[key];\n const itemDataset = this.items[key][\"~run\"]({ value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!(dataset.issues && config2.abortEarly) && this.items.length < input.length) {\n const value2 = input[items.length];\n _addIssue(this, \"type\", dataset, config2, {\n input: value2,\n expected: \"never\",\n path: [\n {\n type: \"array\",\n origin: \"value\",\n input,\n key: this.items.length,\n value: value2\n }\n ]\n });\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/strictTuple/strictTupleAsync.ts\nfunction strictTupleAsync(items, message) {\n return {\n kind: \"schema\",\n type: \"strict_tuple\",\n reference: strictTupleAsync,\n expects: \"Array\",\n async: true,\n items,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const itemDatasets = await Promise.all(\n this.items.map(async (item, key) => {\n const value2 = input[key];\n return [key, value2, await item[\"~run\"]({ value: value2 }, config2)];\n })\n );\n for (const [key, value2, itemDataset] of itemDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!(dataset.issues && config2.abortEarly) && this.items.length < input.length) {\n const value2 = input[items.length];\n _addIssue(this, \"type\", dataset, config2, {\n input: value2,\n expected: \"never\",\n path: [\n {\n type: \"array\",\n origin: \"value\",\n input,\n key: this.items.length,\n value: value2\n }\n ]\n });\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/string/string.ts\nfunction string(message) {\n return {\n kind: \"schema\",\n type: \"string\",\n reference: string,\n expects: \"string\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (typeof dataset.value === \"string\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/symbol/symbol.ts\nfunction symbol(message) {\n return {\n kind: \"schema\",\n type: \"symbol\",\n reference: symbol,\n expects: \"symbol\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (typeof dataset.value === \"symbol\") {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/tuple/tuple.ts\nfunction tuple(items, message) {\n return {\n kind: \"schema\",\n type: \"tuple\",\n reference: tuple,\n expects: \"Array\",\n async: false,\n items,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < this.items.length; key++) {\n const value2 = input[key];\n const itemDataset = this.items[key][\"~run\"]({ value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/tuple/tupleAsync.ts\nfunction tupleAsync(items, message) {\n return {\n kind: \"schema\",\n type: \"tuple\",\n reference: tupleAsync,\n expects: \"Array\",\n async: true,\n items,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const itemDatasets = await Promise.all(\n this.items.map(async (item, key) => {\n const value2 = input[key];\n return [key, value2, await item[\"~run\"]({ value: value2 }, config2)];\n })\n );\n for (const [key, value2, itemDataset] of itemDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/tupleWithRest/tupleWithRest.ts\nfunction tupleWithRest(items, rest, message) {\n return {\n kind: \"schema\",\n type: \"tuple_with_rest\",\n reference: tupleWithRest,\n expects: \"Array\",\n async: false,\n items,\n rest,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n for (let key = 0; key < this.items.length; key++) {\n const value2 = input[key];\n const itemDataset = this.items[key][\"~run\"]({ value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (let key = this.items.length; key < input.length; key++) {\n const value2 = input[key];\n const itemDataset = this.rest[\"~run\"]({ value: value2 }, config2);\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/tupleWithRest/tupleWithRestAsync.ts\nfunction tupleWithRestAsync(items, rest, message) {\n return {\n kind: \"schema\",\n type: \"tuple_with_rest\",\n reference: tupleWithRestAsync,\n expects: \"Array\",\n async: true,\n items,\n rest,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (Array.isArray(input)) {\n dataset.typed = true;\n dataset.value = [];\n const [normalDatasets, restDatasets] = await Promise.all([\n // Parse schema of each normal item\n Promise.all(\n this.items.map(async (item, key) => {\n const value2 = input[key];\n return [\n key,\n value2,\n await item[\"~run\"]({ value: value2 }, config2)\n ];\n })\n ),\n // Parse other items with rest schema\n Promise.all(\n input.slice(this.items.length).map(async (value2, key) => {\n return [\n key + this.items.length,\n value2,\n await this.rest[\"~run\"]({ value: value2 }, config2)\n ];\n })\n )\n ]);\n for (const [key, value2, itemDataset] of normalDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n if (!dataset.issues || !config2.abortEarly) {\n for (const [key, value2, itemDataset] of restDatasets) {\n if (itemDataset.issues) {\n const pathItem = {\n type: \"array\",\n origin: \"value\",\n input,\n key,\n value: value2\n };\n for (const issue of itemDataset.issues) {\n if (issue.path) {\n issue.path.unshift(pathItem);\n } else {\n issue.path = [pathItem];\n }\n dataset.issues?.push(issue);\n }\n if (!dataset.issues) {\n dataset.issues = itemDataset.issues;\n }\n if (config2.abortEarly) {\n dataset.typed = false;\n break;\n }\n }\n if (!itemDataset.typed) {\n dataset.typed = false;\n }\n dataset.value.push(itemDataset.value);\n }\n }\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/undefined/undefined.ts\nfunction undefined_(message) {\n return {\n kind: \"schema\",\n type: \"undefined\",\n reference: undefined_,\n expects: \"undefined\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === void 0) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/undefinedable/undefinedable.ts\nfunction undefinedable(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"undefinedable\",\n reference: undefinedable,\n expects: `(${wrapped.expects} | undefined)`,\n async: false,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === void 0) {\n if (this.default !== void 0) {\n dataset.value = getDefault(this, dataset, config2);\n }\n if (dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/undefinedable/undefinedableAsync.ts\nfunction undefinedableAsync(wrapped, default_) {\n return {\n kind: \"schema\",\n type: \"undefinedable\",\n reference: undefinedableAsync,\n expects: `(${wrapped.expects} | undefined)`,\n async: true,\n wrapped,\n default: default_,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n if (dataset.value === void 0) {\n if (this.default !== void 0) {\n dataset.value = await getDefault(this, dataset, config2);\n }\n if (dataset.value === void 0) {\n dataset.typed = true;\n return dataset;\n }\n }\n return this.wrapped[\"~run\"](dataset, config2);\n }\n };\n}\n\n// src/schemas/union/utils/_subIssues/_subIssues.ts\nfunction _subIssues(datasets) {\n let issues;\n if (datasets) {\n for (const dataset of datasets) {\n if (issues) {\n issues.push(...dataset.issues);\n } else {\n issues = dataset.issues;\n }\n }\n }\n return issues;\n}\n\n// src/schemas/union/union.ts\nfunction union(options, message) {\n return {\n kind: \"schema\",\n type: \"union\",\n reference: union,\n expects: _joinExpects(\n options.map((option) => option.expects),\n \"|\"\n ),\n async: false,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n let validDataset;\n let typedDatasets;\n let untypedDatasets;\n for (const schema of this.options) {\n const optionDataset = schema[\"~run\"]({ value: dataset.value }, config2);\n if (optionDataset.typed) {\n if (optionDataset.issues) {\n if (typedDatasets) {\n typedDatasets.push(optionDataset);\n } else {\n typedDatasets = [optionDataset];\n }\n } else {\n validDataset = optionDataset;\n break;\n }\n } else {\n if (untypedDatasets) {\n untypedDatasets.push(optionDataset);\n } else {\n untypedDatasets = [optionDataset];\n }\n }\n }\n if (validDataset) {\n return validDataset;\n }\n if (typedDatasets) {\n if (typedDatasets.length === 1) {\n return typedDatasets[0];\n }\n _addIssue(this, \"type\", dataset, config2, {\n issues: _subIssues(typedDatasets)\n });\n dataset.typed = true;\n } else if (untypedDatasets?.length === 1) {\n return untypedDatasets[0];\n } else {\n _addIssue(this, \"type\", dataset, config2, {\n issues: _subIssues(untypedDatasets)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/union/unionAsync.ts\nfunction unionAsync(options, message) {\n return {\n kind: \"schema\",\n type: \"union\",\n reference: unionAsync,\n expects: _joinExpects(\n options.map((option) => option.expects),\n \"|\"\n ),\n async: true,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n let validDataset;\n let typedDatasets;\n let untypedDatasets;\n for (const schema of this.options) {\n const optionDataset = await schema[\"~run\"](\n { value: dataset.value },\n config2\n );\n if (optionDataset.typed) {\n if (optionDataset.issues) {\n if (typedDatasets) {\n typedDatasets.push(optionDataset);\n } else {\n typedDatasets = [optionDataset];\n }\n } else {\n validDataset = optionDataset;\n break;\n }\n } else {\n if (untypedDatasets) {\n untypedDatasets.push(optionDataset);\n } else {\n untypedDatasets = [optionDataset];\n }\n }\n }\n if (validDataset) {\n return validDataset;\n }\n if (typedDatasets) {\n if (typedDatasets.length === 1) {\n return typedDatasets[0];\n }\n _addIssue(this, \"type\", dataset, config2, {\n issues: _subIssues(typedDatasets)\n });\n dataset.typed = true;\n } else if (untypedDatasets?.length === 1) {\n return untypedDatasets[0];\n } else {\n _addIssue(this, \"type\", dataset, config2, {\n issues: _subIssues(untypedDatasets)\n });\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/unknown/unknown.ts\nfunction unknown() {\n return {\n kind: \"schema\",\n type: \"unknown\",\n reference: unknown,\n expects: \"unknown\",\n async: false,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset) {\n dataset.typed = true;\n return dataset;\n }\n };\n}\n\n// src/schemas/variant/variant.ts\nfunction variant(key, options, message) {\n return {\n kind: \"schema\",\n type: \"variant\",\n reference: variant,\n expects: \"Object\",\n async: false,\n key,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n let outputDataset;\n let maxDiscriminatorPriority = 0;\n let invalidDiscriminatorKey = this.key;\n let expectedDiscriminators = [];\n const parseOptions = (variant2, allKeys) => {\n for (const schema of variant2.options) {\n if (schema.type === \"variant\") {\n parseOptions(schema, new Set(allKeys).add(schema.key));\n } else {\n let keysAreValid = true;\n let currentPriority = 0;\n for (const currentKey of allKeys) {\n if (schema.entries[currentKey][\"~run\"](\n // @ts-expect-error\n { typed: false, value: input[currentKey] },\n config2\n ).issues) {\n keysAreValid = false;\n if (invalidDiscriminatorKey !== currentKey && (maxDiscriminatorPriority < currentPriority || maxDiscriminatorPriority === currentPriority && currentKey in input && !(invalidDiscriminatorKey in input))) {\n maxDiscriminatorPriority = currentPriority;\n invalidDiscriminatorKey = currentKey;\n expectedDiscriminators = [];\n }\n if (invalidDiscriminatorKey === currentKey) {\n expectedDiscriminators.push(\n schema.entries[currentKey].expects\n );\n }\n break;\n }\n currentPriority++;\n }\n if (keysAreValid) {\n const optionDataset = schema[\"~run\"]({ value: input }, config2);\n if (!outputDataset || !outputDataset.typed && optionDataset.typed) {\n outputDataset = optionDataset;\n }\n }\n }\n if (outputDataset && !outputDataset.issues) {\n break;\n }\n }\n };\n parseOptions(this, /* @__PURE__ */ new Set([this.key]));\n if (outputDataset) {\n return outputDataset;\n }\n _addIssue(this, \"type\", dataset, config2, {\n // @ts-expect-error\n input: input[invalidDiscriminatorKey],\n expected: _joinExpects(expectedDiscriminators, \"|\"),\n path: [\n {\n type: \"object\",\n origin: \"value\",\n input,\n key: invalidDiscriminatorKey,\n // @ts-expect-error\n value: input[invalidDiscriminatorKey]\n }\n ]\n });\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/variant/variantAsync.ts\nfunction variantAsync(key, options, message) {\n return {\n kind: \"schema\",\n type: \"variant\",\n reference: variantAsync,\n expects: \"Object\",\n async: true,\n key,\n options,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n const input = dataset.value;\n if (input && typeof input === \"object\") {\n let outputDataset;\n let maxDiscriminatorPriority = 0;\n let invalidDiscriminatorKey = this.key;\n let expectedDiscriminators = [];\n const parseOptions = async (variant2, allKeys) => {\n for (const schema of variant2.options) {\n if (schema.type === \"variant\") {\n await parseOptions(schema, new Set(allKeys).add(schema.key));\n } else {\n let keysAreValid = true;\n let currentPriority = 0;\n for (const currentKey of allKeys) {\n if ((await schema.entries[currentKey][\"~run\"](\n // @ts-expect-error\n { typed: false, value: input[currentKey] },\n config2\n )).issues) {\n keysAreValid = false;\n if (invalidDiscriminatorKey !== currentKey && (maxDiscriminatorPriority < currentPriority || maxDiscriminatorPriority === currentPriority && currentKey in input && !(invalidDiscriminatorKey in input))) {\n maxDiscriminatorPriority = currentPriority;\n invalidDiscriminatorKey = currentKey;\n expectedDiscriminators = [];\n }\n if (invalidDiscriminatorKey === currentKey) {\n expectedDiscriminators.push(\n schema.entries[currentKey].expects\n );\n }\n break;\n }\n currentPriority++;\n }\n if (keysAreValid) {\n const optionDataset = await schema[\"~run\"](\n { value: input },\n config2\n );\n if (!outputDataset || !outputDataset.typed && optionDataset.typed) {\n outputDataset = optionDataset;\n }\n }\n }\n if (outputDataset && !outputDataset.issues) {\n break;\n }\n }\n };\n await parseOptions(this, /* @__PURE__ */ new Set([this.key]));\n if (outputDataset) {\n return outputDataset;\n }\n _addIssue(this, \"type\", dataset, config2, {\n // @ts-expect-error\n input: input[invalidDiscriminatorKey],\n expected: _joinExpects(expectedDiscriminators, \"|\"),\n path: [\n {\n type: \"object\",\n origin: \"value\",\n input,\n key: invalidDiscriminatorKey,\n // @ts-expect-error\n value: input[invalidDiscriminatorKey]\n }\n ]\n });\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/schemas/void/void.ts\nfunction void_(message) {\n return {\n kind: \"schema\",\n type: \"void\",\n reference: void_,\n expects: \"void\",\n async: false,\n message,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n if (dataset.value === void 0) {\n dataset.typed = true;\n } else {\n _addIssue(this, \"type\", dataset, config2);\n }\n return dataset;\n }\n };\n}\n\n// src/methods/keyof/keyof.ts\nfunction keyof(schema, message) {\n return picklist(Object.keys(schema.entries), message);\n}\n\n// src/methods/omit/omit.ts\nfunction omit(schema, keys) {\n const entries = {\n ...schema.entries\n };\n for (const key of keys) {\n delete entries[key];\n }\n return {\n ...schema,\n entries,\n get \"~standard\"() {\n return _getStandardProps(this);\n }\n };\n}\n\n// src/methods/parse/parse.ts\nfunction parse(schema, input, config2) {\n const dataset = schema[\"~run\"]({ value: input }, getGlobalConfig(config2));\n if (dataset.issues) {\n throw new ValiError(dataset.issues);\n }\n return dataset.value;\n}\n\n// src/methods/parse/parseAsync.ts\nasync function parseAsync(schema, input, config2) {\n const dataset = await schema[\"~run\"](\n { value: input },\n getGlobalConfig(config2)\n );\n if (dataset.issues) {\n throw new ValiError(dataset.issues);\n }\n return dataset.value;\n}\n\n// src/methods/parser/parser.ts\nfunction parser(schema, config2) {\n const func = (input) => parse(schema, input, config2);\n func.schema = schema;\n func.config = config2;\n return func;\n}\n\n// src/methods/parser/parserAsync.ts\nfunction parserAsync(schema, config2) {\n const func = (input) => parseAsync(schema, input, config2);\n func.schema = schema;\n func.config = config2;\n return func;\n}\n\n// src/methods/partial/partial.ts\nfunction partial(schema, keys) {\n const entries = {};\n for (const key in schema.entries) {\n entries[key] = !keys || keys.includes(key) ? optional(schema.entries[key]) : schema.entries[key];\n }\n return {\n ...schema,\n entries,\n get \"~standard\"() {\n return _getStandardProps(this);\n }\n };\n}\n\n// src/methods/partial/partialAsync.ts\nfunction partialAsync(schema, keys) {\n const entries = {};\n for (const key in schema.entries) {\n entries[key] = !keys || keys.includes(key) ? optionalAsync(schema.entries[key]) : schema.entries[key];\n }\n return {\n ...schema,\n entries,\n get \"~standard\"() {\n return _getStandardProps(this);\n }\n };\n}\n\n// src/methods/pick/pick.ts\nfunction pick(schema, keys) {\n const entries = {};\n for (const key of keys) {\n entries[key] = schema.entries[key];\n }\n return {\n ...schema,\n entries,\n get \"~standard\"() {\n return _getStandardProps(this);\n }\n };\n}\n\n// src/methods/pipe/pipe.ts\nfunction pipe(...pipe2) {\n return {\n ...pipe2[0],\n pipe: pipe2,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n \"~run\"(dataset, config2) {\n for (const item of pipe2) {\n if (item.kind !== \"metadata\") {\n if (dataset.issues && (item.kind === \"schema\" || item.kind === \"transformation\")) {\n dataset.typed = false;\n break;\n }\n if (!dataset.issues || !config2.abortEarly && !config2.abortPipeEarly) {\n dataset = item[\"~run\"](dataset, config2);\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/pipe/pipeAsync.ts\nfunction pipeAsync(...pipe2) {\n return {\n ...pipe2[0],\n pipe: pipe2,\n async: true,\n get \"~standard\"() {\n return _getStandardProps(this);\n },\n async \"~run\"(dataset, config2) {\n for (const item of pipe2) {\n if (item.kind !== \"metadata\") {\n if (dataset.issues && (item.kind === \"schema\" || item.kind === \"transformation\")) {\n dataset.typed = false;\n break;\n }\n if (!dataset.issues || !config2.abortEarly && !config2.abortPipeEarly) {\n dataset = await item[\"~run\"](dataset, config2);\n }\n }\n }\n return dataset;\n }\n };\n}\n\n// src/methods/required/required.ts\nfunction required(schema, arg2, arg3) {\n const keys = Array.isArray(arg2) ? arg2 : void 0;\n const message = Array.isArray(arg2) ? arg3 : arg2;\n const entries = {};\n for (const key in schema.entries) {\n entries[key] = !keys || keys.includes(key) ? nonOptional(schema.entries[key], message) : schema.entries[key];\n }\n return {\n ...schema,\n entries,\n get \"~standard\"() {\n return _getStandardProps(this);\n }\n };\n}\n\n// src/methods/required/requiredAsync.ts\nfunction requiredAsync(schema, arg2, arg3) {\n const keys = Array.isArray(arg2) ? arg2 : void 0;\n const message = Array.isArray(arg2) ? arg3 : arg2;\n const entries = {};\n for (const key in schema.entries) {\n entries[key] = !keys || keys.includes(key) ? nonOptionalAsync(schema.entries[key], message) : schema.entries[key];\n }\n return {\n ...schema,\n entries,\n get \"~standard\"() {\n return _getStandardProps(this);\n }\n };\n}\n\n// src/methods/safeParse/safeParse.ts\nfunction safeParse(schema, input, config2) {\n const dataset = schema[\"~run\"]({ value: input }, getGlobalConfig(config2));\n return {\n typed: dataset.typed,\n success: !dataset.issues,\n output: dataset.value,\n issues: dataset.issues\n };\n}\n\n// src/methods/safeParse/safeParseAsync.ts\nasync function safeParseAsync(schema, input, config2) {\n const dataset = await schema[\"~run\"](\n { value: input },\n getGlobalConfig(config2)\n );\n return {\n typed: dataset.typed,\n success: !dataset.issues,\n output: dataset.value,\n issues: dataset.issues\n };\n}\n\n// src/methods/safeParser/safeParser.ts\nfunction safeParser(schema, config2) {\n const func = (input) => safeParse(schema, input, config2);\n func.schema = schema;\n func.config = config2;\n return func;\n}\n\n// src/methods/safeParser/safeParserAsync.ts\nfunction safeParserAsync(schema, config2) {\n const func = (input) => safeParseAsync(schema, input, config2);\n func.schema = schema;\n func.config = config2;\n return func;\n}\n\n// src/methods/unwrap/unwrap.ts\nfunction unwrap(schema) {\n return schema.wrapped;\n}\nexport {\n BASE64_REGEX,\n BIC_REGEX,\n CUID2_REGEX,\n DECIMAL_REGEX,\n DIGITS_REGEX,\n EMAIL_REGEX,\n EMOJI_REGEX,\n HEXADECIMAL_REGEX,\n HEX_COLOR_REGEX,\n IMEI_REGEX,\n IPV4_REGEX,\n IPV6_REGEX,\n IP_REGEX,\n ISO_DATE_REGEX,\n ISO_DATE_TIME_REGEX,\n ISO_TIMESTAMP_REGEX,\n ISO_TIME_REGEX,\n ISO_TIME_SECOND_REGEX,\n ISO_WEEK_REGEX,\n MAC48_REGEX,\n MAC64_REGEX,\n MAC_REGEX,\n NANO_ID_REGEX,\n OCTAL_REGEX,\n ULID_REGEX,\n UUID_REGEX,\n ValiError,\n _addIssue,\n _getByteCount,\n _getGraphemeCount,\n _getStandardProps,\n _getWordCount,\n _isLuhnAlgo,\n _isValidObjectKey,\n _joinExpects,\n _stringify,\n any,\n args,\n argsAsync,\n array,\n arrayAsync,\n assert,\n awaitAsync,\n base64,\n bic,\n bigint,\n blob,\n boolean,\n brand,\n bytes,\n check,\n checkAsync,\n checkItems,\n checkItemsAsync,\n config,\n creditCard,\n cuid2,\n custom,\n customAsync,\n date,\n decimal,\n deleteGlobalConfig,\n deleteGlobalMessage,\n deleteSchemaMessage,\n deleteSpecificMessage,\n description,\n digits,\n email,\n emoji,\n empty,\n endsWith,\n entriesFromList,\n enum_ as enum,\n enum_,\n everyItem,\n excludes,\n fallback,\n fallbackAsync,\n file,\n filterItems,\n findItem,\n finite,\n flatten,\n forward,\n forwardAsync,\n function_ as function,\n function_,\n getDefault,\n getDefaults,\n getDefaultsAsync,\n getDotPath,\n getFallback,\n getFallbacks,\n getFallbacksAsync,\n getGlobalConfig,\n getGlobalMessage,\n getSchemaMessage,\n getSpecificMessage,\n graphemes,\n hash,\n hexColor,\n hexadecimal,\n imei,\n includes,\n instance,\n integer,\n intersect,\n intersectAsync,\n ip,\n ipv4,\n ipv6,\n is,\n isOfKind,\n isOfType,\n isValiError,\n isoDate,\n isoDateTime,\n isoTime,\n isoTimeSecond,\n isoTimestamp,\n isoWeek,\n keyof,\n lazy,\n lazyAsync,\n length,\n literal,\n looseObject,\n looseObjectAsync,\n looseTuple,\n looseTupleAsync,\n mac,\n mac48,\n mac64,\n map,\n mapAsync,\n mapItems,\n maxBytes,\n maxGraphemes,\n maxLength,\n maxSize,\n maxValue,\n maxWords,\n metadata,\n mimeType,\n minBytes,\n minGraphemes,\n minLength,\n minSize,\n minValue,\n minWords,\n multipleOf,\n nan,\n nanoid,\n never,\n nonEmpty,\n nonNullable,\n nonNullableAsync,\n nonNullish,\n nonNullishAsync,\n nonOptional,\n nonOptionalAsync,\n normalize,\n notBytes,\n notGraphemes,\n notLength,\n notSize,\n notValue,\n notWords,\n null_ as null,\n null_,\n nullable,\n nullableAsync,\n nullish,\n nullishAsync,\n number,\n object,\n objectAsync,\n objectWithRest,\n objectWithRestAsync,\n octal,\n omit,\n optional,\n optionalAsync,\n parse,\n parseAsync,\n parser,\n parserAsync,\n partial,\n partialAsync,\n partialCheck,\n partialCheckAsync,\n pick,\n picklist,\n pipe,\n pipeAsync,\n promise,\n rawCheck,\n rawCheckAsync,\n rawTransform,\n rawTransformAsync,\n readonly,\n record,\n recordAsync,\n reduceItems,\n regex,\n required,\n requiredAsync,\n returns,\n returnsAsync,\n safeInteger,\n safeParse,\n safeParseAsync,\n safeParser,\n safeParserAsync,\n set,\n setAsync,\n setGlobalConfig,\n setGlobalMessage,\n setSchemaMessage,\n setSpecificMessage,\n size,\n someItem,\n sortItems,\n startsWith,\n strictObject,\n strictObjectAsync,\n strictTuple,\n strictTupleAsync,\n string,\n symbol,\n title,\n toLowerCase,\n toMaxValue,\n toMinValue,\n toUpperCase,\n transform,\n transformAsync,\n trim,\n trimEnd,\n trimStart,\n tuple,\n tupleAsync,\n tupleWithRest,\n tupleWithRestAsync,\n ulid,\n undefined_ as undefined,\n undefined_,\n undefinedable,\n undefinedableAsync,\n union,\n unionAsync,\n unknown,\n unwrap,\n url,\n uuid,\n value,\n variant,\n variantAsync,\n void_ as void,\n void_,\n words\n};\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/messages.js b/web/app/themes/haiku-atelier-2024/assets/js/messages.js index 39961024..9d9e9825 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/messages.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/messages.js @@ -1,7 +1,9 @@ -import { p as parse } from "./index.DKC_Jv5v.js"; +import { p as parse } from "./index.DxUTT09Y.js"; import { N as NOM_CANAL_BOUTON_PANIER, T as TYPES_MESSAGES, a as NOM_CANAL_CONTENU_PANIER } from "./messages3.js"; -import { r as reporteErreur } from "./erreurs.js"; +import { r as reporteErreur } from "./erreurs2.js"; +import { W as WCErrorSchema } from "./erreurs3.js"; import { M as MessageMajBoutonPanierSchema, a as MessageMajContenuPanierSchema } from "./messages2.js"; +import { e as eitherParse } from "./validation.js"; import { E as Either } from "./Either.wHNxn7Os.js"; import "./exports.3IcOsN8u.js"; import "./cart.js"; @@ -37,10 +39,12 @@ const valideMessageMajBoutonPanier = (evenementMessage) => Either.of( const valideMessageMajContenuPanier = (evenementMessage) => Either.of( parse(MessageMajContenuPanierSchema, evenementMessage.data) ).ifLeft((erreur) => reporteErreur(erreur)); +const reponseEstCodeErreurWC = (reponse, codeErreurWC) => eitherParse(reponse, WCErrorSchema).map((v) => v.body.code === codeErreurWC).orDefault(false); export { emetMessageMajContenuPanier as a, valideMessageMajContenuPanier as b, emetMessageMajBoutonPanier as e, + reponseEstCodeErreurWC as r, valideMessageMajBoutonPanier as v }; //# sourceMappingURL=messages.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/messages.js.map b/web/app/themes/haiku-atelier-2024/assets/js/messages.js.map index bca48495..8bb5a459 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/messages.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/messages.js.map @@ -1 +1 @@ -{"version":3,"file":"messages.js","sources":["../../src/scripts/lib/messages.ts"],"sourcesContent":["import { Either } from \"purify-ts\";\nimport { parse, type ValiError } from \"valibot\";\n\nimport type {\n MessageMajBoutonPanier,\n MessageMajBoutonPanierDonnees,\n MessageMajContenuPanier,\n MessageMajContenuPanierDonnees,\n} from \"./types/messages\";\n\nimport { NOM_CANAL_BOUTON_PANIER, NOM_CANAL_CONTENU_PANIER, TYPES_MESSAGES } from \"../constantes/messages.ts\";\nimport { reporteErreur } from \"./erreurs.ts\";\nimport { MessageMajBoutonPanierSchema, MessageMajContenuPanierSchema } from \"./schemas/messages.ts\";\n\n// Émissions\nexport const emetMessageMajBoutonPanier = (args: MessageMajBoutonPanierDonnees): void => {\n const canal = new BroadcastChannel(NOM_CANAL_BOUTON_PANIER);\n canal.postMessage({\n donnees: {\n quantiteProduits: args.quantiteProduits,\n },\n type: TYPES_MESSAGES.MajBoutonPanier,\n } as MessageMajBoutonPanier);\n canal.close();\n};\n\nexport const emetMessageMajContenuPanier = (args: MessageMajContenuPanierDonnees): void => {\n const canal = new BroadcastChannel(NOM_CANAL_CONTENU_PANIER);\n canal.postMessage({\n donnees: {\n produits: args.produits,\n sousTotalPanier: args.sousTotalPanier,\n totalPanier: args.totalPanier,\n },\n type: TYPES_MESSAGES.MajContenuPanier,\n } as MessageMajContenuPanier);\n canal.close();\n};\n\n// Validations\nexport const valideMessageMajBoutonPanier = (\n evenementMessage: MessageEvent,\n): Either, MessageMajBoutonPanier> =>\n Either\n .of, MessageMajBoutonPanier>(\n parse(MessageMajBoutonPanierSchema, evenementMessage.data),\n )\n .ifLeft(erreur => reporteErreur(erreur));\n\nexport const valideMessageMajContenuPanier = (\n evenementMessage: MessageEvent,\n): Either, MessageMajContenuPanier> =>\n Either\n .of, MessageMajContenuPanier>(\n parse(MessageMajContenuPanierSchema, evenementMessage.data),\n )\n .ifLeft(erreur => reporteErreur(erreur));\n"],"names":[],"mappings":";;;;;;;;;;;AAea,MAAA,6BAA6B,CAAC,SAA8C;AACjF,QAAA,QAAQ,IAAI,iBAAiB,uBAAuB;AAC1D,QAAM,YAAY;AAAA,IAChB,SAAS;AAAA,MACP,kBAAkB,KAAK;AAAA,IACzB;AAAA,IACA,MAAM,eAAe;AAAA,EAAA,CACI;AAC3B,QAAM,MAAM;AACd;AAEa,MAAA,8BAA8B,CAAC,SAA+C;AACnF,QAAA,QAAQ,IAAI,iBAAiB,wBAAwB;AAC3D,QAAM,YAAY;AAAA,IAChB,SAAS;AAAA,MACP,UAAU,KAAK;AAAA,MACf,iBAAiB,KAAK;AAAA,MACtB,aAAa,KAAK;AAAA,IACpB;AAAA,IACA,MAAM,eAAe;AAAA,EAAA,CACK;AAC5B,QAAM,MAAM;AACd;AAGa,MAAA,+BAA+B,CAC1C,qBAEA,OACG;AAAA,EACC,MAAM,8BAA8B,iBAAiB,IAAI;AAC3D,EACC,OAAO,CAAA,WAAU,cAAc,MAAM,CAAC;AAE9B,MAAA,gCAAgC,CAC3C,qBAEA,OACG;AAAA,EACC,MAAM,+BAA+B,iBAAiB,IAAI;AAC5D,EACC,OAAO,CAAA,WAAU,cAAc,MAAM,CAAC;"} \ No newline at end of file +{"version":3,"file":"messages.js","sources":["../../src/scripts/lib/messages.ts"],"sourcesContent":["import { pipe } from \"@mobily/ts-belt\";\nimport { Either } from \"purify-ts\";\nimport { parse, type ValiError } from \"valibot\";\n\nimport type {\n MessageMajBoutonPanier,\n MessageMajBoutonPanierDonnees,\n MessageMajContenuPanier,\n MessageMajContenuPanierDonnees,\n} from \"./types/messages\";\n\nimport { NOM_CANAL_BOUTON_PANIER, NOM_CANAL_CONTENU_PANIER, TYPES_MESSAGES } from \"../constantes/messages.ts\";\nimport { reporteErreur } from \"./erreurs.ts\";\nimport { WCErrorSchema } from \"./schemas/api/erreurs.ts\";\nimport { MessageMajBoutonPanierSchema, MessageMajContenuPanierSchema } from \"./schemas/messages.ts\";\nimport { ReponseSimplifiee } from \"./types/reseau\";\nimport { eitherParse } from \"./validation.ts\";\n\nexport const canalPostMessage = (canal: BroadcastChannel, message: any): BroadcastChannel => {\n canal.postMessage(message);\n return canal;\n};\n\n// Émissions\nexport const emetMessageMajBoutonPanier = (args: MessageMajBoutonPanierDonnees): void => {\n const canal = new BroadcastChannel(NOM_CANAL_BOUTON_PANIER);\n canal.postMessage({\n donnees: {\n quantiteProduits: args.quantiteProduits,\n },\n type: TYPES_MESSAGES.MajBoutonPanier,\n } as MessageMajBoutonPanier);\n canal.close();\n};\n\nexport const emetMessageMajContenuPanier = (args: MessageMajContenuPanierDonnees): void => {\n const canal = new BroadcastChannel(NOM_CANAL_CONTENU_PANIER);\n canal.postMessage({\n donnees: {\n produits: args.produits,\n sousTotalPanier: args.sousTotalPanier,\n totalPanier: args.totalPanier,\n },\n type: TYPES_MESSAGES.MajContenuPanier,\n } as MessageMajContenuPanier);\n canal.close();\n};\n\n/**\n * Émet un unique message vers un BroadcastChannel (canal) généré sur le moment puis le ferme.\n *\n * @param nomCanal Le nom du BroadcastChannel pour lequel le message est émis.\n * @param message Le message émis.\n * @return void\n */\nexport const emetUniqueMessageCanal = (nomCanal: string, message: M): void =>\n pipe(new BroadcastChannel(nomCanal), canal => canalPostMessage(canal, message), canal => canal.close());\n\n// Validations\nexport const valideMessageMajBoutonPanier = (\n evenementMessage: MessageEvent,\n): Either, MessageMajBoutonPanier> =>\n Either\n .of, MessageMajBoutonPanier>(\n parse(MessageMajBoutonPanierSchema, evenementMessage.data),\n )\n .ifLeft(erreur => reporteErreur(erreur));\n\nexport const valideMessageMajContenuPanier = (\n evenementMessage: MessageEvent,\n): Either, MessageMajContenuPanier> =>\n Either\n .of, MessageMajContenuPanier>(\n parse(MessageMajContenuPanierSchema, evenementMessage.data),\n )\n .ifLeft(erreur => reporteErreur(erreur));\n\n// Correspondances\nexport const reponseEstCodeErreurWC = (reponse: ReponseSimplifiee, codeErreurWC: string): boolean =>\n eitherParse(reponse, WCErrorSchema)\n .map(v => v.body.code === codeErreurWC)\n .orDefault(false);\n"],"names":[],"mappings":";;;;;;;;;;;;;AAwBa,MAAA,6BAA6B,CAAC,SAA8C;AACjF,QAAA,QAAQ,IAAI,iBAAiB,uBAAuB;AAC1D,QAAM,YAAY;AAAA,IAChB,SAAS;AAAA,MACP,kBAAkB,KAAK;AAAA,IACzB;AAAA,IACA,MAAM,eAAe;AAAA,EAAA,CACI;AAC3B,QAAM,MAAM;AACd;AAEa,MAAA,8BAA8B,CAAC,SAA+C;AACnF,QAAA,QAAQ,IAAI,iBAAiB,wBAAwB;AAC3D,QAAM,YAAY;AAAA,IAChB,SAAS;AAAA,MACP,UAAU,KAAK;AAAA,MACf,iBAAiB,KAAK;AAAA,MACtB,aAAa,KAAK;AAAA,IACpB;AAAA,IACA,MAAM,eAAe;AAAA,EAAA,CACK;AAC5B,QAAM,MAAM;AACd;AAaa,MAAA,+BAA+B,CAC1C,qBAEA,OACG;AAAA,EACC,MAAM,8BAA8B,iBAAiB,IAAI;AAC3D,EACC,OAAO,CAAA,WAAU,cAAc,MAAM,CAAC;AAE9B,MAAA,gCAAgC,CAC3C,qBAEA,OACG;AAAA,EACC,MAAM,+BAA+B,iBAAiB,IAAI;AAC5D,EACC,OAAO,CAAA,WAAU,cAAc,MAAM,CAAC;AAGpC,MAAM,yBAAyB,CAAC,SAA4B,iBACjE,YAAY,SAAS,aAAa,EAC/B,IAAI,CAAA,MAAK,EAAE,KAAK,SAAS,YAAY,EACrC,UAAU,KAAK;"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/messages2.js b/web/app/themes/haiku-atelier-2024/assets/js/messages2.js index f2ad6cc2..1afff8d0 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/messages2.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/messages2.js @@ -1,4 +1,4 @@ -import { e as enum_, o as object, a as pipe, v as value, s as string, n as number, b as array } from "./index.DKC_Jv5v.js"; +import { e as enum_, o as object, a as pipe, v as value, s as string, n as number, b as array } from "./index.DxUTT09Y.js"; import { T as TYPES_MESSAGES } from "./messages3.js"; import { a as WCStoreCartItemSchema } from "./cart.js"; import "./cart2.js"; diff --git a/web/app/themes/haiku-atelier-2024/assets/js/orders2.js b/web/app/themes/haiku-atelier-2024/assets/js/orders2.js index 573863a8..59c64690 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/orders2.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/orders2.js @@ -1,4 +1,4 @@ -import { o as object, a as pipe, b as array, s as string, e as enum_, f as union, c as optional, d as boolean, u as unknown, i as integer, n as number, g as null_ } from "./index.DKC_Jv5v.js"; +import { o as object, a as pipe, b as array, s as string, e as enum_, f as union, c as optional, d as boolean, u as unknown, j as integer, n as number, g as null_ } from "./index.DxUTT09Y.js"; import { T as TAX_STATUSES, O as ORDER_STATUSES } from "./orders3.js"; import { W as WCStoreBillingAddressSchema, a as WCStoreShippingAddressSchema } from "./adresses.js"; const WCV3OrdersCouponLineMetaDataSchema = object({ diff --git a/web/app/themes/haiku-atelier-2024/assets/js/products.js b/web/app/themes/haiku-atelier-2024/assets/js/products.js index 2ef01e87..2797bdb3 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/products.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/products.js @@ -1,4 +1,4 @@ -import { o as object, c as optional, e as enum_, a as pipe, m as minValue, n as number, k as maxValue, b as array, s as string, d as boolean, f as union, u as unknown, i as integer, g as null_, h as url } from "./index.DKC_Jv5v.js"; +import { o as object, c as optional, e as enum_, a as pipe, m as minValue, n as number, l as maxValue, b as array, s as string, d as boolean, f as union, u as unknown, j as integer, g as null_, h as url } from "./index.DxUTT09Y.js"; import { A as ATTRIBUTES_RELATIONS, C as CATALOG_VISIBILITIES, a as CATEGORY_OPERATORS, P as PRODUCTS_CONTEXTES, D as DATE_COLUMN_VALUES, O as ORDER_VALUES, b as ORDERBY_VALUES, R as RATINGS, c as PRODUCT_STATUTES, S as STOCK_STATUSES, T as TAG_OPERATORS, d as PRODUCT_TYPES, B as BACKORDERS_SETTINGS, e as TAX_STATUTES } from "./products2.js"; const WCV3ProductsArgsSchema = object({ // Date ISO8601 diff --git a/web/app/themes/haiku-atelier-2024/assets/js/products3.js b/web/app/themes/haiku-atelier-2024/assets/js/products3.js index b1b87aaf..a1650d68 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/products3.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/products3.js @@ -1,4 +1,4 @@ -import { o as object, c as optional, e as enum_, a as pipe, m as minValue, n as number, k as maxValue, b as array, s as string, u as unknown, d as boolean, f as union, i as integer, g as null_ } from "./index.DKC_Jv5v.js"; +import { o as object, c as optional, e as enum_, a as pipe, m as minValue, n as number, l as maxValue, b as array, s as string, u as unknown, d as boolean, f as union, j as integer, g as null_ } from "./index.DxUTT09Y.js"; import { A as ATTRIBUTES_RELATIONS, C as CATALOG_VISIBILITIES, a as CATEGORY_OPERATORS, P as PRODUCTS_CONTEXTES, D as DATE_COLUMN_VALUES, O as ORDER_VALUES, b as ORDERBY_VALUES, R as RATINGS, S as STOCK_STATUSES, T as TAG_OPERATORS, d as PRODUCT_TYPES } from "./products2.js"; object({ // Date ISO8601 diff --git a/web/app/themes/haiku-atelier-2024/assets/js/reseau.js b/web/app/themes/haiku-atelier-2024/assets/js/reseau.js index 87fea8ec..85a190f5 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/reseau.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/reseau.js @@ -1,8 +1,8 @@ import { z, N } from "./index.CeK6pfoJ.js"; -import { p as parse } from "./index.DKC_Jv5v.js"; +import { p as parse } from "./index.DxUTT09Y.js"; import { E as ENTETE_WC_NONCE } from "./api.js"; -import { b as leveBadRequestError, c as leveUnauthorizedError, d as leveNotFoundError, E as ErreurInconnue, a as leveErreur } from "./erreurs.js"; -import { e as estWCError } from "./erreurs2.js"; +import { b as leveBadRequestError, c as leveUnauthorizedError, d as leveNotFoundError, E as ErreurInconnue, a as leveErreur } from "./erreurs2.js"; +import { e as estWCError } from "./erreurs3.js"; import { p as pipe } from "./pipe.XPB0wEfw.js"; import "./exports.3IcOsN8u.js"; const getBackendAvecParametresUrl = (args) => fetch( diff --git a/web/app/themes/haiku-atelier-2024/assets/js/reseau.js.map b/web/app/themes/haiku-atelier-2024/assets/js/reseau.js.map index 02cb044d..acd74212 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/reseau.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/reseau.js.map @@ -1 +1 @@ -{"version":3,"file":"reseau.js","sources":["../../src/scripts/lib/reseau.ts"],"sourcesContent":["import { pipe } from \"@mobily/ts-belt\";\nimport { Either } from \"purify-ts\";\nimport { match, P } from \"ts-pattern\";\nimport { type GenericSchema, parse, type ValiError } from \"valibot\";\n\nimport { ENTETE_WC_NONCE } from \"../constantes/api.ts\";\nimport {\n type BadRequestError,\n ErreurInconnue,\n leveBadRequestError,\n leveErreur,\n leveNotFoundError,\n leveUnauthorizedError,\n type NotFoundError,\n type UnauthorizedError,\n type UnknownError,\n} from \"./erreurs.ts\";\nimport { estWCError } from \"./schemas/api/erreurs.ts\";\n\ntype ArgumentsGetBackendWC = {\n authString?: string;\n /** Une chaîne de caractères généré par le backend et à joindre à chaque requête pour l'authentifier. */\n nonce: string;\n /** La route, ou chemin, de l'API à demander au backend. */\n route: string;\n /** Paramètres de recherche (« query args ») à injecter dans l'URL de la requête. */\n searchParams?: string;\n};\n\ntype ArgumentsDeleteBackendWC = {\n authString?: string;\n /** Une chaîne de caractères généré par le backend et à joindre à chaque requête pour l'authentifier. */\n nonce: string;\n /** La route, ou chemin, de l'API à demander au backend. */\n route: string;\n};\n\ntype ArgumentsPostBackendWC = {\n authString?: string;\n /** Le corps de la requête (ses arguments). */\n corps: BodyInit;\n /** Une chaîne de caractères généré par le backend et à joindre à chaque requête pour l'authentifier. */\n nonce: string;\n /** La route, ou chemin, de l'API à demander au backend. */\n route: string;\n};\n\nexport const getBackend = (args: ArgumentsGetBackendWC) =>\n fetch(\n `${args.route}`,\n {\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n // Ajoute conditionnellement l'en-tête « Authorization »\n ...(args.authString && { Authorization: `Basic ${args.authString}` }),\n },\n method: \"GET\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\nexport const getBackendAvecParametresUrl = (args: ArgumentsGetBackendWC) =>\n fetch(\n `${args.route}?${args.searchParams}`,\n {\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n // Ajoute conditionnellement l'en-tête « Authorization »\n ...(args.authString && { Authorization: `Basic ${args.authString}` }),\n },\n method: \"GET\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\nexport const deleteBackend = (args: ArgumentsDeleteBackendWC) =>\n fetch(\n args.route,\n {\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n // Ajoute conditionnellement l'en-tête « Authorization »\n ...(args.authString && { Authorization: `Basic ${args.authString}` }),\n },\n method: \"DELETE\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\nexport const postBackend = (args: ArgumentsPostBackendWC) =>\n fetch(\n args.route,\n {\n body: args.corps,\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n // Ajoute conditionnellement l'en-tête « Authorization »\n ...(args.authString && { Authorization: `Basic ${args.authString}` }),\n },\n method: \"POST\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\n// TODO: Ne traite pas du tout les Erreurs\n// TODO: Utiliser un Either\nexport const traiteReponseBackendWCSelonCodesHTTP = >(\n corpsReponse: unknown,\n schemaReponse: S,\n): R =>\n match(corpsReponse)\n // Réponses problématiques\n .with({ body: P.select(), status: 400 }, estWCError, leveBadRequestError)\n .with({ body: P.select(), status: 401 }, estWCError, leveUnauthorizedError)\n .with({ body: P.select(), status: 404 }, estWCError, leveNotFoundError)\n // Réponse OK (201)\n .with(P._, corpsOkInconnu => parse(schemaReponse, corpsOkInconnu))\n // Réponses inconnues\n .otherwise(e => pipe(e, ErreurInconnue, leveErreur));\n\nexport type TraitementReponseBackendErrors> =\n | BadRequestError\n | NotFoundError\n | UnauthorizedError\n | UnknownError\n | ValiError;\nexport type TraitementReponseBackend> = Either<\n TraitementReponseBackendErrors,\n R\n>;\n\nexport const eitherTraiteReponseBackend = >(\n corpsReponse: unknown,\n schemaReponse: S,\n): TraitementReponseBackend =>\n Either.encase(() =>\n match(corpsReponse)\n .with({ body: P.select(), status: 400 }, estWCError, leveBadRequestError)\n .with({ body: P.select(), status: 401 }, estWCError, leveUnauthorizedError)\n .with({ body: P.select(), status: 404 }, estWCError, leveNotFoundError)\n // Réponse OK (201)\n .with(P._, corpsOkInconnu => parse(schemaReponse, corpsOkInconnu))\n // Réponses inconnues\n .otherwise(e => pipe(e, ErreurInconnue, leveErreur))\n );\n"],"names":["match","P"],"mappings":";;;;;;;AAiEa,MAAA,8BAA8B,CAAC,SAC1C;AAAA,EACE,GAAG,KAAK,KAAK,IAAI,KAAK,YAAY;AAAA,EAClC;AAAA,IACE,aAAa;AAAA,IACb,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,CAAC,eAAe,GAAG,KAAK;AAAA;AAAA,MAExB,GAAI,KAAK,cAAc,EAAE,eAAe,SAAS,KAAK,UAAU,GAAG;AAAA,IACrE;AAAA,IACA,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ,YAAY,QAAQ,GAAI;AAAA,EAAA;AAEpC;AAoBW,MAAA,cAAc,CAAC,SAC1B;AAAA,EACE,KAAK;AAAA,EACL;AAAA,IACE,MAAM,KAAK;AAAA,IACX,aAAa;AAAA,IACb,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,CAAC,eAAe,GAAG,KAAK;AAAA;AAAA,MAExB,GAAI,KAAK,cAAc,EAAE,eAAe,SAAS,KAAK,UAAU,GAAG;AAAA,IACrE;AAAA,IACA,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ,YAAY,QAAQ,GAAI;AAAA,EAAA;AAEpC;AAIW,MAAA,uCAAuC,CAClD,cACA,kBAEAA,EAAM,YAAY,EAEf,KAAK,EAAE,MAAMC,EAAE,OAAO,GAAG,QAAQ,IAAO,GAAA,YAAY,mBAAmB,EACvE,KAAK,EAAE,MAAMA,EAAE,UAAU,QAAQ,IAAA,GAAO,YAAY,qBAAqB,EACzE,KAAK,EAAE,MAAMA,EAAE,OAAA,GAAU,QAAQ,IAAI,GAAG,YAAY,iBAAiB,EAErE,KAAKA,EAAE,GAAG,CAAkB,mBAAA,MAAS,eAAe,cAAc,CAAC,EAEnE,UAAU,CAAA,MAAK,KAAK,GAAG,gBAAgB,UAAwB,CAAC;"} \ No newline at end of file +{"version":3,"file":"reseau.js","sources":["../../src/scripts/lib/reseau.ts"],"sourcesContent":["import { pipe } from \"@mobily/ts-belt\";\nimport { Either } from \"purify-ts\";\nimport { match, P } from \"ts-pattern\";\nimport { type GenericSchema, parse, type ValiError } from \"valibot\";\n\nimport { ENTETE_WC_NONCE } from \"../constantes/api.ts\";\nimport {\n type BadRequestError,\n ErreurInconnue,\n leveBadRequestError,\n leveErreur,\n leveNotFoundError,\n leveUnauthorizedError,\n type NotFoundError,\n type UnauthorizedError,\n type UnknownError,\n} from \"./erreurs.ts\";\nimport { estWCError } from \"./schemas/api/erreurs.ts\";\n\ntype ArgumentsDeleteBackendWC = {\n authString?: string;\n /** Une chaîne de caractères généré par le backend et à joindre à chaque requête pour l'authentifier. */\n nonce: string;\n /** La route, ou chemin, de l'API à demander au backend. */\n route: string;\n};\n\ntype ArgumentsGetBackendWC = {\n authString?: string;\n /** Une chaîne de caractères généré par le backend et à joindre à chaque requête pour l'authentifier. */\n nonce: string;\n /** La route, ou chemin, de l'API à demander au backend. */\n route: string;\n /** Paramètres de recherche (« query args ») à injecter dans l'URL de la requête. */\n searchParams?: string;\n};\n\ntype ArgumentsPostBackendWC = {\n authString?: string;\n /** Le corps de la requête (ses arguments). */\n corps: BodyInit;\n /** Une chaîne de caractères généré par le backend et à joindre à chaque requête pour l'authentifier. */\n nonce: string;\n /** La route, ou chemin, de l'API à demander au backend. */\n route: string;\n};\n\nexport const getBackend = (args: ArgumentsGetBackendWC) =>\n fetch(\n args.route,\n {\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n // Ajoute conditionnellement l'en-tête « Authorization »\n ...(args.authString && { Authorization: `Basic ${args.authString}` }),\n },\n method: \"GET\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\nexport const getBackendAvecParametresUrl = (args: ArgumentsGetBackendWC) =>\n fetch(\n `${args.route}?${args.searchParams}`,\n {\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n // Ajoute conditionnellement l'en-tête « Authorization »\n ...(args.authString && { Authorization: `Basic ${args.authString}` }),\n },\n method: \"GET\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\nexport const deleteBackend = (args: ArgumentsDeleteBackendWC) =>\n fetch(\n args.route,\n {\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n // Ajoute conditionnellement l'en-tête « Authorization »\n ...(args.authString && { Authorization: `Basic ${args.authString}` }),\n },\n method: \"DELETE\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\nexport const postBackend = (args: ArgumentsPostBackendWC) =>\n fetch(\n args.route,\n {\n body: args.corps,\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: args.nonce,\n // Ajoute conditionnellement l'en-tête « Authorization »\n ...(args.authString && { Authorization: `Basic ${args.authString}` }),\n },\n method: \"POST\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n },\n );\n\n// TODO: Ne traite pas du tout les Erreurs\n// TODO: Utiliser un Either\nexport const traiteReponseBackendWCSelonCodesHTTP = >(\n corpsReponse: unknown,\n schemaReponse: S,\n): R =>\n match(corpsReponse)\n // Réponses problématiques\n .with({ body: P.select(), status: 400 }, estWCError, leveBadRequestError)\n .with({ body: P.select(), status: 401 }, estWCError, leveUnauthorizedError)\n .with({ body: P.select(), status: 404 }, estWCError, leveNotFoundError)\n // Réponse OK (201)\n .with(P._, corpsOkInconnu => parse(schemaReponse, corpsOkInconnu))\n // Réponses inconnues\n .otherwise(e => pipe(e, ErreurInconnue, leveErreur));\n\nexport type TraitementReponseBackend> = Either<\n TraitementReponseBackendErrors,\n R\n>;\nexport type TraitementReponseBackendErrors> =\n | BadRequestError\n | NotFoundError\n | UnauthorizedError\n | UnknownError\n | ValiError;\n\nexport const eitherTraiteReponseBackend = >(\n corpsReponse: unknown,\n schemaReponse: S,\n): TraitementReponseBackend =>\n Either.encase(() =>\n match(corpsReponse)\n .with({ body: P.select(), status: 400 }, estWCError, leveBadRequestError)\n .with({ body: P.select(), status: 401 }, estWCError, leveUnauthorizedError)\n .with({ body: P.select(), status: 404 }, estWCError, leveNotFoundError)\n // Réponse OK (201)\n .with(P._, corpsOkInconnu => parse(schemaReponse, corpsOkInconnu))\n // Réponses inconnues\n .otherwise(e => pipe(e, ErreurInconnue, leveErreur))\n );\n"],"names":["match","P"],"mappings":";;;;;;;AAiEa,MAAA,8BAA8B,CAAC,SAC1C;AAAA,EACE,GAAG,KAAK,KAAK,IAAI,KAAK,YAAY;AAAA,EAClC;AAAA,IACE,aAAa;AAAA,IACb,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,CAAC,eAAe,GAAG,KAAK;AAAA;AAAA,MAExB,GAAI,KAAK,cAAc,EAAE,eAAe,SAAS,KAAK,UAAU,GAAG;AAAA,IACrE;AAAA,IACA,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ,YAAY,QAAQ,GAAI;AAAA,EAAA;AAEpC;AAoBW,MAAA,cAAc,CAAC,SAC1B;AAAA,EACE,KAAK;AAAA,EACL;AAAA,IACE,MAAM,KAAK;AAAA,IACX,aAAa;AAAA,IACb,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,CAAC,eAAe,GAAG,KAAK;AAAA;AAAA,MAExB,GAAI,KAAK,cAAc,EAAE,eAAe,SAAS,KAAK,UAAU,GAAG;AAAA,IACrE;AAAA,IACA,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ,YAAY,QAAQ,GAAI;AAAA,EAAA;AAEpC;AAIW,MAAA,uCAAuC,CAClD,cACA,kBAEAA,EAAM,YAAY,EAEf,KAAK,EAAE,MAAMC,EAAE,OAAO,GAAG,QAAQ,IAAO,GAAA,YAAY,mBAAmB,EACvE,KAAK,EAAE,MAAMA,EAAE,UAAU,QAAQ,IAAA,GAAO,YAAY,qBAAqB,EACzE,KAAK,EAAE,MAAMA,EAAE,OAAA,GAAU,QAAQ,IAAI,GAAG,YAAY,iBAAiB,EAErE,KAAKA,EAAE,GAAG,CAAkB,mBAAA,MAAS,eAAe,cAAc,CAAC,EAEnE,UAAU,CAAA,MAAK,KAAK,GAAG,gBAAgB,UAAwB,CAAC;"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-bouton-panier.js b/web/app/themes/haiku-atelier-2024/assets/js/scripts-bouton-panier.js index cf7bb1c8..d348ad83 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-bouton-panier.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-bouton-panier.js @@ -4,16 +4,18 @@ import { r as recupereElementOuLeve } from "./dom2.js"; import { v as valideMessageMajBoutonPanier } from "./messages.js"; import { r as recupereElementDocumentEither } from "./utils.js"; import { p as pipe } from "./pipe.XPB0wEfw.js"; -import "./erreurs.js"; +import "./erreurs2.js"; import "./exports.3IcOsN8u.js"; import "./Either.wHNxn7Os.js"; -import "./index.DKC_Jv5v.js"; +import "./index.DxUTT09Y.js"; +import "./erreurs3.js"; import "./messages2.js"; import "./cart.js"; import "./cart2.js"; import "./adresses.js"; import "./cart-coupons.js"; import "./couts-livraison.js"; +import "./validation.js"; const initialiseBoutonPanier = () => { const BOUTON_PANIER = pipe( recupereElementDocumentEither(SELECTEUR_BOUTON_PANIER), diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-bouton-panier.js.map b/web/app/themes/haiku-atelier-2024/assets/js/scripts-bouton-panier.js.map index cffb20c1..6ae6a48b 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-bouton-panier.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-bouton-panier.js.map @@ -1 +1 @@ -{"version":3,"file":"scripts-bouton-panier.js","sources":["../../src/scripts/scripts-bouton-panier.ts"],"sourcesContent":["/**\n * Scripts pour la mise à jour trans-fenêtres/trans-onglets du Bouton du Panier.\n */\n\nimport { pipe } from \"@mobily/ts-belt\";\n\nimport type { MessageMajBoutonPanier } from \"./lib/types/messages\";\n\nimport { ATTRIBUT_CONTIENT_ARTICLES, SELECTEUR_BOUTON_PANIER } from \"./constantes/dom.ts\";\nimport { NOM_CANAL_BOUTON_PANIER } from \"./constantes/messages.ts\";\nimport { recupereElementOuLeve } from \"./lib/dom.ts\";\nimport { valideMessageMajBoutonPanier } from \"./lib/messages.ts\";\nimport { recupereElementDocumentEither } from \"./lib/utils.ts\";\n\nconst initialiseBoutonPanier = (): void => {\n /** Le « Bouton » vers le Panier dont le texte est un indicateur du nombre de Produits dedans. */\n const BOUTON_PANIER: HTMLAnchorElement = pipe(\n recupereElementDocumentEither(SELECTEUR_BOUTON_PANIER),\n recupereElementOuLeve,\n );\n const CANAL_BOUTON_PANIER: BroadcastChannel = new BroadcastChannel(NOM_CANAL_BOUTON_PANIER);\n\n CANAL_BOUTON_PANIER.onmessage = (evenementMessage: MessageEvent): void => {\n valideMessageMajBoutonPanier(evenementMessage)\n // Met à jour le Bouton du Panier\n .ifRight((message: MessageMajBoutonPanier) => {\n BOUTON_PANIER.textContent = `cart (${String(message.donnees.quantiteProduits)})`;\n BOUTON_PANIER.setAttribute(ATTRIBUT_CONTIENT_ARTICLES, String(message.donnees.quantiteProduits > 0));\n });\n };\n\n // Ferme le BroadcastChannel à la fermeture de la page\n document.addEventListener(\"visibilitychange\", (): void => {\n CANAL_BOUTON_PANIER.close();\n });\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n initialiseBoutonPanier();\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAcA,MAAM,yBAAyB,MAAY;AAEzC,QAAM,gBAAmC;AAAA,IACvC,8BAAiD,uBAAuB;AAAA,IACxE;AAAA,EACF;AACM,QAAA,sBAAwC,IAAI,iBAAiB,uBAAuB;AAEtE,sBAAA,YAAY,CAAC,qBAAkD;AACjF,iCAA6B,gBAAgB,EAE1C,QAAQ,CAAC,YAAoC;AAC5C,oBAAc,cAAc,SAAS,OAAO,QAAQ,QAAQ,gBAAgB,CAAC;AAC7E,oBAAc,aAAa,4BAA4B,OAAO,QAAQ,QAAQ,mBAAmB,CAAC,CAAC;AAAA,IAAA,CACpG;AAAA,EACL;AAGS,WAAA,iBAAiB,oBAAoB,MAAY;AACxD,wBAAoB,MAAM;AAAA,EAAA,CAC3B;AACH;AAEA,SAAS,iBAAiB,oBAAoB,MAAM;AAC3B,yBAAA;AACzB,CAAC;"} \ No newline at end of file +{"version":3,"file":"scripts-bouton-panier.js","sources":["../../src/scripts/scripts-bouton-panier.ts"],"sourcesContent":["/**\n * Scripts pour la mise à jour trans-fenêtres/trans-onglets du Bouton du Panier.\n */\n\nimport { pipe } from \"@mobily/ts-belt\";\n\nimport type { MessageMajBoutonPanier } from \"./lib/types/messages\";\n\nimport { ATTRIBUT_CONTIENT_ARTICLES, SELECTEUR_BOUTON_PANIER } from \"./constantes/dom.ts\";\nimport { NOM_CANAL_BOUTON_PANIER } from \"./constantes/messages.ts\";\nimport { recupereElementOuLeve } from \"./lib/dom.ts\";\nimport { valideMessageMajBoutonPanier } from \"./lib/messages.ts\";\nimport { recupereElementDocumentEither } from \"./lib/utils.ts\";\n\nconst initialiseBoutonPanier = (): void => {\n /** Le « Bouton » vers le Panier dont le texte est un indicateur du nombre de Produits dedans. */\n const BOUTON_PANIER: HTMLAnchorElement = pipe(\n recupereElementDocumentEither(SELECTEUR_BOUTON_PANIER),\n recupereElementOuLeve,\n );\n const CANAL_BOUTON_PANIER: BroadcastChannel = new BroadcastChannel(NOM_CANAL_BOUTON_PANIER);\n\n CANAL_BOUTON_PANIER.onmessage = (evenementMessage: MessageEvent): void => {\n valideMessageMajBoutonPanier(evenementMessage)\n // Met à jour le Bouton du Panier\n .ifRight((message: MessageMajBoutonPanier) => {\n BOUTON_PANIER.textContent = `cart (${String(message.donnees.quantiteProduits)})`;\n BOUTON_PANIER.setAttribute(ATTRIBUT_CONTIENT_ARTICLES, String(message.donnees.quantiteProduits > 0));\n });\n };\n\n // Ferme le BroadcastChannel à la fermeture de la page\n document.addEventListener(\"visibilitychange\", (): void => {\n CANAL_BOUTON_PANIER.close();\n });\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n initialiseBoutonPanier();\n});\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAcA,MAAM,yBAAyB,MAAY;AAEzC,QAAM,gBAAmC;AAAA,IACvC,8BAAiD,uBAAuB;AAAA,IACxE;AAAA,EACF;AACM,QAAA,sBAAwC,IAAI,iBAAiB,uBAAuB;AAEtE,sBAAA,YAAY,CAAC,qBAAkD;AACjF,iCAA6B,gBAAgB,EAE1C,QAAQ,CAAC,YAAoC;AAC5C,oBAAc,cAAc,SAAS,OAAO,QAAQ,QAAQ,gBAAgB,CAAC;AAC7E,oBAAc,aAAa,4BAA4B,OAAO,QAAQ,QAAQ,mBAAmB,CAAC,CAAC;AAAA,IAAA,CACpG;AAAA,EACL;AAGS,WAAA,iBAAiB,oBAAoB,MAAY;AACxD,wBAAoB,MAAM;AAAA,EAAA,CAC3B;AACH;AAEA,SAAS,iBAAiB,oBAAoB,MAAM;AAC3B,yBAAA;AACzB,CAAC;"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-menu-categories.js b/web/app/themes/haiku-atelier-2024/assets/js/scripts-menu-categories.js index c4db96d2..0c8b633f 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-menu-categories.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-menu-categories.js @@ -2,7 +2,7 @@ import { z } from "./index.CeK6pfoJ.js"; import { a as SELECTEUR_MENU_CATEGORIES_PRODUITS, b as SELECTEUR_ENTREE_MENU_CATEGORIES_PRODUITS } from "./dom.js"; import { a as recupereElementDansDocumentOuLeve, b as recupereElementsDansDocumentOuLeve } from "./utils.js"; import { R as Ra } from "./dom2.js"; -import "./erreurs.js"; +import "./erreurs2.js"; import "./exports.3IcOsN8u.js"; import "./pipe.XPB0wEfw.js"; import "./Either.wHNxn7Os.js"; diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-menu-mobile.js b/web/app/themes/haiku-atelier-2024/assets/js/scripts-menu-mobile.js index f9a88d77..37ff833b 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-menu-mobile.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-menu-mobile.js @@ -1,10 +1,10 @@ var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); -import { Z as SELECTEUR_BOUTON_MENU_MOBILE, _ as SELECTEUR_MENU_MOBILE, $ as ATTRIBUT_MENU_MOBILE_ACTIVE } from "./dom.js"; +import { $ as SELECTEUR_BOUTON_MENU_MOBILE, a0 as SELECTEUR_MENU_MOBILE, a1 as ATTRIBUT_MENU_MOBILE_ACTIVE } from "./dom.js"; import { a as recupereElementDansDocumentOuLeve } from "./utils.js"; import "./dom2.js"; -import "./erreurs.js"; +import "./erreurs2.js"; import "./exports.3IcOsN8u.js"; import "./pipe.XPB0wEfw.js"; import "./Either.wHNxn7Os.js"; diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-a-propos.js b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-a-propos.js index 46846f98..696afe9b 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-a-propos.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-a-propos.js @@ -1,9 +1,9 @@ -import { a0 as ATTRIBUT_ID_ENSEMBLE_EPINGLE_BOITE, a1 as ATTRIBUT_ENSEMBLE_EPINGLE_BOITE_ACTIF, a2 as CLASS_BOUTON_FERMETURE_BOITE_TEXTE, a3 as CLASS_EPINGLE, a4 as SELECTEUR_CONTENEUR_STORYTELLING_A_PROPOS, a5 as SELECTEUR_EPINGLE, a6 as SELECTEUR_BOITE_TEXTE } from "./dom.js"; +import { a2 as ATTRIBUT_ID_ENSEMBLE_EPINGLE_BOITE, a3 as ATTRIBUT_ENSEMBLE_EPINGLE_BOITE_ACTIF, a4 as CLASS_BOUTON_FERMETURE_BOITE_TEXTE, a5 as CLASS_EPINGLE, a6 as SELECTEUR_CONTENEUR_STORYTELLING_A_PROPOS, a7 as SELECTEUR_EPINGLE, a8 as SELECTEUR_BOITE_TEXTE } from "./dom.js"; import { a as recupereElementDansDocumentOuLeve, b as recupereElementsDansDocumentOuLeve } from "./utils.js"; import { k as some, q as reduceU, w as nullable_to_opt, v as valFromOption, g as equal, x as concat, R as Ra } from "./dom2.js"; import { p as pipe } from "./pipe.XPB0wEfw.js"; import { _ as _1, i as is_extension, c as create, g as getExn, b as getWithDefault$1, d as isNone, a as isSome, f as flatMap$1, e as mapU, h as flatMapU, m as mapWithDefaultU } from "./belt_Option-91f3b350.cBye8bLJ.js"; -import "./erreurs.js"; +import "./erreurs2.js"; import "./exports.3IcOsN8u.js"; import "./Either.wHNxn7Os.js"; var t = create("Promise.JsError"); diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-accueil.js b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-accueil.js index 2b65150a..de8e2200 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-accueil.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-accueil.js @@ -2,7 +2,7 @@ import { c as SELECTEUR_CONTENEUR_STORYTELLING, d as SELECTEUR_IMAGES_STORYTELLI import { e as estEntreDeuxNombres } from "./nombres.js"; import { a as recupereElementDansDocumentOuLeve, b as recupereElementsDansDocumentOuLeve } from "./utils.js"; import "./dom2.js"; -import "./erreurs.js"; +import "./erreurs2.js"; import "./exports.3IcOsN8u.js"; import "./pipe.XPB0wEfw.js"; import "./Either.wHNxn7Os.js"; diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-boutique.js b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-boutique.js index 8f8f24b0..6a92ea18 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-boutique.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-boutique.js @@ -1,9 +1,9 @@ import { z, N } from "./index.CeK6pfoJ.js"; -import { p as parse } from "./index.DKC_Jv5v.js"; +import { p as parse } from "./index.DxUTT09Y.js"; import { R as ROUTE_API_NOUVELLE_PRODUCTS } from "./api.js"; import { g as SELECTEUR_BOUTON_PLUS_PRODUITS, h as SELECTEUR_GRILLE_PRODUITS, i as ATTRIBUT_ID_CATEGORIE_PRODUITS, j as ATTRIBUT_PAGE, k as ATTRIBUT_HIDDEN } from "./dom.js"; import { h as html } from "./dom2.js"; -import { l as leveServerError } from "./erreurs.js"; +import { l as leveServerError } from "./erreurs2.js"; import { e as estReponse500 } from "./gardes.js"; import { g as getBackendAvecParametresUrl, t as traiteReponseBackendWCSelonCodesHTTP } from "./reseau.js"; import { W as WCV3ProductsArgsSchema, a as WCV3ProductsSchema } from "./products.js"; @@ -13,7 +13,7 @@ import { p as pipe } from "./pipe.XPB0wEfw.js"; import { t as tap } from "./index-0eef19ec.DoJSf22Z.js"; import { E as Either } from "./Either.wHNxn7Os.js"; import "./exports.3IcOsN8u.js"; -import "./erreurs2.js"; +import "./erreurs3.js"; import "./products2.js"; import "./belt_Option-91f3b350.cBye8bLJ.js"; const ETATS_PAGE = _etats; diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-code-promo.js b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-code-promo.js index d01c0e97..af410df8 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-code-promo.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-code-promo.js @@ -1,10 +1,13 @@ import { z, N } from "./index.CeK6pfoJ.js"; -import { V as ValiError } from "./index.DKC_Jv5v.js"; +import { V as ValiError } from "./index.DxUTT09Y.js"; import { e as ROUTE_API_APPLIQUE_COUPON, f as ROUTE_API_RETIRE_COUPON } from "./api.js"; -import { B as SELECTEUR_BOUTON_CODE_PROMO, z as SELECTEUR_CHAMP_CODE_PROMO, y as SELECTEUR_ENSEMBLE_CODE_PROMO, q as SELECTEUR_TOTAL_PANIER, v as SELECTEUR_TOTAL_REDUCTION, w as SELECTEUR_TOTAL_REDUCTION_VALEUR, I as ATTRIBUT_DESACTIVE, J as ATTRIBUT_CODE_PROMO_PRESENT, k as ATTRIBUT_HIDDEN } from "./dom.js"; +import { E as SELECTEUR_BOUTON_CODE_PROMO, F as SELECTEUR_CHAMP_CODE_PROMO, G as SELECTEUR_ENSEMBLE_CODE_PROMO, H as SELECTEUR_MESSAGE_CODE_PROMO, q as SELECTEUR_TOTAL_PANIER, I as SELECTEUR_TOTAL_REDUCTION, J as SELECTEUR_TOTAL_REDUCTION_VALEUR, D as ATTRIBUT_DESACTIVE, K as ATTRIBUT_CHARGEMENT, L as ATTRIBUT_CODE_PROMO_PRESENT, k as ATTRIBUT_HIDDEN } from "./dom.js"; +import { E as ERREUR_CODE_PROMO_INVALIDE } from "./erreurs.js"; import { d as correspondCibleSelecteur, i as identity } from "./dom2.js"; -import { S as ServerError } from "./erreurs.js"; +import { S as ServerError } from "./erreurs2.js"; +import { E as ErreurCodePromoInvalide } from "./codes-promo.js"; import { e as estReponse500 } from "./gardes.js"; +import { r as reponseEstCodeErreurWC } from "./messages.js"; import { p as postBackend } from "./reseau.js"; import { W as WCStoreCartSchema } from "./cart.js"; import { W as WCStoreCartApplyCouponArgsSchema } from "./cart-apply-coupon.js"; @@ -15,7 +18,9 @@ import { E as EitherAsync } from "./MaybeAsync.AE1jnxuc.js"; import { p as pipe } from "./pipe.XPB0wEfw.js"; import { M as Maybe } from "./Either.wHNxn7Os.js"; import "./exports.3IcOsN8u.js"; -import "./erreurs2.js"; +import "./messages3.js"; +import "./erreurs3.js"; +import "./messages2.js"; import "./cart2.js"; import "./adresses.js"; import "./cart-coupons.js"; @@ -25,80 +30,145 @@ const ELEMENTS = { BOUTON_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_CODE_PROMO), CHAMP_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_CHAMP_CODE_PROMO), ENSEMBLE_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_ENSEMBLE_CODE_PROMO), + MESSAGE_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_MESSAGE_CODE_PROMO), TOTAL_PANIER: recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_PANIER), TOTAL_REDUCTION_LIGNE: recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION), TOTAL_REDUCTION_VALEUR: recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION_VALEUR) }; const initialiseElementsCodePromo = () => { - const recupereCodePromoValeur = () => Maybe.fromFalsy(ELEMENTS.CHAMP_CODE_PROMO.value.trim()).extractNullable(); - const recupereCodePromoPresent = () => ELEMENTS.ENSEMBLE_CODE_PROMO.hasAttribute(ATTRIBUT_CODE_PROMO_PRESENT); - ELEMENTS.ENSEMBLE_CODE_PROMO.addEventListener( - "click", - (evenement) => z({ - cible: evenement.target, - codePromoPresent: recupereCodePromoPresent(), - codePromoValeur: recupereCodePromoValeur() - }).with( - { - cible: N.when((cible) => correspondCibleSelecteur(cible, SELECTEUR_BOUTON_CODE_PROMO)), - codePromoPresent: false, - codePromoValeur: N.string - }, - ({ codePromoValeur }) => void EitherAsync.liftEither(eitherParse({ code: codePromoValeur }, WCStoreCartApplyCouponArgsSchema)).map( - (args) => postBackend({ - corps: JSON.stringify(args), - nonce: ETATS_PAGE.nonce, - route: ROUTE_API_APPLIQUE_COUPON - }) - ).chain( - (reponse) => EitherAsync(async ({ throwE }) => { - if (estReponse500(reponse)) throwE(new ServerError("500 Server Error")); - return await reponse.json(); - }) - ).chain((corpsReponse) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema))).ifRight((panier) => { - const totalReduction = pipe(Number(panier.totals.total_discount) / 100, String, (v) => `-${v}€`); - const totalPanier = pipe(Number(panier.totals.total_price) / 100, String, (v) => `${v}€`); - ELEMENTS.BOUTON_CODE_PROMO.textContent = "Remove"; - ELEMENTS.CHAMP_CODE_PROMO.toggleAttribute(ATTRIBUT_DESACTIVE); - ELEMENTS.CHAMP_CODE_PROMO.value = panier.coupons[0]?.code ?? ""; - ELEMENTS.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT); - ELEMENTS.TOTAL_PANIER.textContent = totalPanier; - ELEMENTS.TOTAL_REDUCTION_LIGNE.toggleAttribute(ATTRIBUT_HIDDEN); - ELEMENTS.TOTAL_REDUCTION_VALEUR.textContent = totalReduction; - }).ifLeft( - (erreur) => z(erreur).with(N.instanceOf(ValiError), (e) => console.error("retour ajout code promo", e.issues)).with(N.instanceOf(ServerError), (e) => console.error("retour ajout code promo", e)).with(N.instanceOf(TypeError), (e) => console.error("retour ajout code promo", e)).exhaustive() - ).run() - ).with( - { - cible: N.when((cible) => correspondCibleSelecteur(cible, SELECTEUR_BOUTON_CODE_PROMO)), - codePromoPresent: true, - codePromoValeur: N.string - }, - ({ codePromoValeur }) => void EitherAsync.liftEither(eitherParse({ code: codePromoValeur }, WCStoreCartRemoveCouponArgsSchema)).map( - (args) => postBackend({ - corps: JSON.stringify(args), - nonce: ETATS_PAGE.nonce, - route: ROUTE_API_RETIRE_COUPON - }) - ).chain( - (reponse) => EitherAsync(async ({ throwE }) => { - if (estReponse500(reponse)) throwE(new ServerError("500 server Error")); - return await reponse.json(); - }) - ).chain((corpsReponse) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema))).ifRight((panier) => { - const totalPanier = pipe(Number(panier.totals.total_price) / 100, String, (v) => `${v}€`); - ELEMENTS.BOUTON_CODE_PROMO.textContent = "Apply"; - ELEMENTS.CHAMP_CODE_PROMO.toggleAttribute(ATTRIBUT_DESACTIVE); - ELEMENTS.CHAMP_CODE_PROMO.value = ""; - ELEMENTS.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT); - ELEMENTS.TOTAL_PANIER.textContent = totalPanier; - ELEMENTS.TOTAL_REDUCTION_LIGNE.toggleAttribute(ATTRIBUT_HIDDEN); - ELEMENTS.TOTAL_REDUCTION_VALEUR.textContent = "-0€"; - }).ifLeft( - (erreur) => z(erreur).with(N.instanceOf(ValiError), (e) => console.error("retour ajout code promo", e.issues)).with(N.instanceOf(ServerError), (e) => console.error("retour ajout code promo", e)).with(N.instanceOf(TypeError), (e) => console.error("retour ajout code promo", e)).exhaustive() - ).run() - ).with(N._, identity) - ); + const recupereValeurCodePromo = () => Maybe.fromFalsy(ELEMENTS.CHAMP_CODE_PROMO.value.trim()).extractNullable(); + const recuperePresenceCodePromo = () => ELEMENTS.ENSEMBLE_CODE_PROMO.hasAttribute(ATTRIBUT_CODE_PROMO_PRESENT); + ELEMENTS.ENSEMBLE_CODE_PROMO.addEventListener("click", (evenement) => z({ + cible: evenement.target, + codePromoPresent: recuperePresenceCodePromo(), + valeurCodePromo: recupereValeurCodePromo() + }).with( + { + cible: N.when( + (cible) => correspondCibleSelecteur(cible, SELECTEUR_BOUTON_CODE_PROMO) + ), + codePromoPresent: false, + valeurCodePromo: N.string + }, + ({ valeurCodePromo }) => void EitherAsync.liftEither(eitherParse({ code: valeurCodePromo }, WCStoreCartApplyCouponArgsSchema)).ifRight(() => { + ELEMENTS.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_DESACTIVE, ""); + ELEMENTS.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_CHARGEMENT, ""); + ELEMENTS.MESSAGE_CODE_PROMO.textContent = ""; + const animation = { + callback: () => { + if (!ELEMENTS.BOUTON_CODE_PROMO.hasAttribute(ATTRIBUT_CHARGEMENT)) { + clearInterval(animation.interval); + return; + } + ELEMENTS.BOUTON_CODE_PROMO.textContent = animation.etapes.at(animation.index) ?? "Loading..."; + animation.index = animation.index + 1 > animation.etapes.length - 1 ? 0 : animation.index + 1; + }, + etapes: [ + "Loading", + "Loading.", + "Loading..", + "Loading..." + ], + index: 0, + interval: 0 + }; + animation.callback(); + animation.interval = setInterval(animation.callback, 500); + }).map( + (args) => postBackend({ + corps: JSON.stringify(args), + nonce: ETATS_PAGE.nonce, + route: ROUTE_API_APPLIQUE_COUPON + }) + ).chain( + (reponse) => EitherAsync(async ({ throwE }) => { + if (estReponse500(reponse)) throwE(new ServerError("500 Server Error")); + const reponseSimplifiee = { + body: await reponse.json(), + status: reponse.status + }; + return z(reponseSimplifiee).with({ + body: N.when(() => reponseEstCodeErreurWC(reponseSimplifiee, ERREUR_CODE_PROMO_INVALIDE)), + status: 400 + }, () => throwE(new ErreurCodePromoInvalide(recupereValeurCodePromo() ?? ""))).with({ status: 200 }, () => reponseSimplifiee.body).run(); + }) + ).chain((corpsReponse) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema))).ifRight((panier) => { + const totalReduction = pipe(Number(panier.totals.total_discount) / 100, String, (v) => `-${v}€`); + const totalPanier = pipe(Number(panier.totals.total_price) / 100, String, (v) => `${v}€`); + ELEMENTS.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT); + ELEMENTS.CHAMP_CODE_PROMO.toggleAttribute(ATTRIBUT_DESACTIVE); + ELEMENTS.CHAMP_CODE_PROMO.value = panier.coupons[0]?.code ?? ""; + ELEMENTS.BOUTON_CODE_PROMO.textContent = "Remove"; + ELEMENTS.TOTAL_PANIER.textContent = totalPanier; + ELEMENTS.TOTAL_REDUCTION_LIGNE.toggleAttribute(ATTRIBUT_HIDDEN); + ELEMENTS.TOTAL_REDUCTION_VALEUR.textContent = totalReduction; + }).ifLeft((erreur) => { + ELEMENTS.BOUTON_CODE_PROMO.textContent = "Apply"; + z(erreur).with(N.instanceOf(ValiError), (e) => console.error("ValiError", e.issues)).with(N.instanceOf(ErreurCodePromoInvalide), (e) => { + ELEMENTS.MESSAGE_CODE_PROMO.textContent = "This promo code does not exist."; + console.error(e); + }).with(N.instanceOf(ServerError), (e) => console.error(e)).with(N.instanceOf(TypeError), (e) => console.error(e)).exhaustive(); + }).finally(() => { + ELEMENTS.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_CHARGEMENT); + ELEMENTS.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_DESACTIVE); + }).run() + ).with( + { + cible: N.when((cible) => correspondCibleSelecteur(cible, SELECTEUR_BOUTON_CODE_PROMO)), + codePromoPresent: true, + valeurCodePromo: N.string + }, + ({ valeurCodePromo }) => void EitherAsync.liftEither(eitherParse({ code: valeurCodePromo }, WCStoreCartRemoveCouponArgsSchema)).ifRight(() => { + ELEMENTS.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_DESACTIVE, ""); + ELEMENTS.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_CHARGEMENT, ""); + const animation = { + callback: () => { + if (!ELEMENTS.BOUTON_CODE_PROMO.hasAttribute(ATTRIBUT_CHARGEMENT)) { + clearInterval(animation.interval); + return; + } + ELEMENTS.BOUTON_CODE_PROMO.textContent = animation.etapes.at(animation.index) ?? "Loading..."; + animation.index = animation.index + 1 > animation.etapes.length - 1 ? 0 : animation.index + 1; + }, + etapes: [ + "Loading", + "Loading.", + "Loading..", + "Loading..." + ], + index: 0, + interval: 0 + }; + animation.callback(); + animation.interval = setInterval(animation.callback, 500); + }).map( + (args) => postBackend({ + corps: JSON.stringify(args), + nonce: ETATS_PAGE.nonce, + route: ROUTE_API_RETIRE_COUPON + }) + ).chain( + (reponse) => EitherAsync(async ({ throwE }) => { + if (estReponse500(reponse)) throwE(new ServerError("500 server Error")); + return await reponse.json(); + }) + ).chain((corpsReponse) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema))).ifRight((panier) => { + const totalPanier = pipe(Number(panier.totals.total_price) / 100, String, (v) => `${v}€`); + ELEMENTS.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT); + ELEMENTS.ENSEMBLE_CODE_PROMO.reset(); + ELEMENTS.CHAMP_CODE_PROMO.toggleAttribute(ATTRIBUT_DESACTIVE); + ELEMENTS.CHAMP_CODE_PROMO.textContent = ""; + ELEMENTS.BOUTON_CODE_PROMO.textContent = "Apply"; + ELEMENTS.TOTAL_PANIER.textContent = totalPanier; + ELEMENTS.TOTAL_REDUCTION_LIGNE.toggleAttribute(ATTRIBUT_HIDDEN); + ELEMENTS.TOTAL_REDUCTION_VALEUR.textContent = "-0€"; + }).ifLeft( + (erreur) => z(erreur).with(N.instanceOf(ValiError), (e) => console.error("retour ajout code promo", e.issues)).with(N.instanceOf(ServerError), (e) => console.error("retour ajout code promo", e)).with(N.instanceOf(TypeError), (e) => console.error("retour ajout code promo", e)).exhaustive() + ).finally(() => { + ELEMENTS.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_CHARGEMENT); + ELEMENTS.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_DESACTIVE); + }).run() + ).with(N._, identity)); }; export { initialiseElementsCodePromo as i diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-code-promo.js.map b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-code-promo.js.map index a8d670e7..c8a6dac6 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-code-promo.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-code-promo.js.map @@ -1 +1 @@ -{"version":3,"file":"scripts-page-panier-code-promo.js","sources":["../../src/scripts/scripts-page-panier-code-promo.ts"],"sourcesContent":["/**\n * Scripts pour la gestion des codes promos (coupons) sur la Page Panier.\n */\n\nimport { pipe } from \"@mobily/ts-belt\";\nimport { EitherAsync, identity, Maybe } from \"purify-ts\";\nimport { match, P } from \"ts-pattern\";\nimport { ValiError } from \"valibot\";\n\nimport type { WCStoreCart } from \"./lib/types/api/cart\";\nimport type { WCStoreCartApplyCouponArgs } from \"./lib/types/api/cart-apply-coupon\";\nimport type { WCStoreCartRemoveCouponArgs } from \"./lib/types/api/cart-remove-coupon\";\n\nimport { ROUTE_API_APPLIQUE_COUPON, ROUTE_API_RETIRE_COUPON } from \"./constantes/api\";\nimport {\n ATTRIBUT_CODE_PROMO_PRESENT,\n ATTRIBUT_DESACTIVE,\n ATTRIBUT_HIDDEN,\n SELECTEUR_BOUTON_CODE_PROMO,\n SELECTEUR_CHAMP_CODE_PROMO,\n SELECTEUR_ENSEMBLE_CODE_PROMO,\n SELECTEUR_TOTAL_PANIER,\n SELECTEUR_TOTAL_REDUCTION,\n SELECTEUR_TOTAL_REDUCTION_VALEUR,\n} from \"./constantes/dom\";\nimport { correspondCibleSelecteur } from \"./lib/dom\";\nimport { ServerError } from \"./lib/erreurs\";\nimport { estReponse500 } from \"./lib/gardes\";\nimport { postBackend } from \"./lib/reseau\";\nimport { WCStoreCartSchema } from \"./lib/schemas/api/cart\";\nimport { WCStoreCartApplyCouponArgsSchema } from \"./lib/schemas/api/cart-apply-coupon\";\nimport { WCStoreCartRemoveCouponArgsSchema } from \"./lib/schemas/api/cart-remove-coupon\";\nimport { recupereElementDansDocumentOuLeve } from \"./lib/utils\";\nimport { eitherParse } from \"./lib/validation\";\n\n/** États utiles pour les scripts de la page. */\ntype EtatsPage = {\n authString: string;\n /** Un nonce pour l'authentification de requêtes API vers le backend WooCommerce. */\n nonce: string;\n};\n\n// @ts-expect-error -- États injectés par le modèle PHP\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP\nconst ETATS_PAGE: EtatsPage = _etats;\n\nconst ELEMENTS = {\n BOUTON_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_CODE_PROMO),\n CHAMP_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_CHAMP_CODE_PROMO),\n ENSEMBLE_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_ENSEMBLE_CODE_PROMO),\n TOTAL_PANIER: recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_PANIER),\n TOTAL_REDUCTION_LIGNE: recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION),\n TOTAL_REDUCTION_VALEUR: recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION_VALEUR),\n};\n\nexport const initialiseElementsCodePromo = (): void => {\n // Récupère le code promo s'il existe\n const recupereCodePromoValeur = (): null | string =>\n Maybe.fromFalsy(ELEMENTS.CHAMP_CODE_PROMO.value.trim()).extractNullable();\n const recupereCodePromoPresent = (): boolean =>\n ELEMENTS.ENSEMBLE_CODE_PROMO.hasAttribute(ATTRIBUT_CODE_PROMO_PRESENT);\n\n // Créé la délégation d'Événements\n ELEMENTS.ENSEMBLE_CODE_PROMO.addEventListener(\n \"click\",\n (evenement: Event) =>\n match({\n cible: evenement.target,\n codePromoPresent: recupereCodePromoPresent(),\n codePromoValeur: recupereCodePromoValeur(),\n })\n // Un code promo doit être ajouté\n .with(\n {\n cible: P.when(cible => correspondCibleSelecteur(cible, SELECTEUR_BOUTON_CODE_PROMO)),\n codePromoPresent: false,\n codePromoValeur: P.string,\n },\n ({ codePromoValeur }) =>\n void EitherAsync\n .liftEither(eitherParse({ code: codePromoValeur }, WCStoreCartApplyCouponArgsSchema))\n .map((args: WCStoreCartApplyCouponArgs) =>\n postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_APPLIQUE_COUPON,\n })\n )\n .chain((reponse: Response) =>\n EitherAsync(async ({ throwE }) => {\n if (estReponse500(reponse)) throwE(new ServerError(\"500 Server Error\"));\n return await reponse.json();\n })\n )\n .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema)))\n .ifRight((panier: WCStoreCart) => {\n const totalReduction = pipe(Number(panier.totals.total_discount) / 100, String, v => `-${v}€`);\n const totalPanier = pipe(Number(panier.totals.total_price) / 100, String, v => `${v}€`);\n\n ELEMENTS.BOUTON_CODE_PROMO.textContent = \"Remove\";\n ELEMENTS.CHAMP_CODE_PROMO.toggleAttribute(ATTRIBUT_DESACTIVE);\n ELEMENTS.CHAMP_CODE_PROMO.value = panier.coupons[0]?.code ?? \"\";\n ELEMENTS.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT);\n ELEMENTS.TOTAL_PANIER.textContent = totalPanier;\n ELEMENTS.TOTAL_REDUCTION_LIGNE.toggleAttribute(ATTRIBUT_HIDDEN);\n ELEMENTS.TOTAL_REDUCTION_VALEUR.textContent = totalReduction;\n })\n .ifLeft(erreur =>\n match(erreur)\n .with(P.instanceOf(ValiError), e => console.error(\"retour ajout code promo\", e.issues))\n .with(P.instanceOf(ServerError), e => console.error(\"retour ajout code promo\", e))\n .with(P.instanceOf(TypeError), e => console.error(\"retour ajout code promo\", e))\n .exhaustive()\n )\n .run(),\n )\n // Un code promo doit être retiré\n .with(\n {\n cible: P.when(cible => correspondCibleSelecteur(cible, SELECTEUR_BOUTON_CODE_PROMO)),\n codePromoPresent: true,\n codePromoValeur: P.string,\n },\n ({ codePromoValeur }) =>\n void EitherAsync\n .liftEither(eitherParse({ code: codePromoValeur }, WCStoreCartRemoveCouponArgsSchema))\n .map((args: WCStoreCartRemoveCouponArgs) =>\n postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_RETIRE_COUPON,\n })\n )\n .chain((reponse: Response) =>\n EitherAsync(async ({ throwE }) => {\n if (estReponse500(reponse)) throwE(new ServerError(\"500 server Error\"));\n return await reponse.json();\n })\n )\n .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema)))\n .ifRight((panier: WCStoreCart) => {\n const totalPanier = pipe(Number(panier.totals.total_price) / 100, String, v => `${v}€`);\n\n ELEMENTS.BOUTON_CODE_PROMO.textContent = \"Apply\";\n ELEMENTS.CHAMP_CODE_PROMO.toggleAttribute(ATTRIBUT_DESACTIVE);\n ELEMENTS.CHAMP_CODE_PROMO.value = \"\";\n ELEMENTS.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT);\n ELEMENTS.TOTAL_PANIER.textContent = totalPanier;\n ELEMENTS.TOTAL_REDUCTION_LIGNE.toggleAttribute(ATTRIBUT_HIDDEN);\n ELEMENTS.TOTAL_REDUCTION_VALEUR.textContent = \"-0€\";\n })\n .ifLeft(erreur =>\n match(erreur)\n .with(P.instanceOf(ValiError), e => console.error(\"retour ajout code promo\", e.issues))\n .with(P.instanceOf(ServerError), e => console.error(\"retour ajout code promo\", e))\n .with(P.instanceOf(TypeError), e => console.error(\"retour ajout code promo\", e))\n .exhaustive()\n )\n .run(),\n )\n // Ne rien faire en dehors de ces deux situations\n .with(P._, identity),\n );\n};\n"],"names":["match","P"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA4CA,MAAM,aAAwB;AAE9B,MAAM,WAAW;AAAA,EACf,mBAAmB,kCAAqD,2BAA2B;AAAA,EACnG,kBAAkB,kCAAoD,0BAA0B;AAAA,EAChG,qBAAqB,kCAAkD,6BAA6B;AAAA,EACpG,cAAc,kCAAwD,sBAAsB;AAAA,EAC5F,uBAAuB,kCAAkD,yBAAyB;AAAA,EAClG,wBAAwB,kCAAmD,gCAAgC;AAC7G;AAEO,MAAM,8BAA8B,MAAY;AAE/C,QAAA,0BAA0B,MAC9B,MAAM,UAAU,SAAS,iBAAiB,MAAM,MAAM,EAAE,gBAAgB;AAC1E,QAAM,2BAA2B,MAC/B,SAAS,oBAAoB,aAAa,2BAA2B;AAGvE,WAAS,oBAAoB;AAAA,IAC3B;AAAA,IACA,CAAC,cACCA,EAAM;AAAA,MACJ,OAAO,UAAU;AAAA,MACjB,kBAAkB,yBAAyB;AAAA,MAC3C,iBAAiB,wBAAwB;AAAA,IAC1C,CAAA,EAEE;AAAA,MACC;AAAA,QACE,OAAOC,EAAE,KAAK,WAAS,yBAA4C,OAAO,2BAA2B,CAAC;AAAA,QACtG,kBAAkB;AAAA,QAClB,iBAAiBA,EAAE;AAAA,MACrB;AAAA,MACA,CAAC,EAAE,gBAAgB,MACjB,KAAK,YACF,WAAW,YAAY,EAAE,MAAM,gBAAA,GAAmB,gCAAgC,CAAC,EACnF;AAAA,QAAI,CAAC,SACJ,YAAY;AAAA,UACV,OAAO,KAAK,UAAU,IAAI;AAAA,UAC1B,OAAO,WAAW;AAAA,UAClB,OAAO;AAAA,QACR,CAAA;AAAA,MAAA,EAEF;AAAA,QAAM,CAAC,YACN,YAAkC,OAAO,EAAE,aAAa;AACtD,cAAI,cAAc,OAAO,UAAU,IAAI,YAAY,kBAAkB,CAAC;AAC/D,iBAAA,MAAM,QAAQ,KAAK;AAAA,QAC3B,CAAA;AAAA,MAEF,EAAA,MAAM,CAAC,iBAA0B,YAAY,WAAW,YAAY,cAAc,iBAAiB,CAAC,CAAC,EACrG,QAAQ,CAAC,WAAwB;AAChC,cAAM,iBAAiB,KAAK,OAAO,OAAO,OAAO,cAAc,IAAI,KAAK,QAAQ,CAAA,MAAK,IAAI,CAAC,GAAG;AAC7F,cAAM,cAAc,KAAK,OAAO,OAAO,OAAO,WAAW,IAAI,KAAK,QAAQ,CAAA,MAAK,GAAG,CAAC,GAAG;AAEtF,iBAAS,kBAAkB,cAAc;AAChC,iBAAA,iBAAiB,gBAAgB,kBAAkB;AAC5D,iBAAS,iBAAiB,QAAQ,OAAO,QAAQ,CAAC,GAAG,QAAQ;AACpD,iBAAA,oBAAoB,gBAAgB,2BAA2B;AACxE,iBAAS,aAAa,cAAc;AAC3B,iBAAA,sBAAsB,gBAAgB,eAAe;AAC9D,iBAAS,uBAAuB,cAAc;AAAA,MAC/C,CAAA,EACA;AAAA,QAAO,YACND,EAAM,MAAM,EACT,KAAKC,EAAE,WAAW,SAAS,GAAG,CAAK,MAAA,QAAQ,MAAM,2BAA2B,EAAE,MAAM,CAAC,EACrF,KAAKA,EAAE,WAAW,WAAW,GAAG,OAAK,QAAQ,MAAM,2BAA2B,CAAC,CAAC,EAChF,KAAKA,EAAE,WAAW,SAAS,GAAG,OAAK,QAAQ,MAAM,2BAA2B,CAAC,CAAC,EAC9E,WAAW;AAAA,MAAA,EAEf,IAAI;AAAA,IAAA,EAGV;AAAA,MACC;AAAA,QACE,OAAOA,EAAE,KAAK,WAAS,yBAA4C,OAAO,2BAA2B,CAAC;AAAA,QACtG,kBAAkB;AAAA,QAClB,iBAAiBA,EAAE;AAAA,MACrB;AAAA,MACA,CAAC,EAAE,gBAAgB,MACjB,KAAK,YACF,WAAW,YAAY,EAAE,MAAM,gBAAA,GAAmB,iCAAiC,CAAC,EACpF;AAAA,QAAI,CAAC,SACJ,YAAY;AAAA,UACV,OAAO,KAAK,UAAU,IAAI;AAAA,UAC1B,OAAO,WAAW;AAAA,UAClB,OAAO;AAAA,QACR,CAAA;AAAA,MAAA,EAEF;AAAA,QAAM,CAAC,YACN,YAAkC,OAAO,EAAE,aAAa;AACtD,cAAI,cAAc,OAAO,UAAU,IAAI,YAAY,kBAAkB,CAAC;AAC/D,iBAAA,MAAM,QAAQ,KAAK;AAAA,QAC3B,CAAA;AAAA,MAEF,EAAA,MAAM,CAAC,iBAA0B,YAAY,WAAW,YAAY,cAAc,iBAAiB,CAAC,CAAC,EACrG,QAAQ,CAAC,WAAwB;AAChC,cAAM,cAAc,KAAK,OAAO,OAAO,OAAO,WAAW,IAAI,KAAK,QAAQ,CAAA,MAAK,GAAG,CAAC,GAAG;AAEtF,iBAAS,kBAAkB,cAAc;AAChC,iBAAA,iBAAiB,gBAAgB,kBAAkB;AAC5D,iBAAS,iBAAiB,QAAQ;AACzB,iBAAA,oBAAoB,gBAAgB,2BAA2B;AACxE,iBAAS,aAAa,cAAc;AAC3B,iBAAA,sBAAsB,gBAAgB,eAAe;AAC9D,iBAAS,uBAAuB,cAAc;AAAA,MAC/C,CAAA,EACA;AAAA,QAAO,YACND,EAAM,MAAM,EACT,KAAKC,EAAE,WAAW,SAAS,GAAG,CAAK,MAAA,QAAQ,MAAM,2BAA2B,EAAE,MAAM,CAAC,EACrF,KAAKA,EAAE,WAAW,WAAW,GAAG,OAAK,QAAQ,MAAM,2BAA2B,CAAC,CAAC,EAChF,KAAKA,EAAE,WAAW,SAAS,GAAG,OAAK,QAAQ,MAAM,2BAA2B,CAAC,CAAC,EAC9E,WAAW;AAAA,MAAA,EAEf,IAAI;AAAA,IAAA,EAGV,KAAKA,EAAE,GAAG,QAAQ;AAAA,EACzB;AACF;"} \ No newline at end of file +{"version":3,"file":"scripts-page-panier-code-promo.js","sources":["../../src/scripts/scripts-page-panier-code-promo.ts"],"sourcesContent":["/**\n * Scripts pour la gestion des codes promos (coupons) sur la Page Panier.\n */\n\nimport { pipe } from \"@mobily/ts-belt\";\nimport { EitherAsync, identity, Maybe } from \"purify-ts\";\nimport { match, P } from \"ts-pattern\";\nimport { ValiError } from \"valibot\";\n\nimport type { WCStoreCart } from \"./lib/types/api/cart\";\nimport type { WCStoreCartApplyCouponArgs } from \"./lib/types/api/cart-apply-coupon\";\nimport type { WCStoreCartRemoveCouponArgs } from \"./lib/types/api/cart-remove-coupon\";\nimport type { ReponseSimplifiee } from \"./lib/types/reseau\";\n\nimport { ROUTE_API_APPLIQUE_COUPON, ROUTE_API_RETIRE_COUPON } from \"./constantes/api\";\nimport {\n ATTRIBUT_CHARGEMENT,\n ATTRIBUT_CODE_PROMO_PRESENT,\n ATTRIBUT_DESACTIVE,\n ATTRIBUT_HIDDEN,\n SELECTEUR_BOUTON_CODE_PROMO,\n SELECTEUR_CHAMP_CODE_PROMO,\n SELECTEUR_ENSEMBLE_CODE_PROMO,\n SELECTEUR_MESSAGE_CODE_PROMO,\n SELECTEUR_TOTAL_PANIER,\n SELECTEUR_TOTAL_REDUCTION,\n SELECTEUR_TOTAL_REDUCTION_VALEUR,\n} from \"./constantes/dom\";\nimport { ERREUR_CODE_PROMO_INVALIDE } from \"./constantes/erreurs\";\nimport { correspondCibleSelecteur } from \"./lib/dom\";\nimport { ServerError } from \"./lib/erreurs\";\nimport { ErreurCodePromoInvalide } from \"./lib/erreurs/codes-promo\";\nimport { estReponse500 } from \"./lib/gardes\";\nimport { reponseEstCodeErreurWC } from \"./lib/messages\";\nimport { postBackend } from \"./lib/reseau\";\nimport { WCStoreCartSchema } from \"./lib/schemas/api/cart\";\nimport { WCStoreCartApplyCouponArgsSchema } from \"./lib/schemas/api/cart-apply-coupon\";\nimport { WCStoreCartRemoveCouponArgsSchema } from \"./lib/schemas/api/cart-remove-coupon\";\nimport { recupereElementDansDocumentOuLeve } from \"./lib/utils\";\nimport { eitherParse } from \"./lib/validation\";\n\n/** États utiles pour les scripts de la page. */\ntype EtatsPage = {\n authString: string;\n /** Un nonce pour l'authentification de requêtes API vers le backend WooCommerce. */\n nonce: string;\n};\n\n// @ts-expect-error -- États injectés par le modèle PHP\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP\nconst ETATS_PAGE: EtatsPage = _etats;\n\nconst ELEMENTS = {\n BOUTON_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_CODE_PROMO),\n CHAMP_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_CHAMP_CODE_PROMO),\n ENSEMBLE_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_ENSEMBLE_CODE_PROMO),\n MESSAGE_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_MESSAGE_CODE_PROMO),\n TOTAL_PANIER: recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_PANIER),\n TOTAL_REDUCTION_LIGNE: recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION),\n TOTAL_REDUCTION_VALEUR: recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION_VALEUR),\n};\n\nexport const initialiseElementsCodePromo = (): void => {\n // Récupère le code promo s'il existe\n const recupereValeurCodePromo = (): null | string =>\n Maybe.fromFalsy(ELEMENTS.CHAMP_CODE_PROMO.value.trim()).extractNullable();\n const recuperePresenceCodePromo = (): boolean =>\n ELEMENTS.ENSEMBLE_CODE_PROMO.hasAttribute(ATTRIBUT_CODE_PROMO_PRESENT);\n\n // Créé la délégation d'Événements\n ELEMENTS.ENSEMBLE_CODE_PROMO.addEventListener(\"click\", (evenement: Event) =>\n match({\n cible: evenement.target,\n codePromoPresent: recuperePresenceCodePromo(),\n valeurCodePromo: recupereValeurCodePromo(),\n })\n // Un code promo doit être ajouté\n .with(\n {\n cible: P.when((cible: EventTarget | null) =>\n correspondCibleSelecteur(cible, SELECTEUR_BOUTON_CODE_PROMO)\n ),\n codePromoPresent: false,\n valeurCodePromo: P.string,\n },\n ({ valeurCodePromo }) =>\n void EitherAsync\n .liftEither(eitherParse({ code: valeurCodePromo }, WCStoreCartApplyCouponArgsSchema))\n .ifRight(() => {\n // Désactive le Bouton pour empêcher des requêtes concurrentes\n ELEMENTS.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n ELEMENTS.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_CHARGEMENT, \"\");\n ELEMENTS.MESSAGE_CODE_PROMO.textContent = \"\";\n\n // Lance un cycle d'animation sur le texte de chargement\n const animation = {\n callback: () => {\n if (!ELEMENTS.BOUTON_CODE_PROMO.hasAttribute(ATTRIBUT_CHARGEMENT)) {\n clearInterval(animation.interval);\n return;\n }\n\n ELEMENTS.BOUTON_CODE_PROMO.textContent = animation.etapes.at(animation.index)\n ?? \"Loading...\";\n animation.index = animation.index + 1 > animation.etapes.length - 1 ? 0 : animation.index + 1;\n },\n etapes: [\n \"Loading\",\n \"Loading.\",\n \"Loading..\",\n \"Loading...\",\n ],\n index: 0,\n interval: 0,\n };\n animation.callback();\n animation.interval = setInterval(animation.callback, 500);\n })\n // Réalise la requête auprès du backend\n .map((args: WCStoreCartApplyCouponArgs) =>\n postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_APPLIQUE_COUPON,\n })\n )\n // Traite les cas d'Erreur\n .chain((reponse: Response) =>\n EitherAsync(async ({ throwE }) => {\n if (estReponse500(reponse)) throwE(new ServerError(\"500 Server Error\"));\n\n const reponseSimplifiee: ReponseSimplifiee = {\n body: await reponse.json(),\n status: reponse.status,\n };\n\n return match(reponseSimplifiee)\n .with({\n body: P.when(() => reponseEstCodeErreurWC(reponseSimplifiee, ERREUR_CODE_PROMO_INVALIDE)),\n status: 400,\n }, () => throwE(new ErreurCodePromoInvalide(recupereValeurCodePromo() ?? \"\")))\n .with({ status: 200 }, () => reponseSimplifiee.body)\n .run();\n })\n )\n // Vérifie le Schéma de la Réponse du backend\n .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema)))\n // Déclenche les mises à jour du DOM avec les données du nouveau Panier\n .ifRight((panier: WCStoreCart) => {\n const totalReduction = pipe(Number(panier.totals.total_discount) / 100, String, v => `-${v}€`);\n const totalPanier = pipe(Number(panier.totals.total_price) / 100, String, v => `${v}€`);\n\n ELEMENTS.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT);\n ELEMENTS.CHAMP_CODE_PROMO.toggleAttribute(ATTRIBUT_DESACTIVE);\n ELEMENTS.CHAMP_CODE_PROMO.value = panier.coupons[0]?.code ?? \"\";\n ELEMENTS.BOUTON_CODE_PROMO.textContent = \"Remove\";\n\n ELEMENTS.TOTAL_PANIER.textContent = totalPanier;\n ELEMENTS.TOTAL_REDUCTION_LIGNE.toggleAttribute(ATTRIBUT_HIDDEN);\n ELEMENTS.TOTAL_REDUCTION_VALEUR.textContent = totalReduction;\n })\n .ifLeft(erreur => {\n // Rétablis le texte d'origine\n ELEMENTS.BOUTON_CODE_PROMO.textContent = \"Apply\";\n match(erreur)\n .with(P.instanceOf(ValiError), e => console.error(\"ValiError\", e.issues))\n .with(P.instanceOf(ErreurCodePromoInvalide), e => {\n ELEMENTS.MESSAGE_CODE_PROMO.textContent = \"This promo code does not exist.\";\n console.error(e);\n })\n .with(P.instanceOf(ServerError), e => console.error(e))\n .with(P.instanceOf(TypeError), e => console.error(e))\n .exhaustive();\n })\n .finally(() => {\n // Désactive l'animation de chargement et rend le Bouton de nouveau cliquable\n ELEMENTS.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_CHARGEMENT);\n ELEMENTS.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_DESACTIVE);\n })\n .run(),\n )\n // Un code promo doit être retiré\n .with(\n {\n cible: P.when(cible => correspondCibleSelecteur(cible, SELECTEUR_BOUTON_CODE_PROMO)),\n codePromoPresent: true,\n valeurCodePromo: P.string,\n },\n ({ valeurCodePromo }) =>\n void EitherAsync\n .liftEither(eitherParse({ code: valeurCodePromo }, WCStoreCartRemoveCouponArgsSchema))\n .ifRight(() => {\n ELEMENTS.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n ELEMENTS.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_CHARGEMENT, \"\");\n\n const animation = {\n callback: () => {\n if (!ELEMENTS.BOUTON_CODE_PROMO.hasAttribute(ATTRIBUT_CHARGEMENT)) {\n clearInterval(animation.interval);\n return;\n }\n\n ELEMENTS.BOUTON_CODE_PROMO.textContent = animation.etapes.at(animation.index)\n ?? \"Loading...\";\n animation.index = animation.index + 1 > animation.etapes.length - 1 ? 0 : animation.index + 1;\n },\n etapes: [\n \"Loading\",\n \"Loading.\",\n \"Loading..\",\n \"Loading...\",\n ],\n index: 0,\n interval: 0,\n };\n animation.callback();\n animation.interval = setInterval(animation.callback, 500);\n })\n .map((args: WCStoreCartRemoveCouponArgs) =>\n postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_RETIRE_COUPON,\n })\n )\n .chain((reponse: Response) =>\n EitherAsync(async ({ throwE }) => {\n if (estReponse500(reponse)) throwE(new ServerError(\"500 server Error\"));\n return await reponse.json();\n })\n )\n .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema)))\n .ifRight((panier: WCStoreCart) => {\n const totalPanier = pipe(Number(panier.totals.total_price) / 100, String, v => `${v}€`);\n\n ELEMENTS.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT);\n ELEMENTS.ENSEMBLE_CODE_PROMO.reset();\n ELEMENTS.CHAMP_CODE_PROMO.toggleAttribute(ATTRIBUT_DESACTIVE);\n ELEMENTS.CHAMP_CODE_PROMO.textContent = \"\";\n ELEMENTS.BOUTON_CODE_PROMO.textContent = \"Apply\";\n\n ELEMENTS.TOTAL_PANIER.textContent = totalPanier;\n ELEMENTS.TOTAL_REDUCTION_LIGNE.toggleAttribute(ATTRIBUT_HIDDEN);\n ELEMENTS.TOTAL_REDUCTION_VALEUR.textContent = \"-0€\";\n })\n .ifLeft(erreur =>\n match(erreur)\n .with(P.instanceOf(ValiError), e => console.error(\"retour ajout code promo\", e.issues))\n .with(P.instanceOf(ServerError), e => console.error(\"retour ajout code promo\", e))\n .with(P.instanceOf(TypeError), e => console.error(\"retour ajout code promo\", e))\n .exhaustive()\n )\n .finally(() => {\n ELEMENTS.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_CHARGEMENT);\n ELEMENTS.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_DESACTIVE);\n })\n .run(),\n )\n // Ne rien faire en dehors de ces deux situations\n .with(P._, identity));\n};\n"],"names":["match","P"],"mappings":"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"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier.js b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier.js index 8988cd59..3cac3687 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier.js @@ -1,10 +1,10 @@ import { z } from "./index.CeK6pfoJ.js"; -import { p as parse, V as ValiError } from "./index.DKC_Jv5v.js"; +import { p as parse, V as ValiError } from "./index.DxUTT09Y.js"; import { a as ROUTE_API_RETIRE_ARTICLE_PANIER, b as ROUTE_API_MAJ_ARTICLE_PANIER, c as ROUTE_API_MAJ_CLIENT, d as ROUTE_API_NOUVELLE_COMMANDES } from "./api.js"; -import { l as SELECTEUR_ENTREES_PANIER, m as SELECTEUR_CONTENEUR_PANIER, n as SELECTEUR_SOUS_TOTAL_PRODUITS, o as SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT, p as SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE, q as SELECTEUR_TOTAL_PANIER, r as SELECTEUR_BOUTON_SEPARATION_ADRESSES, s as SELECTEUR_FORMULAIRE_PANIER, t as SELECTEUR_FORMULAIRE_FACTURATION, u as SELECTEUR_BOUTON_ACTIONS_FORMULAIRE, v as SELECTEUR_TOTAL_REDUCTION, w as SELECTEUR_TOTAL_REDUCTION_VALEUR, x as SELECTEUR_INSTRUCTIONS_CLIENT, y as SELECTEUR_ENSEMBLE_CODE_PROMO, z as SELECTEUR_CHAMP_CODE_PROMO, B as SELECTEUR_BOUTON_CODE_PROMO, C as ATTRIBUT_CLE_PANIER, D as SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE, E as SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER, F as SELECTEUR_BOUTON_ADDITION_QUANTITE, G as SELECTEUR_BOUTON_SUPPRESSION_PANIER, A as ATTRIBUT_CONTIENT_ARTICLES, H as SELECTEUR_PRIX_LIGNE_PANIER, k as ATTRIBUT_HIDDEN, I as ATTRIBUT_DESACTIVE } from "./dom.js"; +import { l as SELECTEUR_ENTREES_PANIER, m as SELECTEUR_CONTENEUR_PANIER, n as SELECTEUR_SOUS_TOTAL_PRODUITS, o as SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT, p as SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE, q as SELECTEUR_TOTAL_PANIER, r as SELECTEUR_BOUTON_SEPARATION_ADRESSES, s as SELECTEUR_FORMULAIRE_PANIER, t as SELECTEUR_FORMULAIRE_FACTURATION, u as SELECTEUR_BOUTON_ACTIONS_FORMULAIRE, v as SELECTEUR_INSTRUCTIONS_CLIENT, w as ATTRIBUT_CLE_PANIER, x as SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE, y as SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER, z as SELECTEUR_BOUTON_ADDITION_QUANTITE, B as SELECTEUR_BOUTON_SUPPRESSION_PANIER, A as ATTRIBUT_CONTIENT_ARTICLES, C as SELECTEUR_PRIX_LIGNE_PANIER, k as ATTRIBUT_HIDDEN, D as ATTRIBUT_DESACTIVE } from "./dom.js"; import { N as NOM_CANAL_BOUTON_PANIER, a as NOM_CANAL_CONTENU_PANIER } from "./messages3.js"; import { r as recupereElementOuLeve, a as recupereElementsAvecSelecteur, e as eitherSessionStorageGet, b as eitherJsonParse, c as recupereElementAvecSelecteur } from "./dom2.js"; -import { l as leveServerError, r as reporteErreur, a as leveErreur } from "./erreurs.js"; +import { l as leveServerError, r as reporteErreur, a as leveErreur } from "./erreurs2.js"; import { e as estReponse500, a as estError } from "./gardes.js"; import { e as emetMessageMajBoutonPanier, a as emetMessageMajContenuPanier, v as valideMessageMajBoutonPanier, b as valideMessageMajContenuPanier } from "./messages.js"; import { p as postBackend, t as traiteReponseBackendWCSelonCodesHTTP } from "./reseau.js"; @@ -21,12 +21,14 @@ import { p as pipe } from "./pipe.XPB0wEfw.js"; import { l } from "./index-0eef19ec.DoJSf22Z.js"; import { M as Maybe, E as Either } from "./Either.wHNxn7Os.js"; import "./exports.3IcOsN8u.js"; +import "./erreurs3.js"; import "./messages2.js"; -import "./erreurs2.js"; import "./adresses.js"; import "./cart2.js"; import "./cart-coupons.js"; import "./orders3.js"; +import "./erreurs.js"; +import "./codes-promo.js"; import "./cart-apply-coupon.js"; import "./cart-remove-coupon.js"; import "./MaybeAsync.AE1jnxuc.js"; @@ -51,10 +53,6 @@ const SOUS_TOTAL_LIVRAISON_PRESTATAIRE = pipe( recupereElementDocumentEither(SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE), recupereElementOuLeve ); -recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION); -recupereElementDansDocumentOuLeve( - SELECTEUR_TOTAL_REDUCTION_VALEUR -); const INSTRUCTIONS_CLIENT = recupereElementDansDocumentOuLeve( SELECTEUR_INSTRUCTIONS_CLIENT ); @@ -66,15 +64,6 @@ const BOUTON_SEPARATION_ADRESSES = pipe( recupereElementDocumentEither(SELECTEUR_BOUTON_SEPARATION_ADRESSES), recupereElementOuLeve ); -recupereElementDansDocumentOuLeve( - SELECTEUR_ENSEMBLE_CODE_PROMO -); -recupereElementDansDocumentOuLeve( - SELECTEUR_CHAMP_CODE_PROMO -); -recupereElementDansDocumentOuLeve( - SELECTEUR_BOUTON_CODE_PROMO -); const FORMULAIRE_PANIER = pipe( recupereElementDocumentEither(SELECTEUR_FORMULAIRE_PANIER), recupereElementOuLeve @@ -149,8 +138,8 @@ const initialiseMajEntreesPanier = () => { emetMessageMajBoutonPanier({ quantiteProduits: panier.items_count }); emetMessageMajContenuPanier({ produits: panier.items, - sousTotalPanier: Number(panier.totals.total_price) / 100, - totalPanier: Number(panier.totals.total_items) / 100 + sousTotalPanier: Number(panier.totals.total_items) / 100, + totalPanier: Number(panier.totals.total_price) / 100 }); entree.remove(); }) @@ -189,8 +178,8 @@ const initialiseMajEntreesPanier = () => { emetMessageMajBoutonPanier({ quantiteProduits: panier.items_count }); emetMessageMajContenuPanier({ produits: panier.items, - sousTotalPanier: Number(panier.totals.total_price) / 100, - totalPanier: Number(panier.totals.total_items) / 100 + sousTotalPanier: Number(panier.totals.total_items) / 100, + totalPanier: Number(panier.totals.total_price) / 100 }); }) ); @@ -229,8 +218,8 @@ const initialiseMajEntreesPanier = () => { emetMessageMajBoutonPanier({ quantiteProduits: panier.items_count }); emetMessageMajContenuPanier({ produits: panier.items, - sousTotalPanier: Number(panier.totals.total_price) / 100, - totalPanier: Number(panier.totals.total_items) / 100 + sousTotalPanier: Number(panier.totals.total_items) / 100, + totalPanier: Number(panier.totals.total_price) / 100 }); }) ); @@ -260,20 +249,18 @@ const initialiseMajContenuPanier = () => { valideMessageMajContenuPanier(message).chain(propEither("donnees")).ifRight((donnees) => { donnees.produits.forEach((ligne) => { ENTREES_PANIER_EITHER.ifRight((entrees) => { - Maybe.fromNullable(entrees.find((entree) => entree.getAttribute(ATTRIBUT_CLE_PANIER) === ligne.key)).ifJust( - (entree) => { - const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree); - const prixLigne = recupereElementDansEntree(SELECTEUR_PRIX_LIGNE_PANIER); - const champQuantite = recupereElementDansEntree( - SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER - ); - entree.setAttribute("data-quantite", String(ligne.quantity)); - prixLigne.textContent = `${String(Number(ligne.totals.line_subtotal) / 100)}€`; - champQuantite.setAttribute("value", String(ligne.quantity)); - majEtatsActivationBoutons(entrees); - } - ); - SOUS_TOTAL_PRODUITS.textContent = `${String(donnees.totalPanier)}€`; + Maybe.fromNullable(entrees.find((entree) => entree.getAttribute(ATTRIBUT_CLE_PANIER) === ligne.key)).ifJust((entree) => { + const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree); + const prixLigne = recupereElementDansEntree(SELECTEUR_PRIX_LIGNE_PANIER); + const champQuantite = recupereElementDansEntree( + SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER + ); + entree.setAttribute("data-quantite", String(ligne.quantity)); + prixLigne.textContent = `${String(Number(ligne.totals.line_subtotal) / 100)}€`; + champQuantite.setAttribute("value", String(ligne.quantity)); + majEtatsActivationBoutons(entrees); + }); + SOUS_TOTAL_PRODUITS.textContent = `${String(donnees.sousTotalPanier)}€`; TOTAL_PANIER.textContent = `${String(donnees.totalPanier)}€`; }); }); diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier.js.map b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier.js.map index 8fd9c13f..3851d0a8 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier.js.map @@ -1 +1 @@ -{"version":3,"file":"scripts-page-panier.js","sources":["../../src/scripts/scripts-page-panier.ts"],"sourcesContent":["import { D, F, pipe } from \"@mobily/ts-belt\";\nimport { Either, EitherAsync, Maybe } from \"purify-ts\";\nimport { match, P } from \"ts-pattern\";\nimport { parse, ValiError } from \"valibot\";\n\nimport type { MessageMajContenuPanierSchema } from \"./lib/schemas/messages.ts\";\nimport type { WCStoreCart, WCStoreCartItem, WCStoreShippingRateShippingRate } from \"./lib/types/api/cart\";\nimport type { WCStoreCartApplyCouponArgs } from \"./lib/types/api/cart-apply-coupon\";\nimport type { WCStoreCartRemoveCouponArgs } from \"./lib/types/api/cart-remove-coupon\";\nimport type { WCStoreCartRemoveItemArgs } from \"./lib/types/api/cart-remove-item\";\nimport type { WCStoreCartUpdateCustomerArgs } from \"./lib/types/api/cart-update-customer\";\nimport type { WCStoreCartUpdateItemArgs } from \"./lib/types/api/cart-update-item\";\nimport type { WCV3Order, WCV3OrdersArgs } from \"./lib/types/api/v3/orders.ts\";\nimport type { MessageMajBoutonPanierDonnees, MessageMajContenuPanierDonnees } from \"./lib/types/messages\";\n\nimport {\n ROUTE_API_APPLIQUE_COUPON,\n ROUTE_API_MAJ_ARTICLE_PANIER,\n ROUTE_API_MAJ_CLIENT,\n ROUTE_API_NOUVELLE_COMMANDES,\n ROUTE_API_RETIRE_ARTICLE_PANIER,\n ROUTE_API_RETIRE_COUPON,\n} from \"./constantes/api.ts\";\nimport {\n ATTRIBUT_CLE_PANIER,\n ATTRIBUT_CODE_PROMO_PRESENT,\n ATTRIBUT_CONTIENT_ARTICLES,\n ATTRIBUT_DESACTIVE,\n ATTRIBUT_HIDDEN,\n SELECTEUR_BOUTON_ACTIONS_FORMULAIRE,\n SELECTEUR_BOUTON_ADDITION_QUANTITE,\n SELECTEUR_BOUTON_CODE_PROMO,\n SELECTEUR_BOUTON_SEPARATION_ADRESSES,\n SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE,\n SELECTEUR_BOUTON_SUPPRESSION_PANIER,\n SELECTEUR_CHAMP_CODE_PROMO,\n SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER,\n SELECTEUR_CONTENEUR_PANIER,\n SELECTEUR_ENSEMBLE_CODE_PROMO,\n SELECTEUR_ENTREES_PANIER,\n SELECTEUR_FORMULAIRE_FACTURATION,\n SELECTEUR_FORMULAIRE_PANIER,\n SELECTEUR_INSTRUCTIONS_CLIENT,\n SELECTEUR_PRIX_LIGNE_PANIER,\n SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT,\n SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE,\n SELECTEUR_SOUS_TOTAL_PRODUITS,\n SELECTEUR_TOTAL_PANIER,\n SELECTEUR_TOTAL_REDUCTION,\n SELECTEUR_TOTAL_REDUCTION_VALEUR,\n} from \"./constantes/dom.ts\";\nimport { NOM_CANAL_BOUTON_PANIER, NOM_CANAL_CONTENU_PANIER } from \"./constantes/messages.ts\";\nimport {\n eitherJsonParse,\n eitherSessionStorageGet,\n recupereElementAvecSelecteur,\n recupereElementOuLeve,\n recupereElementsAvecSelecteur,\n} from \"./lib/dom.ts\";\nimport { type CleNonTrouveError, leveErreur, leveServerError, reporteErreur, ServerError } from \"./lib/erreurs.ts\";\nimport { estError, estReponse500 } from \"./lib/gardes.ts\";\nimport {\n emetMessageMajBoutonPanier,\n emetMessageMajContenuPanier,\n valideMessageMajBoutonPanier,\n valideMessageMajContenuPanier,\n} from \"./lib/messages.ts\";\nimport { postBackend, traiteReponseBackendWCSelonCodesHTTP } from \"./lib/reseau.ts\";\nimport { WCStoreCartApplyCouponArgsSchema } from \"./lib/schemas/api/cart-apply-coupon.ts\";\nimport { WCStoreCartRemoveCouponArgsSchema } from \"./lib/schemas/api/cart-remove-coupon.ts\";\nimport { WCStoreCartRemoveItemArgsSchema } from \"./lib/schemas/api/cart-remove-item.ts\";\nimport { WCStoreCartUpdateCustomerArgsSchema } from \"./lib/schemas/api/cart-update-customer.ts\";\nimport { WCStoreCartUpdateItemArgsSchema } from \"./lib/schemas/api/cart-update-item.ts\";\nimport { WCStoreCartSchema } from \"./lib/schemas/api/cart.ts\";\nimport { WCStoreShippingRateShippingRateSchema } from \"./lib/schemas/api/couts-livraison.ts\";\nimport { WCV3OrdersArgsSchema, WCV3OrderSchema } from \"./lib/schemas/api/v3/orders.ts\";\nimport {\n propEither,\n recupereElementDansDocumentOuLeve,\n recupereElementDocumentEither,\n recupereElementsDocumentEither,\n} from \"./lib/utils.ts\";\nimport { eitherParse } from \"./lib/validation.ts\";\nimport { initialiseElementsCodePromo } from \"./scripts-page-panier-code-promo.ts\";\n\ntype ElementsEntreePanier = {\n boutonAddition: HTMLButtonElement;\n boutonSoustraction: HTMLButtonElement;\n boutonSuppression: HTMLButtonElement;\n champQuantite?: HTMLInputElement;\n};\n\n/** États utiles pour les scripts de la page. */\ntype EtatsPage = {\n authString: string;\n /** Un nonce pour l'authentification de requêtes API vers le backend WooCommerce. */\n nonce: string;\n};\n\n// @ts-expect-error -- États injectés par le modèle PHP\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP\nconst ETATS_PAGE: EtatsPage = _etats;\n\n// Éléments d'intérêt\nconst ENTREES_PANIER_EITHER: Either> = recupereElementsDocumentEither(\n SELECTEUR_ENTREES_PANIER,\n);\nconst CONTENEUR_PANIER: HTMLElement = pipe(\n recupereElementDocumentEither(SELECTEUR_CONTENEUR_PANIER),\n recupereElementOuLeve,\n);\nconst SOUS_TOTAL_PRODUITS: HTMLElement = pipe(\n recupereElementDocumentEither(SELECTEUR_SOUS_TOTAL_PRODUITS),\n recupereElementOuLeve,\n);\nconst SOUS_TOTAL_LIVRAISON_COUT: HTMLElement = pipe(\n recupereElementDocumentEither(SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT),\n recupereElementOuLeve,\n);\nconst SOUS_TOTAL_LIVRAISON_PRESTATAIRE: HTMLSpanElement = pipe(\n recupereElementDocumentEither(SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE),\n recupereElementOuLeve,\n);\nconst SOUS_TOTAL_REDUCTION_LIGNE: HTMLDivElement = recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION);\nconst SOUS_TOTAL_REDUCTION_VALEUR: HTMLSpanElement = recupereElementDansDocumentOuLeve(\n SELECTEUR_TOTAL_REDUCTION_VALEUR,\n);\nconst INSTRUCTIONS_CLIENT: HTMLTextAreaElement = recupereElementDansDocumentOuLeve(\n SELECTEUR_INSTRUCTIONS_CLIENT,\n);\nconst TOTAL_PANIER: HTMLParagraphElement = pipe(\n recupereElementDocumentEither(SELECTEUR_TOTAL_PANIER),\n recupereElementOuLeve,\n);\nconst BOUTON_SEPARATION_ADRESSES: HTMLInputElement = pipe(\n recupereElementDocumentEither(SELECTEUR_BOUTON_SEPARATION_ADRESSES),\n recupereElementOuLeve,\n);\nconst ENSEMBLE_CODE_PROMO: HTMLDivElement = recupereElementDansDocumentOuLeve(\n SELECTEUR_ENSEMBLE_CODE_PROMO,\n);\nconst CHAMP_CODE_PROMO: HTMLInputElement = recupereElementDansDocumentOuLeve(\n SELECTEUR_CHAMP_CODE_PROMO,\n);\nlet BOUTON_CODE_PROMO: HTMLButtonElement = recupereElementDansDocumentOuLeve(\n SELECTEUR_BOUTON_CODE_PROMO,\n);\nconst FORMULAIRE_PANIER: HTMLFormElement = pipe(\n recupereElementDocumentEither(SELECTEUR_FORMULAIRE_PANIER),\n recupereElementOuLeve,\n);\nconst FORMULAIRE_FACTURATION: HTMLDivElement = pipe(\n recupereElementDocumentEither(SELECTEUR_FORMULAIRE_FACTURATION),\n recupereElementOuLeve,\n);\nlet BOUTON_ACTIONS_FORMULAIRE: HTMLButtonElement = pipe(\n recupereElementDocumentEither(SELECTEUR_BOUTON_ACTIONS_FORMULAIRE),\n recupereElementOuLeve,\n);\n\n/**\n * Fonction utilitaire pour récupérer un Élément dans une ligne (entrée) du Panier, en levant une\n * Erreur s'il n'existe pas.\n *\n * @param entree L'entrée du Panier sous forme d'Élément dans le DOM.\n * @returns L'Élément demandé.\n * @throws Une SyntaxError si l'Élément n'est pas trouvé.\n */\nconst recupereElementDansEntreePanierOuLeve =\n (entree: HTMLElement) => (selecteur: string) =>\n pipe(recupereElementAvecSelecteur(entree)(selecteur), recupereElementOuLeve);\n\nconst desactiveBoutonsEntreesPanier = (entrees: Array): void =>\n entrees.forEach((entree: HTMLElement) => {\n // Fonction utilitaire\n const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree);\n\n const elements: ElementsEntreePanier = {\n boutonAddition: recupereElementDansEntree(SELECTEUR_BOUTON_ADDITION_QUANTITE),\n boutonSoustraction: recupereElementDansEntree(SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE),\n boutonSuppression: recupereElementDansEntree(SELECTEUR_BOUTON_SUPPRESSION_PANIER),\n };\n\n elements.boutonSoustraction.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n elements.boutonAddition.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n elements.boutonSuppression.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n elements.boutonSuppression.textContent = \"C= C= C= C= C=┌(;・ω・)┘\";\n });\n\nconst majEtatsActivationBoutons = (entrees: Array): void =>\n entrees.forEach((entree: HTMLElement) => {\n // Fonction utilitaire\n const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree);\n\n const elements: ElementsEntreePanier = {\n boutonAddition: recupereElementDansEntree(SELECTEUR_BOUTON_ADDITION_QUANTITE),\n boutonSoustraction: recupereElementDansEntree(SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE),\n boutonSuppression: recupereElementDansEntree(SELECTEUR_BOUTON_SUPPRESSION_PANIER),\n champQuantite: recupereElementDansEntree(SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER),\n };\n\n Number(elements.champQuantite?.value) === 1\n ? elements.boutonSoustraction.setAttribute(ATTRIBUT_DESACTIVE, \"\")\n : elements.boutonSoustraction.removeAttribute(ATTRIBUT_DESACTIVE);\n elements.boutonAddition.removeAttribute(ATTRIBUT_DESACTIVE);\n elements.boutonSuppression.removeAttribute(ATTRIBUT_DESACTIVE);\n elements.boutonSuppression.textContent = \"Remove\";\n });\n\nconst initialiseMajEntreesPanier = (): void => {\n ENTREES_PANIER_EITHER.ifRight((entrees: Array) => {\n entrees.forEach((entree: HTMLElement) => {\n const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree);\n\n // Retire l'entrée du DOM si la clé Panier n'existe pas et arrête précocement\n const clePanier: string = Maybe.fromNullable(entree.getAttribute(ATTRIBUT_CLE_PANIER))\n .ifNothing(() => {\n entree.remove();\n return;\n })\n .orDefault(\"CLE_PANIER_INEXISTANTE\");\n\n // Récupère les attributs et éléments utilisés dans le script\n const boutonSoustraction = recupereElementDansEntree(SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE);\n const champQuantite = recupereElementDansEntree(SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER);\n const boutonAddition = recupereElementDansEntree(SELECTEUR_BOUTON_ADDITION_QUANTITE);\n const boutonSuppression = recupereElementDansEntree(SELECTEUR_BOUTON_SUPPRESSION_PANIER);\n\n // Supprime la ligne du Panier au clic sur le bouton de suppression\n boutonSuppression.addEventListener(\"click\", (): void => {\n Either\n // Valide un corps de requête\n .encase, WCStoreCartRemoveItemArgs>(() =>\n parse(WCStoreCartRemoveItemArgsSchema, { key: clePanier })\n )\n .map(async (args: WCStoreCartRemoveItemArgs) => {\n // Modifie des éléments du DOM pour signaler la requête et empêcher des doubles exécutions\n desactiveBoutonsEntreesPanier(entrees);\n\n // Réalise la requête auprès du backend\n await postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_RETIRE_ARTICLE_PANIER,\n })\n .then(async (reponse: Response) => {\n // Traite le cas d'erreur 500\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n\n pipe(\n // Récupère la Réponse\n await reponse.json(),\n // Traite tous les codes HTTPs possibles\n (corpsReponse: unknown) =>\n traiteReponseBackendWCSelonCodesHTTP(\n corpsReponse,\n WCStoreCartSchema,\n ),\n // Émets des Messages via BroadcastChannels pour la mise à jour de la page\n F.tap((panier: WCStoreCart) => {\n // Émet un Message avec le nouveau nombre de Produits dans le Panier\n emetMessageMajBoutonPanier({ quantiteProduits: panier.items_count });\n // Émet un Message avec le nouveau contenu du Panier\n emetMessageMajContenuPanier({\n produits: panier.items,\n sousTotalPanier: Number(panier.totals.total_price) / 100,\n totalPanier: Number(panier.totals.total_items) / 100,\n });\n // Retire l'entrée du Panier du DOM\n entree.remove();\n }),\n );\n })\n .catch((e: unknown) => {\n if (estError(e)) {\n reporteErreur(e);\n } else {\n console.error(\"e n'est pas une Erreur ?!\", e);\n }\n majEtatsActivationBoutons(entrees);\n });\n })\n .ifLeft((erreur: ValiError) => reporteErreur(erreur));\n });\n\n // Retire une unité à une ligne du Panier au clic sur le bouton de soustraction\n boutonSoustraction.addEventListener(\"click\", (): void => {\n Maybe.fromNullable(champQuantite.valueAsNumber)\n .filter(valeur => valeur > 1)\n .ifJust(valeur => {\n Either\n // Valide les arguments de la requête\n .encase(() =>\n parse(WCStoreCartUpdateItemArgsSchema, { key: clePanier, quantity: valeur - 1 })\n )\n .map(async (args: WCStoreCartUpdateItemArgs) => {\n // Modifie des éléments du DOM pour signaler la requête et empêcher des doubles exécutions\n desactiveBoutonsEntreesPanier(entrees);\n\n // Réalise la requête\n await postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_MAJ_ARTICLE_PANIER,\n })\n .then(async (reponse: Response) => {\n // Traite le cas d'erreur 500\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n\n pipe(\n // Récupère la Réponse\n await reponse.json(),\n // Traite tous les codes HTTPs possibles\n (corpsReponse: unknown) =>\n traiteReponseBackendWCSelonCodesHTTP(\n corpsReponse,\n WCStoreCartSchema,\n ),\n F.tap((panier: WCStoreCart) => {\n // Émet un Message avec le nouveau nombre de Produits dans le Panier\n emetMessageMajBoutonPanier({ quantiteProduits: panier.items_count });\n // Émet un Message avec le nouveau contenu du Panier\n emetMessageMajContenuPanier({\n produits: panier.items,\n sousTotalPanier: Number(panier.totals.total_price) / 100,\n totalPanier: Number(panier.totals.total_items) / 100,\n });\n }),\n );\n })\n .catch((e: unknown) => {\n if (estError(e)) {\n reporteErreur(e);\n } else {\n console.error(\"e n'est pas une Erreur ?!\", e);\n }\n\n majEtatsActivationBoutons(entrees);\n });\n });\n });\n });\n\n // Ajoute une unité à une ligne du Panier au clic sur le bouton d'addition\n boutonAddition.addEventListener(\"click\", (): void => {\n Maybe.fromNullable(champQuantite.valueAsNumber).ifJust(valeur => {\n // Modifie des éléments du DOM pour signaler la requête et empêcher des doubles exécutions\n desactiveBoutonsEntreesPanier(entrees);\n\n Either\n // Valide les arguments de la requête\n .encase(() =>\n parse(WCStoreCartUpdateItemArgsSchema, { key: clePanier, quantity: valeur + 1 })\n )\n .map(async (args: WCStoreCartUpdateItemArgs) => {\n // Réalise la requête\n await postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_MAJ_ARTICLE_PANIER,\n })\n .then(async (reponse: Response) => {\n // Traite le cas d'erreur 500\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n\n pipe(\n // Récupère la Réponse\n await reponse.json(),\n // Traite tous les codes HTTPs possibles\n (corpsReponse: unknown) =>\n traiteReponseBackendWCSelonCodesHTTP(\n corpsReponse,\n WCStoreCartSchema,\n ),\n F.tap((panier: WCStoreCart) => {\n // Émet un Message avec le nouveau nombre de Produits dans le Panier\n emetMessageMajBoutonPanier({ quantiteProduits: panier.items_count });\n // Émet un Message avec le nouveau contenu du Panier\n emetMessageMajContenuPanier({\n produits: panier.items,\n sousTotalPanier: Number(panier.totals.total_price) / 100,\n totalPanier: Number(panier.totals.total_items) / 100,\n });\n }),\n );\n })\n .catch((e: unknown) => {\n if (estError(e)) {\n reporteErreur(e);\n } else {\n console.error(\"e n'est pas une Erreur ?!\", e);\n }\n\n majEtatsActivationBoutons(entrees);\n });\n });\n });\n });\n });\n });\n};\n\nconst initialiseMajConteneurPanier = (): void => {\n new BroadcastChannel(NOM_CANAL_BOUTON_PANIER).onmessage = (evenementMessage: MessageEvent): void => {\n valideMessageMajBoutonPanier(evenementMessage)\n .map(D.getUnsafe(\"donnees\"))\n // Met à jour l'Attribut de présence de Produits dans le Panier\n .ifRight((donnees: MessageMajBoutonPanierDonnees) => {\n CONTENEUR_PANIER.setAttribute(ATTRIBUT_CONTIENT_ARTICLES, String(donnees.quantiteProduits !== 0));\n });\n };\n};\n\nconst initialiseMajContenuPanier = (): void => {\n new BroadcastChannel(NOM_CANAL_CONTENU_PANIER).onmessage = (message: MessageEvent): void => {\n valideMessageMajContenuPanier(message)\n // Récupère les données sous forme d'Either\n .chain(propEither(\"donnees\"))\n // Met à jour le contenu du Panier si des données sont présentes\n .ifRight((donnees: MessageMajContenuPanierDonnees) => {\n donnees.produits.forEach((ligne: WCStoreCartItem) => {\n // Met à jour les entrées du Panier\n ENTREES_PANIER_EITHER.ifRight((entrees: Array) => {\n Maybe.fromNullable(entrees.find(entree => entree.getAttribute(ATTRIBUT_CLE_PANIER) === ligne.key)).ifJust(\n (entree: HTMLElement) => {\n // Fonction utilitaire\n const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree);\n\n // Récupère les Éléments à mettre à jour\n const prixLigne = recupereElementDansEntree(SELECTEUR_PRIX_LIGNE_PANIER);\n const champQuantite = recupereElementDansEntree(\n SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER,\n );\n\n // Met à jour les valeurs\n entree.setAttribute(\"data-quantite\", String(ligne.quantity));\n prixLigne.textContent = `${String(Number(ligne.totals.line_subtotal) / 100)}€`;\n champQuantite.setAttribute(\"value\", String(ligne.quantity));\n\n // Réactive les Boutons\n majEtatsActivationBoutons(entrees);\n },\n );\n\n // Met à jour les totaux du Panier\n SOUS_TOTAL_PRODUITS.textContent = `${String(donnees.totalPanier)}€`;\n TOTAL_PANIER.textContent = `${String(donnees.totalPanier)}€`;\n });\n });\n })\n // Reporte tout Erreur et réactive les Boutons\n .ifLeft((erreur: CleNonTrouveError | ValiError) => {\n reporteErreur(erreur);\n ENTREES_PANIER_EITHER.ifRight(entrees => majEtatsActivationBoutons(entrees));\n });\n };\n};\n\nconst initialiseMajFormulairesPanier = (): void => {\n BOUTON_SEPARATION_ADRESSES.addEventListener(\"click\", () => {\n Maybe.fromFalsy(BOUTON_SEPARATION_ADRESSES.checked)\n .ifJust((): void => {\n // Rend visible le formulaire de facturation\n FORMULAIRE_FACTURATION.removeAttribute(ATTRIBUT_HIDDEN);\n recupereElementsAvecSelecteur(FORMULAIRE_FACTURATION)(\"input, select\").ifRight(champs =>\n champs.forEach(champ => champ.removeAttribute(ATTRIBUT_DESACTIVE))\n );\n })\n .ifNothing((): void => {\n FORMULAIRE_FACTURATION.setAttribute(ATTRIBUT_HIDDEN, \"\");\n recupereElementsAvecSelecteur(FORMULAIRE_FACTURATION)(\n \"input, select\",\n ).ifRight(champs =>\n champs.forEach(champ => {\n champ.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n champ.value = \"\";\n })\n );\n });\n });\n};\n\nconst initialiseBoutonActions = (): void => {\n // Déclenche une requête\n BOUTON_ACTIONS_FORMULAIRE.addEventListener(\"click\", evenement => {\n Maybe\n // Ne fais rien si le Formulaire n'est pas valide\n .fromFalsy(FORMULAIRE_PANIER.checkValidity())\n .ifJust(() => {\n evenement.preventDefault();\n FORMULAIRE_PANIER.removeAttribute(ATTRIBUT_HIDDEN);\n BOUTON_ACTIONS_FORMULAIRE.textContent = \"Check-out\";\n })\n .ifJust(() => {\n // Récupère les données du Formulaire\n // @ts-expect-error -- Problème de typage de la librairie DOM\n const donneesFormulaire: Record = pipe(\n new FormData(FORMULAIRE_PANIER),\n formData => formData.entries(),\n entrees => Array.from(entrees),\n tuple => D.fromPairs(tuple),\n );\n\n // Transforme les données brutes en arguments de requête auprès du backend\n const argumentsFormulaire: WCStoreCartUpdateCustomerArgs = {\n billing_address: {\n address_1: donneesFormulaire[\"facturation-adresse\"] ?? donneesFormulaire[\"livraison-adresse\"] ?? \"\",\n address_2: \"\",\n city: donneesFormulaire[\"facturation-ville\"] ?? donneesFormulaire[\"livraison-ville\"] ?? \"\",\n company: \"\",\n country: \"FR\",\n email: donneesFormulaire[\"facturation-email\"] ?? donneesFormulaire[\"livraison-email\"] ?? \"\",\n first_name: donneesFormulaire[\"facturation-prenom\"] ?? donneesFormulaire[\"livraison-prenom\"] ?? \"\",\n last_name: donneesFormulaire[\"facturation-nom\"] ?? donneesFormulaire[\"livraison-nom\"] ?? \"\",\n phone: donneesFormulaire[\"facturation-telephone\"] ?? donneesFormulaire[\"livraison-telephone\"] ?? \"\",\n postcode: donneesFormulaire[\"facturation-code-postal\"] ?? donneesFormulaire[\"livraison-code-postal\"] ?? \"\",\n state: donneesFormulaire[\"facturation-region-etat\"] ?? donneesFormulaire[\"livraison-region-etat\"] ?? \"\",\n },\n shipping_address: {\n address_1: donneesFormulaire[\"livraison-adresse\"] ?? \"\",\n address_2: \"\",\n city: donneesFormulaire[\"livraison-ville\"] ?? \"\",\n company: \"\",\n country: \"FR\",\n first_name: donneesFormulaire[\"livraison-prenom\"] ?? \"\",\n last_name: donneesFormulaire[\"livraison-nom\"] ?? \"\",\n phone: donneesFormulaire[\"livraison-telephone\"] ?? \"\",\n postcode: donneesFormulaire[\"livraison-code-postal\"] ?? \"\",\n state: donneesFormulaire[\"livraison-region-etat\"] ?? \"\",\n },\n };\n\n // Réalise la requête et traite sa réponse\n Either\n // Valide les arguments de la requête\n .encase, WCStoreCartUpdateCustomerArgs>(() =>\n parse(WCStoreCartUpdateCustomerArgsSchema, argumentsFormulaire)\n )\n .map(async (args: WCStoreCartUpdateCustomerArgs) => {\n await postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_MAJ_CLIENT,\n }).then(async (reponse: Response) => {\n // Traite le cas d'erreur 500\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n\n pipe(\n // Récupère la Réponse\n await reponse.json(),\n // Traite tous les codes HTTPs possibles\n (corpsReponse: unknown) =>\n traiteReponseBackendWCSelonCodesHTTP(\n corpsReponse,\n WCStoreCartSchema,\n ),\n F.tap((donnees: WCStoreCart) => {\n // Récupère et adapte les informations de Livraison\n const sousTotalLivraison = donnees.totals.total_shipping === \"0\"\n ? \"Free\"\n : `${String(donnees.totals.total_shipping)} €`;\n const sousTotalPrestataire = match(donnees.shipping_rates[0]?.shipping_rates[0]?.name)\n .with(\"Mondial Relay - Livraison Point Relais (Gratuit)\", () => \"Mondial Relay - Pickup Point\")\n .with(\"Free shipping\", () => \"Free Shipping\")\n .otherwise(() => \"\");\n\n // Met à jour les informations de Livraison affichés à l'Utilisateur\n SOUS_TOTAL_LIVRAISON_COUT.textContent = sousTotalLivraison;\n SOUS_TOTAL_LIVRAISON_PRESTATAIRE.textContent = sousTotalPrestataire;\n\n // Sauvegarde la Méthode de Livraison dans le Stockage de Session\n sessionStorage.setItem(\n \"shipping_rates\",\n JSON.stringify(donnees.shipping_rates[0]?.shipping_rates[0] ?? \"\"),\n );\n }),\n );\n\n // Active le Bouton pour la création de la Commande\n initialiseBoutonCreationCommande();\n });\n })\n .ifLeft(a => console.error(a.issues));\n });\n });\n};\n\nconst initialiseBoutonCreationCommande = (): void => {\n // Permet de supprimer tout Écouteur d'Évènement assigné au Bouton\n BOUTON_ACTIONS_FORMULAIRE.outerHTML = BOUTON_ACTIONS_FORMULAIRE.outerHTML;\n // Réassigne le Bouton\n BOUTON_ACTIONS_FORMULAIRE = recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_ACTIONS_FORMULAIRE);\n // Créé la Commande au clic sur le Bouton\n BOUTON_ACTIONS_FORMULAIRE.addEventListener(\"click\", (evenement: Event) => {\n Maybe\n // Ne fais rien si le Formulaire n'est pas valide\n .fromFalsy(FORMULAIRE_PANIER.checkValidity())\n // Active l'état de chargement\n .ifJust(() => {\n evenement.preventDefault();\n BOUTON_ACTIONS_FORMULAIRE.textContent = \"Submitting...\";\n })\n .ifJust(() => {\n // Récupère les données du Formulaire sous forme d'Objet\n const donneesFormulaire = Object.fromEntries(new FormData(FORMULAIRE_PANIER)) as Record;\n\n const methodeLivraison: WCStoreShippingRateShippingRate = eitherSessionStorageGet(\"shipping_rates\")\n // Récupère la méthode de livraison depuis le stockage de session sous forme d'objet\n .chain(eitherJsonParse)\n // Vérifie la forme de l'objet récupéré\n .chain((json: JSONValue) =>\n eitherParse(\n json,\n WCStoreShippingRateShippingRateSchema,\n )\n )\n .ifLeft(e => {\n if (e instanceof ValiError) console.error(e.issues);\n console.error(\"methodeLivraison\", e);\n BOUTON_ACTIONS_FORMULAIRE.textContent = \"Check-out\";\n leveErreur(e);\n })\n .unsafeCoerce();\n\n const articlesPanier = ENTREES_PANIER_EITHER\n .orDefault([])\n .map((entree: HTMLElement) => ({\n product_id: Number(entree.getAttribute(\"data-id-produit\")),\n quantity: Number(entree.getAttribute(\"data-quantite\")),\n ...(entree.getAttribute(\"data-id-variation\") && {\n variation_id: Number(entree.getAttribute(\"data-id-variation\")),\n }),\n }));\n\n const argumentsFormulaire: WCV3OrdersArgs = {\n billing: {\n address_1: donneesFormulaire[\"facturation-adresse\"] ?? donneesFormulaire[\"livraison-adresse\"] ?? \"\",\n address_2: \"\",\n city: donneesFormulaire[\"facturation-ville\"] ?? donneesFormulaire[\"livraison-ville\"] ?? \"\",\n company: \"\",\n country: \"FR\",\n email: donneesFormulaire[\"facturation-email\"] ?? donneesFormulaire[\"livraison-email\"] ?? \"\",\n first_name: donneesFormulaire[\"facturation-prenom\"] ?? donneesFormulaire[\"livraison-prenom\"] ?? \"\",\n last_name: donneesFormulaire[\"facturation-nom\"] ?? donneesFormulaire[\"livraison-nom\"] ?? \"\",\n phone: donneesFormulaire[\"facturation-telephone\"] ?? donneesFormulaire[\"livraison-telephone\"] ?? \"\",\n postcode: donneesFormulaire[\"facturation-code-postal\"] ?? donneesFormulaire[\"livraison-code-postal\"] ?? \"\",\n state: donneesFormulaire[\"facturation-region-etat\"] ?? donneesFormulaire[\"livraison-region-etat\"] ?? \"\",\n },\n currency: methodeLivraison.currency_code,\n customer_note: INSTRUCTIONS_CLIENT.value,\n line_items: articlesPanier,\n shipping: {\n address_1: donneesFormulaire[\"livraison-adresse\"] ?? \"\",\n address_2: \"\",\n city: donneesFormulaire[\"livraison-ville\"] ?? \"\",\n company: \"\",\n country: \"FR\",\n first_name: donneesFormulaire[\"livraison-prenom\"] ?? \"\",\n last_name: donneesFormulaire[\"livraison-nom\"] ?? \"\",\n phone: donneesFormulaire[\"livraison-telephone\"] ?? \"\",\n postcode: donneesFormulaire[\"livraison-code-postal\"] ?? \"\",\n state: donneesFormulaire[\"livraison-region-etat\"] ?? \"\",\n },\n shipping_lines: [\n {\n method_id: methodeLivraison.method_id,\n method_title: methodeLivraison.name,\n total: methodeLivraison.price,\n },\n ],\n };\n\n // Vérifie que la forme de l'objet des arguments est correcte\n eitherParse(argumentsFormulaire, WCV3OrdersArgsSchema)\n .map(async (args: WCV3OrdersArgs) => {\n // Réalise la requête\n await postBackend({\n authString: ETATS_PAGE.authString,\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_NOUVELLE_COMMANDES,\n }).then(async (reponse: Response) => {\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n\n pipe(\n // Récupère la Réponse\n await reponse.json(),\n (corpsReponse: unknown) =>\n eitherParse(corpsReponse, WCV3OrderSchema)\n .ifRight((reponse: WCV3Order) => {\n const url = new URL(`https://${window.location.host}/checkout`);\n url.searchParams.append(\"order_key\", reponse.order_key);\n url.searchParams.append(\"order_id\", String(reponse.id));\n location.assign(url);\n })\n .ifLeft(e => console.error(e.issues)),\n );\n });\n })\n .ifLeft(a => console.error(a.issues));\n });\n });\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", (): void => {\n initialiseMajEntreesPanier();\n initialiseMajConteneurPanier();\n initialiseMajContenuPanier();\n initialiseMajFormulairesPanier();\n initialiseBoutonActions();\n initialiseElementsCodePromo();\n});\n"],"names":["F","D","match","reponse"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"scripts-page-panier.js","sources":["../../src/scripts/scripts-page-panier.ts"],"sourcesContent":["import { D, F, pipe } from \"@mobily/ts-belt\";\nimport { Either, Maybe } from \"purify-ts\";\nimport { match } from \"ts-pattern\";\nimport { parse, ValiError } from \"valibot\";\n\nimport type { MessageMajContenuPanierSchema } from \"./lib/schemas/messages.ts\";\nimport type { WCStoreCart, WCStoreCartItem, WCStoreShippingRateShippingRate } from \"./lib/types/api/cart\";\nimport type { WCStoreCartRemoveItemArgs } from \"./lib/types/api/cart-remove-item\";\nimport type { WCStoreCartUpdateCustomerArgs } from \"./lib/types/api/cart-update-customer\";\nimport type { WCStoreCartUpdateItemArgs } from \"./lib/types/api/cart-update-item\";\nimport type { WCV3Order, WCV3OrdersArgs } from \"./lib/types/api/v3/orders.ts\";\nimport type { MessageMajBoutonPanierDonnees, MessageMajContenuPanierDonnees } from \"./lib/types/messages\";\n\nimport {\n ROUTE_API_MAJ_ARTICLE_PANIER,\n ROUTE_API_MAJ_CLIENT,\n ROUTE_API_NOUVELLE_COMMANDES,\n ROUTE_API_RETIRE_ARTICLE_PANIER,\n} from \"./constantes/api.ts\";\nimport {\n ATTRIBUT_CLE_PANIER,\n ATTRIBUT_CONTIENT_ARTICLES,\n ATTRIBUT_DESACTIVE,\n ATTRIBUT_HIDDEN,\n SELECTEUR_BOUTON_ACTIONS_FORMULAIRE,\n SELECTEUR_BOUTON_ADDITION_QUANTITE,\n SELECTEUR_BOUTON_SEPARATION_ADRESSES,\n SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE,\n SELECTEUR_BOUTON_SUPPRESSION_PANIER,\n SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER,\n SELECTEUR_CONTENEUR_PANIER,\n SELECTEUR_ENTREES_PANIER,\n SELECTEUR_FORMULAIRE_FACTURATION,\n SELECTEUR_FORMULAIRE_PANIER,\n SELECTEUR_INSTRUCTIONS_CLIENT,\n SELECTEUR_PRIX_LIGNE_PANIER,\n SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT,\n SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE,\n SELECTEUR_SOUS_TOTAL_PRODUITS,\n SELECTEUR_TOTAL_PANIER,\n} from \"./constantes/dom.ts\";\nimport { NOM_CANAL_BOUTON_PANIER, NOM_CANAL_CONTENU_PANIER } from \"./constantes/messages.ts\";\nimport {\n eitherJsonParse,\n eitherSessionStorageGet,\n recupereElementAvecSelecteur,\n recupereElementOuLeve,\n recupereElementsAvecSelecteur,\n} from \"./lib/dom.ts\";\nimport { type CleNonTrouveError, leveErreur, leveServerError, reporteErreur } from \"./lib/erreurs.ts\";\nimport { estError, estReponse500 } from \"./lib/gardes.ts\";\nimport {\n emetMessageMajBoutonPanier,\n emetMessageMajContenuPanier,\n valideMessageMajBoutonPanier,\n valideMessageMajContenuPanier,\n} from \"./lib/messages.ts\";\nimport { postBackend, traiteReponseBackendWCSelonCodesHTTP } from \"./lib/reseau.ts\";\nimport { WCStoreCartRemoveItemArgsSchema } from \"./lib/schemas/api/cart-remove-item.ts\";\nimport { WCStoreCartUpdateCustomerArgsSchema } from \"./lib/schemas/api/cart-update-customer.ts\";\nimport { WCStoreCartUpdateItemArgsSchema } from \"./lib/schemas/api/cart-update-item.ts\";\nimport { WCStoreCartSchema } from \"./lib/schemas/api/cart.ts\";\nimport { WCStoreShippingRateShippingRateSchema } from \"./lib/schemas/api/couts-livraison.ts\";\nimport { WCV3OrdersArgsSchema, WCV3OrderSchema } from \"./lib/schemas/api/v3/orders.ts\";\nimport {\n propEither,\n recupereElementDansDocumentOuLeve,\n recupereElementDocumentEither,\n recupereElementsDocumentEither,\n} from \"./lib/utils.ts\";\nimport { eitherParse } from \"./lib/validation.ts\";\nimport { initialiseElementsCodePromo } from \"./scripts-page-panier-code-promo.ts\";\n\ntype ElementsEntreePanier = {\n boutonAddition: HTMLButtonElement;\n boutonSoustraction: HTMLButtonElement;\n boutonSuppression: HTMLButtonElement;\n champQuantite?: HTMLInputElement;\n};\n\n/** États utiles pour les scripts de la page. */\ntype EtatsPage = {\n authString: string;\n /** Un nonce pour l'authentification de requêtes API vers le backend WooCommerce. */\n nonce: string;\n};\n\n// @ts-expect-error -- États injectés par le modèle PHP\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP\nconst ETATS_PAGE: EtatsPage = _etats;\n\n// Éléments d'intérêt\nconst ENTREES_PANIER_EITHER: Either> = recupereElementsDocumentEither(\n SELECTEUR_ENTREES_PANIER,\n);\nconst CONTENEUR_PANIER: HTMLElement = pipe(\n recupereElementDocumentEither(SELECTEUR_CONTENEUR_PANIER),\n recupereElementOuLeve,\n);\nconst SOUS_TOTAL_PRODUITS: HTMLElement = pipe(\n recupereElementDocumentEither(SELECTEUR_SOUS_TOTAL_PRODUITS),\n recupereElementOuLeve,\n);\nconst SOUS_TOTAL_LIVRAISON_COUT: HTMLElement = pipe(\n recupereElementDocumentEither(SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT),\n recupereElementOuLeve,\n);\nconst SOUS_TOTAL_LIVRAISON_PRESTATAIRE: HTMLSpanElement = pipe(\n recupereElementDocumentEither(SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE),\n recupereElementOuLeve,\n);\nconst INSTRUCTIONS_CLIENT: HTMLTextAreaElement = recupereElementDansDocumentOuLeve(\n SELECTEUR_INSTRUCTIONS_CLIENT,\n);\nconst TOTAL_PANIER: HTMLParagraphElement = pipe(\n recupereElementDocumentEither(SELECTEUR_TOTAL_PANIER),\n recupereElementOuLeve,\n);\nconst BOUTON_SEPARATION_ADRESSES: HTMLInputElement = pipe(\n recupereElementDocumentEither(SELECTEUR_BOUTON_SEPARATION_ADRESSES),\n recupereElementOuLeve,\n);\nconst FORMULAIRE_PANIER: HTMLFormElement = pipe(\n recupereElementDocumentEither(SELECTEUR_FORMULAIRE_PANIER),\n recupereElementOuLeve,\n);\nconst FORMULAIRE_FACTURATION: HTMLDivElement = pipe(\n recupereElementDocumentEither(SELECTEUR_FORMULAIRE_FACTURATION),\n recupereElementOuLeve,\n);\nlet BOUTON_ACTIONS_FORMULAIRE: HTMLButtonElement = pipe(\n recupereElementDocumentEither(SELECTEUR_BOUTON_ACTIONS_FORMULAIRE),\n recupereElementOuLeve,\n);\n\n/**\n * Fonction utilitaire pour récupérer un Élément dans une ligne (entrée) du Panier, en levant une\n * Erreur s'il n'existe pas.\n *\n * @param entree L'entrée du Panier sous forme d'Élément dans le DOM.\n * @returns L'Élément demandé.\n * @throws Une SyntaxError si l'Élément n'est pas trouvé.\n */\nconst recupereElementDansEntreePanierOuLeve =\n (entree: HTMLElement) => (selecteur: string) =>\n pipe(recupereElementAvecSelecteur(entree)(selecteur), recupereElementOuLeve);\n\nconst desactiveBoutonsEntreesPanier = (entrees: Array): void =>\n entrees.forEach((entree: HTMLElement) => {\n // Fonction utilitaire\n const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree);\n\n const elements: ElementsEntreePanier = {\n boutonAddition: recupereElementDansEntree(SELECTEUR_BOUTON_ADDITION_QUANTITE),\n boutonSoustraction: recupereElementDansEntree(SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE),\n boutonSuppression: recupereElementDansEntree(SELECTEUR_BOUTON_SUPPRESSION_PANIER),\n };\n\n elements.boutonSoustraction.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n elements.boutonAddition.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n elements.boutonSuppression.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n elements.boutonSuppression.textContent = \"C= C= C= C= C=┌(;・ω・)┘\";\n });\n\nconst majEtatsActivationBoutons = (entrees: Array): void =>\n entrees.forEach((entree: HTMLElement) => {\n // Fonction utilitaire\n const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree);\n\n const elements: ElementsEntreePanier = {\n boutonAddition: recupereElementDansEntree(SELECTEUR_BOUTON_ADDITION_QUANTITE),\n boutonSoustraction: recupereElementDansEntree(SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE),\n boutonSuppression: recupereElementDansEntree(SELECTEUR_BOUTON_SUPPRESSION_PANIER),\n champQuantite: recupereElementDansEntree(SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER),\n };\n\n Number(elements.champQuantite?.value) === 1\n ? elements.boutonSoustraction.setAttribute(ATTRIBUT_DESACTIVE, \"\")\n : elements.boutonSoustraction.removeAttribute(ATTRIBUT_DESACTIVE);\n elements.boutonAddition.removeAttribute(ATTRIBUT_DESACTIVE);\n elements.boutonSuppression.removeAttribute(ATTRIBUT_DESACTIVE);\n elements.boutonSuppression.textContent = \"Remove\";\n });\n\nconst initialiseMajEntreesPanier = (): void => {\n ENTREES_PANIER_EITHER.ifRight((entrees: Array) => {\n entrees.forEach((entree: HTMLElement) => {\n const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree);\n\n // Retire l'entrée du DOM si la clé Panier n'existe pas et arrête précocement\n const clePanier: string = Maybe.fromNullable(entree.getAttribute(ATTRIBUT_CLE_PANIER))\n .ifNothing(() => {\n entree.remove();\n return;\n })\n .orDefault(\"CLE_PANIER_INEXISTANTE\");\n\n // Récupère les attributs et éléments utilisés dans le script\n const boutonSoustraction = recupereElementDansEntree(SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE);\n const champQuantite = recupereElementDansEntree(SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER);\n const boutonAddition = recupereElementDansEntree(SELECTEUR_BOUTON_ADDITION_QUANTITE);\n const boutonSuppression = recupereElementDansEntree(SELECTEUR_BOUTON_SUPPRESSION_PANIER);\n\n // Supprime la ligne du Panier au clic sur le bouton de suppression\n boutonSuppression.addEventListener(\"click\", (): void => {\n Either\n // Valide un corps de requête\n .encase, WCStoreCartRemoveItemArgs>(() =>\n parse(WCStoreCartRemoveItemArgsSchema, { key: clePanier })\n )\n .map(async (args: WCStoreCartRemoveItemArgs) => {\n // Modifie des éléments du DOM pour signaler la requête et empêcher des doubles exécutions\n desactiveBoutonsEntreesPanier(entrees);\n\n // Réalise la requête auprès du backend\n await postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_RETIRE_ARTICLE_PANIER,\n })\n .then(async (reponse: Response) => {\n // Traite le cas d'erreur 500\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n\n pipe(\n // Récupère la Réponse\n await reponse.json(),\n // Traite tous les codes HTTPs possibles\n (corpsReponse: unknown) =>\n traiteReponseBackendWCSelonCodesHTTP(\n corpsReponse,\n WCStoreCartSchema,\n ),\n // Émets des Messages via BroadcastChannels pour la mise à jour de la page\n F.tap((panier: WCStoreCart) => {\n // Émet un Message avec le nouveau nombre de Produits dans le Panier\n emetMessageMajBoutonPanier({ quantiteProduits: panier.items_count });\n // Émet un Message avec le nouveau contenu du Panier\n emetMessageMajContenuPanier({\n produits: panier.items,\n sousTotalPanier: Number(panier.totals.total_items) / 100,\n totalPanier: Number(panier.totals.total_price) / 100,\n });\n // Retire l'entrée du Panier du DOM\n entree.remove();\n }),\n );\n })\n .catch((e: unknown) => {\n if (estError(e)) {\n reporteErreur(e);\n } else {\n console.error(\"e n'est pas une Erreur ?!\", e);\n }\n majEtatsActivationBoutons(entrees);\n });\n })\n .ifLeft((erreur: ValiError) => reporteErreur(erreur));\n });\n\n // Retire une unité à une ligne du Panier au clic sur le bouton de soustraction\n boutonSoustraction.addEventListener(\"click\", (): void => {\n Maybe.fromNullable(champQuantite.valueAsNumber)\n .filter(valeur => valeur > 1)\n .ifJust(valeur => {\n Either\n // Valide les arguments de la requête\n .encase(() =>\n parse(WCStoreCartUpdateItemArgsSchema, { key: clePanier, quantity: valeur - 1 })\n )\n .map(async (args: WCStoreCartUpdateItemArgs) => {\n // Modifie des éléments du DOM pour signaler la requête et empêcher des doubles exécutions\n desactiveBoutonsEntreesPanier(entrees);\n\n // Réalise la requête\n await postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_MAJ_ARTICLE_PANIER,\n })\n .then(async (reponse: Response) => {\n // Traite le cas d'erreur 500\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n\n pipe(\n // Récupère la Réponse\n await reponse.json(),\n // Traite tous les codes HTTPs possibles\n (corpsReponse: unknown) =>\n traiteReponseBackendWCSelonCodesHTTP(\n corpsReponse,\n WCStoreCartSchema,\n ),\n F.tap((panier: WCStoreCart) => {\n // Émet un Message avec le nouveau nombre de Produits dans le Panier\n emetMessageMajBoutonPanier({ quantiteProduits: panier.items_count });\n // Émet un Message avec le nouveau contenu du Panier\n emetMessageMajContenuPanier({\n produits: panier.items,\n sousTotalPanier: Number(panier.totals.total_items) / 100,\n totalPanier: Number(panier.totals.total_price) / 100,\n });\n }),\n );\n })\n .catch((e: unknown) => {\n if (estError(e)) {\n reporteErreur(e);\n } else {\n console.error(\"e n'est pas une Erreur ?!\", e);\n }\n\n majEtatsActivationBoutons(entrees);\n });\n });\n });\n });\n\n // Ajoute une unité à une ligne du Panier au clic sur le bouton d'addition\n boutonAddition.addEventListener(\"click\", (): void => {\n Maybe.fromNullable(champQuantite.valueAsNumber).ifJust(valeur => {\n // Modifie des éléments du DOM pour signaler la requête et empêcher des doubles exécutions\n desactiveBoutonsEntreesPanier(entrees);\n\n Either\n // Valide les arguments de la requête\n .encase(() =>\n parse(WCStoreCartUpdateItemArgsSchema, { key: clePanier, quantity: valeur + 1 })\n )\n .map(async (args: WCStoreCartUpdateItemArgs) => {\n // Réalise la requête\n await postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_MAJ_ARTICLE_PANIER,\n })\n .then(async (reponse: Response) => {\n // Traite le cas d'erreur 500\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n\n pipe(\n // Récupère la Réponse\n await reponse.json(),\n // Traite tous les codes HTTPs possibles\n (corpsReponse: unknown) =>\n traiteReponseBackendWCSelonCodesHTTP(\n corpsReponse,\n WCStoreCartSchema,\n ),\n F.tap((panier: WCStoreCart) => {\n // Émet un Message avec le nouveau nombre de Produits dans le Panier\n emetMessageMajBoutonPanier({ quantiteProduits: panier.items_count });\n // Émet un Message avec le nouveau contenu du Panier\n emetMessageMajContenuPanier({\n produits: panier.items,\n sousTotalPanier: Number(panier.totals.total_items) / 100,\n totalPanier: Number(panier.totals.total_price) / 100,\n });\n }),\n );\n })\n .catch((e: unknown) => {\n if (estError(e)) {\n reporteErreur(e);\n } else {\n console.error(\"e n'est pas une Erreur ?!\", e);\n }\n\n majEtatsActivationBoutons(entrees);\n });\n });\n });\n });\n });\n });\n};\n\nconst initialiseMajConteneurPanier = (): void => {\n new BroadcastChannel(NOM_CANAL_BOUTON_PANIER).onmessage = (evenementMessage: MessageEvent): void => {\n valideMessageMajBoutonPanier(evenementMessage)\n .map(D.getUnsafe(\"donnees\"))\n // Met à jour l'Attribut de présence de Produits dans le Panier\n .ifRight((donnees: MessageMajBoutonPanierDonnees) => {\n CONTENEUR_PANIER.setAttribute(ATTRIBUT_CONTIENT_ARTICLES, String(donnees.quantiteProduits !== 0));\n });\n };\n};\n\nconst initialiseMajContenuPanier = (): void => {\n new BroadcastChannel(NOM_CANAL_CONTENU_PANIER).onmessage = (message: MessageEvent): void => {\n valideMessageMajContenuPanier(message)\n // Récupère les données sous forme d'Either\n .chain(propEither(\"donnees\"))\n // Met à jour le contenu du Panier si des données sont présentes\n .ifRight((donnees: MessageMajContenuPanierDonnees) => {\n donnees.produits.forEach((ligne: WCStoreCartItem) => {\n // Met à jour les entrées du Panier\n ENTREES_PANIER_EITHER.ifRight((entrees: Array) => {\n Maybe\n .fromNullable(entrees.find(entree => entree.getAttribute(ATTRIBUT_CLE_PANIER) === ligne.key))\n .ifJust((entree: HTMLElement) => {\n // Fonction utilitaire\n const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree);\n\n // Récupère les Éléments à mettre à jour\n const prixLigne = recupereElementDansEntree(SELECTEUR_PRIX_LIGNE_PANIER);\n const champQuantite = recupereElementDansEntree(\n SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER,\n );\n\n // Met à jour les valeurs\n entree.setAttribute(\"data-quantite\", String(ligne.quantity));\n prixLigne.textContent = `${String(Number(ligne.totals.line_subtotal) / 100)}€`;\n champQuantite.setAttribute(\"value\", String(ligne.quantity));\n\n // Réactive les Boutons\n majEtatsActivationBoutons(entrees);\n });\n\n // Met à jour les totaux du Panier\n SOUS_TOTAL_PRODUITS.textContent = `${String(donnees.sousTotalPanier)}€`;\n TOTAL_PANIER.textContent = `${String(donnees.totalPanier)}€`;\n });\n });\n })\n // Reporte tout Erreur et réactive les Boutons\n .ifLeft((erreur: CleNonTrouveError | ValiError) => {\n reporteErreur(erreur);\n ENTREES_PANIER_EITHER.ifRight(entrees => majEtatsActivationBoutons(entrees));\n });\n };\n};\n\nconst initialiseMajFormulairesPanier = (): void => {\n BOUTON_SEPARATION_ADRESSES.addEventListener(\"click\", () => {\n Maybe.fromFalsy(BOUTON_SEPARATION_ADRESSES.checked)\n .ifJust((): void => {\n // Rend visible le formulaire de facturation\n FORMULAIRE_FACTURATION.removeAttribute(ATTRIBUT_HIDDEN);\n recupereElementsAvecSelecteur(FORMULAIRE_FACTURATION)(\"input, select\").ifRight(champs =>\n champs.forEach(champ => champ.removeAttribute(ATTRIBUT_DESACTIVE))\n );\n })\n .ifNothing((): void => {\n FORMULAIRE_FACTURATION.setAttribute(ATTRIBUT_HIDDEN, \"\");\n recupereElementsAvecSelecteur(FORMULAIRE_FACTURATION)(\n \"input, select\",\n ).ifRight(champs =>\n champs.forEach(champ => {\n champ.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n champ.value = \"\";\n })\n );\n });\n });\n};\n\nconst initialiseBoutonActions = (): void => {\n // Déclenche une requête\n BOUTON_ACTIONS_FORMULAIRE.addEventListener(\"click\", evenement => {\n Maybe\n // Ne fais rien si le Formulaire n'est pas valide\n .fromFalsy(FORMULAIRE_PANIER.checkValidity())\n .ifJust(() => {\n evenement.preventDefault();\n FORMULAIRE_PANIER.removeAttribute(ATTRIBUT_HIDDEN);\n BOUTON_ACTIONS_FORMULAIRE.textContent = \"Check-out\";\n })\n .ifJust(() => {\n // Récupère les données du Formulaire\n // @ts-expect-error -- Problème de typage de la librairie DOM\n const donneesFormulaire: Record = pipe(\n new FormData(FORMULAIRE_PANIER),\n formData => formData.entries(),\n entrees => Array.from(entrees),\n tuple => D.fromPairs(tuple),\n );\n\n // Transforme les données brutes en arguments de requête auprès du backend\n const argumentsFormulaire: WCStoreCartUpdateCustomerArgs = {\n billing_address: {\n address_1: donneesFormulaire[\"facturation-adresse\"] ?? donneesFormulaire[\"livraison-adresse\"] ?? \"\",\n address_2: \"\",\n city: donneesFormulaire[\"facturation-ville\"] ?? donneesFormulaire[\"livraison-ville\"] ?? \"\",\n company: \"\",\n country: \"FR\",\n email: donneesFormulaire[\"facturation-email\"] ?? donneesFormulaire[\"livraison-email\"] ?? \"\",\n first_name: donneesFormulaire[\"facturation-prenom\"] ?? donneesFormulaire[\"livraison-prenom\"] ?? \"\",\n last_name: donneesFormulaire[\"facturation-nom\"] ?? donneesFormulaire[\"livraison-nom\"] ?? \"\",\n phone: donneesFormulaire[\"facturation-telephone\"] ?? donneesFormulaire[\"livraison-telephone\"] ?? \"\",\n postcode: donneesFormulaire[\"facturation-code-postal\"] ?? donneesFormulaire[\"livraison-code-postal\"] ?? \"\",\n state: donneesFormulaire[\"facturation-region-etat\"] ?? donneesFormulaire[\"livraison-region-etat\"] ?? \"\",\n },\n shipping_address: {\n address_1: donneesFormulaire[\"livraison-adresse\"] ?? \"\",\n address_2: \"\",\n city: donneesFormulaire[\"livraison-ville\"] ?? \"\",\n company: \"\",\n country: \"FR\",\n first_name: donneesFormulaire[\"livraison-prenom\"] ?? \"\",\n last_name: donneesFormulaire[\"livraison-nom\"] ?? \"\",\n phone: donneesFormulaire[\"livraison-telephone\"] ?? \"\",\n postcode: donneesFormulaire[\"livraison-code-postal\"] ?? \"\",\n state: donneesFormulaire[\"livraison-region-etat\"] ?? \"\",\n },\n };\n\n // Réalise la requête et traite sa réponse\n Either\n // Valide les arguments de la requête\n .encase, WCStoreCartUpdateCustomerArgs>(() =>\n parse(WCStoreCartUpdateCustomerArgsSchema, argumentsFormulaire)\n )\n .map(async (args: WCStoreCartUpdateCustomerArgs) => {\n await postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_MAJ_CLIENT,\n }).then(async (reponse: Response) => {\n // Traite le cas d'erreur 500\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n\n pipe(\n // Récupère la Réponse\n await reponse.json(),\n // Traite tous les codes HTTPs possibles\n (corpsReponse: unknown) =>\n traiteReponseBackendWCSelonCodesHTTP(\n corpsReponse,\n WCStoreCartSchema,\n ),\n F.tap((donnees: WCStoreCart) => {\n // Récupère et adapte les informations de Livraison\n const sousTotalLivraison = donnees.totals.total_shipping === \"0\"\n ? \"Free\"\n : `${String(donnees.totals.total_shipping)} €`;\n const sousTotalPrestataire = match(donnees.shipping_rates[0]?.shipping_rates[0]?.name)\n .with(\"Mondial Relay - Livraison Point Relais (Gratuit)\", () => \"Mondial Relay - Pickup Point\")\n .with(\"Free shipping\", () => \"Free Shipping\")\n .otherwise(() => \"\");\n\n // Met à jour les informations de Livraison affichés à l'Utilisateur\n SOUS_TOTAL_LIVRAISON_COUT.textContent = sousTotalLivraison;\n SOUS_TOTAL_LIVRAISON_PRESTATAIRE.textContent = sousTotalPrestataire;\n\n // Sauvegarde la Méthode de Livraison dans le Stockage de Session\n sessionStorage.setItem(\n \"shipping_rates\",\n JSON.stringify(donnees.shipping_rates[0]?.shipping_rates[0] ?? \"\"),\n );\n }),\n );\n\n // Active le Bouton pour la création de la Commande\n initialiseBoutonCreationCommande();\n });\n })\n .ifLeft(a => console.error(a.issues));\n });\n });\n};\n\nconst initialiseBoutonCreationCommande = (): void => {\n // Permet de supprimer tout Écouteur d'Évènement assigné au Bouton\n BOUTON_ACTIONS_FORMULAIRE.outerHTML = BOUTON_ACTIONS_FORMULAIRE.outerHTML;\n // Réassigne le Bouton\n BOUTON_ACTIONS_FORMULAIRE = recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_ACTIONS_FORMULAIRE);\n // Créé la Commande au clic sur le Bouton\n BOUTON_ACTIONS_FORMULAIRE.addEventListener(\"click\", (evenement: Event) => {\n Maybe\n // Ne fais rien si le Formulaire n'est pas valide\n .fromFalsy(FORMULAIRE_PANIER.checkValidity())\n // Active l'état de chargement\n .ifJust(() => {\n evenement.preventDefault();\n BOUTON_ACTIONS_FORMULAIRE.textContent = \"Submitting...\";\n })\n .ifJust(() => {\n // Récupère les données du Formulaire sous forme d'Objet\n const donneesFormulaire = Object.fromEntries(new FormData(FORMULAIRE_PANIER)) as Record;\n\n const methodeLivraison: WCStoreShippingRateShippingRate = eitherSessionStorageGet(\"shipping_rates\")\n // Récupère la méthode de livraison depuis le stockage de session sous forme d'objet\n .chain(eitherJsonParse)\n // Vérifie la forme de l'objet récupéré\n .chain((json: JSONValue) =>\n eitherParse(\n json,\n WCStoreShippingRateShippingRateSchema,\n )\n )\n .ifLeft(e => {\n if (e instanceof ValiError) console.error(e.issues);\n console.error(\"methodeLivraison\", e);\n BOUTON_ACTIONS_FORMULAIRE.textContent = \"Check-out\";\n leveErreur(e);\n })\n .unsafeCoerce();\n\n const articlesPanier = ENTREES_PANIER_EITHER\n .orDefault([])\n .map((entree: HTMLElement) => ({\n product_id: Number(entree.getAttribute(\"data-id-produit\")),\n quantity: Number(entree.getAttribute(\"data-quantite\")),\n ...(entree.getAttribute(\"data-id-variation\") && {\n variation_id: Number(entree.getAttribute(\"data-id-variation\")),\n }),\n }));\n\n const argumentsFormulaire: WCV3OrdersArgs = {\n billing: {\n address_1: donneesFormulaire[\"facturation-adresse\"] ?? donneesFormulaire[\"livraison-adresse\"] ?? \"\",\n address_2: \"\",\n city: donneesFormulaire[\"facturation-ville\"] ?? donneesFormulaire[\"livraison-ville\"] ?? \"\",\n company: \"\",\n country: \"FR\",\n email: donneesFormulaire[\"facturation-email\"] ?? donneesFormulaire[\"livraison-email\"] ?? \"\",\n first_name: donneesFormulaire[\"facturation-prenom\"] ?? donneesFormulaire[\"livraison-prenom\"] ?? \"\",\n last_name: donneesFormulaire[\"facturation-nom\"] ?? donneesFormulaire[\"livraison-nom\"] ?? \"\",\n phone: donneesFormulaire[\"facturation-telephone\"] ?? donneesFormulaire[\"livraison-telephone\"] ?? \"\",\n postcode: donneesFormulaire[\"facturation-code-postal\"] ?? donneesFormulaire[\"livraison-code-postal\"] ?? \"\",\n state: donneesFormulaire[\"facturation-region-etat\"] ?? donneesFormulaire[\"livraison-region-etat\"] ?? \"\",\n },\n currency: methodeLivraison.currency_code,\n customer_note: INSTRUCTIONS_CLIENT.value,\n line_items: articlesPanier,\n shipping: {\n address_1: donneesFormulaire[\"livraison-adresse\"] ?? \"\",\n address_2: \"\",\n city: donneesFormulaire[\"livraison-ville\"] ?? \"\",\n company: \"\",\n country: \"FR\",\n first_name: donneesFormulaire[\"livraison-prenom\"] ?? \"\",\n last_name: donneesFormulaire[\"livraison-nom\"] ?? \"\",\n phone: donneesFormulaire[\"livraison-telephone\"] ?? \"\",\n postcode: donneesFormulaire[\"livraison-code-postal\"] ?? \"\",\n state: donneesFormulaire[\"livraison-region-etat\"] ?? \"\",\n },\n shipping_lines: [\n {\n method_id: methodeLivraison.method_id,\n method_title: methodeLivraison.name,\n total: methodeLivraison.price,\n },\n ],\n };\n\n // Vérifie que la forme de l'objet des arguments est correcte\n eitherParse(argumentsFormulaire, WCV3OrdersArgsSchema)\n .map(async (args: WCV3OrdersArgs) => {\n // Réalise la requête\n await postBackend({\n authString: ETATS_PAGE.authString,\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_NOUVELLE_COMMANDES,\n }).then(async (reponse: Response) => {\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n\n pipe(\n // Récupère la Réponse\n await reponse.json(),\n (corpsReponse: unknown) =>\n eitherParse(corpsReponse, WCV3OrderSchema)\n .ifRight((reponse: WCV3Order) => {\n const url = new URL(`https://${window.location.host}/checkout`);\n url.searchParams.append(\"order_key\", reponse.order_key);\n url.searchParams.append(\"order_id\", String(reponse.id));\n location.assign(url);\n })\n .ifLeft(e => console.error(e.issues)),\n );\n });\n })\n .ifLeft(a => console.error(a.issues));\n });\n });\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", (): void => {\n initialiseMajEntreesPanier();\n initialiseMajConteneurPanier();\n initialiseMajContenuPanier();\n initialiseMajFormulairesPanier();\n initialiseBoutonActions();\n initialiseElementsCodePromo();\n});\n"],"names":["F","D","match","reponse"],"mappings":"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"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-produit.js b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-produit.js index ef5803cb..50df75a7 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-produit.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-produit.js @@ -1,23 +1,23 @@ import { z } from "./index.CeK6pfoJ.js"; import { g as ROUTE_API_AJOUTE_ARTICLE_PANIER, E as ENTETE_WC_NONCE } from "./api.js"; -import { K as SELECTEUR_BOUTON_AJOUT_PANIER, L as SELECTEUR_SELECTEUR_QUANTITE, M as SELECTEUR_LIENS_ONGLETS, N as SELECTEUR_SECTIONS_CONTENUS, O as SELECTEUR_PRIX_PRODUIT, P as SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT, Q as SELECTEUR_FLECHE_DEFILEMENT_GAUCHE, R as SELECTEUR_FLECHE_DEFILEMENT_DROITE, T as SELECTEUR_PHOTOS_PRODUIT, U as SELECTEUR_IMAGE_COLONNE_GAUCHE, V as SELECTEUR_IMAGES_COLONNE_DROITE, W as ATTRIBUT_INDEX_IMAGE_ACTIVE, X as ATTRIBUT_ARIA_SELECTED, k as ATTRIBUT_HIDDEN, I as ATTRIBUT_DESACTIVE, Y as ATTRIBUT_PRIX } from "./dom.js"; +import { M as SELECTEUR_BOUTON_AJOUT_PANIER, N as SELECTEUR_SELECTEUR_QUANTITE, O as SELECTEUR_LIENS_ONGLETS, P as SELECTEUR_SECTIONS_CONTENUS, Q as SELECTEUR_PRIX_PRODUIT, R as SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT, T as SELECTEUR_FLECHE_DEFILEMENT_GAUCHE, U as SELECTEUR_FLECHE_DEFILEMENT_DROITE, V as SELECTEUR_PHOTOS_PRODUIT, W as SELECTEUR_IMAGE_COLONNE_GAUCHE, X as SELECTEUR_IMAGES_COLONNE_DROITE, Y as ATTRIBUT_INDEX_IMAGE_ACTIVE, Z as ATTRIBUT_ARIA_SELECTED, k as ATTRIBUT_HIDDEN, D as ATTRIBUT_DESACTIVE, _ as ATTRIBUT_PRIX } from "./dom.js"; import { r as recupereElementOuLeve, f as recupereElementsOuLeve, R as Ra } from "./dom2.js"; -import { l as leveServerError, r as reporteErreur } from "./erreurs.js"; +import { l as leveServerError, r as reporteErreur } from "./erreurs2.js"; import { b as estHTMLSelectElement, e as estReponse500, a as estError } from "./gardes.js"; import { e as emetMessageMajBoutonPanier } from "./messages.js"; import { t as traiteReponseBackendWCSelonCodesHTTP } from "./reseau.js"; -import { W as WCStoreCartSchema } from "./cart.js"; import { W as WCStoreCartAddItemArgsSchema } from "./cart-add-item.js"; +import { W as WCStoreCartSchema } from "./cart.js"; import { r as recupereElementDocumentEither, a as recupereElementDansDocumentOuLeve, c as recupereElementsDocumentEither, b as recupereElementsDansDocumentOuLeve, y } from "./utils.js"; import { e as eitherParse } from "./validation.js"; import { p as pipe } from "./pipe.XPB0wEfw.js"; import { l } from "./index-0eef19ec.DoJSf22Z.js"; import { M as Maybe } from "./Either.wHNxn7Os.js"; import "./exports.3IcOsN8u.js"; -import "./index.DKC_Jv5v.js"; +import "./index.DxUTT09Y.js"; import "./messages3.js"; +import "./erreurs3.js"; import "./messages2.js"; -import "./erreurs2.js"; import "./cart2.js"; import "./adresses.js"; import "./cart-coupons.js"; diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-produit.js.map b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-produit.js.map index d99f0436..e4c44534 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-produit.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-produit.js.map @@ -1 +1 @@ -{"version":3,"file":"scripts-page-produit.js","sources":["../../src/scripts/scripts-page-produit.ts"],"sourcesContent":["// Scripts pour la Page Produit\n\nimport { A, D, F, pipe } from \"@mobily/ts-belt\";\nimport { type Either, Maybe } from \"purify-ts\";\nimport { match } from \"ts-pattern\";\n\nimport type { WCStoreCart } from \"./lib/types/api/cart\";\nimport type { WCStoreCartAddItemArgs } from \"./lib/types/api/cart-add-item.ts\";\n\nimport { ENTETE_WC_NONCE, ROUTE_API_AJOUTE_ARTICLE_PANIER } from \"./constantes/api.ts\";\nimport {\n ATTRIBUT_ARIA_SELECTED,\n ATTRIBUT_DESACTIVE,\n ATTRIBUT_HIDDEN,\n ATTRIBUT_INDEX_IMAGE_ACTIVE,\n ATTRIBUT_PRIX,\n SELECTEUR_BOUTON_AJOUT_PANIER,\n SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT,\n SELECTEUR_FLECHE_DEFILEMENT_DROITE,\n SELECTEUR_FLECHE_DEFILEMENT_GAUCHE,\n SELECTEUR_IMAGE_COLONNE_GAUCHE,\n SELECTEUR_IMAGES_COLONNE_DROITE,\n SELECTEUR_LIENS_ONGLETS,\n SELECTEUR_PHOTOS_PRODUIT,\n SELECTEUR_PRIX_PRODUIT,\n SELECTEUR_SECTIONS_CONTENUS,\n SELECTEUR_SELECTEUR_QUANTITE,\n} from \"./constantes/dom\";\nimport { recupereElementOuLeve, recupereElementsOuLeve } from \"./lib/dom.ts\";\nimport { leveServerError, reporteErreur } from \"./lib/erreurs.ts\";\nimport { estError, estHTMLSelectElement, estReponse500 } from \"./lib/gardes.ts\";\nimport { emetMessageMajBoutonPanier } from \"./lib/messages.ts\";\nimport { traiteReponseBackendWCSelonCodesHTTP } from \"./lib/reseau.ts\";\nimport { WCStoreCartSchema } from \"./lib/schemas/api/cart.ts\";\nimport { WCStoreCartAddItemArgsSchema } from \"./lib/schemas/api/cart-add-item.ts\";\nimport {\n recupereElementDansDocumentOuLeve,\n recupereElementDocumentEither,\n recupereElementsDansDocumentOuLeve,\n recupereElementsDocumentEither,\n} from \"./lib/utils.ts\";\nimport { eitherParse } from \"./lib/validation.ts\";\n\n/** États utiles pour les scripts de la page. */\ntype EtatsPage = {\n /** L'ID en base de données du Produit. */\n idProduit: number;\n /** Un nonce pour l'authentification de requêtes API vers le backend WooCommerce. */\n nonce: string;\n};\ntype EnsembleLienContenu = [HTMLAnchorElement, HTMLElement];\n\n// @ts-expect-error -- États injectés par le modèle PHP\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP\nconst ETATS_PAGE: EtatsPage = _etats;\n\n/**\n * Fonction utilitaire pour déplier toutes les sections de la Boîte des Informations Produit, en ajustant les attributs correspondants.\n */\nconst deplieToutesSections = (ensembleLiensContenus: Array): void => {\n ensembleLiensContenus.forEach(ensemble => {\n ensemble[0].setAttribute(ATTRIBUT_ARIA_SELECTED, \"false\");\n ensemble[1].setAttribute(ATTRIBUT_HIDDEN, \"true\");\n });\n};\n\n// Éléments d'intérêt\n/** Le Bouton permettant l'ajout d'un Produit dans le Panier. */\nconst BOUTON_AJOUT_PANIER: HTMLButtonElement = pipe(\n recupereElementDocumentEither(SELECTEUR_BOUTON_AJOUT_PANIER),\n recupereElementOuLeve,\n);\n/** Le Sélecteur de Variation de Produit. */\nconst SELECTEUR_VARIATION: Either = recupereElementDocumentEither(\n SELECTEUR_SELECTEUR_QUANTITE,\n);\nconst PRIX_PRODUIT: HTMLParagraphElement = recupereElementDansDocumentOuLeve(\n SELECTEUR_PRIX_PRODUIT,\n);\n/** */\nconst LIENS_ONGLETS: Array = pipe(\n recupereElementsDocumentEither(SELECTEUR_LIENS_ONGLETS),\n recupereElementsOuLeve,\n);\n/** */\nconst SECTIONS_CONTENUS: Array = pipe(\n recupereElementsDocumentEither(SELECTEUR_SECTIONS_CONTENUS),\n recupereElementsOuLeve,\n);\n\nconst initialiseFlechesDefilementImages = (): void => {\n const CONTENEUR_FLECHES_DEFILEMENT = recupereElementDansDocumentOuLeve(\n SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT,\n );\n const FLECHE_DEFILEMENT_GAUCHE = recupereElementDansDocumentOuLeve(\n SELECTEUR_FLECHE_DEFILEMENT_GAUCHE,\n );\n const FLECHE_DEFILEMENT_DROITE = recupereElementDansDocumentOuLeve(\n SELECTEUR_FLECHE_DEFILEMENT_DROITE,\n );\n const PHOTOS_PRODUIT = recupereElementDansDocumentOuLeve(SELECTEUR_PHOTOS_PRODUIT);\n const IMAGES = A.flat([\n recupereElementDansDocumentOuLeve(SELECTEUR_IMAGE_COLONNE_GAUCHE),\n recupereElementsDansDocumentOuLeve(SELECTEUR_IMAGES_COLONNE_DROITE),\n ]);\n\n const recupereIndexImageCourante = (): number => Number(PHOTOS_PRODUIT.getAttribute(ATTRIBUT_INDEX_IMAGE_ACTIVE));\n\n // Affiche et cache en fonction de la position de défilement\n A.forEachWithIndex([IMAGES.at(0), IMAGES.at(-1)], (index, image) => {\n if (!image) return;\n\n // Change les attributs gérant l'affichage des flèches de défilement\n new IntersectionObserver(\n A.forEach(entree =>\n match([entree.isIntersecting, index])\n .with([true, 0], () => CONTENEUR_FLECHES_DEFILEMENT.removeAttribute(\"data-images-presentes-debut\"))\n .with([true, 1], () => CONTENEUR_FLECHES_DEFILEMENT.removeAttribute(\"data-images-presentes-fin\"))\n .with([false, 0], () => CONTENEUR_FLECHES_DEFILEMENT.setAttribute(\"data-images-presentes-debut\", \"\"))\n .with([false, 1], () => CONTENEUR_FLECHES_DEFILEMENT.setAttribute(\"data-images-presentes-fin\", \"\"))\n .otherwise(() => void 0)\n ),\n { root: null, rootMargin: \"100% 0% 100% 0%\", threshold: 0.5 },\n ).observe(image);\n\n // Change l'index de l'Image active en fonction du défilement\n A.forEachWithIndex(IMAGES, (index, image) =>\n new IntersectionObserver(\n A.forEach(entree => {\n if (!entree.isIntersecting) return;\n PHOTOS_PRODUIT.setAttribute(ATTRIBUT_INDEX_IMAGE_ACTIVE, String(index));\n }),\n { root: null, rootMargin: \"100% 0% 100% 0%\", threshold: 0.5 },\n ).observe(image));\n\n // Défile au clic sur les flèches\n FLECHE_DEFILEMENT_GAUCHE.addEventListener(\"click\", () =>\n IMAGES[recupereIndexImageCourante() - 1]?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"center\",\n }));\n FLECHE_DEFILEMENT_DROITE.addEventListener(\"click\", () =>\n IMAGES[recupereIndexImageCourante() + 1]?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"center\",\n }));\n });\n};\n\nconst gereBoiteInformationsProduit = (): void => {\n const onglets = new Map();\n\n // Créé la Map avec les ensembles Lien-Contenu\n LIENS_ONGLETS.forEach((lien, index) => {\n const idOnglet: null | string = lien.getAttribute(\"id\");\n const sectionCorrespondante: HTMLElement | undefined = SECTIONS_CONTENUS[index];\n\n if (!idOnglet) throw new Error(\"Le lien ne dispose pas d'ID !\");\n if (!sectionCorrespondante) throw new Error(\"Le lien ne dispose pas de section correspondante !\");\n\n onglets.set(idOnglet, [lien, sectionCorrespondante]);\n\n lien.addEventListener(\"click\", e => {\n // Empêche la pollution de l'historique de navigation\n e.preventDefault();\n // Sauvegarde l'état d'ouverture de la section avant de toutes les fermer\n const estAncienOngletCourant: boolean = lien.getAttribute(ATTRIBUT_ARIA_SELECTED) === \"true\";\n deplieToutesSections(pipe(onglets.values(), Array.from));\n // Ne fais rien de plus si l'onglet sélectionné était le courant\n if (estAncienOngletCourant) return;\n // Ouvre le nouvel onglet sélectionné\n lien.setAttribute(ATTRIBUT_ARIA_SELECTED, \"true\");\n sectionCorrespondante.removeAttribute(ATTRIBUT_HIDDEN);\n });\n });\n\n // Ajoute des Écouteurs d'Événements\n SELECTEUR_VARIATION.ifRight(selecteur =>\n selecteur.addEventListener(\"change\", evenement => {\n const cibleSelecteur = pipe(\n Maybe.fromNullable(evenement.target),\n cibleEvenement => cibleEvenement.filter(estHTMLSelectElement),\n );\n\n // Active le Bouton si le Sélecteur est valide\n pipe(\n cibleSelecteur,\n element => element.map(v => v.validity.valid),\n validite => validite.ifJust((v: boolean) => BOUTON_AJOUT_PANIER.toggleAttribute(ATTRIBUT_DESACTIVE, !v)),\n );\n\n // Met à jour le prix affiché pour la Variation\n pipe(\n cibleSelecteur,\n selecteur => selecteur.chain(s => Maybe.fromNullable(s.selectedOptions[0])),\n option => option.chain(e => Maybe.fromNullable(e.getAttribute(ATTRIBUT_PRIX))),\n prix =>\n prix.ifJust(p => {\n PRIX_PRODUIT.textContent = `${p}€`;\n }),\n );\n })\n );\n BOUTON_AJOUT_PANIER.addEventListener(\"click\", _ => ajouteProduitAuPanier());\n};\n\nconst ajouteProduitAuPanier = () => {\n // Déclenche l'etat de chargement\n BOUTON_AJOUT_PANIER.textContent = \"Adding...\";\n\n // Construis les arguments de la requête au backend\n const idProduit: string = SELECTEUR_VARIATION\n .map(selecteur => selecteur.value)\n .orDefault(String(ETATS_PAGE.idProduit));\n const args: WCStoreCartAddItemArgs = {\n id: Number(idProduit),\n quantity: 1,\n };\n\n // Exécute la requête\n eitherParse(args, WCStoreCartAddItemArgsSchema)\n .map((args: WCStoreCartAddItemArgs) => {\n fetch(ROUTE_API_AJOUTE_ARTICLE_PANIER, {\n body: JSON.stringify(args),\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: ETATS_PAGE.nonce,\n },\n method: \"POST\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n })\n .then(async (reponse: Response) => {\n // Traite le cas d'erreur 500\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n\n pipe(\n // Récupère la Réponse\n await reponse.json(),\n // Traite tous les codes HTTPs possibles\n (corpsReponse: unknown) =>\n traiteReponseBackendWCSelonCodesHTTP(\n corpsReponse,\n WCStoreCartSchema,\n ),\n // Récupère le nombre de Produits dans la Panier\n D.getUnsafe(\"items_count\"),\n // Déclenche les effets pour la mise à jour de l'IU\n F.tap((nombreArticlesPanier: number) => {\n BOUTON_AJOUT_PANIER.textContent = \"Added to cart!\";\n emetMessageMajBoutonPanier({ quantiteProduits: nombreArticlesPanier });\n\n // TODO: Prévoir un cas où ce Timeout est annulé quand l'Utilisateur agit avant sur le Sélecteur\n setTimeout(() => {\n SELECTEUR_VARIATION.ifRight(selecteur => {\n selecteur.value = selecteur.options.item(0)?.value ?? \"--\";\n });\n BOUTON_AJOUT_PANIER.toggleAttribute(ATTRIBUT_DESACTIVE, true);\n BOUTON_AJOUT_PANIER.textContent = \"Add to cart\";\n }, 3000);\n }),\n );\n })\n .catch((e: unknown) => {\n if (estError(e)) {\n reporteErreur(e);\n console.error(e);\n } else {\n console.error(\"e n'est pas une Erreur ?!\", e);\n }\n BOUTON_AJOUT_PANIER.textContent = \"Add to cart\";\n });\n })\n .ifLeft(e => console.error(e.issues));\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n gereBoiteInformationsProduit();\n initialiseFlechesDefilementImages();\n});\n"],"names":["A","match","index","image","selecteur","args","D","F"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"scripts-page-produit.js","sources":["../../src/scripts/scripts-page-produit.ts"],"sourcesContent":["// Scripts pour la Page Produit\n\nimport { A, D, F, pipe } from \"@mobily/ts-belt\";\nimport { type Either, Maybe } from \"purify-ts\";\nimport { match } from \"ts-pattern\";\n\nimport type { WCStoreCart } from \"./lib/types/api/cart\";\nimport type { WCStoreCartAddItemArgs } from \"./lib/types/api/cart-add-item.ts\";\n\nimport { ENTETE_WC_NONCE, ROUTE_API_AJOUTE_ARTICLE_PANIER } from \"./constantes/api.ts\";\nimport {\n ATTRIBUT_ARIA_SELECTED,\n ATTRIBUT_DESACTIVE,\n ATTRIBUT_HIDDEN,\n ATTRIBUT_INDEX_IMAGE_ACTIVE,\n ATTRIBUT_PRIX,\n SELECTEUR_BOUTON_AJOUT_PANIER,\n SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT,\n SELECTEUR_FLECHE_DEFILEMENT_DROITE,\n SELECTEUR_FLECHE_DEFILEMENT_GAUCHE,\n SELECTEUR_IMAGE_COLONNE_GAUCHE,\n SELECTEUR_IMAGES_COLONNE_DROITE,\n SELECTEUR_LIENS_ONGLETS,\n SELECTEUR_PHOTOS_PRODUIT,\n SELECTEUR_PRIX_PRODUIT,\n SELECTEUR_SECTIONS_CONTENUS,\n SELECTEUR_SELECTEUR_QUANTITE,\n} from \"./constantes/dom\";\nimport { recupereElementOuLeve, recupereElementsOuLeve } from \"./lib/dom.ts\";\nimport { leveServerError, reporteErreur } from \"./lib/erreurs.ts\";\nimport { estError, estHTMLSelectElement, estReponse500 } from \"./lib/gardes.ts\";\nimport { emetMessageMajBoutonPanier } from \"./lib/messages.ts\";\nimport { traiteReponseBackendWCSelonCodesHTTP } from \"./lib/reseau.ts\";\nimport { WCStoreCartAddItemArgsSchema } from \"./lib/schemas/api/cart-add-item.ts\";\nimport { WCStoreCartSchema } from \"./lib/schemas/api/cart.ts\";\nimport {\n recupereElementDansDocumentOuLeve,\n recupereElementDocumentEither,\n recupereElementsDansDocumentOuLeve,\n recupereElementsDocumentEither,\n} from \"./lib/utils.ts\";\nimport { eitherParse } from \"./lib/validation.ts\";\n\ntype EnsembleLienContenu = [HTMLAnchorElement, HTMLElement];\n/** États utiles pour les scripts de la page. */\ntype EtatsPage = {\n /** L'ID en base de données du Produit. */\n idProduit: number;\n /** Un nonce pour l'authentification de requêtes API vers le backend WooCommerce. */\n nonce: string;\n};\n\n// @ts-expect-error -- États injectés par le modèle PHP\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- États injectés par le modèle PHP\nconst ETATS_PAGE: EtatsPage = _etats;\n\n/**\n * Fonction utilitaire pour déplier toutes les sections de la Boîte des Informations Produit, en ajustant les attributs correspondants.\n */\nconst deplieToutesSections = (ensembleLiensContenus: Array): void => {\n ensembleLiensContenus.forEach(ensemble => {\n ensemble[0].setAttribute(ATTRIBUT_ARIA_SELECTED, \"false\");\n ensemble[1].setAttribute(ATTRIBUT_HIDDEN, \"true\");\n });\n};\n\n// Éléments d'intérêt\n/** Le Bouton permettant l'ajout d'un Produit dans le Panier. */\nconst BOUTON_AJOUT_PANIER: HTMLButtonElement = pipe(\n recupereElementDocumentEither(SELECTEUR_BOUTON_AJOUT_PANIER),\n recupereElementOuLeve,\n);\n/** Le Sélecteur de Variation de Produit. */\nconst SELECTEUR_VARIATION: Either = recupereElementDocumentEither(\n SELECTEUR_SELECTEUR_QUANTITE,\n);\nconst PRIX_PRODUIT: HTMLParagraphElement = recupereElementDansDocumentOuLeve(\n SELECTEUR_PRIX_PRODUIT,\n);\n/** */\nconst LIENS_ONGLETS: Array = pipe(\n recupereElementsDocumentEither(SELECTEUR_LIENS_ONGLETS),\n recupereElementsOuLeve,\n);\n/** */\nconst SECTIONS_CONTENUS: Array = pipe(\n recupereElementsDocumentEither(SELECTEUR_SECTIONS_CONTENUS),\n recupereElementsOuLeve,\n);\n\nconst initialiseFlechesDefilementImages = (): void => {\n const CONTENEUR_FLECHES_DEFILEMENT = recupereElementDansDocumentOuLeve(\n SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT,\n );\n const FLECHE_DEFILEMENT_GAUCHE = recupereElementDansDocumentOuLeve(\n SELECTEUR_FLECHE_DEFILEMENT_GAUCHE,\n );\n const FLECHE_DEFILEMENT_DROITE = recupereElementDansDocumentOuLeve(\n SELECTEUR_FLECHE_DEFILEMENT_DROITE,\n );\n const PHOTOS_PRODUIT = recupereElementDansDocumentOuLeve(SELECTEUR_PHOTOS_PRODUIT);\n const IMAGES = A.flat([\n recupereElementDansDocumentOuLeve(SELECTEUR_IMAGE_COLONNE_GAUCHE),\n recupereElementsDansDocumentOuLeve(SELECTEUR_IMAGES_COLONNE_DROITE),\n ]);\n\n const recupereIndexImageCourante = (): number => Number(PHOTOS_PRODUIT.getAttribute(ATTRIBUT_INDEX_IMAGE_ACTIVE));\n\n // Affiche et cache en fonction de la position de défilement\n A.forEachWithIndex([IMAGES.at(0), IMAGES.at(-1)], (index, image) => {\n if (!image) return;\n\n // Change les attributs gérant l'affichage des flèches de défilement\n new IntersectionObserver(\n A.forEach(entree =>\n match([entree.isIntersecting, index])\n .with([true, 0], () => CONTENEUR_FLECHES_DEFILEMENT.removeAttribute(\"data-images-presentes-debut\"))\n .with([true, 1], () => CONTENEUR_FLECHES_DEFILEMENT.removeAttribute(\"data-images-presentes-fin\"))\n .with([false, 0], () => CONTENEUR_FLECHES_DEFILEMENT.setAttribute(\"data-images-presentes-debut\", \"\"))\n .with([false, 1], () => CONTENEUR_FLECHES_DEFILEMENT.setAttribute(\"data-images-presentes-fin\", \"\"))\n .otherwise(() => void 0)\n ),\n { root: null, rootMargin: \"100% 0% 100% 0%\", threshold: 0.5 },\n ).observe(image);\n\n // Change l'index de l'Image active en fonction du défilement\n A.forEachWithIndex(IMAGES, (index, image) =>\n new IntersectionObserver(\n A.forEach(entree => {\n if (!entree.isIntersecting) return;\n PHOTOS_PRODUIT.setAttribute(ATTRIBUT_INDEX_IMAGE_ACTIVE, String(index));\n }),\n { root: null, rootMargin: \"100% 0% 100% 0%\", threshold: 0.5 },\n ).observe(image));\n\n // Défile au clic sur les flèches\n FLECHE_DEFILEMENT_GAUCHE.addEventListener(\"click\", () =>\n IMAGES[recupereIndexImageCourante() - 1]?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"center\",\n }));\n FLECHE_DEFILEMENT_DROITE.addEventListener(\"click\", () =>\n IMAGES[recupereIndexImageCourante() + 1]?.scrollIntoView({\n behavior: \"smooth\",\n block: \"nearest\",\n inline: \"center\",\n }));\n });\n};\n\nconst gereBoiteInformationsProduit = (): void => {\n const onglets = new Map();\n\n // Créé la Map avec les ensembles Lien-Contenu\n LIENS_ONGLETS.forEach((lien, index) => {\n const idOnglet: null | string = lien.getAttribute(\"id\");\n const sectionCorrespondante: HTMLElement | undefined = SECTIONS_CONTENUS[index];\n\n if (!idOnglet) throw new Error(\"Le lien ne dispose pas d'ID !\");\n if (!sectionCorrespondante) throw new Error(\"Le lien ne dispose pas de section correspondante !\");\n\n onglets.set(idOnglet, [lien, sectionCorrespondante]);\n\n lien.addEventListener(\"click\", e => {\n // Empêche la pollution de l'historique de navigation\n e.preventDefault();\n // Sauvegarde l'état d'ouverture de la section avant de toutes les fermer\n const estAncienOngletCourant: boolean = lien.getAttribute(ATTRIBUT_ARIA_SELECTED) === \"true\";\n deplieToutesSections(pipe(onglets.values(), Array.from));\n // Ne fais rien de plus si l'onglet sélectionné était le courant\n if (estAncienOngletCourant) return;\n // Ouvre le nouvel onglet sélectionné\n lien.setAttribute(ATTRIBUT_ARIA_SELECTED, \"true\");\n sectionCorrespondante.removeAttribute(ATTRIBUT_HIDDEN);\n });\n });\n\n // Ajoute des Écouteurs d'Événements\n SELECTEUR_VARIATION.ifRight(selecteur =>\n selecteur.addEventListener(\"change\", evenement => {\n const cibleSelecteur = pipe(\n Maybe.fromNullable(evenement.target),\n cibleEvenement => cibleEvenement.filter(estHTMLSelectElement),\n );\n\n // Active le Bouton si le Sélecteur est valide\n pipe(\n cibleSelecteur,\n element => element.map(v => v.validity.valid),\n validite => validite.ifJust((v: boolean) => BOUTON_AJOUT_PANIER.toggleAttribute(ATTRIBUT_DESACTIVE, !v)),\n );\n\n // Met à jour le prix affiché pour la Variation\n pipe(\n cibleSelecteur,\n selecteur => selecteur.chain(s => Maybe.fromNullable(s.selectedOptions[0])),\n option => option.chain(e => Maybe.fromNullable(e.getAttribute(ATTRIBUT_PRIX))),\n prix =>\n prix.ifJust(p => {\n PRIX_PRODUIT.textContent = `${p}€`;\n }),\n );\n })\n );\n BOUTON_AJOUT_PANIER.addEventListener(\"click\", _ => ajouteProduitAuPanier());\n};\n\nconst ajouteProduitAuPanier = () => {\n // Déclenche l'etat de chargement\n BOUTON_AJOUT_PANIER.textContent = \"Adding...\";\n\n // Construis les arguments de la requête au backend\n const idProduit: string = SELECTEUR_VARIATION\n .map(selecteur => selecteur.value)\n .orDefault(String(ETATS_PAGE.idProduit));\n const args: WCStoreCartAddItemArgs = {\n id: Number(idProduit),\n quantity: 1,\n };\n\n // Exécute la requête\n eitherParse(args, WCStoreCartAddItemArgsSchema)\n .map((args: WCStoreCartAddItemArgs) => {\n fetch(ROUTE_API_AJOUTE_ARTICLE_PANIER, {\n body: JSON.stringify(args),\n credentials: \"same-origin\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n [ENTETE_WC_NONCE]: ETATS_PAGE.nonce,\n },\n method: \"POST\",\n mode: \"same-origin\",\n signal: AbortSignal.timeout(5000),\n })\n .then(async (reponse: Response) => {\n // Traite le cas d'erreur 500\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n\n pipe(\n // Récupère la Réponse\n await reponse.json(),\n // Traite tous les codes HTTPs possibles\n (corpsReponse: unknown) =>\n traiteReponseBackendWCSelonCodesHTTP(\n corpsReponse,\n WCStoreCartSchema,\n ),\n // Récupère le nombre de Produits dans la Panier\n D.getUnsafe(\"items_count\"),\n // Déclenche les effets pour la mise à jour de l'IU\n F.tap((nombreArticlesPanier: number) => {\n BOUTON_AJOUT_PANIER.textContent = \"Added to cart!\";\n emetMessageMajBoutonPanier({ quantiteProduits: nombreArticlesPanier });\n\n // TODO: Prévoir un cas où ce Timeout est annulé quand l'Utilisateur agit avant sur le Sélecteur\n setTimeout(() => {\n SELECTEUR_VARIATION.ifRight(selecteur => {\n selecteur.value = selecteur.options.item(0)?.value ?? \"--\";\n });\n BOUTON_AJOUT_PANIER.toggleAttribute(ATTRIBUT_DESACTIVE, true);\n BOUTON_AJOUT_PANIER.textContent = \"Add to cart\";\n }, 3000);\n }),\n );\n })\n .catch((e: unknown) => {\n if (estError(e)) {\n reporteErreur(e);\n console.error(e);\n } else {\n console.error(\"e n'est pas une Erreur ?!\", e);\n }\n BOUTON_AJOUT_PANIER.textContent = \"Add to cart\";\n });\n })\n .ifLeft(e => console.error(e.issues));\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n gereBoiteInformationsProduit();\n initialiseFlechesDefilementImages();\n});\n"],"names":["A","match","index","image","selecteur","args","D","F"],"mappings":"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"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/utils.js b/web/app/themes/haiku-atelier-2024/assets/js/utils.js index 01a0c91f..6b7bf7c2 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/utils.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/utils.js @@ -1,5 +1,5 @@ import { l as values, m as fromArray, g as equal, n as get$1, u as unsafeDeleteKey, o as forEachU, p as mapU, q as reduceU, t as append, a as recupereElementsAvecSelecteur, c as recupereElementAvecSelecteur, r as recupereElementOuLeve, f as recupereElementsOuLeve } from "./dom2.js"; -import { C as CleNonTrouveError } from "./erreurs.js"; +import { C as CleNonTrouveError } from "./erreurs2.js"; import { p as pipe } from "./pipe.XPB0wEfw.js"; import { M as Maybe } from "./Either.wHNxn7Os.js"; import "./exports.3IcOsN8u.js"; diff --git a/web/app/themes/haiku-atelier-2024/assets/js/validation.js b/web/app/themes/haiku-atelier-2024/assets/js/validation.js index 5d2d8021..5161e430 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/validation.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/validation.js @@ -1,4 +1,4 @@ -import { p as parse } from "./index.DKC_Jv5v.js"; +import { p as parse } from "./index.DxUTT09Y.js"; import { E as Either } from "./Either.wHNxn7Os.js"; const eitherParse = (valeur, schema) => Either.encase(() => parse(schema, valeur)); export { diff --git a/web/app/themes/haiku-atelier-2024/src/sass/layouts/_panneau-panier.scss b/web/app/themes/haiku-atelier-2024/src/sass/layouts/_panneau-panier.scss index 030fffba..891fcf19 100644 --- a/web/app/themes/haiku-atelier-2024/src/sass/layouts/_panneau-panier.scss +++ b/web/app/themes/haiku-atelier-2024/src/sass/layouts/_panneau-panier.scss @@ -145,19 +145,29 @@ &__code-promo { display: flex; - flex-flow: row nowrap; + flex-flow: row wrap; width: fit-content; + place-content: center; margin: auto; input { width: 20rem; } + /* + * 1. Longueur minimale pour le Bouton n'ait pas à changer de taille quel que soit son texte + */ button { padding: var(--espace-xs) var(--espace-xl); text-transform: lowercase; border: 1px solid var(--couleur-noir); border-left: initial; + min-width: 9rem; /* 1 */ + } + + &__message { + margin-top: var(--espace-m); + flex-basis: 100%; } } } diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts b/web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts index 89f74b3e..4ba608ad 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts @@ -4,18 +4,19 @@ export const ATTRIBUT_ARIA_HIDDEN = "aria-hidden"; export const ATTRIBUT_ARIA_SELECTED = "aria-selected"; export const ATTRIBUT_CACHE = "data-cache"; export const ATTRIBUT_CLE_PANIER = "data-cle-panier"; +export const ATTRIBUT_CODE_PROMO_PRESENT = "data-code-promo-present"; export const ATTRIBUT_CONTIENT_ARTICLES = "data-contient-articles"; export const ATTRIBUT_DESACTIVE = "disabled"; +export const ATTRIBUT_ENSEMBLE_EPINGLE_BOITE_ACTIF = "data-ensemble-epingle-boite-actif"; export const ATTRIBUT_HIDDEN = "hidden"; -export const ATTRIBUT_INDEX = "data-index"; -export const ATTRIBUT_MENU_MOBILE_ACTIVE = "data-menu-mobile-active"; -export const ATTRIBUT_PAGE = "data-page"; export const ATTRIBUT_ID_CATEGORIE_PRODUITS = "data-id-categorie-produits"; export const ATTRIBUT_ID_ENSEMBLE_EPINGLE_BOITE = "data-id-ensemble-epingle-boite"; -export const ATTRIBUT_ENSEMBLE_EPINGLE_BOITE_ACTIF = "data-ensemble-epingle-boite-actif"; +export const ATTRIBUT_INDEX = "data-index"; export const ATTRIBUT_INDEX_IMAGE_ACTIVE = "data-index-image-active"; +export const ATTRIBUT_MENU_MOBILE_ACTIVE = "data-menu-mobile-active"; +export const ATTRIBUT_PAGE = "data-page"; export const ATTRIBUT_PRIX = "data-prix"; -export const ATTRIBUT_CODE_PROMO_PRESENT = "data-code-promo-present"; +export const ATTRIBUT_CHARGEMENT = "data-chargement"; // En-tête export const SELECTEUR_BOUTON_MENU_MOBILE = "#bouton-menu-mobile"; @@ -55,6 +56,7 @@ export const SELECTEUR_INSTRUCTIONS_CLIENT = "#panneau-panier #instructions-clie export const SELECTEUR_ENSEMBLE_CODE_PROMO = "#panneau-panier #ensemble-code-promo"; export const SELECTEUR_CHAMP_CODE_PROMO = "#panneau-panier #champ-code-promo"; export const SELECTEUR_BOUTON_CODE_PROMO = "#panneau-panier #bouton-code-promo"; +export const SELECTEUR_MESSAGE_CODE_PROMO = "#panneau-panier .panneau__instructions-code-promo__code-promo__message"; // Accueil export const SELECTEUR_CONTENEUR_STORYTELLING = ".storytelling"; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/constantes/erreurs.ts b/web/app/themes/haiku-atelier-2024/src/scripts/constantes/erreurs.ts new file mode 100644 index 00000000..d13443d6 --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/src/scripts/constantes/erreurs.ts @@ -0,0 +1 @@ +export const ERREUR_CODE_PROMO_INVALIDE = "woocommerce_rest_cart_coupon_error"; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs/codes-promo.ts b/web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs/codes-promo.ts new file mode 100644 index 00000000..4b1af45f --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs/codes-promo.ts @@ -0,0 +1,8 @@ +/** Types d'Erreurs liés aux codes promos */ + +export class ErreurCodePromoInvalide extends Error { + constructor(message: string) { + super(`Code promo « ${message} » invalide.`); + this.name = "ErreurCodePromoInvalide"; + } +} diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/lib/messages.ts b/web/app/themes/haiku-atelier-2024/src/scripts/lib/messages.ts index 3ca29d86..c87a47a6 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts/lib/messages.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts/lib/messages.ts @@ -1,3 +1,4 @@ +import { pipe } from "@mobily/ts-belt"; import { Either } from "purify-ts"; import { parse, type ValiError } from "valibot"; @@ -10,7 +11,15 @@ import type { import { NOM_CANAL_BOUTON_PANIER, NOM_CANAL_CONTENU_PANIER, TYPES_MESSAGES } from "../constantes/messages.ts"; import { reporteErreur } from "./erreurs.ts"; +import { WCErrorSchema } from "./schemas/api/erreurs.ts"; import { MessageMajBoutonPanierSchema, MessageMajContenuPanierSchema } from "./schemas/messages.ts"; +import { ReponseSimplifiee } from "./types/reseau"; +import { eitherParse } from "./validation.ts"; + +export const canalPostMessage = (canal: BroadcastChannel, message: any): BroadcastChannel => { + canal.postMessage(message); + return canal; +}; // Émissions export const emetMessageMajBoutonPanier = (args: MessageMajBoutonPanierDonnees): void => { @@ -37,6 +46,16 @@ export const emetMessageMajContenuPanier = (args: MessageMajContenuPanierDonnees canal.close(); }; +/** + * Émet un unique message vers un BroadcastChannel (canal) généré sur le moment puis le ferme. + * + * @param nomCanal Le nom du BroadcastChannel pour lequel le message est émis. + * @param message Le message émis. + * @return void + */ +export const emetUniqueMessageCanal = (nomCanal: string, message: M): void => + pipe(new BroadcastChannel(nomCanal), canal => canalPostMessage(canal, message), canal => canal.close()); + // Validations export const valideMessageMajBoutonPanier = ( evenementMessage: MessageEvent, @@ -55,3 +74,9 @@ export const valideMessageMajContenuPanier = ( parse(MessageMajContenuPanierSchema, evenementMessage.data), ) .ifLeft(erreur => reporteErreur(erreur)); + +// Correspondances +export const reponseEstCodeErreurWC = (reponse: ReponseSimplifiee, codeErreurWC: string): boolean => + eitherParse(reponse, WCErrorSchema) + .map(v => v.body.code === codeErreurWC) + .orDefault(false); diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/lib/types/reseau.d.ts b/web/app/themes/haiku-atelier-2024/src/scripts/lib/types/reseau.d.ts new file mode 100644 index 00000000..376e97af --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/src/scripts/lib/types/reseau.d.ts @@ -0,0 +1,4 @@ +export interface ReponseSimplifiee { + body: unknown; + status: number; +} diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier-code-promo.ts b/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier-code-promo.ts index eacbf74b..2b89a30c 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier-code-promo.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier-code-promo.ts @@ -10,22 +10,28 @@ import { ValiError } from "valibot"; import type { WCStoreCart } from "./lib/types/api/cart"; import type { WCStoreCartApplyCouponArgs } from "./lib/types/api/cart-apply-coupon"; import type { WCStoreCartRemoveCouponArgs } from "./lib/types/api/cart-remove-coupon"; +import type { ReponseSimplifiee } from "./lib/types/reseau"; import { ROUTE_API_APPLIQUE_COUPON, ROUTE_API_RETIRE_COUPON } from "./constantes/api"; import { + ATTRIBUT_CHARGEMENT, ATTRIBUT_CODE_PROMO_PRESENT, ATTRIBUT_DESACTIVE, ATTRIBUT_HIDDEN, SELECTEUR_BOUTON_CODE_PROMO, SELECTEUR_CHAMP_CODE_PROMO, SELECTEUR_ENSEMBLE_CODE_PROMO, + SELECTEUR_MESSAGE_CODE_PROMO, SELECTEUR_TOTAL_PANIER, SELECTEUR_TOTAL_REDUCTION, SELECTEUR_TOTAL_REDUCTION_VALEUR, } from "./constantes/dom"; +import { ERREUR_CODE_PROMO_INVALIDE } from "./constantes/erreurs"; import { correspondCibleSelecteur } from "./lib/dom"; import { ServerError } from "./lib/erreurs"; +import { ErreurCodePromoInvalide } from "./lib/erreurs/codes-promo"; import { estReponse500 } from "./lib/gardes"; +import { reponseEstCodeErreurWC } from "./lib/messages"; import { postBackend } from "./lib/reseau"; import { WCStoreCartSchema } from "./lib/schemas/api/cart"; import { WCStoreCartApplyCouponArgsSchema } from "./lib/schemas/api/cart-apply-coupon"; @@ -47,7 +53,8 @@ const ETATS_PAGE: EtatsPage = _etats; const ELEMENTS = { BOUTON_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_CODE_PROMO), CHAMP_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_CHAMP_CODE_PROMO), - ENSEMBLE_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_ENSEMBLE_CODE_PROMO), + ENSEMBLE_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_ENSEMBLE_CODE_PROMO), + MESSAGE_CODE_PROMO: recupereElementDansDocumentOuLeve(SELECTEUR_MESSAGE_CODE_PROMO), TOTAL_PANIER: recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_PANIER), TOTAL_REDUCTION_LIGNE: recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION), TOTAL_REDUCTION_VALEUR: recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION_VALEUR), @@ -55,110 +62,200 @@ const ELEMENTS = { export const initialiseElementsCodePromo = (): void => { // Récupère le code promo s'il existe - const recupereCodePromoValeur = (): null | string => + const recupereValeurCodePromo = (): null | string => Maybe.fromFalsy(ELEMENTS.CHAMP_CODE_PROMO.value.trim()).extractNullable(); - const recupereCodePromoPresent = (): boolean => + const recuperePresenceCodePromo = (): boolean => ELEMENTS.ENSEMBLE_CODE_PROMO.hasAttribute(ATTRIBUT_CODE_PROMO_PRESENT); // Créé la délégation d'Événements - ELEMENTS.ENSEMBLE_CODE_PROMO.addEventListener( - "click", - (evenement: Event) => - match({ - cible: evenement.target, - codePromoPresent: recupereCodePromoPresent(), - codePromoValeur: recupereCodePromoValeur(), - }) - // Un code promo doit être ajouté - .with( - { - cible: P.when(cible => correspondCibleSelecteur(cible, SELECTEUR_BOUTON_CODE_PROMO)), - codePromoPresent: false, - codePromoValeur: P.string, - }, - ({ codePromoValeur }) => - void EitherAsync - .liftEither(eitherParse({ code: codePromoValeur }, WCStoreCartApplyCouponArgsSchema)) - .map((args: WCStoreCartApplyCouponArgs) => - postBackend({ - corps: JSON.stringify(args), - nonce: ETATS_PAGE.nonce, - route: ROUTE_API_APPLIQUE_COUPON, - }) - ) - .chain((reponse: Response) => - EitherAsync(async ({ throwE }) => { - if (estReponse500(reponse)) throwE(new ServerError("500 Server Error")); - return await reponse.json(); - }) - ) - .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema))) - .ifRight((panier: WCStoreCart) => { - const totalReduction = pipe(Number(panier.totals.total_discount) / 100, String, v => `-${v}€`); - const totalPanier = pipe(Number(panier.totals.total_price) / 100, String, v => `${v}€`); + ELEMENTS.ENSEMBLE_CODE_PROMO.addEventListener("click", (evenement: Event) => + match({ + cible: evenement.target, + codePromoPresent: recuperePresenceCodePromo(), + valeurCodePromo: recupereValeurCodePromo(), + }) + // Un code promo doit être ajouté + .with( + { + cible: P.when((cible: EventTarget | null) => + correspondCibleSelecteur(cible, SELECTEUR_BOUTON_CODE_PROMO) + ), + codePromoPresent: false, + valeurCodePromo: P.string, + }, + ({ valeurCodePromo }) => + void EitherAsync + .liftEither(eitherParse({ code: valeurCodePromo }, WCStoreCartApplyCouponArgsSchema)) + .ifRight(() => { + // Désactive le Bouton pour empêcher des requêtes concurrentes + ELEMENTS.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_DESACTIVE, ""); + ELEMENTS.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_CHARGEMENT, ""); + ELEMENTS.MESSAGE_CODE_PROMO.textContent = ""; - ELEMENTS.BOUTON_CODE_PROMO.textContent = "Remove"; - ELEMENTS.CHAMP_CODE_PROMO.toggleAttribute(ATTRIBUT_DESACTIVE); - ELEMENTS.CHAMP_CODE_PROMO.value = panier.coupons[0]?.code ?? ""; - ELEMENTS.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT); - ELEMENTS.TOTAL_PANIER.textContent = totalPanier; - ELEMENTS.TOTAL_REDUCTION_LIGNE.toggleAttribute(ATTRIBUT_HIDDEN); - ELEMENTS.TOTAL_REDUCTION_VALEUR.textContent = totalReduction; - }) - .ifLeft(erreur => - match(erreur) - .with(P.instanceOf(ValiError), e => console.error("retour ajout code promo", e.issues)) - .with(P.instanceOf(ServerError), e => console.error("retour ajout code promo", e)) - .with(P.instanceOf(TypeError), e => console.error("retour ajout code promo", e)) - .exhaustive() - ) - .run(), - ) - // Un code promo doit être retiré - .with( - { - cible: P.when(cible => correspondCibleSelecteur(cible, SELECTEUR_BOUTON_CODE_PROMO)), - codePromoPresent: true, - codePromoValeur: P.string, - }, - ({ codePromoValeur }) => - void EitherAsync - .liftEither(eitherParse({ code: codePromoValeur }, WCStoreCartRemoveCouponArgsSchema)) - .map((args: WCStoreCartRemoveCouponArgs) => - postBackend({ - corps: JSON.stringify(args), - nonce: ETATS_PAGE.nonce, - route: ROUTE_API_RETIRE_COUPON, - }) - ) - .chain((reponse: Response) => - EitherAsync(async ({ throwE }) => { - if (estReponse500(reponse)) throwE(new ServerError("500 server Error")); - return await reponse.json(); - }) - ) - .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema))) - .ifRight((panier: WCStoreCart) => { - const totalPanier = pipe(Number(panier.totals.total_price) / 100, String, v => `${v}€`); + // Lance un cycle d'animation sur le texte de chargement + const animation = { + callback: () => { + if (!ELEMENTS.BOUTON_CODE_PROMO.hasAttribute(ATTRIBUT_CHARGEMENT)) { + clearInterval(animation.interval); + return; + } - ELEMENTS.BOUTON_CODE_PROMO.textContent = "Apply"; - ELEMENTS.CHAMP_CODE_PROMO.toggleAttribute(ATTRIBUT_DESACTIVE); - ELEMENTS.CHAMP_CODE_PROMO.value = ""; - ELEMENTS.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT); - ELEMENTS.TOTAL_PANIER.textContent = totalPanier; - ELEMENTS.TOTAL_REDUCTION_LIGNE.toggleAttribute(ATTRIBUT_HIDDEN); - ELEMENTS.TOTAL_REDUCTION_VALEUR.textContent = "-0€"; + ELEMENTS.BOUTON_CODE_PROMO.textContent = animation.etapes.at(animation.index) + ?? "Loading..."; + animation.index = animation.index + 1 > animation.etapes.length - 1 ? 0 : animation.index + 1; + }, + etapes: [ + "Loading", + "Loading.", + "Loading..", + "Loading...", + ], + index: 0, + interval: 0, + }; + animation.callback(); + animation.interval = setInterval(animation.callback, 500); + }) + // Réalise la requête auprès du backend + .map((args: WCStoreCartApplyCouponArgs) => + postBackend({ + corps: JSON.stringify(args), + nonce: ETATS_PAGE.nonce, + route: ROUTE_API_APPLIQUE_COUPON, }) - .ifLeft(erreur => - match(erreur) - .with(P.instanceOf(ValiError), e => console.error("retour ajout code promo", e.issues)) - .with(P.instanceOf(ServerError), e => console.error("retour ajout code promo", e)) - .with(P.instanceOf(TypeError), e => console.error("retour ajout code promo", e)) - .exhaustive() - ) - .run(), - ) - // Ne rien faire en dehors de ces deux situations - .with(P._, identity), - ); + ) + // Traite les cas d'Erreur + .chain((reponse: Response) => + EitherAsync(async ({ throwE }) => { + if (estReponse500(reponse)) throwE(new ServerError("500 Server Error")); + + const reponseSimplifiee: ReponseSimplifiee = { + body: await reponse.json(), + status: reponse.status, + }; + + return match(reponseSimplifiee) + .with({ + body: P.when(() => reponseEstCodeErreurWC(reponseSimplifiee, ERREUR_CODE_PROMO_INVALIDE)), + status: 400, + }, () => throwE(new ErreurCodePromoInvalide(recupereValeurCodePromo() ?? ""))) + .with({ status: 200 }, () => reponseSimplifiee.body) + .run(); + }) + ) + // Vérifie le Schéma de la Réponse du backend + .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema))) + // Déclenche les mises à jour du DOM avec les données du nouveau Panier + .ifRight((panier: WCStoreCart) => { + const totalReduction = pipe(Number(panier.totals.total_discount) / 100, String, v => `-${v}€`); + const totalPanier = pipe(Number(panier.totals.total_price) / 100, String, v => `${v}€`); + + ELEMENTS.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT); + ELEMENTS.CHAMP_CODE_PROMO.toggleAttribute(ATTRIBUT_DESACTIVE); + ELEMENTS.CHAMP_CODE_PROMO.value = panier.coupons[0]?.code ?? ""; + ELEMENTS.BOUTON_CODE_PROMO.textContent = "Remove"; + + ELEMENTS.TOTAL_PANIER.textContent = totalPanier; + ELEMENTS.TOTAL_REDUCTION_LIGNE.toggleAttribute(ATTRIBUT_HIDDEN); + ELEMENTS.TOTAL_REDUCTION_VALEUR.textContent = totalReduction; + }) + .ifLeft(erreur => { + // Rétablis le texte d'origine + ELEMENTS.BOUTON_CODE_PROMO.textContent = "Apply"; + match(erreur) + .with(P.instanceOf(ValiError), e => console.error("ValiError", e.issues)) + .with(P.instanceOf(ErreurCodePromoInvalide), e => { + ELEMENTS.MESSAGE_CODE_PROMO.textContent = "This promo code does not exist."; + console.error(e); + }) + .with(P.instanceOf(ServerError), e => console.error(e)) + .with(P.instanceOf(TypeError), e => console.error(e)) + .exhaustive(); + }) + .finally(() => { + // Désactive l'animation de chargement et rend le Bouton de nouveau cliquable + ELEMENTS.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_CHARGEMENT); + ELEMENTS.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_DESACTIVE); + }) + .run(), + ) + // Un code promo doit être retiré + .with( + { + cible: P.when(cible => correspondCibleSelecteur(cible, SELECTEUR_BOUTON_CODE_PROMO)), + codePromoPresent: true, + valeurCodePromo: P.string, + }, + ({ valeurCodePromo }) => + void EitherAsync + .liftEither(eitherParse({ code: valeurCodePromo }, WCStoreCartRemoveCouponArgsSchema)) + .ifRight(() => { + ELEMENTS.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_DESACTIVE, ""); + ELEMENTS.BOUTON_CODE_PROMO.setAttribute(ATTRIBUT_CHARGEMENT, ""); + + const animation = { + callback: () => { + if (!ELEMENTS.BOUTON_CODE_PROMO.hasAttribute(ATTRIBUT_CHARGEMENT)) { + clearInterval(animation.interval); + return; + } + + ELEMENTS.BOUTON_CODE_PROMO.textContent = animation.etapes.at(animation.index) + ?? "Loading..."; + animation.index = animation.index + 1 > animation.etapes.length - 1 ? 0 : animation.index + 1; + }, + etapes: [ + "Loading", + "Loading.", + "Loading..", + "Loading...", + ], + index: 0, + interval: 0, + }; + animation.callback(); + animation.interval = setInterval(animation.callback, 500); + }) + .map((args: WCStoreCartRemoveCouponArgs) => + postBackend({ + corps: JSON.stringify(args), + nonce: ETATS_PAGE.nonce, + route: ROUTE_API_RETIRE_COUPON, + }) + ) + .chain((reponse: Response) => + EitherAsync(async ({ throwE }) => { + if (estReponse500(reponse)) throwE(new ServerError("500 server Error")); + return await reponse.json(); + }) + ) + .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCStoreCartSchema))) + .ifRight((panier: WCStoreCart) => { + const totalPanier = pipe(Number(panier.totals.total_price) / 100, String, v => `${v}€`); + + ELEMENTS.ENSEMBLE_CODE_PROMO.toggleAttribute(ATTRIBUT_CODE_PROMO_PRESENT); + ELEMENTS.ENSEMBLE_CODE_PROMO.reset(); + ELEMENTS.CHAMP_CODE_PROMO.toggleAttribute(ATTRIBUT_DESACTIVE); + ELEMENTS.CHAMP_CODE_PROMO.textContent = ""; + ELEMENTS.BOUTON_CODE_PROMO.textContent = "Apply"; + + ELEMENTS.TOTAL_PANIER.textContent = totalPanier; + ELEMENTS.TOTAL_REDUCTION_LIGNE.toggleAttribute(ATTRIBUT_HIDDEN); + ELEMENTS.TOTAL_REDUCTION_VALEUR.textContent = "-0€"; + }) + .ifLeft(erreur => + match(erreur) + .with(P.instanceOf(ValiError), e => console.error("retour ajout code promo", e.issues)) + .with(P.instanceOf(ServerError), e => console.error("retour ajout code promo", e)) + .with(P.instanceOf(TypeError), e => console.error("retour ajout code promo", e)) + .exhaustive() + ) + .finally(() => { + ELEMENTS.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_CHARGEMENT); + ELEMENTS.BOUTON_CODE_PROMO.removeAttribute(ATTRIBUT_DESACTIVE); + }) + .run(), + ) + // Ne rien faire en dehors de ces deux situations + .with(P._, identity)); }; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts b/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts index bf106b55..0cd87955 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts @@ -1,12 +1,10 @@ import { D, F, pipe } from "@mobily/ts-belt"; -import { Either, EitherAsync, Maybe } from "purify-ts"; -import { match, P } from "ts-pattern"; +import { Either, Maybe } from "purify-ts"; +import { match } from "ts-pattern"; import { parse, ValiError } from "valibot"; import type { MessageMajContenuPanierSchema } from "./lib/schemas/messages.ts"; import type { WCStoreCart, WCStoreCartItem, WCStoreShippingRateShippingRate } from "./lib/types/api/cart"; -import type { WCStoreCartApplyCouponArgs } from "./lib/types/api/cart-apply-coupon"; -import type { WCStoreCartRemoveCouponArgs } from "./lib/types/api/cart-remove-coupon"; import type { WCStoreCartRemoveItemArgs } from "./lib/types/api/cart-remove-item"; import type { WCStoreCartUpdateCustomerArgs } from "./lib/types/api/cart-update-customer"; import type { WCStoreCartUpdateItemArgs } from "./lib/types/api/cart-update-item"; @@ -14,29 +12,23 @@ import type { WCV3Order, WCV3OrdersArgs } from "./lib/types/api/v3/orders.ts"; import type { MessageMajBoutonPanierDonnees, MessageMajContenuPanierDonnees } from "./lib/types/messages"; import { - ROUTE_API_APPLIQUE_COUPON, ROUTE_API_MAJ_ARTICLE_PANIER, ROUTE_API_MAJ_CLIENT, ROUTE_API_NOUVELLE_COMMANDES, ROUTE_API_RETIRE_ARTICLE_PANIER, - ROUTE_API_RETIRE_COUPON, } from "./constantes/api.ts"; import { ATTRIBUT_CLE_PANIER, - ATTRIBUT_CODE_PROMO_PRESENT, ATTRIBUT_CONTIENT_ARTICLES, ATTRIBUT_DESACTIVE, ATTRIBUT_HIDDEN, SELECTEUR_BOUTON_ACTIONS_FORMULAIRE, SELECTEUR_BOUTON_ADDITION_QUANTITE, - SELECTEUR_BOUTON_CODE_PROMO, SELECTEUR_BOUTON_SEPARATION_ADRESSES, SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE, SELECTEUR_BOUTON_SUPPRESSION_PANIER, - SELECTEUR_CHAMP_CODE_PROMO, SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER, SELECTEUR_CONTENEUR_PANIER, - SELECTEUR_ENSEMBLE_CODE_PROMO, SELECTEUR_ENTREES_PANIER, SELECTEUR_FORMULAIRE_FACTURATION, SELECTEUR_FORMULAIRE_PANIER, @@ -46,8 +38,6 @@ import { SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE, SELECTEUR_SOUS_TOTAL_PRODUITS, SELECTEUR_TOTAL_PANIER, - SELECTEUR_TOTAL_REDUCTION, - SELECTEUR_TOTAL_REDUCTION_VALEUR, } from "./constantes/dom.ts"; import { NOM_CANAL_BOUTON_PANIER, NOM_CANAL_CONTENU_PANIER } from "./constantes/messages.ts"; import { @@ -57,7 +47,7 @@ import { recupereElementOuLeve, recupereElementsAvecSelecteur, } from "./lib/dom.ts"; -import { type CleNonTrouveError, leveErreur, leveServerError, reporteErreur, ServerError } from "./lib/erreurs.ts"; +import { type CleNonTrouveError, leveErreur, leveServerError, reporteErreur } from "./lib/erreurs.ts"; import { estError, estReponse500 } from "./lib/gardes.ts"; import { emetMessageMajBoutonPanier, @@ -66,8 +56,6 @@ import { valideMessageMajContenuPanier, } from "./lib/messages.ts"; import { postBackend, traiteReponseBackendWCSelonCodesHTTP } from "./lib/reseau.ts"; -import { WCStoreCartApplyCouponArgsSchema } from "./lib/schemas/api/cart-apply-coupon.ts"; -import { WCStoreCartRemoveCouponArgsSchema } from "./lib/schemas/api/cart-remove-coupon.ts"; import { WCStoreCartRemoveItemArgsSchema } from "./lib/schemas/api/cart-remove-item.ts"; import { WCStoreCartUpdateCustomerArgsSchema } from "./lib/schemas/api/cart-update-customer.ts"; import { WCStoreCartUpdateItemArgsSchema } from "./lib/schemas/api/cart-update-item.ts"; @@ -121,10 +109,6 @@ const SOUS_TOTAL_LIVRAISON_PRESTATAIRE: HTMLSpanElement = pipe( recupereElementDocumentEither(SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE), recupereElementOuLeve, ); -const SOUS_TOTAL_REDUCTION_LIGNE: HTMLDivElement = recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION); -const SOUS_TOTAL_REDUCTION_VALEUR: HTMLSpanElement = recupereElementDansDocumentOuLeve( - SELECTEUR_TOTAL_REDUCTION_VALEUR, -); const INSTRUCTIONS_CLIENT: HTMLTextAreaElement = recupereElementDansDocumentOuLeve( SELECTEUR_INSTRUCTIONS_CLIENT, ); @@ -136,15 +120,6 @@ const BOUTON_SEPARATION_ADRESSES: HTMLInputElement = pipe( recupereElementDocumentEither(SELECTEUR_BOUTON_SEPARATION_ADRESSES), recupereElementOuLeve, ); -const ENSEMBLE_CODE_PROMO: HTMLDivElement = recupereElementDansDocumentOuLeve( - SELECTEUR_ENSEMBLE_CODE_PROMO, -); -const CHAMP_CODE_PROMO: HTMLInputElement = recupereElementDansDocumentOuLeve( - SELECTEUR_CHAMP_CODE_PROMO, -); -const BOUTON_CODE_PROMO: HTMLButtonElement = recupereElementDansDocumentOuLeve( - SELECTEUR_BOUTON_CODE_PROMO, -); const FORMULAIRE_PANIER: HTMLFormElement = pipe( recupereElementDocumentEither(SELECTEUR_FORMULAIRE_PANIER), recupereElementOuLeve, @@ -263,8 +238,8 @@ const initialiseMajEntreesPanier = (): void => { // Émet un Message avec le nouveau contenu du Panier emetMessageMajContenuPanier({ produits: panier.items, - sousTotalPanier: Number(panier.totals.total_price) / 100, - totalPanier: Number(panier.totals.total_items) / 100, + sousTotalPanier: Number(panier.totals.total_items) / 100, + totalPanier: Number(panier.totals.total_price) / 100, }); // Retire l'entrée du Panier du DOM entree.remove(); @@ -322,8 +297,8 @@ const initialiseMajEntreesPanier = (): void => { // Émet un Message avec le nouveau contenu du Panier emetMessageMajContenuPanier({ produits: panier.items, - sousTotalPanier: Number(panier.totals.total_price) / 100, - totalPanier: Number(panier.totals.total_items) / 100, + sousTotalPanier: Number(panier.totals.total_items) / 100, + totalPanier: Number(panier.totals.total_price) / 100, }); }), ); @@ -378,8 +353,8 @@ const initialiseMajEntreesPanier = (): void => { // Émet un Message avec le nouveau contenu du Panier emetMessageMajContenuPanier({ produits: panier.items, - sousTotalPanier: Number(panier.totals.total_price) / 100, - totalPanier: Number(panier.totals.total_items) / 100, + sousTotalPanier: Number(panier.totals.total_items) / 100, + totalPanier: Number(panier.totals.total_price) / 100, }); }), ); @@ -421,8 +396,9 @@ const initialiseMajContenuPanier = (): void => { donnees.produits.forEach((ligne: WCStoreCartItem) => { // Met à jour les entrées du Panier ENTREES_PANIER_EITHER.ifRight((entrees: Array) => { - Maybe.fromNullable(entrees.find(entree => entree.getAttribute(ATTRIBUT_CLE_PANIER) === ligne.key)).ifJust( - (entree: HTMLElement) => { + Maybe + .fromNullable(entrees.find(entree => entree.getAttribute(ATTRIBUT_CLE_PANIER) === ligne.key)) + .ifJust((entree: HTMLElement) => { // Fonction utilitaire const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree); @@ -439,11 +415,10 @@ const initialiseMajContenuPanier = (): void => { // Réactive les Boutons majEtatsActivationBoutons(entrees); - }, - ); + }); // Met à jour les totaux du Panier - SOUS_TOTAL_PRODUITS.textContent = `${String(donnees.totalPanier)}€`; + SOUS_TOTAL_PRODUITS.textContent = `${String(donnees.sousTotalPanier)}€`; TOTAL_PANIER.textContent = `${String(donnees.totalPanier)}€`; }); }); diff --git a/web/app/themes/haiku-atelier-2024/views/parts/pages/panier/panneau-panier.twig b/web/app/themes/haiku-atelier-2024/views/parts/pages/panier/panneau-panier.twig index 87a5a4e4..4fbcbef9 100644 --- a/web/app/themes/haiku-atelier-2024/views/parts/pages/panier/panneau-panier.twig +++ b/web/app/themes/haiku-atelier-2024/views/parts/pages/panier/panneau-panier.twig @@ -82,7 +82,8 @@ spellcheck="true" > -
{{ code_promo ? "Remove" : "Apply" }} -
+ +

+