diff --git a/TODO.md b/TODO.md new file mode 100644 index 00000000..e69de29b diff --git a/composer.lock b/composer.lock index d08c1e34..548f9807 100644 --- a/composer.lock +++ b/composer.lock @@ -4350,16 +4350,16 @@ }, { "name": "php-stubs/wordpress-stubs", - "version": "v6.6.2", + "version": "v6.7.1", "source": { "type": "git", "url": "https://github.com/php-stubs/wordpress-stubs.git", - "reference": "f50fd7ed45894d036e4fef9ab7e5bbbaff6a30cc" + "reference": "83448e918bf06d1ed3d67ceb6a985fc266a02fd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/f50fd7ed45894d036e4fef9ab7e5bbbaff6a30cc", - "reference": "f50fd7ed45894d036e4fef9ab7e5bbbaff6a30cc", + "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/83448e918bf06d1ed3d67ceb6a985fc266a02fd1", + "reference": "83448e918bf06d1ed3d67ceb6a985fc266a02fd1", "shasum": "" }, "require-dev": { @@ -4368,9 +4368,9 @@ "php": "^7.4 || ^8.0", "php-stubs/generator": "^0.8.3", "phpdocumentor/reflection-docblock": "^5.4.1", - "phpstan/phpstan": "^1.10.49", + "phpstan/phpstan": "^1.11", "phpunit/phpunit": "^9.5", - "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^1.0", + "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^1.1.1", "wp-coding-standards/wpcs": "3.1.0 as 2.3.0" }, "suggest": { @@ -4392,9 +4392,9 @@ ], "support": { "issues": "https://github.com/php-stubs/wordpress-stubs/issues", - "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.6.2" + "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.7.1" }, - "time": "2024-09-30T07:10:48+00:00" + "time": "2024-11-24T03:57:09+00:00" }, { "name": "phpdocumentor/reflection-common", diff --git a/package.json b/package.json index 235bee85..39ef87ea 100644 --- a/package.json +++ b/package.json @@ -30,12 +30,12 @@ "better-typescript-lib": "^2.9.0", "browserslist": "^4.24.2", "eslint": "^9.15.0", - "eslint-plugin-oxlint": "^0.13.0", + "eslint-plugin-oxlint": "^0.13.1", "eslint-plugin-perfectionist": "^4.0.3", "fdir": "^6.4.2", "globals": "^15.12.0", "knip": "^5.37.2", - "oxlint": "^0.13.0", + "oxlint": "^0.13.1", "picomatch": "^4.0.2", "prettier": "^3.3.3", "prettier-plugin-pkg": "^0.18.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0680f176..7cff3450 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^9.15.0 version: 9.15.0(jiti@2.4.0) eslint-plugin-oxlint: - specifier: ^0.13.0 - version: 0.13.0 + specifier: ^0.13.1 + version: 0.13.1 eslint-plugin-perfectionist: specifier: ^4.0.3 version: 4.0.3(eslint@9.15.0(jiti@2.4.0))(typescript@5.8.0-dev.20241122) @@ -79,8 +79,8 @@ importers: specifier: ^5.37.2 version: 5.37.2(@types/node@22.9.3)(typescript@5.8.0-dev.20241122) oxlint: - specifier: ^0.13.0 - version: 0.13.0 + specifier: ^0.13.1 + version: 0.13.1 picomatch: specifier: ^4.0.2 version: 4.0.2 @@ -622,43 +622,43 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oxlint/darwin-arm64@0.13.0': - resolution: {integrity: sha512-TFVi4gWKmn4oUoaS6AUU6cvlA+xLCIHQWA27LdnyfmRDerxHSWaG4yPNq9bvhDAeeEWqid5+TR5ndu4WRhEr5A==} + '@oxlint/darwin-arm64@0.13.1': + resolution: {integrity: sha512-r2lMzuOhEO1j4NQe/A7kBcziuHvx2PZzCz3ip1eI6zUrwKqRtHZF3e9EdU0M2VLVV+1Mt1rJIYqHo4lXC3TCdw==} cpu: [arm64] os: [darwin] - '@oxlint/darwin-x64@0.13.0': - resolution: {integrity: sha512-ihbegvRXcED2Bgz9Lt4AGFoNfvh/tUZPrFR5DZ3Hn8muab+PEFfXXXKcelSDpTB4za5bDXz6dZcAUUfQUWPwxg==} + '@oxlint/darwin-x64@0.13.1': + resolution: {integrity: sha512-kQa5MAOlBx9F5nBs1S5dk7ZUJ8wWKxPPQ2OvjZpqKCGQe5YlMEPWdTJK21SmNIf/V0WOUV3PIexZwVJ2kzuMrQ==} cpu: [x64] os: [darwin] - '@oxlint/linux-arm64-gnu@0.13.0': - resolution: {integrity: sha512-k4r03/29d+IdcT30B6H5TpWT7bFrkqbRrFQ5VS6GX5ISN0yRdagu4Q08sDimCTTXvg5H9Z/sHmxbw7tbjGGW4w==} + '@oxlint/linux-arm64-gnu@0.13.1': + resolution: {integrity: sha512-zrN/1LvHq+s8CBi1u59tR/xVC0rb9ONJAXXTwfnf2QM3lbCjFXi8sgFDcffL6KoMzVrZwwIK+qFnbl7daHaqvA==} cpu: [arm64] os: [linux] - '@oxlint/linux-arm64-musl@0.13.0': - resolution: {integrity: sha512-m+LFHCwNydIrGHDz1VPTaQsZewaqYadKhzyjsw4TRf0g5fxeEC4tkv6MI80D2S//QO6DJi8VcnPfVqGWoS5vQQ==} + '@oxlint/linux-arm64-musl@0.13.1': + resolution: {integrity: sha512-TWG/dCh6WBi9OfO+rJJ45smLvFShy/6ZwOg7f2MWTcfkEKdCLJP+bkVwZFVwB+WndBFAMk45lyli83uaHJfNpg==} cpu: [arm64] os: [linux] - '@oxlint/linux-x64-gnu@0.13.0': - resolution: {integrity: sha512-Kixb9MXi5muDKsrNo5k7TANEE3DuUUSKIgoBN68LbX4n2owjCsq/gnzVjQ/rDK0vFn0JQMxMXWjBZvV64ybXMQ==} + '@oxlint/linux-x64-gnu@0.13.1': + resolution: {integrity: sha512-lk9X72DJ5EZpDpc4fM+O+Qk5GuZ37LHeHhUNzjQ01uywwGVCkW2cDmTKIs/PYfxcDA53bwW/Ddsljn71BLtWoA==} cpu: [x64] os: [linux] - '@oxlint/linux-x64-musl@0.13.0': - resolution: {integrity: sha512-wCCsesDf05G0bjXMrxAvH36Cl4q0oavR3fo4N5NJyyrRdZ+feAZSsfaHRpvlqkJyUM3vhP6emKrXzIN5fp22dw==} + '@oxlint/linux-x64-musl@0.13.1': + resolution: {integrity: sha512-Hb8wiT6KnyljDeMN7exSRRTkKH1n/8pczqWkPT5fCklahs721/z+vnxp49U5yvDdrD1LyppFKieEnKKg4uWtOw==} cpu: [x64] os: [linux] - '@oxlint/win32-arm64@0.13.0': - resolution: {integrity: sha512-xO6oZ+0yjYuEviKqRUVWMuYvzYqJDHd0IcBss8J2o45OS9SH+mNNk5gZJm9uKbDdmFZcDn2OlZxAiygVMxHt9g==} + '@oxlint/win32-arm64@0.13.1': + resolution: {integrity: sha512-Z3sHxYSGz+ZByScbe01Tqv9DEIr4ve/mgrFPFMxL0ve18CAnMe/2Psxj4A+T/BW4zINXdQyeiPkcWDNX+eUEQg==} cpu: [arm64] os: [win32] - '@oxlint/win32-x64@0.13.0': - resolution: {integrity: sha512-NiiaQ/AD1ILQ8cXRxdjE/dRMCRABFbelSYqoFrrklV2Y7hwtF0Law48GvM5ysQbz/NHVpQpnVNQOQ3cevywn3w==} + '@oxlint/win32-x64@0.13.1': + resolution: {integrity: sha512-9BKvquGa9nloHEXXNPnro7inzbX6BNFun9+ti9LvWEn1uNL/m6mmfMbwEmqXeDaeJACuQB3/9te1DRNUOE5ULw==} cpu: [x64] os: [win32] @@ -1293,8 +1293,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001683: - resolution: {integrity: sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==} + caniuse-lite@1.0.30001684: + resolution: {integrity: sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1500,8 +1500,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-plugin-oxlint@0.13.0: - resolution: {integrity: sha512-EjIpgAJr1ZQBHyHqAjhOvra1CD9W49MnV4jcaF44RWfkTVlg04OHPH2HL/ciQRYJM9WFsJd0l07ShbzvBtVAMw==} + eslint-plugin-oxlint@0.13.1: + resolution: {integrity: sha512-gzjweRs6I9vdopBAQx2jfFfsHYEPHb6Ejigy+OJNOzFcNscgkKUF1m+fyP64EdAjfCpiApL1bR/PGsmKP703iA==} eslint-plugin-perfectionist@4.0.3: resolution: {integrity: sha512-CyafnreF6boy4lf1XaF72U8NbkwrfjU/mOf1y6doaDMS9zGXhUU1DSk+ZPf/rVwCf1PL1m+rhHqFs+IcB8kDmA==} @@ -1746,9 +1746,9 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hash-base@3.0.4: - resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==} - engines: {node: '>=4'} + hash-base@3.0.5: + resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==} + engines: {node: '>= 0.10'} hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} @@ -2108,8 +2108,8 @@ packages: os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} - oxlint@0.13.0: - resolution: {integrity: sha512-YUwybs9U5siS54Q+vVkxMQXiNF6LHeLRxihj6toUFwrYSxL1wsV6HUiAS8Vig+USDIGoEDdGBgpq29iwWDjYHw==} + oxlint@0.13.1: + resolution: {integrity: sha512-XkH9kzbWv9VWiVF76GFij33ZCVCznRItZc50kAIoVdqWpPYjvZk4oc71fKIfxoLxChB+ZNwU2PmsHLBDXAmhuw==} engines: {node: '>=14.*'} hasBin: true @@ -3286,28 +3286,28 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@oxlint/darwin-arm64@0.13.0': + '@oxlint/darwin-arm64@0.13.1': optional: true - '@oxlint/darwin-x64@0.13.0': + '@oxlint/darwin-x64@0.13.1': optional: true - '@oxlint/linux-arm64-gnu@0.13.0': + '@oxlint/linux-arm64-gnu@0.13.1': optional: true - '@oxlint/linux-arm64-musl@0.13.0': + '@oxlint/linux-arm64-musl@0.13.1': optional: true - '@oxlint/linux-x64-gnu@0.13.0': + '@oxlint/linux-x64-gnu@0.13.1': optional: true - '@oxlint/linux-x64-musl@0.13.0': + '@oxlint/linux-x64-musl@0.13.1': optional: true - '@oxlint/win32-arm64@0.13.0': + '@oxlint/win32-arm64@0.13.1': optional: true - '@oxlint/win32-x64@0.13.0': + '@oxlint/win32-x64@0.13.1': optional: true '@parcel/watcher-android-arm64@2.5.0': @@ -3919,7 +3919,7 @@ snapshots: create-hash: 1.2.0 create-hmac: 1.1.7 elliptic: 6.6.1 - hash-base: 3.0.4 + hash-base: 3.0.5 inherits: 2.0.4 parse-asn1: 5.1.7 readable-stream: 2.3.8 @@ -3931,7 +3931,7 @@ snapshots: browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001683 + caniuse-lite: 1.0.30001684 electron-to-chromium: 1.5.64 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) @@ -3971,7 +3971,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001683: {} + caniuse-lite@1.0.30001684: {} chalk@4.1.2: dependencies: @@ -4072,7 +4072,7 @@ snapshots: create-hash: 1.2.0 create-hmac: 1.1.7 diffie-hellman: 5.0.3 - hash-base: 3.0.4 + hash-base: 3.0.5 inherits: 2.0.4 pbkdf2: 3.1.2 public-encrypt: 4.0.3 @@ -4206,7 +4206,7 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-plugin-oxlint@0.13.0: + eslint-plugin-oxlint@0.13.1: dependencies: jsonc-parser: 3.3.1 @@ -4491,7 +4491,7 @@ snapshots: dependencies: has-symbols: 1.0.3 - hash-base@3.0.4: + hash-base@3.0.5: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 @@ -4693,7 +4693,7 @@ snapshots: md5.js@1.3.5: dependencies: - hash-base: 3.0.4 + hash-base: 3.0.5 inherits: 2.0.4 safe-buffer: 5.2.1 @@ -4823,16 +4823,16 @@ snapshots: os-browserify@0.3.0: {} - oxlint@0.13.0: + oxlint@0.13.1: optionalDependencies: - '@oxlint/darwin-arm64': 0.13.0 - '@oxlint/darwin-x64': 0.13.0 - '@oxlint/linux-arm64-gnu': 0.13.0 - '@oxlint/linux-arm64-musl': 0.13.0 - '@oxlint/linux-x64-gnu': 0.13.0 - '@oxlint/linux-x64-musl': 0.13.0 - '@oxlint/win32-arm64': 0.13.0 - '@oxlint/win32-x64': 0.13.0 + '@oxlint/darwin-arm64': 0.13.1 + '@oxlint/darwin-x64': 0.13.1 + '@oxlint/linux-arm64-gnu': 0.13.1 + '@oxlint/linux-arm64-musl': 0.13.1 + '@oxlint/linux-x64-gnu': 0.13.1 + '@oxlint/linux-x64-musl': 0.13.1 + '@oxlint/win32-arm64': 0.13.1 + '@oxlint/win32-x64': 0.13.1 p-cancelable@3.0.0: {} @@ -4859,7 +4859,7 @@ snapshots: asn1.js: 4.10.1 browserify-aes: 1.2.0 evp_bytestokey: 1.0.3 - hash-base: 3.0.4 + hash-base: 3.0.5 pbkdf2: 3.1.2 safe-buffer: 5.2.1 @@ -5049,7 +5049,7 @@ snapshots: ripemd160@2.0.2: dependencies: - hash-base: 3.0.4 + hash-base: 3.0.5 inherits: 2.0.4 rollup@4.27.4: diff --git a/tsconfig.json b/tsconfig.json index a923de6e..1990a596 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,6 +18,7 @@ "moduleDetection": "force", "moduleResolution": "Bundler", "noEmit": true, + "noErrorTruncation": true, "noFallthroughCasesInSwitch": true, "noImplicitAny": true, "noImplicitOverride": true, diff --git a/web/app/object-cache.php b/web/app/object-cache.php deleted file mode 100644 index b2a631d3..00000000 --- a/web/app/object-cache.php +++ /dev/null @@ -1,3085 +0,0 @@ -add( $key, $value, $group, $expiration ); -} - -/** - * Adds multiple values to the cache in one call. - * - * @param array $data Array of keys and values to be set. - * @param string $group Optional. Where the cache contents are grouped. Default empty. - * @param int $expire Optional. When to expire the cache contents, in seconds. - * Default 0 (no expiration). - * @return bool[] Array of return values, grouped by key. Each value is either - * true on success, or false if cache key and group already exist. - */ -function wp_cache_add_multiple( array $data, $group = '', $expire = 0 ) { - global $wp_object_cache; - - return $wp_object_cache->add_multiple( $data, $group, $expire ); -} - -/** - * Closes the cache. - * - * This function has ceased to do anything since WordPress 2.5. The - * functionality was removed along with the rest of the persistent cache. This - * does not mean that plugins can't implement this function when they need to - * make sure that the cache is cleaned up after WordPress no longer needs it. - * - * @return bool Always returns True - */ -function wp_cache_close() { - return true; -} - -/** - * Decrement a numeric item's value. - * - * @param string $key The key under which to store the value. - * @param int $offset The amount by which to decrement the item's value. - * @param string $group The group value appended to the $key. - * - * @return int|bool Returns item's new value on success or FALSE on failure. - */ -function wp_cache_decr( $key, $offset = 1, $group = '' ) { - global $wp_object_cache; - - return $wp_object_cache->decrement( $key, $offset, $group ); -} - -/** - * Remove the item from the cache. - * - * @param string $key The key under which to store the value. - * @param string $group The group value appended to the $key. - * @param int $time The amount of time the server will wait to delete the item in seconds. - * - * @return bool Returns TRUE on success or FALSE on failure. - */ -function wp_cache_delete( $key, $group = '', $time = 0 ) { - global $wp_object_cache; - - return $wp_object_cache->delete( $key, $group, $time ); -} - -/** - * Deletes multiple values from the cache in one call. - * - * @param array $keys Array of keys under which the cache to deleted. - * @param string $group Optional. Where the cache contents are grouped. Default empty. - * @return bool[] Array of return values, grouped by key. Each value is either - * true on success, or false if the contents were not deleted. - */ -function wp_cache_delete_multiple( array $keys, $group = '' ) { - global $wp_object_cache; - - return $wp_object_cache->delete_multiple( $keys, $group ); -} - -/** - * Invalidate all items in the cache. If `WP_REDIS_SELECTIVE_FLUSH` is `true`, - * only keys prefixed with the `WP_REDIS_PREFIX` are flushed. - * - * @return bool Returns TRUE on success or FALSE on failure. - */ -function wp_cache_flush() { - global $wp_object_cache; - - return $wp_object_cache->flush(); -} - -/** - * Removes all cache items in a group. - * - * @param string $group Name of group to remove from cache. - * @return true Returns TRUE on success or FALSE on failure. - */ -function wp_cache_flush_group( $group ) -{ - global $wp_object_cache; - - return $wp_object_cache->flush_group( $group ); -} - -/** - * Removes all cache items from the in-memory runtime cache. - * - * @return bool True on success, false on failure. - */ -function wp_cache_flush_runtime() { - global $wp_object_cache; - - return $wp_object_cache->flush_runtime(); -} - -/** - * Retrieve object from cache. - * - * Gets an object from cache based on $key and $group. - * - * @param string $key The key under which to store the value. - * @param string $group The group value appended to the $key. - * @param bool $force Optional. Whether to force an update of the local cache from the persistent - * cache. Default false. - * @param bool $found Optional. Whether the key was found in the cache. Disambiguates a return of false, - * a storable value. Passed by reference. Default null. - * - * @return bool|mixed Cached object value. - */ -function wp_cache_get( $key, $group = '', $force = false, &$found = null ) { - global $wp_object_cache; - - return $wp_object_cache->get( $key, $group, $force, $found ); -} - -/** - * Retrieves multiple values from the cache in one call. - * - * @param array $keys Array of keys under which the cache contents are stored. - * @param string $group Optional. Where the cache contents are grouped. Default empty. - * @param bool $force Optional. Whether to force an update of the local cache - * from the persistent cache. Default false. - * @return array Array of values organized into groups. - */ -function wp_cache_get_multiple( $keys, $group = '', $force = false ) { - global $wp_object_cache; - - return $wp_object_cache->get_multiple( $keys, $group, $force ); -} - -/** - * Increment a numeric item's value. - * - * @param string $key The key under which to store the value. - * @param int $offset The amount by which to increment the item's value. - * @param string $group The group value appended to the $key. - * - * @return int|bool Returns item's new value on success or FALSE on failure. - */ -function wp_cache_incr( $key, $offset = 1, $group = '' ) { - global $wp_object_cache; - - return $wp_object_cache->increment( $key, $offset, $group ); -} - -/** - * Sets up Object Cache Global and assigns it. - * - * @return void - */ -function wp_cache_init() { - global $wp_object_cache; - - if ( ! defined( 'WP_REDIS_PREFIX' ) && getenv( 'WP_REDIS_PREFIX' ) ) { - define( 'WP_REDIS_PREFIX', getenv( 'WP_REDIS_PREFIX' ) ); - } - - if ( ! defined( 'WP_REDIS_SELECTIVE_FLUSH' ) && getenv( 'WP_REDIS_SELECTIVE_FLUSH' ) ) { - define( 'WP_REDIS_SELECTIVE_FLUSH', (bool) getenv( 'WP_REDIS_SELECTIVE_FLUSH' ) ); - } - - // Backwards compatibility: map `WP_CACHE_KEY_SALT` constant to `WP_REDIS_PREFIX`. - if ( defined( 'WP_CACHE_KEY_SALT' ) && ! defined( 'WP_REDIS_PREFIX' ) ) { - define( 'WP_REDIS_PREFIX', WP_CACHE_KEY_SALT ); - } - - // Set unique prefix for sites hosted on Cloudways - if ( ! defined( 'WP_REDIS_PREFIX' ) && isset( $_SERVER['cw_allowed_ip'] ) ) { - define( 'WP_REDIS_PREFIX', getenv( 'HTTP_X_APP_USER' ) ); - } - - if ( ! ( $wp_object_cache instanceof WP_Object_Cache ) ) { - $fail_gracefully = defined( 'WP_REDIS_GRACEFUL' ) && WP_REDIS_GRACEFUL; - - // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited - $wp_object_cache = new WP_Object_Cache( $fail_gracefully ); - } -} - -/** - * Replaces a value in cache. - * - * This method is similar to "add"; however, is does not successfully set a value if - * the object's key is not already set in cache. - * - * @param string $key The key under which to store the value. - * @param mixed $value The value to store. - * @param string $group The group value appended to the $key. - * @param int $expiration The expiration time, defaults to 0. - * - * @return bool Returns TRUE on success or FALSE on failure. - */ -function wp_cache_replace( $key, $value, $group = '', $expiration = 0 ) { - global $wp_object_cache; - - return $wp_object_cache->replace( $key, $value, $group, $expiration ); -} - -/** - * Sets a value in cache. - * - * The value is set whether or not this key already exists in Redis. - * - * @param string $key The key under which to store the value. - * @param mixed $value The value to store. - * @param string $group The group value appended to the $key. - * @param int $expiration The expiration time, defaults to 0. - * - * @return bool Returns TRUE on success or FALSE on failure. - */ -function wp_cache_set( $key, $value, $group = '', $expiration = 0 ) { - global $wp_object_cache; - - return $wp_object_cache->set( $key, $value, $group, $expiration ); -} - -/** - * Sets multiple values to the cache in one call. - * - * @param array $data Array of keys and values to be set. - * @param string $group Optional. Where the cache contents are grouped. Default empty. - * @param int $expire Optional. When to expire the cache contents, in seconds. - * Default 0 (no expiration). - * @return bool[] Array of return values, grouped by key. Each value is either - * true on success, or false on failure. - */ -function wp_cache_set_multiple( array $data, $group = '', $expire = 0 ) { - global $wp_object_cache; - - return $wp_object_cache->set_multiple( $data, $group, $expire ); -} - -/** - * Switch the internal blog id. - * - * This changes the blog id used to create keys in blog specific groups. - * - * @param int $_blog_id The blog ID. - * - * @return bool - */ -function wp_cache_switch_to_blog( $_blog_id ) { - global $wp_object_cache; - - return $wp_object_cache->switch_to_blog( $_blog_id ); -} - -/** - * Adds a group or set of groups to the list of Redis groups. - * - * @param string|array $groups A group or an array of groups to add. - * - * @return void - */ -function wp_cache_add_global_groups( $groups ) { - global $wp_object_cache; - - $wp_object_cache->add_global_groups( $groups ); -} - -/** - * Adds a group or set of groups to the list of non-Redis groups. - * - * @param string|array $groups A group or an array of groups to add. - * - * @return void - */ -function wp_cache_add_non_persistent_groups( $groups ) { - global $wp_object_cache; - - $wp_object_cache->add_non_persistent_groups( $groups ); -} - -/** - * Object cache class definition - */ -class WP_Object_Cache { - /** - * The Redis client. - * - * @var mixed - */ - private $redis; - - /** - * The Redis server version. - * - * @var null|string - */ - private $redis_version = null; - - /** - * Track if Redis is available. - * - * @var bool - */ - private $redis_connected = false; - - /** - * Check to fail gracefully or throw an exception. - * - * @var bool - */ - private $fail_gracefully = true; - - /** - * Holds the non-Redis objects. - * - * @var array - */ - public $cache = []; - - /** - * Holds the diagnostics values. - * - * @var array - */ - public $diagnostics = null; - - /** - * Holds the error messages. - * - * @var array - */ - public $errors = []; - - /** - * List of global groups. - * - * @var array - */ - public $global_groups = [ - 'blog-details', - 'blog-id-cache', - 'blog-lookup', - 'global-posts', - 'networks', - 'rss', - 'sites', - 'site-details', - 'site-lookup', - 'site-options', - 'site-transient', - 'users', - 'useremail', - 'userlogins', - 'usermeta', - 'user_meta', - 'userslugs', - ]; - - /** - * List of groups that will not be flushed. - * - * @var array - */ - public $unflushable_groups = []; - - /** - * List of groups not saved to Redis. - * - * @var array - */ - public $ignored_groups = []; - - /** - * List of groups and their types. - * - * @var array - */ - public $group_type = []; - - /** - * Prefix used for global groups. - * - * @var string - */ - public $global_prefix = ''; - - /** - * Prefix used for non-global groups. - * - * @var int - */ - public $blog_prefix = 0; - - /** - * Track how many requests were found in cache. - * - * @var int - */ - public $cache_hits = 0; - - /** - * Track how may requests were not cached. - * - * @var int - */ - public $cache_misses = 0; - - /** - * The amount of Redis commands made. - * - * @var int - */ - public $cache_calls = 0; - - /** - * The amount of microseconds (μs) waited for Redis commands. - * - * @var float - */ - public $cache_time = 0; - - /** - * Instantiate the Redis class. - * - * @param bool $fail_gracefully Handles and logs errors if true throws exceptions otherwise. - */ - public function __construct( $fail_gracefully = false ) { - global $blog_id, $table_prefix; - - $this->fail_gracefully = $fail_gracefully; - - if ( defined( 'WP_REDIS_GLOBAL_GROUPS' ) && is_array( WP_REDIS_GLOBAL_GROUPS ) ) { - $this->global_groups = array_map( [ $this, 'sanitize_key_part' ], WP_REDIS_GLOBAL_GROUPS ); - } - - $this->global_groups[] = 'redis-cache'; - - if ( defined( 'WP_REDIS_IGNORED_GROUPS' ) && is_array( WP_REDIS_IGNORED_GROUPS ) ) { - $this->ignored_groups = array_map( [ $this, 'sanitize_key_part' ], WP_REDIS_IGNORED_GROUPS ); - } - - if ( defined( 'WP_REDIS_UNFLUSHABLE_GROUPS' ) && is_array( WP_REDIS_UNFLUSHABLE_GROUPS ) ) { - $this->unflushable_groups = array_map( [ $this, 'sanitize_key_part' ], WP_REDIS_UNFLUSHABLE_GROUPS ); - } - - $this->cache_group_types(); - - if ( function_exists( '_doing_it_wrong' ) ) { - if ( defined( 'WP_REDIS_TRACE' ) && WP_REDIS_TRACE ) { - _doing_it_wrong( __FUNCTION__ , 'Tracing feature was removed.' , '2.1.2' ); - } - } - - $client = $this->determine_client(); - $parameters = $this->build_parameters(); - - try { - switch ( $client ) { - case 'hhvm': - $this->connect_using_hhvm( $parameters ); - break; - case 'phpredis': - $this->connect_using_phpredis( $parameters ); - break; - case 'relay': - $this->connect_using_relay( $parameters ); - break; - case 'credis': - $this->connect_using_credis( $parameters ); - break; - case 'predis': - default: - $this->connect_using_predis( $parameters ); - break; - } - - if ( defined( 'WP_REDIS_CLUSTER' ) ) { - $connectionId = is_string( WP_REDIS_CLUSTER ) - ? WP_REDIS_CLUSTER - : current( $this->build_cluster_connection_array() ); - - $this->diagnostics[ 'ping' ] = $client === 'predis' - ? $this->redis->getClientBy( 'id', $connectionId )->ping() - : $this->redis->ping( $connectionId ); - } else { - $this->diagnostics[ 'ping' ] = $this->redis->ping(); - } - - $this->fetch_info(); - - $this->redis_connected = true; - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - } - - // Assign global and blog prefixes for use with keys. - if ( function_exists( 'is_multisite' ) ) { - $this->global_prefix = is_multisite() ? '' : $table_prefix; - $this->blog_prefix = is_multisite() ? $blog_id : $table_prefix; - } - } - - /** - * Set group type array - * - * @return void - */ - protected function cache_group_types() { - foreach ( $this->global_groups as $group ) { - $this->group_type[ $group ] = 'global'; - } - - foreach ( $this->unflushable_groups as $group ) { - $this->group_type[ $group ] = 'unflushable'; - } - - foreach ( $this->ignored_groups as $group ) { - $this->group_type[ $group ] = 'ignored'; - } - } - - /** - * Determine the Redis client. - * - * @return string - */ - protected function determine_client() { - $client = 'predis'; - - if ( class_exists( 'Redis' ) ) { - $client = defined( 'HHVM_VERSION' ) ? 'hhvm' : 'phpredis'; - } - - if ( defined( 'WP_REDIS_CLIENT' ) ) { - $client = (string) WP_REDIS_CLIENT; - $client = str_replace( 'pecl', 'phpredis', $client ); - } - - return trim( strtolower( $client ) ); - } - - /** - * Build the connection parameters from config constants. - * - * @return array - */ - protected function build_parameters() { - $parameters = [ - 'scheme' => 'tcp', - 'host' => '127.0.0.1', - 'port' => 6379, - 'database' => 0, - 'timeout' => 1, - 'read_timeout' => 1, - 'retry_interval' => null, - 'persistent' => false, - ]; - - $settings = [ - 'scheme', - 'host', - 'port', - 'path', - 'password', - 'database', - 'timeout', - 'read_timeout', - 'retry_interval', - ]; - - foreach ( $settings as $setting ) { - $constant = sprintf( 'WP_REDIS_%s', strtoupper( $setting ) ); - - if ( defined( $constant ) ) { - $parameters[ $setting ] = constant( $constant ); - } - } - - if ( isset( $parameters[ 'password' ] ) && $parameters[ 'password' ] === '' ) { - unset( $parameters[ 'password' ] ); - } - - $this->diagnostics[ 'timeout' ] = $parameters[ 'timeout' ]; - $this->diagnostics[ 'read_timeout' ] = $parameters[ 'read_timeout' ]; - $this->diagnostics[ 'retry_interval' ] = $parameters[ 'retry_interval' ]; - - return $parameters; - } - - /** - * Connect to Redis using the PhpRedis (PECL) extension. - * - * @param array $parameters Connection parameters built by the `build_parameters` method. - * @return void - */ - protected function connect_using_phpredis( $parameters ) { - $version = phpversion( 'redis' ); - - $this->diagnostics[ 'client' ] = sprintf( 'PhpRedis (v%s)', $version ); - - if ( defined( 'WP_REDIS_SHARDS' ) ) { - $this->redis = new RedisArray( array_values( WP_REDIS_SHARDS ) ); - - $this->diagnostics[ 'shards' ] = WP_REDIS_SHARDS; - } elseif ( defined( 'WP_REDIS_CLUSTER' ) ) { - if ( is_string( WP_REDIS_CLUSTER ) ) { - $this->redis = new RedisCluster( WP_REDIS_CLUSTER ); - } else { - $args = [ - 'cluster' => $this->build_cluster_connection_array(), - 'timeout' => $parameters['timeout'], - 'read_timeout' => $parameters['read_timeout'], - 'persistent' => $parameters['persistent'], - ]; - - if ( isset( $parameters['password'] ) && version_compare( $version, '4.3.0', '>=' ) ) { - $args['password'] = $parameters['password']; - } - - if ( version_compare( $version, '5.3.0', '>=' ) && defined( 'WP_REDIS_SSL_CONTEXT' ) && ! empty( WP_REDIS_SSL_CONTEXT ) ) { - if ( ! array_key_exists( 'password', $args ) ) { - $args['password'] = null; - } - - $args['ssl'] = WP_REDIS_SSL_CONTEXT; - } - - $this->redis = new RedisCluster( null, ...array_values( $args ) ); - $this->diagnostics += $args; - } - } else { - $this->redis = new Redis(); - - $args = [ - 'host' => $parameters['host'], - 'port' => $parameters['port'], - 'timeout' => $parameters['timeout'], - '', - 'retry_interval' => (int) $parameters['retry_interval'], - ]; - - if ( version_compare( $version, '3.1.3', '>=' ) ) { - $args['read_timeout'] = $parameters['read_timeout']; - } - - if ( strcasecmp( 'tls', $parameters['scheme'] ) === 0 ) { - $args['host'] = sprintf( - '%s://%s', - $parameters['scheme'], - str_replace( 'tls://', '', $parameters['host'] ) - ); - - if ( version_compare( $version, '5.3.0', '>=' ) && defined( 'WP_REDIS_SSL_CONTEXT' ) && ! empty( WP_REDIS_SSL_CONTEXT ) ) { - $args['others']['stream'] = WP_REDIS_SSL_CONTEXT; - } - } - - if ( strcasecmp( 'unix', $parameters['scheme'] ) === 0 ) { - $args['host'] = $parameters['path']; - $args['port'] = -1; - } - - call_user_func_array( [ $this->redis, 'connect' ], array_values( $args ) ); - - if ( isset( $parameters['password'] ) ) { - $args['password'] = $parameters['password']; - $this->redis->auth( $parameters['password'] ); - } - - if ( isset( $parameters['database'] ) ) { - if ( ctype_digit( (string) $parameters['database'] ) ) { - $parameters['database'] = (int) $parameters['database']; - } - - $args['database'] = $parameters['database']; - - if ( $parameters['database'] ) { - $this->redis->select( $parameters['database'] ); - } - } - - $this->diagnostics += $args; - } - - if ( defined( 'WP_REDIS_SERIALIZER' ) && ! empty( WP_REDIS_SERIALIZER ) ) { - $this->redis->setOption( Redis::OPT_SERIALIZER, WP_REDIS_SERIALIZER ); - - if ( function_exists( '_doing_it_wrong' ) ) { - _doing_it_wrong( __FUNCTION__ , 'The `WP_REDIS_SERIALIZER` configuration constant has been deprecated, use `WP_REDIS_IGBINARY` instead.', '2.3.1' ); - } - } - } - - /** - * Connect to Redis using the Relay extension. - * - * @param array $parameters Connection parameters built by the `build_parameters` method. - * @return void - */ - protected function connect_using_relay( $parameters ) { - $version = phpversion( 'relay' ); - - $this->diagnostics[ 'client' ] = sprintf( 'Relay (v%s)', $version ); - - if ( defined( 'WP_REDIS_SHARDS' ) ) { - throw new Exception('Relay does not support sharding.'); - } elseif ( defined( 'WP_REDIS_CLUSTER' ) ) { - throw new Exception('Relay does not cluster connections.'); - } else { - $this->redis = new Relay\Relay; - - $args = [ - 'host' => $parameters['host'], - 'port' => $parameters['port'], - 'timeout' => $parameters['timeout'], - '', - 'retry_interval' => (int) $parameters['retry_interval'], - ]; - - $args['read_timeout'] = $parameters['read_timeout']; - - if ( strcasecmp( 'tls', $parameters['scheme'] ) === 0 ) { - $args['host'] = sprintf( - '%s://%s', - $parameters['scheme'], - str_replace( 'tls://', '', $parameters['host'] ) - ); - - if ( defined( 'WP_REDIS_SSL_CONTEXT' ) && ! empty( WP_REDIS_SSL_CONTEXT ) ) { - $args['others']['stream'] = WP_REDIS_SSL_CONTEXT; - } - } - - if ( strcasecmp( 'unix', $parameters['scheme'] ) === 0 ) { - $args['host'] = $parameters['path']; - $args['port'] = -1; - } - - call_user_func_array( [ $this->redis, 'connect' ], array_values( $args ) ); - - if ( isset( $parameters['password'] ) ) { - $args['password'] = $parameters['password']; - $this->redis->auth( $parameters['password'] ); - } - - if ( isset( $parameters['database'] ) ) { - if ( ctype_digit( (string) $parameters['database'] ) ) { - $parameters['database'] = (int) $parameters['database']; - } - - $args['database'] = $parameters['database']; - - if ( $parameters['database'] ) { - $this->redis->select( $parameters['database'] ); - } - } - - $this->diagnostics += $args; - } - - if ( defined( 'WP_REDIS_SERIALIZER' ) && ! empty( WP_REDIS_SERIALIZER ) ) { - $this->redis->setOption( Relay\Relay::OPT_SERIALIZER, WP_REDIS_SERIALIZER ); - - if ( function_exists( '_doing_it_wrong' ) ) { - _doing_it_wrong( __FUNCTION__ , 'The `WP_REDIS_SERIALIZER` configuration constant has been deprecated, use `WP_REDIS_IGBINARY` instead.', '2.3.1' ); - } - } - } - - /** - * Connect to Redis using the Predis library. - * - * @param array $parameters Connection parameters built by the `build_parameters` method. - * @throws \Exception If the Predis library was not found or is unreadable. - * @return void - */ - protected function connect_using_predis( $parameters ) { - $client = 'Predis'; - - // Load bundled Predis library. - if ( ! class_exists( 'Predis\Client' ) ) { - $predis = '/dependencies/predis/predis/autoload.php'; - - $pluginDir = defined( 'WP_PLUGIN_DIR' ) ? WP_PLUGIN_DIR . '/redis-cache' : null; - $contentDir = defined( 'WP_CONTENT_DIR' ) ? WP_CONTENT_DIR . '/plugins/redis-cache' : null; - $pluginPath = defined( 'WP_REDIS_PLUGIN_PATH' ) ? WP_REDIS_PLUGIN_PATH : null; - - if ( $pluginDir && is_readable( $pluginDir . $predis ) ) { - require_once $pluginDir . $predis; - } elseif ( $contentDir && is_readable( $contentDir . $predis ) ) { - require_once $contentDir . $predis; - } elseif ( $pluginPath && is_readable( $pluginPath . $predis ) ) { - require_once $pluginPath . $predis; - } else { - throw new Exception( - 'Predis library not found. Re-install Redis Cache plugin or delete the object-cache.php.' - ); - } - } - - $servers = false; - $options = []; - - if ( defined( 'WP_REDIS_SHARDS' ) ) { - $servers = WP_REDIS_SHARDS; - $parameters['shards'] = $servers; - } elseif ( defined( 'WP_REDIS_SENTINEL' ) ) { - $servers = WP_REDIS_SERVERS; - $parameters['servers'] = $servers; - $options['replication'] = 'sentinel'; - $options['service'] = WP_REDIS_SENTINEL; - } elseif ( defined( 'WP_REDIS_SERVERS' ) ) { - $servers = WP_REDIS_SERVERS; - $parameters['servers'] = $servers; - $options['replication'] = 'predis'; - } elseif ( defined( 'WP_REDIS_CLUSTER' ) ) { - $servers = $this->build_cluster_connection_array(); - $parameters['cluster'] = $servers; - $options['cluster'] = 'redis'; - } - - if ( strcasecmp( 'unix', $parameters['scheme'] ) === 0 ) { - unset($parameters['host'], $parameters['port']); - } - - if ( isset( $parameters['read_timeout'] ) && $parameters['read_timeout'] ) { - $parameters['read_write_timeout'] = $parameters['read_timeout']; - } - - foreach ( [ 'WP_REDIS_SERVERS', 'WP_REDIS_SHARDS', 'WP_REDIS_CLUSTER' ] as $constant ) { - if ( defined( $constant ) ) { - if ( $parameters['database'] ) { - $options['parameters']['database'] = $parameters['database']; - } - - if ( isset( $parameters['password'] ) ) { - if ( is_array( $parameters['password'] ) ) { - $options['parameters']['username'] = WP_REDIS_PASSWORD[0]; - $options['parameters']['password'] = WP_REDIS_PASSWORD[1]; - } else { - $options['parameters']['password'] = WP_REDIS_PASSWORD; - } - } - } - } - - if ( isset( $parameters['password'] ) ) { - if ( is_array( $parameters['password'] ) ) { - $parameters['username'] = array_shift( $parameters['password'] ); - $parameters['password'] = implode( '', $parameters['password'] ); - } - - if ( defined( 'WP_REDIS_USERNAME' ) ) { - $parameters['username'] = WP_REDIS_USERNAME; - } - } - - if ( defined( 'WP_REDIS_SSL_CONTEXT' ) && ! empty( WP_REDIS_SSL_CONTEXT ) ) { - $parameters['ssl'] = WP_REDIS_SSL_CONTEXT; - } - - $this->redis = new Predis\Client( $servers ?: $parameters, $options ); - $this->redis->connect(); - - $this->diagnostics = array_merge( - [ 'client' => sprintf( '%s (v%s)', $client, Predis\Client::VERSION ) ], - $parameters, - $options - ); - } - - /** - * Connect to Redis using the Credis library. - * - * @param array $parameters Connection parameters built by the `build_parameters` method. - * @throws \Exception If the Credis library was not found or is unreadable. - * @throws \Exception If redis sharding should be configured as Credis does not support sharding. - * @throws \Exception If more than one seninel is configured as Credis does not support multiple sentinel servers. - * @return void - */ - protected function connect_using_credis( $parameters ) { - _doing_it_wrong( __FUNCTION__ , 'Credis support will be removed in future versions.' , '2.0.26' ); - - $client = 'Credis'; - - $creds_path = sprintf( - '%s/redis-cache/dependencies/colinmollenhour/credis/', - defined( 'WP_PLUGIN_DIR' ) ? WP_PLUGIN_DIR : WP_CONTENT_DIR . '/plugins' - ); - - $to_load = []; - - if ( ! class_exists( 'Credis_Client' ) ) { - $to_load[] = 'Client.php'; - } - - $has_shards = defined( 'WP_REDIS_SHARDS' ); - $has_sentinel = defined( 'WP_REDIS_SENTINEL' ); - $has_servers = defined( 'WP_REDIS_SERVERS' ); - $has_cluster = defined( 'WP_REDIS_CLUSTER' ); - - if ( ( $has_shards || $has_sentinel || $has_servers || $has_cluster ) && ! class_exists( 'Credis_Cluster' ) ) { - $to_load[] = 'Cluster.php'; - - if ( defined( 'WP_REDIS_SENTINEL' ) && ! class_exists( 'Credis_Sentinel' ) ) { - $to_load[] = 'Sentinel.php'; - } - } - - foreach ( $to_load as $sub_path ) { - $path = $creds_path . $sub_path; - - if ( file_exists( $path ) ) { - require_once $path; - } else { - throw new Exception( - 'Credis library not found. Re-install Redis Cache plugin or delete object-cache.php.' - ); - } - } - - if ( defined( 'WP_REDIS_SHARDS' ) ) { - throw new Exception( - 'Sharding not supported by bundled Credis library. Please review your Redis Cache configuration.' - ); - } - - if ( defined( 'WP_REDIS_SENTINEL' ) ) { - if ( is_array( WP_REDIS_SERVERS ) && count( WP_REDIS_SERVERS ) > 1 ) { - throw new Exception( - 'Multiple sentinel servers are not supported by the bundled Credis library. Please review your Redis Cache configuration.' - ); - } - - $connection_string = array_values( WP_REDIS_SERVERS )[0]; - $sentinel = new Credis_Sentinel( new Credis_Client( $connection_string ) ); - $this->redis = $sentinel->getCluster( WP_REDIS_SENTINEL ); - $args['servers'] = WP_REDIS_SERVERS; - } elseif ( defined( 'WP_REDIS_CLUSTER' ) || defined( 'WP_REDIS_SERVERS' ) ) { - $parameters['db'] = $parameters['database']; - - $is_cluster = defined( 'WP_REDIS_CLUSTER' ); - $clients = $is_cluster ? WP_REDIS_CLUSTER : WP_REDIS_SERVERS; - - foreach ( $clients as $index => $connection_string ) { - // phpcs:ignore WordPress.WP.AlternativeFunctions.parse_url_parse_url - $url_components = parse_url( $connection_string ); - - if ( isset( $url_components['query'] ) ) { - parse_str( $url_components['query'], $add_params ); - } - - if ( ! $is_cluster && isset( $add_params['alias'] ) ) { - $add_params['master'] = 'master' === $add_params['alias']; - } - - $add_params['host'] = $url_components['host']; - $add_params['port'] = $url_components['port']; - - if ( ! isset( $add_params['alias'] ) ) { - $add_params['alias'] = "redis-$index"; - } - - $clients[ $index ] = array_merge( $parameters, $add_params ); - - unset($add_params); - } - - $this->redis = new Credis_Cluster( $clients ); - - foreach ( $clients as $index => $_client ) { - $connection_string = "{$_client['scheme']}://{$_client['host']}:{$_client['port']}"; - unset( $_client['scheme'], $_client['host'], $_client['port'] ); - - $params = array_filter( $_client ); - - if ( $params ) { - $connection_string .= '?' . http_build_query( $params, '', '&' ); - } - - $clients[ $index ] = $connection_string; - } - - $args['servers'] = $clients; - } else { - $args = [ - 'host' => $parameters['scheme'] === 'unix' ? $parameters['path'] : $parameters['host'], - 'port' => $parameters['port'], - 'timeout' => $parameters['timeout'], - 'persistent' => '', - 'database' => $parameters['database'], - 'password' => isset( $parameters['password'] ) ? $parameters['password'] : null, - ]; - - $this->redis = new Credis_Client( ...array_values( $args ) ); - } - - // Don't use PhpRedis if it is available. - $this->redis->forceStandalone(); - - $this->redis->connect(); - - if ( $parameters['read_timeout'] ) { - $args['read_timeout'] = $parameters['read_timeout']; - $this->redis->setReadTimeout( $parameters['read_timeout'] ); - } - - $this->diagnostics = array_merge( - [ 'client' => sprintf( '%s (v%s)', $client, Credis_Client::VERSION ) ], - $args - ); - } - - /** - * Connect to Redis using HHVM's Redis extension. - * - * @param array $parameters Connection parameters built by the `build_parameters` method. - * @return void - */ - protected function connect_using_hhvm( $parameters ) { - _doing_it_wrong( __FUNCTION__ , 'HHVM support will be removed in future versions.' , '2.0.26' ); - - $this->redis = new Redis(); - - // Adjust host and port if the scheme is `unix`. - if ( strcasecmp( 'unix', $parameters['scheme'] ) === 0 ) { - $parameters['host'] = 'unix://' . $parameters['path']; - $parameters['port'] = 0; - } - - $this->redis->connect( - $parameters['host'], - $parameters['port'], - $parameters['timeout'], - null, - $parameters['retry_interval'] - ); - - if ( $parameters['read_timeout'] ) { - $this->redis->setOption( Redis::OPT_READ_TIMEOUT, $parameters['read_timeout'] ); - } - - if ( isset( $parameters['password'] ) ) { - $this->redis->auth( $parameters['password'] ); - } - - if ( isset( $parameters['database'] ) ) { - if ( ctype_digit( (string) $parameters['database'] ) ) { - $parameters['database'] = (int) $parameters['database']; - } - - if ( $parameters['database'] ) { - $this->redis->select( $parameters['database'] ); - } - } - - $this->diagnostics = array_merge( - [ 'client' => sprintf( 'HHVM Extension (v%s)', HHVM_VERSION ) ], - $parameters - ); - } - - /** - * Fetches Redis `INFO` mostly for server version. - * - * @return void - */ - public function fetch_info() { - if ( defined( 'WP_REDIS_CLUSTER' ) ) { - $connectionId = is_string( WP_REDIS_CLUSTER ) - ? 'SERVER' - : current( $this->build_cluster_connection_array() ); - - $info = $this->is_predis() - ? $this->redis->getClientBy( 'id', $connectionId )->info() - : $this->redis->info( $connectionId ); - } else { - if ( $this->is_predis() ) { - $connection = $this->redis->getConnection(); - if ( $connection instanceof Predis\Connection\Replication\ReplicationInterface ) { - $connection->switchToMaster(); - } - } - - $info = $this->redis->info(); - } - - if ( isset( $info['redis_version'] ) ) { - $this->redis_version = $info['redis_version']; - } elseif ( isset( $info['Server']['redis_version'] ) ) { - $this->redis_version = $info['Server']['redis_version']; - } - } - - /** - * Is Redis available? - * - * @return bool - */ - public function redis_status() { - return (bool) $this->redis_connected; - } - - /** - * Returns the Redis instance. - * - * @return mixed - */ - public function redis_instance() { - return $this->redis; - } - - /** - * Returns the Redis server version. - * - * @return null|string - */ - public function redis_version() { - return $this->redis_version; - } - - /** - * Adds a value to cache. - * - * If the specified key already exists, the value is not stored and the function - * returns false. - * - * @param string $key The key under which to store the value. - * @param mixed $value The value to store. - * @param string $group The group value appended to the $key. - * @param int $expiration The expiration time, defaults to 0. - * @return bool Returns TRUE on success or FALSE on failure. - */ - public function add( $key, $value, $group = 'default', $expiration = 0 ) { - return $this->add_or_replace( true, $key, $value, $group, $expiration ); - } - - /** - * Adds multiple values to the cache in one call. - * - * @param array $data Array of keys and values to be added. - * @param string $group Optional. Where the cache contents are grouped. - * @param int $expire Optional. When to expire the cache contents, in seconds. - * Default 0 (no expiration). - * @return bool[] Array of return values, grouped by key. Each value is either - * true on success, or false if cache key and group already exist. - */ - public function add_multiple( array $data, $group = 'default', $expire = 0 ) { - if ( function_exists( 'wp_suspend_cache_addition' ) && wp_suspend_cache_addition() ) { - return array_combine( array_keys( $data ), array_fill( 0, count( $data ), false ) ); - } - - if ( - $this->redis_status() && - method_exists( $this->redis, 'pipeline' ) && - ! $this->is_ignored_group( $group ) - ) { - return $this->add_multiple_at_once( $data, $group, $expire ); - } - - $values = []; - - foreach ( $data as $key => $value ) { - $values[ $key ] = $this->add( $key, $value, $group, $expire ); - } - - return $values; - } - - /** - * Adds multiple values to the cache in one call. - * - * @param array $data Array of keys and values to be added. - * @param string $group Optional. Where the cache contents are grouped. - * @param int $expire Optional. When to expire the cache contents, in seconds. - * Default 0 (no expiration). - * @return bool[] Array of return values, grouped by key. Each value is either - * true on success, or false if cache key and group already exist. - */ - protected function add_multiple_at_once( array $data, $group = 'default', $expire = 0 ) { - $keys = array_keys( $data ); - - $san_group = $this->sanitize_key_part( $group ); - - $tx = $this->redis->pipeline(); - - $orig_exp = $expire; - $expire = $this->validate_expiration( $expire ); - $derived_keys = []; - - foreach ( $data as $key => $value ) { - /** - * Filters the cache expiration time - * - * @param int $expiration The time in seconds the entry expires. 0 for no expiry. - * @param string $key The cache key. - * @param string $group The cache group. - * @param mixed $orig_exp The original expiration value before validation. - */ - $expire = apply_filters( 'redis_cache_expiration', $expire, $key, $group, $orig_exp ); - - $san_key = $this->sanitize_key_part( $key ); - $derived_key = $derived_keys[ $key ] = $this->fast_build_key( $san_key, $san_group ); - - $args = [ $derived_key, $this->maybe_serialize( $value ) ]; - - if ( $this->is_predis() ) { - $args[] = 'nx'; - - if ( $expire ) { - $args[] = 'ex'; - $args[] = $expire; - } - } else { - if ( $expire ) { - $args[] = [ 'nx', 'ex' => $expire ]; - } else { - $args[] = [ 'nx' ]; - } - } - - $tx->set( ...$args ); - } - - try { - $start_time = microtime( true ); - - $method = $this->is_predis() ? 'execute' : 'exec'; - - $results = array_map( function ( $response ) { - return (bool) $this->parse_redis_response( $response ); - }, $tx->{$method}() ?: [] ); - - if ( count( $results ) !== count( $keys ) ) { - $tx->discard(); - - return array_fill_keys( $keys, false ); - } - - $results = array_combine( $keys, $results ); - - foreach ( $results as $key => $result ) { - if ( $result ) { - $this->add_to_internal_cache( $derived_keys[ $key ], $data[ $key ] ); - } - } - - $execute_time = microtime( true ) - $start_time; - - $this->cache_calls++; - $this->cache_time += $execute_time; - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - - return array_combine( $keys, array_fill( 0, count( $keys ), false ) ); - } - - return $results; - } - - /** - * Replace a value in the cache. - * - * If the specified key doesn't exist, the value is not stored and the function - * returns false. - * - * @param string $key The key under which to store the value. - * @param mixed $value The value to store. - * @param string $group The group value appended to the $key. - * @param int $expiration The expiration time, defaults to 0. - * @return bool Returns TRUE on success or FALSE on failure. - */ - public function replace( $key, $value, $group = 'default', $expiration = 0 ) { - return $this->add_or_replace( false, $key, $value, $group, $expiration ); - } - - /** - * Add or replace a value in the cache. - * - * Add does not set the value if the key exists; replace does not replace if the value doesn't exist. - * - * @param bool $add True if should only add if value doesn't exist, false to only add when value already exists. - * @param string $key The key under which to store the value. - * @param mixed $value The value to store. - * @param string $group The group value appended to the $key. - * @param int $expiration The expiration time, defaults to 0. - * @return bool Returns TRUE on success or FALSE on failure. - */ - protected function add_or_replace( $add, $key, $value, $group = 'default', $expiration = 0 ) { - $cache_addition_suspended = function_exists( 'wp_suspend_cache_addition' ) && wp_suspend_cache_addition(); - - if ( $add && $cache_addition_suspended ) { - return false; - } - - $result = true; - - $san_key = $this->sanitize_key_part( $key ); - $san_group = $this->sanitize_key_part( $group ); - - $derived_key = $this->fast_build_key( $san_key, $san_group ); - - // Save if group not excluded and redis is up. - if ( ! $this->is_ignored_group( $san_group ) && $this->redis_status() ) { - try { - $orig_exp = $expiration; - $expiration = $this->validate_expiration( $expiration ); - - /** - * Filters the cache expiration time - * - * @since 1.4.2 - * @param int $expiration The time in seconds the entry expires. 0 for no expiry. - * @param string $key The cache key. - * @param string $group The cache group. - * @param mixed $orig_exp The original expiration value before validation. - */ - $expiration = apply_filters( 'redis_cache_expiration', $expiration, $key, $group, $orig_exp ); - $start_time = microtime( true ); - - if ( $add ) { - $args = [ $derived_key, $this->maybe_serialize( $value ) ]; - - if ( $this->is_predis() ) { - $args[] = 'nx'; - - if ( $expiration ) { - $args[] = 'ex'; - $args[] = $expiration; - } - } else { - if ( $expiration ) { - $args[] = [ - 'nx', - 'ex' => $expiration, - ]; - } else { - $args[] = [ 'nx' ]; - } - } - - $result = $this->parse_redis_response( - $this->redis->set( ...$args ) - ); - - if ( ! $result ) { - return false; - } - } elseif ( $expiration ) { - $result = $this->parse_redis_response( $this->redis->setex( $derived_key, $expiration, $this->maybe_serialize( $value ) ) ); - } else { - $result = $this->parse_redis_response( $this->redis->set( $derived_key, $this->maybe_serialize( $value ) ) ); - } - - $execute_time = microtime( true ) - $start_time; - - $this->cache_calls++; - $this->cache_time += $execute_time; - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - - return false; - } - } - - $exists = array_key_exists( $derived_key, $this->cache ); - - if ( (bool) $add === $exists ) { - return false; - } - - if ( $result ) { - $this->add_to_internal_cache( $derived_key, $value ); - } - - return $result; - } - - /** - * Remove the item from the cache. - * - * @param string $key The key under which to store the value. - * @param string $group The group value appended to the $key. - * @return bool Returns TRUE on success or FALSE on failure. - */ - public function delete( $key, $group = 'default', $deprecated = false ) { - $result = false; - - $san_key = $this->sanitize_key_part( $key ); - $san_group = $this->sanitize_key_part( $group ); - - $derived_key = $this->fast_build_key( $san_key, $san_group ); - - if ( array_key_exists( $derived_key, $this->cache ) ) { - unset( $this->cache[ $derived_key ] ); - $result = true; - } - - $start_time = microtime( true ); - - if ( $this->redis_status() && ! $this->is_ignored_group( $san_group ) ) { - try { - $result = $this->parse_redis_response( $this->redis->del( $derived_key ) ); - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - - return false; - } - } - - $execute_time = microtime( true ) - $start_time; - - $this->cache_calls++; - $this->cache_time += $execute_time; - - if ( function_exists( 'do_action' ) ) { - /** - * Fires on every cache key deletion - * - * @since 1.3.3 - * @param string $key The cache key. - * @param string $group The group value appended to the $key. - * @param float $execute_time Execution time for the request in seconds. - */ - do_action( 'redis_object_cache_delete', $key, $group, $execute_time ); - } - - return (bool) $result; - } - - /** - * Deletes multiple values from the cache in one call. - * - * @param array $keys Array of keys to be deleted. - * @param string $group Optional. Where the cache contents are grouped. - * @return bool[] Array of return values, grouped by key. Each value is either - * true on success, or false if the contents were not deleted. - */ - public function delete_multiple( array $keys, $group = 'default' ) { - if ( - $this->redis_status() && - method_exists( $this->redis, 'pipeline' ) && - ! $this->is_ignored_group( $group ) - ) { - return $this->delete_multiple_at_once( $keys, $group ); - } - - $values = []; - - foreach ( $keys as $key ) { - $values[ $key ] = $this->delete( $key, $group ); - } - - return $values; - } - - /** - * Deletes multiple values from the cache in one call. - * - * @param array $keys Array of keys to be deleted. - * @param string $group Optional. Where the cache contents are grouped. - * @return bool[] Array of return values, grouped by key. Each value is either - * true on success, or false if the contents were not deleted. - */ - protected function delete_multiple_at_once( array $keys, $group = 'default' ) { - $start_time = microtime( true ); - - try { - $tx = $this->redis->pipeline(); - - foreach ( $keys as $key ) { - $derived_key = $this->build_key( (string) $key, $group ); - - $tx->del( $derived_key ); - - unset( $this->cache[ $derived_key ] ); - } - - $method = $this->is_predis() ? 'execute' : 'exec'; - - $results = array_map( function ( $response ) { - return (bool) $this->parse_redis_response( $response ); - }, $tx->{$method}() ?: [] ); - - if ( count( $results ) !== count( $keys ) ) { - $tx->discard(); - - return array_fill_keys( $keys, false ); - } - - $execute_time = microtime( true ) - $start_time; - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - - return array_combine( $keys, array_fill( 0, count( $keys ), false ) ); - } - - if ( function_exists( 'do_action' ) ) { - foreach ( $keys as $key ) { - /** - * Fires on every cache key deletion - * - * @since 1.3.3 - * @param string $key The cache key. - * @param string $group The group value appended to the $key. - * @param float $execute_time Execution time for the request in seconds. - */ - do_action( 'redis_object_cache_delete', $key, $group, $execute_time ); - } - } - - return array_combine( $keys, $results ); - } - - /** - * Removes all cache items from the in-memory runtime cache. - * - * @return bool True on success, false on failure. - */ - public function flush_runtime() { - $this->cache = []; - - return true; - } - - /** - * Executes Lua flush script. - * - * @return array|false Returns array on success, false on failure - */ - protected function execute_lua_script( $script ) { - $results = []; - - if ( defined( 'WP_REDIS_CLUSTER' ) ) { - return $this->execute_lua_script_on_cluster( $script ); - } - - $flushTimeout = defined( 'WP_REDIS_FLUSH_TIMEOUT' ) ? WP_REDIS_FLUSH_TIMEOUT : 5; - - if ( $this->is_predis() ) { - $connection = $this->redis->getConnection(); - - if ($connection instanceof Predis\Connection\Replication\ReplicationInterface) { - $connection = $connection->getMaster(); - } - - $timeout = $connection->getParameters()->read_write_timeout ?? ini_get( 'default_socket_timeout' ); - stream_set_timeout( $connection->getResource(), $flushTimeout ); - } else { - $timeout = $this->redis->getOption( Redis::OPT_READ_TIMEOUT ); - $this->redis->setOption( Redis::OPT_READ_TIMEOUT, $flushTimeout ); - } - - try { - $results[] = $this->parse_redis_response( $script() ); - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - $results = false; - } - - if ( $this->is_predis() ) { - stream_set_timeout( $connection->getResource(), $timeout ); // @phpstan-ignore variable.undefined - } else { - $this->redis->setOption( Redis::OPT_READ_TIMEOUT, $timeout ); - } - - return $results; - } - - /** - * Executes Lua flush script on Redis cluster. - * - * @return array|false Returns array on success, false on failure - */ - protected function execute_lua_script_on_cluster( $script ) { - $results = []; - $redis = $this->redis; - $flushTimeout = defined( 'WP_REDIS_FLUSH_TIMEOUT' ) ? WP_REDIS_FLUSH_TIMEOUT : 5; - - if ( $this->is_predis() ) { - foreach ( $this->redis->getIterator() as $master ) { - $timeout = $master->getConnection()->getParameters()->read_write_timeout ?? ini_get( 'default_socket_timeout' ); - stream_set_timeout( $master->getConnection()->getResource(), $flushTimeout ); - - $this->redis = $master; - $results[] = $this->parse_redis_response( $script() ); - - stream_set_timeout($master->getConnection()->getResource(), $timeout); - } - } else { - try { - foreach ( $this->redis->_masters() as $master ) { - $this->redis = new Redis(); - $this->redis->connect( $master[0], $master[1], 0, null, 0, $flushTimeout ); - - $results[] = $this->parse_redis_response( $script() ); - } - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - $this->redis = $redis; - - return false; - } - } - - $this->redis = $redis; - - return $results; - } - - /** - * Invalidate all items in the cache. If `WP_REDIS_SELECTIVE_FLUSH` is `true`, - * only keys prefixed with the `WP_REDIS_PREFIX` are flushed. - * - * @return bool True on success, false on failure. - */ - public function flush() { - $results = []; - $this->cache = []; - - if ( $this->redis_status() ) { - $salt = defined( 'WP_REDIS_PREFIX' ) ? trim( WP_REDIS_PREFIX ) : null; - $selective = defined( 'WP_REDIS_SELECTIVE_FLUSH' ) ? WP_REDIS_SELECTIVE_FLUSH : null; - - $start_time = microtime( true ); - - if ( $salt && $selective ) { - $script = $this->get_flush_closure( $salt ); - $results = $this->execute_lua_script( $script ); - - if ( empty( $results ) ) { - return false; - } - } else { - if ( defined( 'WP_REDIS_CLUSTER' ) ) { - try { - if ( $this->is_predis() ) { - foreach ( $this->redis->getIterator() as $master ) { - $results[] = $this->parse_redis_response( $master->flushdb() ); - } - } else { - foreach ( $this->redis->_masters() as $master ) { - $results[] = $this->parse_redis_response( $this->redis->flushdb( $master ) ); - } - } - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - - return false; - } - } else { - try { - $results[] = $this->parse_redis_response( $this->redis->flushdb() ); - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - - return false; - } - } - } - - if ( function_exists( 'do_action' ) ) { - $execute_time = microtime( true ) - $start_time; - - /** - * Fires on every cache flush - * - * @since 1.3.5 - * @param null|array $results Array of flush results. - * @param int $deprecated Unused. Default 0. - * @param bool $seletive Whether a selective flush took place. - * @param string $salt The defined key prefix. - * @param float $execute_time Execution time for the request in seconds. - */ - do_action( 'redis_object_cache_flush', $results, 0, $selective, $salt, $execute_time ); - } - } - - if ( empty( $results ) ) { - return false; - } - - foreach ( $results as $result ) { - if ( ! $result ) { - return false; - } - } - - return true; - } - - /** - * Removes all cache items in a group. - * - * @param string $group Name of group to remove from cache. - * @return bool Returns TRUE on success or FALSE on failure. - */ - public function flush_group( $group ) { - if ( defined( 'WP_REDIS_DISABLE_GROUP_FLUSH' ) && WP_REDIS_DISABLE_GROUP_FLUSH ) { - return $this->flush(); - } - - $san_group = $this->sanitize_key_part( $group ); - - if ( is_multisite() && ! $this->is_global_group( $san_group ) ) { - $salt = str_replace( "{$this->blog_prefix}:{$san_group}", "*:{$san_group}", $this->fast_build_key( '*', $san_group ) ); - } else { - $salt = $this->fast_build_key( '*', $san_group ); - } - - foreach ( $this->cache as $key => $value ) { - if ( strpos( $key, "{$san_group}:" ) === 0 || strpos( $key, ":{$san_group}:" ) !== false ) { - unset( $this->cache[ $key ] ); - } - } - - if ( in_array( $san_group, $this->unflushable_groups ) ) { - return false; - } - - if ( ! $this->redis_status() ) { - return false; - } - - $start_time = microtime( true ); - $script = $this->lua_flush_closure( $salt, false ); - $results = $this->execute_lua_script( $script ); - - if ( empty( $results ) ) { - return false; - } - - if ( function_exists( 'do_action' ) ) { - $execute_time = microtime( true ) - $start_time; - - /** - * Fires on every group cache flush - * - * @param null|array $results Array of flush results. - * @param string $salt The defined key prefix. - * @param float $execute_time Execution time for the request in seconds. - * @since 2.2.3 - */ - do_action( 'redis_object_cache_flush_group', $results, $salt, $execute_time ); - } - - foreach ( $results as $result ) { - if ( ! $result ) { - return false; - } - } - - return true; - } - - /** - * Returns a closure to flush selectively. - * - * @param string $salt The salt to be used to differentiate. - * @return callable Generated callable executing the lua script. - */ - protected function get_flush_closure( $salt ) { - if ( $this->unflushable_groups ) { - return $this->lua_flush_extended_closure( $salt ); - } else { - return $this->lua_flush_closure( $salt ); - } - } - - /** - * Quotes a string for usage in the `glob` function - * - * @param string $string The string to quote. - * @return string - */ - protected function glob_quote( $string ) { - $characters = [ '*', '+', '?', '!', '{', '}', '[', ']', '(', ')', '|', '@' ]; - - return str_replace( - $characters, - array_map( - function ( $character ) { - return "[{$character}]"; - }, - $characters - ), - $string - ); - } - - /** - * Returns a closure ready to be called to flush selectively ignoring unflushable groups. - * - * @param string $salt The salt to be used to differentiate. - * @param bool $escape ... - * @return callable Generated callable executing the lua script. - */ - protected function lua_flush_closure( $salt, $escape = true ) { - $salt = $escape ? $this->glob_quote( $salt ) : $salt; - - return function () use ( $salt ) { - $script = <<redis_version) && version_compare( $this->redis_version, '5', '<' ) && version_compare( $this->redis_version, '3.2', '>=' ) ) { - $script = 'redis.replicate_commands()' . "\n" . $script; - } - - $args = $this->is_predis() ? [ $script, 0 ] : [ $script ]; - - return call_user_func_array( [ $this->redis, 'eval' ], $args ); - }; - } - - /** - * Returns a closure ready to be called to flush selectively. - * - * @param string $salt The salt to be used to differentiate. - * @return callable Generated callable executing the lua script. - */ - protected function lua_flush_extended_closure( $salt ) { - $salt = $this->glob_quote( $salt ); - - return function () use ( $salt ) { - $salt_length = strlen( $salt ); - - $unflushable = array_map( - function ( $group ) { - return ":{$group}:"; - }, - $this->unflushable_groups - ); - - $script = <<redis_version) && version_compare( $this->redis_version, '5', '<' ) && version_compare( $this->redis_version, '3.2', '>=' ) ) { - $script = 'redis.replicate_commands()' . "\n" . $script; - } - - $args = $this->is_predis() - ? array_merge( [ $script, count( $unflushable ) ], $unflushable ) - : [ $script, $unflushable, count( $unflushable ) ]; - - return call_user_func_array( [ $this->redis, 'eval' ], $args ); - }; - } - - /** - * Retrieve object from cache. - * - * Gets an object from cache based on $key and $group. - * - * @param string $key The key under which to store the value. - * @param string $group The group value appended to the $key. - * @param bool $force Optional. Whether to force a refetch rather than relying on the local - * cache. Default false. - * @param bool $found Optional. Whether the key was found in the cache. Disambiguates a return of - * false, a storable value. Passed by reference. Default null. - * @return bool|mixed Cached object value. - */ - public function get( $key, $group = 'default', $force = false, &$found = null ) { - $san_key = $this->sanitize_key_part( $key ); - $san_group = $this->sanitize_key_part( $group ); - $derived_key = $this->fast_build_key( $san_key, $san_group ); - - if ( array_key_exists( $derived_key, $this->cache ) && ! $force ) { - $found = true; - $this->cache_hits++; - $value = $this->get_from_internal_cache( $derived_key ); - - return $value; - } elseif ( $this->is_ignored_group( $group ) || ! $this->redis_status() ) { - $found = false; - $this->cache_misses++; - - return false; - } - - $start_time = microtime( true ); - - try { - $result = $this->redis->get( $derived_key ); - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - - return false; - } - - $execute_time = microtime( true ) - $start_time; - - $this->cache_calls++; - $this->cache_time += $execute_time; - - if ( $result === null || $result === false ) { - $found = false; - $this->cache_misses++; - - return false; - } else { - $found = true; - $this->cache_hits++; - $value = $this->maybe_unserialize( $result ); - } - - $this->add_to_internal_cache( $derived_key, $value ); - - if ( function_exists( 'do_action' ) ) { - /** - * Fires on every cache get request - * - * @since 1.2.2 - * @param mixed $value Value of the cache entry. - * @param string $key The cache key. - * @param string $group The group value appended to the $key. - * @param bool $force Whether a forced refetch has taken place rather than relying on the local cache. - * @param bool $found Whether the key was found in the cache. - * @param float $execute_time Execution time for the request in seconds. - */ - do_action( 'redis_object_cache_get', $key, $value, $group, $force, $found, $execute_time ); - } - - if ( function_exists( 'apply_filters' ) && function_exists( 'has_filter' ) ) { - if ( has_filter( 'redis_object_cache_get_value' ) ) { - /** - * Filters the return value - * - * @since 1.4.2 - * @param mixed $value Value of the cache entry. - * @param string $key The cache key. - * @param string $group The group value appended to the $key. - * @param bool $force Whether a forced refetch has taken place rather than relying on the local cache. - * @param bool $found Whether the key was found in the cache. - */ - return apply_filters( 'redis_object_cache_get_value', $value, $key, $group, $force, $found ); - } - } - - return $value; - } - - /** - * Retrieves multiple values from the cache in one call. - * - * @param array $keys Array of keys under which the cache contents are stored. - * @param string $group Optional. Where the cache contents are grouped. Default empty. - * @param bool $force Optional. Whether to force an update of the local cache - * from the persistent cache. Default false. - * @return array|false Array of values organized into groups. - */ - public function get_multiple( $keys, $group = 'default', $force = false ) { - if ( ! is_array( $keys ) ) { - return false; - } - - $cache = []; - $derived_keys = []; - $start_time = microtime( true ); - - $san_group = $this->sanitize_key_part( $group ); - - foreach ( $keys as $key ) { - $san_key = $this->sanitize_key_part( $key ); - $derived_keys[ $key ] = $this->fast_build_key( $san_key, $san_group ); - } - - if ( $this->is_ignored_group( $group ) || ! $this->redis_status() ) { - foreach ( $keys as $key ) { - $value = $this->get_from_internal_cache( $derived_keys[ $key ] ); - $cache[ $key ] = $value; - - if ($value === false) { - $this->cache_misses++; - } else { - $this->cache_hits++; - } - } - - return $cache; - } - - if ( ! $force ) { - foreach ( $keys as $key ) { - $value = $this->get_from_internal_cache( $derived_keys[ $key ] ); - - if ( $value === false ) { - $this->cache_misses++; - - } else { - $cache[ $key ] = $value; - $this->cache_hits++; - } - } - } - - $remaining_keys = array_filter( - $keys, - function ( $key ) use ( $cache ) { - return ! array_key_exists( $key, $cache ); - } - ); - - if ( empty( $remaining_keys ) ) { - return $cache; - } - - $start_time = microtime( true ); - $results = []; - - $remaining_ids = array_map( - function ( $key ) use ( $derived_keys ) { - return $derived_keys[ $key ]; - }, - $remaining_keys - ); - - try { - $results = array_combine( - $remaining_keys, - $this->redis->mget( $remaining_ids ) - ?: array_fill( 0, count( $remaining_ids ), false ) - ); - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - - $results = array_combine( - $remaining_keys, - array_fill( 0, count( $remaining_ids ), false ) - ); - } - - $execute_time = microtime( true ) - $start_time; - - $this->cache_calls++; - $this->cache_time += $execute_time; - - foreach ( $results as $key => $value ) { - if ( $value === null || $value === false ) { - $cache[ $key ] = false; - $this->cache_misses++; - } else { - $cache[ $key ] = $this->maybe_unserialize( $value ); - $this->add_to_internal_cache( $derived_keys[ $key ], $cache[ $key ] ); - $this->cache_hits++; - } - } - - if ( function_exists( 'do_action' ) ) { - /** - * Fires on every cache get multiple request - * - * @since 2.0.6 - * @param array $keys Array of keys under which the cache contents are stored. - * @param array $cache Cache items. - * @param string $group The group value appended to the $key. - * @param bool $force Whether a forced refetch has taken place rather than relying on the local cache. - * @param float $execute_time Execution time for the request in seconds. - */ - do_action( 'redis_object_cache_get_multiple', $keys, $cache, $group, $force, $execute_time ); - } - - if ( function_exists( 'apply_filters' ) && function_exists( 'has_filter' ) ) { - if ( has_filter( 'redis_object_cache_get_value' ) ) { - foreach ( $cache as $key => $value ) { - /** - * Filters the return value - * - * @since 1.4.2 - * @param mixed $value Value of the cache entry. - * @param string $key The cache key. - * @param string $group The group value appended to the $key. - * @param bool $force Whether a forced refetch has taken place rather than relying on the local cache. - */ - $cache[ $key ] = apply_filters( 'redis_object_cache_get_value', $value, $key, $group, $force ); - } - } - } - - return $cache; - } - - /** - * Sets a value in cache. - * - * The value is set whether or not this key already exists in Redis. - * - * @param string $key The key under which to store the value. - * @param mixed $value The value to store. - * @param string $group The group value appended to the $key. - * @param int $expiration The expiration time, defaults to 0. - * @return bool Returns TRUE on success or FALSE on failure. - */ - public function set( $key, $value, $group = 'default', $expiration = 0 ) { - $result = true; - $start_time = microtime( true ); - - $san_key = $this->sanitize_key_part( $key ); - $san_group = $this->sanitize_key_part( $group ); - - $derived_key = $this->fast_build_key( $san_key, $san_group ); - - // Save if group not excluded from redis and redis is up. - if ( ! $this->is_ignored_group( $group ) && $this->redis_status() ) { - $orig_exp = $expiration; - $expiration = $this->validate_expiration( $expiration ); - - /** - * Filters the cache expiration time - * - * @since 1.4.2 - * @param int $expiration The time in seconds the entry expires. 0 for no expiry. - * @param string $key The cache key. - * @param string $group The cache group. - * @param mixed $orig_exp The original expiration value before validation. - */ - $expiration = apply_filters( 'redis_cache_expiration', $expiration, $key, $group, $orig_exp ); - - try { - if ( $expiration ) { - $result = $this->parse_redis_response( $this->redis->setex( $derived_key, $expiration, $this->maybe_serialize( $value ) ) ); - } else { - $result = $this->parse_redis_response( $this->redis->set( $derived_key, $this->maybe_serialize( $value ) ) ); - } - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - - return false; - } - - $execute_time = microtime( true ) - $start_time; - $this->cache_calls++; - $this->cache_time += $execute_time; - } - - // If the set was successful, or we didn't go to redis. - if ( $result ) { - $this->add_to_internal_cache( $derived_key, $value ); - } - - if ( function_exists( 'do_action' ) ) { - $execute_time = microtime( true ) - $start_time; - - /** - * Fires on every cache set - * - * @since 1.2.2 - * @param string $key The cache key. - * @param mixed $value Value of the cache entry. - * @param string $group The group value appended to the $key. - * @param int $expiration The time in seconds the entry expires. 0 for no expiry. - * @param float $execute_time Execution time for the request in seconds. - */ - do_action( 'redis_object_cache_set', $key, $value, $group, $expiration, $execute_time ); - } - - return $result; - } - - /** - * Sets multiple values to the cache in one call. - * - * @param array $data Array of key and value to be set. - * @param string $group Optional. Where the cache contents are grouped. - * @param int $expire Optional. When to expire the cache contents, in seconds. - * Default 0 (no expiration). - * @return bool[] Array of return values, grouped by key. Each value is always true. - */ - public function set_multiple( array $data, $group = 'default', $expire = 0 ) { - if ( - $this->redis_status() && - method_exists( $this->redis, 'pipeline' ) && - ! $this->is_ignored_group( $group ) - ) { - return $this->set_multiple_at_once( $data, $group, $expire ); - } - - $values = []; - - foreach ( $data as $key => $value ) { - $values[ $key ] = $this->set( $key, $value, $group, $expire ); - } - - return $values; - } - - /** - * Sets multiple values to the cache in one call. - * - * @param array $data Array of key and value to be set. - * @param string $group Optional. Where the cache contents are grouped. - * @param int $expiration Optional. When to expire the cache contents, in seconds. - * Default 0 (no expiration). - * @return bool[] Array of return values, grouped by key. Each value is always true. - */ - protected function set_multiple_at_once( array $data, $group = 'default', $expiration = 0 ) { - $start_time = microtime( true ); - - $san_group = $this->sanitize_key_part( $group ); - $derived_keys = []; - - $orig_exp = $expiration; - $expiration = $this->validate_expiration( $expiration ); - $expirations = []; - - $tx = $this->redis->pipeline(); - $keys = array_keys( $data ); - - foreach ( $data as $key => $value ) { - $san_key = $this->sanitize_key_part( $key ); - $derived_key = $derived_keys[ $key ] = $this->fast_build_key( $san_key, $san_group ); - - /** - * Filters the cache expiration time - * - * @param int $expiration The time in seconds the entry expires. 0 for no expiry. - * @param string $key The cache key. - * @param string $group The cache group. - * @param mixed $orig_exp The original expiration value before validation. - */ - $expiration = $expirations[ $key ] = apply_filters( 'redis_cache_expiration', $expiration, $key, $group, $orig_exp ); - - if ( $expiration ) { - $tx->setex( $derived_key, $expiration, $this->maybe_serialize( $value ) ); - } else { - $tx->set( $derived_key, $this->maybe_serialize( $value ) ); - } - } - - try { - $method = $this->is_predis() ? 'execute' : 'exec'; - - $results = array_map( function ( $response ) { - return (bool) $this->parse_redis_response( $response ); - }, $tx->{$method}() ?: [] ); - - if ( count( $results ) !== count( $keys ) ) { - $tx->discard(); - - return array_fill_keys( $keys, false ); - } - - $results = array_combine( $keys, $results ); - - foreach ( $results as $key => $result ) { - if ( $result ) { - $this->add_to_internal_cache( $derived_keys[ $key ], $data[ $key ] ); - } - } - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - - return array_combine( $keys, array_fill( 0, count( $keys ), false ) ); - } - - $execute_time = microtime( true ) - $start_time; - - $this->cache_calls++; - $this->cache_time += $execute_time; - - if ( function_exists( 'do_action' ) ) { - foreach ( $data as $key => $value ) { - /** - * Fires on every cache set - * - * @param string $key The cache key. - * @param mixed $value Value of the cache entry. - * @param string $group The group value appended to the $key. - * @param int $expiration The time in seconds the entry expires. 0 for no expiry. - * @param float $execute_time Execution time for the request in seconds. - */ - do_action( 'redis_object_cache_set', $key, $value, $group, $expirations[ $key ], $execute_time ); - } - } - - return $results; - } - - /** - * Increment a Redis counter by the amount specified - * - * @param string $key The key name. - * @param int $offset Optional. The increment. Defaults to 1. - * @param string $group Optional. The key group. Default is 'default'. - * @return int|bool - */ - public function increment( $key, $offset = 1, $group = 'default' ) { - $offset = (int) $offset; - $start_time = microtime( true ); - - $san_key = $this->sanitize_key_part( $key ); - $san_group = $this->sanitize_key_part( $group ); - - $derived_key = $this->fast_build_key( $san_key, $san_group ); - - // If group is a non-Redis group, save to internal cache, not Redis. - if ( $this->is_ignored_group( $group ) || ! $this->redis_status() ) { - $value = $this->get_from_internal_cache( $derived_key ); - $value += $offset; - $this->add_to_internal_cache( $derived_key, $value ); - - return $value; - } - - try { - $result = $this->parse_redis_response( $this->redis->incrBy( $derived_key, $offset ) ); - - $this->add_to_internal_cache( $derived_key, (int) $this->redis->get( $derived_key ) ); - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - - return false; - } - - $execute_time = microtime( true ) - $start_time; - - $this->cache_calls += 2; - $this->cache_time += $execute_time; - - return $result; - } - - /** - * Alias of `increment()`. - * - * @see self::increment() - * @param string $key The key name. - * @param int $offset Optional. The increment. Defaults to 1. - * @param string $group Optional. The key group. Default is 'default'. - * @return int|bool - */ - public function incr( $key, $offset = 1, $group = 'default' ) { - return $this->increment( $key, $offset, $group ); - } - - /** - * Decrement a Redis counter by the amount specified - * - * @param string $key The key name. - * @param int $offset Optional. The decrement. Defaults to 1. - * @param string $group Optional. The key group. Default is 'default'. - * @return int|bool - */ - public function decrement( $key, $offset = 1, $group = 'default' ) { - $offset = (int) $offset; - $start_time = microtime( true ); - - $san_key = $this->sanitize_key_part( $key ); - $san_group = $this->sanitize_key_part( $group ); - - $derived_key = $this->fast_build_key( $san_key, $san_group ); - - // If group is a non-Redis group, save to internal cache, not Redis. - if ( $this->is_ignored_group( $group ) || ! $this->redis_status() ) { - $value = $this->get_from_internal_cache( $derived_key ); - $value -= $offset; - $this->add_to_internal_cache( $derived_key, $value ); - - return $value; - } - - try { - $result = $this->parse_redis_response( $this->redis->decrBy( $derived_key, $offset ) ); - - $this->add_to_internal_cache( $derived_key, (int) $this->redis->get( $derived_key ) ); - } catch ( Exception $exception ) { - $this->handle_exception( $exception ); - - return false; - } - - $execute_time = microtime( true ) - $start_time; - - $this->cache_calls += 2; - $this->cache_time += $execute_time; - - return $result; - } - - /** - * Alias of `decrement()`. - * - * @see self::decrement() - * @param string $key The key name. - * @param int $offset Optional. The decrement. Defaults to 1. - * @param string $group Optional. The key group. Default is 'default'. - * @return int|bool - */ - public function decr( $key, $offset = 1, $group = 'default' ) { - return $this->decrement( $key, $offset, $group ); - } - - /** - * Render data about current cache requests - * Used by the Debug bar plugin - * - * @return void - */ - public function stats() { - ?> -

- Redis Status: - redis_status() ? 'Connected' : 'Not connected'; ?> -
- Redis Client: - diagnostics['client'] ?: 'Unknown'; ?> -
- Cache Hits: - cache_hits; ?> -
- Cache Misses: - cache_misses; ?> -
- Cache Size: - cache ) ) / 1024, 2 ); ?> KB -

- cache_hits + $this->cache_misses; - - $bytes = array_map( - function ( $keys ) { - // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize - return strlen( serialize( $keys ) ); - }, - $this->cache - ); - - return (object) [ - 'hits' => $this->cache_hits, - 'misses' => $this->cache_misses, - 'ratio' => $total > 0 ? round( $this->cache_hits / ( $total / 100 ), 1 ) : 100, - 'bytes' => array_sum( $bytes ), - 'time' => $this->cache_time, - 'calls' => $this->cache_calls, - 'groups' => (object) [ - 'global' => $this->global_groups, - 'non_persistent' => $this->ignored_groups, - 'unflushable' => $this->unflushable_groups, - ], - 'errors' => empty( $this->errors ) ? null : $this->errors, - 'meta' => [ - 'Client' => $this->diagnostics['client'] ?? 'Unknown', - 'Redis Version' => $this->redis_version, - ], - ]; - } - - /** - * Builds a key for the cached object using the prefix, group and key. - * - * @param string $key The key under which to store the value, pre-sanitized. - * @param string $group The group value appended to the $key, pre-sanitized. - * - * @return string - */ - public function build_key( $key, $group = 'default' ) { - if ( empty( $group ) ) { - $group = 'default'; - } - - $san_key = $this->sanitize_key_part( $key ); - $san_group = $this->sanitize_key_part( $group ); - - return $this->fast_build_key($san_key, $san_group); - } - - /** - * Builds a key for the cached object using the prefix, group and key. - * - * @param string $key The key under which to store the value, pre-sanitized. - * @param string $group The group value appended to the $key, pre-sanitized. - * - * @return string - */ - public function fast_build_key( $key, $group = 'default' ) { - if ( empty( $group ) ) { - $group = 'default'; - } - - $salt = defined( 'WP_REDIS_PREFIX' ) ? trim( WP_REDIS_PREFIX ) : ''; - - $prefix = $this->is_global_group( $group ) ? $this->global_prefix : $this->blog_prefix; - $prefix = trim( $prefix, '_-:$' ); - - return "{$salt}{$prefix}:{$group}:{$key}"; - } - - /** - * Replaces the set group separator by another one - * - * @param string $part The string to sanitize. - * @return string Sanitized string. - */ - protected function sanitize_key_part( $part ) { - return is_string( $part ) ? str_replace( ':', '-', $part ) : $part; - } - - /** - * Checks if the given group is part the ignored group array - * - * @param string $group Name of the group to check, pre-sanitized. - * @return bool - */ - protected function is_ignored_group( $group ) { - return $this->is_group_of_type( $group, 'ignored' ); - } - - /** - * Checks if the given group is part the global group array - * - * @param string $group Name of the group to check, pre-sanitized. - * @return bool - */ - protected function is_global_group( $group ) { - return $this->is_group_of_type( $group, 'global' ); - } - - /** - * Checks if the given group is part the unflushable group array - * - * @param string $group Name of the group to check, pre-sanitized. - * @return bool - */ - protected function is_unflushable_group( $group ) { - return $this->is_group_of_type( $group, 'unflushable' ); - } - - /** - * Checks the type of the given group - * - * @param string $group Name of the group to check, pre-sanitized. - * @param string $type Type of the group to check. - * @return bool - */ - private function is_group_of_type( $group, $type ) { - return isset( $this->group_type[ $group ] ) - && $this->group_type[ $group ] == $type; - } - - /** - * Convert Redis responses into something meaningful - * - * @param mixed $response Response sent from the redis instance. - * @return mixed - */ - protected function parse_redis_response( $response ) { - if ( is_bool( $response ) ) { - return $response; - } - - if ( is_numeric( $response ) ) { - return $response; - } - - if ( is_object( $response ) && method_exists( $response, 'getPayload' ) ) { - return $response->getPayload() === 'OK'; - } - - return false; - } - - /** - * Simple wrapper for saving object to the internal cache. - * - * @param string $derived_key Key to save value under. - * @param mixed $value Object value. - */ - public function add_to_internal_cache( $derived_key, $value ) { - if ( is_object( $value ) ) { - $value = clone $value; - } - - $this->cache[ $derived_key ] = $value; - } - - /** - * Get a value specifically from the internal, run-time cache, not Redis. - * - * @param int|string $derived_key Key value. - * - * @return bool|mixed Value on success; false on failure. - */ - public function get_from_internal_cache( $derived_key ) { - if ( ! array_key_exists( $derived_key, $this->cache ) ) { - return false; - } - - if ( is_object( $this->cache[ $derived_key ] ) ) { - return clone $this->cache[ $derived_key ]; - } - - return $this->cache[ $derived_key ]; - } - - /** - * In multisite, switch blog prefix when switching blogs - * - * @param int $_blog_id Blog ID. - * @return bool - */ - public function switch_to_blog( $_blog_id ) { - if ( ! function_exists( 'is_multisite' ) || ! is_multisite() ) { - return false; - } - - $this->blog_prefix = (int) $_blog_id; - - return true; - } - - /** - * Sets the list of global groups. - * - * @param array $groups List of groups that are global. - */ - public function add_global_groups( $groups ) { - $groups = (array) $groups; - - if ( $this->redis_status() ) { - $this->global_groups = array_unique( array_merge( $this->global_groups, $groups ) ); - } else { - $this->ignored_groups = array_unique( array_merge( $this->ignored_groups, $groups ) ); - } - - $this->cache_group_types(); - } - - /** - * Sets the list of groups not to be cached by Redis. - * - * @param array $groups List of groups that are to be ignored. - */ - public function add_non_persistent_groups( $groups ) { - /** - * Filters list of groups to be added to {@see self::$ignored_groups} - * - * @since 2.1.7 - * @param string[] $groups List of groups to be ignored. - */ - $groups = apply_filters( 'redis_cache_add_non_persistent_groups', (array) $groups ); - - $this->ignored_groups = array_unique( array_merge( $this->ignored_groups, $groups ) ); - $this->cache_group_types(); - } - - /** - * Sets the list of groups not to flushed cached. - * - * @param array $groups List of groups that are unflushable. - */ - public function add_unflushable_groups( $groups ) { - $groups = (array) $groups; - - $this->unflushable_groups = array_unique( array_merge( $this->unflushable_groups, $groups ) ); - $this->cache_group_types(); - } - - /** - * Wrapper to validate the cache keys expiration value - * - * @param mixed $expiration Incoming expiration value (whatever it is). - */ - protected function validate_expiration( $expiration ) { - $expiration = is_int( $expiration ) || ctype_digit( (string) $expiration ) ? (int) $expiration : 0; - - if ( defined( 'WP_REDIS_MAXTTL' ) ) { - $max = (int) WP_REDIS_MAXTTL; - - if ( $expiration === 0 || $expiration > $max ) { - $expiration = $max; - } - } - - return $expiration; - } - - /** - * Unserialize value only if it was serialized. - * - * @param string $original Maybe unserialized original, if is needed. - * @return mixed Unserialized data can be any type. - */ - protected function maybe_unserialize( $original ) { - if ( defined( 'WP_REDIS_SERIALIZER' ) && ! empty( WP_REDIS_SERIALIZER ) ) { - return $original; - } - - if ( defined( 'WP_REDIS_IGBINARY' ) && WP_REDIS_IGBINARY && function_exists( 'igbinary_unserialize' ) ) { - return igbinary_unserialize( $original ); - } - - // Don't attempt to unserialize data that wasn't serialized going in. - if ( $this->is_serialized( $original ) ) { - // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged, WordPress.PHP.DiscouragedPHPFunctions.serialize_unserialize - $value = @unserialize( $original ); - - return is_object( $value ) ? clone $value : $value; - } - - return $original; - } - - /** - * Serialize data, if needed. - * - * @param mixed $data Data that might be serialized. - * @return mixed A scalar data - */ - protected function maybe_serialize( $data ) { - if ( is_object( $data ) ) { - $data = clone $data; - } - - if ( defined( 'WP_REDIS_SERIALIZER' ) && ! empty( WP_REDIS_SERIALIZER ) ) { - return $data; - } - - if ( defined( 'WP_REDIS_IGBINARY' ) && WP_REDIS_IGBINARY && function_exists( 'igbinary_serialize' ) ) { - return igbinary_serialize( $data ); - } - - if ( is_array( $data ) || is_object( $data ) ) { - // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize - return serialize( $data ); - } - - if ( $this->is_serialized( $data, false ) ) { - // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize - return serialize( $data ); - } - - return $data; - } - - /** - * Check value to find if it was serialized. - * - * If $data is not an string, then returned value will always be false. - * Serialized data is always a string. - * - * @param string $data Value to check to see if was serialized. - * @param bool $strict Optional. Whether to be strict about the end of the string. Default true. - * @return bool False if not serialized and true if it was. - */ - protected function is_serialized( $data, $strict = true ) { - // if it isn't a string, it isn't serialized. - if ( ! is_string( $data ) ) { - return false; - } - - $data = trim( $data ); - - if ( 'N;' === $data ) { - return true; - } - - if ( strlen( $data ) < 4 ) { - return false; - } - - if ( ':' !== $data[1] ) { - return false; - } - - if ( $strict ) { - $lastc = substr( $data, -1 ); - - if ( ';' !== $lastc && '}' !== $lastc ) { - return false; - } - } else { - $semicolon = strpos( $data, ';' ); - $brace = strpos( $data, '}' ); - - // Either ; or } must exist. - if ( false === $semicolon && false === $brace ) { - return false; - } - - // But neither must be in the first X characters. - if ( false !== $semicolon && $semicolon < 3 ) { - return false; - } - - if ( false !== $brace && $brace < 4 ) { - return false; - } - } - $token = $data[0]; - - switch ( $token ) { - case 's': - if ( $strict ) { - if ( '"' !== substr( $data, -2, 1 ) ) { - return false; - } - } elseif ( false === strpos( $data, '"' ) ) { - return false; - } - // Or else fall through. - // No break! - case 'a': - case 'O': - return (bool) preg_match( "/^{$token}:[0-9]+:/s", $data ); - case 'b': - case 'i': - case 'd': - $end = $strict ? '$' : ''; - - return (bool) preg_match( "/^{$token}:[0-9.E-]+;$end/", $data ); - } - - return false; - } - - /** - * Handle the redis failure gracefully or throw an exception. - * - * @param \Exception $exception Exception thrown. - * @throws \Exception If `fail_gracefully` flag is set to a falsy value. - * @return void - */ - protected function handle_exception( $exception ) { - $this->redis_connected = false; - - // When Redis is unavailable, fall back to the internal cache by forcing all groups to be "no redis" groups. - $this->ignored_groups = array_unique( array_merge( $this->ignored_groups, $this->global_groups ) ); - - error_log( $exception ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log - - if ( function_exists( 'do_action' ) ) { - /** - * Fires when an object cache related error occurs. - * - * @since 1.5.0 - * @param \Exception $exception The exception. - * @param string $message The exception message. - */ - do_action( 'redis_object_cache_error', $exception, $exception->getMessage() ); - } - - if ( ! $this->fail_gracefully ) { - $this->show_error_and_die( $exception ); - } - - $this->errors[] = $exception->getMessage(); - } - - /** - * Show Redis connection error screen, or load custom `/redis-error.php`. - * - * @return void - */ - protected function show_error_and_die( Exception $exception ) { - wp_load_translations_early(); - - $domain = 'redis-cache'; - $locale = defined( 'WPLANG' ) ? WPLANG : 'en_US'; - $mofile = WP_LANG_DIR . "/plugins/{$domain}-{$locale}.mo"; - - if ( load_textdomain( $domain, $mofile, $locale ) === false ) { - add_filter( 'pre_determine_locale', function () { - return defined( 'WPLANG' ) ? WPLANG : 'en_US'; - } ); - - add_filter( 'pre_get_language_files_from_path', '__return_empty_array' ); - } - - // Load custom Redis error template, if present. - if ( file_exists( WP_CONTENT_DIR . '/redis-error.php' ) ) { - require_once WP_CONTENT_DIR . '/redis-error.php'; - die(); - } - - $verbose = wp_installing() - || defined( 'WP_ADMIN' ) - || ( defined( 'WP_DEBUG' ) && WP_DEBUG ); - - $message = '

' . __( 'Error establishing a Redis connection', 'redis-cache' ) . "

\n"; - - if ( $verbose ) { - $message .= "

" . $exception->getMessage() . "

\n"; - - $message .= '

' . sprintf( - // translators: %s = Formatted wp-config.php file name. - __( 'WordPress is unable to establish a connection to Redis. This means that the connection information in your %s file are incorrect, or that the Redis server is not reachable.', 'redis-cache' ), - 'wp-config.php' - ) . "

\n"; - - $message .= "
    \n"; - $message .= '
  • ' . __( 'Is the correct Redis host and port set?', 'redis-cache' ) . "
  • \n"; - $message .= '
  • ' . __( 'Is the Redis server running?', 'redis-cache' ) . "
  • \n"; - $message .= "
\n"; - - $message .= '

' . sprintf( - // translators: %s = Link to installation instructions. - __( 'If you need help, please read the installation instructions.', 'redis-cache' ), - 'https://github.com/rhubarbgroup/redis-cache/blob/develop/INSTALL.md' - ) . "

\n"; - } - - $message .= '

' . sprintf( - // translators: %1$s = Formatted object-cache.php file name, %2$s = Formatted wp-content directory name. - __( 'To disable Redis, delete the %1$s file in the %2$s directory.', 'redis-cache' ), - 'object-cache.php', - '/wp-content/' - ) . "

\n"; - - wp_die( $message ); - } - - /** - * Builds a clean connection array out of redis clusters array. - * - * @return array - */ - protected function build_cluster_connection_array() { - $cluster = array_values( WP_REDIS_CLUSTER ); - - foreach ( $cluster as $key => $server ) { - $components = parse_url( $server ); - - if ( ! empty( $components['scheme'] ) ) { - $scheme = $components['scheme']; - } elseif ( defined( 'WP_REDIS_SCHEME' ) ) { - $scheme = WP_REDIS_SCHEME; - } else { - $scheme = null; - } - - if ( isset( $scheme ) ) { - $cluster[ $key ] = sprintf( - '%s://%s:%d', - $scheme, - $components['host'], - $components['port'] - ); - } else { - $cluster[ $key ] = sprintf( - '%s:%d', - $components['host'], - $components['port'] - ); - } - } - - return $cluster; - } - - /** - * Check whether Predis client is in use. - * - * @return bool - */ - protected function is_predis() { - return $this->redis instanceof Predis\Client; - } - - /** - * Allows access to private properties for backwards compatibility. - * - * @param string $name Name of the property. - * @return mixed - */ - public function __get( $name ) { - return isset( $this->{$name} ) ? $this->{$name} : null; - } -} - -endif; -// phpcs:enable Generic.WhiteSpace.ScopeIndent.IncorrectExact, Generic.WhiteSpace.ScopeIndent.Incorrect diff --git a/web/app/themes/haiku-atelier-2024/assets/css/main.css b/web/app/themes/haiku-atelier-2024/assets/css/main.css index ba956415..05dd7d5a 100644 --- a/web/app/themes/haiku-atelier-2024/assets/css/main.css +++ b/web/app/themes/haiku-atelier-2024/assets/css/main.css @@ -745,9 +745,13 @@ body:has(#menu-mobile:not([aria-hidden=true])) { position: absolute; z-index: 5; bottom: calc(var(--position-y-fleches) / 2 - var(--espace-l) / 2); - width: 3rem; - height: 3rem; - padding: var(--espace-s); + display: flex; + place-content: center; + place-items: center; + min-width: 2rem; + max-width: 2rem; + min-height: 2rem; + max-height: 2rem; visibility: hidden; opacity: 0; border-radius: 100%; @@ -756,18 +760,22 @@ body:has(#menu-mobile:not([aria-hidden=true])) { transition: 0.2s opacity, 0.2s visibility; } .fleches-defilement__bouton:first-of-type { - left: var(--espace-l); + left: var(--espace-s); } .fleches-defilement__bouton:last-of-type { - right: var(--espace-l); + right: var(--espace-s); +} +.fleches-defilement__bouton svg { + min-width: 1.5rem; + min-height: 1.5rem; } .fleches-defilement[data-images-presentes-debut] .fleches-defilement__bouton:first-of-type { cursor: pointer; - opacity: 1; + opacity: 0.7; } .fleches-defilement[data-images-presentes-fin] .fleches-defilement__bouton:last-of-type { cursor: pointer; - opacity: 1; + opacity: 0.7; } @media (width <= 60rem) { .fleches-defilement button { @@ -807,7 +815,9 @@ body:has(#menu-mobile:not([aria-hidden=true])) { top: var(--colonne-gauche-position-haut); height: var(--colonne-gauche-photo-hauteur); } -.photos-produit .colonne.colonne-gauche figure, .photos-produit .colonne.colonne-gauche picture, .photos-produit .colonne.colonne-gauche img { +.photos-produit .colonne.colonne-gauche figure, +.photos-produit .colonne.colonne-gauche picture, +.photos-produit .colonne.colonne-gauche img { height: 100%; } .photos-produit .colonne.colonne-droite img { @@ -889,7 +899,6 @@ body:has(#menu-mobile:not([aria-hidden=true])) { display: flex; flex-flow: column nowrap; row-gap: var(--espace-xl); - padding: var(--espace-m); } .grille-produits article figure a { position: relative; @@ -950,6 +959,7 @@ body:has(#menu-mobile:not([aria-hidden=true])) { display: flex; flex-flow: row nowrap; justify-content: space-between; + padding: var(--espace-m); margin-bottom: var(--espace-xl); } .grille-produits article figure figcaption h3 { diff --git a/web/app/themes/haiku-atelier-2024/assets/css/main.css.map b/web/app/themes/haiku-atelier-2024/assets/css/main.css.map index bdc94430..1c37c39c 100644 --- a/web/app/themes/haiku-atelier-2024/assets/css/main.css.map +++ b/web/app/themes/haiku-atelier-2024/assets/css/main.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../src/sass/base/polices/_lato.scss","../../src/sass/base/polices/_myriad.scss","../../src/sass/abstracts/_variables.scss","../../src/sass/base/_base.scss","../../src/sass/base/_typographie.scss","../../src/sass/base/elements/_boutons.scss","../../src/sass/base/elements/_formulaires.scss","../../src/sass/base/elements/_images.scss","../../src/sass/base/elements/_liens.scss","../../src/sass/base/elements/_listes.scss","../../src/sass/layouts/_menu-mobile.scss","../../src/sass/layouts/_en-tete.scss","../../src/sass/layouts/_menu-categories-produits.scss","../../src/sass/layouts/_colonnes-photos.scss","../../src/sass/layouts/_grille-produits.scss","../../src/sass/layouts/_informations-produit.scss","../../src/sass/layouts/_produits-similaires.scss","../../src/sass/layouts/_pied-de-page.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EACA;EACA;EACA,KACE;EAQF,eACE;;AAmBJ;EACE;EACA;EACA;EACA;EACA,KACE;EAQF,eACE;;ACjDJ;EACE;EACA;EACA;EACA;EACA;EACA,KACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA,KACE;;ACjBJ;AACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;AAEA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;AAAA;AAAA;EAGA;AAAA;AAAA;AAAA;AAKA;EACA;EACA;EACA;EACA;EACA;;;AC7CF;AAAA;AAAA;AAGA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAIA;EACE;EACA;;;AAGF;AAAA;AAAA;AAGA;EACE;;;AAGF;AAAA;AAAA;AAGA;EACE;;;AAGF;AACA;EACE;;;AAGF;AACA;EACE;;;AAGF;AAAA;AAAA;AAGA;EACE;IACE;IACA;IACA;;;AChEJ;AAAA;AAAA;AAAA;AAIA;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AC1BA;AAAA;AAAA;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;IACE;IACA;;;AAKN;EACE;EAEA;;AAIF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAKN;EACE;EACA;;AAIA;EADF;IAEI;;;;AC9DN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EAEA;;;AAKF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;;AAQJ;EACE;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;AAwBA;AAAA;AAAA;;AAtBA;EACE;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;IACE;;;AAKN;EACE;;AAMF;EACE;EACA;;AAGF;EACE;IACE;;;;AAMJ;EACE;;AAGF;EACE;IACE;;;;ACpGN;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;EACE;EACA;;;ACZF;AAAA;AAAA;AAAA;AAAA;AAKA;AACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA,YACE,uIAM4B;EAE9B;AAEA;AAKA;AA8BA;AAiBA;;AAnDA;EACE;;AAIF;AACE;EACA;EACA;AAEA;EACA;EAEA;EACA;AAEA;AAKA;AAKA;;AATA;EACE;;AAIF;EACE;;AAIF;EACE;IACE;;;AAMN;EACE;;AAEA;EACE;EACA;;AAGF;EACE;IACE;IACA;;;AAOJ;EACE;IACE;;;;ACjFR;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAMA;AACE;EACA;AAEA;EACA;AAEA;EACA;;AAEA;EACE;EACA,qLAEkE;;;AC3BxE;EACE;EACA;;;AAGF;EAEE;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;;AAOV;EArEF;IAsEI;;;;AAIJ;EACE;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;IACE;;;AC5FJ;EAEE;EACA;EAGA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAeA;;AAbA;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;EACE;EACA;EACA;EACA;EACA;;AAYF;AACE;EACA;EACA;EACA;AAEA;EACA;;AAEA;EACE;EACA,yFAC2C;EAE3C;;AAGF;EACE;;AAIF;EACE;IACE;;;AAOJ;EADF;IAEI;;;AAKN;EACE;EACA;EACA;EACA;EACA;AAaA;AAAA;AAAA;;AAXA;EACE;;AAGA;EACE;EACA;EACA;;AAOJ;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;;ACpIR;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACE;EACA;EAGA;EACA;EAIA;EACA;AAuCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AApCE;EACE;;AAKF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAIF;EApBF;IAqBI;;;AAWJ;EACE;EACA,uBACE;EAEF;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAgBA;AAAA;AAAA;AAAA;AAAA;;AAbE;EACE;EACA;EACA;;AAEA;EACE;IACE;;;AAWR;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;IACE;IACA;;;AAMR;EA7DF;IA8DI;IAEA;IACA;IACA;;EAEA;IACE;IACA;;EAEA;IACE;IACA;;;AAMN;EAhFF;IAiFI;IACA;IACA;;EAEA;IACE;IACA;;;;ACpJR;EAEE;EAEA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAKF;EACE;EACA;;AAKF;EACE;EACA;;AAIJ;EACE;IACE;;;;AAKN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EAEE;EAGA;EACA;AAAA;AAAA;EAGA;EAGA;EAEA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGA;EACE;;AAKF;EACE;EACA;;AAIF;EACE;EACA;;AAMN;EApDF;IAqDI;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;;EAEA;IACE;;EAIJ;IACE;;EAEA;IACE;IACA;;EAEA;IACE;;;;AC1JZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;EAEE;EACA;EACA;EACA;EAEA;EACA;EACA,uBACE;EAEF;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EAEI;IACE;IACA;IACA;;;AAMR;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAMR;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;IACE;;EAEA;IACE;;;;AAMR;EACE;IACE;;;AClJJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EAEE;EACA;EAGA;EACA;EAEA;EACA;EACA;EACA;EACA;AA8HA;;AA5HA;EACE;EACA;EACA;EACA;EACA;AAIA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;IACE;;;AAQR;EACE;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMA;EACE;EACA;EACA;EACA;AAEA;AA2BA;;AA1BA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;IACE;;;AAKN;EACE;;AAIF;EACE;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EAEI;IACE;IACA;;;AAKN;EAEI;IACE;IACA;;;AAOV;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAIE;EACE;IACE;;;AAQV;EA5QF;IA6QI;;EAEA;IACE;IACA;IACA;IACA;IACA;;;AAKJ;EAzRF;IA0RI;IACA;IAEA;IACA;IACA;IACA;IACA;;EAEA;IACE;;;;AC3SN;EAEE;EACA;EAEA;EACA;EACA,qBACE;EAEF;EACA;EACA;EACA;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EAEI;IACE;IACA;IACA;;;AAMR;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAMR;EACE;IACE;;EAEA;IACE;;;;ACjHV;AACE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA","file":"main.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../src/sass/base/polices/_lato.scss","../../src/sass/base/polices/_myriad.scss","../../src/sass/abstracts/_variables.scss","../../src/sass/base/_base.scss","../../src/sass/base/_typographie.scss","../../src/sass/base/elements/_boutons.scss","../../src/sass/base/elements/_formulaires.scss","../../src/sass/base/elements/_images.scss","../../src/sass/base/elements/_liens.scss","../../src/sass/base/elements/_listes.scss","../../src/sass/layouts/_menu-mobile.scss","../../src/sass/layouts/_en-tete.scss","../../src/sass/layouts/_menu-categories-produits.scss","../../src/sass/layouts/_colonnes-photos.scss","../../src/sass/layouts/_grille-produits.scss","../../src/sass/layouts/_informations-produit.scss","../../src/sass/layouts/_produits-similaires.scss","../../src/sass/layouts/_pied-de-page.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EACA;EACA;EACA,KACE;EAQF,eACE;;AAmBJ;EACE;EACA;EACA;EACA;EACA,KACE;EAQF,eACE;;ACjDJ;EACE;EACA;EACA;EACA;EACA;EACA,KACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA,KACE;;ACjBJ;AACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;AAEA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;AAAA;AAAA;EAGA;AAAA;AAAA;AAAA;AAKA;EACA;EACA;EACA;EACA;EACA;;;AC7CF;AAAA;AAAA;AAGA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAIA;EACE;EACA;;;AAGF;AAAA;AAAA;AAGA;EACE;;;AAGF;AAAA;AAAA;AAGA;EACE;;;AAGF;AACA;EACE;;;AAGF;AACA;EACE;;;AAGF;AAAA;AAAA;AAGA;EACE;IACE;IACA;IACA;;;AChEJ;AAAA;AAAA;AAAA;AAIA;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AC1BA;AAAA;AAAA;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;IACE;IACA;;;AAKN;EACE;EAEA;;AAIF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAKN;EACE;EACA;;AAIA;EADF;IAEI;;;;AC9DN;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EAEA;;;AAKF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;;AAQJ;EACE;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;AAwBA;AAAA;AAAA;;AAtBA;EACE;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;IACE;;;AAKN;EACE;;AAMF;EACE;EACA;;AAGF;EACE;IACE;;;;AAMJ;EACE;;AAGF;EACE;IACE;;;;ACpGN;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;EACE;EACA;;;ACZF;AAAA;AAAA;AAAA;AAAA;AAKA;AACE;EACA;EAEA;EACA;EACA;EACA;EACA;EACA,YACE,uIAM4B;EAE9B;AAEA;AAKA;AA8BA;AAiBA;;AAnDA;EACE;;AAIF;AACE;EACA;EACA;AAEA;EACA;EAEA;EACA;AAEA;AAKA;AAKA;;AATA;EACE;;AAIF;EACE;;AAIF;EACE;IACE;;;AAMN;EACE;;AAEA;EACE;EACA;;AAGF;EACE;IACE;IACA;;;AAOJ;EACE;IACE;;;;ACjFR;AAAA;AAAA;AAAA;AAAA;AAKA;EACE;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAMA;AACE;EACA;AAEA;EACA;AAEA;EACA;;AAEA;EACE;EACA,qLAEkE;;;AC3BxE;EACE;EACA;;;AAGF;EAEE;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;;AAOV;EArEF;IAsEI;;;;AAIJ;EACE;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;IACE;;;AC5FJ;EAEE;EACA;EAGA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAeA;;AAbA;EACE;;AAEA;EACE;;AAGF;EACE;EACA;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;AAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AARA;EACE;EACA;EACA;EACA;EACA;;AAYF;AACE;EACA;EACA;EACA;AAEA;EACA;;AAEA;EACE;EACA,yFAC2C;EAE3C;;AAGF;EACE;;AAIF;EACE;IACE;;;AAOJ;EADF;IAEI;;;AAKN;EACE;EACA;EACA;EACA;EACA;AAaA;AAAA;AAAA;;AAXA;EACE;;AAGA;EACE;EACA;EACA;;AAOJ;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;;ACpIR;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACE;EACA;EAGA;EACA;EAIA;EACA;AAuCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AApCE;EACE;;AAKF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAIF;EApBF;IAqBI;;;AAWJ;EACE;EACA,uBACE;EAEF;EACA;AAEA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAgBA;AAAA;AAAA;AAAA;AAAA;;AAbE;EACE;EACA;EACA;;AAEA;EACE;IACE;;;AAWR;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;IACE;IACA;;;AAMR;EA7DF;IA8DI;IAEA;IACA;IACA;;EAEA;IACE;IACA;;EAEA;IACE;IACA;;;AAMN;EAhFF;IAiFI;IACA;IACA;;EAEA;IACE;IACA;;;;ACpJR;EAEE;EAEA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAKF;EACE;EACA;;AAKF;EACE;EACA;;AAIJ;EACE;IACE;;;;AAKN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EAEE;EAGA;EACA;AAAA;AAAA;EAGA;EAGA;EAEA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGA;AAAA;AAAA;EAGE;;AAKF;EACE;EACA;;AAIF;EACE;EACA;;AAMN;EAtDF;IAuDI;IACA;IACA;IACA;IACA;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;IACA;;EAEA;IACE;;EAGF;IACE;IACA;;EAEA;IACE;;EAIJ;IACE;;EAEA;IACE;IACA;;EAEA;IACE;;;;ACvKZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;EAEE;EACA;EACA;EACA;EAEA;EACA;EACA,uBACE;EAEF;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;;AAEA;EAEI;IACE;IACA;IACA;;;AAMR;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAMR;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;IACE;;EAEA;IACE;;;;AAMR;EACE;IACE;;;AClJJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EAEE;EACA;EAGA;EACA;EAEA;EACA;EACA;EACA;EACA;AA8HA;;AA5HA;EACE;EACA;EACA;EACA;EACA;AAIA;AAAA;AAAA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;IACE;;;AAQR;EACE;;AAMN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAMA;EACE;EACA;EACA;EACA;AAEA;AA2BA;;AA1BA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;IACE;;;AAKN;EACE;;AAIF;EACE;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EAEI;IACE;IACA;;;AAKN;EAEI;IACE;IACA;;;AAOV;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAIE;EACE;IACE;;;AAQV;EA5QF;IA6QI;;EAEA;IACE;IACA;IACA;IACA;IACA;;;AAKJ;EAzRF;IA0RI;IACA;IAEA;IACA;IACA;IACA;IACA;;EAEA;IACE;;;;AC3SN;EAEE;EACA;EAEA;EACA;EACA,qBACE;EAEF;EACA;EACA;EACA;AAEA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EAEI;IACE;IACA;IACA;;;AAMR;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAMR;EACE;IACE;;EAEA;IACE;;;;ACjHV;AACE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;EACA","file":"main.css"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/css/main.min.css b/web/app/themes/haiku-atelier-2024/assets/css/main.min.css index 281ccf99..9ece40d4 100644 --- a/web/app/themes/haiku-atelier-2024/assets/css/main.min.css +++ b/web/app/themes/haiku-atelier-2024/assets/css/main.min.css @@ -1 +1 @@ -@font-face{font-family:Lato;font-weight:100 900;font-style:normal;font-display:swap;src:url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-webfont.woff2)format("woff2")tech(variations),url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-webfont.woff2)format("woff2-variations"),url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-webfont.woff2)format("woff2"),url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-webfont.ttf)format("truetype");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lato;font-weight:100 900;font-style:italic;font-display:swap;src:url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-italic-webfont.woff2)format("woff2")tech(variations),url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-italic-webfont.woff2)format("woff2-variations"),url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-italic-webfont.woff2)format("woff2"),url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-italic-webfont.ttf)format("truetype");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Myriad;font-weight:300 900;font-style:normal;font-display:swap;font-stretch:70% 110%;src:url(/app/themes/haiku-atelier-2024/assets/fonts/myriad/myriad-variable.woff2)format("woff2"),url(/app/themes/haiku-atelier-2024/assets/fonts/myriad/myriad-variable.ttf)format("truetype")}@font-face{font-family:Myriad;font-weight:300 900;font-style:italic;font-display:swap;font-stretch:70% 110%;src:url(/app/themes/haiku-atelier-2024/assets/fonts/myriad/myriad-variable-italic.woff2)format("woff2"),url(/app/themes/haiku-atelier-2024/assets/fonts/myriad/myriad-variable-italic.ttf)format("truetype")}:root{--couleur-blanc:#fff;--couleur-blanc-fond:#ffffffe6;--couleur-gris:#eceaeb;--couleur-gris-fonce:gray;--couleur-gris-fonce-fond:#808080cc;--couleur-bordeaux:#490918;--couleur-bordeaux-fond:#490918cc;--couleur-jaune:#ebffb8;--couleur-jaune-fond:#ebffb8cc;--couleur-noir:#202020;--couleur-fond:#eceaebcc;--police-lato:"Lato",sans-serif;--hauteur-ligne-classique:1.5;--hauteur-ligne-moitie:1.2;--hauteur-ligne-compacte:1.1;--hauteur-ligne-rapprochee:1;--espacement-inter-lettres-rapproche-s:-.5px;--espacement-inter-lettres-etendu-s:.5px;--espacement-inter-lettres-etendu-m:1px;--espacement-inter-lettres-etendu-l:1.5px;--espacement-inter-lettres-etendu-xl:2px;--en-tete-hauteur:61px;--menu-categories-produits-hauteur:54.39px;--pied-de-page-hauteur:calc(var(--espace-m)*2 + 3lh);--contenu-page-hauteur-minimale-sans-categories:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur));--contenu-page-hauteur-minimale-avec-categories:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--menu-categories-produits-hauteur));--espace-xs:.25rem;--espace-s:.5rem;--espace-m:1rem;--espace-l:1.25rem;--espace-xl:2rem}html{box-sizing:border-box}*,:before,:after{box-sizing:inherit;font:inherit;color:inherit;margin:0;padding:0}body{accent-color:var(--couleur-jaune);background:var(--couleur-gris)}button,input,select,textarea{font:inherit}::selection{background:var(--couleur-jaune)}[hidden]{display:none!important}[disabled]{cursor:not-allowed}@media (prefers-reduced-motion){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation-duration:0s!important}}html{font:1rem/var(--hauteur-ligne-classique)Lato;font-optical-sizing:auto;font-kerning:normal;font-variant-ligatures:common-ligatures no-discretionary-ligatures no-historical-ligatures contextual;-webkit-font-smoothing:antialiased;color:var(--couleur-noir);text-decoration-skip-ink:auto;text-size-adjust:none;text-rendering:geometricprecision;letter-spacing:var(--espacement-inter-lettres-etendu-s)}strong{font-weight:600}em{font-style:italic}button{all:initial;cursor:pointer;box-sizing:border-box;text-align:center;letter-spacing:inherit;outline:2px solid #0000;font-family:Lato;transition:background .2s,color .2s}button:not[disabled]:focus-visible{z-index:5;outline:2px solid var(--couleur-noir)}button:not[disabled]:active{color:var(--couleur-blanc)!important;background:var(--couleur-noir)!important}@media (hover:hover){button:not[disabled]:hover{color:var(--couleur-noir);background:var(--couleur-jaune)}}button:disabled,button[disabled]{background:repeating-conic-gradient(var(--couleur-noir)0% 25%,transparent 0% 100%)1px .5px/2px 2px;outline-color:#0000}button.bouton-case-pleine{width:100%;height:100%}button.bouton-case-pleine.bouton-blanc-sur-noir{text-transform:uppercase;letter-spacing:var(--espacement-inter-lettres-etendu-m);font-style:italic}button.bouton-case-pleine.bouton-blanc-sur-noir:focus-visible{color:var(--couleur-noir);background:var(--couleur-jaune)}button.bouton-blanc-sur-noir{color:var(--couleur-blanc);background:var(--couleur-noir)}@media (hover:hover){button.bouton-fleche{background:initial}}input,select,textarea{padding:var(--espace-xs);background:var(--couleur-gris);border:1px solid var(--couleur-noir);outline:2px solid #0000;transition:background .2s,outline .2s}input:focus-visible,input:focus-within,input:active,select:focus-visible,select:focus-within,select:active,textarea:focus-visible,textarea:focus-within,textarea:active{z-index:10;outline:2px solid var(--couleur-noir)}input:disabled,input[disabled],select:disabled,select[disabled],textarea:disabled,textarea[disabled]{background:repeating-conic-gradient(var(--couleur-noir)0% 25%,transparent 0% 100%)1px .5px/2px 2px;outline-color:#0000}input:is([type=email],[type=text],[type=tel])::placeholder,textarea::placeholder{text-transform:lowercase;letter-spacing:var(--espacement-inter-lettres-etendu-s)}input:is([type=email],[type=text],[type=tel])::selection,textarea::selection{color:var(--couleur-blanc);background:var(--couleur-noir)}input:is([type=email],[type=text],[type=tel]):user-valid,textarea:user-valid{background:var(--couleur-jaune)}input:is([type=email],[type=text],[type=tel]):user-invalid,textarea:user-invalid{background:var(--couleur-gris)}input,label,select,textarea{cursor:pointer}input[type=checkbox],input[type=radio]{width:var(--espace-l);height:var(--espace-l);padding:initial;appearance:none;border:1px solid var(--couleur-noir);transition:background .2s}input[type=checkbox]:checked,input[type=radio]:checked{background:var(--couleur-jaune)}input[type=checkbox]:checked:before,input[type=radio]:checked:before{content:"x";position:relative;bottom:.1rem;left:.35rem}@media (hover:hover){input[type=checkbox]:checked:hover,input[type=radio]:checked:hover{color:var(--couleur-noir)}}input[type=checkbox]:not(:checked):user-valid,input[type=radio]:not(:checked):user-valid{background:initial}label:has(~input[type=checkbox],~input[type=radio]),input[type=checkbox]+label,input[type=radio]+label{padding-top:1px;font-size:.9rem}@media (hover:hover){input[type=checkbox]:hover,input[type=radio]:hover{background:var(--couleur-jaune)}}textarea:focus-visible,textarea:focus-within{outline:1px solid var(--couleur-noir)}@media (hover:hover){textarea:hover{color:var(--couleur-noir)}}img,picture{max-width:100%;display:block}img{object-fit:cover;background:var(--couleur-jaune)}a{--lien-contour-couleur-focus:var(--couleur-noir);text-decoration-skip-ink:auto;outline-offset:initial;text-decoration-skip:edges;outline:1px solid #0000;text-decoration:underline #0000;transition:background .2s,border-color .2s,color .2s,font-weight .2s,outline-color .2s,letter-spacing .2s,text-decoration-color .2s}a:focus-visible{outline-color:var(--lien-contour-couleur-focus)}a.lien-bouton{--lien-bouton-marges-internes-bloc:var(--espace-xs);--lien-bouton-marges-internes-ligne:var(--espace-m);--lien-bouton-arriere-plan-couleur-survol:var(--couleur-jaune);padding:var(--lien-bouton-marges-internes-bloc)var(--lien-bouton-marges-internes-ligne);border:1px solid var(--couleur-noir)}a.lien-bouton:focus-visible{background:var(--lien-bouton-arriere-plan-couleur-survol)}a.lien-bouton:active{border-color:var(--lien-bouton-arriere-plan-couleur-survol)}@media (hover:hover){a.lien-bouton:hover{background:var(--lien-bouton-arriere-plan-couleur-survol)}}a.lien-lien{text-decoration:underline}a.lien-lien:active{text-decoration-color:var(--couleur-jaune);background:var(--couleur-jaune)}@media (hover:hover){a.lien-lien:hover{text-decoration-color:var(--couleur-jaune);background:var(--couleur-jaune)}a:not([class]):hover{text-decoration-color:var(--couleur-noir)}}ul{list-style:none}ul.avec-puce-cercle{--liste-puce-cercle-lien-marges-internes-ligne-debut:2ch;--liste-puce-cercle-puce-position-horizontale:1ch;--liste-puce-cercle-puce-taille:1.25ex}ul.avec-puce-cercle a{padding-left:var(--liste-puce-cercle-lien-marges-internes-ligne-debut);background:no-repeat var(--liste-puce-cercle-puce-position-horizontale)center/var(--liste-puce-cercle-puce-taille)url(/app/themes/haiku-atelier-2024/assets/img/icons/dot.svg)}body:has(#menu-mobile:not([aria-hidden=true])){touch-action:none;overflow:hidden}#menu-mobile{--menu-mobile-hauteur:calc(100svh - var(--en-tete-hauteur));z-index:997;inset:var(--en-tete-hauteur)0 0 0;overscroll-behavior:contain;width:100vw;height:var(--menu-mobile-hauteur);transition:display .4s;transition:display .4s allow-discrete;-webkit-overflow-scrolling:none;display:flex;position:fixed;overflow:hidden}#menu-mobile[aria-hidden=true]{animation:.4s both fade-out;display:none}#menu-mobile[aria-hidden=true] .menu-modale__fond{animation:.4s both fade-out}#menu-mobile .menu-modale__fond{z-index:998;inset:var(--en-tete-hauteur)0 0 0;height:var(--menu-mobile-hauteur);opacity:0;background-color:var(--couleur-fond);animation:.4s both fade-in;position:fixed}#menu-mobile .menu-modale__conteneur{z-index:999;width:100%;height:fit-content;padding:var(--espace-xl);opacity:0;background-color:var(--couleur-gris);border-bottom:1px solid var(--couleur-noir);flex-flow:column;animation:.4s .2s both fade-in;display:flex;position:relative}#menu-mobile .menu-modale__conteneur .menu-navigation{grid-template-columns:1fr}#menu-mobile .menu-modale__conteneur .menu-navigation ul{grid-column:initial;flex-flow:column;place-items:center}#menu-mobile .menu-modale__conteneur .menu-navigation ul>span{width:fit-content}#menu-mobile .menu-modale__conteneur .menu-navigation ul>span li a{padding-top:var(--espace-m);padding-bottom:var(--espace-m)}@media (width>=1000px){#menu-mobile{display:none}}@keyframes fade-in{to{opacity:1}}@keyframes fade-out{to{opacity:0}}@keyframes slide-in{to{transform:translateY(0)}}#en-tete{--en-tete-marges-internes-ligne:var(--espace-xl);--en-tete-marges-internes-bloc:var(--espace-m);--en-tete-section-hauteur:var(--en-tete-hauteur);--en-tete-logo-longueur:80px;z-index:60;min-width:100vw;max-width:100vw;height:var(--en-tete-hauteur);padding:var(--en-tete-marges-internes-bloc)var(--en-tete-marges-internes-ligne);background:var(--couleur-gris);border-bottom:1px solid var(--couleur-noir);flex-flow:row;justify-content:space-between;place-items:center;display:flex;position:fixed;top:0}#en-tete .logo{width:var(--en-tete-logo-longueur)}#en-tete .logo picture,#en-tete .logo img{background:0 0}#en-tete .logo button{align-content:center;display:block}#en-tete .menu-navigation{text-align:center;text-transform:lowercase;flex:1;grid-template-columns:1fr auto 1fr;font-size:1.1rem;display:grid}#en-tete .menu-navigation ul{gap:var(--espace-m);flex-flow:row;grid-column:2;justify-content:space-between;display:flex}#en-tete .menu-navigation__entree{--nav-entree-marges-internes-bloc:var(--espace-xs);--nav-entree-marges-internes-ligne:3rem;--liste-puce-cercle-lien-marges-internes-ligne-debut:calc(var(--espace-m) + 1.5ch);--liste-puce-cercle-puce-position-horizontale:3.5ch}#en-tete .menu-navigation__entree a{padding:var(--nav-entree-marges-internes-bloc)var(--nav-entree-marges-internes-ligne);text-align:center;display:inline-block}#en-tete .menu-navigation__entree--courante{background:url(/app/themes/haiku-atelier-2024/assets/img/icons/cloud.svg) 50%/auto 90% no-repeat}@media (hover:hover){#en-tete .menu-navigation__entree:hover{background:url(/app/themes/haiku-atelier-2024/assets/img/icons/cloud.svg) 50%/auto 90% no-repeat}}@media (width<=1000px){#en-tete .menu-navigation#menu-navigation-en-tete{display:none}}#en-tete .compte-panier{text-align:center;flex-flow:row;place-items:center;gap:1rem;display:flex}#en-tete .compte-panier[disabled]{background:repeating-conic-gradient(var(--couleur-noir)0% 25%,transparent 0% 100%)1px .5px/2px 2px}#en-tete .compte-panier[disabled] a:hover,#en-tete .compte-panier[disabled] a:active,#en-tete .compte-panier[disabled] a:focus-within{background:initial;border:1px solid var(--couleur-noir);outline:1px solid #0000}#en-tete .compte-panier a{text-transform:lowercase;min-width:10ch;font-size:1.1rem}#en-tete .compte-panier a.lien-compte{border-color:#0000}#en-tete .compte-panier a[data-contient-articles=true]{background:var(--couleur-jaune)}#menu-categories-produits{--menu-entree-longueur-minimale:13ch;--menu-section-marges-bloc-debut:var(--en-tete-hauteur);--menu-entree-marges-internes-ligne:var(--espace-m);margin-top:var(--menu-section-marges-bloc-debut);position:relative}#menu-categories-produits[data-entrees-presentes-debut] svg:first-of-type,#menu-categories-produits[data-entrees-presentes-fin] svg:last-of-type{opacity:1}#menu-categories-produits svg{pointer-events:none;opacity:0;mix-blend-mode:exclusion;width:.8rem;height:.8rem;shape-rendering:geometricprecision;transition:opacity .2s;position:absolute;bottom:calc(17.59px - .35rem)}#menu-categories-produits svg:first-of-type{left:var(--espace-xs)}#menu-categories-produits svg:last-of-type{right:var(--espace-xs)}@media (width>600px){#menu-categories-produits svg{visibility:hidden}}#menu-categories-produits ul{grid-template-columns:repeat(auto-fit,minmax(var(--menu-entree-longueur-minimale),1fr));place-items:center;gap:1px;display:grid}#menu-categories-produits ul li{width:100%;color:var(--couleur-gris);text-align:center;text-transform:uppercase;letter-spacing:var(--espacement-inter-lettres-etendu-m);background:var(--couleur-noir);font-style:italic;font-weight:450}#menu-categories-produits ul li.categorie-courante a{color:var(--couleur-noir);background:var(--couleur-jaune);font-weight:600}@media (hover:hover){#menu-categories-produits ul li.categorie-courante a:hover{color:var(--couleur-noir)}}#menu-categories-produits ul li a{width:inherit;padding:var(--menu-entree-marges-internes-ligne)0;outline:initial;text-decoration:none;display:inline-block}#menu-categories-produits ul li a:focus-visible{color:var(--couleur-jaune);outline:initial}@media (hover:hover){#menu-categories-produits ul li a:hover{color:var(--couleur-noir);background:var(--couleur-jaune)}}@media (width<=1000px){#menu-categories-produits ul{--menu-entree-marges-internes-ligne:var(--espace-s);flex-flow:wrap;font-size:.8rem;display:flex}#menu-categories-produits ul li{flex-grow:1;width:min(140px,100%)}#menu-categories-produits ul li a{border:initial;width:100%}}@media (width<=600px){#menu-categories-produits ul{scrollbar-width:none;flex-flow:row;overflow-x:scroll}#menu-categories-produits ul li{width:initial;min-width:140px}}.fleches-defilement{--position-y-fleches:calc(100svh - var(--menu-categories-produits-hauteur));pointer-events:none;width:100%;height:calc(100svh - var(--en-tete-hauteur) - 63px);position:absolute}.fleches-defilement__bouton{cursor:initial;z-index:5;bottom:calc(var(--position-y-fleches)/2 - var(--espace-l)/2);width:3rem;height:3rem;padding:var(--espace-s);visibility:hidden;opacity:0;mix-blend-mode:difference;shape-rendering:geometricprecision;border-radius:100%;transition:opacity .2s,visibility .2s;position:absolute}.fleches-defilement__bouton:first-of-type{left:var(--espace-l)}.fleches-defilement__bouton:last-of-type{right:var(--espace-l)}.fleches-defilement[data-images-presentes-debut] .fleches-defilement__bouton:first-of-type,.fleches-defilement[data-images-presentes-fin] .fleches-defilement__bouton:last-of-type{cursor:pointer;opacity:1}@media (width<=60rem){.fleches-defilement button{visibility:visible}}.photos-produit{--colonne-gauche-position-haut:var(--menu-categories-produits-hauteur);--colonne-gauche-photo-hauteur:calc(100svh - var(--menu-categories-produits-hauteur));--colonne-droite-photo-hauteur-minimale:calc(100svh + var(--en-tete-hauteur) + var(--menu-categories-produits-hauteur));--colonne-photo-longueur-minimale:30rem;--section-marges-externes-bloc-fin:1rem;flex-flow:row;max-width:100%;display:flex;position:relative}.photos-produit .colonne{width:min(var(--colonne-photo-longueur-minimale),100%);flex-flow:column;flex-grow:1;display:flex;position:relative}.photos-produit .colonne.colonne-gauche{top:var(--colonne-gauche-position-haut);height:var(--colonne-gauche-photo-hauteur);position:sticky}.photos-produit .colonne.colonne-gauche figure,.photos-produit .colonne.colonne-gauche picture,.photos-produit .colonne.colonne-gauche img{height:100%}.photos-produit .colonne.colonne-droite img{width:100%;max-height:var(--colonne-droite-photo-hauteur-minimale)}.photos-produit .colonne.colonne-droite figure picture img:only-child{min-height:var(--colonne-droite-photo-hauteur-minimale);max-height:var(--colonne-droite-photo-hauteur-minimale)}@media (width<=60rem){.photos-produit{scroll-behavior:smooth;scrollbar-width:none;scroll-snap-type:x mandatory;width:fit-content;max-width:initial;flex-flow:row;overflow-x:scroll}.photos-produit::-webkit-scrollbar{display:none}.photos-produit .colonne{scroll-snap-type:x mandatory;width:100%;min-width:100%}.photos-produit .colonne figure{scroll-snap-align:none center}.photos-produit .colonne.colonne-gauche{position:initial;height:initial}.photos-produit .colonne.colonne-gauche img{max-height:calc(100svh - var(--en-tete-hauteur) - 63px)}.photos-produit .colonne.colonne-droite{flex-flow:row}.photos-produit .colonne.colonne-droite figure{flex-grow:1;min-width:100%}.photos-produit .colonne.colonne-droite figure img{max-height:calc(100svh - var(--en-tete-hauteur) - 63px)}}.grille-produits{--grille-produits-hauteur-minimale:var(--contenu-page-hauteur-minimale-avec-categories);--aucun-produit-hauteur:var(--contenu-page-hauteur-minimale-avec-categories);--carte-produit-longueur-minimale:448px;--carte-produit-longueur-maximale:1000px;grid-auto-rows:1fr;grid-template-columns:repeat(auto-fit,minmax(var(--carte-produit-longueur-minimale),1fr));min-height:var(--grille-produits-hauteur-minimale);gap:1px;display:grid}.grille-produits article{max-width:var(--carte-produit-longueur-maximale);box-shadow:0 0 0 1px var(--couleur-noir)}.grille-produits article figure{row-gap:var(--espace-xl);padding:var(--espace-m);flex-flow:column;display:flex}.grille-produits article figure a{position:relative}@media (hover:hover){.grille-produits article figure a:hover .produit__illustration__survol{visibility:visible;opacity:1;transition:opacity .3s,visibility .3s}}.grille-produits article figure img{position:inherit;aspect-ratio:9/16;object-fit:cover;background:0 0;width:100%;max-height:70vh}.grille-produits article figure .produit__illustration__principale{display:block}.grille-produits article figure .produit__illustration__principale:before{content:"";z-index:-1;opacity:0;filter:opacity(20%);background-image:url(/app/themes/haiku-atelier-2024/assets/img/icons/cloud-gris.svg);background-position:50%;background-repeat:no-repeat;background-size:50%;width:100%;height:100%;animation:1.5s linear .5s infinite alternate both test;position:absolute;top:0;left:0}.grille-produits article figure .produit__illustration__principale img{opacity:0;transition:opacity 1s}.grille-produits article figure .produit__illustration__survol{visibility:hidden;opacity:0;width:100%;height:100%;transition:opacity .15s,visibility .15s;display:block;position:absolute;top:0;left:0}.grille-produits article figure .produit__illustration__survol img{background:var(--couleur-fond)}.grille-produits article figure figcaption{margin-bottom:var(--espace-xl);flex-flow:row;justify-content:space-between;display:flex}.grille-produits article figure figcaption h3{letter-spacing:var(--espacement-inter-lettres-etendu-m);font-style:italic}.grille-produits article figure figcaption p{letter-spacing:var(--espacement-inter-lettres-rapproche-s);font-weight:500}.grille-produits__aucun-produit{min-height:var(--aucun-produit-hauteur);text-align:center;grid-column:span 3;align-content:center}.grille-produits__aucun-produit p+p{margin-top:var(--espace-l);font-size:1.25rem}@media (width<=700px){.grille-produits{grid-template-columns:100%}.grille-produits article figure img{max-height:50svh}}@keyframes test{to{opacity:1}}.informations-produit{--boite-position-basse:var(--espace-m);--boite-longueur:70ch;--section-marges-internes:var(--espace-m);--onglet-marges-internes:var(--espace-xl);bottom:var(--boite-position-basse);width:0;height:0;position:sticky;overflow:visible}.informations-produit__conteneur{transform:translate(calc(50vw - var(--boite-longueur)/2),-100%);width:var(--boite-longueur);max-width:var(--boite-longueur);display:grid;position:relative}.informations-produit__conteneur>section{height:100%;padding:var(--section-marges-internes);background:var(--couleur-blanc-fond);flex-flow:row;display:flex}.informations-produit__conteneur>section+section{border-top:1px solid var(--couleur-noir)}.informations-produit .onglets-details-produit{padding:initial;grid-template-rows:auto min-content;grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.informations-produit .onglets-details-produit>section{width:100%;padding:var(--onglet-marges-internes);visibility:visible;opacity:1;background:inherit;border-color:var(--couleur-noir);border-style:solid;border-width:1px 1px 0;grid-column:span 3;transition:opacity .2s,visibility .2s;position:absolute;top:0;left:0;overflow-y:auto;transform:translateY(-100%)}.informations-produit .onglets-details-produit>section[hidden]{visibility:hidden;opacity:0;display:initial!important}.informations-produit .onglets-details-produit>section ul{list-style:inside}.informations-produit .onglets-details-produit>section a{text-decoration-color:var(--couleur-noir)}.informations-produit .onglets-details-produit>section>*+*{margin-top:1rem}.informations-produit .onglets-details-produit>ul{text-align:center;text-transform:lowercase;grid-area:2/span 3;grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.informations-produit .onglets-details-produit>ul li{width:100%}.informations-produit .onglets-details-produit>ul li:first-of-type a{border-right-color:#0000}.informations-produit .onglets-details-produit>ul li:last-of-type a{border-left-color:#0000}.informations-produit .onglets-details-produit>ul li a{width:100%;height:100%;padding:var(--espace-xs)0;text-decoration:initial;border-top:1px solid var(--couleur-noir);border-right:1px solid var(--couleur-noir);border-left:1px solid var(--couleur-noir);display:inline-block}.informations-produit .onglets-details-produit>ul li a[aria-selected=true]{border-top-color:#0000;font-weight:600}.informations-produit .onglets-details-produit>ul li a:focus-visible{outline:2px solid var(--couleur-noir);outline-offset:-2px}@media (hover:hover){.informations-produit .onglets-details-produit>ul li a:hover{font-weight:600}}.informations-produit .onglets-details-produit:has(section:not([hidden]))>ul li a:not([aria-selected=true]){border-top-color:var(--couleur-noir)}.informations-produit .selecteur-produit{column-gap:var(--espace-xl);font-size:1.25rem;font-style:italic;font-weight:500;line-height:var(--hauteur-ligne-compacte);border:1px solid var(--couleur-noir);flex-flow:row;justify-content:space-between;place-items:center;display:flex}.informations-produit .selecteur-produit__selection-variation{text-transform:lowercase;place-items:center;font-weight:400;display:flex}.informations-produit .selecteur-produit__selection-variation label{height:100%;margin-right:var(--espace-s);font-size:1rem}.informations-produit .selecteur-produit__selection-variation select{padding:var(--espace-xs)var(--espace-l);text-align:center;letter-spacing:initial;appearance:none;background:var(--couleur-fond);border:1px solid var(--couleur-noir);position:relative}@supports selector(:user-valid){.informations-produit .selecteur-produit__selection-variation select:user-valid{background:var(--couleur-jaune-fond)}}.informations-produit .selecteur-produit__selection-variation option{background:var(--couleur-fond)}.informations-produit .selecteur-produit__selection-variation__selecteurs{position:relative}.informations-produit .selecteur-produit__selection-variation__selecteurs:after{pointer-events:none;content:" ";text-align:center;visibility:visible;opacity:1;background:url(/app/themes/haiku-atelier-2024/assets/img/icons/arrow.svg) no-repeat;width:.9rem;height:.9rem;transition:opacity .2s,visibility .2s;display:inline-block;position:absolute;top:10px;right:.4rem}@supports not selector(:user-valid){.informations-produit .selecteur-produit__selection-variation__selecteurs:has(select:valid):after{visibility:hidden;opacity:0}}@supports selector(:user-valid){.informations-produit .selecteur-produit__selection-variation__selecteurs:has(select:user-valid):after{visibility:hidden;opacity:0}}.informations-produit .selecteur-produit__prix{font-style:initial}.informations-produit .actions-produit{padding:initial;background:var(--couleur-jaune);border:1px solid var(--couleur-noir);border-top:initial;transition:background .2s;overflow:hidden}.informations-produit .actions-produit:has(button[disabled]){background:var(--couleur-fond)}.informations-produit .actions-produit button{height:initial;padding:var(--section-marges-internes);text-transform:uppercase;font-style:italic;transition:background .2s,font-weight .2s}@media (hover:hover){.informations-produit .actions-produit button:not([disabled]):hover{font-weight:600}}@media (width<=800px){.informations-produit{width:100%}.informations-produit__conteneur{width:inherit;max-width:initial;border-right:initial;border-left:initial;transform:translateY(-100%)}}@media (width<=700px){.informations-produit{--section-marges-internes:var(--espace-l);--onglet-marges-internes:var(--espace-l);bottom:var(--espace-xl);width:min(var(--boite-longueur),100%);height:initial;margin:auto;position:relative}.informations-produit__conteneur{transform:initial}}.produits-similaires{--carte-produit-longueur-minimale:448px;--carte-produit-longueur-maximale:1000px;margin-top:var(--espace-m);grid-template-rows:1fr auto;grid-template-columns:repeat(3,1fr);grid-template-areas:"en-tete en-tete en-tete""produits produits produits";place-items:center;display:grid;position:relative}.produits-similaires header{z-index:10;top:calc(1lh + var(--espace-l) + var(--espace-m));width:100%;padding:var(--espace-l)0 var(--espace-m);color:var(--couleur-blanc);text-align:center;background:var(--couleur-noir);grid-area:en-tete;position:sticky}.produits-similaires header h2{font-style:italic;line-height:var(--hauteur-ligne-rapprochee);text-transform:uppercase;letter-spacing:var(--espacement-inter-lettres-etendu-m)}.produits-similaires .grille-produits-similaires{grid-area:produits;grid-auto-rows:1fr;grid-template-columns:repeat(auto-fit,minmax(var(--carte-produit-longueur-minimale),1fr));gap:1px;width:100%;display:grid}.produits-similaires .grille-produits-similaires article{max-width:var(--carte-produit-longueur-maximale);box-shadow:0 0 0 1px var(--couleur-noir)}.produits-similaires .grille-produits-similaires article figure{row-gap:var(--espace-xl);padding:var(--espace-m);flex-flow:column;display:flex}.produits-similaires .grille-produits-similaires article figure a{position:relative}@media (hover:hover){.produits-similaires .grille-produits-similaires article figure a:hover .produit__illustration__survol{visibility:visible;opacity:1;transition:opacity .3s,visibility .3s}}.produits-similaires .grille-produits-similaires article figure .produit__illustration__principale{display:block}.produits-similaires .grille-produits-similaires article figure .produit__illustration__survol{visibility:hidden;opacity:0;width:100%;height:100%;transition:opacity .15s,visibility .15s;display:block;position:absolute;top:0;left:0}.produits-similaires .grille-produits-similaires article figure img{aspect-ratio:9/16;object-fit:cover;width:100%;max-height:70svh}.produits-similaires .grille-produits-similaires article figure figcaption{margin-bottom:var(--espace-xl);flex-flow:row;justify-content:space-between;display:flex}.produits-similaires .grille-produits-similaires article figure figcaption h3{letter-spacing:var(--espacement-inter-lettres-etendu-m);font-style:italic}.produits-similaires .grille-produits-similaires article figure figcaption p{letter-spacing:var(--espacement-inter-lettres-rapproche-s);font-weight:500}@media (width<=700px){.produits-similaires .grille-produits-similaires{grid-template-columns:100%}.produits-similaires .grille-produits-similaires article figure img{max-height:50svh}}#pied-de-page{--pied-de-page-marges-internes-bloc:var(--espace-m);--pied-de-page-marges-internes-ligne:var(--espace-xl);max-width:100vw;height:var(--pied-de-page-hauteur);padding:var(--pied-de-page-marges-internes-bloc)var(--pied-de-page-marges-internes-ligne);background:var(--couleur-jaune);border-top:1px solid var(--couleur-noir);grid-template-columns:1fr 1fr;place-items:center;display:grid}#pied-de-page .zone-menu-navigation-secondaire{text-transform:lowercase;justify-self:start;width:100%;height:100%}#pied-de-page .zone-liens-reseaux-sociaux{text-align:right;justify-items:end;width:100%;height:100%} \ No newline at end of file +@font-face{font-family:Lato;font-weight:100 900;font-style:normal;font-display:swap;src:url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-webfont.woff2)format("woff2")tech(variations),url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-webfont.woff2)format("woff2-variations"),url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-webfont.woff2)format("woff2"),url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-webfont.ttf)format("truetype");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lato;font-weight:100 900;font-style:italic;font-display:swap;src:url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-italic-webfont.woff2)format("woff2")tech(variations),url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-italic-webfont.woff2)format("woff2-variations"),url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-italic-webfont.woff2)format("woff2"),url(/app/themes/haiku-atelier-2024/assets/fonts/lato/lato-variable-italic-webfont.ttf)format("truetype");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Myriad;font-weight:300 900;font-style:normal;font-display:swap;font-stretch:70% 110%;src:url(/app/themes/haiku-atelier-2024/assets/fonts/myriad/myriad-variable.woff2)format("woff2"),url(/app/themes/haiku-atelier-2024/assets/fonts/myriad/myriad-variable.ttf)format("truetype")}@font-face{font-family:Myriad;font-weight:300 900;font-style:italic;font-display:swap;font-stretch:70% 110%;src:url(/app/themes/haiku-atelier-2024/assets/fonts/myriad/myriad-variable-italic.woff2)format("woff2"),url(/app/themes/haiku-atelier-2024/assets/fonts/myriad/myriad-variable-italic.ttf)format("truetype")}:root{--couleur-blanc:#fff;--couleur-blanc-fond:#ffffffe6;--couleur-gris:#eceaeb;--couleur-gris-fonce:gray;--couleur-gris-fonce-fond:#808080cc;--couleur-bordeaux:#490918;--couleur-bordeaux-fond:#490918cc;--couleur-jaune:#ebffb8;--couleur-jaune-fond:#ebffb8cc;--couleur-noir:#202020;--couleur-fond:#eceaebcc;--police-lato:"Lato",sans-serif;--hauteur-ligne-classique:1.5;--hauteur-ligne-moitie:1.2;--hauteur-ligne-compacte:1.1;--hauteur-ligne-rapprochee:1;--espacement-inter-lettres-rapproche-s:-.5px;--espacement-inter-lettres-etendu-s:.5px;--espacement-inter-lettres-etendu-m:1px;--espacement-inter-lettres-etendu-l:1.5px;--espacement-inter-lettres-etendu-xl:2px;--en-tete-hauteur:61px;--menu-categories-produits-hauteur:54.39px;--pied-de-page-hauteur:calc(var(--espace-m)*2 + 3lh);--contenu-page-hauteur-minimale-sans-categories:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur));--contenu-page-hauteur-minimale-avec-categories:calc(100svh - var(--en-tete-hauteur) - var(--pied-de-page-hauteur) - var(--menu-categories-produits-hauteur));--espace-xs:.25rem;--espace-s:.5rem;--espace-m:1rem;--espace-l:1.25rem;--espace-xl:2rem}html{box-sizing:border-box}*,:before,:after{box-sizing:inherit;font:inherit;color:inherit;margin:0;padding:0}body{accent-color:var(--couleur-jaune);background:var(--couleur-gris)}button,input,select,textarea{font:inherit}::selection{background:var(--couleur-jaune)}[hidden]{display:none!important}[disabled]{cursor:not-allowed}@media (prefers-reduced-motion){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation-duration:0s!important}}html{font:1rem/var(--hauteur-ligne-classique)Lato;font-optical-sizing:auto;font-kerning:normal;font-variant-ligatures:common-ligatures no-discretionary-ligatures no-historical-ligatures contextual;-webkit-font-smoothing:antialiased;color:var(--couleur-noir);text-decoration-skip-ink:auto;text-size-adjust:none;text-rendering:geometricprecision;letter-spacing:var(--espacement-inter-lettres-etendu-s)}strong{font-weight:600}em{font-style:italic}button{all:initial;cursor:pointer;box-sizing:border-box;text-align:center;letter-spacing:inherit;outline:2px solid #0000;font-family:Lato;transition:background .2s,color .2s}button:not[disabled]:focus-visible{z-index:5;outline:2px solid var(--couleur-noir)}button:not[disabled]:active{color:var(--couleur-blanc)!important;background:var(--couleur-noir)!important}@media (hover:hover){button:not[disabled]:hover{color:var(--couleur-noir);background:var(--couleur-jaune)}}button:disabled,button[disabled]{background:repeating-conic-gradient(var(--couleur-noir)0% 25%,transparent 0% 100%)1px .5px/2px 2px;outline-color:#0000}button.bouton-case-pleine{width:100%;height:100%}button.bouton-case-pleine.bouton-blanc-sur-noir{text-transform:uppercase;letter-spacing:var(--espacement-inter-lettres-etendu-m);font-style:italic}button.bouton-case-pleine.bouton-blanc-sur-noir:focus-visible{color:var(--couleur-noir);background:var(--couleur-jaune)}button.bouton-blanc-sur-noir{color:var(--couleur-blanc);background:var(--couleur-noir)}@media (hover:hover){button.bouton-fleche{background:initial}}input,select,textarea{padding:var(--espace-xs);background:var(--couleur-gris);border:1px solid var(--couleur-noir);outline:2px solid #0000;transition:background .2s,outline .2s}input:focus-visible,input:focus-within,input:active,select:focus-visible,select:focus-within,select:active,textarea:focus-visible,textarea:focus-within,textarea:active{z-index:10;outline:2px solid var(--couleur-noir)}input:disabled,input[disabled],select:disabled,select[disabled],textarea:disabled,textarea[disabled]{background:repeating-conic-gradient(var(--couleur-noir)0% 25%,transparent 0% 100%)1px .5px/2px 2px;outline-color:#0000}input:is([type=email],[type=text],[type=tel])::placeholder,textarea::placeholder{text-transform:lowercase;letter-spacing:var(--espacement-inter-lettres-etendu-s)}input:is([type=email],[type=text],[type=tel])::selection,textarea::selection{color:var(--couleur-blanc);background:var(--couleur-noir)}input:is([type=email],[type=text],[type=tel]):user-valid,textarea:user-valid{background:var(--couleur-jaune)}input:is([type=email],[type=text],[type=tel]):user-invalid,textarea:user-invalid{background:var(--couleur-gris)}input,label,select,textarea{cursor:pointer}input[type=checkbox],input[type=radio]{width:var(--espace-l);height:var(--espace-l);padding:initial;appearance:none;border:1px solid var(--couleur-noir);transition:background .2s}input[type=checkbox]:checked,input[type=radio]:checked{background:var(--couleur-jaune)}input[type=checkbox]:checked:before,input[type=radio]:checked:before{content:"x";position:relative;bottom:.1rem;left:.35rem}@media (hover:hover){input[type=checkbox]:checked:hover,input[type=radio]:checked:hover{color:var(--couleur-noir)}}input[type=checkbox]:not(:checked):user-valid,input[type=radio]:not(:checked):user-valid{background:initial}label:has(~input[type=checkbox],~input[type=radio]),input[type=checkbox]+label,input[type=radio]+label{padding-top:1px;font-size:.9rem}@media (hover:hover){input[type=checkbox]:hover,input[type=radio]:hover{background:var(--couleur-jaune)}}textarea:focus-visible,textarea:focus-within{outline:1px solid var(--couleur-noir)}@media (hover:hover){textarea:hover{color:var(--couleur-noir)}}img,picture{max-width:100%;display:block}img{object-fit:cover;background:var(--couleur-jaune)}a{--lien-contour-couleur-focus:var(--couleur-noir);text-decoration-skip-ink:auto;outline-offset:initial;text-decoration-skip:edges;outline:1px solid #0000;text-decoration:underline #0000;transition:background .2s,border-color .2s,color .2s,font-weight .2s,outline-color .2s,letter-spacing .2s,text-decoration-color .2s}a:focus-visible{outline-color:var(--lien-contour-couleur-focus)}a.lien-bouton{--lien-bouton-marges-internes-bloc:var(--espace-xs);--lien-bouton-marges-internes-ligne:var(--espace-m);--lien-bouton-arriere-plan-couleur-survol:var(--couleur-jaune);padding:var(--lien-bouton-marges-internes-bloc)var(--lien-bouton-marges-internes-ligne);border:1px solid var(--couleur-noir)}a.lien-bouton:focus-visible{background:var(--lien-bouton-arriere-plan-couleur-survol)}a.lien-bouton:active{border-color:var(--lien-bouton-arriere-plan-couleur-survol)}@media (hover:hover){a.lien-bouton:hover{background:var(--lien-bouton-arriere-plan-couleur-survol)}}a.lien-lien{text-decoration:underline}a.lien-lien:active{text-decoration-color:var(--couleur-jaune);background:var(--couleur-jaune)}@media (hover:hover){a.lien-lien:hover{text-decoration-color:var(--couleur-jaune);background:var(--couleur-jaune)}a:not([class]):hover{text-decoration-color:var(--couleur-noir)}}ul{list-style:none}ul.avec-puce-cercle{--liste-puce-cercle-lien-marges-internes-ligne-debut:2ch;--liste-puce-cercle-puce-position-horizontale:1ch;--liste-puce-cercle-puce-taille:1.25ex}ul.avec-puce-cercle a{padding-left:var(--liste-puce-cercle-lien-marges-internes-ligne-debut);background:no-repeat var(--liste-puce-cercle-puce-position-horizontale)center/var(--liste-puce-cercle-puce-taille)url(/app/themes/haiku-atelier-2024/assets/img/icons/dot.svg)}body:has(#menu-mobile:not([aria-hidden=true])){touch-action:none;overflow:hidden}#menu-mobile{--menu-mobile-hauteur:calc(100svh - var(--en-tete-hauteur));z-index:997;inset:var(--en-tete-hauteur)0 0 0;overscroll-behavior:contain;width:100vw;height:var(--menu-mobile-hauteur);transition:display .4s;transition:display .4s allow-discrete;-webkit-overflow-scrolling:none;display:flex;position:fixed;overflow:hidden}#menu-mobile[aria-hidden=true]{animation:.4s both fade-out;display:none}#menu-mobile[aria-hidden=true] .menu-modale__fond{animation:.4s both fade-out}#menu-mobile .menu-modale__fond{z-index:998;inset:var(--en-tete-hauteur)0 0 0;height:var(--menu-mobile-hauteur);opacity:0;background-color:var(--couleur-fond);animation:.4s both fade-in;position:fixed}#menu-mobile .menu-modale__conteneur{z-index:999;width:100%;height:fit-content;padding:var(--espace-xl);opacity:0;background-color:var(--couleur-gris);border-bottom:1px solid var(--couleur-noir);flex-flow:column;animation:.4s .2s both fade-in;display:flex;position:relative}#menu-mobile .menu-modale__conteneur .menu-navigation{grid-template-columns:1fr}#menu-mobile .menu-modale__conteneur .menu-navigation ul{grid-column:initial;flex-flow:column;place-items:center}#menu-mobile .menu-modale__conteneur .menu-navigation ul>span{width:fit-content}#menu-mobile .menu-modale__conteneur .menu-navigation ul>span li a{padding-top:var(--espace-m);padding-bottom:var(--espace-m)}@media (width>=1000px){#menu-mobile{display:none}}@keyframes fade-in{to{opacity:1}}@keyframes fade-out{to{opacity:0}}@keyframes slide-in{to{transform:translateY(0)}}#en-tete{--en-tete-marges-internes-ligne:var(--espace-xl);--en-tete-marges-internes-bloc:var(--espace-m);--en-tete-section-hauteur:var(--en-tete-hauteur);--en-tete-logo-longueur:80px;z-index:60;min-width:100vw;max-width:100vw;height:var(--en-tete-hauteur);padding:var(--en-tete-marges-internes-bloc)var(--en-tete-marges-internes-ligne);background:var(--couleur-gris);border-bottom:1px solid var(--couleur-noir);flex-flow:row;justify-content:space-between;place-items:center;display:flex;position:fixed;top:0}#en-tete .logo{width:var(--en-tete-logo-longueur)}#en-tete .logo picture,#en-tete .logo img{background:0 0}#en-tete .logo button{align-content:center;display:block}#en-tete .menu-navigation{text-align:center;text-transform:lowercase;flex:1;grid-template-columns:1fr auto 1fr;font-size:1.1rem;display:grid}#en-tete .menu-navigation ul{gap:var(--espace-m);flex-flow:row;grid-column:2;justify-content:space-between;display:flex}#en-tete .menu-navigation__entree{--nav-entree-marges-internes-bloc:var(--espace-xs);--nav-entree-marges-internes-ligne:3rem;--liste-puce-cercle-lien-marges-internes-ligne-debut:calc(var(--espace-m) + 1.5ch);--liste-puce-cercle-puce-position-horizontale:3.5ch}#en-tete .menu-navigation__entree a{padding:var(--nav-entree-marges-internes-bloc)var(--nav-entree-marges-internes-ligne);text-align:center;display:inline-block}#en-tete .menu-navigation__entree--courante{background:url(/app/themes/haiku-atelier-2024/assets/img/icons/cloud.svg) 50%/auto 90% no-repeat}@media (hover:hover){#en-tete .menu-navigation__entree:hover{background:url(/app/themes/haiku-atelier-2024/assets/img/icons/cloud.svg) 50%/auto 90% no-repeat}}@media (width<=1000px){#en-tete .menu-navigation#menu-navigation-en-tete{display:none}}#en-tete .compte-panier{text-align:center;flex-flow:row;place-items:center;gap:1rem;display:flex}#en-tete .compte-panier[disabled]{background:repeating-conic-gradient(var(--couleur-noir)0% 25%,transparent 0% 100%)1px .5px/2px 2px}#en-tete .compte-panier[disabled] a:hover,#en-tete .compte-panier[disabled] a:active,#en-tete .compte-panier[disabled] a:focus-within{background:initial;border:1px solid var(--couleur-noir);outline:1px solid #0000}#en-tete .compte-panier a{text-transform:lowercase;min-width:10ch;font-size:1.1rem}#en-tete .compte-panier a.lien-compte{border-color:#0000}#en-tete .compte-panier a[data-contient-articles=true]{background:var(--couleur-jaune)}#menu-categories-produits{--menu-entree-longueur-minimale:13ch;--menu-section-marges-bloc-debut:var(--en-tete-hauteur);--menu-entree-marges-internes-ligne:var(--espace-m);margin-top:var(--menu-section-marges-bloc-debut);position:relative}#menu-categories-produits[data-entrees-presentes-debut] svg:first-of-type,#menu-categories-produits[data-entrees-presentes-fin] svg:last-of-type{opacity:1}#menu-categories-produits svg{pointer-events:none;opacity:0;mix-blend-mode:exclusion;width:.8rem;height:.8rem;shape-rendering:geometricprecision;transition:opacity .2s;position:absolute;bottom:calc(17.59px - .35rem)}#menu-categories-produits svg:first-of-type{left:var(--espace-xs)}#menu-categories-produits svg:last-of-type{right:var(--espace-xs)}@media (width>600px){#menu-categories-produits svg{visibility:hidden}}#menu-categories-produits ul{grid-template-columns:repeat(auto-fit,minmax(var(--menu-entree-longueur-minimale),1fr));place-items:center;gap:1px;display:grid}#menu-categories-produits ul li{width:100%;color:var(--couleur-gris);text-align:center;text-transform:uppercase;letter-spacing:var(--espacement-inter-lettres-etendu-m);background:var(--couleur-noir);font-style:italic;font-weight:450}#menu-categories-produits ul li.categorie-courante a{color:var(--couleur-noir);background:var(--couleur-jaune);font-weight:600}@media (hover:hover){#menu-categories-produits ul li.categorie-courante a:hover{color:var(--couleur-noir)}}#menu-categories-produits ul li a{width:inherit;padding:var(--menu-entree-marges-internes-ligne)0;outline:initial;text-decoration:none;display:inline-block}#menu-categories-produits ul li a:focus-visible{color:var(--couleur-jaune);outline:initial}@media (hover:hover){#menu-categories-produits ul li a:hover{color:var(--couleur-noir);background:var(--couleur-jaune)}}@media (width<=1000px){#menu-categories-produits ul{--menu-entree-marges-internes-ligne:var(--espace-s);flex-flow:wrap;font-size:.8rem;display:flex}#menu-categories-produits ul li{flex-grow:1;width:min(140px,100%)}#menu-categories-produits ul li a{border:initial;width:100%}}@media (width<=600px){#menu-categories-produits ul{scrollbar-width:none;flex-flow:row;overflow-x:scroll}#menu-categories-produits ul li{width:initial;min-width:140px}}.fleches-defilement{--position-y-fleches:calc(100svh - var(--menu-categories-produits-hauteur));pointer-events:none;width:100%;height:calc(100svh - var(--en-tete-hauteur) - 63px);position:absolute}.fleches-defilement__bouton{cursor:initial;z-index:5;bottom:calc(var(--position-y-fleches)/2 - var(--espace-l)/2);visibility:hidden;opacity:0;mix-blend-mode:difference;min-width:2rem;max-width:2rem;min-height:2rem;max-height:2rem;shape-rendering:geometricprecision;border-radius:100%;place-content:center;place-items:center;transition:opacity .2s,visibility .2s;display:flex;position:absolute}.fleches-defilement__bouton:first-of-type{left:var(--espace-s)}.fleches-defilement__bouton:last-of-type{right:var(--espace-s)}.fleches-defilement__bouton svg{min-width:1.5rem;min-height:1.5rem}.fleches-defilement[data-images-presentes-debut] .fleches-defilement__bouton:first-of-type,.fleches-defilement[data-images-presentes-fin] .fleches-defilement__bouton:last-of-type{cursor:pointer;opacity:.7}@media (width<=60rem){.fleches-defilement button{visibility:visible}}.photos-produit{--colonne-gauche-position-haut:var(--menu-categories-produits-hauteur);--colonne-gauche-photo-hauteur:calc(100svh - var(--menu-categories-produits-hauteur));--colonne-droite-photo-hauteur-minimale:calc(100svh + var(--en-tete-hauteur) + var(--menu-categories-produits-hauteur));--colonne-photo-longueur-minimale:30rem;--section-marges-externes-bloc-fin:1rem;flex-flow:row;max-width:100%;display:flex;position:relative}.photos-produit .colonne{width:min(var(--colonne-photo-longueur-minimale),100%);flex-flow:column;flex-grow:1;display:flex;position:relative}.photos-produit .colonne.colonne-gauche{top:var(--colonne-gauche-position-haut);height:var(--colonne-gauche-photo-hauteur);position:sticky}.photos-produit .colonne.colonne-gauche figure,.photos-produit .colonne.colonne-gauche picture,.photos-produit .colonne.colonne-gauche img{height:100%}.photos-produit .colonne.colonne-droite img{width:100%;max-height:var(--colonne-droite-photo-hauteur-minimale)}.photos-produit .colonne.colonne-droite figure picture img:only-child{min-height:var(--colonne-droite-photo-hauteur-minimale);max-height:var(--colonne-droite-photo-hauteur-minimale)}@media (width<=60rem){.photos-produit{scroll-behavior:smooth;scrollbar-width:none;scroll-snap-type:x mandatory;width:fit-content;max-width:initial;flex-flow:row;overflow-x:scroll}.photos-produit::-webkit-scrollbar{display:none}.photos-produit .colonne{scroll-snap-type:x mandatory;width:100%;min-width:100%}.photos-produit .colonne figure{scroll-snap-align:none center}.photos-produit .colonne.colonne-gauche{position:initial;height:initial}.photos-produit .colonne.colonne-gauche img{max-height:calc(100svh - var(--en-tete-hauteur) - 63px)}.photos-produit .colonne.colonne-droite{flex-flow:row}.photos-produit .colonne.colonne-droite figure{flex-grow:1;min-width:100%}.photos-produit .colonne.colonne-droite figure img{max-height:calc(100svh - var(--en-tete-hauteur) - 63px)}}.grille-produits{--grille-produits-hauteur-minimale:var(--contenu-page-hauteur-minimale-avec-categories);--aucun-produit-hauteur:var(--contenu-page-hauteur-minimale-avec-categories);--carte-produit-longueur-minimale:448px;--carte-produit-longueur-maximale:1000px;grid-auto-rows:1fr;grid-template-columns:repeat(auto-fit,minmax(var(--carte-produit-longueur-minimale),1fr));min-height:var(--grille-produits-hauteur-minimale);gap:1px;display:grid}.grille-produits article{max-width:var(--carte-produit-longueur-maximale);box-shadow:0 0 0 1px var(--couleur-noir)}.grille-produits article figure{row-gap:var(--espace-xl);flex-flow:column;display:flex}.grille-produits article figure a{position:relative}@media (hover:hover){.grille-produits article figure a:hover .produit__illustration__survol{visibility:visible;opacity:1;transition:opacity .3s,visibility .3s}}.grille-produits article figure img{position:inherit;aspect-ratio:9/16;object-fit:cover;background:0 0;width:100%;max-height:70vh}.grille-produits article figure .produit__illustration__principale{display:block}.grille-produits article figure .produit__illustration__principale:before{content:"";z-index:-1;opacity:0;filter:opacity(20%);background-image:url(/app/themes/haiku-atelier-2024/assets/img/icons/cloud-gris.svg);background-position:50%;background-repeat:no-repeat;background-size:50%;width:100%;height:100%;animation:1.5s linear .5s infinite alternate both test;position:absolute;top:0;left:0}.grille-produits article figure .produit__illustration__principale img{opacity:0;transition:opacity 1s}.grille-produits article figure .produit__illustration__survol{visibility:hidden;opacity:0;width:100%;height:100%;transition:opacity .15s,visibility .15s;display:block;position:absolute;top:0;left:0}.grille-produits article figure .produit__illustration__survol img{background:var(--couleur-fond)}.grille-produits article figure figcaption{padding:var(--espace-m);margin-bottom:var(--espace-xl);flex-flow:row;justify-content:space-between;display:flex}.grille-produits article figure figcaption h3{letter-spacing:var(--espacement-inter-lettres-etendu-m);font-style:italic}.grille-produits article figure figcaption p{letter-spacing:var(--espacement-inter-lettres-rapproche-s);font-weight:500}.grille-produits__aucun-produit{min-height:var(--aucun-produit-hauteur);text-align:center;grid-column:span 3;align-content:center}.grille-produits__aucun-produit p+p{margin-top:var(--espace-l);font-size:1.25rem}@media (width<=700px){.grille-produits{grid-template-columns:100%}.grille-produits article figure img{max-height:50svh}}@keyframes test{to{opacity:1}}.informations-produit{--boite-position-basse:var(--espace-m);--boite-longueur:70ch;--section-marges-internes:var(--espace-m);--onglet-marges-internes:var(--espace-xl);bottom:var(--boite-position-basse);width:0;height:0;position:sticky;overflow:visible}.informations-produit__conteneur{transform:translate(calc(50vw - var(--boite-longueur)/2),-100%);width:var(--boite-longueur);max-width:var(--boite-longueur);display:grid;position:relative}.informations-produit__conteneur>section{height:100%;padding:var(--section-marges-internes);background:var(--couleur-blanc-fond);flex-flow:row;display:flex}.informations-produit__conteneur>section+section{border-top:1px solid var(--couleur-noir)}.informations-produit .onglets-details-produit{padding:initial;grid-template-rows:auto min-content;grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.informations-produit .onglets-details-produit>section{width:100%;padding:var(--onglet-marges-internes);visibility:visible;opacity:1;background:inherit;border-color:var(--couleur-noir);border-style:solid;border-width:1px 1px 0;grid-column:span 3;transition:opacity .2s,visibility .2s;position:absolute;top:0;left:0;overflow-y:auto;transform:translateY(-100%)}.informations-produit .onglets-details-produit>section[hidden]{visibility:hidden;opacity:0;display:initial!important}.informations-produit .onglets-details-produit>section ul{list-style:inside}.informations-produit .onglets-details-produit>section a{text-decoration-color:var(--couleur-noir)}.informations-produit .onglets-details-produit>section>*+*{margin-top:1rem}.informations-produit .onglets-details-produit>ul{text-align:center;text-transform:lowercase;grid-area:2/span 3;grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.informations-produit .onglets-details-produit>ul li{width:100%}.informations-produit .onglets-details-produit>ul li:first-of-type a{border-right-color:#0000}.informations-produit .onglets-details-produit>ul li:last-of-type a{border-left-color:#0000}.informations-produit .onglets-details-produit>ul li a{width:100%;height:100%;padding:var(--espace-xs)0;text-decoration:initial;border-top:1px solid var(--couleur-noir);border-right:1px solid var(--couleur-noir);border-left:1px solid var(--couleur-noir);display:inline-block}.informations-produit .onglets-details-produit>ul li a[aria-selected=true]{border-top-color:#0000;font-weight:600}.informations-produit .onglets-details-produit>ul li a:focus-visible{outline:2px solid var(--couleur-noir);outline-offset:-2px}@media (hover:hover){.informations-produit .onglets-details-produit>ul li a:hover{font-weight:600}}.informations-produit .onglets-details-produit:has(section:not([hidden]))>ul li a:not([aria-selected=true]){border-top-color:var(--couleur-noir)}.informations-produit .selecteur-produit{column-gap:var(--espace-xl);font-size:1.25rem;font-style:italic;font-weight:500;line-height:var(--hauteur-ligne-compacte);border:1px solid var(--couleur-noir);flex-flow:row;justify-content:space-between;place-items:center;display:flex}.informations-produit .selecteur-produit__selection-variation{text-transform:lowercase;place-items:center;font-weight:400;display:flex}.informations-produit .selecteur-produit__selection-variation label{height:100%;margin-right:var(--espace-s);font-size:1rem}.informations-produit .selecteur-produit__selection-variation select{padding:var(--espace-xs)var(--espace-l);text-align:center;letter-spacing:initial;appearance:none;background:var(--couleur-fond);border:1px solid var(--couleur-noir);position:relative}@supports selector(:user-valid){.informations-produit .selecteur-produit__selection-variation select:user-valid{background:var(--couleur-jaune-fond)}}.informations-produit .selecteur-produit__selection-variation option{background:var(--couleur-fond)}.informations-produit .selecteur-produit__selection-variation__selecteurs{position:relative}.informations-produit .selecteur-produit__selection-variation__selecteurs:after{pointer-events:none;content:" ";text-align:center;visibility:visible;opacity:1;background:url(/app/themes/haiku-atelier-2024/assets/img/icons/arrow.svg) no-repeat;width:.9rem;height:.9rem;transition:opacity .2s,visibility .2s;display:inline-block;position:absolute;top:10px;right:.4rem}@supports not selector(:user-valid){.informations-produit .selecteur-produit__selection-variation__selecteurs:has(select:valid):after{visibility:hidden;opacity:0}}@supports selector(:user-valid){.informations-produit .selecteur-produit__selection-variation__selecteurs:has(select:user-valid):after{visibility:hidden;opacity:0}}.informations-produit .selecteur-produit__prix{font-style:initial}.informations-produit .actions-produit{padding:initial;background:var(--couleur-jaune);border:1px solid var(--couleur-noir);border-top:initial;transition:background .2s;overflow:hidden}.informations-produit .actions-produit:has(button[disabled]){background:var(--couleur-fond)}.informations-produit .actions-produit button{height:initial;padding:var(--section-marges-internes);text-transform:uppercase;font-style:italic;transition:background .2s,font-weight .2s}@media (hover:hover){.informations-produit .actions-produit button:not([disabled]):hover{font-weight:600}}@media (width<=800px){.informations-produit{width:100%}.informations-produit__conteneur{width:inherit;max-width:initial;border-right:initial;border-left:initial;transform:translateY(-100%)}}@media (width<=700px){.informations-produit{--section-marges-internes:var(--espace-l);--onglet-marges-internes:var(--espace-l);bottom:var(--espace-xl);width:min(var(--boite-longueur),100%);height:initial;margin:auto;position:relative}.informations-produit__conteneur{transform:initial}}.produits-similaires{--carte-produit-longueur-minimale:448px;--carte-produit-longueur-maximale:1000px;margin-top:var(--espace-m);grid-template-rows:1fr auto;grid-template-columns:repeat(3,1fr);grid-template-areas:"en-tete en-tete en-tete""produits produits produits";place-items:center;display:grid;position:relative}.produits-similaires header{z-index:10;top:calc(1lh + var(--espace-l) + var(--espace-m));width:100%;padding:var(--espace-l)0 var(--espace-m);color:var(--couleur-blanc);text-align:center;background:var(--couleur-noir);grid-area:en-tete;position:sticky}.produits-similaires header h2{font-style:italic;line-height:var(--hauteur-ligne-rapprochee);text-transform:uppercase;letter-spacing:var(--espacement-inter-lettres-etendu-m)}.produits-similaires .grille-produits-similaires{grid-area:produits;grid-auto-rows:1fr;grid-template-columns:repeat(auto-fit,minmax(var(--carte-produit-longueur-minimale),1fr));gap:1px;width:100%;display:grid}.produits-similaires .grille-produits-similaires article{max-width:var(--carte-produit-longueur-maximale);box-shadow:0 0 0 1px var(--couleur-noir)}.produits-similaires .grille-produits-similaires article figure{row-gap:var(--espace-xl);padding:var(--espace-m);flex-flow:column;display:flex}.produits-similaires .grille-produits-similaires article figure a{position:relative}@media (hover:hover){.produits-similaires .grille-produits-similaires article figure a:hover .produit__illustration__survol{visibility:visible;opacity:1;transition:opacity .3s,visibility .3s}}.produits-similaires .grille-produits-similaires article figure .produit__illustration__principale{display:block}.produits-similaires .grille-produits-similaires article figure .produit__illustration__survol{visibility:hidden;opacity:0;width:100%;height:100%;transition:opacity .15s,visibility .15s;display:block;position:absolute;top:0;left:0}.produits-similaires .grille-produits-similaires article figure img{aspect-ratio:9/16;object-fit:cover;width:100%;max-height:70svh}.produits-similaires .grille-produits-similaires article figure figcaption{margin-bottom:var(--espace-xl);flex-flow:row;justify-content:space-between;display:flex}.produits-similaires .grille-produits-similaires article figure figcaption h3{letter-spacing:var(--espacement-inter-lettres-etendu-m);font-style:italic}.produits-similaires .grille-produits-similaires article figure figcaption p{letter-spacing:var(--espacement-inter-lettres-rapproche-s);font-weight:500}@media (width<=700px){.produits-similaires .grille-produits-similaires{grid-template-columns:100%}.produits-similaires .grille-produits-similaires article figure img{max-height:50svh}}#pied-de-page{--pied-de-page-marges-internes-bloc:var(--espace-m);--pied-de-page-marges-internes-ligne:var(--espace-xl);max-width:100vw;height:var(--pied-de-page-hauteur);padding:var(--pied-de-page-marges-internes-bloc)var(--pied-de-page-marges-internes-ligne);background:var(--couleur-jaune);border-top:1px solid var(--couleur-noir);grid-template-columns:1fr 1fr;place-items:center;display:grid}#pied-de-page .zone-menu-navigation-secondaire{text-transform:lowercase;justify-self:start;width:100%;height:100%}#pied-de-page .zone-liens-reseaux-sociaux{text-align:right;justify-items:end;width:100%;height:100%} \ No newline at end of file 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 3cb99a12..53eb98c9 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 @@ -255,6 +255,9 @@ #panneau-informations-client .panneau__formulaires .panneau__formulaires__paiement .formulaire__paiement__attente-renseignement-formulaires p + p { margin-top: 1lh; } +#panneau-informations-client .panneau__formulaires .panneau__formulaires__message { + margin: var(--espace-l) 0; +} #panneau-informations-client .formulaire { margin: auto; padding: 0 var(--espace-xl); @@ -292,7 +295,7 @@ #panneau-informations-client .formulaire label:has(+ :is(input:required, select:required)) { font-weight: 600; } -#panneau-informations-client .formulaire input { +#panneau-informations-client .formulaire input, #panneau-informations-client .formulaire select { width: 15rem; } #panneau-informations-client .panneau__pied-de-page { 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 9c23b879..dad2236d 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;EACA;AAEA;AAAA;AAAA;;AAGA;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;;;AC5NN;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;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;EACA;AAEA;AAAA;AAAA;;AAGA;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;;;AC5NN;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;;AAMR;EACE;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAKN;EACE;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;;AAKJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AC5JN;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 06a7797d..184dd669 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:wrap;place-content:center;width:fit-content;margin:auto;display:flex}#panneau-panier .panneau__instructions-code-promo__code-promo button{min-width:9rem;padding:var(--espace-xs)var(--espace-xl);text-transform:lowercase;border:1px solid var(--couleur-noir);border-left:initial}#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 +#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 button{min-width:9rem;padding:var(--espace-xs)var(--espace-xl);text-transform:lowercase;border:1px solid var(--couleur-noir);border-left:initial}#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 .panneau__formulaires .panneau__formulaires__message{margin:var(--espace-l)0}#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,#panneau-informations-client .formulaire select{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/img/icons/aboutlclick-black.svg b/web/app/themes/haiku-atelier-2024/assets/img/icons/aboutlclick-black.svg new file mode 100644 index 00000000..88c0b03a --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/img/icons/aboutlclick-black.svg @@ -0,0 +1 @@ + diff --git a/web/app/themes/haiku-atelier-2024/assets/img/icons/aboutlclick-yellow.svg b/web/app/themes/haiku-atelier-2024/assets/img/icons/aboutlclick-yellow.svg new file mode 100644 index 00000000..0ad7cb34 --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/img/icons/aboutlclick-yellow.svg @@ -0,0 +1 @@ + diff --git a/web/app/themes/haiku-atelier-2024/assets/img/icons/arrow-droite.svg b/web/app/themes/haiku-atelier-2024/assets/img/icons/arrow-droite.svg new file mode 100644 index 00000000..1a1c23a9 --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/img/icons/arrow-droite.svg @@ -0,0 +1 @@ + diff --git a/web/app/themes/haiku-atelier-2024/assets/img/logos/logo-lines.svg b/web/app/themes/haiku-atelier-2024/assets/img/logos/logo-lines.svg index 7ca8f6df..dff06ff9 100644 --- a/web/app/themes/haiku-atelier-2024/assets/img/logos/logo-lines.svg +++ b/web/app/themes/haiku-atelier-2024/assets/img/logos/logo-lines.svg @@ -1 +1 @@ - + 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 9c7bd0b1..3c1f5f4a 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 @@ -34,16 +34,16 @@ ], "integrity": "sha512-BYIJDDOI3NTIytshd2k13/Wyep1oJ6pfwg9dCdZ18XVQrzO9uj99f5wF9bS0pjKa7OkbM2F27wF817UKn6thgg==" }, + "_index.BAmxwLeJ.js": { + "file": "index.BAmxwLeJ.js", + "name": "index", + "integrity": "sha512-E0xMh+fknNA3qU/PWB1CGEt+KPvqyjwxT1MTGlkyrSr4VJ3pMqsW76MxNVhIfUdVt+xlOBpxqqSAYomFdTjgjQ==" + }, "_index.CeK6pfoJ.js": { "file": "index.CeK6pfoJ.js", "name": "index", "integrity": "sha512-cxTw0sKKut2H95JwMgiKgEVLyZ0QswK/HydKTapcqcs3w6xHIHNUpYBLdRzEYdeRfHKUsA0kvPNBXBk/QeazjQ==" }, - "_index.DxUTT09Y.js": { - "file": "index.DxUTT09Y.js", - "name": "index", - "integrity": "sha512-ktQDmsOsv0yimT9VIoz9bZriykTetX5qhLN5BMGkJXvqxj9Z1rKiZ1wbDVj3r6bWs4/S0PGPSJevtJyGx+vcow==" - }, "_pipe.XPB0wEfw.js": { "file": "pipe.XPB0wEfw.js", "name": "pipe", @@ -68,7 +68,7 @@ "name": "dom", "src": "web/app/themes/haiku-atelier-2024/src/scripts/constantes/dom.ts", "isEntry": true, - "integrity": "sha512-2Ar/pvj8qBi/+vgGiExcb4HheX7rZIkbE2m0Ni5lh+aQveBc+dhZLQfEsBzUVZl/nI73900eqRgPb9gvAIFJVQ==" + "integrity": "sha512-zrRYjeLsGft8dotzdw4tkD1FXuWNpnW/rZMcat4ryVVD3JHAg/0ubE+ewPmg1aWxnPKKv4bSHTND8KmajUaI2w==" }, "web/app/themes/haiku-atelier-2024/src/scripts/constantes/erreurs.ts": { "file": "erreurs.js", @@ -77,6 +77,13 @@ "isEntry": true, "integrity": "sha512-cXQkAzCU4YB9DhSISYUNfuR3eHjrl1TUQH2zyeCUL6FjuU7iLntlvYKMD1weSH4N9B0J+kd9Kf+aZQ8I7YgmWg==" }, + "web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages-utilisateur.ts": { + "file": "messages-utilisateur.js", + "name": "messages-utilisateur", + "src": "web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages-utilisateur.ts", + "isEntry": true, + "integrity": "sha512-ntCxJrcvoj570ITUbCTPg8TiQibosb7JAfjgjXIfDBkqzaBbY+ZkMYIq6Dke5v+n2FV0M17U1yX6R0tQi5WTBQ==" + }, "web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages.ts": { "file": "messages3.js", "name": "messages", @@ -85,11 +92,18 @@ "integrity": "sha512-M8me/iGRLfItVHaEf+BhA3xdEIxEwdyNuN+H87daJ1jl1oOENbROB7ub6RPP47NdFsQUChTRphEhQglT+qc6RA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/constantes/orders.ts": { - "file": "orders3.js", + "file": "orders2.js", "name": "orders", "src": "web/app/themes/haiku-atelier-2024/src/scripts/constantes/orders.ts", "isEntry": true, - "integrity": "sha512-dLV15du4JF6iPF2I93pExJpqAG13hXNCrRj8hF1dO47SFaa/7S74hT3puqnojjF5g1vStbjuGX+dLVklMIZuOw==" + "integrity": "sha512-wV9B3cW/1TnjBcesuc4a2M+28+67nsmX2++/Up1QUraP4Bdzbn9RiToohkone5Z+1mZNOjB/Hrd8x7Gc+jtVvg==" + }, + "web/app/themes/haiku-atelier-2024/src/scripts/constantes/pays.ts": { + "file": "pays.js", + "name": "pays", + "src": "web/app/themes/haiku-atelier-2024/src/scripts/constantes/pays.ts", + "isEntry": true, + "integrity": "sha512-/CgY6GFeg59NtZamE/OT4dht8avB/GGy3sOOsyGpUaXZhWWoIApYWzCjITzLdWQfnktSDp9oYrKrB9FHlXaaYQ==" }, "web/app/themes/haiku-atelier-2024/src/scripts/constantes/products.ts": { "file": "products2.js", @@ -138,7 +152,7 @@ "imports": [ "_exports.B84S-6H1.js" ], - "integrity": "sha512-q/vBNk2FX1du9asWIUsTxJPU+FX2AkQY6LWPQHAVAWR/8fkrhKFaKdih18+40mxqe8zEfzGg9fUfoR+h0SYvug==" + "integrity": "sha512-pwU7oHZl8/bW66/vDeB6vK+TYGt9C6KhuXrDAb0pCAB5mw5rfh13n+IE0BfoBNyl8gzZ028Ry3JwsE5WCNac3g==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs/codes-promo.ts": { "file": "codes-promo.js", @@ -172,7 +186,7 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/messages.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.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", @@ -186,14 +200,14 @@ "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-wlzwhlDEUm0Ve46eIkBUSQA8hZSVAOZj42gCUdTy0fdeZmda64o6iz4v2+aYyaUQBbIFggxhYK3J0EQW2d42KA==" + "integrity": "sha512-wAOaUWM+DfCqqwQifxuqfWQyCEoEtQKAQMRWca3XBJihhtnsdX35lZTAOFK2BJdoQfXkuzCIzgj+gFSzVjuvEg==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/nombres.ts": { "file": "nombres.js", "name": "nombres", "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/nombres.ts", "isEntry": true, - "integrity": "sha512-3FI/eGnQR8WaEoNLUMe9krKJAe4RR7Gnro7ep7HlMLFi1oH5ncmpMGcja99iAkxFFJLhb+qa8nGPLfWr6V4F5g==" + "integrity": "sha512-yddD95sZWt7ejVWNrDZWkst46WEV2uLxhXOp85ZQRILH6/Pyd326sUBUC/3AO7EX5JtEsICqaFq89gK3PoPvYg==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts": { "file": "reseau.js", @@ -202,14 +216,14 @@ "isEntry": true, "imports": [ "_index.CeK6pfoJ.js", - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.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.B84S-6H1.js" ], - "integrity": "sha512-aitZrp9G4pXD0IfVhDyZVfh1vgxpES6hfrB6h+Jkpe9ApSK634ne2J5WI7Q5VpZcIHSjVXAsIxMjPLNrx0x4Kw==" + "integrity": "sha512-loMYXW+YiwXjqxLKLopE4gh/wO00B/rmhp/IU0pBYDHP2Ty5lLIqZQ+9CAtveN8wzokcZhrWlshJGkmKfK0Ekw==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts": { "file": "adresses.js", @@ -217,9 +231,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js" + "_index.BAmxwLeJ.js" ], - "integrity": "sha512-H+aWaFlRjfS2cY3XWyOArYWnFBAV0weV9FMIEvTEFHiEeojtEkK++tJliJLQug2xOYPoMr6BwV3+TuRK+nSSng==" + "integrity": "sha512-wmEkUAIn/ZT1GmOwBNfdbwpcN9gDoPKU1Vc9ikkf7PqQ6aM3Ns3PB0PdxE/NjrhbZu/C5nHBP0EwrOYNJfr71Q==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-add-item.ts": { "file": "cart-add-item.js", @@ -227,9 +241,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-add-item.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js" + "_index.BAmxwLeJ.js" ], - "integrity": "sha512-ym6kcAMCCgjH0vatLjbKnTQ2231MGzFV5eNBlxFoDflkKKxPe8xHvnjJbJSTNXFFFTQammafUY3iPqVQ7WdrxA==" + "integrity": "sha512-rTH6MPE90T0SxQckPL3dKNMl49jCa72NJulit7JVXf2uDO4tCxy4bfy49cDS5s9oSMwKmwx1ocBbdo6rBcG98g==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-apply-coupon.ts": { "file": "cart-apply-coupon.js", @@ -237,9 +251,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-apply-coupon.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js" + "_index.BAmxwLeJ.js" ], - "integrity": "sha512-MPKrUdFgPDWEPG0o82PDqPKArhbB6OVTdmeEoSKYjM+PvNsoVM0OeY+pujz5nGkU/daHBd4HriBQqV/dvcW6ww==" + "integrity": "sha512-n6yRHUQcLw99oNatxVPQafVj2G23S1aUMD/G0WrCAa+5jD7jRvzoZSgjqkd5qfcLVbCsuf3K/dBaXTvUkrzeHw==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-coupons.ts": { "file": "cart-coupons.js", @@ -247,9 +261,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-coupons.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js" + "_index.BAmxwLeJ.js" ], - "integrity": "sha512-qdooRawTXSQsJWbwGQ5HHFzG39Cw7eFpUDgCqzQqWs8zhVQYvvunO1n4fwXWttekDr7VVChj6IzjUmv4JMdTdA==" + "integrity": "sha512-iiRKujp1OS4N0B3fbfcNm7DKfza8U69jo2fP114OJB1k5j/1XraOiOqT1upfp+pYGvf+vcB1b/KMe3xtMYl5aw==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-remove-coupon.ts": { "file": "cart-remove-coupon.js", @@ -257,9 +271,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-remove-coupon.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js" + "_index.BAmxwLeJ.js" ], - "integrity": "sha512-fuTTvmIWBTDpR47Wlc4bwacRjTqAa7PZpqHWBz+aAj1zTYnwIQdd/tujRGmDPx8GNiIOaz1w0jyhRyz8YZL82Q==" + "integrity": "sha512-Hi9OJ4W6y+ZjwehkxQvjXLiJ2N+doCQh6NRLoLe3L9/SESV3x8Bunp/e7xuW+5dNAsVQ3V6wXu//f/Ri64HFMQ==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-remove-item.ts": { "file": "cart-remove-item.js", @@ -267,9 +281,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-remove-item.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js" + "_index.BAmxwLeJ.js" ], - "integrity": "sha512-KaWApeBMfdizR8XIwwdVlPigDiuSAkVntzfoVoPx2+L74qnIRlqVzC/h8wmR5iLtJiRHUf8onWKZWTy/YJi0GA==" + "integrity": "sha512-RZfXZt0KF5ZreFiF3jRPg4/Zq25llqHkeBnEvuYZkxjh1T6nUz5v8n8EY/j8SZ/AZqnxsx2mbcdUoBacU2pDug==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-update-customer.ts": { "file": "cart-update-customer.js", @@ -277,10 +291,10 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-update-customer.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.js", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts" ], - "integrity": "sha512-1vsGL4zPWg3ip4cdi+gB+QlHhjCAwn3ETg/rAGJrlDFOoNHLzkaC4Z4iJwVRMzlsISvKAHYuwQxFv1tSF26raA==" + "integrity": "sha512-n2CINQ+R781uRSqyOWnrFao9BPdXhgmBvXXUTO87FTOqlUFVfDtlAmJVKcjcQQRH/dlhYiHFOJSbv8NvHKfNWA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-update-item.ts": { "file": "cart-update-item.js", @@ -288,9 +302,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-update-item.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js" + "_index.BAmxwLeJ.js" ], - "integrity": "sha512-enT7JXW/as+17/IgNE8HTIWumHyycCfOA1A2ViB2BX2+Sb5+yg941ATZCMF00/yIzgy/0po/HPITeEhUcTxCQA==" + "integrity": "sha512-1hXY5Nq5BVY+3chpLI7L8IOyyc8JktnOZmzMs7VtAS8K98l2kHprqwpbPWj0KDngRU16XN/DvMcC9463ySx5OA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart.ts": { "file": "cart.js", @@ -298,13 +312,13 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.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-nkAa5GpdXm5SEv5taFhiOdunn7bOKm61N1kVyEHzPGM4sa1irsAzExc5RMXEsEjim4ZA7RseBjo6pngFXFxpIg==" + "integrity": "sha512-uDfpSomB/fczIMXAfodaNTIlK6vhTP4ecROfIXdPBb/8ve3xMQ3GzCyOWzYe6XwEt6fbu5dnAOllBdpqw+KxWQ==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts": { "file": "couts-livraison.js", @@ -312,10 +326,10 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.js", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/adresses.ts" ], - "integrity": "sha512-Wba/eKVlVqEczLMMk3dl0p9KUI7dhNomuSIqltE35s+m9svN/k+dMr49WEyFYlchuQLH6Om19wm0VmnLPvOZmg==" + "integrity": "sha512-0ComqT1KV9mO/xyu27DPA3cxU0Goj2eheadgA6BrI6el8jhDpZ2IzuBr9nLEZu8LiJBhVjTdf2mTJvaj1RW5fQ==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/erreurs.ts": { "file": "erreurs3.js", @@ -323,9 +337,9 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/erreurs.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js" + "_index.BAmxwLeJ.js" ], - "integrity": "sha512-/iSqgsgUyBySdgT4/xxOppkIw5kwUV6Ka0auhf2ZeSdqk6QETJm0bj5Ydt3wWdPyncFIlva3ousWwTkw5Sp7Mg==" + "integrity": "sha512-96Vw1KG59Qa/gbhTikPPY/NcS1GoGO2L8QQwS1YQTsfz4+2tPOBbYRBW3LERKZ02CvGX1ANjLcsTgJVnCQCvig==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/products.ts": { "file": "products3.js", @@ -333,22 +347,22 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/products.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/products.ts" ], - "integrity": "sha512-Mr2P09suX7KY2cCzn+cqLdRLDHPDJC/RIsFFlB0VudZZoIE9unlsB3BjSvlzmKrBly5QP3jgnq2+7dKqSHlzMw==" + "integrity": "sha512-n7UHTZAPwgAZ8IEW3ZE3RVOPFQTMLNEw9dbyjxCVaTraee+pb4XK7Ap9zp69/AMrqsK4qp2g22HakNjkRssbYw==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/v3/orders.ts": { - "file": "orders2.js", + "file": "orders.js", "name": "orders", "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/v3/orders.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.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-moB98oUqT6LBlhauPLs5NaX25U/sAMuCRVbfu231Ld/mvdCW4xAd9MUd4l/wrHPckLGSDcU/1jlGPcilj5QmzQ==" + "integrity": "sha512-9xPXYXbYYX6m2Q8yJ608vjvjQv87nXHHtzBS0/xH7bXYaIeOvxMyXC1wQbBnT5h8dAxLECJXp7j2owACusFkVw==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/v3/products.ts": { "file": "products.js", @@ -356,10 +370,10 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/v3/products.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.js", "web/app/themes/haiku-atelier-2024/src/scripts/constantes/products.ts" ], - "integrity": "sha512-/3pK99mes4gepaV1xY0662S9Wat4PYzOz/0433XYMmGmWzZHUhZ8lEWC2DH8ohCJv09LrvVGOPcFAvlM23KdxQ==" + "integrity": "sha512-sILVtT8TZ7/mRGnYgexDlu3XkWMhV06nONZQgFyNtVMTa67v16rleeXSqvD4WDkfuX+Mr+u1A+l5sdt6ZC2G0g==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts": { "file": "messages2.js", @@ -367,7 +381,7 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/messages.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.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", @@ -375,14 +389,14 @@ "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-e0iafVBzxA+LOMbD4VlzjtXW1GU/LmETBKAQ5cV7glJdsaY5/ZWVGcSOOPdwT6kvQkMBohKCgn9K5Bqwoi38zA==" + "integrity": "sha512-9WH8aFHYVFBnQi/lSGLegnhrEOMIiRs7lFc2mbHi5vE88oMARO1HjSYOtKIOd2bvM7oMKLMtaMt2EVqnNkg89w==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/types/api/v3/orders.ts": { - "file": "orders.js", + "file": "orders3.js", "name": "orders", "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/types/api/v3/orders.ts", "isEntry": true, - "integrity": "sha512-FxX8RZIDDZuWNSNyFz9fYxNVJyRtwOZfK0KQ6c3Vn98d/Ovd3m+OjmjXXiYnENzH86EpLIuHjxc/RiUIVsAvDQ==" + "integrity": "sha512-nqCjj7B9DjVJS7/4WgLDt58w1LMfLMxDfutD7vY99PNX9rjdiF1ckCffcMuxCGureeEu8qw9RCRKMavMDEX2bw==" }, "web/app/themes/haiku-atelier-2024/src/scripts/lib/types/api/v3/products.ts": { "file": "products4.js", @@ -411,10 +425,10 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/lib/validation.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.js", "_Either.wHNxn7Os.js" ], - "integrity": "sha512-U0Sy/QxwPcY4OUTn9k7ece4cny1Ll3yog6ruooDxnpcirIJAhl2GbEanmqCF1blDxuoTtm9rKS6bGpGsIPprEg==" + "integrity": "sha512-GM0GW8/eqaFrADOWenlukpNZ6uKPXkkYwbqxnLh1UIVX3Y6vbIynEkoHAQmV6N2Y8CQqYqn3KOZVjFaOIAqNIQ==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-bouton-panier.ts": { "file": "scripts-bouton-panier.js", @@ -431,7 +445,7 @@ "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts", "_exports.B84S-6H1.js", "_Either.wHNxn7Os.js", - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.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", @@ -441,7 +455,7 @@ "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-5DuXjp8NW4E71AvgK4y9ge4/5ocXdS9c6Ie1wzgh76JoJg1ZNAtNhmm6lEqjKciF5jbLcfpB8G3CEq0Lf5o9kQ==" + "integrity": "sha512-KPHQIRKzYFgML+vcHuaxv/sYMBOIUc4teWg1aRW6cPVG3FzuBbxnSMoANdLBgMP9WlS2h6rJjoz25f4Ufc5GZg==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-menu-categories.ts": { "file": "scripts-menu-categories.js", @@ -474,7 +488,7 @@ "_pipe.XPB0wEfw.js", "_Either.wHNxn7Os.js" ], - "integrity": "sha512-Bc5ADRLy7iSHw9wGdk7UCNntLcYB4Z3V+nG9r2MqKIegMB4SpKEFnbUsuxfDt+5worX3WjI5rf8t2IgGvwcDOg==" + "integrity": "sha512-tnv/ti8Uzabwvh5ElET2Xn15WO1gm4k+yO5+uu3QPTcoZ1VFs8eEtIuElZUSvckVC19fry54RDR8+B1pjn+vtQ==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-a-propos.ts": { "file": "scripts-page-a-propos.js", @@ -491,7 +505,7 @@ "_exports.B84S-6H1.js", "_Either.wHNxn7Os.js" ], - "integrity": "sha512-CJGUIue+ioClxccUKzKChNl63VpTf7+uCVsEalt/wpDgAPwcdGIcDLH1Z0g2xYRY9DL/gCvnKUXleB6aAWarYQ==" + "integrity": "sha512-ulL6aTirmFGcB1CKVwL+YfyG2gD7xNEBEerFJXcFk2O5tVXmSnAmycsFUJ1MWvpm+QbrL61WYO/lXAGrnnHDJA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-accueil.ts": { "file": "scripts-page-accueil.js", @@ -517,15 +531,16 @@ "isEntry": true, "imports": [ "_index.CeK6pfoJ.js", - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.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/animations.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/gardes.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/v3/products.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/utils.ts", + "web/app/themes/haiku-atelier-2024/src/scripts/lib/validation.ts", "_MaybeAsync.AE1jnxuc.js", "_pipe.XPB0wEfw.js", "_index-0eef19ec.DoJSf22Z.js", @@ -535,7 +550,7 @@ "web/app/themes/haiku-atelier-2024/src/scripts/constantes/products.ts", "_belt_Option-91f3b350.cBye8bLJ.js" ], - "integrity": "sha512-FFaHFK1310TtQEKVpGgo9MMgZGROVyV60mw5GXp4eWrVjbjXfVqVR1qd5+xlIIHbuzbGHLSNHFw9J8InWYhQMA==" + "integrity": "sha512-mDfRg6AUV7ELjlESpovRKnM+SrJO2VwWrdYdVtwVsK8XujQYKi4DBX7N/t9kIdz3wc2EqJf2EkmMM3vEXgxj4A==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier-adresses.ts": { "file": "scripts-page-panier-adresses.js", @@ -544,9 +559,10 @@ "isEntry": true, "imports": [ "_index.CeK6pfoJ.js", - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.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-utilisateur.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/animations.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/dom.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.ts", @@ -568,7 +584,7 @@ "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" ], - "integrity": "sha512-1bj/xtpAb4T9nqhZReDmTKqT03Wnrx93tBLN0h50WYtr0X+leZ0YIy5yplO83PmqFrnt4s8FyoR8K0OLZt12ZQ==" + "integrity": "sha512-ZniV1xRjm+fUp37n+6FG7vxj4uf/j/huaXzKPt4RpWzsvqM8EQ0HA1rJQap/nkQcDlfJoyS4mgHZB/9KreIBVg==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier-code-promo.ts": { "file": "scripts-page-panier-code-promo.js", @@ -577,7 +593,7 @@ "isEntry": true, "imports": [ "_index.CeK6pfoJ.js", - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.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", @@ -605,7 +621,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-wRjjWn9cL7y/mYhjwrm1GFVwBO15aStATpGa9MXGvfwAmZsVt6Ulz6riE/O+4JVvJ9nvb+EdWQonWehAC55J3Q==" + "integrity": "sha512-8Jh+A5tydtawNbmBv9ppykEhVOwSOe26NSrcnwbYXBfwamkA2fq5elO4PXtr2c4TzT7zyJQgAonEt78qW5on5w==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts": { "file": "scripts-page-panier.js", @@ -613,7 +629,7 @@ "src": "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier.ts", "isEntry": true, "imports": [ - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.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", @@ -621,6 +637,7 @@ "web/app/themes/haiku-atelier-2024/src/scripts/lib/erreurs.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/nombres.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/reseau.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-remove-item.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-update-item.ts", @@ -640,6 +657,7 @@ "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/constantes/messages-utilisateur.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/animations.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-update-customer.ts", "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/v3/orders.ts", @@ -651,7 +669,7 @@ "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/cart-remove-coupon.ts", "_belt_Option-91f3b350.cBye8bLJ.js" ], - "integrity": "sha512-0HVDbb+ZDwLw3RNt4yP16CE2HhnQsEev5ZhXYP8c1KppoEIW0Z1uXpwRrZ5CYeBKluQpX9P/45PD0E0qHOPqxw==" + "integrity": "sha512-pqrzLLVckWlEUO4B0DziIEzQRxq3j8RsSCzqI/4ZZkQdOwf89sRx/iPgT+so/iVtJG2cGMJNi8VM94WUriCGZA==" }, "web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-produit.ts": { "file": "scripts-page-produit.js", @@ -675,7 +693,7 @@ "_index-0eef19ec.DoJSf22Z.js", "_Either.wHNxn7Os.js", "_exports.B84S-6H1.js", - "_index.DxUTT09Y.js", + "_index.BAmxwLeJ.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", @@ -685,6 +703,6 @@ "web/app/themes/haiku-atelier-2024/src/scripts/lib/schemas/api/couts-livraison.ts", "_belt_Option-91f3b350.cBye8bLJ.js" ], - "integrity": "sha512-rXLngIRzynideEoG746rDWELBrGA11T2vxGSgznGO4SjJbowoec3MhNLuDHONwQbxISU0vPXTjc8+Hls51f1EA==" + "integrity": "sha512-mJ0+jacSm0UC339pLjBrtSm0bxhTF9VaZgWPBeS8JguId7qi6nQdgaHxUgvYHAqe6Yx1pjAWF7XM8kApUT6auQ==" } } \ 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 63ddda3d..16edda5f 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.DxUTT09Y.js"; +import { o as object, s as string } from "./index.BAmxwLeJ.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 4d5d31e2..ca8a8209 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.DxUTT09Y.js"; +import { o as object, k as optional, n as number, b as array, s as string } from "./index.BAmxwLeJ.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 20e91c00..64f3e123 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.DxUTT09Y.js"; +import { o as object, k as optional, s as string } from "./index.BAmxwLeJ.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 95a39276..12fdc107 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, j as integer, n as number } from "./index.DxUTT09Y.js"; +import { o as object, s as string, a as pipe, h as integer, n as number } from "./index.BAmxwLeJ.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 b686ee8e..5860a421 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.DxUTT09Y.js"; +import { o as object, k as optional, s as string } from "./index.BAmxwLeJ.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 bded117e..038efc9d 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.DxUTT09Y.js"; +import { o as object, s as string } from "./index.BAmxwLeJ.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 8049558d..244192e6 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.DxUTT09Y.js"; +import { o as object, k as optional } from "./index.BAmxwLeJ.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 650d5e85..6cbea969 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.DxUTT09Y.js"; +import { o as object, s as string, a as pipe, m as minValue, n as number } from "./index.BAmxwLeJ.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 0ae60fbc..7f4f49b2 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, j as integer } from "./index.DxUTT09Y.js"; +import { o as object, c as boolean, e as enum_, s as string, u as unknown, n as number, b as array, d as union, a as pipe, f as null_, g as url, h as integer } from "./index.BAmxwLeJ.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/couts-livraison.js b/web/app/themes/haiku-atelier-2024/assets/js/couts-livraison.js index 16f85509..17c0787e 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, k as omit, b as array, s as string, n as number, u as unknown, d as boolean } from "./index.DxUTT09Y.js"; +import { o as object, j as omit, b as array, s as string, n as number, u as unknown, c as boolean } from "./index.BAmxwLeJ.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 aa611ced..5fbbc886 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/dom.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/dom.js @@ -45,6 +45,7 @@ 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_MESSAGE_FORMULAIRE_ADRESSES = "#panneau-informations-client #message-formulaire-adresses"; const SELECTEUR_CONTENEUR_STORYTELLING = ".storytelling"; const SELECTEUR_IMAGES_STORYTELLING = ".storytelling__image"; const SELECTEUR_GRILLE_PRODUITS = "#page-boutique .grille-produits"; @@ -63,44 +64,45 @@ const SELECTEUR_IMAGE_COLONNE_GAUCHE = ".colonne-gauche img"; const SELECTEUR_IMAGES_COLONNE_DROITE = ".colonne-droite img"; const SELECTEUR_PRIX_PRODUIT = ".selecteur-produit__prix"; export { - SELECTEUR_BOUTON_MENU_MOBILE as $, + ATTRIBUT_PRIX as $, ATTRIBUT_CONTIENT_ARTICLES as A, - SELECTEUR_FORMULAIRE_PANIER as B, - SELECTEUR_INSTRUCTIONS_CLIENT as C, - SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT as D, - SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE as E, - ATTRIBUT_CHARGEMENT as F, - SELECTEUR_BOUTON_CODE_PROMO as G, - SELECTEUR_CHAMP_CODE_PROMO as H, - SELECTEUR_ENSEMBLE_CODE_PROMO as I, - SELECTEUR_MESSAGE_CODE_PROMO as J, - SELECTEUR_TOTAL_REDUCTION 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_ACTIONS_FORMULAIRE as B, + SELECTEUR_FORMULAIRE_PANIER as C, + SELECTEUR_INSTRUCTIONS_CLIENT as D, + SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES as E, + SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT as F, + SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE as G, + SELECTEUR_BOUTON_CODE_PROMO as H, + SELECTEUR_CHAMP_CODE_PROMO as I, + SELECTEUR_ENSEMBLE_CODE_PROMO as J, + SELECTEUR_MESSAGE_CODE_PROMO as K, + SELECTEUR_TOTAL_REDUCTION as L, + ATTRIBUT_CODE_PROMO_PRESENT as M, + SELECTEUR_BOUTON_AJOUT_PANIER as N, + SELECTEUR_SELECTEUR_QUANTITE as O, + SELECTEUR_LIENS_ONGLETS as P, + SELECTEUR_SECTIONS_CONTENUS as Q, + SELECTEUR_PRIX_PRODUIT as R, SELECTEUR_BOUTON_PANIER as S, - 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_CONTENEUR_FLECHES_DEFILEMENT as T, + SELECTEUR_FLECHE_DEFILEMENT_GAUCHE as U, + SELECTEUR_FLECHE_DEFILEMENT_DROITE as V, + SELECTEUR_PHOTOS_PRODUIT as W, + SELECTEUR_IMAGE_COLONNE_GAUCHE as X, + SELECTEUR_IMAGES_COLONNE_DROITE as Y, + ATTRIBUT_INDEX_IMAGE_ACTIVE as Z, + ATTRIBUT_ARIA_SELECTED as _, SELECTEUR_MENU_CATEGORIES_PRODUITS as a, - 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_BOUTON_MENU_MOBILE as a0, + SELECTEUR_MENU_MOBILE as a1, + ATTRIBUT_MENU_MOBILE_ACTIVE as a2, + ATTRIBUT_ID_ENSEMBLE_EPINGLE_BOITE as a3, + ATTRIBUT_ENSEMBLE_EPINGLE_BOITE_ACTIF as a4, + CLASS_BOUTON_FERMETURE_BOITE_TEXTE as a5, + CLASS_EPINGLE as a6, + SELECTEUR_CONTENEUR_STORYTELLING_A_PROPOS as a7, + SELECTEUR_EPINGLE as a8, + SELECTEUR_BOITE_TEXTE as a9, SELECTEUR_ENTREE_MENU_CATEGORIES_PRODUITS as b, SELECTEUR_CONTENEUR_STORYTELLING as c, SELECTEUR_IMAGES_STORYTELLING as d, @@ -110,21 +112,21 @@ export { SELECTEUR_GRILLE_PRODUITS as h, ATTRIBUT_ID_CATEGORIE_PRODUITS as i, ATTRIBUT_PAGE as j, - ATTRIBUT_HIDDEN as k, - SELECTEUR_ENTREES_PANIER as l, - SELECTEUR_CONTENEUR_PANIER as m, - SELECTEUR_SOUS_TOTAL_PRODUITS as n, - SELECTEUR_TOTAL_REDUCTION_VALEUR as o, - SELECTEUR_TOTAL_PANIER as p, - SELECTEUR_BOUTON_SEPARATION_ADRESSES as q, - SELECTEUR_FORMULAIRE_FACTURATION as r, - ATTRIBUT_CLE_PANIER as s, - SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE as t, - SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER as u, - SELECTEUR_BOUTON_ADDITION_QUANTITE as v, - SELECTEUR_BOUTON_SUPPRESSION_PANIER as w, - SELECTEUR_PRIX_LIGNE_PANIER as x, - ATTRIBUT_DESACTIVE as y, - SELECTEUR_BOUTON_ACTIONS_FORMULAIRE as z + ATTRIBUT_DESACTIVE as k, + ATTRIBUT_CHARGEMENT as l, + ATTRIBUT_HIDDEN as m, + SELECTEUR_ENTREES_PANIER as n, + SELECTEUR_CONTENEUR_PANIER as o, + SELECTEUR_SOUS_TOTAL_PRODUITS as p, + SELECTEUR_TOTAL_REDUCTION_VALEUR as q, + SELECTEUR_TOTAL_PANIER as r, + SELECTEUR_BOUTON_SEPARATION_ADRESSES as s, + SELECTEUR_FORMULAIRE_FACTURATION as t, + ATTRIBUT_CLE_PANIER as u, + SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE as v, + SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER as w, + SELECTEUR_BOUTON_ADDITION_QUANTITE as x, + SELECTEUR_BOUTON_SUPPRESSION_PANIER as y, + SELECTEUR_PRIX_LIGNE_PANIER 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 7ad00680..97c0c9dc 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_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 +{"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\";\nexport const SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES = \"#panneau-informations-client #message-formulaire-adresses\";\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;AACrC,MAAM,wCAAwC;AAG9C,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/erreurs2.js b/web/app/themes/haiku-atelier-2024/assets/js/erreurs2.js index 58e8c2d4..e696d845 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/erreurs2.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/erreurs2.js @@ -70,6 +70,7 @@ const reporteEtLeveErreur = (erreur) => { throw erreur; }; export { + BadRequestError as B, CleNonTrouveError as C, ErreurInconnue as E, ServerError as S, diff --git a/web/app/themes/haiku-atelier-2024/assets/js/erreurs3.js b/web/app/themes/haiku-atelier-2024/assets/js/erreurs3.js index d7fce408..3f135944 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/erreurs3.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/erreurs3.js @@ -1,4 +1,4 @@ -import { o as object, n as number, i as is, s as string } from "./index.DxUTT09Y.js"; +import { o as object, n as number, i as is, s as string } from "./index.BAmxwLeJ.js"; const WCErrorBodySchema = object({ code: string(), data: object({ diff --git a/web/app/themes/haiku-atelier-2024/assets/js/index.DxUTT09Y.js b/web/app/themes/haiku-atelier-2024/assets/js/index.BAmxwLeJ.js similarity index 99% rename from web/app/themes/haiku-atelier-2024/assets/js/index.DxUTT09Y.js rename to web/app/themes/haiku-atelier-2024/assets/js/index.BAmxwLeJ.js index 6c227e6c..1972c21c 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/index.DxUTT09Y.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/index.BAmxwLeJ.js @@ -600,15 +600,15 @@ export { ValiError as V, pipe as a, array as b, - optional as c, - boolean as d, + boolean as c, + union as d, enum_ as e, - union as f, - null_ as g, - url as h, + null_ as f, + url as g, + integer as h, is as i, - integer as j, - omit as k, + omit as j, + optional as k, maxValue as l, minValue as m, number as n, @@ -618,4 +618,4 @@ export { unknown as u, value as v }; -//# sourceMappingURL=index.DxUTT09Y.js.map +//# sourceMappingURL=index.BAmxwLeJ.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/index.DxUTT09Y.js.map b/web/app/themes/haiku-atelier-2024/assets/js/index.BAmxwLeJ.js.map similarity index 99% rename from web/app/themes/haiku-atelier-2024/assets/js/index.DxUTT09Y.js.map rename to web/app/themes/haiku-atelier-2024/assets/js/index.BAmxwLeJ.js.map index 56cfd87c..b4aefb2d 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/index.DxUTT09Y.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/index.BAmxwLeJ.js.map @@ -1 +1 @@ -{"version":3,"file":"index.DxUTT09Y.js","sources":["../../../../../../node_modules/.pnpm/valibot@1.0.0-beta.8_typescript@5.8.0-dev.20241122/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.BAmxwLeJ.js","sources":["../../../../../../node_modules/.pnpm/valibot@1.0.0-beta.8_typescript@5.8.0-dev.20241122/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":";;;AACA,IAAI;AAIJ,SAAS,gBAAgB,SAAS;AAChC,SAAO;AAAA,IACL,MAAM,SAAS,QAAQ,OAAO;AAAA,IAC9B,SAAS,SAAS;AAAA,IAClB,YAAY,SAAS,cAAc,OAAO;AAAA,IAC1C,gBAAgB,SAAS,kBAAkB,OAAO;AAAA,EACnD;AACH;AAMA,IAAI;AAKJ,SAAS,iBAAiB,MAAM;AAC9B,SAAO,QAAQ,IAAI,IAAI;AACzB;AAMA,IAAI;AAKJ,SAAS,iBAAiB,MAAM;AAC9B,SAAO,QAAQ,IAAI,IAAI;AACzB;AAMA,IAAI;AAMJ,SAAS,mBAAmB,WAAW,MAAM;AAC3C,SAAO,QAAQ,IAAI,SAAS,GAAG,IAAI,IAAI;AACzC;AAMA,SAAS,WAAW,OAAO;AACzB,QAAM,OAAO,OAAO;AACpB,MAAI,SAAS,UAAU;AACrB,WAAO,IAAI,KAAK;AAAA,EACpB;AACE,MAAI,SAAS,YAAY,SAAS,YAAY,SAAS,WAAW;AAChE,WAAO,GAAG,KAAK;AAAA,EACnB;AACE,MAAI,SAAS,YAAY,SAAS,YAAY;AAC5C,YAAQ,SAAS,OAAO,eAAe,KAAK,GAAG,aAAa,SAAS;AAAA,EACzE;AACE,SAAO;AACT;AAGA,SAAS,UAAU,SAAS,OAAO,SAAS,SAAS,OAAO;AAC1D,QAAM,QAAQ,SAAS,WAAW,QAAQ,MAAM,QAAQ,QAAQ;AAChE,QAAM,WAAW,OAAO,YAAY,QAAQ,WAAW;AACvD,QAAM,WAAW,OAAO,YAAY,WAAW,KAAK;AACpD,QAAM,QAAQ;AAAA,IACZ,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,WAAW,KAAK,KAAK,WAAW,YAAY,QAAQ,WAAW,GAAG,WAAW,QAAQ;AAAA,IAC9F,aAAa,QAAQ;AAAA,IACrB,MAAM,OAAO;AAAA,IACb,QAAQ,OAAO;AAAA,IACf,MAAM,QAAQ;AAAA,IACd,YAAY,QAAQ;AAAA,IACpB,gBAAgB,QAAQ;AAAA,EACzB;AACD,QAAM,WAAW,QAAQ,SAAS;AAClC,QAAM,UAAU,OAAO,WAAW,QAAQ,WAAW,mBAAmB,QAAQ,WAAW,MAAM,IAAI,MAAM,WAAW,iBAAiB,MAAM,IAAI,IAAI,SAAS,QAAQ,WAAW,iBAAiB,MAAM,IAAI;AAC5M,MAAI,SAAS;AACX,UAAM,UAAU,OAAO,YAAY;AAAA;AAAA,MAEjC,QAAQ,KAAK;AAAA,QACX;AAAA,EACR;AACE,MAAI,UAAU;AACZ,YAAQ,QAAQ;AAAA,EACpB;AACE,MAAI,QAAQ,QAAQ;AAClB,YAAQ,OAAO,KAAK,KAAK;AAAA,EAC7B,OAAS;AACL,YAAQ,SAAS,CAAC,KAAK;AAAA,EAC3B;AACA;AA0BA,SAAS,kBAAkB,SAAS;AAClC,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,SAAS,QAAQ;AACf,aAAO,QAAQ,MAAM,EAAE,EAAE,OAAO,OAAM,GAAI,iBAAiB;AAAA,IACjE;AAAA,EACG;AACH;AA0CA,SAAS,aAAa,QAAQ,WAAW;AACvC,QAAM,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC;AAChC,MAAI,KAAK,SAAS,GAAG;AACnB,WAAO,IAAI,KAAK,KAAK,IAAI,SAAS,GAAG,CAAC;AAAA,EAC1C;AACE,SAAO,KAAK,CAAC,KAAK;AACpB;AA+CG,IAAC,YAAY,cAAc,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUlC,YAAY,QAAQ;AAClB,UAAM,OAAO,CAAC,EAAE,OAAO;AAPzB;AAAA;AAAA;AAAA;AAQE,SAAK,OAAO;AACZ,SAAK,SAAS;AAAA,EAClB;AACA;AA8rBA,SAAS,QAAQ,SAAS;AACxB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,OAAO;AAAA,IACP,SAAS;AAAA,IACT,aAAa,OAAO;AAAA,IACpB;AAAA,IACA,OAAO,SAAS,SAAS;AACvB,UAAI,QAAQ,SAAS,CAAC,KAAK,YAAY,QAAQ,KAAK,GAAG;AACrD,kBAAU,MAAM,WAAW,SAAS,OAAO;AAAA,MACnD;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AAqWA,SAAS,SAAS,aAAa,SAAS;AACtC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,OAAO;AAAA,IACP,SAAS,KAAK,uBAAuB,OAAO,YAAY,WAAW,WAAW,WAAW,CAAC;AAAA,IAC1F;AAAA,IACA;AAAA,IACA,OAAO,SAAS,SAAS;AACvB,UAAI,QAAQ,SAAS,EAAE,QAAQ,SAAS,KAAK,cAAc;AACzD,kBAAU,MAAM,SAAS,SAAS,SAAS;AAAA,UACzC,UAAU,QAAQ,iBAAiB,OAAO,QAAQ,MAAM,OAAQ,IAAG,WAAW,QAAQ,KAAK;AAAA,QACrG,CAAS;AAAA,MACT;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AAwJA,SAAS,SAAS,aAAa,SAAS;AACtC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,OAAO;AAAA,IACP,SAAS,KAAK,uBAAuB,OAAO,YAAY,WAAW,WAAW,WAAW,CAAC;AAAA,IAC1F;AAAA,IACA;AAAA,IACA,OAAO,SAAS,SAAS;AACvB,UAAI,QAAQ,SAAS,EAAE,QAAQ,SAAS,KAAK,cAAc;AACzD,kBAAU,MAAM,SAAS,SAAS,SAAS;AAAA,UACzC,UAAU,QAAQ,iBAAiB,OAAO,QAAQ,MAAM,OAAQ,IAAG,WAAW,QAAQ,KAAK;AAAA,QACrG,CAAS;AAAA,MACT;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AAsvBA,SAAS,IAAI,SAAS;AACpB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,OAAO;AAAA,IACP,SAAS;AAAA,IACT,YAAY,OAAO;AACjB,UAAI;AACF,YAAI,IAAI,KAAK;AACb,eAAO;AAAA,MACf,QAAc;AACN,eAAO;AAAA,MACf;AAAA,IACK;AAAA,IACD;AAAA,IACA,OAAO,SAAS,SAAS;AACvB,UAAI,QAAQ,SAAS,CAAC,KAAK,YAAY,QAAQ,KAAK,GAAG;AACrD,kBAAU,MAAM,OAAO,SAAS,OAAO;AAAA,MAC/C;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AAsBA,SAAS,MAAM,aAAa,SAAS;AACnC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,OAAO;AAAA,IACP,SAAS,uBAAuB,OAAO,YAAY,OAAQ,IAAG,WAAW,WAAW;AAAA,IACpF;AAAA,IACA;AAAA,IACA,OAAO,SAAS,SAAS;AACvB,UAAI,QAAQ,SAAS,EAAE,KAAK,eAAe,QAAQ,SAAS,KAAK,eAAe,QAAQ,QAAQ;AAC9F,kBAAU,MAAM,SAAS,SAAS,SAAS;AAAA,UACzC,UAAU,QAAQ,iBAAiB,OAAO,QAAQ,MAAM,OAAQ,IAAG,WAAW,QAAQ,KAAK;AAAA,QACrG,CAAS;AAAA,MACT;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AA4MA,SAAS,WAAW,QAAQ,SAAS,SAAS;AAC5C,SAAO,OAAO,OAAO,YAAY;AAAA;AAAA,IAE/B,OAAO,QAAQ,SAAS,OAAO;AAAA;AAAA;AAAA,IAG/B,OAAO;AAAA;AAEX;AAqEA,SAAS,GAAG,QAAQ,OAAO;AACzB,SAAO,CAAC,OAAO,MAAM,EAAE,EAAE,OAAO,MAAO,GAAE,EAAE,YAAY,KAAM,CAAA,EAAE;AACjE;AAqBA,SAAS,MAAM,MAAM,SAAS;AAC5B,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,IAAI,cAAc;AAChB,aAAO,kBAAkB,IAAI;AAAA,IAC9B;AAAA,IACD,OAAO,SAAS,SAAS;AACvB,YAAM,QAAQ,QAAQ;AACtB,UAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,gBAAQ,QAAQ;AAChB,gBAAQ,QAAQ,CAAE;AAClB,iBAAS,MAAM,GAAG,MAAM,MAAM,QAAQ,OAAO;AAC3C,gBAAM,SAAS,MAAM,GAAG;AACxB,gBAAM,cAAc,KAAK,KAAK,MAAM,EAAE,EAAE,OAAO,OAAQ,GAAE,OAAO;AAChE,cAAI,YAAY,QAAQ;AACtB,kBAAM,WAAW;AAAA,cACf,MAAM;AAAA,cACN,QAAQ;AAAA,cACR;AAAA,cACA;AAAA,cACA,OAAO;AAAA,YACR;AACD,uBAAW,SAAS,YAAY,QAAQ;AACtC,kBAAI,MAAM,MAAM;AACd,sBAAM,KAAK,QAAQ,QAAQ;AAAA,cAC3C,OAAqB;AACL,sBAAM,OAAO,CAAC,QAAQ;AAAA,cACtC;AACc,sBAAQ,QAAQ,KAAK,KAAK;AAAA,YACxC;AACY,gBAAI,CAAC,QAAQ,QAAQ;AACnB,sBAAQ,SAAS,YAAY;AAAA,YAC3C;AACY,gBAAI,QAAQ,YAAY;AACtB,sBAAQ,QAAQ;AAChB;AAAA,YACd;AAAA,UACA;AACU,cAAI,CAAC,YAAY,OAAO;AACtB,oBAAQ,QAAQ;AAAA,UAC5B;AACU,kBAAQ,MAAM,KAAK,YAAY,KAAK;AAAA,QAC9C;AAAA,MACA,OAAa;AACL,kBAAU,MAAM,QAAQ,SAAS,OAAO;AAAA,MAChD;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AA6GA,SAAS,QAAQ,SAAS;AACxB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,IACP;AAAA,IACA,IAAI,cAAc;AAChB,aAAO,kBAAkB,IAAI;AAAA,IAC9B;AAAA,IACD,OAAO,SAAS,SAAS;AACvB,UAAI,OAAO,QAAQ,UAAU,WAAW;AACtC,gBAAQ,QAAQ;AAAA,MACxB,OAAa;AACL,kBAAU,MAAM,QAAQ,SAAS,OAAO;AAAA,MAChD;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AAgFA,SAAS,MAAM,QAAQ,SAAS;AAC9B,QAAM,UAAU,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAG,EAAA,MAAM,MAAM,MAAM;AAChG,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS,aAAa,QAAQ,IAAI,UAAU,GAAG,GAAG;AAAA,IAClD,OAAO;AAAA,IACP,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,IAAI,cAAc;AAChB,aAAO,kBAAkB,IAAI;AAAA,IAC9B;AAAA,IACD,OAAO,SAAS,SAAS;AACvB,UAAI,KAAK,QAAQ,SAAS,QAAQ,KAAK,GAAG;AACxC,gBAAQ,QAAQ;AAAA,MACxB,OAAa;AACL,kBAAU,MAAM,QAAQ,SAAS,OAAO;AAAA,MAChD;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AAq7BA,SAAS,MAAM,SAAS;AACtB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,IACP;AAAA,IACA,IAAI,cAAc;AAChB,aAAO,kBAAkB,IAAI;AAAA,IAC9B;AAAA,IACD,OAAO,SAAS,SAAS;AACvB,UAAI,QAAQ,UAAU,MAAM;AAC1B,gBAAQ,QAAQ;AAAA,MACxB,OAAa;AACL,kBAAU,MAAM,QAAQ,SAAS,OAAO;AAAA,MAChD;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AAmHA,SAAS,OAAO,SAAS;AACvB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,IACP;AAAA,IACA,IAAI,cAAc;AAChB,aAAO,kBAAkB,IAAI;AAAA,IAC9B;AAAA,IACD,OAAO,SAAS,SAAS;AACvB,UAAI,OAAO,QAAQ,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC9D,gBAAQ,QAAQ;AAAA,MACxB,OAAa;AACL,kBAAU,MAAM,QAAQ,SAAS,OAAO;AAAA,MAChD;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AAGA,SAAS,OAAO,SAAS,SAAS;AAChC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,IAAI,cAAc;AAChB,aAAO,kBAAkB,IAAI;AAAA,IAC9B;AAAA,IACD,OAAO,SAAS,SAAS;AACvB,YAAM,QAAQ,QAAQ;AACtB,UAAI,SAAS,OAAO,UAAU,UAAU;AACtC,gBAAQ,QAAQ;AAChB,gBAAQ,QAAQ,CAAE;AAClB,mBAAW,OAAO,KAAK,SAAS;AAC9B,gBAAM,SAAS,MAAM,GAAG;AACxB,gBAAM,eAAe,KAAK,QAAQ,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,OAAQ,GAAE,OAAO;AACzE,cAAI,aAAa,QAAQ;AACvB,kBAAM,WAAW;AAAA,cACf,MAAM;AAAA,cACN,QAAQ;AAAA,cACR;AAAA,cACA;AAAA,cACA,OAAO;AAAA,YACR;AACD,uBAAW,SAAS,aAAa,QAAQ;AACvC,kBAAI,MAAM,MAAM;AACd,sBAAM,KAAK,QAAQ,QAAQ;AAAA,cAC3C,OAAqB;AACL,sBAAM,OAAO,CAAC,QAAQ;AAAA,cACtC;AACc,sBAAQ,QAAQ,KAAK,KAAK;AAAA,YACxC;AACY,gBAAI,CAAC,QAAQ,QAAQ;AACnB,sBAAQ,SAAS,aAAa;AAAA,YAC5C;AACY,gBAAI,QAAQ,YAAY;AACtB,sBAAQ,QAAQ;AAChB;AAAA,YACd;AAAA,UACA;AACU,cAAI,CAAC,aAAa,OAAO;AACvB,oBAAQ,QAAQ;AAAA,UAC5B;AACU,cAAI,aAAa,UAAU,UAAU,OAAO,OAAO;AACjD,oBAAQ,MAAM,GAAG,IAAI,aAAa;AAAA,UAC9C;AAAA,QACA;AAAA,MACA,OAAa;AACL,kBAAU,MAAM,QAAQ,SAAS,OAAO;AAAA,MAChD;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AAgSA,SAAS,SAAS,SAAS,UAAU;AACnC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS,IAAI,QAAQ,OAAO;AAAA,IAC5B,OAAO;AAAA,IACP;AAAA,IACA,SAAS;AAAA,IACT,IAAI,cAAc;AAChB,aAAO,kBAAkB,IAAI;AAAA,IAC9B;AAAA,IACD,OAAO,SAAS,SAAS;AACvB,UAAI,QAAQ,UAAU,QAAQ;AAC5B,YAAI,KAAK,YAAY,QAAQ;AAC3B,kBAAQ,QAAQ,WAAW,MAAM,SAAS,OAAO;AAAA,QAC3D;AACQ,YAAI,QAAQ,UAAU,QAAQ;AAC5B,kBAAQ,QAAQ;AAChB,iBAAO;AAAA,QACjB;AAAA,MACA;AACM,aAAO,KAAK,QAAQ,MAAM,EAAE,SAAS,OAAO;AAAA,IAClD;AAAA,EACG;AACH;AAisBA,SAAS,OAAO,SAAS;AACvB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,IACP;AAAA,IACA,IAAI,cAAc;AAChB,aAAO,kBAAkB,IAAI;AAAA,IAC9B;AAAA,IACD,OAAO,SAAS,SAAS;AACvB,UAAI,OAAO,QAAQ,UAAU,UAAU;AACrC,gBAAQ,QAAQ;AAAA,MACxB,OAAa;AACL,kBAAU,MAAM,QAAQ,SAAS,OAAO;AAAA,MAChD;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AA8aA,SAAS,WAAW,UAAU;AAC5B,MAAI;AACJ,MAAI,UAAU;AACZ,eAAW,WAAW,UAAU;AAC9B,UAAI,QAAQ;AACV,eAAO,KAAK,GAAG,QAAQ,MAAM;AAAA,MACrC,OAAa;AACL,iBAAS,QAAQ;AAAA,MACzB;AAAA,IACA;AAAA,EACA;AACE,SAAO;AACT;AAGA,SAAS,MAAM,SAAS,SAAS;AAC/B,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,MACP,QAAQ,IAAI,CAAC,WAAW,OAAO,OAAO;AAAA,MACtC;AAAA,IACD;AAAA,IACD,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,IAAI,cAAc;AAChB,aAAO,kBAAkB,IAAI;AAAA,IAC9B;AAAA,IACD,OAAO,SAAS,SAAS;AACvB,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,iBAAW,UAAU,KAAK,SAAS;AACjC,cAAM,gBAAgB,OAAO,MAAM,EAAE,EAAE,OAAO,QAAQ,MAAO,GAAE,OAAO;AACtE,YAAI,cAAc,OAAO;AACvB,cAAI,cAAc,QAAQ;AACxB,gBAAI,eAAe;AACjB,4BAAc,KAAK,aAAa;AAAA,YAC9C,OAAmB;AACL,8BAAgB,CAAC,aAAa;AAAA,YAC5C;AAAA,UACA,OAAiB;AACL,2BAAe;AACf;AAAA,UACZ;AAAA,QACA,OAAe;AACL,cAAI,iBAAiB;AACnB,4BAAgB,KAAK,aAAa;AAAA,UAC9C,OAAiB;AACL,8BAAkB,CAAC,aAAa;AAAA,UAC5C;AAAA,QACA;AAAA,MACA;AACM,UAAI,cAAc;AAChB,eAAO;AAAA,MACf;AACM,UAAI,eAAe;AACjB,YAAI,cAAc,WAAW,GAAG;AAC9B,iBAAO,cAAc,CAAC;AAAA,QAChC;AACQ,kBAAU,MAAM,QAAQ,SAAS,SAAS;AAAA,UACxC,QAAQ,WAAW,aAAa;AAAA,QAC1C,CAAS;AACD,gBAAQ,QAAQ;AAAA,MACxB,WAAiB,iBAAiB,WAAW,GAAG;AACxC,eAAO,gBAAgB,CAAC;AAAA,MAChC,OAAa;AACL,kBAAU,MAAM,QAAQ,SAAS,SAAS;AAAA,UACxC,QAAQ,WAAW,eAAe;AAAA,QAC5C,CAAS;AAAA,MACT;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;AAsEA,SAAS,UAAU;AACjB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,IACP,IAAI,cAAc;AAChB,aAAO,kBAAkB,IAAI;AAAA,IAC9B;AAAA,IACD,OAAO,SAAS;AACd,cAAQ,QAAQ;AAChB,aAAO;AAAA,IACb;AAAA,EACG;AACH;AAkNA,SAAS,KAAK,QAAQ,MAAM;AAC1B,QAAM,UAAU;AAAA,IACd,GAAG,OAAO;AAAA,EACX;AACD,aAAW,OAAO,MAAM;AACtB,WAAO,QAAQ,GAAG;AAAA,EACtB;AACE,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA,IAAI,cAAc;AAChB,aAAO,kBAAkB,IAAI;AAAA,IACnC;AAAA,EACG;AACH;AAGA,SAAS,MAAM,QAAQ,OAAO,SAAS;AACrC,QAAM,UAAU,OAAO,MAAM,EAAE,EAAE,OAAO,MAAO,GAAE,gBAAgB,OAAO,CAAC;AACzE,MAAI,QAAQ,QAAQ;AAClB,UAAM,IAAI,UAAU,QAAQ,MAAM;AAAA,EACtC;AACE,SAAO,QAAQ;AACjB;AA4EA,SAAS,QAAQ,OAAO;AACtB,SAAO;AAAA,IACL,GAAG,MAAM,CAAC;AAAA,IACV,MAAM;AAAA,IACN,IAAI,cAAc;AAChB,aAAO,kBAAkB,IAAI;AAAA,IAC9B;AAAA,IACD,OAAO,SAAS,SAAS;AACvB,iBAAW,QAAQ,OAAO;AACxB,YAAI,KAAK,SAAS,YAAY;AAC5B,cAAI,QAAQ,WAAW,KAAK,SAAS,YAAY,KAAK,SAAS,mBAAmB;AAChF,oBAAQ,QAAQ;AAChB;AAAA,UACZ;AACU,cAAI,CAAC,QAAQ,UAAU,CAAC,QAAQ,cAAc,CAAC,QAAQ,gBAAgB;AACrE,sBAAU,KAAK,MAAM,EAAE,SAAS,OAAO;AAAA,UACnD;AAAA,QACA;AAAA,MACA;AACM,aAAO;AAAA,IACb;AAAA,EACG;AACH;","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/messages-utilisateur.js b/web/app/themes/haiku-atelier-2024/assets/js/messages-utilisateur.js new file mode 100644 index 00000000..4fdd9fe4 --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/js/messages-utilisateur.js @@ -0,0 +1,5 @@ +const ERREUR_GENERIQUE_SOUMISSION_ADRESSES = "Something went wrong while submitting the addresses. Please refresh your page and try again?"; +export { + ERREUR_GENERIQUE_SOUMISSION_ADRESSES as E +}; +//# sourceMappingURL=messages-utilisateur.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/messages-utilisateur.js.map b/web/app/themes/haiku-atelier-2024/assets/js/messages-utilisateur.js.map new file mode 100644 index 00000000..09f99238 --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/js/messages-utilisateur.js.map @@ -0,0 +1 @@ +{"version":3,"file":"messages-utilisateur.js","sources":["../../src/scripts/constantes/messages-utilisateur.ts"],"sourcesContent":["/** Constantes des Messages affichés aux Utilisateurs. */\n\nexport const ERREUR_GENERIQUE_SOUMISSION_ADRESSES =\n \"Something went wrong while submitting the addresses. Please refresh your page and try again?\";\n"],"names":[],"mappings":"AAEO,MAAM,uCACX;"} \ 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 38fd6ebc..7eb9f59f 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/messages.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/messages.js @@ -1,4 +1,4 @@ -import { p as parse } from "./index.DxUTT09Y.js"; +import { p as parse } from "./index.BAmxwLeJ.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 "./erreurs2.js"; import { W as WCErrorSchema } from "./erreurs3.js"; 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 ba1d6b14..f78223ec 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.DxUTT09Y.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.BAmxwLeJ.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/nombres.js b/web/app/themes/haiku-atelier-2024/assets/js/nombres.js index ec1ff482..e70eac22 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/nombres.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/nombres.js @@ -163,7 +163,15 @@ var n = { clamp }; const estEntreDeuxNombres = (nombre, min, max) => n.gte(nombre, min) && n.lt(nombre, max); +const diviseParCent = (n2) => Number(n2) / 100; +const arrondisAZeroOuDeuxDecimales = (n2) => Number(n2) / Math.round(Number(n2)) === 1 ? Number(n2).toFixed(0) : Number(n2).toFixed(2); +const inverseNombre = (n2) => Number(n2) * -1; +const formateEnEuros = (n2) => `${String(n2)}€`; export { - estEntreDeuxNombres as e + arrondisAZeroOuDeuxDecimales as a, + diviseParCent as d, + estEntreDeuxNombres as e, + formateEnEuros as f, + inverseNombre as i }; //# sourceMappingURL=nombres.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/nombres.js.map b/web/app/themes/haiku-atelier-2024/assets/js/nombres.js.map index e12ee968..c2c1dd66 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/nombres.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/nombres.js.map @@ -1 +1 @@ -{"version":3,"file":"nombres.js","sources":["../../../../../../node_modules/.pnpm/@mobily+ts-belt@4.0.0-rc.5/node_modules/@mobily/ts-belt/dist/index-272b4672.mjs","../../src/scripts/lib/nombres.ts"],"sourcesContent":["function mod_(t, n) {\n if (0 === n) {\n throw {\n RE_EXN_ID: \"Division_by_zero\",\n Error: new Error\n };\n }\n return t % n;\n}\n\nfunction placeholder(t) {}\n\nfunction pred(t) {\n return t - 1 | 0;\n}\n\nfunction succ(t) {\n return t + 1 | 0;\n}\n\nfunction _add(t, n) {\n return t + n;\n}\n\nfunction add() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _add(n, t[0]);\n };\n }\n return _add(arguments[0], arguments[1]);\n}\n\nfunction _subtract(t, n) {\n return t - n;\n}\n\nfunction subtract() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _subtract(n, t[0]);\n };\n }\n return _subtract(arguments[0], arguments[1]);\n}\n\nfunction _multiply(t, n) {\n return t * n;\n}\n\nfunction multiply() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _multiply(n, t[0]);\n };\n }\n return _multiply(arguments[0], arguments[1]);\n}\n\nfunction _divide(t, n) {\n return t / n;\n}\n\nfunction divide() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _divide(n, t[0]);\n };\n }\n return _divide(arguments[0], arguments[1]);\n}\n\nvar t = mod_;\n\nfunction modulo() {\n if (1 === arguments.length) {\n const n = arguments;\n return function fn(r) {\n return t(r, n[0]);\n };\n }\n return t(arguments[0], arguments[1]);\n}\n\nfunction _divideWithModulo(t, n) {\n return [ t / n, mod_(0 | t, 0 | n) ];\n}\n\nfunction divideWithModulo() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _divideWithModulo(n, t[0]);\n };\n }\n return _divideWithModulo(arguments[0], arguments[1]);\n}\n\nfunction _gt(t, n) {\n return t > n;\n}\n\nfunction gt() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _gt(n, t[0]);\n };\n }\n return _gt(arguments[0], arguments[1]);\n}\n\nfunction _gte(t, n) {\n return t >= n;\n}\n\nfunction gte() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _gte(n, t[0]);\n };\n }\n return _gte(arguments[0], arguments[1]);\n}\n\nfunction _lt(t, n) {\n return t < n;\n}\n\nfunction lt() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _lt(n, t[0]);\n };\n }\n return _lt(arguments[0], arguments[1]);\n}\n\nfunction _lte(t, n) {\n return t <= n;\n}\n\nfunction lte() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _lte(n, t[0]);\n };\n }\n return _lte(arguments[0], arguments[1]);\n}\n\nfunction _clamp(t, n, r) {\n return Math.min(Math.max(t, n), r);\n}\n\nfunction clamp() {\n if (2 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _clamp(n, t[0], t[1]);\n };\n }\n return _clamp(arguments[0], arguments[1], arguments[2]);\n}\n\nvar n = {\n __proto__: null,\n placeholder,\n pred,\n succ,\n add,\n subtract,\n multiply,\n divide,\n modulo,\n divideWithModulo,\n gt,\n gte,\n lt,\n lte,\n clamp\n};\n\nexport { pred as a, add as b, subtract as c, divide as d, modulo as e, divideWithModulo as f, gt as g, gte as h, n as i, lte as j, clamp as k, lt as l, multiply as m, placeholder as p, succ as s };\n","import { N } from \"@mobily/ts-belt\";\n\nexport const estEntreDeuxNombres = (nombre: number, min: number, max: number): boolean =>\n N.gte(nombre, min) && N.lt(nombre, max);\n"],"names":["t","n","N"],"mappings":"AAAA,SAAS,KAAKA,IAAGC,IAAG;AAClB,MAAI,MAAMA,IAAG;AACX,UAAM;AAAA,MACJ,WAAW;AAAA,MACX,OAAO,IAAI;AAAA,IACZ;AAAA,EACL;AACE,SAAOD,KAAIC;AACb;AAEA,SAAS,YAAYD,IAAG;AAAA;AAExB,SAAS,KAAKA,IAAG;AACf,SAAOA,KAAI,IAAI;AACjB;AAEA,SAAS,KAAKA,IAAG;AACf,SAAOA,KAAI,IAAI;AACjB;AAEA,SAAS,KAAKA,IAAGC,IAAG;AAClB,SAAOD,KAAIC;AACb;AAEA,SAAS,MAAM;AACb,MAAI,MAAM,UAAU,QAAQ;AAC1B,UAAMD,KAAI;AACV,WAAO,SAAS,GAAGC,IAAG;AACpB,aAAO,KAAKA,IAAGD,GAAE,CAAC,CAAC;AAAA,IACpB;AAAA,EACL;AACE,SAAO,KAAK,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AACxC;AAEA,SAAS,UAAUA,IAAGC,IAAG;AACvB,SAAOD,KAAIC;AACb;AAEA,SAAS,WAAW;AAClB,MAAI,MAAM,UAAU,QAAQ;AAC1B,UAAMD,KAAI;AACV,WAAO,SAAS,GAAGC,IAAG;AACpB,aAAO,UAAUA,IAAGD,GAAE,CAAC,CAAC;AAAA,IACzB;AAAA,EACL;AACE,SAAO,UAAU,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AAC7C;AAEA,SAAS,UAAUA,IAAGC,IAAG;AACvB,SAAOD,KAAIC;AACb;AAEA,SAAS,WAAW;AAClB,MAAI,MAAM,UAAU,QAAQ;AAC1B,UAAMD,KAAI;AACV,WAAO,SAAS,GAAGC,IAAG;AACpB,aAAO,UAAUA,IAAGD,GAAE,CAAC,CAAC;AAAA,IACzB;AAAA,EACL;AACE,SAAO,UAAU,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AAC7C;AAEA,SAAS,QAAQA,IAAGC,IAAG;AACrB,SAAOD,KAAIC;AACb;AAEA,SAAS,SAAS;AAChB,MAAI,MAAM,UAAU,QAAQ;AAC1B,UAAMD,KAAI;AACV,WAAO,SAAS,GAAGC,IAAG;AACpB,aAAO,QAAQA,IAAGD,GAAE,CAAC,CAAC;AAAA,IACvB;AAAA,EACL;AACE,SAAO,QAAQ,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AAC3C;AAEA,IAAI,IAAI;AAER,SAAS,SAAS;AAChB,MAAI,MAAM,UAAU,QAAQ;AAC1B,UAAMC,KAAI;AACV,WAAO,SAAS,GAAG,GAAG;AACpB,aAAO,EAAE,GAAGA,GAAE,CAAC,CAAC;AAAA,IACjB;AAAA,EACL;AACE,SAAO,EAAE,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AACrC;AAEA,SAAS,kBAAkBD,IAAGC,IAAG;AAC/B,SAAO,CAAED,KAAIC,IAAG,KAAK,IAAID,IAAG,IAAIC,EAAC,CAAG;AACtC;AAEA,SAAS,mBAAmB;AAC1B,MAAI,MAAM,UAAU,QAAQ;AAC1B,UAAMD,KAAI;AACV,WAAO,SAAS,GAAGC,IAAG;AACpB,aAAO,kBAAkBA,IAAGD,GAAE,CAAC,CAAC;AAAA,IACjC;AAAA,EACL;AACE,SAAO,kBAAkB,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AACrD;AAEA,SAAS,IAAIA,IAAGC,IAAG;AACjB,SAAOD,KAAIC;AACb;AAEA,SAAS,KAAK;AACZ,MAAI,MAAM,UAAU,QAAQ;AAC1B,UAAMD,KAAI;AACV,WAAO,SAAS,GAAGC,IAAG;AACpB,aAAO,IAAIA,IAAGD,GAAE,CAAC,CAAC;AAAA,IACnB;AAAA,EACL;AACE,SAAO,IAAI,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AACvC;AAEA,SAAS,KAAKA,IAAGC,IAAG;AAClB,SAAOD,MAAKC;AACd;AAEA,SAAS,MAAM;AACb,MAAI,MAAM,UAAU,QAAQ;AAC1B,UAAMD,KAAI;AACV,WAAO,SAAS,GAAGC,IAAG;AACpB,aAAO,KAAKA,IAAGD,GAAE,CAAC,CAAC;AAAA,IACpB;AAAA,EACL;AACE,SAAO,KAAK,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AACxC;AAEA,SAAS,IAAIA,IAAGC,IAAG;AACjB,SAAOD,KAAIC;AACb;AAEA,SAAS,KAAK;AACZ,MAAI,MAAM,UAAU,QAAQ;AAC1B,UAAMD,KAAI;AACV,WAAO,SAAS,GAAGC,IAAG;AACpB,aAAO,IAAIA,IAAGD,GAAE,CAAC,CAAC;AAAA,IACnB;AAAA,EACL;AACE,SAAO,IAAI,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AACvC;AAEA,SAAS,KAAKA,IAAGC,IAAG;AAClB,SAAOD,MAAKC;AACd;AAEA,SAAS,MAAM;AACb,MAAI,MAAM,UAAU,QAAQ;AAC1B,UAAMD,KAAI;AACV,WAAO,SAAS,GAAGC,IAAG;AACpB,aAAO,KAAKA,IAAGD,GAAE,CAAC,CAAC;AAAA,IACpB;AAAA,EACL;AACE,SAAO,KAAK,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AACxC;AAEA,SAAS,OAAOA,IAAGC,IAAG,GAAG;AACvB,SAAO,KAAK,IAAI,KAAK,IAAID,IAAGC,EAAC,GAAG,CAAC;AACnC;AAEA,SAAS,QAAQ;AACf,MAAI,MAAM,UAAU,QAAQ;AAC1B,UAAMD,KAAI;AACV,WAAO,SAAS,GAAGC,IAAG;AACpB,aAAO,OAAOA,IAAGD,GAAE,CAAC,GAAGA,GAAE,CAAC,CAAC;AAAA,IAC5B;AAAA,EACL;AACE,SAAO,OAAO,UAAU,CAAC,GAAG,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AACxD;AAEA,IAAI,IAAI;AAAA,EACN,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AC1LO,MAAM,sBAAsB,CAAC,QAAgB,KAAa,QAC/DE,EAAE,IAAI,QAAQ,GAAG,KAAKA,EAAE,GAAG,QAAQ,GAAG;","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"nombres.js","sources":["../../../../../../node_modules/.pnpm/@mobily+ts-belt@4.0.0-rc.5/node_modules/@mobily/ts-belt/dist/index-272b4672.mjs","../../src/scripts/lib/nombres.ts"],"sourcesContent":["function mod_(t, n) {\n if (0 === n) {\n throw {\n RE_EXN_ID: \"Division_by_zero\",\n Error: new Error\n };\n }\n return t % n;\n}\n\nfunction placeholder(t) {}\n\nfunction pred(t) {\n return t - 1 | 0;\n}\n\nfunction succ(t) {\n return t + 1 | 0;\n}\n\nfunction _add(t, n) {\n return t + n;\n}\n\nfunction add() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _add(n, t[0]);\n };\n }\n return _add(arguments[0], arguments[1]);\n}\n\nfunction _subtract(t, n) {\n return t - n;\n}\n\nfunction subtract() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _subtract(n, t[0]);\n };\n }\n return _subtract(arguments[0], arguments[1]);\n}\n\nfunction _multiply(t, n) {\n return t * n;\n}\n\nfunction multiply() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _multiply(n, t[0]);\n };\n }\n return _multiply(arguments[0], arguments[1]);\n}\n\nfunction _divide(t, n) {\n return t / n;\n}\n\nfunction divide() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _divide(n, t[0]);\n };\n }\n return _divide(arguments[0], arguments[1]);\n}\n\nvar t = mod_;\n\nfunction modulo() {\n if (1 === arguments.length) {\n const n = arguments;\n return function fn(r) {\n return t(r, n[0]);\n };\n }\n return t(arguments[0], arguments[1]);\n}\n\nfunction _divideWithModulo(t, n) {\n return [ t / n, mod_(0 | t, 0 | n) ];\n}\n\nfunction divideWithModulo() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _divideWithModulo(n, t[0]);\n };\n }\n return _divideWithModulo(arguments[0], arguments[1]);\n}\n\nfunction _gt(t, n) {\n return t > n;\n}\n\nfunction gt() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _gt(n, t[0]);\n };\n }\n return _gt(arguments[0], arguments[1]);\n}\n\nfunction _gte(t, n) {\n return t >= n;\n}\n\nfunction gte() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _gte(n, t[0]);\n };\n }\n return _gte(arguments[0], arguments[1]);\n}\n\nfunction _lt(t, n) {\n return t < n;\n}\n\nfunction lt() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _lt(n, t[0]);\n };\n }\n return _lt(arguments[0], arguments[1]);\n}\n\nfunction _lte(t, n) {\n return t <= n;\n}\n\nfunction lte() {\n if (1 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _lte(n, t[0]);\n };\n }\n return _lte(arguments[0], arguments[1]);\n}\n\nfunction _clamp(t, n, r) {\n return Math.min(Math.max(t, n), r);\n}\n\nfunction clamp() {\n if (2 === arguments.length) {\n const t = arguments;\n return function fn(n) {\n return _clamp(n, t[0], t[1]);\n };\n }\n return _clamp(arguments[0], arguments[1], arguments[2]);\n}\n\nvar n = {\n __proto__: null,\n placeholder,\n pred,\n succ,\n add,\n subtract,\n multiply,\n divide,\n modulo,\n divideWithModulo,\n gt,\n gte,\n lt,\n lte,\n clamp\n};\n\nexport { pred as a, add as b, subtract as c, divide as d, modulo as e, divideWithModulo as f, gt as g, gte as h, n as i, lte as j, clamp as k, lt as l, multiply as m, placeholder as p, succ as s };\n","import { N, pipe } from \"@mobily/ts-belt\";\n\nexport const estEntreDeuxNombres = (nombre: number, min: number, max: number): boolean =>\n N.gte(nombre, min) && N.lt(nombre, max);\n\nexport const diviseParCent = (n: number | string): number => Number(n) / 100;\n\nexport const arrondisAZeroOuDeuxDecimales = (n: number | string): string =>\n (Number(n) / Math.round(Number(n))) === 1 ? Number(n).toFixed(0) : Number(n).toFixed(2);\n\nexport const inverseNombre = (n: number | string): number => Number(n) * -1;\n\nexport const formateEnEuros = (n: number | string): string => `${String(n)}€`;\n\nexport const diviseParCentEtArrondis = (nombre: number | string): string =>\n pipe(Number(nombre), diviseParCent, arrondisAZeroOuDeuxDecimales);\n"],"names":["t","n","N"],"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/orders.js b/web/app/themes/haiku-atelier-2024/assets/js/orders.js index fdf97833..431da1d5 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/orders.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/orders.js @@ -1,2 +1,162 @@ - +import { o as object, a as pipe, b as array, s as string, e as enum_, d as union, k as optional, c as boolean, u as unknown, h as integer, n as number, f as null_ } from "./index.BAmxwLeJ.js"; +import { T as TAX_STATUSES, O as ORDER_STATUSES } from "./orders2.js"; +import { W as WCStoreBillingAddressSchema, a as WCStoreShippingAddressSchema } from "./adresses.js"; +const WCV3OrdersCouponLineMetaDataSchema = object({ + id: pipe(number(), integer()), + key: string(), + value: unknown() +}); +const WCV3OrdersCouponLineSchema = object({ + code: string(), + discount: string(), + discount_tax: string(), + discount_type: string(), + free_shipping: boolean(), + id: pipe(number(), integer()), + meta_data: array(WCV3OrdersCouponLineMetaDataSchema), + nominal_amount: number() +}); +const WCV3OrdersFeeLineMetaDataSchema = object({ + id: pipe(number(), integer()), + key: string(), + value: unknown() +}); +const WCV3OrdersFeeLineTaxSchema = object({ + id: pipe(number(), integer()), + subtotal: string(), + total: string() +}); +const WCV3OrdersFeeLineSchema = object({ + id: pipe(number(), integer()), + meta_data: array(WCV3OrdersFeeLineMetaDataSchema), + name: string(), + tax_class: string(), + tax_status: enum_(TAX_STATUSES), + taxes: array(WCV3OrdersFeeLineTaxSchema), + total: string(), + total_tax: string() +}); +const WCV3OrdersShippingLineMetaDataSchema = object({ + id: pipe(number(), integer()), + key: string(), + value: unknown() +}); +const WCV3OrdersShippingLineTaxSchema = object({ + id: pipe(number(), integer()), + total: string() +}); +const WCV3OrdersShippingLineSchema = object({ + id: optional(pipe(number(), integer())), + meta_data: optional(array(WCV3OrdersShippingLineMetaDataSchema)), + method_id: optional(string()), + method_title: optional(string()), + taxes: optional(array(WCV3OrdersShippingLineTaxSchema)), + total: optional(string()), + total_tax: optional(string()) +}); +const WCV3OrdersLineItemImageSchema = object({ + id: union([string(), pipe(number(), integer())]), + src: string() +}); +const WCV3OrdersLineItemMetaDataSchema = object({ + display_key: string(), + display_value: string(), + id: pipe(number(), integer()), + key: string(), + value: unknown() +}); +const WCV3OrdersLineItemTaxSchema = object({ + id: pipe(number(), integer()), + subtotal: string(), + total: string() +}); +const WCV3OrdersLineItemSchema = object({ + id: optional(pipe(number(), integer())), + image: optional(WCV3OrdersLineItemImageSchema), + meta_data: optional(array(WCV3OrdersLineItemMetaDataSchema)), + name: optional(string()), + parent_name: optional(union([string(), null_()])), + price: optional(number()), + product_id: optional(pipe(number(), integer())), + quantity: optional(pipe(number(), integer())), + sku: optional(string()), + subtotal: optional(string()), + subtotal_tax: optional(string()), + tax_class: optional(string()), + taxes: optional(array(WCV3OrdersLineItemTaxSchema)), + total: optional(string()), + total_tax: optional(string()), + variation_id: optional(pipe(number(), integer())) +}); +const WCV3OrdersArgsSchema = object({ + billing: optional(WCStoreBillingAddressSchema), + coupon_lines: optional(array(WCV3OrdersCouponLineSchema)), + currency: optional(string()), + customer_id: optional(pipe(number(), integer())), + customer_note: optional(string()), + fee_lines: optional(array(WCV3OrdersFeeLineSchema)), + line_items: optional(array(WCV3OrdersLineItemSchema)), + manual_update: optional(boolean()), + parent_id: optional(pipe(number(), integer())), + payment_method: optional(string()), + payment_method_title: optional(string()), + set_paid: optional(boolean()), + shipping: optional(WCStoreShippingAddressSchema), + shipping_lines: optional(array(WCV3OrdersShippingLineSchema)), + status: optional(enum_(ORDER_STATUSES)), + transaction_id: optional(string()) +}); +const WCV3OrderSchema = object({ + billing: WCStoreBillingAddressSchema, + cart_hash: string(), + cart_tax: string(), + coupon_lines: array(WCV3OrdersCouponLineSchema), + created_via: string(), + currency: string(), + currency_symbol: string(), + customer_id: pipe(number(), integer()), + customer_ip_address: string(), + customer_note: string(), + customer_user_agent: string(), + date_completed: union([string(), null_()]), + date_completed_gmt: union([string(), null_()]), + // Date + date_created: string(), + date_created_gmt: string(), + date_modified: string(), + date_modified_gmt: string(), + date_paid: union([string(), null_()]), + date_paid_gmt: union([string(), null_()]), + discount_tax: string(), + discount_total: string(), + fee_lines: array(WCV3OrdersFeeLineSchema), + id: pipe(number(), integer()), + is_editable: boolean(), + line_items: array(WCV3OrdersLineItemSchema), + meta_data: unknown(), + needs_payment: boolean(), + needs_processing: boolean(), + number: string(), + order_key: string(), + parent_id: pipe(number(), integer()), + payment_method: string(), + payment_method_title: string(), + payment_url: string(), + prices_include_tax: boolean(), + refunds: array(unknown()), + shipping: WCStoreShippingAddressSchema, + shipping_lines: array(WCV3OrdersShippingLineSchema), + shipping_tax: string(), + shipping_total: string(), + status: enum_(ORDER_STATUSES), + tax_lines: array(unknown()), + total: string(), + total_tax: string(), + transaction_id: string(), + version: string() +}); +export { + WCV3OrdersArgsSchema as W, + WCV3OrderSchema as a +}; //# sourceMappingURL=orders.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/orders.js.map b/web/app/themes/haiku-atelier-2024/assets/js/orders.js.map index 8e4a23f3..7b6bfac5 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/orders.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/orders.js.map @@ -1 +1 @@ -{"version":3,"file":"orders.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file +{"version":3,"file":"orders.js","sources":["../../src/scripts/lib/schemas/api/v3/orders.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport { ORDER_STATUSES, TAX_STATUSES } from \"../../../../constantes/orders\";\nimport { WCStoreBillingAddressSchema, WCStoreShippingAddressSchema } from \"../adresses\";\n\nexport const WCV3OrdersCouponLineMetaDataSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n key: v.string(),\n value: v.unknown(),\n});\n\nexport const WCV3OrdersCouponLineSchema = v.object({\n code: v.string(),\n discount: v.string(),\n discount_tax: v.string(),\n discount_type: v.string(),\n free_shipping: v.boolean(),\n id: v.pipe(v.number(), v.integer()),\n meta_data: v.array(WCV3OrdersCouponLineMetaDataSchema),\n nominal_amount: v.number(),\n});\n\nexport const WCV3OrdersFeeLineMetaDataSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n key: v.string(),\n value: v.unknown(),\n});\n\nexport const WCV3OrdersFeeLineTaxSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n subtotal: v.string(),\n total: v.string(),\n});\n\nexport const WCV3OrdersFeeLineSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n meta_data: v.array(WCV3OrdersFeeLineMetaDataSchema),\n name: v.string(),\n tax_class: v.string(),\n tax_status: v.enum(TAX_STATUSES),\n taxes: v.array(WCV3OrdersFeeLineTaxSchema),\n total: v.string(),\n total_tax: v.string(),\n});\n\nexport const WCV3OrdersShippingLineMetaDataSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n key: v.string(),\n value: v.unknown(),\n});\n\nexport const WCV3OrdersShippingLineTaxSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n total: v.string(),\n});\n\nexport const WCV3OrdersShippingLineSchema = v.object({\n id: v.optional(v.pipe(v.number(), v.integer())),\n meta_data: v.optional(v.array(WCV3OrdersShippingLineMetaDataSchema)),\n method_id: v.optional(v.string()),\n method_title: v.optional(v.string()),\n taxes: v.optional(v.array(WCV3OrdersShippingLineTaxSchema)),\n total: v.optional(v.string()),\n total_tax: v.optional(v.string()),\n});\n\nexport const WCV3OrdersLineItemImageSchema = v.object({\n id: v.union([v.string(), v.pipe(v.number(), v.integer())]),\n src: v.string(),\n});\n\nexport const WCV3OrdersLineItemMetaDataSchema = v.object({\n display_key: v.string(),\n display_value: v.string(),\n id: v.pipe(v.number(), v.integer()),\n key: v.string(),\n value: v.unknown(),\n});\n\nexport const WCV3OrdersLineItemTaxSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n subtotal: v.string(),\n total: v.string(),\n});\n\nexport const WCV3OrdersLineItemSchema = v.object({\n id: v.optional(v.pipe(v.number(), v.integer())),\n image: v.optional(WCV3OrdersLineItemImageSchema),\n meta_data: v.optional(v.array(WCV3OrdersLineItemMetaDataSchema)),\n name: v.optional(v.string()),\n parent_name: v.optional(v.union([v.string(), v.null()])),\n price: v.optional(v.number()),\n product_id: v.optional(v.pipe(v.number(), v.integer())),\n quantity: v.optional(v.pipe(v.number(), v.integer())),\n sku: v.optional(v.string()),\n subtotal: v.optional(v.string()),\n subtotal_tax: v.optional(v.string()),\n tax_class: v.optional(v.string()),\n taxes: v.optional(v.array(WCV3OrdersLineItemTaxSchema)),\n total: v.optional(v.string()),\n total_tax: v.optional(v.string()),\n variation_id: v.optional(v.pipe(v.number(), v.integer())),\n});\n\nexport const WCV3OrdersMetaDataSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n key: v.string(),\n value: v.unknown(),\n});\n\nexport const WCV3OrdersArgsSchema = v.object({\n billing: v.optional(WCStoreBillingAddressSchema),\n coupon_lines: v.optional(v.array(WCV3OrdersCouponLineSchema)),\n currency: v.optional(v.string()),\n customer_id: v.optional(v.pipe(v.number(), v.integer())),\n customer_note: v.optional(v.string()),\n fee_lines: v.optional(v.array(WCV3OrdersFeeLineSchema)),\n line_items: v.optional(v.array(WCV3OrdersLineItemSchema)),\n manual_update: v.optional(v.boolean()),\n parent_id: v.optional(v.pipe(v.number(), v.integer())),\n payment_method: v.optional(v.string()),\n payment_method_title: v.optional(v.string()),\n set_paid: v.optional(v.boolean()),\n shipping: v.optional(WCStoreShippingAddressSchema),\n shipping_lines: v.optional(v.array(WCV3OrdersShippingLineSchema)),\n status: v.optional(v.enum(ORDER_STATUSES)),\n transaction_id: v.optional(v.string()),\n});\n\nexport const WCV3OrderSchema = v.object({\n billing: WCStoreBillingAddressSchema,\n cart_hash: v.string(),\n cart_tax: v.string(),\n coupon_lines: v.array(WCV3OrdersCouponLineSchema),\n created_via: v.string(),\n currency: v.string(),\n currency_symbol: v.string(),\n customer_id: v.pipe(v.number(), v.integer()),\n customer_ip_address: v.string(),\n customer_note: v.string(),\n customer_user_agent: v.string(),\n date_completed: v.union([v.string(), v.null()]),\n date_completed_gmt: v.union([v.string(), v.null()]),\n // Date\n date_created: v.string(),\n date_created_gmt: v.string(),\n date_modified: v.string(),\n date_modified_gmt: v.string(),\n date_paid: v.union([v.string(), v.null()]),\n date_paid_gmt: v.union([v.string(), v.null()]),\n discount_tax: v.string(),\n discount_total: v.string(),\n fee_lines: v.array(WCV3OrdersFeeLineSchema),\n id: v.pipe(v.number(), v.integer()),\n is_editable: v.boolean(),\n line_items: v.array(WCV3OrdersLineItemSchema),\n meta_data: v.unknown(),\n needs_payment: v.boolean(),\n needs_processing: v.boolean(),\n number: v.string(),\n order_key: v.string(),\n parent_id: v.pipe(v.number(), v.integer()),\n payment_method: v.string(),\n payment_method_title: v.string(),\n payment_url: v.string(),\n prices_include_tax: v.boolean(),\n refunds: v.array(v.unknown()),\n shipping: WCStoreShippingAddressSchema,\n shipping_lines: v.array(WCV3OrdersShippingLineSchema),\n shipping_tax: v.string(),\n shipping_total: v.string(),\n status: v.enum(ORDER_STATUSES),\n tax_lines: v.array(v.unknown()),\n total: v.string(),\n total_tax: v.string(),\n transaction_id: v.string(),\n version: v.string(),\n});\n"],"names":["v.object","v.pipe","v.number","v.integer","v.string","v.unknown","v.boolean","v.array","v.enum","v.optional","v.union","v.null"],"mappings":"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"} \ No newline at end of file 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 59c64690..f2f9ac56 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/orders2.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/orders2.js @@ -1,162 +1,20 @@ -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({ - id: pipe(number(), integer()), - key: string(), - value: unknown() -}); -const WCV3OrdersCouponLineSchema = object({ - code: string(), - discount: string(), - discount_tax: string(), - discount_type: string(), - free_shipping: boolean(), - id: pipe(number(), integer()), - meta_data: array(WCV3OrdersCouponLineMetaDataSchema), - nominal_amount: number() -}); -const WCV3OrdersFeeLineMetaDataSchema = object({ - id: pipe(number(), integer()), - key: string(), - value: unknown() -}); -const WCV3OrdersFeeLineTaxSchema = object({ - id: pipe(number(), integer()), - subtotal: string(), - total: string() -}); -const WCV3OrdersFeeLineSchema = object({ - id: pipe(number(), integer()), - meta_data: array(WCV3OrdersFeeLineMetaDataSchema), - name: string(), - tax_class: string(), - tax_status: enum_(TAX_STATUSES), - taxes: array(WCV3OrdersFeeLineTaxSchema), - total: string(), - total_tax: string() -}); -const WCV3OrdersShippingLineMetaDataSchema = object({ - id: pipe(number(), integer()), - key: string(), - value: unknown() -}); -const WCV3OrdersShippingLineTaxSchema = object({ - id: pipe(number(), integer()), - total: string() -}); -const WCV3OrdersShippingLineSchema = object({ - id: optional(pipe(number(), integer())), - meta_data: optional(array(WCV3OrdersShippingLineMetaDataSchema)), - method_id: optional(string()), - method_title: optional(string()), - taxes: optional(array(WCV3OrdersShippingLineTaxSchema)), - total: optional(string()), - total_tax: optional(string()) -}); -const WCV3OrdersLineItemImageSchema = object({ - id: union([string(), pipe(number(), integer())]), - src: string() -}); -const WCV3OrdersLineItemMetaDataSchema = object({ - display_key: string(), - display_value: string(), - id: pipe(number(), integer()), - key: string(), - value: unknown() -}); -const WCV3OrdersLineItemTaxSchema = object({ - id: pipe(number(), integer()), - subtotal: string(), - total: string() -}); -const WCV3OrdersLineItemSchema = object({ - id: optional(pipe(number(), integer())), - image: optional(WCV3OrdersLineItemImageSchema), - meta_data: optional(array(WCV3OrdersLineItemMetaDataSchema)), - name: optional(string()), - parent_name: optional(union([string(), null_()])), - price: optional(number()), - product_id: optional(pipe(number(), integer())), - quantity: optional(pipe(number(), integer())), - sku: optional(string()), - subtotal: optional(string()), - subtotal_tax: optional(string()), - tax_class: optional(string()), - taxes: optional(array(WCV3OrdersLineItemTaxSchema)), - total: optional(string()), - total_tax: optional(string()), - variation_id: optional(pipe(number(), integer())) -}); -const WCV3OrdersArgsSchema = object({ - billing: optional(WCStoreBillingAddressSchema), - coupon_lines: optional(array(WCV3OrdersCouponLineSchema)), - currency: optional(string()), - customer_id: optional(pipe(number(), integer())), - customer_note: optional(string()), - fee_lines: optional(array(WCV3OrdersFeeLineSchema)), - line_items: optional(array(WCV3OrdersLineItemSchema)), - manual_update: optional(boolean()), - parent_id: optional(pipe(number(), integer())), - payment_method: optional(string()), - payment_method_title: optional(string()), - set_paid: optional(boolean()), - shipping: optional(WCStoreShippingAddressSchema), - shipping_lines: optional(array(WCV3OrdersShippingLineSchema)), - status: optional(enum_(ORDER_STATUSES)), - transaction_id: optional(string()) -}); -const WCV3OrderSchema = object({ - billing: WCStoreBillingAddressSchema, - cart_hash: string(), - cart_tax: string(), - coupon_lines: array(WCV3OrdersCouponLineSchema), - created_via: string(), - currency: string(), - currency_symbol: string(), - customer_id: pipe(number(), integer()), - customer_ip_address: string(), - customer_note: string(), - customer_user_agent: string(), - date_completed: union([string(), null_()]), - date_completed_gmt: union([string(), null_()]), - // Date - date_created: string(), - date_created_gmt: string(), - date_modified: string(), - date_modified_gmt: string(), - date_paid: union([string(), null_()]), - date_paid_gmt: union([string(), null_()]), - discount_tax: string(), - discount_total: string(), - fee_lines: array(WCV3OrdersFeeLineSchema), - id: pipe(number(), integer()), - is_editable: boolean(), - line_items: array(WCV3OrdersLineItemSchema), - meta_data: unknown(), - needs_payment: boolean(), - needs_processing: boolean(), - number: string(), - order_key: string(), - parent_id: pipe(number(), integer()), - payment_method: string(), - payment_method_title: string(), - payment_url: string(), - prices_include_tax: boolean(), - refunds: array(unknown()), - shipping: WCStoreShippingAddressSchema, - shipping_lines: array(WCV3OrdersShippingLineSchema), - shipping_tax: string(), - shipping_total: string(), - status: enum_(ORDER_STATUSES), - tax_lines: array(unknown()), - total: string(), - total_tax: string(), - transaction_id: string(), - version: string() -}); +const ORDER_STATUSES = { + AUTO_DRAFT: "auto-draft", + CANCELLED: "cancelled", + CHECKOUT_DRAFT: "checkout-draft", + COMPLETED: "completed", + FAILED: "failed", + ON_HOLD: "on-hold", + PENDING: "pending", + PROCESSING: "processing", + REFUNDED: "refuneded" +}; +const TAX_STATUSES = { + NONE: "none", + TAXABLE: "taxable" +}; export { - WCV3OrdersArgsSchema as W, - WCV3OrderSchema as a + ORDER_STATUSES as O, + TAX_STATUSES as T }; //# sourceMappingURL=orders2.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/orders2.js.map b/web/app/themes/haiku-atelier-2024/assets/js/orders2.js.map index a0a2cb9d..a60c6efa 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/orders2.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/orders2.js.map @@ -1 +1 @@ -{"version":3,"file":"orders2.js","sources":["../../src/scripts/lib/schemas/api/v3/orders.ts"],"sourcesContent":["import * as v from \"valibot\";\n\nimport { ORDER_STATUSES, TAX_STATUSES } from \"../../../../constantes/orders\";\nimport { WCStoreBillingAddressSchema, WCStoreShippingAddressSchema } from \"../adresses\";\n\nexport const WCV3OrdersCouponLineMetaDataSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n key: v.string(),\n value: v.unknown(),\n});\n\nexport const WCV3OrdersCouponLineSchema = v.object({\n code: v.string(),\n discount: v.string(),\n discount_tax: v.string(),\n discount_type: v.string(),\n free_shipping: v.boolean(),\n id: v.pipe(v.number(), v.integer()),\n meta_data: v.array(WCV3OrdersCouponLineMetaDataSchema),\n nominal_amount: v.number(),\n});\n\nexport const WCV3OrdersFeeLineMetaDataSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n key: v.string(),\n value: v.unknown(),\n});\n\nexport const WCV3OrdersFeeLineTaxSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n subtotal: v.string(),\n total: v.string(),\n});\n\nexport const WCV3OrdersFeeLineSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n meta_data: v.array(WCV3OrdersFeeLineMetaDataSchema),\n name: v.string(),\n tax_class: v.string(),\n tax_status: v.enum(TAX_STATUSES),\n taxes: v.array(WCV3OrdersFeeLineTaxSchema),\n total: v.string(),\n total_tax: v.string(),\n});\n\nexport const WCV3OrdersShippingLineMetaDataSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n key: v.string(),\n value: v.unknown(),\n});\n\nexport const WCV3OrdersShippingLineTaxSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n total: v.string(),\n});\n\nexport const WCV3OrdersShippingLineSchema = v.object({\n id: v.optional(v.pipe(v.number(), v.integer())),\n meta_data: v.optional(v.array(WCV3OrdersShippingLineMetaDataSchema)),\n method_id: v.optional(v.string()),\n method_title: v.optional(v.string()),\n taxes: v.optional(v.array(WCV3OrdersShippingLineTaxSchema)),\n total: v.optional(v.string()),\n total_tax: v.optional(v.string()),\n});\n\nexport const WCV3OrdersLineItemImageSchema = v.object({\n id: v.union([v.string(), v.pipe(v.number(), v.integer())]),\n src: v.string(),\n});\n\nexport const WCV3OrdersLineItemMetaDataSchema = v.object({\n display_key: v.string(),\n display_value: v.string(),\n id: v.pipe(v.number(), v.integer()),\n key: v.string(),\n value: v.unknown(),\n});\n\nexport const WCV3OrdersLineItemTaxSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n subtotal: v.string(),\n total: v.string(),\n});\n\nexport const WCV3OrdersLineItemSchema = v.object({\n id: v.optional(v.pipe(v.number(), v.integer())),\n image: v.optional(WCV3OrdersLineItemImageSchema),\n meta_data: v.optional(v.array(WCV3OrdersLineItemMetaDataSchema)),\n name: v.optional(v.string()),\n parent_name: v.optional(v.union([v.string(), v.null()])),\n price: v.optional(v.number()),\n product_id: v.optional(v.pipe(v.number(), v.integer())),\n quantity: v.optional(v.pipe(v.number(), v.integer())),\n sku: v.optional(v.string()),\n subtotal: v.optional(v.string()),\n subtotal_tax: v.optional(v.string()),\n tax_class: v.optional(v.string()),\n taxes: v.optional(v.array(WCV3OrdersLineItemTaxSchema)),\n total: v.optional(v.string()),\n total_tax: v.optional(v.string()),\n variation_id: v.optional(v.pipe(v.number(), v.integer())),\n});\n\nexport const WCV3OrdersMetaDataSchema = v.object({\n id: v.pipe(v.number(), v.integer()),\n key: v.string(),\n value: v.unknown(),\n});\n\nexport const WCV3OrdersArgsSchema = v.object({\n billing: v.optional(WCStoreBillingAddressSchema),\n coupon_lines: v.optional(v.array(WCV3OrdersCouponLineSchema)),\n currency: v.optional(v.string()),\n customer_id: v.optional(v.pipe(v.number(), v.integer())),\n customer_note: v.optional(v.string()),\n fee_lines: v.optional(v.array(WCV3OrdersFeeLineSchema)),\n line_items: v.optional(v.array(WCV3OrdersLineItemSchema)),\n manual_update: v.optional(v.boolean()),\n parent_id: v.optional(v.pipe(v.number(), v.integer())),\n payment_method: v.optional(v.string()),\n payment_method_title: v.optional(v.string()),\n set_paid: v.optional(v.boolean()),\n shipping: v.optional(WCStoreShippingAddressSchema),\n shipping_lines: v.optional(v.array(WCV3OrdersShippingLineSchema)),\n status: v.optional(v.enum(ORDER_STATUSES)),\n transaction_id: v.optional(v.string()),\n});\n\nexport const WCV3OrderSchema = v.object({\n billing: WCStoreBillingAddressSchema,\n cart_hash: v.string(),\n cart_tax: v.string(),\n coupon_lines: v.array(WCV3OrdersCouponLineSchema),\n created_via: v.string(),\n currency: v.string(),\n currency_symbol: v.string(),\n customer_id: v.pipe(v.number(), v.integer()),\n customer_ip_address: v.string(),\n customer_note: v.string(),\n customer_user_agent: v.string(),\n date_completed: v.union([v.string(), v.null()]),\n date_completed_gmt: v.union([v.string(), v.null()]),\n // Date\n date_created: v.string(),\n date_created_gmt: v.string(),\n date_modified: v.string(),\n date_modified_gmt: v.string(),\n date_paid: v.union([v.string(), v.null()]),\n date_paid_gmt: v.union([v.string(), v.null()]),\n discount_tax: v.string(),\n discount_total: v.string(),\n fee_lines: v.array(WCV3OrdersFeeLineSchema),\n id: v.pipe(v.number(), v.integer()),\n is_editable: v.boolean(),\n line_items: v.array(WCV3OrdersLineItemSchema),\n meta_data: v.unknown(),\n needs_payment: v.boolean(),\n needs_processing: v.boolean(),\n number: v.string(),\n order_key: v.string(),\n parent_id: v.pipe(v.number(), v.integer()),\n payment_method: v.string(),\n payment_method_title: v.string(),\n payment_url: v.string(),\n prices_include_tax: v.boolean(),\n refunds: v.array(v.unknown()),\n shipping: WCStoreShippingAddressSchema,\n shipping_lines: v.array(WCV3OrdersShippingLineSchema),\n shipping_tax: v.string(),\n shipping_total: v.string(),\n status: v.enum(ORDER_STATUSES),\n tax_lines: v.array(v.unknown()),\n total: v.string(),\n total_tax: v.string(),\n transaction_id: v.string(),\n version: v.string(),\n});\n"],"names":["v.object","v.pipe","v.number","v.integer","v.string","v.unknown","v.boolean","v.array","v.enum","v.optional","v.union","v.null"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"orders2.js","sources":["../../src/scripts/constantes/orders.ts"],"sourcesContent":["export const ORDER_STATUSES = {\n AUTO_DRAFT: \"auto-draft\",\n CANCELLED: \"cancelled\",\n CHECKOUT_DRAFT: \"checkout-draft\",\n COMPLETED: \"completed\",\n FAILED: \"failed\",\n ON_HOLD: \"on-hold\",\n PENDING: \"pending\",\n PROCESSING: \"processing\",\n REFUNDED: \"refuneded\",\n} as const;\n\nexport const TAX_STATUSES = {\n NONE: \"none\",\n TAXABLE: \"taxable\",\n};\n"],"names":[],"mappings":"AAAO,MAAM,iBAAiB;AAAA,EAC5B,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,UAAU;AACZ;AAEO,MAAM,eAAe;AAAA,EAC1B,MAAM;AAAA,EACN,SAAS;AACX;"} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/orders3.js b/web/app/themes/haiku-atelier-2024/assets/js/orders3.js index 2cd7b6b6..25b9dbb2 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/orders3.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/orders3.js @@ -1,20 +1,2 @@ -const ORDER_STATUSES = { - AUTO_DRAFT: "auto-draft", - CANCELLED: "cancelled", - CHECKOUT_DRAFT: "checkout-draft", - COMPLETED: "completed", - FAILED: "failed", - ON_HOLD: "on-hold", - PENDING: "pending", - PROCESSING: "processing", - REFUNDED: "refuneded" -}; -const TAX_STATUSES = { - NONE: "none", - TAXABLE: "taxable" -}; -export { - ORDER_STATUSES as O, - TAX_STATUSES as T -}; + //# sourceMappingURL=orders3.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/orders3.js.map b/web/app/themes/haiku-atelier-2024/assets/js/orders3.js.map index 600fdf02..cc1e878e 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/orders3.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/orders3.js.map @@ -1 +1 @@ -{"version":3,"file":"orders3.js","sources":["../../src/scripts/constantes/orders.ts"],"sourcesContent":["export const ORDER_STATUSES = {\n AUTO_DRAFT: \"auto-draft\",\n CANCELLED: \"cancelled\",\n CHECKOUT_DRAFT: \"checkout-draft\",\n COMPLETED: \"completed\",\n FAILED: \"failed\",\n ON_HOLD: \"on-hold\",\n PENDING: \"pending\",\n PROCESSING: \"processing\",\n REFUNDED: \"refuneded\",\n} as const;\n\nexport const TAX_STATUSES = {\n NONE: \"none\",\n TAXABLE: \"taxable\",\n};\n"],"names":[],"mappings":"AAAO,MAAM,iBAAiB;AAAA,EAC5B,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,UAAU;AACZ;AAEO,MAAM,eAAe;AAAA,EAC1B,MAAM;AAAA,EACN,SAAS;AACX;"} \ No newline at end of file +{"version":3,"file":"orders3.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/web/app/themes/haiku-atelier-2024/assets/js/pays.js b/web/app/themes/haiku-atelier-2024/assets/js/pays.js new file mode 100644 index 00000000..ad97b17b --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/js/pays.js @@ -0,0 +1,2 @@ + +//# sourceMappingURL=pays.js.map diff --git a/web/app/themes/haiku-atelier-2024/assets/js/pays.js.map b/web/app/themes/haiku-atelier-2024/assets/js/pays.js.map new file mode 100644 index 00000000..790bf12d --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/assets/js/pays.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pays.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file 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 2797bdb3..ba3c058f 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, 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 { o as object, k as optional, e as enum_, a as pipe, m as minValue, n as number, l as maxValue, b as array, s as string, c as boolean, d as union, u as unknown, h as integer, f as null_, g as url } from "./index.BAmxwLeJ.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 a1650d68..0d6ad304 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, 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 { o as object, k 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, c as boolean, d as union, h as integer, f as null_ } from "./index.BAmxwLeJ.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 c9b44ae6..a9004291 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/reseau.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/reseau.js @@ -1,5 +1,5 @@ import { z, N } from "./index.CeK6pfoJ.js"; -import { p as parse } from "./index.DxUTT09Y.js"; +import { p as parse } from "./index.BAmxwLeJ.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 "./erreurs2.js"; import { e as estWCError } from "./erreurs3.js"; 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 961c514b..8fa7ca1e 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 @@ -7,7 +7,7 @@ import { p as pipe } from "./pipe.XPB0wEfw.js"; import "./erreurs2.js"; import "./exports.B84S-6H1.js"; import "./Either.wHNxn7Os.js"; -import "./index.DxUTT09Y.js"; +import "./index.BAmxwLeJ.js"; import "./erreurs3.js"; import "./messages2.js"; import "./cart.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 41134190..6ab6b464 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,7 +1,7 @@ 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 { $ as SELECTEUR_BOUTON_MENU_MOBILE, a0 as SELECTEUR_MENU_MOBILE, a1 as ATTRIBUT_MENU_MOBILE_ACTIVE } from "./dom.js"; +import { a0 as SELECTEUR_BOUTON_MENU_MOBILE, a1 as SELECTEUR_MENU_MOBILE, a2 as ATTRIBUT_MENU_MOBILE_ACTIVE } from "./dom.js"; import { a as recupereElementDansDocumentOuLeve } from "./utils.js"; import "./dom2.js"; import "./erreurs2.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 2096a605..437b64f8 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,4 +1,4 @@ -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 { a3 as ATTRIBUT_ID_ENSEMBLE_EPINGLE_BOITE, a4 as ATTRIBUT_ENSEMBLE_EPINGLE_BOITE_ACTIF, a5 as CLASS_BOUTON_FERMETURE_BOITE_TEXTE, a6 as CLASS_EPINGLE, a7 as SELECTEUR_CONTENEUR_STORYTELLING_A_PROPOS, a8 as SELECTEUR_EPINGLE, a9 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"; 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 714dbadd..c52675d5 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,101 +1,113 @@ import { z, N } from "./index.CeK6pfoJ.js"; -import { p as parse } from "./index.DxUTT09Y.js"; +import { V as ValiError } from "./index.BAmxwLeJ.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 { g as SELECTEUR_BOUTON_PLUS_PRODUITS, h as SELECTEUR_GRILLE_PRODUITS, i as ATTRIBUT_ID_CATEGORIE_PRODUITS, j as ATTRIBUT_PAGE, k as ATTRIBUT_DESACTIVE, l as ATTRIBUT_CHARGEMENT, m as ATTRIBUT_HIDDEN } from "./dom.js"; +import { l as lanceAnimationCycleTexte } from "./animations.js"; import { h as html } from "./dom2.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 { S as ServerError, B as BadRequestError } from "./erreurs2.js"; +import { g as getBackendAvecParametresUrl } from "./reseau.js"; import { W as WCV3ProductsArgsSchema, a as WCV3ProductsSchema } from "./products.js"; -import { a as recupereElementDansDocumentOuLeve, r as recupereElementDocumentEither } from "./utils.js"; +import { a as recupereElementDansDocumentOuLeve } from "./utils.js"; +import { e as eitherParse } from "./validation.js"; import { E as EitherAsync } from "./MaybeAsync.AE1jnxuc.js"; 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 "./Either.wHNxn7Os.js"; import "./exports.B84S-6H1.js"; import "./erreurs3.js"; import "./products2.js"; import "./belt_Option-91f3b350.cBye8bLJ.js"; const ETATS_PAGE = _etats; -const GRILLE_PRODUITS = recupereElementDansDocumentOuLeve(SELECTEUR_GRILLE_PRODUITS); -const BOUTON_PLUS_DE_PRODUITS = recupereElementDocumentEither( - SELECTEUR_BOUTON_PLUS_PRODUITS -); +const E = { + BOUTON_PLUS_DE_PRODUITS: recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_PLUS_PRODUITS), + GRILLE_PRODUITS: recupereElementDansDocumentOuLeve(SELECTEUR_GRILLE_PRODUITS) +}; const initialisePageBoutique = () => { - const idCategorieProduits = GRILLE_PRODUITS.getAttribute(ATTRIBUT_ID_CATEGORIE_PRODUITS); - BOUTON_PLUS_DE_PRODUITS.ifRight((bouton) => { - bouton.addEventListener("click", () => { - const nouvellePage = Number(GRILLE_PRODUITS.getAttribute(ATTRIBUT_PAGE)) + 1; - const args = { - page: nouvellePage, - per_page: 13, - // Ajoute conditionnellement la Catégorie de Produits - ...idCategorieProduits && { category: idCategorieProduits } - }; - Either.encase(() => parse(WCV3ProductsArgsSchema, args)).map( - async (args2) => { - await EitherAsync( - () => getBackendAvecParametresUrl({ - authString: ETATS_PAGE.authString, - nonce: ETATS_PAGE.nonce, - route: ROUTE_API_NOUVELLE_PRODUCTS, - searchParams: new URLSearchParams(args2).toString() - }) - ).map((reponse) => { - if (estReponse500(reponse)) leveServerError("500 Server Error"); - return reponse.json(); - }).map( - (corpsReponse) => ( - // Traite tous les codes HTTPs possibles - traiteReponseBackendWCSelonCodesHTTP( - corpsReponse, - WCV3ProductsSchema - ) - ) - ).ifRight((donnees) => { - if (donnees.length < 12) { - bouton.toggleAttribute(ATTRIBUT_HIDDEN); - } - const fragment = document.createDocumentFragment(); - for (const produit of donnees.slice(0, 12)) { - pipe( - html` -
-
- - - ${produit.image_repos ?? ""} - + const idCategorieProduits = E.GRILLE_PRODUITS.getAttribute(ATTRIBUT_ID_CATEGORIE_PRODUITS); + E.BOUTON_PLUS_DE_PRODUITS.addEventListener("click", () => { + const nouveauNumeroPage = Number(E.GRILLE_PRODUITS.getAttribute(ATTRIBUT_PAGE)) + 1; + const args = { + page: nouveauNumeroPage, + per_page: 12, + // Ajoute conditionnellement la Catégorie de Produits + ...idCategorieProduits && { category: idCategorieProduits } + }; + void EitherAsync.liftEither(eitherParse(args, WCV3ProductsArgsSchema)).ifRight(() => { + E.BOUTON_PLUS_DE_PRODUITS.setAttribute(ATTRIBUT_DESACTIVE, ""); + E.BOUTON_PLUS_DE_PRODUITS.setAttribute(ATTRIBUT_CHARGEMENT, ""); + const animation = lanceAnimationCycleTexte({ + attribut: ATTRIBUT_CHARGEMENT, + element: E.BOUTON_PLUS_DE_PRODUITS, + etapes: [ + "Loading", + "Loading.", + "Loading..", + "Loading..." + ] + }); + animation.callback(); + animation.interval = setInterval(animation.callback, 500); + }).chain( + (args2) => EitherAsync( + () => getBackendAvecParametresUrl({ + authString: ETATS_PAGE.authString, + nonce: ETATS_PAGE.nonce, + route: ROUTE_API_NOUVELLE_PRODUCTS, + searchParams: new URLSearchParams(args2).toString() + }) + ) + ).chain( + (reponse) => EitherAsync(async ({ throwE }) => { + const reponseSimplifiee = { + body: await reponse.json(), + status: reponse.status + }; + return z(reponseSimplifiee).with({ status: 500 }, () => throwE(new ServerError("500 Server Error"))).with({ status: 400 }, () => throwE(new BadRequestError("400 Server Error"))).with({ status: 200 }, () => reponseSimplifiee.body).run(); + }) + ).chain((corpsReponse) => EitherAsync.liftEither(eitherParse(corpsReponse, WCV3ProductsSchema))).ifRight((donnees) => { + if (donnees.length < 12) { + E.BOUTON_PLUS_DE_PRODUITS.toggleAttribute(ATTRIBUT_HIDDEN); + } + const fragment = document.createDocumentFragment(); + for (const produit of donnees.slice(0, 12)) { + pipe( + html` + - `, - tap((article) => { - fragment.appendChild(article); - }) - ); - } - GRILLE_PRODUITS.appendChild(fragment); - GRILLE_PRODUITS.setAttribute(ATTRIBUT_PAGE, String(nouvellePage)); - }).ifLeft((e) => { - z(e).with({ issues: N.select(), name: "ValiError" }, (problemes) => console.error("ValiError", problemes)).otherwise((e2) => console.error("Autre", e2.name, e2)); - }).void(); - } - ); - }); +
+

+ ${produit.name} +

+

+ ${produit.prix_maximal}€ +

+
+
+
+ `, + tap((article) => fragment.appendChild(article)) + ); + } + E.GRILLE_PRODUITS.appendChild(fragment); + E.GRILLE_PRODUITS.setAttribute(ATTRIBUT_PAGE, String(nouveauNumeroPage)); + E.BOUTON_PLUS_DE_PRODUITS.textContent = "Show more"; + }).ifLeft((erreur) => { + z(erreur).with(N.instanceOf(ValiError), (e) => console.error("ValiError", e.issues)).otherwise((e) => console.error("Erreur", e)); + E.BOUTON_PLUS_DE_PRODUITS.textContent = "Error, try again?"; + }).finally(() => { + E.BOUTON_PLUS_DE_PRODUITS.removeAttribute(ATTRIBUT_CHARGEMENT); + E.BOUTON_PLUS_DE_PRODUITS.removeAttribute(ATTRIBUT_DESACTIVE); + }).run(); }); }; document.addEventListener("DOMContentLoaded", () => { diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-boutique.js.map b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-boutique.js.map index fd034cf7..04c7525d 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-boutique.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-boutique.js.map @@ -1 +1 @@ -{"version":3,"file":"scripts-page-boutique.js","sources":["../../src/scripts/scripts-page-boutique.ts"],"sourcesContent":["/**\n * Scripts pour les fonctionnalités de la page Boutique.\n */\n\nimport { pipe } from \"@mobily/ts-belt\";\nimport { tap } from \"@mobily/ts-belt/Function\";\nimport { Either, EitherAsync } from \"purify-ts\";\nimport { match, P } from \"ts-pattern\";\nimport { parse, type ValiError } from \"valibot\";\n\nimport type { APIFetchErrors } from \"./lib/types/api/erreurs\";\nimport type { WCProductsArgs } from \"./lib/types/api/products\";\nimport type { WCV3Products, WCV3ProductsArgs } from \"./lib/types/api/v3/products.ts\";\n\nimport { ROUTE_API_NOUVELLE_PRODUCTS } from \"./constantes/api.ts\";\nimport {\n ATTRIBUT_HIDDEN,\n ATTRIBUT_ID_CATEGORIE_PRODUITS,\n ATTRIBUT_PAGE,\n SELECTEUR_BOUTON_PLUS_PRODUITS,\n SELECTEUR_GRILLE_PRODUITS,\n} from \"./constantes/dom.ts\";\nimport { html } from \"./lib/dom.ts\";\nimport { leveServerError } from \"./lib/erreurs.ts\";\nimport { estReponse500 } from \"./lib/gardes.ts\";\nimport { getBackendAvecParametresUrl, traiteReponseBackendWCSelonCodesHTTP } from \"./lib/reseau.ts\";\nimport { WCV3ProductsSchema } from \"./lib/schemas/api/v3/products.ts\";\nimport { WCV3ProductsArgsSchema } from \"./lib/schemas/api/v3/products.ts\";\nimport { recupereElementDansDocumentOuLeve, recupereElementDocumentEither } from \"./lib/utils.ts\";\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 GRILLE_PRODUITS: HTMLDivElement = recupereElementDansDocumentOuLeve(SELECTEUR_GRILLE_PRODUITS);\nconst BOUTON_PLUS_DE_PRODUITS: Either = recupereElementDocumentEither(\n SELECTEUR_BOUTON_PLUS_PRODUITS,\n);\n\n/**\n * TODO\n */\nconst initialisePageBoutique = (): void => {\n const idCategorieProduits: null | string = GRILLE_PRODUITS.getAttribute(ATTRIBUT_ID_CATEGORIE_PRODUITS);\n\n BOUTON_PLUS_DE_PRODUITS.ifRight(bouton => {\n bouton.addEventListener(\"click\", (): void => {\n const nouvellePage = Number(GRILLE_PRODUITS.getAttribute(ATTRIBUT_PAGE)) + 1;\n const args: WCV3ProductsArgs = {\n page: nouvellePage,\n per_page: 13,\n // Ajoute conditionnellement la Catégorie de Produits\n ...(idCategorieProduits && { category: idCategorieProduits }),\n };\n\n type APIProductsErrors =\n | APIFetchErrors\n | ValiError\n | ValiError;\n\n // Réalise la requête et traite sa réponse\n Either\n // Valide les arguments de la requête\n .encase, WCV3ProductsArgs>(() => parse(WCV3ProductsArgsSchema, args))\n .map(\n async (args: WCProductsArgs) => {\n // Réalise la requête\n await EitherAsync(() =>\n getBackendAvecParametresUrl({\n authString: ETATS_PAGE.authString,\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_NOUVELLE_PRODUCTS,\n searchParams: new URLSearchParams(args).toString(),\n })\n )\n .map((reponse: Response) => {\n // Traite le cas d'erreur 500\n if (estReponse500(reponse)) leveServerError(\"500 Server Error\");\n // Retourne le corps de la Réponse\n return reponse.json();\n })\n .map((corpsReponse: unknown) =>\n // Traite tous les codes HTTPs possibles\n traiteReponseBackendWCSelonCodesHTTP(\n corpsReponse,\n WCV3ProductsSchema,\n )\n )\n .ifRight((donnees: WCV3Products) => {\n // Cache le bouton s'il y a moins de 12 Produits disponibles (que l'on est à la dernière page)\n if (donnees.length < 12) {\n bouton.toggleAttribute(ATTRIBUT_HIDDEN);\n }\n\n // Créé un DocumentFragment qui recevra tous les nouveaux Produits\n const fragment: DocumentFragment = document.createDocumentFragment();\n\n // Créé les Éléments
à insérer\n for (const produit of donnees.slice(0, 12)) {\n pipe(\n html`\n \n `,\n tap(article => {\n fragment.appendChild(article);\n }),\n );\n }\n\n // Ajoute les nouveaux Produits dans le DOM\n GRILLE_PRODUITS.appendChild(fragment);\n GRILLE_PRODUITS.setAttribute(ATTRIBUT_PAGE, String(nouvellePage));\n })\n .ifLeft(e => {\n match(e)\n // TODO: Créer une méthode pour rapporter les problèmes de validation\n .with({ issues: P.select(), name: \"ValiError\" }, problemes => console.error(\"ValiError\", problemes))\n .otherwise(e => console.error(\"Autre\", e.name, e));\n })\n // Pas d'intérêt à récupérer le résultat\n .void();\n },\n );\n });\n });\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", (): void => {\n initialisePageBoutique();\n});\n"],"names":["args","match","P","e"],"mappings":";;;;;;;;;;;;;;;;;;AAuCA,MAAM,aAAwB;AAG9B,MAAM,kBAAkC,kCAAkC,yBAAyB;AACnG,MAAM,0BAAkE;AAAA,EACtE;AACF;AAKA,MAAM,yBAAyB,MAAY;AACnC,QAAA,sBAAqC,gBAAgB,aAAa,8BAA8B;AAEtG,0BAAwB,QAAQ,CAAU,WAAA;AACjC,WAAA,iBAAiB,SAAS,MAAY;AAC3C,YAAM,eAAe,OAAO,gBAAgB,aAAa,aAAa,CAAC,IAAI;AAC3E,YAAM,OAAyB;AAAA,QAC7B,MAAM;AAAA,QACN,UAAU;AAAA;AAAA,QAEV,GAAI,uBAAuB,EAAE,UAAU,oBAAoB;AAAA,MAC7D;AAQA,aAEG,OAAmE,MAAM,MAAM,wBAAwB,IAAI,CAAC,EAC5G;AAAA,QACC,OAAOA,UAAyB;AAExB,gBAAA;AAAA,YAAyC,MAC7C,4BAA4B;AAAA,cAC1B,YAAY,WAAW;AAAA,cACvB,OAAO,WAAW;AAAA,cAClB,OAAO;AAAA,cACP,cAAc,IAAI,gBAAgBA,KAAI,EAAE,SAAS;AAAA,YAClD,CAAA;AAAA,UAAA,EAEA,IAAI,CAAC,YAAsB;AAE1B,gBAAI,cAAc,OAAO,EAAG,iBAAgB,kBAAkB;AAE9D,mBAAO,QAAQ,KAAK;AAAA,UACrB,CAAA,EACA;AAAA,YAAI,CAAC;AAAA;AAAA,cAEJ;AAAA,gBACE;AAAA,gBACA;AAAA,cAAA;AAAA;AAAA,UACF,EAED,QAAQ,CAAC,YAA0B;AAE9B,gBAAA,QAAQ,SAAS,IAAI;AACvB,qBAAO,gBAAgB,eAAe;AAAA,YAAA;AAIlC,kBAAA,WAA6B,SAAS,uBAAuB;AAGnE,uBAAW,WAAW,QAAQ,MAAM,GAAG,EAAE,GAAG;AAC1C;AAAA,gBACE;AAAA;AAAA;AAAA,4CAGwB,QAAQ,IAAI;AAAA;AAAA,8BAE1B,QAAQ,eAAe,EAAE;AAAA;AAAA;AAAA;AAAA,8BAIzB,QAAQ,gBAAgB,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAMjB,QAAQ,SAAS,KAAK,QAAQ,IAAI;AAAA;AAAA;AAAA,4BAG7C,QAAQ,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAM5B,IAAI,CAAW,YAAA;AACb,2BAAS,YAAY,OAAO;AAAA,gBAC7B,CAAA;AAAA,cACH;AAAA,YAAA;AAIF,4BAAgB,YAAY,QAAQ;AACpC,4BAAgB,aAAa,eAAe,OAAO,YAAY,CAAC;AAAA,UAAA,CACjE,EACA,OAAO,CAAK,MAAA;AACLC,cAAA,CAAC,EAEJ,KAAK,EAAE,QAAQC,EAAE,OAAA,GAAU,MAAM,eAAe,CAAa,cAAA,QAAQ,MAAM,aAAa,SAAS,CAAC,EAClG,UAAU,CAAAC,OAAK,QAAQ,MAAM,SAASA,GAAE,MAAMA,EAAC,CAAC;AAAA,UACpD,CAAA,EAEA,KAAK;AAAA,QAAA;AAAA,MAEZ;AAAA,IAAA,CACH;AAAA,EAAA,CACF;AACH;AAEA,SAAS,iBAAiB,oBAAoB,MAAY;AACjC,yBAAA;AACzB,CAAC;"} \ No newline at end of file +{"version":3,"file":"scripts-page-boutique.js","sources":["../../src/scripts/scripts-page-boutique.ts"],"sourcesContent":["/**\n * Scripts pour les fonctionnalités de la page Boutique.\n */\n\nimport { pipe } from \"@mobily/ts-belt\";\nimport { tap } from \"@mobily/ts-belt/Function\";\nimport { EitherAsync } from \"purify-ts\";\nimport { match, P } from \"ts-pattern\";\nimport { ValiError } from \"valibot\";\n\nimport type { APIFetchErrors } from \"./lib/types/api/erreurs\";\nimport type { WCV3Products, WCV3ProductsArgs } from \"./lib/types/api/v3/products.ts\";\nimport type { ReponseSimplifiee } from \"./lib/types/reseau\";\n\nimport { ROUTE_API_NOUVELLE_PRODUCTS } from \"./constantes/api.ts\";\nimport {\n ATTRIBUT_CHARGEMENT,\n ATTRIBUT_DESACTIVE,\n ATTRIBUT_HIDDEN,\n ATTRIBUT_ID_CATEGORIE_PRODUITS,\n ATTRIBUT_PAGE,\n SELECTEUR_BOUTON_PLUS_PRODUITS,\n SELECTEUR_GRILLE_PRODUITS,\n} from \"./constantes/dom.ts\";\nimport { lanceAnimationCycleTexte } from \"./lib/animations.ts\";\nimport { html } from \"./lib/dom.ts\";\nimport { BadRequestError, ServerError } from \"./lib/erreurs.ts\";\nimport { getBackendAvecParametresUrl } from \"./lib/reseau.ts\";\nimport { WCV3ProductsArgsSchema, WCV3ProductsSchema } from \"./lib/schemas/api/v3/products.ts\";\nimport { recupereElementDansDocumentOuLeve } from \"./lib/utils.ts\";\nimport { eitherParse } from \"./lib/validation.ts\";\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 E = {\n BOUTON_PLUS_DE_PRODUITS: recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_PLUS_PRODUITS),\n GRILLE_PRODUITS: recupereElementDansDocumentOuLeve(SELECTEUR_GRILLE_PRODUITS),\n};\n\n/**\n * TODO\n */\nconst initialisePageBoutique = (): void => {\n const idCategorieProduits: null | string = E.GRILLE_PRODUITS.getAttribute(ATTRIBUT_ID_CATEGORIE_PRODUITS);\n\n E.BOUTON_PLUS_DE_PRODUITS.addEventListener(\"click\", (): void => {\n const nouveauNumeroPage = Number(E.GRILLE_PRODUITS.getAttribute(ATTRIBUT_PAGE)) + 1;\n const args: WCV3ProductsArgs = {\n page: nouveauNumeroPage,\n per_page: 12,\n // Ajoute conditionnellement la Catégorie de Produits\n ...(idCategorieProduits && { category: idCategorieProduits }),\n };\n\n type APIProductsErrors =\n | APIFetchErrors\n | ValiError\n | ValiError;\n\n void EitherAsync\n .liftEither(eitherParse(args, WCV3ProductsArgsSchema))\n .ifRight(() => {\n // Désactive le Bouton pour empêcher des requêtes concurrentes\n E.BOUTON_PLUS_DE_PRODUITS.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n E.BOUTON_PLUS_DE_PRODUITS.setAttribute(ATTRIBUT_CHARGEMENT, \"\");\n\n // Lance un cycle d'animation sur le texte de chargement\n const animation = lanceAnimationCycleTexte({\n attribut: ATTRIBUT_CHARGEMENT,\n element: E.BOUTON_PLUS_DE_PRODUITS,\n etapes: [\n \"Loading\",\n \"Loading.\",\n \"Loading..\",\n \"Loading...\",\n ],\n });\n animation.callback();\n animation.interval = setInterval(animation.callback, 500);\n })\n .chain((args: WCV3ProductsArgs) =>\n EitherAsync(() =>\n getBackendAvecParametresUrl({\n authString: ETATS_PAGE.authString,\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_NOUVELLE_PRODUCTS,\n searchParams: new URLSearchParams(args).toString(),\n })\n )\n )\n .chain((reponse: Response) =>\n EitherAsync(async ({ throwE }) => {\n const reponseSimplifiee: ReponseSimplifiee = {\n body: await reponse.json(),\n status: reponse.status,\n };\n\n return match(reponseSimplifiee)\n .with({ status: 500 }, () => throwE(new ServerError(\"500 Server Error\")))\n .with({ status: 400 }, () => throwE(new BadRequestError(\"400 Server Error\")))\n .with({ status: 200 }, () => reponseSimplifiee.body)\n .run();\n })\n )\n .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCV3ProductsSchema)))\n .ifRight((donnees: WCV3Products) => {\n // Cache le bouton s'il y a moins de 12 Produits disponibles (que l'on est à la dernière page)\n if (donnees.length < 12) {\n E.BOUTON_PLUS_DE_PRODUITS.toggleAttribute(ATTRIBUT_HIDDEN);\n }\n\n // Créé un DocumentFragment qui recevra tous les nouveaux Produits\n const fragment: DocumentFragment = document.createDocumentFragment();\n\n // Créé les Éléments
à insérer\n for (const produit of donnees.slice(0, 12)) {\n pipe(\n html`\n \n `,\n tap(article => fragment.appendChild(article)),\n );\n }\n\n // Ajoute les nouveaux Produits dans le DOM\n E.GRILLE_PRODUITS.appendChild(fragment);\n E.GRILLE_PRODUITS.setAttribute(ATTRIBUT_PAGE, String(nouveauNumeroPage));\n\n E.BOUTON_PLUS_DE_PRODUITS.textContent = \"Show more\";\n })\n .ifLeft((erreur: APIProductsErrors) => {\n // Traite les Erreurs et affiche un Message à l'Utilisateur\n match(erreur)\n .with(P.instanceOf(ValiError), e => console.error(\"ValiError\", e.issues))\n .otherwise(e => console.error(\"Erreur\", e));\n\n E.BOUTON_PLUS_DE_PRODUITS.textContent = \"Error, try again?\";\n })\n .finally(() => {\n // Désactive l'animation de chargement et rend le Bouton de nouveau cliquable\n E.BOUTON_PLUS_DE_PRODUITS.removeAttribute(ATTRIBUT_CHARGEMENT);\n E.BOUTON_PLUS_DE_PRODUITS.removeAttribute(ATTRIBUT_DESACTIVE);\n })\n .run();\n });\n};\n\ndocument.addEventListener(\"DOMContentLoaded\", (): void => {\n initialisePageBoutique();\n});\n"],"names":["args","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-adresses.js b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-adresses.js index 1f26a8d5..7b20c934 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-adresses.js +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-adresses.js @@ -1,16 +1,17 @@ -import { z } from "./index.CeK6pfoJ.js"; -import { V as ValiError } from "./index.DxUTT09Y.js"; +import { z, N } from "./index.CeK6pfoJ.js"; +import { V as ValiError } from "./index.BAmxwLeJ.js"; import { c as ROUTE_API_MAJ_CLIENT, d as ROUTE_API_NOUVELLE_COMMANDES } from "./api.js"; -import { l as SELECTEUR_ENTREES_PANIER, z as SELECTEUR_BOUTON_ACTIONS_FORMULAIRE, B as SELECTEUR_FORMULAIRE_PANIER, C as SELECTEUR_INSTRUCTIONS_CLIENT, D as SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT, E as SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE, y as ATTRIBUT_DESACTIVE, F as ATTRIBUT_CHARGEMENT } from "./dom.js"; +import { n as SELECTEUR_ENTREES_PANIER, B as SELECTEUR_BOUTON_ACTIONS_FORMULAIRE, C as SELECTEUR_FORMULAIRE_PANIER, D as SELECTEUR_INSTRUCTIONS_CLIENT, E as SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES, F as SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT, G as SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE, k as ATTRIBUT_DESACTIVE, l as ATTRIBUT_CHARGEMENT } from "./dom.js"; +import { E as ERREUR_GENERIQUE_SOUMISSION_ADRESSES } from "./messages-utilisateur.js"; import { l as lanceAnimationCycleTexte } from "./animations.js"; import { e as eitherSessionStorageGet, c as eitherJsonParse } from "./dom2.js"; -import { S as ServerError, a as leveErreur, l as leveServerError } from "./erreurs2.js"; +import { S as ServerError, B as BadRequestError, a as leveErreur, l as leveServerError } from "./erreurs2.js"; import { e as estReponse500 } from "./gardes.js"; import { p as postBackend } from "./reseau.js"; import { W as WCStoreCartSchema } from "./cart.js"; import { W as WCStoreCartUpdateCustomerArgsSchema } from "./cart-update-customer.js"; import { W as WCStoreShippingRateShippingRateSchema } from "./couts-livraison.js"; -import { W as WCV3OrdersArgsSchema, a as WCV3OrderSchema } from "./orders2.js"; +import { W as WCV3OrdersArgsSchema, a as WCV3OrderSchema } from "./orders.js"; import { a as recupereElementDansDocumentOuLeve, c as recupereElementsDocumentEither } from "./utils.js"; import { e as eitherParse } from "./validation.js"; import { E as EitherAsync } from "./MaybeAsync.AE1jnxuc.js"; @@ -21,13 +22,16 @@ import "./erreurs3.js"; import "./cart2.js"; import "./adresses.js"; import "./cart-coupons.js"; -import "./orders3.js"; +import "./orders2.js"; const ETATS_PAGE = _etats; const ELEMENTS = { BOUTON_ACTIONS_FORMULAIRE: recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_ACTIONS_FORMULAIRE), ENTREES_PANIER_EITHER: recupereElementsDocumentEither(SELECTEUR_ENTREES_PANIER), FORMULAIRE_PANIER: recupereElementDansDocumentOuLeve(SELECTEUR_FORMULAIRE_PANIER), INSTRUCTIONS_CLIENT: recupereElementDansDocumentOuLeve(SELECTEUR_INSTRUCTIONS_CLIENT), + MESSAGE_FORMULAIRE_ADRESSES: recupereElementDansDocumentOuLeve( + SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES + ), TOTAL_LIVRAISON_COUT: recupereElementDansDocumentOuLeve(SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT), TOTAL_LIVRAISON_PRESTATAIRE: recupereElementDansDocumentOuLeve( SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE @@ -58,7 +62,7 @@ const initialiseBoutonSoumissionAdresses = () => { address_2: "", city: donneesFormulaire["facturation-ville"] ?? donneesFormulaire["livraison-ville"] ?? "", company: "", - country: "FR", + country: donneesFormulaire["facturation-pays"] ?? donneesFormulaire["livraison-pays"] ?? "", email: donneesFormulaire["facturation-email"] ?? donneesFormulaire["livraison-email"] ?? "", first_name: donneesFormulaire["facturation-prenom"] ?? donneesFormulaire["livraison-prenom"] ?? "", last_name: donneesFormulaire["facturation-nom"] ?? donneesFormulaire["livraison-nom"] ?? "", @@ -71,7 +75,7 @@ const initialiseBoutonSoumissionAdresses = () => { address_2: "", city: donneesFormulaire["livraison-ville"] ?? "", company: "", - country: "FR", + country: donneesFormulaire["livraison-pays"] ?? "", first_name: donneesFormulaire["livraison-prenom"] ?? "", last_name: donneesFormulaire["livraison-nom"] ?? "", phone: donneesFormulaire["livraison-telephone"] ?? "", @@ -91,11 +95,11 @@ const initialiseBoutonSoumissionAdresses = () => { body: await reponse.json(), status: reponse.status }; - return z(reponseSimplifiee).with({ status: 500 }, () => throwE(new ServerError("500 Server Error"))).with({ status: 200 }, () => reponseSimplifiee.body).run(); + return z(reponseSimplifiee).with({ status: 500 }, () => throwE(new ServerError("500 Server Error"))).with({ status: 400 }, () => throwE(new BadRequestError("400 Bad Request Error"))).with({ status: 200 }, () => reponseSimplifiee.body).run(); }) ).chain((corsReponse) => EitherAsync.liftEither(eitherParse(corsReponse, WCStoreCartSchema))).ifRight((panier) => { console.debug(panier.shipping_rates); - const sousTotalLivraison = panier.totals.total_shipping === "0" ? "Free" : `${String(panier.totals.total_shipping)}€`; + const sousTotalLivraison = panier.totals.total_shipping === "0" ? "Free" : `${String(Number(panier.totals.total_shipping) / 100)}€`; const prestataireLivraison = panier.shipping_rates[0]?.shipping_rates[0]?.name ?? ""; ELEMENTS.TOTAL_LIVRAISON_COUT.textContent = sousTotalLivraison; ELEMENTS.TOTAL_LIVRAISON_PRESTATAIRE.textContent = prestataireLivraison; @@ -105,7 +109,15 @@ const initialiseBoutonSoumissionAdresses = () => { ); ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.textContent = "Check-out"; initialiseBoutonCreationCommande(); - }).ifLeft((erreur) => z(erreur).with).finally(() => { + }).ifLeft( + (erreur) => z(erreur).with(N.instanceOf(ValiError), (e) => { + console.error(e.issues); + ELEMENTS.MESSAGE_FORMULAIRE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES; + }).with(N.instanceOf(ServerError), (e) => { + console.error(e); + ELEMENTS.MESSAGE_FORMULAIRE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES; + }).exhaustive() + ).finally(() => { ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_CHARGEMENT); ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_DESACTIVE); }).run(); diff --git a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-adresses.js.map b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-adresses.js.map index 9da666d5..58c31192 100644 --- a/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-adresses.js.map +++ b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-adresses.js.map @@ -1 +1 @@ -{"version":3,"file":"scripts-page-panier-adresses.js","sources":["../../src/scripts/scripts-page-panier-adresses.ts"],"sourcesContent":["import { pipe } from \"@mobily/ts-belt\";\nimport { EitherAsync, Maybe } from \"purify-ts\";\nimport { match } from \"ts-pattern\";\nimport { ValiError } from \"valibot\";\n\nimport type { WCStoreCart, WCStoreShippingRateShippingRate } from \"./lib/types/api/cart\";\nimport type { WCStoreCartUpdateCustomerArgs } from \"./lib/types/api/cart-update-customer\";\nimport type { WCV3Order, WCV3OrdersArgs } from \"./lib/types/api/v3/orders\";\nimport type { ReponseSimplifiee } from \"./lib/types/reseau\";\n\nimport { ROUTE_API_MAJ_CLIENT, ROUTE_API_NOUVELLE_COMMANDES } from \"./constantes/api\";\nimport {\n ATTRIBUT_CHARGEMENT,\n ATTRIBUT_DESACTIVE,\n SELECTEUR_BOUTON_ACTIONS_FORMULAIRE,\n SELECTEUR_ENTREES_PANIER,\n SELECTEUR_FORMULAIRE_PANIER,\n SELECTEUR_INSTRUCTIONS_CLIENT,\n SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT,\n SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE,\n} from \"./constantes/dom\";\nimport { lanceAnimationCycleTexte } from \"./lib/animations\";\nimport { eitherJsonParse, eitherSessionStorageGet } from \"./lib/dom\";\nimport { leveErreur, leveServerError, ServerError } from \"./lib/erreurs\";\nimport { estReponse500 } from \"./lib/gardes\";\nimport { postBackend } from \"./lib/reseau\";\nimport { WCStoreCartSchema } from \"./lib/schemas/api/cart\";\nimport { WCStoreCartUpdateCustomerArgsSchema } from \"./lib/schemas/api/cart-update-customer\";\nimport { WCStoreShippingRateShippingRateSchema } from \"./lib/schemas/api/couts-livraison\";\nimport { WCV3OrdersArgsSchema, WCV3OrderSchema } from \"./lib/schemas/api/v3/orders\";\nimport { recupereElementDansDocumentOuLeve, recupereElementsDocumentEither } 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// @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_ACTIONS_FORMULAIRE: recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_ACTIONS_FORMULAIRE),\n ENTREES_PANIER_EITHER: recupereElementsDocumentEither(SELECTEUR_ENTREES_PANIER),\n FORMULAIRE_PANIER: recupereElementDansDocumentOuLeve(SELECTEUR_FORMULAIRE_PANIER),\n INSTRUCTIONS_CLIENT: recupereElementDansDocumentOuLeve(SELECTEUR_INSTRUCTIONS_CLIENT),\n TOTAL_LIVRAISON_COUT: recupereElementDansDocumentOuLeve(SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT),\n TOTAL_LIVRAISON_PRESTATAIRE: recupereElementDansDocumentOuLeve(\n SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE,\n ),\n};\n\nexport const initialiseBoutonSoumissionAdresses = (): void => {\n // Déclenche la requête pour la soumission des adresses\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.addEventListener(\"click\", evenement => {\n Maybe\n // Ne fais rien si le Formulaire n'est pas valide\n .fromFalsy(ELEMENTS.FORMULAIRE_PANIER.checkValidity())\n .ifJust(() => {\n evenement.preventDefault();\n\n // Désactive le Bouton pour empêcher des requêtes concurrentes\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.setAttribute(ATTRIBUT_CHARGEMENT, \"\");\n\n // Lance un cycle d'animation sur le texte de chargement\n const animation = lanceAnimationCycleTexte({\n attribut: ATTRIBUT_CHARGEMENT,\n element: ELEMENTS.BOUTON_ACTIONS_FORMULAIRE,\n etapes: [\n \"Loading\",\n \"Loading.\",\n \"Loading..\",\n \"Loading...\",\n ],\n });\n animation.callback();\n animation.interval = setInterval(animation.callback, 500);\n\n // Récupère les données du Formulaire\n const donneesFormulaire = Object.fromEntries(new FormData(ELEMENTS.FORMULAIRE_PANIER)) as Record<\n string,\n string\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 void EitherAsync\n // Vérifie le Schéma des Arguments\n .liftEither(eitherParse(argumentsFormulaire, WCStoreCartUpdateCustomerArgsSchema))\n .map((args: WCStoreCartUpdateCustomerArgs) =>\n postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_MAJ_CLIENT,\n })\n )\n // Traite les cas d'Erreur et récupère la réponse du backend\n .chain((reponse: Response) =>\n EitherAsync(async ({ throwE }) => {\n const reponseSimplifiee: ReponseSimplifiee = {\n body: await reponse.json(),\n status: reponse.status,\n };\n\n return match(reponseSimplifiee)\n .with({ status: 500 }, () => throwE(new ServerError(\"500 Server Error\")))\n .with({ status: 200 }, () => reponseSimplifiee.body)\n .run();\n })\n )\n // Vérifie le Schéma de la réponse du backend\n .chain((corsReponse: unknown) => EitherAsync.liftEither(eitherParse(corsReponse, WCStoreCartSchema)))\n .ifRight((panier: WCStoreCart) => {\n console.debug(panier.shipping_rates);\n\n const sousTotalLivraison = panier.totals.total_shipping === \"0\"\n ? \"Free\"\n : `${String(panier.totals.total_shipping)}€`;\n const prestataireLivraison = panier.shipping_rates[0]?.shipping_rates[0]?.name ?? \"\";\n\n // Met à jour les informations de Livraison affichés à l'Utilisateur\n ELEMENTS.TOTAL_LIVRAISON_COUT.textContent = sousTotalLivraison;\n ELEMENTS.TOTAL_LIVRAISON_PRESTATAIRE.textContent = prestataireLivraison;\n\n // Sauvegarde la Méthode de Livraison dans le Stockage de Session\n sessionStorage.setItem(\n \"shipping_rates\",\n JSON.stringify(panier.shipping_rates[0]?.shipping_rates[0] ?? \"\"),\n );\n\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.textContent = \"Check-out\";\n\n // Active le Bouton pour la création de la Commande\n initialiseBoutonCreationCommande();\n })\n .ifLeft(erreur => match(erreur).with)\n .finally(() => {\n // Désactive l'animation de chargement et rend le Bouton de nouveau cliquable\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_CHARGEMENT);\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_DESACTIVE);\n })\n .run();\n });\n });\n};\n\nexport const initialiseBoutonCreationCommande = (): void => {\n // Permet de supprimer tout Écouteur d'Évènement assigné au Bouton\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.outerHTML = ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.outerHTML;\n // Réassigne le Bouton\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE = recupereElementDansDocumentOuLeve(\n SELECTEUR_BOUTON_ACTIONS_FORMULAIRE,\n );\n\n // Créé la Commande au clic sur le Bouton\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.addEventListener(\"click\", (evenement: Event) => {\n Maybe\n // Ne fais rien si le Formulaire n'est pas valide\n .fromFalsy(ELEMENTS.FORMULAIRE_PANIER.checkValidity())\n // Active l'état de chargement\n .ifJust(() => {\n evenement.preventDefault();\n //\n // Désactive le Bouton pour empêcher des requêtes concurrentes\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.setAttribute(ATTRIBUT_CHARGEMENT, \"\");\n\n // Lance un cycle d'animation sur le texte de chargement\n const animation = lanceAnimationCycleTexte({\n attribut: ATTRIBUT_CHARGEMENT,\n element: ELEMENTS.BOUTON_ACTIONS_FORMULAIRE,\n etapes: [\n \"Loading\",\n \"Loading.\",\n \"Loading..\",\n \"Loading...\",\n ],\n });\n animation.callback();\n animation.interval = setInterval(animation.callback, 500);\n\n // Récupère les données du Formulaire sous forme d'Objet\n const donneesFormulaire = Object.fromEntries(new FormData(ELEMENTS.FORMULAIRE_PANIER)) as Record<\n string,\n string\n >;\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 ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.textContent = \"Check-out\";\n leveErreur(e);\n })\n .unsafeCoerce();\n\n const articlesPanier = ELEMENTS.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: ELEMENTS.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"],"names":["match","reponse"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"scripts-page-panier-adresses.js","sources":["../../src/scripts/scripts-page-panier-adresses.ts"],"sourcesContent":["import { pipe } from \"@mobily/ts-belt\";\nimport { EitherAsync, Maybe } from \"purify-ts\";\nimport { match, P } from \"ts-pattern\";\nimport { ValiError } from \"valibot\";\n\nimport type { WCStoreCart, WCStoreShippingRateShippingRate } from \"./lib/types/api/cart\";\nimport type { WCStoreCartUpdateCustomerArgs } from \"./lib/types/api/cart-update-customer\";\nimport type { WCV3Order, WCV3OrdersArgs } from \"./lib/types/api/v3/orders\";\nimport type { ReponseSimplifiee } from \"./lib/types/reseau\";\n\nimport { ROUTE_API_MAJ_CLIENT, ROUTE_API_NOUVELLE_COMMANDES } from \"./constantes/api\";\nimport {\n ATTRIBUT_CHARGEMENT,\n ATTRIBUT_DESACTIVE,\n SELECTEUR_BOUTON_ACTIONS_FORMULAIRE,\n SELECTEUR_ENTREES_PANIER,\n SELECTEUR_FORMULAIRE_PANIER,\n SELECTEUR_INSTRUCTIONS_CLIENT,\n SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES,\n SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT,\n SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE,\n} from \"./constantes/dom\";\nimport { ERREUR_GENERIQUE_SOUMISSION_ADRESSES } from \"./constantes/messages-utilisateur\";\nimport { lanceAnimationCycleTexte } from \"./lib/animations\";\nimport { eitherJsonParse, eitherSessionStorageGet } from \"./lib/dom\";\nimport { BadRequestError, leveErreur, leveServerError, ServerError } from \"./lib/erreurs\";\nimport { estReponse500 } from \"./lib/gardes\";\nimport { postBackend } from \"./lib/reseau\";\nimport { WCStoreCartSchema } from \"./lib/schemas/api/cart\";\nimport { WCStoreCartUpdateCustomerArgsSchema } from \"./lib/schemas/api/cart-update-customer\";\nimport { WCStoreShippingRateShippingRateSchema } from \"./lib/schemas/api/couts-livraison\";\nimport { WCV3OrdersArgsSchema, WCV3OrderSchema } from \"./lib/schemas/api/v3/orders\";\nimport { recupereElementDansDocumentOuLeve, recupereElementsDocumentEither } 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// @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_ACTIONS_FORMULAIRE: recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_ACTIONS_FORMULAIRE),\n ENTREES_PANIER_EITHER: recupereElementsDocumentEither(SELECTEUR_ENTREES_PANIER),\n FORMULAIRE_PANIER: recupereElementDansDocumentOuLeve(SELECTEUR_FORMULAIRE_PANIER),\n INSTRUCTIONS_CLIENT: recupereElementDansDocumentOuLeve(SELECTEUR_INSTRUCTIONS_CLIENT),\n MESSAGE_FORMULAIRE_ADRESSES: recupereElementDansDocumentOuLeve(\n SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES,\n ),\n TOTAL_LIVRAISON_COUT: recupereElementDansDocumentOuLeve(SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT),\n TOTAL_LIVRAISON_PRESTATAIRE: recupereElementDansDocumentOuLeve(\n SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE,\n ),\n};\n\nexport const initialiseBoutonSoumissionAdresses = (): void => {\n // Déclenche la requête pour la soumission des adresses\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.addEventListener(\"click\", evenement => {\n Maybe\n // Ne fais rien si le Formulaire n'est pas valide\n .fromFalsy(ELEMENTS.FORMULAIRE_PANIER.checkValidity())\n .ifJust(() => {\n evenement.preventDefault();\n\n // Désactive le Bouton pour empêcher des requêtes concurrentes\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.setAttribute(ATTRIBUT_CHARGEMENT, \"\");\n\n // Lance un cycle d'animation sur le texte de chargement\n const animation = lanceAnimationCycleTexte({\n attribut: ATTRIBUT_CHARGEMENT,\n element: ELEMENTS.BOUTON_ACTIONS_FORMULAIRE,\n etapes: [\n \"Loading\",\n \"Loading.\",\n \"Loading..\",\n \"Loading...\",\n ],\n });\n animation.callback();\n animation.interval = setInterval(animation.callback, 500);\n\n // Récupère les données du Formulaire\n const donneesFormulaire = Object.fromEntries(new FormData(ELEMENTS.FORMULAIRE_PANIER)) as Record<\n string,\n string\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: donneesFormulaire[\"facturation-pays\"] ?? donneesFormulaire[\"livraison-pays\"] ?? \"\",\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: donneesFormulaire[\"livraison-pays\"] ?? \"\",\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 void EitherAsync\n // Vérifie le Schéma des Arguments\n .liftEither(eitherParse(argumentsFormulaire, WCStoreCartUpdateCustomerArgsSchema))\n .map((args: WCStoreCartUpdateCustomerArgs) =>\n postBackend({\n corps: JSON.stringify(args),\n nonce: ETATS_PAGE.nonce,\n route: ROUTE_API_MAJ_CLIENT,\n })\n )\n // Traite les cas d'Erreur et récupère la réponse du backend\n .chain((reponse: Response) =>\n EitherAsync(async ({ throwE }) => {\n const reponseSimplifiee: ReponseSimplifiee = {\n body: await reponse.json(),\n status: reponse.status,\n };\n\n return match(reponseSimplifiee)\n .with({ status: 500 }, () => throwE(new ServerError(\"500 Server Error\")))\n .with({ status: 400 }, () => throwE(new BadRequestError(\"400 Bad Request Error\")))\n .with({ status: 200 }, () => reponseSimplifiee.body)\n .run();\n })\n )\n // Vérifie le Schéma de la réponse du backend\n .chain((corsReponse: unknown) => EitherAsync.liftEither(eitherParse(corsReponse, WCStoreCartSchema)))\n .ifRight((panier: WCStoreCart) => {\n console.debug(panier.shipping_rates);\n\n const sousTotalLivraison = panier.totals.total_shipping === \"0\"\n ? \"Free\"\n : `${String(Number(panier.totals.total_shipping) / 100)}€`;\n const prestataireLivraison = panier.shipping_rates[0]?.shipping_rates[0]?.name ?? \"\";\n\n // Met à jour les informations de Livraison affichés à l'Utilisateur\n ELEMENTS.TOTAL_LIVRAISON_COUT.textContent = sousTotalLivraison;\n ELEMENTS.TOTAL_LIVRAISON_PRESTATAIRE.textContent = prestataireLivraison;\n\n // Sauvegarde la Méthode de Livraison dans le Stockage de Session\n sessionStorage.setItem(\n \"shipping_rates\",\n JSON.stringify(panier.shipping_rates[0]?.shipping_rates[0] ?? \"\"),\n );\n\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.textContent = \"Check-out\";\n\n // Active le Bouton pour la création de la Commande\n initialiseBoutonCreationCommande();\n })\n .ifLeft((\n erreur:\n | ServerError\n | ValiError\n | ValiError,\n ) =>\n match(erreur)\n .with(P.instanceOf(ValiError), e => {\n console.error(e.issues);\n ELEMENTS.MESSAGE_FORMULAIRE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES;\n })\n .with(P.instanceOf(ServerError), e => {\n console.error(e);\n ELEMENTS.MESSAGE_FORMULAIRE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES;\n })\n .exhaustive()\n )\n .finally(() => {\n // Désactive l'animation de chargement et rend le Bouton de nouveau cliquable\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_CHARGEMENT);\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_DESACTIVE);\n })\n .run();\n });\n });\n};\n\nexport const initialiseBoutonCreationCommande = (): void => {\n // Permet de supprimer tout Écouteur d'Évènement assigné au Bouton\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.outerHTML = ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.outerHTML;\n // Réassigne le Bouton\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE = recupereElementDansDocumentOuLeve(\n SELECTEUR_BOUTON_ACTIONS_FORMULAIRE,\n );\n\n // Créé la Commande au clic sur le Bouton\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.addEventListener(\"click\", (evenement: Event) => {\n Maybe\n // Ne fais rien si le Formulaire n'est pas valide\n .fromFalsy(ELEMENTS.FORMULAIRE_PANIER.checkValidity())\n // Active l'état de chargement\n .ifJust(() => {\n evenement.preventDefault();\n //\n // Désactive le Bouton pour empêcher des requêtes concurrentes\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.setAttribute(ATTRIBUT_DESACTIVE, \"\");\n ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.setAttribute(ATTRIBUT_CHARGEMENT, \"\");\n\n // Lance un cycle d'animation sur le texte de chargement\n const animation = lanceAnimationCycleTexte({\n attribut: ATTRIBUT_CHARGEMENT,\n element: ELEMENTS.BOUTON_ACTIONS_FORMULAIRE,\n etapes: [\n \"Loading\",\n \"Loading.\",\n \"Loading..\",\n \"Loading...\",\n ],\n });\n animation.callback();\n animation.interval = setInterval(animation.callback, 500);\n\n // Récupère les données du Formulaire sous forme d'Objet\n const donneesFormulaire = Object.fromEntries(new FormData(ELEMENTS.FORMULAIRE_PANIER)) as Record<\n string,\n string\n >;\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 ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.textContent = \"Check-out\";\n leveErreur(e);\n })\n .unsafeCoerce();\n\n const articlesPanier = ELEMENTS.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: ELEMENTS.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"],"names":["match","P","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-panier-code-promo.js b/web/app/themes/haiku-atelier-2024/assets/js/scripts-page-panier-code-promo.js index b32d444e..2d8ec6fb 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,7 +1,7 @@ import { z, N } from "./index.CeK6pfoJ.js"; -import { V as ValiError } from "./index.DxUTT09Y.js"; +import { V as ValiError } from "./index.BAmxwLeJ.js"; import { e as ROUTE_API_APPLIQUE_COUPON, f as ROUTE_API_RETIRE_COUPON } from "./api.js"; -import { G as SELECTEUR_BOUTON_CODE_PROMO, H as SELECTEUR_CHAMP_CODE_PROMO, I as SELECTEUR_ENSEMBLE_CODE_PROMO, J as SELECTEUR_MESSAGE_CODE_PROMO, p as SELECTEUR_TOTAL_PANIER, K as SELECTEUR_TOTAL_REDUCTION, o as SELECTEUR_TOTAL_REDUCTION_VALEUR, y as ATTRIBUT_DESACTIVE, F as ATTRIBUT_CHARGEMENT, L as ATTRIBUT_CODE_PROMO_PRESENT, k as ATTRIBUT_HIDDEN } from "./dom.js"; +import { H as SELECTEUR_BOUTON_CODE_PROMO, I as SELECTEUR_CHAMP_CODE_PROMO, J as SELECTEUR_ENSEMBLE_CODE_PROMO, K as SELECTEUR_MESSAGE_CODE_PROMO, r as SELECTEUR_TOTAL_PANIER, L as SELECTEUR_TOTAL_REDUCTION, q as SELECTEUR_TOTAL_REDUCTION_VALEUR, k as ATTRIBUT_DESACTIVE, l as ATTRIBUT_CHARGEMENT, M as ATTRIBUT_CODE_PROMO_PRESENT, m as ATTRIBUT_HIDDEN } from "./dom.js"; import { E as ERREUR_CODE_PROMO_INVALIDE } from "./erreurs.js"; import { l as lanceAnimationCycleTexte } from "./animations.js"; import { d as accorderCibleASelecteur, i as identity } from "./dom2.js"; 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 41734b32..5cac76f3 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,11 +1,12 @@ -import { p as parse } from "./index.DxUTT09Y.js"; +import { p as parse } from "./index.BAmxwLeJ.js"; import { a as ROUTE_API_RETIRE_ARTICLE_PANIER, b as ROUTE_API_MAJ_ARTICLE_PANIER } from "./api.js"; -import { l as SELECTEUR_ENTREES_PANIER, m as SELECTEUR_CONTENEUR_PANIER, n as SELECTEUR_SOUS_TOTAL_PRODUITS, o as SELECTEUR_TOTAL_REDUCTION_VALEUR, p as SELECTEUR_TOTAL_PANIER, q as SELECTEUR_BOUTON_SEPARATION_ADRESSES, r as SELECTEUR_FORMULAIRE_FACTURATION, s as ATTRIBUT_CLE_PANIER, t as SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE, u as SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER, v as SELECTEUR_BOUTON_ADDITION_QUANTITE, w as SELECTEUR_BOUTON_SUPPRESSION_PANIER, A as ATTRIBUT_CONTIENT_ARTICLES, x as SELECTEUR_PRIX_LIGNE_PANIER, k as ATTRIBUT_HIDDEN, y as ATTRIBUT_DESACTIVE } from "./dom.js"; +import { n as SELECTEUR_ENTREES_PANIER, o as SELECTEUR_CONTENEUR_PANIER, p as SELECTEUR_SOUS_TOTAL_PRODUITS, q as SELECTEUR_TOTAL_REDUCTION_VALEUR, r as SELECTEUR_TOTAL_PANIER, s as SELECTEUR_BOUTON_SEPARATION_ADRESSES, t as SELECTEUR_FORMULAIRE_FACTURATION, u as ATTRIBUT_CLE_PANIER, v as SELECTEUR_BOUTON_SOUSTRACTION_QUANTITE, w as SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER, x as SELECTEUR_BOUTON_ADDITION_QUANTITE, y as SELECTEUR_BOUTON_SUPPRESSION_PANIER, A as ATTRIBUT_CONTIENT_ARTICLES, z as SELECTEUR_PRIX_LIGNE_PANIER, m as ATTRIBUT_HIDDEN, k as ATTRIBUT_DESACTIVE } from "./dom.js"; import { N as NOM_CANAL_BOUTON_PANIER, a as NOM_CANAL_CONTENU_PANIER } from "./messages3.js"; import { a as recupereElementsAvecSelecteur, b as recupereElementAvecSelecteur, r as recupereElementOuLeve } from "./dom2.js"; import { l as leveServerError, r as reporteErreur } 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 { d as diviseParCent, f as formateEnEuros, i as inverseNombre, a as arrondisAZeroOuDeuxDecimales } from "./nombres.js"; import { p as postBackend, t as traiteReponseBackendWCSelonCodesHTTP } from "./reseau.js"; import { W as WCStoreCartRemoveItemArgsSchema } from "./cart-remove-item.js"; import { W as WCStoreCartUpdateItemArgsSchema } from "./cart-update-item.js"; @@ -25,10 +26,11 @@ import "./cart2.js"; import "./adresses.js"; import "./cart-coupons.js"; import "./couts-livraison.js"; +import "./messages-utilisateur.js"; import "./animations.js"; import "./cart-update-customer.js"; +import "./orders.js"; import "./orders2.js"; -import "./orders3.js"; import "./MaybeAsync.AE1jnxuc.js"; import "./erreurs.js"; import "./codes-promo.js"; @@ -58,7 +60,7 @@ const desactiveBoutonsEntreesPanier = (entrees) => entrees.forEach((entree) => { elements.boutonSoustraction.setAttribute(ATTRIBUT_DESACTIVE, ""); elements.boutonAddition.setAttribute(ATTRIBUT_DESACTIVE, ""); elements.boutonSuppression.setAttribute(ATTRIBUT_DESACTIVE, ""); - elements.boutonSuppression.textContent = "C= C= C= C= C=┌(;・ω・)┘"; + elements.boutonSuppression.textContent = "Loading..."; }); const majEtatsActivationBoutons = (entrees) => entrees.forEach((entree) => { const recupereElementDansEntree = recupereElementDansEntreePanierOuLeve(entree); @@ -109,9 +111,9 @@ const initialiseMajEntreesPanier = () => { emetMessageMajBoutonPanier({ quantiteProduits: panier.items_count }); emetMessageMajContenuPanier({ produits: panier.items, - sousTotalProduits: Number(panier.totals.total_items) / 100, - sousTotalReduction: Number(panier.totals.total_discount) / 100, - totalPanier: Number(panier.totals.total_price) / 100 + sousTotalProduits: diviseParCent(panier.totals.total_items), + sousTotalReduction: diviseParCent(panier.totals.total_discount), + totalPanier: diviseParCent(panier.totals.total_price) }); entree.remove(); }) @@ -150,9 +152,9 @@ const initialiseMajEntreesPanier = () => { emetMessageMajBoutonPanier({ quantiteProduits: panier.items_count }); emetMessageMajContenuPanier({ produits: panier.items, - sousTotalProduits: Number(panier.totals.total_items) / 100, - sousTotalReduction: Number(panier.totals.total_discount) / 100, - totalPanier: Number(panier.totals.total_price) / 100 + sousTotalProduits: diviseParCent(panier.totals.total_items), + sousTotalReduction: diviseParCent(panier.totals.total_discount), + totalPanier: diviseParCent(panier.totals.total_price) }); }) ); @@ -191,9 +193,9 @@ const initialiseMajEntreesPanier = () => { emetMessageMajBoutonPanier({ quantiteProduits: panier.items_count }); emetMessageMajContenuPanier({ produits: panier.items, - sousTotalProduits: Number(panier.totals.total_items) / 100, - sousTotalReduction: Number(panier.totals.total_discount) / 100, - totalPanier: Number(panier.totals.total_price) / 100 + sousTotalProduits: diviseParCent(panier.totals.total_items), + sousTotalReduction: diviseParCent(panier.totals.total_discount), + totalPanier: diviseParCent(panier.totals.total_price) }); }) ); @@ -230,13 +232,17 @@ const initialiseMajContenuPanier = () => { SELECTEUR_CHAMP_QUANTITE_LIGNE_PANIER ); entree.setAttribute("data-quantite", String(ligne.quantity)); - prixLigne.textContent = `${String(Number(ligne.totals.line_subtotal) / 100)}€`; + prixLigne.textContent = pipe(diviseParCent(ligne.totals.line_subtotal), formateEnEuros); champQuantite.setAttribute("value", String(ligne.quantity)); majEtatsActivationBoutons(entrees); }); - SOUS_TOTAL_REDUCTION.textContent = `-${String(donnees.sousTotalReduction)}€`; - SOUS_TOTAL_PRODUITS.textContent = `${String(donnees.sousTotalProduits)}€`; - TOTAL_PANIER.textContent = `${String(donnees.totalPanier)}€`; + SOUS_TOTAL_PRODUITS.textContent = formateEnEuros(donnees.sousTotalProduits); + SOUS_TOTAL_REDUCTION.textContent = pipe( + inverseNombre(donnees.sousTotalReduction), + arrondisAZeroOuDeuxDecimales, + formateEnEuros + ); + TOTAL_PANIER.textContent = pipe(arrondisAZeroOuDeuxDecimales(donnees.totalPanier), formateEnEuros); }); }); }).ifLeft((erreur) => { 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 6accf5be..d79971ba 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, Maybe } from \"purify-ts\";\nimport { parse, ValiError } from \"valibot\";\n\nimport type { MessageMajContenuPanierSchema } from \"./lib/schemas/messages.ts\";\nimport type { WCStoreCart, WCStoreCartItem } from \"./lib/types/api/cart\";\nimport type { WCStoreCartRemoveItemArgs } from \"./lib/types/api/cart-remove-item\";\nimport type { WCStoreCartUpdateItemArgs } from \"./lib/types/api/cart-update-item\";\nimport type { MessageMajBoutonPanierDonnees, MessageMajContenuPanierDonnees } from \"./lib/types/messages\";\n\nimport { ROUTE_API_MAJ_ARTICLE_PANIER, ROUTE_API_RETIRE_ARTICLE_PANIER } from \"./constantes/api.ts\";\nimport {\n ATTRIBUT_CLE_PANIER,\n ATTRIBUT_CONTIENT_ARTICLES,\n ATTRIBUT_DESACTIVE,\n ATTRIBUT_HIDDEN,\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_PRIX_LIGNE_PANIER,\n SELECTEUR_SOUS_TOTAL_PRODUITS,\n SELECTEUR_TOTAL_PANIER,\n SELECTEUR_TOTAL_REDUCTION_VALEUR,\n} from \"./constantes/dom.ts\";\nimport { NOM_CANAL_BOUTON_PANIER, NOM_CANAL_CONTENU_PANIER } from \"./constantes/messages.ts\";\nimport { recupereElementAvecSelecteur, recupereElementOuLeve, recupereElementsAvecSelecteur } from \"./lib/dom.ts\";\nimport { type CleNonTrouveError, 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 { WCStoreCartUpdateItemArgsSchema } from \"./lib/schemas/api/cart-update-item.ts\";\nimport { WCStoreCartSchema } from \"./lib/schemas/api/cart.ts\";\nimport { propEither, recupereElementDansDocumentOuLeve, recupereElementsDocumentEither } from \"./lib/utils.ts\";\nimport { initialiseBoutonSoumissionAdresses } from \"./scripts-page-panier-adresses.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 = recupereElementDansDocumentOuLeve(SELECTEUR_CONTENEUR_PANIER);\nconst SOUS_TOTAL_PRODUITS: HTMLElement = recupereElementDansDocumentOuLeve(SELECTEUR_SOUS_TOTAL_PRODUITS);\nconst SOUS_TOTAL_REDUCTION: HTMLSpanElement = recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION_VALEUR);\nconst TOTAL_PANIER: HTMLParagraphElement = recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_PANIER);\nconst BOUTON_SEPARATION_ADRESSES: HTMLInputElement = recupereElementDansDocumentOuLeve(\n SELECTEUR_BOUTON_SEPARATION_ADRESSES,\n);\nconst FORMULAIRE_FACTURATION: HTMLDivElement = recupereElementDansDocumentOuLeve(SELECTEUR_FORMULAIRE_FACTURATION);\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 sousTotalProduits: Number(panier.totals.total_items) / 100,\n sousTotalReduction: Number(panier.totals.total_discount) / 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 sousTotalProduits: Number(panier.totals.total_items) / 100,\n sousTotalReduction: Number(panier.totals.total_discount) / 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 sousTotalProduits: Number(panier.totals.total_items) / 100,\n sousTotalReduction: Number(panier.totals.total_discount) / 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_REDUCTION.textContent = `-${String(donnees.sousTotalReduction)}€`;\n SOUS_TOTAL_PRODUITS.textContent = `${String(donnees.sousTotalProduits)}€`;\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\ndocument.addEventListener(\"DOMContentLoaded\", (): void => {\n initialiseMajEntreesPanier();\n initialiseMajConteneurPanier();\n initialiseMajContenuPanier();\n initialiseMajFormulairesPanier();\n initialiseBoutonSoumissionAdresses();\n initialiseElementsCodePromo();\n});\n"],"names":["F","D"],"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 { parse, type ValiError } from \"valibot\";\n\nimport type { MessageMajContenuPanierSchema } from \"./lib/schemas/messages.ts\";\nimport type { WCStoreCart, WCStoreCartItem } from \"./lib/types/api/cart\";\nimport type { WCStoreCartRemoveItemArgs } from \"./lib/types/api/cart-remove-item\";\nimport type { WCStoreCartUpdateItemArgs } from \"./lib/types/api/cart-update-item\";\nimport type { MessageMajBoutonPanierDonnees, MessageMajContenuPanierDonnees } from \"./lib/types/messages\";\n\nimport { ROUTE_API_MAJ_ARTICLE_PANIER, ROUTE_API_RETIRE_ARTICLE_PANIER } from \"./constantes/api.ts\";\nimport {\n ATTRIBUT_CLE_PANIER,\n ATTRIBUT_CONTIENT_ARTICLES,\n ATTRIBUT_DESACTIVE,\n ATTRIBUT_HIDDEN,\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_PRIX_LIGNE_PANIER,\n SELECTEUR_SOUS_TOTAL_PRODUITS,\n SELECTEUR_TOTAL_PANIER,\n SELECTEUR_TOTAL_REDUCTION_VALEUR,\n} from \"./constantes/dom.ts\";\nimport { NOM_CANAL_BOUTON_PANIER, NOM_CANAL_CONTENU_PANIER } from \"./constantes/messages.ts\";\nimport { recupereElementAvecSelecteur, recupereElementOuLeve, recupereElementsAvecSelecteur } from \"./lib/dom.ts\";\nimport { type CleNonTrouveError, 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 { arrondisAZeroOuDeuxDecimales, diviseParCent, formateEnEuros, inverseNombre } from \"./lib/nombres.ts\";\nimport { postBackend, traiteReponseBackendWCSelonCodesHTTP } from \"./lib/reseau.ts\";\nimport { WCStoreCartRemoveItemArgsSchema } from \"./lib/schemas/api/cart-remove-item.ts\";\nimport { WCStoreCartUpdateItemArgsSchema } from \"./lib/schemas/api/cart-update-item.ts\";\nimport { WCStoreCartSchema } from \"./lib/schemas/api/cart.ts\";\nimport { propEither, recupereElementDansDocumentOuLeve, recupereElementsDocumentEither } from \"./lib/utils.ts\";\nimport { initialiseBoutonSoumissionAdresses } from \"./scripts-page-panier-adresses.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 = recupereElementDansDocumentOuLeve(SELECTEUR_CONTENEUR_PANIER);\nconst SOUS_TOTAL_PRODUITS: HTMLElement = recupereElementDansDocumentOuLeve(SELECTEUR_SOUS_TOTAL_PRODUITS);\nconst SOUS_TOTAL_REDUCTION: HTMLSpanElement = recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_REDUCTION_VALEUR);\nconst TOTAL_PANIER: HTMLParagraphElement = recupereElementDansDocumentOuLeve(SELECTEUR_TOTAL_PANIER);\nconst BOUTON_SEPARATION_ADRESSES: HTMLInputElement = recupereElementDansDocumentOuLeve(\n SELECTEUR_BOUTON_SEPARATION_ADRESSES,\n);\nconst FORMULAIRE_FACTURATION: HTMLDivElement = recupereElementDansDocumentOuLeve(SELECTEUR_FORMULAIRE_FACTURATION);\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 = \"Loading...\";\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 sousTotalProduits: diviseParCent(panier.totals.total_items),\n sousTotalReduction: diviseParCent(panier.totals.total_discount),\n totalPanier: diviseParCent(panier.totals.total_price),\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 sousTotalProduits: diviseParCent(panier.totals.total_items),\n sousTotalReduction: diviseParCent(panier.totals.total_discount),\n totalPanier: diviseParCent(panier.totals.total_price),\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 sousTotalProduits: diviseParCent(panier.totals.total_items),\n sousTotalReduction: diviseParCent(panier.totals.total_discount),\n totalPanier: diviseParCent(panier.totals.total_price),\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 = pipe(diviseParCent(ligne.totals.line_subtotal), formateEnEuros);\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 = formateEnEuros(donnees.sousTotalProduits);\n SOUS_TOTAL_REDUCTION.textContent = pipe(\n inverseNombre(donnees.sousTotalReduction),\n arrondisAZeroOuDeuxDecimales,\n formateEnEuros,\n );\n TOTAL_PANIER.textContent = pipe(arrondisAZeroOuDeuxDecimales(donnees.totalPanier), formateEnEuros);\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\ndocument.addEventListener(\"DOMContentLoaded\", (): void => {\n initialiseMajEntreesPanier();\n initialiseMajConteneurPanier();\n initialiseMajContenuPanier();\n initialiseMajFormulairesPanier();\n initialiseBoutonSoumissionAdresses();\n initialiseElementsCodePromo();\n});\n"],"names":["F","D"],"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 e69b1518..2ea1fb07 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,6 +1,6 @@ import { z } from "./index.CeK6pfoJ.js"; import { g as ROUTE_API_AJOUTE_ARTICLE_PANIER, E as ENTETE_WC_NONCE } from "./api.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, y as ATTRIBUT_DESACTIVE, _ as ATTRIBUT_PRIX } from "./dom.js"; +import { N as SELECTEUR_BOUTON_AJOUT_PANIER, O as SELECTEUR_SELECTEUR_QUANTITE, P as SELECTEUR_LIENS_ONGLETS, Q as SELECTEUR_SECTIONS_CONTENUS, R as SELECTEUR_PRIX_PRODUIT, T as SELECTEUR_CONTENEUR_FLECHES_DEFILEMENT, U as SELECTEUR_FLECHE_DEFILEMENT_GAUCHE, V as SELECTEUR_FLECHE_DEFILEMENT_DROITE, W as SELECTEUR_PHOTOS_PRODUIT, X as SELECTEUR_IMAGE_COLONNE_GAUCHE, Y as SELECTEUR_IMAGES_COLONNE_DROITE, Z as ATTRIBUT_INDEX_IMAGE_ACTIVE, _ as ATTRIBUT_ARIA_SELECTED, m as ATTRIBUT_HIDDEN, k 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 "./erreurs2.js"; import { b as estHTMLSelectElement, e as estReponse500, a as estError } from "./gardes.js"; @@ -14,7 +14,7 @@ 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.B84S-6H1.js"; -import "./index.DxUTT09Y.js"; +import "./index.BAmxwLeJ.js"; import "./messages3.js"; import "./erreurs3.js"; import "./messages2.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 5161e430..56604161 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.DxUTT09Y.js"; +import { p as parse } from "./index.BAmxwLeJ.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/page-cart.php b/web/app/themes/haiku-atelier-2024/page-cart.php index a5f2db71..31153cdb 100644 --- a/web/app/themes/haiku-atelier-2024/page-cart.php +++ b/web/app/themes/haiku-atelier-2024/page-cart.php @@ -5,6 +5,7 @@ declare(strict_types=1); +use Illuminate\Support\Number; use Timber\Timber; use function Crell\fp\pipe; @@ -15,16 +16,87 @@ require_once __DIR__ . "/src/inc/TraitementInformations.php"; $contexte = Timber::context(); $modeles = ["panier.twig"]; +$pays_acceptes = [ + "AD", + "AL", + "AM", + "AR", + "AT", + "AU", + "BA", + "BE", + "BG", + "BR", + "CA", + "CH", + "CL", + "CR", + "CU", + "CY", + "CZ", + "DE", + "DK", + "DZ", + "EE", + "EG", + "ES", + "FI", + "FR", + "GF", + "GP", + "GR", + "HR", + "HU", + "IE", + "IS", + "IT", + "JP", + "KR", + "LB", + "LI", + "LT", + "LU", + "LV", + "MA", + "MD", + "ME", + "MF", + "MQ", + "MT", + "MX", + "NC", + "NL", + "NO", + "NZ", + "PF", + "PL", + "PM", + "PS", + "PT", + "RE", + "RO", + "SE", + "SI", + "SK", + "SM", + "TN", + "TR", + "TW", + "US", + "YT", + "ZA", +]; + // Récupère les informations affichés des Produits du Panier $panier = []; -/** @var int $sous_total_panier Le sous-total de la Commande dans le Panier. */ -$sous_total_panier = pipe(WC()->cart->get_subtotal(), fn($sous_total) => intval($sous_total)); +/** @var float $sous_total_panier Le sous-total de la Commande dans le Panier. */ +$sous_total_panier = WC()->cart->get_subtotal(); /** @var string|null $code_promo Le code promo appliqué au Panier s'il existe. */ $code_promo = collect(WC()->cart->get_applied_coupons())->first(); /** @var int $sous_total_reduction Le total du montant de la Réduction appliquée au Panier */ -$sous_total_reduction = WC()->cart->get_totals()["discount_total"]; -/** @var int $total_panier Le total de la Commande dans le Panier. */ -$total_panier = pipe(WC()->cart->get_total(""), fn($total) => intval($total)); +$sous_total_reduction = Number::format(WC()->cart->get_totals()["discount_total"], precision: 2); +/** @var float $total_panier Le total de la Commande dans le Panier. */ +$total_panier = Number::format(floatval(WC()->cart->get_totals()["total"]), precision: 2); foreach (WC()->cart->get_cart() as $cle_panier => $article_panier) { $panier[$cle_panier] = [ @@ -43,17 +115,17 @@ foreach (WC()->cart->get_cart() as $cle_panier => $article_panier) { ]; } -// echo "


";
-// print_r($code_promo);
-// echo "
"; -// print_r(WC()->cart->get_applied_coupons()); -// print_r(WC()->cart->get_coupon_discount_totals()); -// echo "
"; - // Récupère les Adresses de l'Utilisateur $email = WC()->customer->get_billing_email(); $adresse_livraison = WC()->customer->get_shipping(); $adresse_facturation = WC()->customer->get_billing(); +$pays_livraison = collect(WC()->countries->get_countries())->only($pays_acceptes)->toArray(); +$total_livraison = Number::format(floatval(WC()->cart->get_totals()["shipping_total"]), precision: 0); + +echo "
";
+// print_r(WC()->countries->get_countries());
+// print_r($adresse_livraison);
+echo "
"; $contexte["email"] = $email; $contexte["adresse_livraison"] = $adresse_livraison; @@ -63,14 +135,12 @@ $contexte["code_promo"] = $code_promo; $contexte["sous_total_reduction"] = $sous_total_reduction; $contexte["total_panier"] = $total_panier; $contexte["produits_panier"] = $panier; - -// Récupère les Pays pris en charge par WooCommerce -// $countries_obj = new WC_Shipping_Zones(); -// $chosen_shipping_methods = WC()->session; -// echo "
";
-// print_r($countries_obj);
-// print_r($chosen_shipping_methods);
-// echo "
"; +$contexte["pays_livraison"] = $pays_livraison; +$contexte["sous_total_livraison"] = $total_livraison; +$contexte["methode_livraison"] = + collect(WC()->session->get("shipping_for_package_0")["rates"]) + ->first() + ?->get_label() ?? ""; // Charge les scripts et styles de la page function charge_scripts_styles_page_panier(): void { diff --git a/web/app/themes/haiku-atelier-2024/src/StarterSite.php b/web/app/themes/haiku-atelier-2024/src/StarterSite.php index 60836fff..9142f44e 100644 --- a/web/app/themes/haiku-atelier-2024/src/StarterSite.php +++ b/web/app/themes/haiku-atelier-2024/src/StarterSite.php @@ -167,7 +167,7 @@ class StarterSite extends Site { return $options; } - public function charge_traductions_theme(): void { - load_theme_textdomain("haiku-atelier-2024", get_template_directory() . "/languages"); - } + // public function charge_traductions_theme(): void { + // load_theme_textdomain("haiku-atelier-2024", get_template_directory() . "/languages"); + // } } diff --git a/web/app/themes/haiku-atelier-2024/src/sass/layouts/_colonnes-photos.scss b/web/app/themes/haiku-atelier-2024/src/sass/layouts/_colonnes-photos.scss index 6064c337..6570efd8 100644 --- a/web/app/themes/haiku-atelier-2024/src/sass/layouts/_colonnes-photos.scss +++ b/web/app/themes/haiku-atelier-2024/src/sass/layouts/_colonnes-photos.scss @@ -16,9 +16,13 @@ position: absolute; z-index: 5; bottom: calc(var(--position-y-fleches) / 2 - var(--espace-l) / 2); - width: 3rem; - height: 3rem; - padding: var(--espace-s); + display: flex; + place-content: center; + place-items: center; + min-width: 2rem; + max-width: 2rem; + min-height: 2rem; + max-height: 2rem; visibility: hidden; opacity: 0; border-radius: 100%; @@ -27,25 +31,30 @@ transition: 0.2s opacity, 0.2s visibility; &:first-of-type { - left: var(--espace-l); + left: var(--espace-s); } &:last-of-type { - right: var(--espace-l); + right: var(--espace-s); + } + + svg { + min-width: 1.5rem; + min-height: 1.5rem; } } &[data-images-presentes-debut] { .fleches-defilement__bouton:first-of-type { cursor: pointer; - opacity: 1; + opacity: 0.7; } } &[data-images-presentes-fin] { .fleches-defilement__bouton:last-of-type { cursor: pointer; - opacity: 1; + opacity: 0.7; } } diff --git a/web/app/themes/haiku-atelier-2024/src/sass/layouts/_grille-produits.scss b/web/app/themes/haiku-atelier-2024/src/sass/layouts/_grille-produits.scss index a2374d96..1abff923 100644 --- a/web/app/themes/haiku-atelier-2024/src/sass/layouts/_grille-produits.scss +++ b/web/app/themes/haiku-atelier-2024/src/sass/layouts/_grille-produits.scss @@ -35,7 +35,6 @@ display: flex; flex-flow: column nowrap; row-gap: var(--espace-xl); - padding: var(--espace-m); a { position: relative; @@ -106,6 +105,7 @@ display: flex; flex-flow: row nowrap; justify-content: space-between; + padding: var(--espace-m); margin-bottom: var(--espace-xl); h3 { diff --git a/web/app/themes/haiku-atelier-2024/src/sass/layouts/_panneau-informations-client.scss b/web/app/themes/haiku-atelier-2024/src/sass/layouts/_panneau-informations-client.scss index aefd2d27..eb4691d6 100644 --- a/web/app/themes/haiku-atelier-2024/src/sass/layouts/_panneau-informations-client.scss +++ b/web/app/themes/haiku-atelier-2024/src/sass/layouts/_panneau-informations-client.scss @@ -89,6 +89,10 @@ } } } + + .panneau__formulaires__message { + margin: var(--espace-l) 0; + } } .formulaire { @@ -119,8 +123,6 @@ place-items: center; justify-content: space-between; - // width: min(25rem, 100%); - + .formulaire__champs__champ { margin-top: var(--espace-l); } @@ -137,7 +139,7 @@ } } - input { + input, select { width: 15rem; } } 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 4ba608ad..ec83f304 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 @@ -57,6 +57,7 @@ export const SELECTEUR_ENSEMBLE_CODE_PROMO = "#panneau-panier #ensemble-code-pro 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"; +export const SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES = "#panneau-informations-client #message-formulaire-adresses"; // Accueil export const SELECTEUR_CONTENEUR_STORYTELLING = ".storytelling"; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages-utilisateur.ts b/web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages-utilisateur.ts new file mode 100644 index 00000000..99f7e6fe --- /dev/null +++ b/web/app/themes/haiku-atelier-2024/src/scripts/constantes/messages-utilisateur.ts @@ -0,0 +1,4 @@ +/** Constantes des Messages affichés aux Utilisateurs. */ + +export const ERREUR_GENERIQUE_SOUMISSION_ADRESSES = + "Something went wrong while submitting the addresses. Please refresh your page and try again?"; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/constantes/pays.ts b/web/app/themes/haiku-atelier-2024/src/scripts/constantes/pays.ts new file mode 100644 index 00000000..e69de29b diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/lib/nombres.ts b/web/app/themes/haiku-atelier-2024/src/scripts/lib/nombres.ts index f95534d8..0498f964 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts/lib/nombres.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts/lib/nombres.ts @@ -1,4 +1,16 @@ -import { N } from "@mobily/ts-belt"; +import { N, pipe } from "@mobily/ts-belt"; export const estEntreDeuxNombres = (nombre: number, min: number, max: number): boolean => N.gte(nombre, min) && N.lt(nombre, max); + +export const diviseParCent = (n: number | string): number => Number(n) / 100; + +export const arrondisAZeroOuDeuxDecimales = (n: number | string): string => + (Number(n) / Math.round(Number(n))) === 1 ? Number(n).toFixed(0) : Number(n).toFixed(2); + +export const inverseNombre = (n: number | string): number => Number(n) * -1; + +export const formateEnEuros = (n: number | string): string => `${String(n)}€`; + +export const diviseParCentEtArrondis = (nombre: number | string): string => + pipe(Number(nombre), diviseParCent, arrondisAZeroOuDeuxDecimales); diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-boutique.ts b/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-boutique.ts index 6ace36a0..c45abb94 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-boutique.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-boutique.ts @@ -4,29 +4,31 @@ import { pipe } from "@mobily/ts-belt"; import { tap } from "@mobily/ts-belt/Function"; -import { Either, EitherAsync } from "purify-ts"; +import { EitherAsync } from "purify-ts"; import { match, P } from "ts-pattern"; -import { parse, type ValiError } from "valibot"; +import { ValiError } from "valibot"; import type { APIFetchErrors } from "./lib/types/api/erreurs"; -import type { WCProductsArgs } from "./lib/types/api/products"; import type { WCV3Products, WCV3ProductsArgs } from "./lib/types/api/v3/products.ts"; +import type { ReponseSimplifiee } from "./lib/types/reseau"; import { ROUTE_API_NOUVELLE_PRODUCTS } from "./constantes/api.ts"; import { + ATTRIBUT_CHARGEMENT, + ATTRIBUT_DESACTIVE, ATTRIBUT_HIDDEN, ATTRIBUT_ID_CATEGORIE_PRODUITS, ATTRIBUT_PAGE, SELECTEUR_BOUTON_PLUS_PRODUITS, SELECTEUR_GRILLE_PRODUITS, } from "./constantes/dom.ts"; +import { lanceAnimationCycleTexte } from "./lib/animations.ts"; import { html } from "./lib/dom.ts"; -import { leveServerError } from "./lib/erreurs.ts"; -import { estReponse500 } from "./lib/gardes.ts"; -import { getBackendAvecParametresUrl, traiteReponseBackendWCSelonCodesHTTP } from "./lib/reseau.ts"; -import { WCV3ProductsSchema } from "./lib/schemas/api/v3/products.ts"; -import { WCV3ProductsArgsSchema } from "./lib/schemas/api/v3/products.ts"; -import { recupereElementDansDocumentOuLeve, recupereElementDocumentEither } from "./lib/utils.ts"; +import { BadRequestError, ServerError } from "./lib/erreurs.ts"; +import { getBackendAvecParametresUrl } from "./lib/reseau.ts"; +import { WCV3ProductsArgsSchema, WCV3ProductsSchema } from "./lib/schemas/api/v3/products.ts"; +import { recupereElementDansDocumentOuLeve } from "./lib/utils.ts"; +import { eitherParse } from "./lib/validation.ts"; /** États utiles pour les scripts de la page. */ type EtatsPage = { @@ -40,117 +42,137 @@ type EtatsPage = { const ETATS_PAGE: EtatsPage = _etats; // Éléments d'intérêt -const GRILLE_PRODUITS: HTMLDivElement = recupereElementDansDocumentOuLeve(SELECTEUR_GRILLE_PRODUITS); -const BOUTON_PLUS_DE_PRODUITS: Either = recupereElementDocumentEither( - SELECTEUR_BOUTON_PLUS_PRODUITS, -); +const E = { + BOUTON_PLUS_DE_PRODUITS: recupereElementDansDocumentOuLeve(SELECTEUR_BOUTON_PLUS_PRODUITS), + GRILLE_PRODUITS: recupereElementDansDocumentOuLeve(SELECTEUR_GRILLE_PRODUITS), +}; /** * TODO */ const initialisePageBoutique = (): void => { - const idCategorieProduits: null | string = GRILLE_PRODUITS.getAttribute(ATTRIBUT_ID_CATEGORIE_PRODUITS); + const idCategorieProduits: null | string = E.GRILLE_PRODUITS.getAttribute(ATTRIBUT_ID_CATEGORIE_PRODUITS); - BOUTON_PLUS_DE_PRODUITS.ifRight(bouton => { - bouton.addEventListener("click", (): void => { - const nouvellePage = Number(GRILLE_PRODUITS.getAttribute(ATTRIBUT_PAGE)) + 1; - const args: WCV3ProductsArgs = { - page: nouvellePage, - per_page: 13, - // Ajoute conditionnellement la Catégorie de Produits - ...(idCategorieProduits && { category: idCategorieProduits }), - }; + E.BOUTON_PLUS_DE_PRODUITS.addEventListener("click", (): void => { + const nouveauNumeroPage = Number(E.GRILLE_PRODUITS.getAttribute(ATTRIBUT_PAGE)) + 1; + const args: WCV3ProductsArgs = { + page: nouveauNumeroPage, + per_page: 12, + // Ajoute conditionnellement la Catégorie de Produits + ...(idCategorieProduits && { category: idCategorieProduits }), + }; - type APIProductsErrors = - | APIFetchErrors - | ValiError - | ValiError; + type APIProductsErrors = + | APIFetchErrors + | ValiError + | ValiError; - // Réalise la requête et traite sa réponse - Either - // Valide les arguments de la requête - .encase, WCV3ProductsArgs>(() => parse(WCV3ProductsArgsSchema, args)) - .map( - async (args: WCProductsArgs) => { - // Réalise la requête - await EitherAsync(() => - getBackendAvecParametresUrl({ - authString: ETATS_PAGE.authString, - nonce: ETATS_PAGE.nonce, - route: ROUTE_API_NOUVELLE_PRODUCTS, - searchParams: new URLSearchParams(args).toString(), - }) - ) - .map((reponse: Response) => { - // Traite le cas d'erreur 500 - if (estReponse500(reponse)) leveServerError("500 Server Error"); - // Retourne le corps de la Réponse - return reponse.json(); - }) - .map((corpsReponse: unknown) => - // Traite tous les codes HTTPs possibles - traiteReponseBackendWCSelonCodesHTTP( - corpsReponse, - WCV3ProductsSchema, - ) - ) - .ifRight((donnees: WCV3Products) => { - // Cache le bouton s'il y a moins de 12 Produits disponibles (que l'on est à la dernière page) - if (donnees.length < 12) { - bouton.toggleAttribute(ATTRIBUT_HIDDEN); - } + void EitherAsync + .liftEither(eitherParse(args, WCV3ProductsArgsSchema)) + .ifRight(() => { + // Désactive le Bouton pour empêcher des requêtes concurrentes + E.BOUTON_PLUS_DE_PRODUITS.setAttribute(ATTRIBUT_DESACTIVE, ""); + E.BOUTON_PLUS_DE_PRODUITS.setAttribute(ATTRIBUT_CHARGEMENT, ""); - // Créé un DocumentFragment qui recevra tous les nouveaux Produits - const fragment: DocumentFragment = document.createDocumentFragment(); + // Lance un cycle d'animation sur le texte de chargement + const animation = lanceAnimationCycleTexte({ + attribut: ATTRIBUT_CHARGEMENT, + element: E.BOUTON_PLUS_DE_PRODUITS, + etapes: [ + "Loading", + "Loading.", + "Loading..", + "Loading...", + ], + }); + animation.callback(); + animation.interval = setInterval(animation.callback, 500); + }) + .chain((args: WCV3ProductsArgs) => + EitherAsync(() => + getBackendAvecParametresUrl({ + authString: ETATS_PAGE.authString, + nonce: ETATS_PAGE.nonce, + route: ROUTE_API_NOUVELLE_PRODUCTS, + searchParams: new URLSearchParams(args).toString(), + }) + ) + ) + .chain((reponse: Response) => + EitherAsync(async ({ throwE }) => { + const reponseSimplifiee: ReponseSimplifiee = { + body: await reponse.json(), + status: reponse.status, + }; - // Créé les Éléments
à insérer - for (const produit of donnees.slice(0, 12)) { - pipe( - html` -
-
- - - ${produit.image_repos ?? ""} - + return match(reponseSimplifiee) + .with({ status: 500 }, () => throwE(new ServerError("500 Server Error"))) + .with({ status: 400 }, () => throwE(new BadRequestError("400 Server Error"))) + .with({ status: 200 }, () => reponseSimplifiee.body) + .run(); + }) + ) + .chain((corpsReponse: unknown) => EitherAsync.liftEither(eitherParse(corpsReponse, WCV3ProductsSchema))) + .ifRight((donnees: WCV3Products) => { + // Cache le bouton s'il y a moins de 12 Produits disponibles (que l'on est à la dernière page) + if (donnees.length < 12) { + E.BOUTON_PLUS_DE_PRODUITS.toggleAttribute(ATTRIBUT_HIDDEN); + } - - ${produit.image_survol ?? ""} - - + // Créé un DocumentFragment qui recevra tous les nouveaux Produits + const fragment: DocumentFragment = document.createDocumentFragment(); -
-

- ${produit.name} -

-

- ${produit.prix_maximal}€ -

-
-
-
- `, - tap(article => { - fragment.appendChild(article); - }), - ); - } + // Créé les Éléments
à insérer + for (const produit of donnees.slice(0, 12)) { + pipe( + html` +
+
+ + + ${produit.image_repos ?? ""} + - // Ajoute les nouveaux Produits dans le DOM - GRILLE_PRODUITS.appendChild(fragment); - GRILLE_PRODUITS.setAttribute(ATTRIBUT_PAGE, String(nouvellePage)); - }) - .ifLeft(e => { - match(e) - // TODO: Créer une méthode pour rapporter les problèmes de validation - .with({ issues: P.select(), name: "ValiError" }, problemes => console.error("ValiError", problemes)) - .otherwise(e => console.error("Autre", e.name, e)); - }) - // Pas d'intérêt à récupérer le résultat - .void(); - }, - ); - }); + + ${produit.image_survol ?? ""} + + + +
+

+ ${produit.name} +

+

+ ${produit.prix_maximal}€ +

+
+
+
+ `, + tap(article => fragment.appendChild(article)), + ); + } + + // Ajoute les nouveaux Produits dans le DOM + E.GRILLE_PRODUITS.appendChild(fragment); + E.GRILLE_PRODUITS.setAttribute(ATTRIBUT_PAGE, String(nouveauNumeroPage)); + + E.BOUTON_PLUS_DE_PRODUITS.textContent = "Show more"; + }) + .ifLeft((erreur: APIProductsErrors) => { + // Traite les Erreurs et affiche un Message à l'Utilisateur + match(erreur) + .with(P.instanceOf(ValiError), e => console.error("ValiError", e.issues)) + .otherwise(e => console.error("Erreur", e)); + + E.BOUTON_PLUS_DE_PRODUITS.textContent = "Error, try again?"; + }) + .finally(() => { + // Désactive l'animation de chargement et rend le Bouton de nouveau cliquable + E.BOUTON_PLUS_DE_PRODUITS.removeAttribute(ATTRIBUT_CHARGEMENT); + E.BOUTON_PLUS_DE_PRODUITS.removeAttribute(ATTRIBUT_DESACTIVE); + }) + .run(); }); }; diff --git a/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier-adresses.ts b/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier-adresses.ts index 19a7f1bf..42bbbf0b 100644 --- a/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier-adresses.ts +++ b/web/app/themes/haiku-atelier-2024/src/scripts/scripts-page-panier-adresses.ts @@ -1,6 +1,6 @@ import { pipe } from "@mobily/ts-belt"; import { EitherAsync, Maybe } from "purify-ts"; -import { match } from "ts-pattern"; +import { match, P } from "ts-pattern"; import { ValiError } from "valibot"; import type { WCStoreCart, WCStoreShippingRateShippingRate } from "./lib/types/api/cart"; @@ -16,12 +16,14 @@ import { SELECTEUR_ENTREES_PANIER, SELECTEUR_FORMULAIRE_PANIER, SELECTEUR_INSTRUCTIONS_CLIENT, + SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES, SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT, SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE, } from "./constantes/dom"; +import { ERREUR_GENERIQUE_SOUMISSION_ADRESSES } from "./constantes/messages-utilisateur"; import { lanceAnimationCycleTexte } from "./lib/animations"; import { eitherJsonParse, eitherSessionStorageGet } from "./lib/dom"; -import { leveErreur, leveServerError, ServerError } from "./lib/erreurs"; +import { BadRequestError, leveErreur, leveServerError, ServerError } from "./lib/erreurs"; import { estReponse500 } from "./lib/gardes"; import { postBackend } from "./lib/reseau"; import { WCStoreCartSchema } from "./lib/schemas/api/cart"; @@ -46,6 +48,9 @@ const ELEMENTS = { ENTREES_PANIER_EITHER: recupereElementsDocumentEither(SELECTEUR_ENTREES_PANIER), FORMULAIRE_PANIER: recupereElementDansDocumentOuLeve(SELECTEUR_FORMULAIRE_PANIER), INSTRUCTIONS_CLIENT: recupereElementDansDocumentOuLeve(SELECTEUR_INSTRUCTIONS_CLIENT), + MESSAGE_FORMULAIRE_ADRESSES: recupereElementDansDocumentOuLeve( + SELECTEUR_MESSAGE_FORMULAIRE_ADRESSES, + ), TOTAL_LIVRAISON_COUT: recupereElementDansDocumentOuLeve(SELECTEUR_SOUS_TOTAL_LIVRAISON_COUT), TOTAL_LIVRAISON_PRESTATAIRE: recupereElementDansDocumentOuLeve( SELECTEUR_SOUS_TOTAL_LIVRAISON_PRESTATAIRE, @@ -92,7 +97,7 @@ export const initialiseBoutonSoumissionAdresses = (): void => { address_2: "", city: donneesFormulaire["facturation-ville"] ?? donneesFormulaire["livraison-ville"] ?? "", company: "", - country: "FR", + country: donneesFormulaire["facturation-pays"] ?? donneesFormulaire["livraison-pays"] ?? "", email: donneesFormulaire["facturation-email"] ?? donneesFormulaire["livraison-email"] ?? "", first_name: donneesFormulaire["facturation-prenom"] ?? donneesFormulaire["livraison-prenom"] ?? "", last_name: donneesFormulaire["facturation-nom"] ?? donneesFormulaire["livraison-nom"] ?? "", @@ -105,7 +110,7 @@ export const initialiseBoutonSoumissionAdresses = (): void => { address_2: "", city: donneesFormulaire["livraison-ville"] ?? "", company: "", - country: "FR", + country: donneesFormulaire["livraison-pays"] ?? "", first_name: donneesFormulaire["livraison-prenom"] ?? "", last_name: donneesFormulaire["livraison-nom"] ?? "", phone: donneesFormulaire["livraison-telephone"] ?? "", @@ -135,6 +140,7 @@ export const initialiseBoutonSoumissionAdresses = (): void => { return match(reponseSimplifiee) .with({ status: 500 }, () => throwE(new ServerError("500 Server Error"))) + .with({ status: 400 }, () => throwE(new BadRequestError("400 Bad Request Error"))) .with({ status: 200 }, () => reponseSimplifiee.body) .run(); }) @@ -146,7 +152,7 @@ export const initialiseBoutonSoumissionAdresses = (): void => { const sousTotalLivraison = panier.totals.total_shipping === "0" ? "Free" - : `${String(panier.totals.total_shipping)}€`; + : `${String(Number(panier.totals.total_shipping) / 100)}€`; const prestataireLivraison = panier.shipping_rates[0]?.shipping_rates[0]?.name ?? ""; // Met à jour les informations de Livraison affichés à l'Utilisateur @@ -164,7 +170,23 @@ export const initialiseBoutonSoumissionAdresses = (): void => { // Active le Bouton pour la création de la Commande initialiseBoutonCreationCommande(); }) - .ifLeft(erreur => match(erreur).with) + .ifLeft(( + erreur: + | ServerError + | ValiError + | ValiError, + ) => + match(erreur) + .with(P.instanceOf(ValiError), e => { + console.error(e.issues); + ELEMENTS.MESSAGE_FORMULAIRE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES; + }) + .with(P.instanceOf(ServerError), e => { + console.error(e); + ELEMENTS.MESSAGE_FORMULAIRE_ADRESSES.textContent = ERREUR_GENERIQUE_SOUMISSION_ADRESSES; + }) + .exhaustive() + ) .finally(() => { // Désactive l'animation de chargement et rend le Bouton de nouveau cliquable ELEMENTS.BOUTON_ACTIONS_FORMULAIRE.removeAttribute(ATTRIBUT_CHARGEMENT); 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 951ea4a8..883ee682 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,6 +1,6 @@ import { D, F, pipe } from "@mobily/ts-belt"; import { Either, Maybe } from "purify-ts"; -import { parse, ValiError } from "valibot"; +import { parse, type ValiError } from "valibot"; import type { MessageMajContenuPanierSchema } from "./lib/schemas/messages.ts"; import type { WCStoreCart, WCStoreCartItem } from "./lib/types/api/cart"; @@ -37,6 +37,7 @@ import { valideMessageMajBoutonPanier, valideMessageMajContenuPanier, } from "./lib/messages.ts"; +import { arrondisAZeroOuDeuxDecimales, diviseParCent, formateEnEuros, inverseNombre } from "./lib/nombres.ts"; import { postBackend, traiteReponseBackendWCSelonCodesHTTP } from "./lib/reseau.ts"; import { WCStoreCartRemoveItemArgsSchema } from "./lib/schemas/api/cart-remove-item.ts"; import { WCStoreCartUpdateItemArgsSchema } from "./lib/schemas/api/cart-update-item.ts"; @@ -102,7 +103,7 @@ const desactiveBoutonsEntreesPanier = (entrees: Array): void => elements.boutonSoustraction.setAttribute(ATTRIBUT_DESACTIVE, ""); elements.boutonAddition.setAttribute(ATTRIBUT_DESACTIVE, ""); elements.boutonSuppression.setAttribute(ATTRIBUT_DESACTIVE, ""); - elements.boutonSuppression.textContent = "C= C= C= C= C=┌(;・ω・)┘"; + elements.boutonSuppression.textContent = "Loading..."; }); const majEtatsActivationBoutons = (entrees: Array): void => @@ -181,9 +182,9 @@ const initialiseMajEntreesPanier = (): void => { // Émet un Message avec le nouveau contenu du Panier emetMessageMajContenuPanier({ produits: panier.items, - sousTotalProduits: Number(panier.totals.total_items) / 100, - sousTotalReduction: Number(panier.totals.total_discount) / 100, - totalPanier: Number(panier.totals.total_price) / 100, + sousTotalProduits: diviseParCent(panier.totals.total_items), + sousTotalReduction: diviseParCent(panier.totals.total_discount), + totalPanier: diviseParCent(panier.totals.total_price), }); // Retire l'entrée du Panier du DOM entree.remove(); @@ -241,9 +242,9 @@ const initialiseMajEntreesPanier = (): void => { // Émet un Message avec le nouveau contenu du Panier emetMessageMajContenuPanier({ produits: panier.items, - sousTotalProduits: Number(panier.totals.total_items) / 100, - sousTotalReduction: Number(panier.totals.total_discount) / 100, - totalPanier: Number(panier.totals.total_price) / 100, + sousTotalProduits: diviseParCent(panier.totals.total_items), + sousTotalReduction: diviseParCent(panier.totals.total_discount), + totalPanier: diviseParCent(panier.totals.total_price), }); }), ); @@ -298,9 +299,9 @@ const initialiseMajEntreesPanier = (): void => { // Émet un Message avec le nouveau contenu du Panier emetMessageMajContenuPanier({ produits: panier.items, - sousTotalProduits: Number(panier.totals.total_items) / 100, - sousTotalReduction: Number(panier.totals.total_discount) / 100, - totalPanier: Number(panier.totals.total_price) / 100, + sousTotalProduits: diviseParCent(panier.totals.total_items), + sousTotalReduction: diviseParCent(panier.totals.total_discount), + totalPanier: diviseParCent(panier.totals.total_price), }); }), ); @@ -356,7 +357,7 @@ const initialiseMajContenuPanier = (): void => { // Met à jour les valeurs entree.setAttribute("data-quantite", String(ligne.quantity)); - prixLigne.textContent = `${String(Number(ligne.totals.line_subtotal) / 100)}€`; + prixLigne.textContent = pipe(diviseParCent(ligne.totals.line_subtotal), formateEnEuros); champQuantite.setAttribute("value", String(ligne.quantity)); // Réactive les Boutons @@ -364,9 +365,13 @@ const initialiseMajContenuPanier = (): void => { }); // Met à jour les totaux du Panier - SOUS_TOTAL_REDUCTION.textContent = `-${String(donnees.sousTotalReduction)}€`; - SOUS_TOTAL_PRODUITS.textContent = `${String(donnees.sousTotalProduits)}€`; - TOTAL_PANIER.textContent = `${String(donnees.totalPanier)}€`; + SOUS_TOTAL_PRODUITS.textContent = formateEnEuros(donnees.sousTotalProduits); + SOUS_TOTAL_REDUCTION.textContent = pipe( + inverseNombre(donnees.sousTotalReduction), + arrondisAZeroOuDeuxDecimales, + formateEnEuros, + ); + TOTAL_PANIER.textContent = pipe(arrondisAZeroOuDeuxDecimales(donnees.totalPanier), formateEnEuros); }); }); }) diff --git a/web/app/themes/haiku-atelier-2024/views/boutique.twig b/web/app/themes/haiku-atelier-2024/views/boutique.twig index 3f07b08f..d9479532 100644 --- a/web/app/themes/haiku-atelier-2024/views/boutique.twig +++ b/web/app/themes/haiku-atelier-2024/views/boutique.twig @@ -18,16 +18,15 @@
{% include "parts/pages/shop/grille-produits.twig" %} - {% if produits|length == 12 %} -
- -
- {% endif %} +
+ +
{% endblock contenu %} diff --git a/web/app/themes/haiku-atelier-2024/views/parts/en-tete.twig b/web/app/themes/haiku-atelier-2024/views/parts/en-tete.twig index 12b9f89a..ca34ddff 100644 --- a/web/app/themes/haiku-atelier-2024/views/parts/en-tete.twig +++ b/web/app/themes/haiku-atelier-2024/views/parts/en-tete.twig @@ -80,7 +80,10 @@ {# Bouton « Panier » avec l'indicateur de quantité de Produits #} -